July 12th, 2008 — personal
One of my closest friends, Patrick Simmons, recently left for Honduras with the Peace Corps. He’ll be down there for 28 months mostly out of contact with everyone else. In order to help him stay in contact he and I set up theDepths.org which is a blog that will be updated with letters he sends for me to transcribe.
Even if you don’t know Patrick it should make an interesting read, he’s going to be helping to educate and help with conservation efforts down there in Honduras, and there might even be some great pictures that come back.
Popularity: 2%
July 6th, 2008 — personal, politics
I’ve been asked how I got involved in politics and I’ve always had trouble coming up with a clear answer. I certainly do not come from an overly political family, I rarely remember politics being discussed in my presence save for sporadically around presidential elections. None in my family have been particularly involved, in fact the opposite seems to be more true, my political involvement has encouraged them to be slightly more active or at least outspoken.
Growing up in North Carolina, one of the few politicians that I do recall coming up among adults was that of Jesse Helms, who passed away this past weekend. Mr. Helms was a controversial symbol, to some representing a reverence for tradition and for some an icon of unrepentant bigotry. It is clear that he was masterful at using the superficial differences to strike divisions in the populace for political advantage. Whether he was a racist in his heart or not (he in fact did deny being the bigot he was painted as and so often seemed to be) he was a master using in the language of hate for political gain.
I spent the first ten years of my life in a fairly rural area of North Carolina, an area where the twin scourges of racism and poverty were well known by many. My own family wasn’t particularly poor, and our neighborhood was relatively nice for the town we lived in. Like most children, I have fond memories of my early childhood, playing in the yards, riding bikes in the street always with my regular neighborhood pals. My best friend Chris and I were nearly inseparable, both of his parents worked and my mom was typically at home to take us places, give us snacks, etc. He also had an older sister and brother that we would sometimes spend time with. Chris and I were like brothers, his family getting a dog was nearly as good as mine getting a dog because our adjacent yards were treated as one and the same.
Chris’ father was a hard worker often working the night shift and having to sleep during the day and his mother held a fairly important government job, the family as a result was fairly prosperous. Their house was one of the few two story houses in the neighborhood, one of my most persistent memories about his father is the way he spent so much time taking care of the lawn. Chris and his siblings were treated in many ways like part of our family, I can even recall being childishly jealous on at least one occasion over my mother’s treatment of Chris’ sister. Besides the upkeep of their house and fact that both parents worked, there was one difference that to some made all the difference, Chris was black.
I don’t remember how or when I first became aware that this was an issue. I don’t know if it was the time a neighbor threatened Chris and I with a pellet gun if we came in his yard when I had played there with his kids in the past. It may have been overhearing a discussion that the reason that Chris’ dad took such delicate care of his lawn was that he knew if it was even half as ragged as the yard across the street they neighbors would talk about how his family was lowering property values. It may have been one of the few times that one of the particularly troubled kids in the neighborhood didn’t want to share a pool with Chris. One thing that I found encouraging even then was how all but that one of the neighborhood kids had not yet adopted their parents attitudes, and would play freely with Chris most of the time. I saw racism as an odd hurtful thing from a previous generation.
Eventually Chris moved away and not long afterwards my family moved to a much more affluent suburban town where the poverty and racism were not on prominent display. I of course spent more time thinking about my crush on some girl in my social studies class than about any sort of racism or injustice. It wasn’t for several more years that the aftermath of the 2000 election would get me to start thinking about the importance of democracy and down the path by which I would eventually discover my own political ideals. When the time came I have no doubt that it was seeing how people like Jesse Helms had contributed to legitimizing racism and using the lack of racial understanding and fears of uneducated southerners like many in my neighborhood that helped me see the importance of having equality as the core of any set of political beliefs.
Just as I saw how my peers in the neighborhood had not yet adopted their parents prejudices and had hope that racism was a thing of a previous generation; I hope that Mr. Helms can be remembered as a relic of a past we would be well advised to leave behind.
Popularity: 2%
July 4th, 2008 — RIT, personal
I graduated in May from Rochester Institute of Technology with a degree in Computer Science although I’m sure it still hasn’t finished sinking in. I decided to write a bit for self-reflection on my time there, and hopefully it will be of benefit to others in similar situations.
Four years ago I went to RIT to study computer science, but not unlike most college freshman it wasn’t long until I felt that I’d perhaps made the wrong choice. The CS courses I was taking simply weren’t challenging or holding my interest, and I’d narrowly chosen going to school for computer science over something like political science. I have enjoyed programming since I was 13 and it has always been something that has come fairly easily to me, but after my first year in college it occurred to me that perhaps it wasn’t what I truly wanted to do with my life.
At RIT, computer science majors are required to do four quarters of co-op before graduation, which are typically either done at local Rochester companies or at the big software companies. I had decided to wait until after my first co-op before transferring to a political science program elsewhere, so I wanted to try to make that first co-op count. In 2006 I compiled a list of over 20 political organizations and managed to get in touch with most of them to find out if any had need for an intern with my skills. It turned out several did have internship programs, but mostly for more typical internships, nothing that would count for my co-op requirements. It did occur to me that it would have been much easier to apply via the school’s “JobZone” that listed hundreds of jobs I was eligible for but seemingly none that fit my interests.
I ended up finding a co-op with Project Vote Smart, a non-profit that collects information on politicians and candidates. There are a couple things that are important to note about working on the dev team at Project Vote Smart: it is a very popular site that gets massive traffic in election years, the development team is extremely small (a third would be that it is based in Montana, but that doesn’t come into play in this discussion). These details meant that this massive site was basically being written and maintained by just three people. This was a great opportunity as it meant that I wasn’t given the typical grunt work given to many of my peers on their first co-ops. Being the only intern on a small team meant that I was given a large amount of responsibility, and after a few weeks I had proved myself and I was given a fair deal of autonomy. Working there proved to me that coding 8+ hours a day can be fun and rewarding even when it isn’t on the most exciting application in the world.
Of course, I decided to continue to pursue my CS degree, with the hopes that I could complete it in two more years and if I wasn’t happy with CS then go on to grad school for something else. In the next two years at RIT I added minors in public policy and political science and my coursework generally improved. I also worked at a more typical co-op once just to give it a try (it was worse than I had imagined, which is a story for another time). In the summer of 2007 I did another co-op at Sunlight Labs, then a relatively new creation of the Sunlight Foundation that proved to be the perfect place for someone like me that has straddled the politics/technology fence and wished there were more people thinking about how to bring the two together.
I stayed on at Sunlight as a consultant for my last year at school and now that I’ve graduated have made the move down to DC to work in what is perhaps the best possible place for someone with my skills and interests. Any regrets I had early on about choosing computer science over political science are long gone.
One of my reasons for writing this post is that my brother is on the verge of entering college and like virtually everyone else at that age, he isn’t entirely sure what he wants to do. I know five years ago when I was applying to colleges I spent a lot of time fretting over where to go/what to study, but I think what I’ve learned from all this is that what really matters is finding out what it is that you want to do, not what major you want to have for four years.
There is a lot of advice out there about choosing a major, ranging from “go with what you love even if you can’t think of a purpose for it” to “pick the degree that will get you the best job.” I suppose if you define “best job” as job that allows you to fulfill your potential instead of earn the most money, then my advice would be a combination: to pick the thing that you love that will help you find a job that maximizes your potential.
This is a hard equation to get exactly right, and I’m not convinced that many people can find that in the short amount of time that they are at college. I suppose the good news is that we tend to live and work for about four decades after our four or so years in college, so there’s plenty of time to work on finding that balance.
Popularity: 3%
May 13th, 2008 — Ubuntu
This weekend as classes have started to wind down I had a bit of time to mess with my laptop for some general geek fun. Playing with KDE 4 is something I’ve wanted to do the past few months but avoided for fear of breaking things when I had too much going on to spend a full day getting them working again. Encouraged by a brief trial of the Kubuntu KDE4 Remix LiveCD I decided to give it a try.
To give a bit of background: I’ve been an Ubuntu user for over 3 years and had only given Kubuntu a try once, on a live CD back at 6.06. The most exposure to KDE that I’d really had was back when I ran Fedora for a few months as my secondary OS while I was still primarily using Windows.
If you want to follow along and are already on Ubuntu, it helps that Kubuntu is an official Ubuntu project and not a fork or derivative, installing it couldn’t be easier.
sudo apt-get install kubuntu-kde4-desktop
Walk away for a while while it installs, come back, logout, and select KDE4 at the login screen.

