Practical Coding

Recently, in a meeting, someone stated that I had never been a professional programmer. At the time I agreed, however after some thinking (aka: L’esprit_de_l’escalier) disagreed with that assesment. So, time to write some of the projects I have completed during many years in this industry.

To note: many of these systems lasted months through to years, and used tools at hand. The essence of Practical Programming. All of these are written by myself, based on toolkits, SDKs and IDEs. Many no longer exist.

School sports day scoring system 1985. Mid 1985, written in Microsoft Basic for the Mac; this system recorded the winners and score for the annual sports day. I recall spending about a week of after-school hours until 3am or so writing this. I remember this as the first production system I wrote, that if it failed, I would look really silly. It worked on the day, and generated the correct printed results.

Bespoke locked down museum display system: written in late 1986, written in Microsoft Basic 2.0 on the Macintosh using floppy disk/text data files as source. Was locked down environment permitting users to select a country they originated from, and detailed the history of migration from that country to South Australia. Was still operational in the South Australian Migration Museum 3 years later.

Bespoke, locked down competition system: written in early 1987, written in C on the Macintosh using a B-tree engine. Was locked down environment permitting competition entrants to type in their name and phone number. The data was stored to disk. Competition winner picked randomly.

Chauffeur: written during late 1987, using Hypercard and C-written external functions for serial port access: a visual front-end to CompuServe email and forums. Written for “Tricks of the HyperTalk Masters” (Waite Group, 1988). I cannot recall the total number of lines of code; it was essentially a clever state-based system that screen-scraped data from a serial connection. Data was presented visually in Hypercard’s UI. I miss HyperTalk (Hypercard’s language)

Various Proof of Concepts: in 1990-1992, Apple promoted HyperCard as a visual front end for complex data. Using Apple’s DAL (Data Access Language) to Tandem, DEC and other SQL data sources. These PoC’s assisted Apple in winning enterprise customers in Australia. I installed an alpha of Apple’s A/UX DAL connecting to an Ingres database. This base system was used to demonstrate data-querying from a data-warehouse along with Mike Seyfang. This is the birth of the Munge Brothers.

Unix-based, SNMP AppleTalk monitor: in 1992: based on a collection of complex bsh scripts, cron tasks and open source commandline IETF SNMP tools. Does Anyone remember ASN.1? At one stage I was sure I was the only one in South Australia who actually read and used ASN.1 as SNMP was a reasonably new protocol. Executing on a SunOS workstation, this system was used to monitor AppleTalk routers at a large customer, as a part of a migration of their infrastructure. Also monitored via TFTP booting/reboots for uptime management. Email of outages and reports for network management.

Sherlock: in late 1993: Unix-based, 3-tier, Front-end to an Oracle ERP. I was the primary person managing a single user to SunOS/Oracle/multi-user ERP. Using VICOM Pro, I created a front-end that communicated via Telnet protocols to SQL-Plus scripts on the server. Displayed invoices, orders, pricing and other details. Create “alerts” on stock orders/shipments, plus permitted barcode scanning of inventory. Cron tasks for the management of management reporting. SQL-Plus Profit & Loss and Balance Sheet generation (the inbuilt tools sucked, so I wrote my own). Used in production for at least 2 years. At the same time, Adam Steinhardt wrote Bedrock in FileMaker: quoting and contact management system that was the basis for NextByte. Created export tools for integration. I miss VICOM’s language and development tools. Hello Brian Morris and Darko Roje!

Network Monitoring Tools: in 1994, various customers were wanting to measure end-user network performance of terminal based systems. Wrote a front end in VICOM Pro to measure screen-refresh times. Application was distributed around the network and reported back to a central server response times. Was used to contract compliance in large tenders, and to track down application performance bottlenecks. Also created front ends for login systems for customers such as Comcare in Canberra using VICOM Pro.

Web Publishing System: in 1996, for Fairfax@Atlanta web site. Userland Frontier based, with FileMaker backend. Running on MacOS, getting data via FTP from Fairfax’s editorial system. Frontier created static pages from dynamic content. Data editing multiple user in FileMaker. Static pages FTP’d to web server. 300,000 pages views a day in 1996.

sidenote: During 1998, I trained as a WebObjects developer in Cupertino under the former NeXT trainers. This involved formally learning Java; and an introduction to the Enterprise Objects Framework. EOF is an early example of a relational-object mapper. Beauty before its time.

Adobe/Scripting Proof of Concepts: from 1999 to 2004, using a variety of tools from Visual Basic, to AppleScript and Adobe InDesign and XMP toolkits to generate content management and automation scenarios. Used in selling “concepts” and ultimately selling products. Scripting improvements in InDesign 1.5 and later from customer and my input direct to product team. Still love InDesign. PoC’s are tough as they have to work a handful of times but in a critical demonstration.

A part of this bundle of code Included a database to SVG rendering system deployed in 2001 to demonstrate SVG. Before it was HTML5/Web cool. Adobe and the W3C really dropped the SVG ball in an attempt to out-run Macromedia’s Flash on mobile devices. What a waste of good resources and talent.

