Mohan is one of those rare finds who has both outstanding technical and communications skills. (Do a Google search on "Mohan Embar" if you have a moment.) A skilled mentor, programming powerhouse (+ published Apple App Store Developer) and talented writer, he has worked in a wide variety of projects including application frameworks, client applications, Open Source and personal projects, low-level UNIX printer drivers, etc. He has provided invaluable services to domestic and international companies such as Northwestern Mutual, Deluxe Data Systems, France Telecom, Société Générale, Cyco Software, and Kraft, Inc. Born and bred in Chicago, he has lived and worked in Europe, attaining fluency in French and Dutch, as well as a working knowledge of German, Spanish and Italian.

Intro Page

Technical Skills

Languages
Currently
: C++, PHP, Java
During my former lives: Delphi, C, Pascal (Borland 5.5-7.0: object-oriented), BASIC (+WordBasic), dBASE, Assembler (80x86, 68000, Z-80), plus academic FORTRAN, COBOL, LISP, PROLOG.

Operating Systems: Windows, iOS (iPhone, iPad), OS X, UNIX (Linux, HP-UX)

GUI: Windows (MFC, MFC Feature Pack, C# WinForms), Java (Swing/SWT/JFace/AWT (bleah)), Web (Struts, vanilla J2EE, JSTL, PHP)

Education

Carnegie-Mellon University (Pittsburgh, Pennsylvania)

B.S., Applied Mathematics (Computer Science)

Ecole Polytechnique Fédérale de Lausanne (Switzerland)

Third-year exchange program by special admission; studies completely in French.

Work Experience

(see also Open Source and Personal Projects)

ONTRAPORT (present)

Senior Software Engineer

Backend and some front end development work, including Dashboard backend calculations and improved logging. I'm not currently looking for another position so too lazy to flesh this out. Contact me for details.

Environments: PHP, MySQL, C++, C#, Java

CTO, Docudesk Corporation

Chief Technical Officer and Lead Developer at Docudesk Corporation.

deskPDF Creator - Wrote the Cocoa Mac version completely from scratch: http://www.docudesk.com/deskpdf/pdf-creator. Wrote the Windows System tray functionality.

deskPDF Editor - Made significant UI and backend contributions to deskPDF Editor: http://www.docudesk.com/deskpdf/pdf-editor.

Environments: Visual Studio (C++ / MFC), Xcode, Netbeans (Java/Swing), Eclipse (Java/Swing)

MODA Interactive

Cofounder of MODA Interactive LLC, home of cool desktop and mobile applications. I am the sole developer on these projects.

PandaTunes - Pandora on iTunes! (http://pandatunes.com): From the product page: "Enjoy your Pandora stations as iTunes playlists on Mac and Windows. You can remote control your music using Apple’s awesome (and free) iTunes Remote software for iOS devices. Imagine changing your Pandora stations, viewing album art and information from the currently playing tracks and controlling the volume from anywhere in your home using your iPhone or iPad!" Consists of Windows and Mac desktop applications (Java/Swing as well as native C++/Objective C libraries).

PandaRemote - Remote Control Desktop Pandora With Your iPhone/iPad! Consists of a native Mac desktop application (Cocoa/Objective C(++)) as well as a native iPhone/iPad application which communicate with each other via a combination of HTTP REST calls as well as a custom TCP/IP protocol.

Num-Num - Learn to Count and Spell Numbers in Foreign Languages!

From the website (http://www.num-num.com): "Num-Num teaches you how to count, spell and pronounce numbers in a variety of different languages. Use Num-Num when you write checks or to practice counting. In the sound-enabled versions (iOS 4.0 and greater only), Num-Num will pronounce numbers out loud in a variety of voices and accents."

This is a native iPhone/iPad application which is available in the App Store (http://itunes.apple.com/us/app/num-num/id493844261).

Environments: Eclipse, Java 6, gcc, Visual Studio 2005 (C++), Xcode (Cocoa/Objective C/C++)

RhinoSoft.com - WI

Worked on a C++ desktop application in MFC. The project involved mutltithreading, networking protocols, session pools, etc. as well as user interface design with the MFC Feature Pack. Detailed knowledge of MFC, the MFC Feature Pack and namespace extensions was involved.

Environments: Visual Studio 2010, C++

Bloomberg

Six-week contract-to-hire position led to a full-time job offer in the prestigious Equities department of Bloomberg (NYC), a financial services company. I turned down the position because I decided that NY wasn't for me.

Environments: HP-UX, gcc

Let's Do Payroll!

Designed and implemented a payroll and tax withholding desktop application (Java / Swing), deployed with Java Webstart. From the website: "It has been designed from the ground up to give you a hassle-free and affordable way to capture your payroll data, transfer it to and from your accountant, figure out how much to withhold and generate helpful reports." Drop me a line and I'll send you the user id and password for the password-protected website. The proof of concept (a complete implementation) was favorably reviewed in a focus group of a large Milwaukee accounting firm.

Environments: Eclipse, Java 6

Docudesk Corporation

Designed and built the initial revisions of a commercial Java desktop application (PDF to Word converter) using a mix of Java / SWT / JFace and platform-native code for Win32 / OS X (C, C++ and Objective C(++)). This application is currently being sold commercially. The GUI is multithreaded and does on-the-fly, resizable thumbnail previews and other document-conversion-related stuff I can't describe in more detail due to NDA restrictions. Built custom gcj compiler versions for Win32 and OS X so that the executable can be released as native code. Built a slew of native helper Cocoa applications for OS X, as well as a Windows Service for this project. Ported the entire application to Swing in later stages of the project, creating a compatibility library allowing the application to run on Java 6 on Windows and Java 5 on OS X. Project required intense dissection of the PDF object model.

Environments: Eclipse, Java 6, gcc, gcj, Visual Studio 2005 (C++), Xcode (Cocoa/Objective C/C++)

Anonymous Client: PL/I - C# - C - Java Interop Proof of Concepts

Did a number of Proof of Concepts for a client which validated accessing a Java rules subsystem from various clients in an in-process manner. Proof of concepts involved bringing up a JVM in-process from C and using a mixed of managed and unmanaged C++ (IJW) to invoke this C code, thereby creating a .NET class library to call Java from C# without the horrors of P/Invoke. Created a PL/I wrapper around this C code and validated calling PL/I to in-process Java via C on an MVS mainframe. Got to code in PL/I, C#, managed and unmanaged C++, C and Java all in the same project. Pretty cool stuff!

Chip Vivant

(This is a personal project, but it spans more than a half a year and was significant enough that I wanted it at the top of the list.)

After a long, prolific and fruitful career spent of doing stuff for other people, I gently told all of my clients to leave me alone so I could fulfill my dream of writing a chatbot (aka. chatterbot), Chip Vivant and entering it in the Loebner Prize Contest. Wrote the chatbot completely from scratch, with pattern template language I also coded and design on my own.

Chip Vivant was a groundbreaking effort, with interfaces to Wordnet, Opencyc, Conceptnet, Wikipedia, Wiktionary and a number of other systems. Created lightweight, custom backward- and forward-chaining reasoning engines as well as a large commonsense database independent of these other third-party databases.

Chip Vivant was the first-ever (to my knowledge) Internet-facing entity (including all websites in the world and all search engines like Google) that could authoritatively answer commonsense questions like whether an orange is bigger than the moon, as well as conversational sequences like "The blue bottle is on the table. / Where is the bottle? / What color is the bottle?" and represents a significant advance over pattern-and-canned-response-based chatbots.

Environments: Eclipse, Java 6

GCC- and GCJ-Related Work

Anonymous Client: Custom Win32 and Mac OS X builds and functionality. This spans several projects with different build configurations and functionality.

Anonymous Client: JasperReports-Based J2EE Web Application (September 2005 - January 2006)

Created a proof-of-concept web application which used JasperReports for HTML and PDF report generation, using Spring for bean wiring and Hibernate for persistence. Web application used advanced cross-browser DHTML techniques to avoid gratuitous page refreshes. Created outstanding documentation for introducing and communicating these new technologies. Web application was successfully demonstrated on Windows (IE 6 / Firefox 1.0x), Fedora Core 4 (x86 / Firefox 1.0x) and Mac OS X 10.4 (Safari 2.03). There's much more to mention here, including advanced mathematical computations, but I can't.

Environments: Eclipse, Java 6 (Hibernate, Spring, JSTL, DHTML)

Northwestern Mutual Life - Milwaukee, WI)

Spanning almost eight years, this is my longest and most fruitful endeavor. Northwestern Mutual will always have a special place in my heart. In the end, they called me "The Jackknife" because I could tackle almost anything. Reading these, you'll see that I'm bilingual in C++ and Java. There's too much to mention here - these are the highlights (roughly in reverse chronological order).

Mentoring - Mentored countless developers, both individually and through presentations in Java, C++ and C#.

Effective Java Mentoring - Used my excellent mentoring skills to give Java coding and design instruction to the entire frameworks team, based on of Bloch's Effective Java book, with handcoded supporting examples.

Field ID Client Access Proxies - Created C++ and C# HTTP proxies and marhshalling code for communicating with a backend servlet.

Documentum Authentication Module - Enhanced Documentum's C authentication module to use UNIX PAM authentication instead of vanilla UNIX crypt comparisons, thereby allowing the use of the PAM Vintela modules for Active Directory authentication.

IBM Websphere Message Broker - Spearheaded a campaign and wrote a seminal document concerning the creation of reusable components for IBM Message Broker. Wrote a custom Java classloader to work around Message Broker classpath and classloader limitations as well as a custom configurator node which allowed augmenting vanilla subflows with GUI-configurable properties. Ported portions of the Clyde Java data structure framework (which handles arbitrarily nested substructures via recursion) to ESQL. Also a variety of ESQL routines for Base64 encoding, configuration management, etc. Spurred the NM Integration Team to carry on my research.

NM Crypto - Ported the Blowfish encryption and decryption algorithms from the C++ reference implementation to Java and C#.

Media Manager - Created the C# Winforms GUI front end for a rich client photo and video manager. Since Web Services weren't available for our implementation, I created the custom marshalling logic and the entire servlet backend framework which then invoked our Clyde MQ server. Extensively mentored the Java backend developer in C#.

NextPage Access Control Module - Wrote a C++ COM module for NextPage authentication via SiteMinder. The NextPage vendor initially bid on this, but I massively underbid and outperformed them. 

WinSign .NET - Significantly refactored and improved a C# P/Invoke-based wrapper around NM's C authentication DLLs.

RogueWave Upgrade Project - Played a crucual role in a massive upgrade effort to convert all C++ RogueWave DBTools and Tools.h++ applications to HP-UX 10.2, the latest aCC and Visual C++ 2003. This involved upgrading Zimbu (the C++ frameworks), my HP-UX makefile translator as well as several hundred applications. Although I initially started out as a mentor, I was able to convert applications with such speed and reliability that I ended up converting many of the applications myself, underbidding and outperforming offshore consultants despite my higher billing rate.

Miscellaneous Development Utilities - Developed a multitude of quick C++ and Java development utilities "for fun" (and to the benefit of countless NM developers): PathToClip (allows right-clicking a file in Windows explorer and sending the full pathname to the clipboard), FTPFromVC (FTPs a file from the Visual Studio IDE with a single click), SendClip (synchronizes the Windows clipboard on two machines), ByteMe (a Java Swing Hex/Base64/Binary/Text converter), Freshen (compares and synchronizes files in two directory trees), etc.

XML Schema - Singlehandedly campaigned for describing our framework library configuration files using XML Schemas instead of DTDs. Created a small, yet powerful JAXP (Java) Helper library and a rich set of robust, company-specific schema definitions.

JMS Helper Library - Reviewed and significantly refactored and enhanced a JMS helper library written by my peers. Aggressively rooted out and destroyed bugs and crucial performance issues, as well as skillfully generalizing for both point-to-point and publish/subscribe models.

NM Struts Plugin - Reviewed and significantly refactored and enhanced a Struts (Java) plugin library written by my peers. (The plugin allows for initialization of the Clyde Java libraries.) Converted proprietary Struts tags to standard JSTL.

PAM Java SDK - Wrote a mind-blowing utility which parsed C++ COM headers and generated both Java wrapper classes and JNI C++ glue classes so that developers could access the entirety of the PAM SDK in Java. (PAM is a financial software package whose acronym escapes me at the moment.)

DI Claims - Created a framework for communicating between two Win32 DLLs to aid in linking a C++ DLL to VisualAge Smalltalk. This framework allowed moving domain logic to a standalone .exe which is debuggable under Visual Studio. Extended this framework to allow NT services to run as lightweight processes which communicate with standalone executables, yet automatically update their state if the executable terminates abnormally.

Clyde Java Frameworks - Ported major portions of ZCore and ZQ to Java for this Internet application. Created a distributed page generation framework which could be seamlessly plugged into NetDynamics and the servlet APIs. Used IBM's XML (XML4J) and XSL (LotusXSL) processors for this framework. Added XML support to both the C++ and Java frameworks, allowing by-naming of complex structures between the data structure and XML frameworks. My skillful design of this web framework allowed us to switch from the NetDynamics to the Java Servlet API in a couple of hours!

Zimbu "Fake" Queue Manager - Wrote an entire MQ C++ emulation library using Win32 shared memory and semaphores. This allowed developing ZQ applications using a local deskop and was use extensively by offshore developers. Also wrote Java JNI wrapper classes around this library for use by the Clyde (Java) frameworks.

ZQ MQ Framework - Extended the C++  frameworks for asynchronous client/server communications: ZFlow: a generic workflow engine which allows carrying out a procedure by executing a series of asynchronous steps, ZQ: a queue-based abstraction layer written on top of IBM's MQ series software, ZCore Data Structure framework: allows packing and unpacking complex objects into strings which can be passed between processes. These strings and contain arbitrarily nested attribute arrays.

Zimbu C++ Frameworks - Mentored ex-Smalltalk programmers and coded key infrastructure pieces for a mission-critical middle tier in C++ on HP-UX. Contribution included extensive mentoring and code reviews, creating a Smalltalk-to-C++ code translator, creating Visual C++ 5.0-to-HP-UX makefile translator (so we could develop in Windows) and developing extensive RogueWave DBTools.h++ database emulation classes which went against flat files instead of the real database. Jump-started an "underground" project with four other developers by rewriting the entire C++ data management infrastructure in Java, as well as updating the code generator to generate either C++ or Java source. The birth of these Java and C++ frameworks gave my group corporate-wide visibility and ended up being used in hundreds of applications throughout the company, resulting in the creation of the ECC Frameworks Team.

Environments: Visual C# 7.1 (2003), Visual C++ 7.1 (2003)/6.0/5.0, HP-UX aCC, Java, Rogue Wave SourcePro/DBTools.h++/Tools.h++, Sybase Open Client/Open Server, Rational Rose 4.0, NetDynamics.

Strategic Technology Resources/Deluxe Data Systems - Chicago, IL/Milwaukee, WI

OrBiT - As Lead Consultant, assisted with design and led implementation of OrBiT (Object-Oriented Billing Tracker), a full-scale billing system. OrBiT is a three-tiered, 32-bit Windows (MFC) application against Oracle 7. Usage and settlement information is loaded monthly into Oracle tables which OrBiT uses in conjunction with user-defined billing parameters to generate invoices. OrBiT is generic and fully extensible. Responsibilities included project management, mentoring, as well as low-level coding (from the UI and billing domain down to Rogue Wave DBTools.h++ source code bug fixes). OrBiT's successful implementation proved that a real-life system (which has already uncovered tens of thousands of dollars of unbilled revenue) can be implemented by a handful of programmers with a good mentor and solid infrastructure classes.

ATM Installation - Reused the OrBiT UI framework which allowed delivering this ATM installation and configuration application in record time. Designed and prototyped a generic Configuration Manager, a configuration expert system engine. Mentored two client programmers.

Network Order Fulfillment Project - Led user sessions for charting out use cases for the NOFP process, which tracks the ordering, installation and migration of customer endpoint connectivity for ATMs and other devices. Reused both the OrBiT UI framework and the Configuration Manager in this application

Database/UI Framework - Fully designed and implemented a UI and database framework using Rogue Wave's DBTools.h++. This framework greatly simplifies database interaction and is at the core of OrBiT and future Deluxe IS applications, allowing novice programmers to interact with the database without knowing SQL. UI framework includes a slew of helper classes as well as an extended wizard framework that allows the same wizard classes to be used for both a new configuration as well as to generate summary text for an already-existing one.

Billing Domain Class Design and Implementation - Designed and implemented key components of the billing domain (BillingFilter, PricingModel, Tier). Devised and implemented generic, extensible data filtering and pricing algorithms which allow all pricing models to be specified by a set of tiers. Devised and implemented an invoice history and mirroring scheme for past month invoices. Coded several crucial Oracle PL/SQL stored procedures and set the precedent for using subprograms. Supervised, assisted and mentored the development of the remaining classes.

UI OrBiT and Framework Classes - Designed and implemented a slew of MFC and OrBiT wrapper classes to ease the burden of the client programmers. Devised and implemented the "Service Group Wizard", a framework allowing non-Windows programmers to sequence generic UI forms into their own custom billing parameter wizard.

Project Management, Supervision, Mentoring - Worked with the client Project Manager in establishing deadlines and meeting them. Supervised the STR Consultants and mentored the client developers. Successfully combatted scope creep at crucial stages of the project.

Environments: Visual C++ 4.x, Rogue Wave DBTools.h++/Tools.h++, Oracle (SQL*Plus + PL/SQL), Rational Rose 3.0/4.0

Forsk - Blagnac, France

Specified, designed and developed several modules of Parcell: a cellular network management and simulation program for France Telecom. Managed translation of program (GUI/output) and documentation into English. Challenging, multi-faceted project involved mastery of radiotelecommunications concepts.

Multiple coordinate systems - Expanded Parcell's use of three hard-coded coordinate systems to an arbitrary number of user-parameterized systems (TRIDIM, GEO, Lambert, UTM), allowing conversion between any system. Solution involved establishing a system tree rooted at a three-dimensional reference system through which all conversions passed.

Interference Analysis and Report - Allowed user to specify coverage and interference criteria for one or more stations, calculate the covered and interfered area for these criteria, and generate a report on these and other derived values with global and per station totals. Solution included iteration on two-dimensional matrix variables (with possibly different mesh steps) corresponding to coverage and interference criteria as well as maximum interfering station.

Pencil/Eraser - Provided a method for creating commercial and marketing coverage diagrams by "coloring in" and/or "erasing" meshes of a cell corresponding to a coverage or interference criterion. Solution involved creating a graphical object which stored mesh coloring and erasure requests and integrated these requests into the cell matrix after confirmation.

HP Designjet RTL Printer Driver - Adapted an existing HPGL/2 printer driver to accommodate HP RTL Raster language in order to display bitmaps along with a vectorial plot. Solution involved restructuring the class hierarchy and adding an abstract PCLPrinter class (ancestor of PaintjetPrinter and LaserjetPrinter objects) which also provided static member functions for the augmented HPGLPrinter class.

Translation and Other Tools - Wrote numerous version productivity tools (using rcs, rcsdiff, co, ci as well as *,v files) and an extensive translation module (trad) used for translating uil, symbol and ORACLE database definition files as well as insuring translation bijectivity. Tools made heavy use of UNIX system calls for recursing directories, changing file statistics, etc.

Environments: HP-UX, HP C++ (templates/"exceptions"), X-Windows/MOTIF, Windows 3.1, MS Word 6.0, Borland Pascal 7.0

Delpharion - Toulouse, France

CVT Document Conversion Program and Companion Modules Specified, designed, implemented, documented, and supported CVT (document-conversion program which converts MS Word 5.5 semigraphic and bordered paragraph tables into real MS WinWord tables) and companion modules, including a special version for the French Space Agency. Solution involved "reading" table contents and migrating them to real WinWord tables, handling the necessary column merges and virtual column creation.

GTD Document Management System Backend Toolbox - Designed, implemented, and documented GTD, a back-end toolbox to manage a text file document identification database for the French Space Agency. Solution involved implementing traditional database functionalities (add, delete, modify), a Windows interface, and version-splitting functions (when a document revision applies to less satellites than its initial version).

Environments: Windows 3.1, Borland Pascal 7.0 for Windows (object-oriented), MS Word 6.0 (WordBasic)

Cyco Software - Rijswijk, The Netherlands

Updated the AutoManager Workflow User, Reference, and Administrator manuals for software update 1.2 through 2.0. Designed and implemented sorting and indexing tools to generate a large, three-manual global index. Solution involved implementing a huge array using conventional and expanded memory.

Environments: Turbo Pascal 6.0 (object-oriented), Wordperfect 5.1 macro language

Keyword - Montpellier, France)

Designed and developed a lexical database system and translated interactive documentation system for the Société Générale (France's largest bank). Solution included generating Pascal source files from a database description file.

Environments: Turbo Pascal 5.5 (object-oriented), Turbo BTREE

Data General - Research Triangle Park, North Carolina

Ported INGRES DDBMS interprocess and intermachine network communications module to DG AOS/VS platform. Rewrote entire IPC library from scratch. Received Outstanding (highest) rating in Job Knowledge, Quality of Work and Communications Skills categories.

Environments: DG AOS/VS (a multi-threaded, UNIX-like operating system), C.

Kraft, Inc. - Glenview, Illinois (1984-1988)

Designed, developed, implemented, documented, and supported a coupon tracking system which automated tracking and reporting. Increase in productivity led to the purchase of a complete computer network. Solution involved judicious database, screen, and report designs.

Environments: dBASE III+

Embar Information Consultants - Wheaton, Illinois

Developed, implemented, documented, and supported Compulog, a microcomputer online catalog system which was positively reviewed by the American Libraries Association and independent sources.

Environments: dBASE III+

Open Source and Personal Projects

Open Source Projects

See also my Cool Programs page for a general overview.

I love Open Source! Not because I'm against commercial software, but because I love the cameraderie, technical challenges and learning opportunities that abound with Open Source projects. During the peak of my gcj participation, for example, I would routinely correspond with talented developers in the United States, Germany, England, India and New Zealand (all in the same day!) solving challenging technical problems together. Here is a list of Open Source projects I've participated in.

Disclaimer: In this section, I'm more verbose than in the previous one. Read as much or little as you like - I'm an open book. If you take the time, you can find out a lot about me - my interests, coding style, conscientiousness, interaction with others. While the intellectual challenges of these projects might seem obtuse, I'm a down-to-earth, practical, no-nonsense developer at the workplace.

GNU Compiler Collection for Java  (http://gcc.gnu.org/java/)

I have most actively participated in the Win32 gcj port, which allows compiling Java programs to native Win32 executables. This unique project allows me to flex  my C++ and Java muscles simultaneously (the class library is written in a blend of C++ and Java - the compiler itself it written in C). I've also addressed some challenging configury issues since I build the Win32 compiler on Linux! The quality of my work has earned me CVS write-after-approval status for GCC, as well as the privilege of checking in Win32 java class library changes without approval.

The actual number of patches I've written are too numerous to mention (50 at last count). Let me try to distill these here.

First off, I fixed a Java source compilation bug which prevented a full compiler bootstrap on Win32. The then-lead MinGW gcj developer was quite surprised when a testcase which manifested this bug for years passed.

Then I continued to improve the Win32-specific and general portions of the compiler and class libraries. If you visit http://gcc.gnu.org/gcc-3.4/changes.html and search for "matured", you'll see the sentence Enhancements include socket timeout support, thread interruption, improved Runtime.exec() handling and support for accented characters in filenames. I both wrote that sentence and made every one of those enhancements. 

Patch Location
socket timeout support (actually a massive networking cleanup patch) http://gcc.gnu.org/ml/java-patches/2003-q3/msg00064.html
thread interruption http://gcc.gnu.org/ml/java-patches/2003-q3/msg00623.html
improved Runtime.exec() handling http://gcc.gnu.org/ml/java-patches/2003-q4/msg00307.html
accented characters (UNICODE support) http://gcc.gnu.org/ml/java-patches/2003-q4/msg00438.html

I also made a number of patches to improve streams, networking and java.nio support:

Patch Location
Invalid cast on MinGW http://gcc.gnu.org/ml/java-patches/2003-q1/msg00672.html
Infinite selector timeout http://gcc.gnu.org/ml/java-patches/2003-q4/msg00606.html
POSIX selector improvements http://gcc.gnu.org/ml/java-patches/2003-q4/msg00724.html
SocketTimeoutException for PlainDatagramSocket http://gcc.gnu.org/ml/java-patches/2003-q4/msg00738.html
Selector.wakeup() + synchronization fixes http://gcc.gnu.org/ml/java-patches/2003-q4/msg00843.html
BufferedReader and InputStreamReader optimizations http://gcc.gnu.org/ml/java-patches/2004-q1/msg00008.html
Channels and IllegalBlockingModeException http://gcc.gnu.org/ml/java-patches/2004-q1/msg00384.html
DatagramChannel + Miscellaneous fixes http://gcc.gnu.org/ml/java-patches/2004-q1/msg00407.html

... as well as a clever build-time optimization which allows compiling all classfiles at once.

DotGNU Portable .NET (http://www.dotgnu.org/pnet.html)

This is a port of Microsoft's .NET environment to UNIX. I added keyboard support to their text widgets and fixed various bugs (all in C#):

Patch Description
http://custom.lab.unb.br/pub/os/DotGNU/current/pnetlib/doc/ChangeLog-4 Text widget keyboard support
http://dotgnu.org/pipermail/pnet-developers/2004-March/001018.html Invalid handle check in Xsharp
http://article.gmane.org/gmane.comp.gnu.dotgnu.developer/1756 Xsharp keyboard modifier support

I also wrote a C# application (DotGNU Portable Nim) which worked around missing functionality in their Winforms implementation. This is still featured on the DotGNU home page (lefthand screenshot - click on the thumbnail)!:

Borg Calendar (http://borg-calendar.sourceforge.net/)

This is a fun Swing appointment and to-do application. I was looking for something I could mold and shape myself. Starting with some initial design feedback, I ended up a developer on this project and doing some major refactoring and improvements.

This is the thread that started it all: http://sourceforge.net/forum/forum.php?thread_id=1143226&forum_id=323020

Then I added repeating monthly day-of-week relative appointments and did more refactoring: http://sourceforge.net/forum/forum.php?thread_id=1144890&forum_id=323020. Here is one flattering except from this thread from the lead developer concerning my work:

I've had lots of experience looking at other peoples' software over the years. I've been a lead architect for many years and have had to inspect and approve designs and code of all levels of quality and style. 90% of the time, when I open up other people's code, my first reaction is ??WTF??. Then after spending way too much time trying to understand it, my next reaction is OMG!! ??WTF??. 

In your case, it literally takes about 5-10 minutes for me to overlay your code over the source tree, do a cvs diff, look at the new files, and understand exactly what you are doing. When I opened up your initial refactoring, it instantly clicked in my head what you did, why, and how the effort up front makes further expansion of the program easier. It's just good clean code. 

Finally, I refactored the UI pieces so the program could run either as a standalone application, a sandboxed applet or a Java Web Start application: http://sourceforge.net/forum/forum.php?thread_id=1147287&forum_id=323020 - this earned me the following feedback:

My usual quick-diff came up with 28 pages of diffs, so it will take me a while to look it over completely - and I'm at work, so I can't look at it now. But I am confident that you can check it in now. When I saw diffs in CalendarView.form I just had to open up NetBeans. Wow! You used NetBeans to edit this and you even used the NetBeans resource editor. Stuff like that and the little touches - like your changes to Borglet.java (a Java-ism I just can't seem to remember) makes it clear that I don't have to inspect all this code before it goes into CVS. 

(I had never touched NetBeans before this project, but had felt compelled to preserve his user interface.)

Mips2Java (http://www.xwt.org/mips2java/index.html)

This cool project allows translating C code into 100% pure Java. I wrote a number of source and build-time patches to allow building this on Win32 and using gcj:

http://darcs.vexi.org/nestedvm/_darcs/current/doc/ChangeLog (search for "Embar")

...as well as AWT helper classes and a cool demo applet which wraps a Mips2Java-converted C program I wrote in 1988!:

Waba for DOS (http://www.wabasoft.com)

Waba is an interpreter for a subset of the Java bytecode instruction set. Since instructions related to longs, doubles, threading and exceptions are omitted, the resultant interpreters can be extremely small. I ported the Waba interpreter to MS-DOS (written in C) and ran successfully Waba programs compiled for Windows CE and Palm OS on a 386 machine with 4M of RAM!..

Fedore Core 3 Floppy Installer

Fedora is the latest incarnation of Red Hat Linux for personal use. Unfortunately, unlike previous versions of RedHat, it's no longer possible to bootstrap the installation process using floppy diskettes. That didn't sit well with me, so I tackled and solved that problem and got praise from developers across the globe for it.

Personal Projects

Standalone Applications and Applets

If you visit my Cool Programs page, you'll see a lot of fun and whimsical programs which have earned many rave reviews. I didn't write these purely for fun, though. Read on and you'll see my architectural and design motivations behind these projects.

I wrote BSBingoTM to learn the PalmOS C SDK. It is a fun game sarcastically dubbed as a "corporate productivity tool" which allows you to stay awake during otherwise-boring corporate meetings. Despite the fact that it was my first program, I received five cows (highest rating) from TUCOWS.

After writing this, I decided to take a step back and see if I could accomplish two goals:

  • create a reusable PalmOS framework to jumpstart application development. This framework would simplify application setup and event handling and use the Memo Pad database for persistence.
  • leverage the Model-View-Controller pattern to create reusable C++ model code which would be platform indepenent (Win32, Windows CE, PalmOS, etc.)

I developed the PalmOS framework and then built Num-NumTM and the Triangle Puzzle on top of it. I also took my same model code and created Win32 and Windows CE applications. This required a lot of skill because Windows CE uses native UNICODE APIs whereas the version of PalmOS at the time used a single-byte character set. I pulled it off though. Oblivious to my design motives, the reviewers at TUCOWS nevertheless awarded another five cows to the Triangle Puzzle.

I had two other lofty goals for my Windows CE research:

  • create an easy-to-use Windows CE application installer without having to pay for InstallShield
  • develop Win32 and Windows CE programs from the same codebase. (If you've ever tried to do this, you know that there are a lot of similarities between the two platforms, but enough differences to make this impossible at first glance.)

I succeeded in these goals with my Win32/WinCE versions of Num-Num and Triangle Puzzle, which use the exact same C++ model code as the PalmOS versions. I also created a port of BSBingo for Win32/WinCE: BYOBingoTM, which received a rave review in a popular magazine column.

I already mentioned the C# version of ThisIsCoolTM Nim, which is featured on the DotGNU home page. My Java AWT version is bundled as a sample with my gcj build.

Finally, a couple of applications deserve an honorable mention:

  • Out of Mind: a Mastermind™ clone written using JScript and Microsoft's Internet Explorer DHTML. The computer plays a pretty mean game!
  • Save That Calendar!TM lets you save your calendar, the trees and the world by computing the next year that you can reuse your calendar. (For example, your 2001 calendar can be reused in 2007.) This is also bundled as an AWT sample in my gcj build and has been featured on websites like this one (second screenshot).

Web Applications

These are fun web projects. They prove that I'll be able to learn your environment quickly because I have a solid grounding in web development concepts.

VeganPeace E-Cards: for my wife's website - these E-Cards are sent by hundreds of people around the world. (I also composed all of the music for the E-Cards, but's that not relevant here....) Send one yourself!

FoodMe Coop Web Ordering and Web Deposits: This is for my buying club. The UNFI FoodLink program was slow, clunky, Win32-specific and essentially unusable. I reverse engineered their file formats and created an online web ordering system from it. Since then, they've created an online web system too, but mine is tons better. (You can't even see item descriptions with theirs.) Give it a spin!

Save That Calendar: a port of the Save That Calendar applet to a Java servlet. Now I can save that calendar while browsing from the YMCA, public library or anywhere else where the Java Runtime isn't installed. (Collective sigh of relief.)

Linux

I administer several Linux boxes at my office - one box serves as my file server, print server and Internet router. The other is a web and mail server. I also do my Win32 gcc builds on Linux using a cross compiler! One of my hobbies is to buy dirt cheap computers off of Ebay, install Linux on them and use them as workstations, file servers, print servers and web servers. (I think I'll buy another one and make it a Kerberos server - why not? :) )

Intro Page