Starting in January 2008, I started a internship with Pramari, LLC. They are an RFID consulting firm and an open source middleware developer. My first project with them was develop an emulator for the Mercury 4, Thing Magic reader to plug into their existing GUI and set of readers named Rifidi. The syntax of the commands where very similar to SQL. The first part of the project was to get something sent some emulated tags back and integrate it into the existing GUI.
The next step of this project was to add non tag related commands. To do this I had to refactor this particular emulator to be more extendable. To do this, I used a modular style programing using polymorphism.
During these two phases of this project I developed sets of JUnits to automate the testing of the emulator. This helped in catching regressions. During these two phases of this project, I normally worked independently (while telecommuting) with minimal supervision (often once or twice a week with my supervisor and once a week meeting the rest of the company which was less than 10 people), and often tried to find the solution to a problem myself before I contacted my supervisor.
My second project with them I help develop an edge server/client project from the from inception to about three months. This was a very good learning experience because while helping on this project, temporarily relocated to their main office for three months, and this helped build my experience working with a team. During this project I learned Modal-Controller-View methodology by helping implement it in the project from the beginning. As the weeks went by, we first made something that ‘just works’ then figured out the problem points latter, then address these issues as they came up. This cycle was often completed in one or two weeks… and in some cases less than one week, i.e ‘rabid development’. In some cases, refactoring was in order but others… the codebase was scraped and we used what we learned to build a better version.
Some of my takes was to help build some of the core classes for the server part and part of the GUI for the client. The server part was challenging because could spawn hundreds of threads to do its work, and we had to address this to get it to work better–not to mention the synchronization between threads.
On the client side, I created a GUI plugin for it from the ground up. Part of the task was to use JMS and RPC to read the tags that the server got and displayed them. This plugin was developed in SWT and Eclipse and was built as a modular plugin. The other part of the client I worked on with my co-workers was how the client communicated with the sever. This was fairly interesting as the server and client were often on other machines (or on separate processes if on the same machine) while being tested… and sometimes across the Atlantic Ocean with one machine in Connecticut and the other in the abroad office in Germany.
One of the on going projects i worked on was QA testing. Testing the Rifidi and Edge Client GUI’s for bugs was interesting because it had to be done by hand and I had to find those obscure bugs that come up that don’t show up in normal use. One bug I found was hard to nail down the resulting problem was. It was with a dialog control that, when minimized and then maximized, did not repaint the child controls. I eventually found that the problem was in SWT itself and not the application. Therefore, I submitted a bug to Eclipse and then preceded to use the problem control’s hooks to build a work around so that whenever the control was maximized, it issued a paint command for the control.
The internship ended because the company had to downsize to service, but on the bright side I gain many new experiences and professional relationships.