Mungenetengine: 2000-2006: PHP, MySQL content management system; about 3000 lines of code. Written/Tested on Windows and deployed on Linux. Based on the Fairfax@Atlanta experience, but using open source tools and public deployment. Created various connection points (XML-RPC and SOAP) with visual interfaces in Python amongst others. Whilst the backend was for personal use and not published, the code executed at least 3 million times whilst live. Parts of this engine still exist to redirect queries from old search engine results into WordPress. Also created a small WordPress plugin that assisted in transition.

The unerlying framework was used as the basis of 3 internal systems created for Adobe. One of which was the basis of an MBA paper.

During the family’s trip to Europe in 2004, I used a WxPython – SOAP based application to upload text and images to the mungenetengine.

Random Neil Finn Lyric Server: 2002-now, based on PHP, MySQL and SOAP. A very early, non-stock quote SOAP service on the internet and therefore used in many places. Image manipulation, and twitter-bots feed of the underlying system

Adobe-Internal Sales Reporting/CRM: 2004-2005: during my days as a Sales Manager, I could not resist the temptation to cut some code. Two systems were generated: one in Microsoft Excel, SAP Business Warehouse and Macros to create a one-page KPI sheet. Used daily as management tool for 3 years. Added to this a CRM system that detailed partner revenue, contacts and email list/communication. This system was written in Python; specifically TurboGears framework connected to FileMaker, with some later additions coded in Coldfusion. This latter system used a web front end.

In summary, this account at least 13 systems that ran in production coded and tested by me. Now I have documented them, I am ready armed for the next meeting where experience is called out. You have been warned.

I think it’s time for more, right?

Generating PDF via OpenXML, PowerShell…

Colleague in crime, and fellow Aussie (well, at least he’s naturalised now), Dave Glover has a post that crosses some old territories of mine.

Using Powershell, .Net, OpenXML and some code that I barely understand because it’s not Python; he’s been able to generate 60 to 70 documents per second.

Linking it here as it intersects the Adobe / Microsoft world.

More DLR

John Lam, why Dynamic Languages from John Udell podcast:

expressing my intent in the code.

Interesting interview between Tim Heuer and John Lam on Ruby as a part of the announcements yesterday.

The Ruby support from Microsoft is more than just Silverlight; it also crosses into the server and the client, outside the browser.

21st Century SmallTalk: IronPython 2.0 in a browser, performance and dynamic fun.

Second Channel 9 Interview: Compiler Geeks

I loved doing this interview: two rock stars in the same room! Thanks to Joel Pobar and John Gough for their time last month.

John Gough is a world-respected expert on Compilers – a sorcerer if you will; and Joel Pobar is one of his “apprentices” who went on to work on the .NET team in Redmond.

If you are into computing history, compilers, multiple processors and other deep technical things: you’ll love this interview.

If you have geek that have a story that needs to be told: I’m there. Any suggestions? All I need is an email!

Watching the Language Wars

Today, at least in the US, it is Programmer’s Day.

Maybe it should be called “International Programming Language Peace Day“. The level of advocacy for various programming languages reaches rhetorical heights last seen during the one of the not-so-successful 18th century revolutions.

When not speaking to humans, other programmers to reading the latest advocacy on their language of choice: programmers stitch together the wild thoughts of others to munge data into information.

Programmers are the people who use computer languages, in their various forms, to get computers to do cool things. From blikenlights to cool online maps: there are a pyramid of programmers responsible for your computer experience. A programmer is behind the “ding” in the lift you used this morning; and the software that validated your ticket on the bus ride to work.

The beauty of computer languages is that they never seem to stagnate: like modern, spoken languages: they evolve as the world changes. Except those that are abandonware.

Microsoft has recently released my current favourite programming language, Python, as a CLR/.net language: IronPython. This implements Python as a dynamic language on the CLR engine.

C# is the language of implementation for CLR, as is Sun’s Java is for the JVM. A# (Ada), B#, D# F# (OCaml), G# (Generative language), J# (Jsharp), P# (Prolog), L#. More sharps than Beethoven.

The language wars has returned to an old field: dynamic languages. The grand-daddy of dynamic languages, LISP, has received some recent positive PR. One person, Paul Graham, is the poster millionaire for LISP. Lazarus of LISP.

This week, Sun Microsystems parried Microsoft’s IronPython by hiring the team behind JRuby. The aim here is to implement the Ruby dynamic language on the Java Virtual Machine (JVM). Some months ago, this team was able to get a Ruby on Rails working on the JVM.

Whilst the big language guys battle it out, is Erlang the next Ruby, or is it just a viking proto-language with the best non-pun name? The Erlang community is starting to come out of their telephone exchanges.

No language has deemed to have arrived in the 21st Century until there is a web framework written around it. C# is ASP.NET, Python has Dyango, Ruby has Rails, Erlang has Jaws, Scheme has Magic… and so it goes on.

This broken thing called Javascript that has been reborn with AJAX, and is receiving daily blood transfusions of new features.

All of these languages just remind me of my personal alltime favourite language love of my life: Hypercard’s HyperTalk. As Hypercard is no longer sold, and “Classic MacOS” is a battle to get going on my MacBook Pro – sadly it is a language as useful as Cornish.

So, for a short period of time it is back to one of HyperTalk’s children: Applescript. Basketweaving for the mind.