Mimosa is building a product line of ultrafast 802.11n MIMO wireless devices that will allow suppliers to set up quick and easy backbones, as well as supply wireless access on a scale that is currently too expensive or difficult to do.

I started working for Mimosa on a project with Symbio, when they outsourced the GUI development to China. After working with them for some time they asked Symbio to let them hire me directly, so I continued working remotely from my home in Beijing. Because they were planning a series of similar products and wanted the management software to run on various phone platforms as well as PC, they got me to design and implement the middleware that would make it possible to write a simple and generic GUI that could run on all those different platforms, and not be too difficult to modify or maintain. I was responsible for the API, and worked closely with the GUI developers at Symbio in Chengdu. Management recognized the need to have a good foundation to build on, and on more than one occasion we were given time in the schedule to go back and refactor the design as new requirements were made, or as we recognized ways to improve the generality of the design.

It was kind of ironic that we had the time and support to write a good foundation for the API and GUI, because when the product was first put together and shown to upper management it was soundly rejected for being too slow. Running an object oriented PHP application stateless under HTTP is not fast, but that was not the problem. Upper management pictured something that responded instantly, like a dedicated device would. The time loading and running PHP wasn't the deal breaker - the network lag time alone was enough to make it unacceptably slow in management's eyes. The design had to be changed in matter of days from one with the intelligence in the middleware to one where all the work was done in a heavy Javascript application on the user device. The middleware was only used for write operations. To get values the javascript GUI would poll for a file written by an awk script that generated the current values of all display parameters. After all the thought and work developing a package fulfilling the initial design, we ended up scrambling to put together something that worked before the deadline. I say "we", actually for the API there was not much work to do. The guy doing the GUI in Chengdu did a marvelous job moving all the intelligence into the GUI. I have to admit the end result was much more user friendly than what we originally wrote - if only upper management had communicated what they wanted to the software manager, we would have had a few months to do it properly, instead of hacking together a system in a couple weeks.

I was pleased with the overall design of the API though. It was an object oriented system, easily extensible, and implemented its own inheritance types that built everything for a vanilla device and made it easy to override or extend the base objects for other devices. While the full strength of the design ended up not being used for the API, it was for the REST interface. I wrote a thin wrapper layer for the API that made each API call available as a REST call by adding a simple 2-line boilerplate file. (new services could also be written that were not API calls, if desired). For this, the total delay (network - middleware - network) on the order of 5-8 seconds was not too long, so the API was/is still used in this context.

In addition to working on the API, Mimosa gave me a steady supply of other projects to work on too. I really enjoyed this part of the job. The design work is more fun than the implementation and support. The largest other project was for their cloud management software. There needed to be a daemon running on the device to communicate with the management server, and to be able to get through a corporate firewall. I wrote what I consider a very good client. This was a multithreaded application that maintained an open connection to the server. It accepted requests from the server and either handled them internally, passed them to predefined external programs, or by default interpreted them as API calls. It also watched 2 named pipes that could be used to submit push reports or by external programs to send command responses. The connection was through a cloud-based server program. Rather than writing it from scratch I researched a little and decided to use Netty, an open source package. Netty does asynchronous network I/O, and it has the advantage of supplying things like SSL, HTTP server, and HTTP client. In addition, it is supposed to scale very well, which will be important as Mimosa grows. I think using this package is a big win for Mimosa. The drawback was I had only a week to write it in, and since I was not familiar with Netty the code is very much a beginner's work, and needs extensive improvement, or perhaps a rewrite. I found Netty's documentation to be poor, but the sample code was outstanding. I was able to use their HTTP client and server samples to get working versions in just a few days. Adding SSL was a trivial enhancement.

Beside this there were several other projects. I took over support for our SNMP client when the original developer left. I also wrote the security code that is being used for clone protection. This enables the device through a client-server interaction, written in Java and storing the results using MySQL.

I was disappointed that my contract was terminated. The problem was the changing state of the development project in general and the GUI in particular. I have found when working remotely it is very important to choose appropriate projects. In this case, the original design and writing of the API and of the GUI were good projects to do via telecommute, but supporting and debugging were not. The design was still fluid, and we would often get requests to change things. Sometimes I might have problems reproducing bugs that people were seeing in the main office. In addition, juggling all my different responsibilities meant that sometimes I would guess wrong on priorities, leaving what management considered to be unacceptable GUI bugs untouched for days while I worked on the cloud management or device activation. I fully agreed with them that it was time for the GUI and the API to be taken over by local developers in the US. What I did not anticipate was Mimosa deciding that was the best way to do all there development, ongoing. They invited me to move to the US and continue working for them, but when I declined that they decided to end their China relations, terminating their contracts with both me and Symbio.

Back to resume
Back to home page