computing

Streets of Cairo

It's a game where you have to drive through Cairo traffic to perform your errands. You have money, gas, nerves and time as resources. You can impersonate different classes of drivers (private with different cars, taxi, bus, microbus, motorcycle, truck). Cairo streets are full of dangers: other drivers, pedestrians, animals, police, speed bumps, presidents passing by, you know. Depending on who you are, other people's reactions to you differ. For example, police won't stop you often if you are driving a fancy car but people will fear you more if you are a microbus driver.

Software behaviour monitor

Software behaves, in the sense that it reacts to input with specific interactions of its own. A a reverse-engineering tool, it's interesting to monitor how a system behaves in order to build a mental model of how to interact or fix the system.

The lifecyle of a process can be simplified as: Inception Execution Death

During Inception, typically new Operating System resources are acquired in bulk and the process is not expected to perform its function yet. Execution is the long phase where the process performs its function, by consuming more resources and producing some of its own. The process can also respond to OS messages as well as human input. Process death occurs self-inflicted (by exiting finally) or instructed by the human (through the OS). If it's not forced, the process has time to perform cleanup tasks. If it's forced, the process just dies and only the OS cleans up after it.

Software nudge system

You know how you have to nudge appliances to get them working when they get stuck having a glitch? Like hit the TV to get it to sync, fiddle with a faulty switch, etc.?

Right now, the only nudging mechanism we have in software is to kill the faulty process. This is equivalent to destroying the appliance and getting a new one in its place! Surely we can do better.

Internet-wise authorship attribution

In the pre-Internet days, an author's works (essays, novels, letters, articles) were published in book form by a publishing house. In the Internet age, however, the author publishes most of his works and his thoughts on the Internet directly, the paper publishing industry having lost its monopoly. The advantages of direct Internet publishing are: lower publishing costs, lower error-correction costs, more information granularity, more specialized structures for different information (e.g., USENET, forums, Wiki, source code, etc.), more interactivity and more democratic access to publishing.

Class lifecycle and business workflow

The main classes of an object model correspond to domain entities discovered during the business analysis phase of the software project. For example, Employee, Customer, Product, Order, Invoice, all are entities that find their way to become classes and associated data tables. Often, if not always, these entities have a well-defined lifecycle specified by the business process being automated. For example, Invoice goes through several states of Draft, Approved, Sent, Returned, Paid, etc., with well-defined transitions, before becoming inactive and ready for archival. In simpler situations like Customer, there can be as little as two states Active/Inactive with no final end state.

Fun filesystem-level ideas

The file and folder metaphor lies at the heart of computing. It is such a powerful concept that it has acquired a status of "reality" as strong as a book, even though a computer file is nothing more than some bytes strung together in a filesystem entry, disseminated randomly on a disk. This concept has tremendously helped us organize digital information, and here are a few ideas on how to extend it as we go towards the unified computing environment.

1. CVS filesystem\A filesystem that integrates CVS functionality. The idea is to enable rolling back (i.e., 'undo'ing) any version of a file, individually or as part of a transaction, like a process that modified several files during its execution.

Software quality in the open source layers

It can be argued that open source software falls within 3 main categories: server, middleware and applications. Whereas the server and middleware layers have been adequately served by FOSS, open source end-user applications exhibit weaknesses that have been overcome decades ago by closed software development. Some recommendations are given here to improve this situation.

EXAMPLES of WEAKNESSES in FOSS APPLICATIONS

  * OpenOffice.org: performance problems
  * eGroupware: immature modules
  * openCRX: unfriendly user interface
  * Gnome Nautilus File Manager: immature user interface
RECOMMENDATIONS for BETTER APPLICATIONS

Children computing

How can computers and computing assist children? Imagine this: if you were to give your daughter a computer, what would you wish it did, and what would you wish it didn't?

I would like a computer to help my child develop her thinking skills. I don't know all the thinking skills, nor their classification, so here are a few of them in no particular order:

  • Memory: there are many ways to assist in memory training, one example among many being the method of loci.
  • Classification: things that belong together go together.

Intel jingle

Music is a great mnemonic tool to establish mind share. Technology companies have been using it successfully: the Nokia ring tones, the Microsoft Windows startup and shutdown tunes and the Intel Inside jingle have become almost universally recognizable.

It is a creative challenge to devise a short (~5 secs) musical sequence that has a strong enough individuality to be remembered and associated with a brand. As an amateur musician and professional software developer, I am interested to find the logic/art behind these jingles, so I looked for a transcription of existing ones. Here's what we found:

Simplicity and perfection

Antoine de Saint Exupéry:

La perfection est atteinte non quand il ne reste rien à ajouter, mais quand il ne reste rien à enlever. Perfection is achieved not when there's nothing more to add, but when there's nothing left to remove.

Found in the very good programming book, Programming Pearls, by Jon Bentley.

Syndicate content