Moving people versus building things.

My sister often marvels at my ability to build things.

You know, I always feels useless around you because you have tangible skills.

Being an engineer, I often found envy from the liberal arts majors on having ‘tangible skills’. I was in a business writing class that was required of all majors, where we learned the basics of writing letters, resumes, and memos. During the resume writing session, we were doing peer critiques.

Looking at the number of projects that I’ve done, the programming languages I knew, the liberal arts majors exclaimed “Wow, you actually have skills!”

However, I find that the ability to move people is just as important. There are many things you can do as an individual nowadays. We have plenty of tools and information available for us to do that, more than ever. And yet, there are certain types of things where you need a group of people to move forward with together. And in order to do that, one has to be able to guide people in the same direction, to be able to move them in the same direction.

That, I find to be a skill more enviable.

Temporal Expressions as a cousin to Regular Expressions

When thinking about recurring dates, I realized that it’s actually a pretty tough problem. How do you represent recurring dates in a database? Ideally, you don’t want all the instances of recurring dates from the epoch until the End of Time. I had an inkling that it should be possible to express a generalized sense of a range of dates, but I didn’t really know exactly how that would manifest itself.

That’s when I started looking for what people had done before me, since I dislike reinventing the wheel. The first thing I came upon was this recurrence python module. Reading his comments in the code, I thought being able to express dates as an equivalent of a polynomial made a lot of sense.

In fact, functions are condensed form of a set of numbers. Not all sets of numbers can be expressed by functions, but most of the ones that we care about can usually be. That makes them useful. Are there equivalent of ‘functions for dates’?

That’s when I ran into Runt, a ruby library that deals with recurring dates, which are based off of temporal expressions pattern by Martin Fowler.

But it wasn’t exactly what I had in mind when I read ‘temporal expressions’. I was thinking that Martin Fowler came up with something like regular expressions, but for time. After reading the tutorial, it wasn’t exactly what I had in mind. It used classes and patterns to represent recurring dates, rather than an expression, like a function.

So we come to the crux of my musing. Are there the equivalent of regular expressions for time, and would it be a good idea to use it?

When I first started using regular expressions, I thought it was hard to use. Not only could I not remember what some of the symbols meant, but it was dense and not easy to read. A complicated regex quickly got out of hand. I wondered if there were alternatives to regex. And apparently I wasn’t the only one either(and that post was from 2001).

If I were to use something like regex for date and time, like a temporal expression–tempex*, I wouldn’t want something syntactically like regex. It’s really rather hard to read, even if it’s powerful (read “dense”: can say alot with a little).

In drawing the parallel between regex and functions, that could be the reason why people find math arcane: the expressions in math and regex both can say alot with a little.

One should be able to represent dates and times in a matter that you can express sets of dates succinctly, and event better, be able to do operations on them, such as union, intersect, and difference.

I was surprised that it seems like there’s nothing out there that I can find that is a regular expression for time. This shouldn’t be the case. Runt is the closest thing that I can find so far. Anyone else know of anything else out there?

* I’ll have to pick some other name later. people already use the term for natural language processing of time-related phrases, in addition to Martin Fowler’s usage for the pattern

Back to coding

I’ve been getting back into the swing of things after a brief haitus. Currently, there’s a code freeze, so I can catch up with the tests. I know I’m not suppose to do it backwards like this, but when you’re sketching out how things should work, updating both code and tests are tedious.

I figured this is a good time to update all the tests, so code freeze for about 3 days. Code coverage at…53%

I’ll do more tonight. Then it’s off to do more cool and exciting features!

  • RSS feeds
  • iCal publishing
  • better date/time selector
  • end dates that matter
  • photo posting
  • “I’ll go if I can”

Major Nelson’s Xbox 360 can blog

Major Nelson’s Xbox 360 can blog

devices can blog…it’s a readable log, really. Machines often log events that happen to them, but never really in a human readable form with style and prose. This illustrates that it’s definitely amusing and possible, especially if personality engines were invented and utilized.

But in the end, the devices reflect its owner, and how they live their lives. As more and more devices log your life, you can compile stats and see how you actually live it in the long run, and be able to make changes and adjustments if you wish. This, to me, would be the ultimate personal information. Privacy in this term would have to be strictly protected.

Wheel robots makes designers rethink cars

This article about Smart Cities Team at MIT excited me a bit, not so much because of its potential (which is neat), but more the fact that they rethought the engineering of the car.

The MIT concept car is a complete re-think of vehicle technology. For a start, there is no engine, at least in the traditional sense. The power comes from devices called wheel robots. “These are self-contained wheel units that have electric motors inside,”

A traditional engine puts engineering and design restraints on what type of wheel rotations and movements are available. Because of this restraint, we’ve gotten so use to the idea of a car only having steering in the front two wheels.

With wheel robots, all the wheels can rotate independent of each other. That means that you can rotate while you’re going forward, or slide into a parallel parking space. When new technology becomes available, we should take a step back and rethink why design and engineeering decisions were made in the first place.