(Programmers)Which program are you the most proud of?

I remembered the other day my first steps in programming on my C64 back in 84. After I got it for Christmas, my uncle visited me and asked me what the computer could do. I wrote a very basic “database”, which displayed his address after typing in his name. He was impressed!(He knew nothing about computers). All that in that crappy Commodore Basic, which I had taught myself with the even crappier manual.

And yes, I have become a professional software developer, and I have been doing this for quite a while. But this little program, I’m the most proud of of all the projects I did in my life.

So, what’s your story?

A hangman program I did in QBASIC, which I figured out solely by looking up commands in the help file, only guessing which one would do what I wanted.

I wrote a program to allow someone to regraph data from a publication electronically.

Basically, I used a RS232 puck (the sort of thing used for Autocad) - the user clicked the Origin, a point on the X and Y axis, and then all the points on the graph (multiple graph lines were supported) - the program had to generate a matrix to correct for skew and rotation, and fix the data as it was entered. It was a pretty good piece of code.

My other great piece of coding was an advanced RunAs command for Windows 2000. While there is a RunAs command in Windows, it can only be used from the command line interactively. I needed to launch a command as another user from a script. I found a utility on the internet that cost a fair amount of money that would create an encrypted file holding the authentication details for the command. I took a week to write my own version (both command line exe and .NET assembly), using strong encryption to protect the commands in the file. That program helped a large IT rollout for a multinational succeed, and I still use the code now and then.

Si

Years ago I wrote an assembly game that I called “Star Trek.” Basically the game was to shoot at Klingon warships while they shot at you. The thing I was most proud of was how the ships turned. The could face in any of 8 directions:

Up
Up right
Right
Down right
Down
Down left
Left
Up left

The direction of motion was stored in a byte. Up was 00000000, up right was 00000001, right was 00000010, etc. Up left was 00000111. A turn was either an increment (clockwise) or a decrement (counter clockwise). I’d AND the result with 00000111.

Why the AND? Let’s say you were flying up (00000000) and you turned counter clockwise. DEC 00000000 = 11111111. 11111111 AND 00000111 = 00000111 - up left. Then turn clockwise. INC 00000111 = 00001000. 00001000 AND 00000111 = 00000000, up.

It saved a hell of a lot of branching.

ETA: This was for a TRS-80.

I call myself “developer” rather than “programmer” (I do FileMaker databases. Programmers work in C and similar environments)
Probably the early stuff. Especially a context-specific help screen with illustrations, and searchable, that I built for a FileMaker database under FmPro 4.0. It was sophisticated enough that I still show it off when applying for jobs now in the FileMaker 10 world. Also a complete “ERP” in classic relational arrangement of multiple tables that I did way back in FileMaker 2.1. The catch: FileMaker 2.1 didn’t have relationships, it’s considered pre-relational.

Going from not even knowing the basics of the .WAV format to writing a naive waveform frequency analyzer in two hours. Importing a sound from a microphone next to my 20 year old casio keyboard, once I adjusted for the headers and footers of the file, it worked to within one hertz (which was surprising giving the variance I expected from the keyboard and computer.)

Now, I wrote this to try and analyze what frequency I am singing at, which is much more complex and didn’t work, but it worked for a pure tone.

I’m into ham radio and I use a logging program to record all my contacts as I make them. Sometimes I make a couple thousand contacts per month. I upload these contacts to two different online QSL matching services as well as send out QSL cards for a large percentage of them. I have written a large messy PHP script that scours my logfiles, scrapes various websites for address info, sorts and collates the entries in about a dozen different outputs for mailing as well as award tracking and then does all the uploading. This script is integrated into a Mac Automator workflow that prints labels and updates several databases. The script makes use of an XML parser, several regexes, lots of curls, and some pipelined unix incanations. It’s a huge messy kludge but it works and I love it.

As an exercise for a data structures class I was part of a group project that developed an inventory/order system for a mythical Wally*World type chain store. That was well and good, and we got an A for it.

Very similar in concept, I modified it to generate traffic for my model railroad, and in the process, used it to teach myself the C++ STL. It’s very intricate, and even though I wrote it, I have to rely very strongly on my self-generated documentation to maintain it. This program is the one I’m proud of.

There are several that I’m as proud of as the traffic generator, but since I was paid to develop those, they don’t count IMAO.

One big one and one little one.

The little one was when I was teaching PDP-11 assembler. For some reason recursion came up, and I wrote a correct and elegant factorial generator in assembly language at the board in front of 30 students.

