martes, 19 de enero de 2016

Who am i?

My name is Antonio Ortiz Pola, born in 1987, and a computer lover since the 90's, i was graduated from Tecnológico de Morelia as systems engineer, since then i have been able to participate in several projects, which can be found below.
Mi motivation for this blog, is somehow return some of the knowledge i have been able to acquire through the years, because mi origins are humble, but thanks to something so simple like a computer and an Internet connection, my life was changed forever, not only as a window to an open world, but to many knowledge that i could have not obtained in any other way. Thanks to all the people who took the time to write posts, answer questions, making books, and almost everything for free, just for share.
My main language is Spanish, but i want to practice my English, so sorry if i made some mistake, if you find it you can tell me in the comments so I can amend it.

Books

The list of some list that i have read, before i must say that many knowledge comes from experience, stackoverflow, and all kinds of blogs, documentations and many more sources, but the books are almost always good, and explain things in detail that many blogs can not, i mean, the books cost, and is some money for the creator, but for most blogs, that is not the case, so we can go in detail as we want, because we must have jobs to maintain us.

Main projects

2007 - Point of sale for spare parts for mobile phones

This is where my "real" experience begin, i played with a lot of things, but this was my first project used in production in a real store.

The project was simple, purchases from providers, sales to clients, some simple reports. It was made with a friend, he was in charge of databases and some store procedures, i was in charge of the user interface and the user manual.

The main stack used:
  • Java 1.6
  • Java Swing for the user interface
  • MySQL for the database
We also used
  • Netbeans as IDE
  • Word for documentation
  • JasperReports for PDF generation
The main, or unique idea, was the compatibility list, which allowed to capture the accessory with the models of the cellphones they were compatible, simplifying the training for new employees, this software was in production around four years, and was just spaghetti code glued everywhere, but it worked!

Latter version one was updated by version two, with the same functionality but a reduction in code, here heavy inheritance was implenented in the components, lazy loadings for long list and a lot of code customization for the interface.

Saddly I do not have the code anymore, but I have the manual!


What more did I learn:
  • Programming is fun with friends
  • It is never to early to refactor code
  • You need good initial and detailed requirements (If you do not know where do you want to go, then you will end in a place where you do not want to be)
  • A system in use is a system with change pressure, it is not just that "it works" it needs to be maintainable
  • Try to avoid duplicate code

2009 - COECyT Michoacán

This was during my professional residencies, COECyT means "Consejo Estatal de la Ciencia y Tecnología" (State Council of Science and Technology), here we made some web pages.

I worked with a friend in the sites, again, the pages are not longer available and others are internal, but some sites looked like this (With the header fixed, I did not found the final version).


Here we mainly code with PHP and Code Igniter, for the web pages we used tons of JQuery and CSS.

2010 - TECODA

The same people from our residencies called my friend and me for our good performance to be developers in a small startup working for a seafood store with 7 branch stores. The system started as a simple Point of Sale, with a Java Swing Client in each branch and a central server with a web admin system for the accountants and administrators.

This was our first real big application, the code was a mess, so we started refactoring and improving the performance of several slow pages. The system started to grow with modules like personnel and accounting control, loan handling to eployees, credits, product traceability (very important for Federal rules about Seafood distribution), paysheets and many other stuff.

Here our stack was:

  • Again PHP with CodeIgniter
  • Apache server
  • PostgreSql database
  • JQuery and heavy ajax usage
  • Subversion for source control

In this project we did everything, from doing the interviews with the customer, get the requirements, plan the development, make the changes, test and present to the clients, was big fun!. Eventually we had three developers at our charge, teaching guiding and administrating the tasks for tem.

Some months latter we mutate the application to handle a big shoe factory and optimized code to handle a catalog of more than 75,000 different products with around 250,000 products movements per day.

Saddly this systems are internal and i can not show you some captures, but i can share you what more I learned:

  • You need formality for and from the clients, you need to document the requirements, agreements and decision making to keep the stakeholders in the same channel as your team
  • The value of your work as architech does not only come from thechnical knowledge, but also from the bussiness knowledge
  • SVN is hard when there is a lot of people
  • Writing bad code almost always comes to bite you in the future, some code is only understandable for the developer who wrote it, and after some time not even for himself
  • The technical debt is real, expensive and grows exponentially if you do not take care of
  • Handle backups, no matter how confident you are in your software and hardware

2012 - Zeitek

Vehicle control system for Michoacán

After some time with PHP I decided to try new oportunities, so I got one real big opportunity with a private company who works for the Mexican government, specialist in controled documents like driver licence, circulation card for vehicles, birth certificates and other secured forms.

My first task there were to create the architecture for a vehicle control system, with payments, fines, valued forms handling (like Circulation card and vehicle plates).

