Archive for the ‘Geekiness’ Category


Writing Stuff is Hard

Man, I so wish I could be a competent (or at least regular) blogger, but honestly, writing things is hard. I had this idea about documenting the inconsistent behavior of scrollbars in Windows XP using a blog post, but then I realized no one cares about stuff like that.

Well, maybe I do, but then again I’m not a very normal person.

Future Projects

I enjoy writing code. I’m not very good at it, and my experience is that I don’t work well when coding in a group, but the point is that I enjoy building things that run on a computer. I enjoy the feeling of accomplishment that comes from seeing a system work and knowing that my handiwork was involved. Most of it isn’t really my effort, of course: the heavy lifting is done by the folks behind PHP and WordPress. I merely ride on the back of giants.

But that’s talking about web development work. More specifically, the enhancements I’ve made to my client Antonio’s site in recent weeks. What I’ve been dreaming of doing, however, is something similar but not quite the same.

I want to write a desktop application. Or rather, two desktop applications.

The first is a cross-browser, cross-platform bookmark synchronizer. The idea is simple: as part of my work, I use multiple browsers on multiple operating systems on multiple computers. It might seem like a silly thing, but I want the bookmarks in every one of those browsers to be exactly the same. I bookmark sites all the time, and it drives me crazy when I can’t access a bookmark because it’s living on a different partition.

The second application is a simple mouse-button to keyboard-shortcut mapper for OS X. A number of such applications already exist, but they’re shareware, and I want to write one that’s open-source. It would also be a great opportunity for me to learn about the Carbon API as well.

I don’t expect that writing either of these applications is going to be easy. While I have written modestly-sized web applications in the past, I have never succeeded to building a non-trivial desktop application from scratch. There’s just too much complexity. Traditional applications have to deal with threading, event handling, and all sorts of other dross. Web applications are hosted by a web server which handles most of this complexity—I just have to handle the POST data and I’m done! This is a gross simplification, I know, but web development just seems easier to me somehow.

Now that I’ve laid these plans out, however, it’s time to get started working on them. You know the mantra: Release early, release often.

Flock 1.1.1

So now I’m trying out Flock as a blogging client. I remember trying their browser out back when they had their first public beta (after teasing us with screenshots galore) and feeling distinctly unimpressed. But hey, everyone deserves a second chance, right?

Unnatural Languages

Wow, is it April already? Time sure flies.

Okay, so clearly I’m not the most prolific blogger in the world. It’s not that I’m out of ideas; I just find it hard to express myself in prose nowadays. Part of this might be because I’ve immersed myself in relearning a couple of programming languages lately: Ruby, Objective-C and even good ol’ C++. It’s kinda hard to write in plain English again after all you’ve seen lately are things like if ([obj respondsToSelector:@selector(valueForKey:)]) (BlockMethods.getImplementation()->*eachPtr)([obj valueForKey:@"array"]) { |x| class << x; attr_accessor :tag; end }

You may think this is because I’m a huge geek with no life outside of computers. That is, of course, absolutely correct. But to be honest, I’m not very good at programming for a geek; I just love learning about new languages and appreciating the beauty of their design.

In my freshman year at Cornell, I took a course where we had to write a compiler for a simple object-oriented language that would output assembly for a fictitious machine. Going through this course was like a revelation: scoping rules were not—as I thought at the time—dictated by some lower-level system, but were intentional design choices. I also saw that inheritance in OOP wasn’t at all natural to implement, which implied to me that the concept of objects came first before someone decided to put it in a language.

Put in other words, I realized that programming languages were human-created abstractions. And from that point on, I saw programming languages as something akin to works of art; each language is a collection of design choices—some more unusual than others—that come together and attempt to form a coherent whole. It’s really quite a fascinating subject…

No? Oh come on, at least I think so.

A Word on Mac FTP Clients

FileZilla

Since I’ve just uploaded a bunch of files via FTP to update WordPress, I might as well mention something about FTP clients on the Mac. People keep recommending Transmit, which I know is full of liquid awesome like what everyone says, but I’m a starving NSF with a barely adequate income. Paying US$30 for an FTP client is just out of the question.

At this point, I usually give up and just use Cyberduck, but it turns out Cyberduck has its own little quirk. Every time I do an upload, it insists on performing what seems like multiple ls commands to grab the timestamp of every file that it’s about to overwrite before it even begins the upload process. It also doesn’t help that performing any other task (clicking on a toolbar button, opening the application preferences) while this happens will summon the dreaded beachball.

But then, through sheer luck (read: Wikipedia), I learned that FileZilla now has a Mac version! Granted, its interface is utterly un-Mac-like and the entire application is essentially unchanged from the Windows version, but here’s the bottom line: it’s free and reliable. It may not be pretty, but FileZilla works incredibly well. And really, isn’t that all you need?