Appearance
KDE4 is certainly attractive, to me it has always felt that KDE valued visual polish while for the most part Gnome has treated it as secondary. The new Oxygen theme and Plasma widgets are visually appealing although Plasma is certainly not without its problems. Taking a closer look at the above screenshot shows that the clock is cut off, some of the systray icons are not properly redrawn, and the main KDE menu is drawn a bit off as well. Changing the size of the systray fixes these problems, but I can’t stand a huge tray. (I also prefer my tray at the top which caused even more problems)
KDE4 has built in compositing which (as expected) ran fine on my laptop’s nVidia 8600. It stacks up fine compared to Compiz Fusion, while it doesn’t have the wild selection of plugins, it has essentially everything I used on Compiz, and the few people I showed my desktop to this weekend were suitably impressed by “that Linux thing”.
Similarly to Gnome, the various built in themes range from the hideous to the sleek. Why someone would want their desktop to look like the antique CDE or Windows 95 is a mystery, but it seems like KDE and Gnome always feel obligated to include these themes. Of course, the Oxygen theme is very polished, and coming from Gnome the saved color schemes were a nice twist. Color schemes offer the ability to easily customize a theme, and several of the included schemes looked fairly nice, and it appears easy to make your own or get more from KDE-Look.org
Plasma doesn’t seem quite ready, I had a few instances where desktop icons would duplicate. Widgets didn’t seem to be entirely persistent, and as noted, the panel contained numerous display glitches. Reading up on plasma it appears to be a massive overhaul, they are attempting to really reshape the desktop metaphor, and so these kinks can in some ways be expected of a .0 release.
The only real problem besides the plasma glitches, was that when running non-native apps like Firefox they looked terrible. A quick search turned up the gtk-qt-engine-kde4 package that provided an added configuration section that allowed for tuning the appearance of GTK apps, which solved the problem.
Performance-wise it was difficult to notice much of a difference, this is a fairly new laptop. KDE4 did seem to come up faster from the login screen than Gnome typically does, but this may have just been an illusory perception caused by the fact that KDE gives more of an indication of what it’s doing as it starts than Gnome does.
Core Functionality
Gnome is known for hiding its configuration and even removing options, this was a major issue that Linus had criticized the Gnome developers for. It is sometimes frustrating in Gnome to not be able to change a certain setting, and I figured that it would be nice not to run into these problems in KDE.
The KDE configuration app is very impressive coming from Gnome. All of the settings exist in one place and are extremely comprehensive. The settings manager even contains a lot of the application specific settings. It’s like a user-friendly version of gconf-editor. One minor point would be that the distinction between the two tabs, General and Advanced, seems somewhat arbitrary given the placement of some settings.
Another thing I noticed was that the KDE window manager KWin has some nice options that just aren’t present in Gnome. (and a few that are but that I never knew about because they aren’t configurable so I’d never seen them) Right/middle clicking the maximize button for instance maximizes horizontally/vertically, which it turns out is default behavior in Compiz (but not Metacity, Gnome’s default WM). KWin’s multiple desktop support was nice, and featured easily accessible options from the window menu to peg a window to a particular desktop, control the window’s opacity, and a lot more. A lot of these options are available via Gnome+Compiz but take going into the Compiz settings manager and setting manually instead of clicking on the window menu and selecting. This was a nice touch that made some of the more useful features of a modern WM like KWin/Compiz accessible instead of hidden away.
Another nice feature is the new KDE menu. From what I’ve seen of the Vista Start Menu it resembles it, although I’m not qualified to comment on how it truly compares to Vista’s. I appreciated the ability to search instead of navigating the menu (on Gnome I rarely use the menu, opting instead to use Gnome Do) Saving favorite applications and having large buttons for the sub-menus is another nice touch that I think could make the fairly stale Gnome menu more usable.

