Software

Talking to machines since the 1980s

Programming computers is one of my passions and has been for most of my life. It all began more than thirty years ago when I sat at my mom’s kitchen table keying in machine language instructions for an eight-bit Motorola microprocessor to make it turn LEDs on and off. I quickly graduated from looking up hex opcodes to writing the CPU instructions in assembly language, letting an actual computer turn them into machine language.1

Software development has come a long ways since then, and now I do everything with object-oriented programming, Python and a little bit of C++. That includes this website, which runs on my own custom server based on the open-source Twisted asynchronous processing framework. It serves simple, fast static HTML that is generated from modified Markdown format with a package flexbooker I wrote for Tellectual Press to publish books. That package is proprietary, but I’ve contributed a few others to the Python Package Index that you are free to copy, use, and modify under the Apache License:

  • AsynQueue provides asynchronous task queueing based on the Twisted framework, with task prioritization and a powerful worker interface. Worker implementations are included for running tasks asynchronously in the main thread, in separate threads, and in separate Python interpreters (multiprocessing).

  • sAsync builds on AsynQueue and the excellent SQLAlchemy package to provide SQL database in an asynchronous fashion. Everything revolves around an AccessBroker that conveniently manages database access, table setup, and transactions. It also offers persistent item-value stores, arrays, and dictionaries.

  • logalyzer parses the bloated HTTP access logs spewed out by your web server to extract the info you want about hits from (hopefully) real people instead of just the endless stream of hackers and bots that passes for web traffic nowadays. Stores the info in a relational database where you can access it using all the power of SQL.

  • yampex is yet another Matplotlib extension. It makes Matplotlib easier to use, especially with subplots. You simply construct a Plotter object with the number of subplot rows and columns you want, and do a context call on it to get a version of the object that’s all set up to do your subplots.

———

If you want to see an interactive demo of my software running a bunch of things at once, check out http://mcm.edsuom.com, which runs the mcMandelbrot (multi-core Mandelbrot set) package that uses AsynQueue and is bundled with it as a demo.

Interactive Mandelbrot set at http://mcm.edsuom.com

It computes the Mandelbrot set over a region of the complex plane, refined by you with mouse clicks on the image, on my multi-core VPS. The programming involved Python, of course, as well as inline C for the computationally intensive stuff, responsive CSS for the site layout, and some JavaScript for the user interaction.

Notes


  1. I carried a textbook about microprocessors around with me in middle school to read instead of the boring official coursework. We were offered one computer class with some Commodore PETs to use–clunky built-in keyboards and character-mode green screens. The teacher took a hands-off approach, and I spent my whole time writing a crude character-based Pac-Man clone. BASIC on an Apple II and Atari 2600 soon followed. Then I finally wrote something in C, a DOS shareware program called Dataviewer that netted me $15 from exactly one user registration.