Running a one-man development company is not for the faint-hearted. If I'd known this back at the start, I might well have stuck with the day job but, after 12+ years, I can honestly say it's been an rewarding experience that I wouldn't have missed.
Working on KineticFusion, my mapping research, KineticGrid and assorted new pursuits has given me exposure to the many aspects of running a business, but has also allowed me to delve into a broad range of technologies. Making quick business and technical decisions, following how these decisions have impacted weeks and months into the future, and seeing how these choices have impacted clients, employers and the products themselves have been revelatory.
For example, some areas I worked on when developing KineticFusion are:
- Reverse engineering of SWF format and all later SWF versions
- Reverse-engineering of compiled ActionScript 1.0 and 2.0 using complex pattern-matching algorithms
- Parsing embedded media such as JPEG, GIF, PNG, WAV, and MP3 for storage as external resources
- Creation of full optimised SAX architecture for the RVML dialect
- Creation of font parser for TrueType fonts and media parsers for images and MP3s
- Writing a full AS2 parser, semantic analyzer and code generator from scratch using ANTLR
- Development of a stateful ActionScript compiler capable of very fast (sub-second, even back then!) recompiles of large class hierarchies
- Designing and documenting a componentized API for easy integration into a server side environment
- Designing architecture for extending RVML with user-created tag libraries (it was so nearly the next Flex...)
- Creation of a simple, fast, and efficient Java Swing UI for interactive execution
- Creation of Java-only and Windows NDIS installers with several NDIS extensions
- Full automation of all builds compiling source-code, generating documentation and SWF examples, and packaging into both windows and Java installers
- Optimization and obfuscation of Java Jar code using Proguard and bespoke Proguard extensions
- Design of full application documentation in XML, with dynamic generation using a combination of XSLT and Java DOM transformers. These were used to generate 3 different documentation sets for Developer Edition installation, Server Edition installation, and for online use.
- Design and implementation Java Licensing
- Encryption implementation in both Java and PHP
- Creation of web-based automated PHP license generation
- Creation, and management of content of dynamic HTML and PHP used for web pages
- Customization and management of online user forums and mailing lists
- Integration of a full e-commerce solution into the web site
- Ensuring that all support calls and mails were followed through with and closed
- Responding to every sales enquiry
- Bug-fixing, bug-fixing, bug-fixing...
Around 2007, I accidentally fell into UI development after years of C, C++, Prolog (3 years!), and Java. Around this time, Macromedia were open-sourcing the Flex library, Flash 9 and AS3.0 had just been announced and I moved from being a Java tools developer to, firstly, a Java Swing developer and then onto Flex in 2009.
Changes in the Flash and Flex world have pushed me to into the new breed of fast, innonvative Web Application Frameworks while playing around with server technologies like Play, Akka, and vert.x. And let's not forget the wonders of Node.js...