In KDE pressing Alt-F2 brings up miniterm, which is much nicer than Gnome’s Alt-F2 run dialog. Miniterm allows the execution of command line one liners as well as typical launch behavior. On the other hand however, the system monitor equivalent lacked much of the information that Gnome’s provides and seemed like a weak spot in the otherwise shiny KDE4. The recent improvements to Gnome’s system monitor have made this gap even wider. (update: commenter Tsiolkovsky points out that I was seeing the stripped down version of the task manager and that KDE does in fact have a very nice task manager that can be brought up separately, he is absolutely correct)
KDE has recently adopted a new file manager named Dolphin. Dolphin is quite new and aims to be simpler than the previous KDE file manager, but I felt still outperformed Nautilus in most ways. Dolphin supports OSX-style column browsing, as well as features like split-pane browsing. I did miss the ease of remote browsing that nautilus provides as well as certain features I have gotten used to like Ctrl-S to select a pattern in a folder.

KDE4 Applications
A desktop environment is in many ways defined by its applications. Although it is possible to run KDE apps on a Gnome desktop and vice versa, things tend to work better when they are native. I took a look primarily at the core applications: web browser, IM client, document viewer, terminal, media player, text editor.
The standard KDE Web Browser is Konqueror. Konqueror was also until recently the default file manager and is immensely powerful. Konqueror is based on KHTML which is the predecessor to WebKit. It rendered most pages fairly well, and was certainly usable. I couldn’t get along without Firefox for long, although a fair comparison would be to Gnome’s Epiphany which I felt that Konqueror blew away. I also spent time using Konqueror as a file manager which was nice. The fact that it supports split views, tabbed browsing, and inline previews was extremely nice. For example, it can open PDFs using a KDE subsystem called KParts that allows KDE apps to embed one another as components. (KParts seems quite cool, and is presumably why the terminal is embeddable everywhere such as the file browser and text editor).
I had never really heard much about KDE’s IM client Kopete so I figured that it didn’t stack up to pidgin. It certainly doesn’t have the protocol support, which I think is a shame because it seems like otherwise it could be a real contender. I’ve been using Pidgin (or it’s previous incarnation gaim) longer than probably any other piece of software (except perhaps counting Mozilla with Firefox) so making the switch would be a bit tough as I’ve just gotten used to it. Kopete has some unique features including conversation theme support like OSX’s adium, and has some unique plugins (including one that displays LaTeX formulas in conversations).