This was the most challenging project that I had, since I had total control over the Tecnologies, design and technical desicions. The only strict requitement was the use of Java for the web system and Oracle as the database.

The project managers suggested Struts, but after some research, Spring seemed better, with more community and improvements in each release, but since I loved the standards and Java EE 6 was just out of the oven, I created a quick proof of concept and felt in love with the dependency injection. I had tried in the past with JE2E, but the xml syntax turned me down, but now there was the annotations, allowing to configurate the class in the same file as the code, and this was great.

Se the stack ended up being:
  • Java and Java EE 6
    • JPA Implementation with Hibernate
    • JSF 2.0 for the user interface
    • RichFaces and latter PrimeFaces for the components interface
    • Implementation of dependency injection, transaction management for JPA and partial updates for the interface
  • Glassfish server
  • Jasperteports for report generation
  • Oracle database
  • Maven for dependency mangement
  • Suversion and latter git for source management
Some tools used:
  • Atlassian products (All introduced, installed and managed by me).
    • Jira for task management
    • Confluence as documentation hub
    • Bitbucket for source code control
  • Jaspersoft Studio for report design
  • Netbeans as IDE
  • JRebel for Java hot update for development (avoid web server restart when the code changes)
I had two project managers, but they where from other state, and their support fadded away in early stages of development, latter they support us, so I felt happy to take control over the project, but say that I was responsable of the system success would be wrong, I had the oportunity to select new developers, and later I wrote the Selection Test PDF (I have share permission, it is not in use anymore), and selected a really great team which growed up through 2 years from only me, to 5 developers and one tester.

The system took almost one year in development, after that, it entered into a cycle of weekly updates.
This was a very personal success for all the team involved since we all where from the State of Michoacán, so it was great to help at that scale, we could never got official numbers from the previous system, but the improvements in time required to make a government procedure were cut in half or more.

The system was complex, with more than 200 different views with constant changes, and network and hardware restrictions in some offices (some offices had thin clients with less than 250mb of RAM, or connected to old phone modems), but It was also very stable, It could work with no problems in the payments seasson, when lots of people go to the offices to make procedures, handling between 1 and 1.5 millions of procedures yearly, implemented in around 130 offices around the state. The system was in use  from 2014 to 2018, when changes in goverment forced the implementation of a new integral system with other institutions.

Ended up learning a lot of things from this experince, but to mention some:
  • You need to take account of the learning curve of your tools, for a newcomer the full Java EE stack is overwelming
  • The Developer Experience matters (the experience that the developers have when they contribute code to a system), not only the User Experience
  • It is better start slow, with solid fundations, and then the grow can be faster, starting faster to have "something to show" almost always will slow you down in the future
  • It is hard to work for organizations with no organization, before design anything, everybody must be in the same channel, have formally defined roles and tasks
  • Your value as programmer it is not only the technical expertice, but the capacity to understand and model the bussines process of the organization
  • Same with the code, its value does not come from the technical complexity, but from the real ussefulness and the knowledge that holds for the organization
  • Caches are a really great tool for information that does not change constantly
  • You need to improve both your technical skills, and your people skills, developing system is a group effort, it needs comunication, leadership and participation from all parts involved
  • And many more things

The other systems

After the success of the Michoacan project, I had the oportunity to rework the code to implement Java EE 7 and improve its modularity, making possible to use the same code base in several other projects. It was great to reuse full modules as user, profiles and security control, among a ton of other classes and functionalities.

This allowed us to work in two projects in parallel, sharing improvements and some code parts. The new version included restful endpoints for Android applications. This system base was forked several times for other projects for various States in México.

The system hold a really great flexibility, allowing us to addapt to our clients requerimients, like the use of other databases (It was implemented in Oracle, latter in SQL Server and PostgreSql), the adition of new modules or the personalization of the current ones.

Thanks to keep our accidental complexity low, we could be focused of the bussiness itself, we had to learn legislation and deal with knowledge fragmentation inside the institutions and the lack of systematic procedures.

2013 - Multitouch table

While I was working in Zeitek, and since I love to learn new technologies, I got together with two firends to made some experimentation with Python and Kivy for multi-touch applications.

First we tried MT4J, and got really far with the components, but it had terrible performance problems with text

We built a table with some led's and later tested with some sensors and developed an application to show a menu, make and order and other things, sadly for time and disposition of the members this one left unfinished, but all the learning was awesome.



As for now, i had another great opportunity to work with a really great company, working in systems with high load and availability, here my stack is .Net and all his ecosystem, Sql server included, also with the opportunity to work with knockoutJs, and now react, browserify and other JavaScript tools (i just started to learn that JavaScript technologies).

Resume video