Rick Spencer on Ubuntu

ubuntu logo
Ubuntu is produced and supported by Canonical. Ubuntu is a Desktop Linux Distribution. Essentially, this means that it is an Operating System, a complete set of applications for doing anything you could imagine, and also a platform for creating new applications and user experiences.

Ubuntu is my OS of choice, and has been since their second version. My first post to their boards was February 14th, 2005. I believe that canonical and the Ubuntu community have the technology, the philosophy, and the business practices to help untold millions of people. It's also a really fun platform for development.

As an open source project, everyone who wants to support the project is free to contribute in whatever way they see fit. Besides evangelizing and introducing friends and family to Ubuntu, I am also working some other modest contributions. I hope that my background in developer usability helps the Ubuntu community in this way, however small the contribution may be.

Application Programming for Ubuntu

This is a documentation project that I started. The goal is to help programmers new to Linux to quickly get started and start seeing successes on the Ubuntu desktop platform. The programmers I have in mind maybe aren't professional developers, but write code from smaller projects and a limited set of users, perhaps just themselves. The idea is to provide a very focused set of recommendations for how to accomplish typical programming tasks so that the programmers can gain a toe hold on Linux programming, and perhaps go on to explore the richness of options later.

These chapters are still in early drafts. While I'm looking for a good place to host this project, you can just grab them here:

  1. Getting Started: Ubuntu and Developer Tools
  2. Introduction to the Python Language
  3. Python Modules and Classes
  4. Creating and Displaying a Gtk Window
  5. Populate a Window with Widgets
  6. Animating a Window with Signals
  7. Creating Windows and Widgets on the Fly

pyGTK Widgets

This is related to my documentation project. Essentially, I am planning to slowly create a set of widgets that allow developers to accomplish certain tasks in a "widget focused" manner. That means that instead of learning new coding constructs, some things could be accomplished by setting properties on widgets. This is very much inspired by the .NET component model.

My first effort in this regard is a widget that makes it easy for developers to add asynchronous tasks to a form. I created a widget called "TaskProgressbar". Developers can add this to a form, and then simply pass in a function. When they tell the TaskProgressbar to start, the function is run asynchronously, and the taskbar feedback is handled for them. In this way, developers do not have to learn how to use Threads as the Threads are encapsulated within the widget. The Python file contains a sample that demonstrates how it works. I still have a lot of work to do to beef up the widget, but I have a good start.


AsynchTaskProgressBox Source Forge Link


Crashteroids grew out of a few related goals. I wanted to learn the pyGame framework, and I wanted to have some fun learning to program on my eeePC, and I wanted to have a fun game for my eeePC. The result is Crashteroids, an Asteroids clone. To date, I have completed the basic physics and scoring. I still need to add enemies, splash screens, and high scores.

Crashteroids Deb File

Crashteroids Source Forge Link

Crashteroids Game Play Video on my eeePC 4g
(The video capture is making it a little jerky)


FogBugz is a web based work item tracking solution offered by a company called Fog Creek. The web UI lacks some features that we needed for our project management and time tracking, so I created a python module around their XML/REST API. On top of this I am building a pyGTK front end. Besides being able to code needed features that are lacking the FogBugz offering, I am also using this to generate code samples for Application Programming Chapters, especially for parsing XML, using TreeViews (grids in Gtk), and using Notebooks (tabs in Gtk). The pyFogbugz module currently supports retrieving filters, searches, intervals, and work items. I still need to add the ability to edit and update work items, as well as work on items in batches.

pyFogBugz Source Forge Link

FogBugz client screen shot

Ctags Menu Gedit Plugin

Ctags Menu is a Gedit Plugin. Gedit is the default text editor on Ubuntu. I created this plugin to make it easier to program on my eeePC. The plugin encapsulates the ctags command line application, and offers a menu of members, functions, and other code blocks in a code file. This is useful on the eeePC because there is limited screen real estate.

Ctags Menu Archive