Although not yet a true KDE4 application, AmaroK warrants a mention here. AmaroK is easily the best Linux music client and with an upcoming Windows, will likely be the best music player on Linux. AmaroK has great library support, an easy to use plugin system with a rich suite of plugins. AmaroK (alongside Kile) was one of the two KDE applications that I have used heavily from Gnome.
At first I didn’t think I’d bother talking about the terminal, as I’ve never thought much one way or the other about gnome-terminal. konsole however includes features like searching output, monitoring for activity/silence, and bookmarking. Given how much time I spent in the terminal, now that I have these features I’m not sure I’ll be able to give them up. Terminal transparency doesn’t work unless you pass –enable-transparency which I thought was strange, but isn’t really a show stopper as I don’t typically use a transparent terminal, and it’d be simple to alias a konsole command to include this option if I did.
Similarly to the terminal, it’d be easy to overlook the document viewer coming from Gnome’s evince. I should say that this is in a way a testament to evince’s ease of use that it is so out of the way. Despite being scores better than acroread I’ve always wanted more out of my PDF reader. I never understood why I couldn’t easily annotate and bookmark my PDFs, Okular, the KDE4 document viewer remedies that problem. Okular is based on libpoppler, the same library that powers evince, and so it’s rendering should be just as good as that of evince. At the same time however, it offers highlighters, post-it notes, and bookmarking that make reading a PDF book a lot more practical. For some reason however, search did seem broken, which is a big problem that should definitely be fixed.