The big one was my dissertation, which was a compiler for a microprogramming language I invented - object oriented in 1979. The language was Pascal based, and I got the Zurich Pascal compiler, ported it to Multics (not a trivial task, since Nicholas Wirth’s portable compiler assumed everyone had 60 bit machines) and modified it into a compiler for my language. See, open source is nothing new. It was just good enough to meet its goal, which was to compile the examples I needed. It was not something I would want to maintain.

First big PHP project - coded a LMS from groundup, complete with registration, quiz creator, courses, file manager, without checking out if whether there is such a thing called Moodle smack The client eventually disappeared.

A web application I developed for a client I met through a friend. It consisted of a front-end to upload tens of thousands of PDF files which were scanned by this guy’s army of temps from his vast collection of literature on the history of magic and magicians. It automatically categorized, processed, and indexed each page of each document, and made them available for viewing in a complicated permission-based system. And they were fully searchable, with all sorts of nifty metadata search options.

He used the system as his primary tool for researching a new biography of Houdini, which was published a few years ago.

I’ve written a couple of very cool embedded apps - one for controlling 400+ LEDs on a massive wall-sized map, and one for controlling the lights on Phoenix’s new signature sculpture: http://boards.straightdope.com/sdmb/showthread.php?t=514560&highlight=secret+patience

Still, one of the coolest, simplest, and most successful programs I’ve ever written was an Applescript to automate the download and capture of every This American Life.

The story:
A few years ago, I bought my then-girlfriend (now wife) an iPod. It seemed sort of a waste to give it to her empty, and I knew she really liked TAL, so I decided to fill it with their podcasts. Unfortunately (probably intentionally), the TAL website only allows real-time streaming of archived episodes. I noticed that all of the episodes were in the same directory, and followed a consistent naming schema, so I wrote an Applescript that automated Realplayer and Wiretap to:

  1. Load the next podcast in Realplayer.
  2. Start playing the podcast (to get something in the buffer).
  3. Stop playing.
  4. Start audio capture with Wiretap
  5. Zero and restart playing the podcast
  6. After 51 minutes, stop capture.
  7. Name and save the file.
  8. Increment the name, and rinse, lather, repeat.

It took almost 2 solid weeks to get them all, but in the end she ended up with a true labor of love…

I’ve really only just begun VBA programming. But I’m particularly proud of the MGO Action Report macro I recently finished, because I had repeatedly heard that such reports were are impossible with our clonky database. The macro cut the time it takes to produce our reports from 2 hours to, uh, 90 seconds. 120 seconds if the server is slow.

I made a program say “hello world” once. :smiley:

Wow, I never thought that writing a program could be a romantic matter.

Two of them.

First, I wrote a chat-bot using the mIRC scripting language. Everyone had things like trivia bots, which asked trivia questions, and “bartender” bots that served virtual drinks on command, but mine actually played the trivia games as a contestant, and ordered drinks from the bartender-bots. As of when I abandoned the project, I was teaching it to flirt, but the automated gender-recognition routine was only about 95% accurate, so I was trying to teach it to learn from corrections on that (like, if someone said “I’m a guy”, it’d move their gender-score a few points in the “male” direction in a database).

The other one was a Connect-4 game I wrote from scratch. I can beat it about 80% of the time, but it’s easily good enough to beat the typical con4 player. Amusingly, it turns out that the move-evaluation algorithm works out most smoothly when the math is done in base 11. I’ve since had some ideas for significantly improving it, but have never gotten around to implementing them.

pfftthh, Try that in Haskell.

Never heard of Haskell, looked it up in the German wikipedia and read these nice features:

  • There are no operations which change the value of a variable.
  • There is no distinction between the identity and the equivalence of an object.

Pheeew, that sounds hard…

I’ve written some fun stuff, but my favorite was one I wrote which mined a meta-store for Magic: the Gathering cards(it lists the buy and sell prices for dozens of stores card by card). It gave me a report of which cards had lower sell prices than their buy prices at other stores, and quantities, broken down by store. So I could place one big order(to get cheaper shipping) and get all the cards from one store which were being sought for higher prices at other stores. Then it tracked which cards needed to be sent to which stores, and what the profit margin was. I was able to parlay some of this into more money with some shops which gave an extra 10% over their cash buy price in trade and get sealed boxes instead of cash.

M:tG day trading. Buy low, sell high. It worked quite well for a while. These days the shops seem to be doing more market research, or the owner of the meta site started offering them a report of when their sell price was lower than a competitor’s buy price, so they’re not doing it anymore. It was nice while it lasted though.

Enjoy,
Steven

You think that’s hard, try understanding what a monad is.