Kate is the KDE text editor, and puts Gnome’s gedit to shame the way that gedit puts Notepad to shame. Features like split windows, embedded terminal support, and code folding make Kate resemble a serious editor for developers. I can understand the desire to have a simpler editor however, and it seems like by default Kate might be a bit overwhelming for someone that is looking to just edit some simple text. (although I do question how often that happens these days when it seems like most users looking for simple text editing would go to a word processor)
And just to explain my omission of word processors: I didn’t get a chance to test KOffice. From what I’ve read KOffice 2 (the KDE4 edition) isn’t quite ready yet, and Kubuntu uses OpenOffice by default. Kubuntu does ship with an Oxygen theme for OpenOffice however that makes it look native.
Final Thoughts
Unfortunately the erratic behavior of Plasma is going to keep me from making the full switch over to KDE4. The fact that I seem to prefer Dolphin/Konqueror over Nautilus and Konsole over gnome-terminal seems like fair reason to seriously consider switching. The gedit/kate differences matter little to me as I prefer Komodo Edit as my editor in general. Also, I’m fairly convinced I’m going to use Firefox, Pidgin, AmaroK and OpenOffice no matter which desktop environment I’m using so the various offerings in these fields don’t have a huge effect on my opinion. KDE is certainly visually attractive, and I have a feeling that I’ll start using more and more KDE apps, and by the time the Intrepid Ibex release hits, I’m very likely to give Kubuntu another real try. By then KDE 4.1 will be released and I’d expect that a lot more KDE3 apps will be KDE4 native.
One thing to take away from all of this is that in the era of the modern desktop it really isn’t too scary to mix and match. I have been back in Gnome now for a day and have given Dolphin a try as well as showing off the LaTeX plugin in Kopete to a friend. Just as I’ve never had real problems using AmaroK in my several years on Ubuntu, it doesn’t seem like I’ll have much trouble at all should I start to prefer things like Okular over Evince or even sticky note application KNotes over it’s counterpart Tomboy. This also makes the idea of switching less frightening, just as the availability of Open Source applications like pidgin and firefox eased my transition to Ubuntu, the fact that I didn’t have to give up any of my Gnome apps from KDE and vice versa will make what might be a transition over to KDE4 relatively pain free should the time come.
In conclusion, kudos to the KDE and Kubuntu team for building fine products. I’m understanding of the bugs in Kubuntu seeing as Kubuntu 8.04 was the first distro to ship with KDE4. I regret that I didn’t have more time to test out some of the other apps that are less important to me like KOffice and KPlayer or any of the KDE games. Also, if I overlooked any really cool KDE applications I’d be glad to hear from readers as I admittedly just pretty much went with what showed up in the menus after a default install.
Continue reading →
Popularity: 100%
April 20th, 2008 — development, python
This weekend I was helping out a friend when he pasted me some of the code from his latest project that happens to be written in C#:
(the only change I’ve made was to rename the identifying feature to XYZ)
namespace XYZ.Core
{
static class Entry
{
static void Main(string[] args)
{
using (Game game = new Game())
{
game.Run();
}
}
}
}
I know that monitors are getting bigger and bigger, but vertical space is still a precious commodity, so let’s try turning the above code into something that looks more like
namespace XYZ.Core
static class Entry:
static void Main(string[] args):
using (Game game = new Game())
game.Run();
This code is shorter and easier on the eyes, and I’m even ignoring the whole issue of having a class that simply has a static void main, as the authors of the cool Boo language point out, the people who came up with “public static void main” were kidding, it’s just that a few million Java/C# programmers didn’t get the joke.
For those of you that didn’t know where this was going, the above is just a few steps away from being valid Python (or for you .NET junkies perhaps Boo). Other people have addressed the myth of significant whitespace and I won’t go into great detail here, but I will say that Python essentially injects INDENT/DEDENT tokens that function in the exact same way as { and }.
What is often used as an argument against Python and other indentation-scoped languages is therefore really an advantage. {} are no more useful than the human appendix or other vestigial structures, the only reason that modern programming languages have them is that they inherited them.
If languages like Java/C# thought it was a good idea to free themselves of explicit memory management why not also free themselves of useless syntax that does nothing but clutter up code?
This divergence seems to only be growing wider, with languages like Python already free of these vestigial quirks, whereas languages like C++, Java, and C# continue to make their syntax more and more obfuscated. (eg. the tortured C++ lambda syntax)
This discussion on what syntax could be thought of as vestigial sparked some debate, some other potential candidates others suggested include the ++/– operators and PHP’s use of ->. I’d love to read comments with examples of other developers favorite vestigial syntax.
edit: A commenter over on reddit points out that the Lisp community had this right years ago. It does say something that one of the oldest languages is so free of the cruft that the traditionally more dominant curly-brace family has adopted. The idea that those who forget lisp are doomed to reinvent it is surely at work here.
Popularity: 9%