c133.org/blog :
Mon, 24 Sep 2007
.: qotd ::

<davej> so mountain dew have made a huge fuck up.
<davej> they marketed this drink to me as 'game fuel'. but it tastes distinctly like 'ass fuel'

[20:03] | [/random] | # | G
Fri, 21 Sep 2007
.: announcing MobilePushr ::

When I first heard that the iPhone had a camera built-in, as well as WiFi, those two features triggered the following thought:

It would be really hot if you could upload the pictures from the camera directly to Flickr.

When I got my iPhone, I figured out a workflow that I could use to post pictures from the phone to my Flickr account, but it totally sucked balls was less than optimal. For each picture I wanted to upload, I had to open the picture in the Photos app and email it to a special address that Flickr had associated with my account.

Negatives of this approach? Impossible to use for more than a couple of images at a time, primarily, but also, annoyingly, the Mail app on the iPhone scales and recompresses the JPEG images before sending - and it strips them of their EXIF data, too.

So I was mildly displeased, but there was a way I could get it to work, kinda.

Then the iPhone got cracked wide open. People started figuring out how to write third-party apps and get them installed on their iPhones, and - to be honest - the UI for it, via Installer.app, is - even though it's not from Apple - better than anything I've seen on any other mobile phone, ever.

The Friday before last (September 7th), I decided it was time to take matters into my own hands. Finally learn Objective C. Start writing my dedicated "Push all of the images in my Camera Roll to Flickr, right now dammit" application. And I got a pretty good start! Got the toolchain to build working iPhone apps, and that only took a few hours. Started reading through Flickr's API documentation. Started implementing some functions that didn't require authorization to call - learning how to use Flickr's REST API, basically. Once the first couple of unauthenticated calls worked and did what I expected, I knew it would only be a matter of time before I had my app working.

And then someone pointed me to iFlickr.

My first thought was "Dammit, somebody beat me to it." And I was a little depressed for a bit.

I downloaded it and tried to get it working. No offense to the iFlickr devs, but they clearly didn't put a lot of thought into the user experience (or if they did, I posit that their ideas about "good user experience" work completely differently from mine). I didn't end up getting it to work, but it's open-source, right?

Naturally, my next thought: "Well, I've been working on mine, and this doesn't really do what I wanted. But... maybe I can steal some of their code at least!"

And then I looked at the code.

My eyes still burn a little bit from that. That ... that was not a good idea. I've had much better ideas in the past.

I worked on this for the next few nights, realized that I could completely avoid the messy minitoken crap by using the "Desktop app" authentication mode from Flickr, deleted all of my code that dealt with mini-tokens, and the other night, I finally got it to actually upload pictures to my Flickr account. (My friend Cliff's help was so valuable as to be incalculable.)

I'll post more technical details later, but the important thing is: MobilePushr is out. The UI is going to get a lot of love in the next few days, because the current one doesn't provide nearly enough feedback, but as of right now, MobilePushr lets me do something that I've wanted for almost three months.

I can push my JPEGs directly from my iPhone to my Flickr account with the push of a single, giant red button. (And so can you! If you go download it and install it on your iPhone, that is. Assuming you have an iPhone.)

Also, of course, MobilePushr is Open Source / Free Software, released under the GPLv2. If you use git, you can look at my code by cloning git://mg8.org/MobilePushr and poking around.

The really awesome thing about all of this is that, through Flickr, I can see how many people have given my app permission to link to their account, and in the first twelve hours alone over a thousand people have activated support for MobilePushr on their Flickr accounts.

I don't even have words to describe how awesome that makes me feel.

[04:18] | [/tech] | # | G
Thu, 20 Sep 2007
.: qotd ::

<ajax> it's like kicking a puppy
<ajax> ... in that's it's really fun

[18:09] | [/random] | # | G
Tue, 12 Jun 2007
.: qotd ::

<ajax> i pick good days to go to olpc office
<ajax> free ice cream in the lobby
<keithp> ajax: winning
<keithp> ajax: where is it from?
<ajax> buckets?

[13:46] | [/random] | # | G
Mon, 11 Jun 2007
Tue, 15 May 2007
.: qotd ::

<mjg59> daniels: You'd better be getting dolla dolla for this
<daniels> mjg59: well, euro euro, but yeah

[16:42] | [/random] | # | G
Thu, 26 Apr 2007
.: qotd ::

<ajax> yum, well. let's not mention yum.
<clee> ajax: I thought you were making yum not suck.
<ajax> clee: i realized life was short and i wanted to work on something that stands the remotest chance in hell of getting me laid
<clee> ajax: I thought you already got guaranteed sex.
<ajax> HEY I MADE THE UPDATER FASTER: "eew, go away"
<davej> "Hey baby, want to see multiple graphic cards working at once? huh?"
<ajax> DUDE CHECK OUT THIS GADGET IT'S WAY CUTE AND HAS WOBBLY WINDOWS: "ooh, i spreads for you"

[20:04] | [/random] | # | G
Tue, 23 Jan 2007
.: they're gonna hunt me? for sport? ::

Can't really think of anything funny or clever to say about this; I had surgery for my hernia today, and it went well, I suppose. I survived, and now I have a surprisingly large incision which has been covered in superglue. It's going to form a bad-ass scar.

My surgeon prescribed vicodin and ibuprofen. I'm not entirely sure that either of those is helping me at all.

I was told before I went under the knife that the vicodin they were giving me was basically diazepam, which made me think of Metal Gear Solid, and I was happy. Visions of long, drawn-out boss fights with Sniper Wolf danced through my head. Unfortunately, it turns out that the nurse lied to me, and vicodin is not in fact diazepam.

Incidentally, I had my prescriptions filled at Target, because of their totally sweet ClearRx bottles. If you haven't heard of them, you should check out the story about why they're awesome.

Anyway. I'm alive, and that's something.

[06:44] | [/personal] | # | G
Wed, 03 Jan 2007
.: qotd ::

<clee> man, git hates me.
<daniels> git does not love
<daniels> occasionally it roughly pleasures
<daniels> but there's no tender embrace, and definitely no breakfast the next morning

[19:10] | [/random] | # | G
Wed, 27 Dec 2006
.: alvis will smoke those bitches ::

Christmas is always an interesting time of year.

Three years ago I had the single worst Christmas ever. The ones since then haven't been so hot either, until now. This year's Christmas is officially the best one I've ever had.

The reason?

I have finally gotten rid of a car that I hated and I now am the proud owner of a brand-new 2007 Toyota Corolla. It's got a five-speed manual transmission, and it's totally freakin' sweet.

I'm really excited about getting more than twenty miles per gallon on road trips. I'm hella stoked about having a manual transmission again. But most of all, I'm just happy to finally move past the stage of my life where I was constantly pissed at myself for being so stupid as to get stuck with the previous car.

Anyway. I'm back in Arizona for the holidays, and things are pretty fucking great right now. For the first time in a long time, I'm looking forward to the road trip back home in my car.

On a slightly-less-awesome newsfront... I get to have surgery next month.

Some of you may know that when I was a teenager, I had a hernia. It wasn't really anything terribly awful, just a typical hernia; they operated on me when I was nineteen and fixed it up, and everything was great until a couple of months ago. I noticed some similar symptoms to my original hernia, and I finally got off my ass and went to the doctor a few weeks ago. She confirmed it - I am officially on my second hernia. I'm not even twenty-five yet.

However, having a car with a real transmission has made me so happy that I'm not even really that upset about the prospect of being cut open and having somebody mess around with my internal organs. It's going to suck, sure. But I made it through it last time; I've got a feeling that I'll be able to survive this time.

[09:09] | [/personal] | # | G
Sat, 09 Dec 2006
.: qotd ::

<ajax> and if i'm marking up every sdk header _anyway_, i want to make a pass over them eliminating all the cases where we do struct foo { a, b, #ifdef I_KICK_PUPPIES, c, #endif, d, e, f }

[02:20] | [/random] | # | G
Tue, 21 Nov 2006
.: it's time for the "I Hate Marco Show!" ::

So it's been playing for a few weeks now, and I just felt that it needed to be shared with everyone who reads this blog:

Dexter.

I don't really know exactly how to put it into words, but there is something that is sick, and twisted, and oh-so-right about this show that makes me laugh. The writing, as aseigo noted is amazing, and the plot throughout Season One so far has been gripping.

If you have a weak stomach, you might not like it. It's definitely not a show for the young ones, either - strong language, some nudity, lots of very graphic scenes. The really amusing thing to me, at least, is that the really graphic scenes are not even of violent acts; whoever is handling the visuals for the show is an absolute genius. Simple acts like tying shoes and pulling on a T-shirt somehow take on a much more sinister undertone.

I highly recommend checking this show out. It is, by far, my favorite new show this season, so far even moreso than Heroes. Heroes keeps leading me along and throwing me a bone every now and then, but Dexter has been delivering since Episode One and I haven't been disappointed yet.

[05:26] | [/personal] | # | G
Fri, 10 Nov 2006
.: qotd ::

<clee> how the fuck is dobey still on planet GNOME?
<clee> (though I admit I am amused by the response to his "please stop talking bad about us" post.)
<ajax> gnome isn't just about fucking ugly software
<ajax> it's also about fucking ugly icons

(note: yes, I read Planet GNOME. And a dozen other Planet sites.)

[15:14] | [/random] | # | G
Wed, 08 Nov 2006
.: qotd ::

<ajax> god. i'm really getting used to this monitor
<ajax> i don't know what i'm going to do when it gets taken away
<keithp> ajax: what monitor is that?
<ajax> keithp: dell 30"
<clee> ajax is a whore
<ajax> a whore with a nicer monitor than you

[14:01] | [/random] | # | G
Tue, 07 Nov 2006
.: yet another python rant ::

I hit another case of "Python really makes me angry" today and I thought I would share it with you all, since I know how much you love reading about things that enrage me.

I have a chunk of code that (while being significantly more complex) looks like this:

def baz():
print kitties # This works fine.

def bar():
print kitties # This one throws an exception!

kitties = 'delicious' # The exception is because of this.

def foo():
stuff = {'kitties': 'squishy'}

for k, v in stuff.iteritems():
globals()[k] = v

baz()
bar()

This is another example of Python's scoping being weird, and in my opinion, broken.

Let me explain, in case you didn't bother copy & pasting that into a python shell and running it.

baz() will execute properly. bar() will not. But the error you get from bar() is worthless - it tells you that you're trying to read from an unassigned local variable, except you're trying to read from a global variable. The problem I have is not that bar() fails - it's that it is inconsistent with baz() working. I realize that adding a global kitties makes bar() work properly; but I think that in this case, the error should really be when you try to reassign a global variable that hasn't been declared as global.

[16:40] | [/tech] | # | G
Fri, 27 Oct 2006
.: implementing ideas ::

I like getting around to implementing the various ideas that I bounce back and forth inside my skull.

One of those ideas that I had for a long time was to solder a PS/2->USB converter directly into an IBM Model M keyboard, along with a USB plug so that I could just swap out USB cables to plug the keyboard into the computer.

I have finally done that, after some inspiration from zevv, a few choice purchases at Fry's Electronics, and a few borrowed parts from my friend Cliff.

I have to say, this kicks way more ass than even I had hoped. (ajax, eat your heart out.)

Still on the list:

  • finish the Qt4 frontend for HandBrake
  • write my own email client that doesn't suck balls
  • write my own AIM client that doesn't suck balls
  • hack up some apps for Qtopia/Opie/whatever for my shiny new iPaq 3670

I know there's more than that, but those are the ones that are currently taking up the most brainspace, so I'm going to have to get to them sometime.

Due to United Airlines sucking balls, Dave Airlie crashed at my place last night after they called back and cancelled his flight from SFO to Sydney. I've said this before, although maybe not on this blog, but United are a bunch of cockbags. They have fucked up at least one leg of every single trip of mine that they've ever been involved in. In any case, I know far too many foreigners named Dave.

Also, I've been growing this out for the first time ever. Looks like I'm going to have to update my various avatars...

[07:02] | [/tech] | # | G
Sun, 22 Oct 2006
.: screeching handbrake ::

I really love it when I can easily find something that bothers me in a piece of software, dive into the source, and start fixing things.

That's what I've been doing lately with this little DVD ripping app called HandBrake - it's a cross-platform GPL DVD ripper that makes it almost painfully easy to take a movie from a DVD and turn it into a file that you can watch whenever the need strikes you.

There are some problems, though. Right off the bat, there is the issue that (when ripping a DVD) libdvdread spews out hundreds of lines of output, warning me that a value isn't 0 and it should be. It's not fatal, but it certainly is annoying, so I whipped up this patch up to fix it.

Also, I don't have a video iPod at the moment, or a Sony PSP (and I don't see myself buying the latter anytime soon, but you know... if one were to fall into my lap, I'd probably use it and enjoy the hell out of it.) Anyway, not owning one of these devices, I'm more interested in HandBrake as a way to make high-quality compressed archives of my DVD movies that I can watch on the HDTV in the living room. There's a problem, though; HandBrake scales the picture by default as it transcodes it.

Not anymore, it doesn't. Now it has support for (optionally) embedding the anamorphic pixel ratio into the output file, and can preserve the original DVD video frames. Which means, with x264 at least, a reasonable performance increase of about 15%. Not too shabby!

Unfortunately, the only GUIs for HandBrake are on Mac OS X and BeOS. Now, I love BeOS. Haven't used it in years, though, and I don't even think it'll run on my hardware; Haiku still isn't quite there yet, either, but I'm keeping tabs on it. What I really wanted is a Linux UI for HandBrake.

So, I've been hacking on one.

Qt4 HandBrake UI

Stay tuned for more on this...

[09:16] | [/tech] | # | G
Wed, 18 Oct 2006
.: aoe is hotness ::

I've been playing with ATA over Ethernet on my home network and I have to say, it is pretty damn sweet.

In fact, it would be absolutely perfect if I could use AOE to share drives to my media center, and then use ZFS on that machine. Unfortunately, Linux doesn't have ZFS, and OpenSolaris doesn't seem to have AOE yet. (The Coraid site has a Solaris driver, and they claim it works on Solaris 7+, but there is no source and I don't happen to have an OpenSolaris machine to test it on at the moment.)

But - the ability to pool together all of my disparate disks into one gigantic volume is awesome. It's like Voltron, but with hard drives instead of robots.

[05:03] | [/tech] | # | G
.: insert the sound of a jaw dropping ::

Definitely picking up one of these.

[04:56] | [/random] | # | G
Tue, 08 Aug 2006
.: Leopard features ::

I was lucky enough to get a ticket to attend WWDC this year, and I've been looking over the session schedule to see what the sessions are, when I ran across this interesting little blurb:

DTrace, an open source project which provides insight into the interaction between your code and the OS kernel, is now available as part of Leopard. This session will explain how kernel developers can both take advantage of, and extend, DTrace's functionality to help debug and optimize low-level code.

DTrace in MacOS X? Hell yes!

[07:57] | [/tech] | # | G
Fri, 19 May 2006
.: it gets all jiggly ::

I learned something interesting a few weeks ago and it just popped back into my mind so I decided to record it for my adoring fans.

Second-hand smoke really fucks with me. Savanah introduced me to a friend and we spent a few hours at said friend's apartment; they both did some pretty impressive chimney impersonations and I ended up feeling sick for days. My throat felt like it was on fire, and I kept coughing up chunks of ... I don't even know what. Maybe lung. My nose wouldn't stop running and I was constantly sneezing.

I'm not sure exactly how much later - maybe a week or so - I was at Cliff's place and we were hanging out. I lamented the effects that the second-hand smoke had on my throat, and Cliff empathized with me; apparently I'm not the only one that second-hand smoke fucks with.

However, Cliff's throat was not ravaged and he was in fact feeling fine, so he jokingly suggested that we smoke some hookah. (For those of you playing along at home, no, I'm not using code-words for drugs. We smoke hookahs, not bongs, and we smoke tobacco out of them.) I figured, at this point, what the hell could it hurt? Cliff prepared the hookah and I continued coughing up internal organs.

Soon, the hookah was ready to go - those things take like ten minutes or so to get ready if you're fast, and longer if you're not - and we started smoking. Almost immediately, I noticed something very strange - my nose stopped running.

I was intrigued.

Several minutes later, I noticed that I had also not been coughing. My nose was still not running, and I was even able to breathe out of both nostrils. You might think that's a funny thing to notice, but trust me, you don't miss it until you can't do it anymore.

Hours later, I was still feeling worlds better. I'm not sure what the logical explanation here is, but first-hand smoke fixed every symptom introduced by my overexposure to the second-hand variety. This perplexes me, but I do not question feeling well; I just enjoy it.

[04:21] | [/personal] | # | G
Wed, 12 Apr 2006
.: how disturbing ::

[savanah] I'm going to snowball you one of these days, just to show you the difference between sperm and orange pulp

[03:52] | [/random] | # | G
.: tacos are not worth endangering the mission ::

Took a road trip to Arizona this past weekend. It's a pretty hefty drive from Palo Alto to Phoenix and back; roughly ten or eleven hours each way. I got to spend time with Savanah, though, so as far as I'm concerned it was worth it. Her brother kicked my ass at Halo 2, but that isn't very surprising since I suck at Halo and its ilk.

I decided that I'm not going to Norway. As much as I would have loved to go, I'm pretty sure it wouldn't really work out at this point.

I informed Trolltech of my decision last week and when I showed up at work on Monday, I was in turn informed that since I'm not going to Norway, there's not really any reason for me to stick around in the Palo Alto office; end result, I no longer work for Trolltech.

This is kind of cool, actually; it gives me a couple of weeks of free time with money to relax, and as tired as I still am from the road trip, I think I might go back to Arizona again. I might even tell some other people that I'm there this time. I have to be back in time to move into my new apartment though. Since I don't work at Trolltech, I also don't get to live in the Trolltech-sponsored housing; I'm crashing at my friend Cliff's place currently, and I don't move into my own place until next week.

At least I can't complain that my life is boring.

[03:43] | [/personal] | # | G
Sun, 02 Apr 2006
.: qotd ::

[ajax] zrusin has already threatened me with violence if gobject is ever attached to X
[ajax] and i can't afford that. i'm too pretty, and he fights dirty.

[20:48] | [/random] | # | G
Sun, 19 Mar 2006
.: dear diary ::

JACKPOT.

My girlfriend knows the cheat codes to the GTA games, by heart.

Sorry, just had to brag about that.

[00:40] | [/personal] | # | G
Tue, 14 Mar 2006
.: rumors and lies ::

It's been a while since I last blogged; I know, I suck. Deal with it.

I was supposed to be in Norway as of two months ago, but as it turns out, the Norwegian government apparently hates me. My work visa has yet to be approved, so I'm currently in California working at Trolltech's office in Palo Alto on a short-term contract.

"But, Chris - how did you end up in California? I thought you were in Boston!"

Yes, yes, I was. I was in Boston until I ran out of sofas to crash on. Then I took my car and talked a crazy friend of mine (the author of naim to be precise) into doing a cross-country road trip with me. We made the trip from Boston to Phoenix in about forty-two hours, give or take.

I spent a few weeks in Chandler, leeching off of my parents, and generally trying to figure out my next move. I had a lot of fun while I was there - my friend Josh left for the Navy right before I left to come out here to CA, so I was there for his sendoff party, and that was pretty great.

Oh, and I have a girlfriend now - scarily enough, she's not completely insane or otherwise mentally handicapped, yet she still likes me. So, to all my secret admirers out there: You should've moved faster! Now I'm taken, and it's too late.

Saturday can't get here fast enough.

[20:01] | [/personal] | # | G
.: metropolitan moving sucks ::

My friend Jeannette had a terrible time with Metropolitan Moving. If you're going to be moving anytime soon, I'd suggest avoiding them.

[20:00] | [/random] | # | G
Fri, 24 Feb 2006
.: for the record ::

user infoairlied: I'd be a lot less annoyed with companies like ATI if they shipped drivers (even proprietary ones!) that actually supported their latest cards.

The R5xx-series cards have been out for MONTHS now and there's still no acceleration, 2D or 3D, Open Source or proprietary. Good job, ATI!

Anyway. I'm excited about the way that things are headed, and I'm really glad that other people are getting excited, too.

To the people who were wondering - the "AI" in "AIGLX" stands for Accelerated Indirect - it's basically required to do a lot of neat things like using the local card to render OpenGL from a remote application. It also enables all sorts of kick-ass effects like the new bling in metacity and compiz (which doesn't work yet, but it's only a matter of time).

[07:02] | [/tech/fdo] | # | G
Sun, 15 Jan 2006
.: qotd ::

<canllaith> -5 points for having a seriously hot ass he prolly won't let me violate

[01:21] | [/random] | # | G
Fri, 06 Jan 2006
.: you have headpigeons ::

Today is the dawn of a new era!

Today is the first day that I no longer work for Red Hat.

In just a couple of short weeks, I should be in Norway working for my new employer, Trolltech.

Also, tonight, the second half of Battlestar Galactica season 2 starts! This new chapter of my life is off to a hella sweet start.

[17:51] | [/personal] | # | G
Thu, 05 Jan 2006
.: qotd jan 5, 2006 ::

[ajax] it's like we've entered a new level of geekhood, one which I did not previously realize existed

[00:21] | [/random] | # | G
Fri, 30 Dec 2005
.: #if 0 ::

There is a lot of really useless code sitting in Xorg today.

I was playing with a CVS checkout and noticed a large chunk of one of the source files was commented out with #if 0; so, this piqued my curiosity and I decided to figure out how many blocks of code are commented out with #if 0 in the server, driver, and lib trees.

The current count, in CVS HEAD, as of about five minutes ago:

moduleblocks of #if 0 code
libs56
server408
drivers648

All combined, that's 1112 blocks of code completely disabled at compile time just sitting there in the tree.

Haven't bothered checking any of the other modules; I'm sure there's more in apps but I don't really think it matters for docs or fonts. Still. That's a lot of useless crap.

[01:21] | [/tech/fdo] | # | G
Thu, 22 Dec 2005
.: you know what to do ::

So, ajax and I are hanging out the other night.

He heads to the fridge to grab a Coke, and comes back with a serious expression on his face.

[ajax] Well, we have a couple of options.
[clee] What?
[ajax] There's only one Coke left. So, we can-
[clee] Fight. To the death.

Good times. (Obviously, I won, since I'm here to blog about it.)

[22:32] | [/random] | # | G
Tue, 13 Dec 2005
.: tungsten e2 ::

My Palm arrived yesterday, finally.

I've been playing with it, and it seems to be a really cool device, barring a few issues. It feels very solid, and I like that. What I dislike is the software.

Don't get me wrong - I love PalmOS, but PalmOS 5 is trying to do things it's just not capable of and Graffiti 2 makes me want to throw my shiny new toy into a wall. For example, the hack that the PalmOS guys are using for showing focus selection? It breaks with at least half of the color themes that they ship on the device, because it doesn't draw the halo properly on the buttons. And the fact that I can't create my *own* color theme annoys me, too.

I need to figure out some way to get Graffiti 1 working on this thing. I'm using a demo version of TealScript for now but it's a little on the slow side and I don't really like the idea of paying $30 for it, especially since it's *not* a faithful reproduction.

Sync works great over Bluetooth to my Mac mini, which is pleasing. The pilot-xfer command-line utilities on Linux seem to work very well too, which is good; I haven't tried any other utilities yet, but I will soon.

[18:40] | [/tech] | # | G
Mon, 12 Dec 2005
.: coincidence? ::

ajax arrived a few minutes ago, and my inbox just hit 666 messages.

hmmm.

[02:59] | [/random] | # | G
Fri, 09 Dec 2005
.: palm rant ::

I blogged last month about switching my phone to Vonage, which has gone swimmingly well. I'm really happy with Vonage, in that I haven't had to deal with them at all because their product just works (which is so rare in our industry that it's scary, and I'm sad that I even find it noticeable that I'm commenting on it), and also in that the features they provide seem to work really well. Being able to check my voicemail from the web is totally badass.

That said, since I no longer have a cell phone to keep my address book on, I decided to pick up a Palm once more. After checking out a few models and consulting with coworkers, I decided to pick up the Tungsten E2.

I put my order in on Tuesday, December 6th, and I made sure to select 'Overnight shipping' because I'm an impatient bastard and I want it now. I would've gone into a store to buy it, but it came with a free 128MB MMC flash card when I bought it online from Palm, and like a sucker, I decided to go for the freebie.

(I also noticed, just after submitting my order, that Amazon was selling the same exact handheld, sans the 128MB flash card, for $150. D'oh.)

I just got a mail from Palm, today, informing me that my order has been shipped.

I won't have it until Monday; even if UPS does deliver it tomorrow, I had it scheduled for an office delivery since I expected to be at work, and I'm not planning on going in to the office tomorrow.

In other words, by the time I get it, it will have been almost a week since I placed the order. With "Overnight" shipping.

[20:35] | [/random] | # | G
Thu, 10 Nov 2005
.: vonage review ::

I decided that I was sick of paying too much money for my cell phone and so I've initiated a transfer of my cell phone number from Sprint/Nextel to Vonage.

Vonage assigned me a temporary number in the meanwhile, which is cool, and I've been playing with the service.

I have to say that I'm really pleased with it so far.

Installation was literally a snap - I unpacked the router they sent me (the Linksys RTP300), plugged in the power, and scratched my head over what I should do next. I figured that I'd probably have to do some port forwarding magic or something if I wanted it to work from behind the router, so I punted on that and went to Target to pick up a handset since I haven't ever owned a "real" phone.

Bought a $9 handset at Target, a GE "Slimline" thing that has call waiting, caller ID, three-way calling, and other things that are insane for a $9 phone. Anyway. I brought it back home, plugged it (and the ethernet cable) into my RTP300, and then mentally prepared myself for the frustration of having to do magic to get my main router to let the new toy do its thing.

I was a little disappointed, actually.

It just worked. No port forwarding, no iptables hackery, no headaches, no frustration - the lights flickered in a few weird patterns for a minute or so, and then I picked up the handset and I got a dial tone. I dialed my phone number and it asked me to log in to my voicemail.

Consider me impressed. Not to mention that the web-based UI for managing the Vonage account is really really sweet - I have it set to send me email when I get a new voicemail, and you can check your voicemails from the web (they show up as WAV files), plus it's dead simple to set up call forwarding and configure the different timeouts for voicemail/call forwarding/etc.

So, I don't know about the other routers - I've read lots of nightmare story reports from people using other hardware and things - or other phones or other VoIP providers, but so far I'm pretty damned impressed with Vonage. Oh, and for $25/month, I get unlimited calls to anywhere in North America, including Canada, and their international rates are pretty good, too. I called daniels up the other day and the conversation - which lasted for almost an hour - cost less than a combo meal at Burger King.

Pretty sure the future is made out of awesome.

[02:58] | [/tech] | # | G
Thu, 03 Nov 2005
.: qotd ::

[ajax] alanc: oh, you mean like any sensible system would do
[alanc] since when has sensibility had anything to do with how X is built?
[ajax] touché

[12:46] | [/random] | # | G
Fri, 21 Oct 2005
.: qotd ::

[kfoltman] is there any way to "record" a group of drawing operations into a sort of metafile, then render that metafile on a printer "drawing surface"?
[TD] kfoltman: yeah. it's called a PDF file ;)

[11:40] | [/random] | # | G
Sun, 16 Oct 2005
.: planet update ::

For those of you who are syndicated on Planet KDE and also care about your bandwidth: Please pay attention to this message.

By default, Planet KDE will now show any images that you include in your blog. If you do not wish for images from your blog to show up on the Planet (which I can understand, since we do use up quite a bit of bandwidth), now you just have to do:

<img class="hidefromplanet" src="foo.png" />

The old class="showonplanet" is still around, but it's irrelevant now and may be removed in the future.

[00:03] | [/tech/KDE] | # | G
Mon, 10 Oct 2005
.: qotd ::

[@ajax] i have found the greatest flash game ever
[@ajax] http://www.ebaumsworld.com/kittycannon.html
[@daniels] 595ft
[@daniels] hm, 928ft
[@ajax] 1144ft is my record so far
[@daniels] now 1022
[@ajax] i'm pretty sure that if launching kittens out of cannons is wrong i don't want to be right

[00:19] | [/random] | # | G
Fri, 07 Oct 2005
.: dogtail unleashed ::

Today is a pretty cool day for me because a project I've been working on at work is finally released.

Dogtail!

dogtail is a framework written in Python which makes it easy to write scripts to automate graphical applications. It uses AT-SPI which means that (for now) it doesn't work with KDE, but I fought the good fight to make sure that it has no GNOME dependencies so that hopefully there will be a chance of KDE adopting it in the future. Now that we've finally gotten the release out the door, I plan to track KDE svn and write scripts for KDE4 apps. Ideally, we'll have KDE4 support before KDE4 is actually released.

(I know that there's a tool from KDAB which allows one to automate KDE apps, but it's not Open Source and it only works with KDE; dogtail supports anything that we can see through AT-SPI, which includes OpenOffice.org and Mozilla-based applications as well as, hopefully, KDE4.)

[12:31] | [/tech] | # | G
Wed, 21 Sep 2005
.: NetworkManager and KDE ::

Fab: NetworkManager actually has a pretty well-designed separation between the front-end and the back-end; the only problem stalling us from being able to do cool things with it right now is that we have no working DBUS bindings for KDE3 (so nobody can easily write a Kicker applet to interface with NetworkManager to use on their desktop today), and KDE4 doesn't actually have anything usable at this point, whatsoever.

I brought this up at aKademy - aseigo and I were basically ready to go ahead with it but we got sidetracked with window icon previews in the window list on the desktop pager hover tooltip. (Try saying that five times fast.)

In theory, somebody could write the applet using the DBUS API from C, but the current Qt bindings in the DBUS tree are pretty much worthless, so it's not going to be pretty either way.

[17:14] | [/tech/KDE] | # | G
Sun, 11 Sep 2005
.: would you put your brain in a robot body? ::

Wade: No, I don't have a robot answering my email. My robots are busy preparing for the ... I mean, uh, what robots? I don't have any robots.

I do have three totally awesome computers now, though (not including my work laptop). The first one is my Mac mini, which rules, but it's not the focus of this entry.

Over the past week or so, I'd run into some really odd stability issues with my AMD64 box. I decided to go to CompUSA and pick up a new motherboard, since the last issue I had with an AMD64 machine was also the mobo. Bring the new mobo back home. Remove the old one, move parts over to new one, hook up power connectors, flip the switch, and ... nothing.

The damned thing didn't even POST.

Somewhat frustrated, I decided to work on assembling my other new system. I've had a spare CPU, some extra RAM, and a slew of video cards laying around for a while now, so the only thing I really needed to pick up was a new case and a motherboard for this box. It's an "old" AthlonXP 1700+ - I figure it's probably worth me keeping a system around that can do AGP and run fast enough to prevent me from throwing it out the window.

The assembly on my new system went pretty well, until the part where I attempted to attach the power cable. The power supply I was using was a 24-pin, designed for the power requirements of the newer AMD64 systems. Normally, it wouldn't be too hard to plug in a 24-pin cable into the 20-pin socket on the motherboard, except that the mobo I picked up happens to have the IDE pins right next to the ATX pins.

And there was much frustration.

I was about to give up, but for some reason I decided to read the manual for the power supply in the new case that showed up, and if you look at page 3 in the manual, you should see the picture that made my night.

The other power supply can break off the extra four pins so that I can use it on the motherboard.

I returned to CompUSA and got a replacement for the busted motherboard, and brought it home and set it up, and this one actually works, so now I've got both systems up and running beautifully.

My only issue now is that I need a DVI/USB KVM.

[05:49] | [/tech] | # | G
Wed, 07 Sep 2005
.: thanks, Antonio ::

Everybody else has been saying this on mailing-lists and whatnot, but I figured that it deserved saying on the Planet, too.

Antonio, aKademy 2005 rocked hardcore thanks to you and the LiMa guys. You guys kick ass. I didn't think it'd be possible to top Kastle, but you guys did it.

To next year! Helio, you ready for aKademy in Brazil? ;)

[01:06] | [/tech/KDE] | # | G
Sat, 27 Aug 2005
.: pronunciation is important ::

I finally got to meet a few people I hadn't met before, including aseigo. He's taller than I expected, at least. According to him, I don't look anything like what he thought I'd look like, but I sound exactly the way he thought I would. Along with Thomas Zander and Rainer Endres (and someone else whose name I can't remember) we left at around 1AM to go find a bar. We asked a couple of locals where a good place to get a drink would be, and they gave us some directions and told us to look for the 'Marabu' or something similar. After about thirty seconds of walking, aseigo was already calling it the 'caribou' and I had to correct him. Once we arrived in the area that they said it would be at, there was a building with with a bright neon pink heart sign that said 'Maribé.'

At this point, before entering, we had a couple of theories. One that we figured was likely was that the locals had sent us to a gay bar, which would have amused us. Rainer didn't want to go in, but I ventured in with aseigo and Thomas and the kid whose name I can't remember; I saw a bar with alcohol behind it and a bartender, so I went back to the door and motioned to Rainer that it was ok, it was just a bar, and everything looked fine.

Rainer took a step in and then decided that he was going to go to the restaurant next door instead; I hadn't eaten or had anything to drink since much earlier, so I decided to join Rainer instead of staying with the other guys. Rainer ordered a beer, and I got a soda. About fifteen minutes later, aseigo and crew came out to join us and they were laughing pretty hard.

Apparently, the Maribé is actually a brothel.

I think that even funnier than finding that out (which was pretty funny) was the fact that aseigo even saw the sign by the stairs that said 'Services' with a man and a woman on it, and he didn't get it until the woman told him that the price was 20 EUR.

Update: It's worth noting that the Marabu was actually right next door to the restaurant that Rainer and I decided to go to; aseigo just couldn't resist the pink neon heart sign.

[04:13] | [/personal] | # | G
Thu, 25 Aug 2005
.: proxima ::

Spain is pretty damned cool.

Well, ok, more accurately, Spanish women are pretty damned cool. I'm pretty sure I've seen more cleavage since I landed in Madrid than I have since I moved to Boston.

The trip has been exciting so far. There were two legs on the flight over - the stopover in Frankfurt was pretty uneventful. I was surprised by the fact that Lufthansa provided metal utensils for the in-flight meals; it impressed me, but at the same time, I had a realization. I shouldn't be impressed by metal silverware; I should be disappointed by plastic silverware. And on the flight from Frankfurt to Madrid, I was depressed - I guess the metal silverware is only for the cross-Atlantic flights. Anyway, once I landed, I wasn't too worried about navigating the Frankfurt airport; I've been there before (the last time I came to a KDE conference, actually) and in general, I find airports to be reasonably simple to navigate, even if you don't speak the language.

The airport in Madrid was also pretty easy; figuring out how to get on the metro was not too hard, but it took a bit more walking than I expected it would. Once I was on the subway, I figured out pretty quickly that 'proxima' is Spanish for 'next' and I was set. The route that I had planned out actually worked exactly as I hoped it would. I got off the metro at the right stop for the train station and almost bought a ticket for the right train on the wrong day. Once I made it to the train, I figured I was pretty close to safe.

The train arrived exactly when expected, and there were lots of taxis outside of the train station waiting for us, which was good. The taxi driver I rode with didn't speak much English and had no idea where the place I wanted to go happened to be; he got directions from the central office, though, and somehow I managed to find the student residence where most of us are staying.

That's the last of this entry - there's more to follow, I promise.

[20:31] | [/personal] | # | G
Wed, 24 Aug 2005
.: akademy 2005 ::

Tomorrow is going to be interesting, I think.

I'm landing in an airport I've never been to, in a country where I don't speak the native language, and I have to make it from the airport to the train station (which is not attached to the airport, but is at least two subway stops away). Once the train arrives at the destination, I still have to make it from the train station to the place I'm actually staying, which is of course not exactly close by.

Since I'll be in Spain and my phone won't work there, the best way to contact me is either IM or email; I won't be getting any voicemails until September 3 at the earliest.

[05:27] | [/personal] | # | G
Fri, 12 Aug 2005
.: you exactly told me it was a magical goodies creator ::

Adam: I have a tax-free holiday every day of the week; it's called "Living in New Hampshire."

(There's no sales tax in this state, for the readers out there who are confused.)

Work on the tdfx EXA support is still ongoing; I have the framebuffer addresses properly set up now, but my blit and solid fill routines are completely hosed. At least I have an idea of how things are *supposed* to work now.

[12:12] | [/tech] | # | G
Wed, 10 Aug 2005
.: way to go, sparks, you broke the monitor and you're dead ::

Lots of things going on lately.

First off, most recently, I started hacking on EXA support for the tdfx driver - it doesn't do much yet, except for display things wrong and crash, but hopefully I'm not too far from it working properly.

Second, I finally coerced a graphic designer friend of mine into coming up with a new layout for my site. It's not live yet, because I'm not quite happy with it, but it's pretty close to ready (I think) - take a look and let me know what you think. (Yeah, I know, it's slow. It's using multiple layers of translucent PNGs, some of which are position: fixed. I prefer to think of it as "an opportunity for KHTML optimization.")

Third, I have been hacking on the Qt4 BitTorrent client from Andreas, and it's really cool. There's a very small, slow memory leak in it, though, which I have to find and destroy.

Other than that, not too much going on. I'm excited about aKademy - only a couple of weeks away!

[13:33] | [/tech] | # | G
Wed, 20 Jul 2005
.: yes, carl ::

Stroking is hard. So hard.

Every time I hear the word 'stroke' from now on, I'm going to hear keithp purr. That disturbs me to no end.

In other news, the DDC at OLS has been a lot of fun. I'm going to have to disagree with chouimat about a few things - namely, I think that Xgl is extremely sexy, and has a hell of a future, and while it's true that the vast majority of the talks here are GNOME-related or have a GNOME bias... it's because we are vastly outnumbered on this side of the pond, and you can count the number of KDE developers at this conference on one hand.

George Staikos was here for a couple of hours, I've been here for the DDC but not OLS, chouimat was here (but let's face it, you haven't been active in KDE lately, chouimat, and neither have I), and Alexander Dymo is here and gave a talk about KDevelop. We're not exactly taking over here. We need more of a presence at these shows, people. It's important.

[02:05] | [/tech] | # | G
Tue, 12 Jul 2005
.: more cowbell ::

I may be abusing my 'tech/KDE' category with this entry, but so be it.

A new tagging application called 'cowbell' is out and it looks pretty boring. Reading through it I was mostly uninterested until I hit this part:

It requires the Mono runtime, Gtk#, and TagLib to install and run.

Holy crap! GTK/GNOME apps using evil KDE technology! THE SKIES THEY ARE FALLING I TELL YOU.

Seriously though, good on them. TagLib is good stuff, and I'm glad to see that they're not reinventing the wheel. More projects need to use it.

[04:46] | [/tech/KDE] | # | G
Mon, 04 Jul 2005
.: kill all humans ::

Some asshole thought it would be a good idea to string up yellow "CAUTION" tape and block one of the one-way roads leading to my apartment building inside of the complex.

I was not amused.

I stopped my car, pulled up the handbrake, flipped on the emergency lights, got out, and walked to one side of the tape. I ripped it off, and some guy screamed out "HEY!!!" I turned to his general direction and flipped him off, and walked across the street to the other side, where I pulled down the rest of the tape and tossed it into my car.

Got back into my car and parked in my parking lot without incident, throwing out the tape on my way in to my apartment.

God dammit, I hate people sometimes.

[04:06] | [/personal] | # | G
Fri, 24 Jun 2005
.: ikaruga ::

Somehow, I just spent four hours playing Ikaruga.

They weren't kidding. This game is hard. Holy shit, this game is hard. I don't think I've ever played a game where it took me four hours to get to the THIRD STAGE before. This game rules.

I don't think I'll be sleeping this weekend.

(oh, and props to mpyne, who kicks *major* ass for dropping Ikaruga to me in the mail. The note he placed in the case reads "Let me know how Level 3 is. I only ever made it to the boss of Level 2." Holy shit this game is hard.)

[21:19] | [/tech] | # | G
Wed, 22 Jun 2005
.: wireless future ::

(responding to ChipX86)
Dude. One word.

Batteries.

Ok, to be slightly less cryptic: Wireless devices won't ever really replace their wired counterparts until they no longer require battery replacement to run. Batteries that recharge by gyroscopic motion? Ok, cool. Batteries that recharge by quantum phase induction? Hey, even if I just made it up, it sounds cool, and as long as it means that I don't have to put new batteries in when the current ones die, I'm all over it.

The main reason I don't have any wireless peripherals right now is the battery issue. I've almost talked myself into getting one of the Logitech mice that recharges on the base station - that's pretty close to my ideal scenario. It takes the whole "there's a battery inside" detail and makes it completely irrelevant.

[03:08] | [/tech] | # | G
Sun, 12 Jun 2005
.: build system notes ::

We had a discussion in #kde-devel earlier about what KDE's requirements for a build system are. What are the current problems we have with autoconf/automake/libtool? What features do they provide that we really care about? How hard would it be to replace any/all of them with things that suck less?

I took notes of the discussion. They're below; I'd like to get more feedback on this.

(One of the first points that I'm sure someone will make is "auto* is cross-platform! We need to support KDE on platforms that aren't Linux!" etc. Look, we realize this. However, auto* provides lots of problems for us on platforms we do care about, including MacOS X and Windows. (Ask RangerRick or js about them on IRC, or email them.)

Just because we're using auto* and friends doesn't mean that our code works; as a matter of fact, RangerRick noted that so far, all of his issues with the Mac port of the work-in-progress KDE4 have been build issues, and none of them have been code-related yet.

This is clearly a problem and since KDE4 is an aggressive new major release, we should solve it in the KDE4 timeframe. We don't want to have to wait until KDE5 for a build system that doesn't suck, do we?

Without further ado, the notes from the discussion.

Must support:


  • generating binaries (duh)

  • generating shared libs (on all ELF platforms + MacOS X; Windows?)

  • icon installation

  • uic, moc, KConfigXT, etc

  • GCC visibility

  • automatic dependency resolution

  • manual hints for dependency resolution

  • flex/bison

  • non-recursive (flat) builds

  • --enable-final

  • builddir != srcdir

  • simple to the point of being learnable within 5 minutes

  • kdeinit support (?)

  • multiple build targets (libfoo, libbar, libbaz) in one file

  • --compile-slots, like in unsermake

  • pkg-config support

  • support rpath sanely

  • ability to link & run uninstalled binaries

  • easily integrated into KDevelop

  • 'admin' needs to be shipped in KDE instead of in src of each app (if we keep the 'admin' dir, that is)

Would be nice, but not necessary:


  • having a standard and distributed build system and test suite

  • ability to build from svn:/trunk/KDE

Thoughts?

[22:34] | [/tech/KDE] | # | G
Wed, 08 Jun 2005
.: cool interview ::

Matt Harrison sent me a link to a cool interview with Ivor Hewitt, one of the guys working on KHTML lately.

Looks like the interview has been taken down. Maybe it'll come back up soon.

Ivor, do you have a blog? Because you should. Planet KDE could use some KHTML blogging love...

[15:46] | [/tech/KDE] | # | G
Tue, 24 May 2005
.: wtf havoc ::

[@hp] clee: hold me like you did by the lakes of naboo!

[14:43] | [/random] | # | G
Mon, 23 May 2005
.: I blame ajax ::

* clee kicks ajax
[clee] dammit, man. I really want a usable Expose feature. Like, yesterday would have been good.
[ajax] oh yeah, totally my fault
* clee blames you.
[ajax] why yesterday?
[clee] ajax: well, yesterday would have been good. today would have been acceptable. but if it gets here tomorrow, that's not soon enough.
* clee sighs
[ajax] i was thinking maybe there was some event yesterday
[clee] hahaha
[clee] no.
[ajax] like you were trying to show off X to some hottie in the coffee shop or something
[clee] hahahaha
[daniels] haha
[clee] and she whips out a Mac and she's like "Let's see your network-transparent windowing system do THIS!" and hits F9?
[ajax] but then she's all "shit boy, five year old acceleration architectures ain't gonna get you any poon"
[clee] yeah, happens to me all the time
[ajax] *smack*

[01:25] | [/tech] | # | G
Wed, 11 May 2005
.: vmware update ::

Just thought I'd post a quick update about my situation re: my computer at home, since I know you all care so much.

It turns out, after wiping my partition table and starting over from scratch and getting Linux back up (which took all of about ten minutes), Windows installed fine from the SATA DVD drive.

I have no idea how this is possible - this page says, and I quote:

Out of the box, no current Windows version, including Windows Server 2003, supports SATA drives.

My best guess is that the BIOS enables some sort of PATA emulation that Windows can use to find that drive. That's the only thing that makes sense.

And I was a little hard on VMware, to be honest. I mean, I was using a feature that they specifically warn against most people using, while running 32-bit VMware on a 64-bit (unsupported variant of a) host OS. I'm reminded of a quote here...

People who do stupid things with hazardous materials often die.

Granted, I didn't exactly die, but I think it somewhat applies.

[15:00] | [/tech] | # | G
.: coolest thing I've seen all week ::

Holy shit, this is awesome.

Seriously.

[10:43] | [/random] | # | G
Sat, 07 May 2005
.: unexpected results ::

Red Hat, my employer, has a site license for VMware. (Well, either a site license, or an assload of Workstation licenses, I'm not really sure what the details are.)

I decided "Hey, why not play with the new release? You've got new hardware. Maybe VMware will run acceptably fast on it!"

Man, what a fucking brilliant idea that was.

Backstory: I haven't booted Windows in a few months, not since Doom3 came out and wasn't available initially on Linux. However, I have some shiny new devices in the new box, including a SATA DVD burner, which so far doesn't seem to work with Linux very well. Ubuntu's kernel enables SATA ATAPI support, which Jeff Garzik tells me is a bad naughty thing of them to do since it's not ready yet. Which results in my ability to *see* the drive on /dev/scd0, if the planets align properly, but I can't actually use it for much.

This machine doesn't have a floppy drive, since I'm a cheap bastard, and I happen to agree with Apple on this one. Fuck floppies. They should have died a long time ago. I also refuse to run Windows XP - I bought and paid for Windows 2000, a long time ago in a galaxy far far away, and it's the last release of Windows that I really plan on ever using. Windows 2000, being rather old, has some deficiencies, however. Like not having SATA support in the installer (unless you load a driver from a floppy, which I don't have).

I think to myself, "Hey! VMware! Raw disk support! It used to work pretty well, why not try doing an installation from a virtual machine into a physical disk? You can use the VM to download drivers, then create a new hardware profile, reboot into it, and maybe that'll work."

HAHAHAHAA

Let's just say that this was probably the worst idea I've had all night, even worse than eating that third slice of pizza. My partition table on /dev/hda now looks like this, thanks to VMware:

Disk /dev/hda: 41.1 GB, 41174138880 bytes
16 heads, 63 sectors/track, 79780 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

This doesn't look like a partition table
Probably you selected the wrong device.

Device Boot Start End Blocks Id System
/dev/hda1 ? 216399 1904881 850995205 72 Unknown
Partition 1 does not end on cylinder boundary.
/dev/hda2 ? 723265 1262922 271987362 74 Unknown
Partition 2 does not end on cylinder boundary.
/dev/hda3 ? 167316 167316 0 65 Novell Netware 386
Partition 3 does not end on cylinder boundary.
/dev/hda4 2671568 2671619 25817+ 0 Empty
Partition 4 does not end on cylinder boundary.

Partition table entries are not in disk order

I'm not even sure what to say about that.

(For those of you wondering why I wanted to play with Windows in the first place - SATA DVD burner. I know that I can install Win2K drivers for the SATA chipset, and I know that the DVD burner will *probably* work there.)

[00:35] | [/tech] | # | G
Thu, 05 May 2005
.: joy! ::

My new toys arrived today.

That's one Lian-Li PC-60, one Chaintech VNF4/Ultra motherboard, and one Athlon64 3000+ CPU.

This machine is officially fast enough to scare me. I can play Doom3 at my monitor's native resolution (1680x1050) and the frame rate doesn't drop below 60fps even with baddies on the screen.

The only other goodies I need to complete this box are a couple of 400G SATA drives. The Hitachi model is only $275 on NewEgg, which means that it's now possible to put over 1TB of storage into a box for under $1000.

Holy shit life is good.

[01:23] | [/tech] | # | G
Sun, 01 May 2005
.: new lease ::

Renewed my lease at my apartment for another year.

I guess I'm happy enough with Royal Crest. It's just that Cambridge is a lot cooler. If caillon and I had been able to get our act together earlier, things might have been different, but oh well.

In any case, living at the same address for more than twelve months feels like some sort of a victory. Therefore, I win.

[15:36] | [/personal] | # | G
.: almost normal ::

I'm feeling much healthier. Maybe the title is a bit of a misnomer, since we all know that I'm not anywhere close to "normal," but my throat seems to be almost completely healed and it no longer hurts to breathe, eat, or swallow.

By some assorted cleverness, I have managed to secure an upgrade to an Athlon 64 and a much nicer new case, for a net cost of about $20 to me. I'm excited.

I need to pick a project to get back into KDE hacking with.

Not much else is new. Found a really awesome pizza place a few weeks ago, and have been eating there regularly. A $10 pizza lasts me two or three days, which is awesome. Saving money is good.

[02:56] | [/personal] | # | G
Wed, 27 Apr 2005
.: ow ::

strep throat sucks. I've had this soreness in my throat since Friday last week, and it kept getting worse. Finally, on Sunday, I went to the doctor and found out "Hey, you've got strep!"

Now I've got penicillin and cough drops. Throat still hurts. Wish my white blood cells weren't such little bitches. They're supposed to *handle* this stuff for me, dammit.

[13:53] | [/personal] | # | G
Fri, 15 Apr 2005
.: rant part deux ::

Several people were kind enough to point out that this code:


for i in xrange(foo):
print i

actually wouldn't work. Thanks, I'm an idiot. I should have had:

for i in xrange(len(foo)):
print i

Next, yet another method of reversing/iterating backwards over a list has been suggested in multiple places, one which I didn't know about.


foo = ['one', 'two', 'three']
bar = foo[::-1]

The only thing I can possibly say to that is... but the ternary operator is too obscure? C'mon, give me a break. This provides the ability to have tons of random line noise and make your code just as unreadable.

And, Seth: Since I couldn't catch you on IRC earlier, I'll just reply here.

Multiple issues to respond to, so let me break it down.

  1. You seem to be confused as to what I was complaining about with list.reverse(). It's not that I want a copy of the list, exactly, but I want the return value of list.reverse() to be sane, which in my exceedingly humble opinion, it is nowhere near.
  2. I'm not upset, mind you, just mildly annoyed, by the iteritems()/enumerate()/xrange() issue. And the reason that it's annoying to me is because it's inconsistent. Some of the iterator methods are global and some of them are not. Inconsistency is lame. End of topic.
  3. Ternary operators seem to be quite the polarizing issue so I'll just leave my stance exactly where it is. I think they're useful, and I'd like to have them, but obviously I can work around the language not having them...
  4. Especially since Python doesn't have sane scoping, either; the method-local and class-local scoping rules provide the opportunity for way too many obscure and annoying bugs. I note that you didn't respond to my issue with scoping at all.

Oh, also, a friend of mine has offered to send you a copy of the Smalltalk book, where he says that they solved the problem of doing lambdas and maps efficiently.

I'll kindly ignore your not-so-subtle digs at my programming ability (or perceived lack thereof) and refuse to insult you for liking Python. Mind you, I still think it's a useful language, but I'm just annoyed at the inconsistencies and some pet features (like ternary operators, or sane scoping) that I wish it had.

[19:14] | [/tech] | # | G
.: python rant ::

(This is a pretty geeky entry, so if you're not a geek, consider yourself warned.)
I have a lot of little tiny annoyances with python, since I've been using it for a while now to hack on some stuff. Here's a collection of the ones that are floating on top of my brain.

::sniff::


I miss my ternary operator.

In C, and C++, and Perl, and Ruby, and PHP, and pretty much any language that I've ever written in (hell, I think even JavaScript supports this, though I could be wrong about that one since I haven't written any JavaScript code in years), you can use a very terse syntax for if (foo) { return bar; } else { return baz; } using what is referred to as the ternary operator.

The shortened syntax is more like:


(foo ? bar : baz)

Yeah, it's kinda weird. And yeah, if you don't understand it, it's not very intuitive. However, it makes for much shorter and clearer code (to those who grok ternary operators). Python doesn't support this. At all. There was a proposal to include it and it got smacked down, so that they could include such other genius ideas as reversed() instead. Speaking of which...

backwards


Reversing an array is done like:

foo = ['one', 'two', 'three']
foo.reverse()

This does not return a reversed copy of the array, but it does reverse the array in-place and return 'None' which is quite confusing. Especially if you're used to sensible languages which return a reversed copy. So this code doesn't work.

foo = ['one', 'two', 'three']
for i in foo.reverse(): # bzzzt, reverse() returns 'None'
print i

You can iterate through an array with the reversed() keyword, like:

for i in reversed(foo):
print i

However, this is a python-2.4-specific feature, so it's useless if you care about older python releases. Also, it doesn't create a reversed array, just hands you a pointer to a reversed list iterator. So you can't do:


foo = ['one', 'two', 'three']
bar = reversed(foo)
print bar[0] # 'three'? how about a TypeError!

Because bar is actually not a list, or array, or what-have-you, but it's a listreverseiterator object. Whatever the hell that's supposed to mean. What it translates into is basically "Surprise! We hate you."

So, you have to do:


foo = ['one', 'two', 'three']
foo.reverse()
for i in foo:
print i

Which, granted, ok, isn't the end of the world, but it's pretty ugly and it doesn't work at all the way I had expected it to, which to me is the sign of a language that sucks.

For reference, the following code in ruby does work exactly how I expected it to. And because ruby and python share a decent amount of syntactical sugar, I keep on getting annoyed when things that I expect to be working in python simply aren't.


foo = ['a', 'b', 'c']
p foo.reverse() # prints out "['c', 'b', 'a']"
foo.reverse().each { |i|
print i
}

Ruby's list iterators are weird, sure. But actually, that's a good way to bring up my next complaint.

iterators in general


Why the hell do you have multiple types of list iterator methods in python? I shouldn't have to remember a different type of iterator method for every different type of container, nor should I have to remember whether it's a global iterator method or a per-container one. That's just annoying, and pointless.

So, you have foo = ['a', 'b', 'c'], right.
Now, to recap, you can traverse the list backwards (in 2.4, anyway) with:


for i in reversed(foo):
print i

You can get the indexes of the members of the list with:


for i in xrange(foo):
print i # Prints out the index of each member

You can also do:


for i, n in enumerate(foo):
print i, n # Prints the index and the member

Although I have no idea why you'd want to. (You can always just do xrange(foo) and then 'foo[i]' since they give you the same thing. But ternary operators would be too confusing.)

But, if you have a dict instead of a list, all of a sudden...


foo = { 'a':1, 'b':2, 'c':3 }
for i, n in foo.iteritems():
print i, n

Using enumerate() gives you the index of the 'a', 'b', and 'c' keys. Also, note that enumerate() is a global, like reversed(), but iteritems() is a member of the dict class type. This is the kind of inconsistency in a language that kills me.

white space


Surprisingly, I don't mind the whitespace thing. It just doesn't bother me that much. (Ok, so that's not really a complaint. Still, enough other people complain that I figured it was worth noting that it just doesn't irk me.)

scoping


Scoping is weird in python. Let me explain.
In regular languages, a variable declared inside of a block of code only lives until the end of that block; this is the 'scope' of the variable. So if you have:

if (condition) {
string foo = "hahahaha";
}
print (foo); /* Error! 'foo' didn't make it past that last '}' */

(Yeah, that's not a real language, though I suppose it could be valid C or C++ or something. I don't care, it's just there to illustrate a point.)

But in python, guess what?


if condition:
foo = "hahahaha"

print foo # This actually *works* - wtf?

There are other issues that annoy me, but these are just the ones on top of my head. I'll write another rant if this one pisses off enough python devs.

[04:25] | [/tech] | # | G
.: toys ::

The other day, I was on Dell's website. They had the 2005FPW for 25% off, and I thought to myself, "Self, that's a damned good deal."

However, I didn't have $561.75 free on any of my accounts, and the deal expired in a few days. Then I saw the "Apply now" link. "Hmm, instant loan. Nah, you already have too much credit."

Wait, though. If you apply for credit and you get rejected, at least in the US, you're automatically entitled to a free credit report. What the hell, why not? I can always use a free copy of my credit report.

About three minutes later, the Dell website comes back with the result. "Congratulations! You qualify for a $1500 line of credit."

Shit.

Needless to say, now I have a sweet 20" widescreen LCD. It's gorgeous. I liked it so much that I bragged to pretty much everyone that would listen. And I even convinced ajax to buy one, but he went and bought three instead. Crazy bastard.

I'd post pics, but I don't have a digital camera. Mostly because when I buy one, I want it to kick ass, and the ones that I want are still over $1000.

Note: All amounts in USD.

[01:16] | [/tech] | # | G
Tue, 05 Apr 2005
.: wtf xda ::

[@ajax] so working on DRI for i128, i turned off XAA
[@ajax] in the spirit of experimentation, i ran xcompmgr -a
[@ajax] it feels _much_ faster now
[@ajax] like, firefox doesn't tear when scrolling
[@ajax] it's kinda weird
[@daniels] hmm
[@daniels] maybe we should rename it to XDA :P
[@ajax] totally unaccelerated, but just fast enough to feel useful
[@ajax] the only unpleasant part is switching desktops

[22:59] | [/tech/fdo] | # | G
Sun, 27 Mar 2005
.: gah ::

I hate caffeine deprivation headaches.

(For those of you following from home, yes, I had successfully kicked my caffine habit but then I realized that not drinking it sucked. So I started drinking it again. And just now, I went a couple of days without - again - and all of a sudden I've got the headaches. Fuck.)

Also, Smallville is still one of my favorite TV shows. I honestly can't decide if I like it more than Battlestar Galactica or not.

[00:35] | [/personal] | # | G
Thu, 24 Mar 2005
.: congratulations, zack ::

Major kudos to Zack Rusin for getting hired at Trolltech.

(Not like it should be a surprise to anyone, since Zack kicks ass and Trolltech also kicks ass.)

This bodes extremely well for KDE4. World domination!

[17:07] | [/tech/KDE] | # | G
.: qotd ::

"You are like, so much better than a bathroom stall."
-Brandi

[01:24] | [/random] | # | G
Mon, 21 Mar 2005
.: spin spin ::

Donnie: Planet KDE, and every ten minutes. I'm thinking about changing it to update every fifteen, though. We're getting enough feeds that we're spending more time updating than idling.

[17:27] | [/tech/fdo] | # | G
Mon, 07 Mar 2005
.: qotd ::

[mgalgoci] policy I'd like to have set: "When people ask for email aliases, the aliases are granted on the grounds that IS gets to decide what the alias is."
[clee] mgalgoci: oh, oh! what's mine?
[hp] clee: I think your native american name is he-who-hopes-to-get-laid-using-enterprise-groupware-solution

[17:28] | [/random] | # | G
Wed, 02 Mar 2005
.: musings ::

It's 5AM.

I'm blind, and it's dark. Music from Metal Gear Solid 3 floats through my apartment and yet I can still hear the drops of blood hitting the surface of the water as my nose drains.

Nosebleeds have been a pretty common occurrence for about as long as I can remember; I've had them ever since I was a little kid. They've started back up recently, after I had gone several months without having any. I'm not sure exactly why but I think it might be somewhat related to drinking soda. (While I was caffeine-free for that six weeks or so, I didn't have a single nosebleed.) I've recently started drinking the stuff again, since it's easier to drink it than not to, but I may have to rethink that choice in light of this.

Oh well.

Speaking of Metal Gear Solid 3, I finally sat down and played through the rest of it. I had gotten farther along than I thought before I stopped playing it back in November, and the game is just amazing. I can't think of enough words to describe how much I enjoyed playing through this game.

[05:05] | [/random] | # | G
Sat, 26 Feb 2005
.: vindication ::

[ajax] clee: i was wrong, you were right
[clee] ajax: ?
[ajax] clee: the Model M is a superior product

[03:03] | [/random] | # | G
Wed, 23 Feb 2005
.: qotd 22/02 ::

[cliff] Hm. If I get a raise, I will buy a Powerbook. That will be like donating my raise to charity. (In the sense that the raise will not be reflected in my paychecks.)
[cliff] And it will make the world a happier place. (Where 'the world' is me.)

[00:01] | [/random] | # | G
Tue, 22 Feb 2005
.: I'm blogging this ::

davej and veebl are on my sofa. They're sitting in what currently acts as my bedroom.

Just thought I'd blog that. ;)

[01:53] | [/personal] | # | G
Sat, 19 Feb 2005
.: subversion migration ::

One of the things I keep thinking about with KDE's much-vaunted CVS->SVN migration is... why don't we just leave the CVS server up as it is, and screw the whole "import the entire history of our repository into SVN" idea?

Think about it.

The cvs2svn script is good. Don't get me wrong - it's pretty impressive. But we've done some evil to our CVS repository - manually moved files, etc, and cvs2svn is not perfect; why don't we just leave the CVS server up and running read-only and import a snapshot (say, 3.4) into SVN without trying to drag all of the history along?

People who want to pull absolutely 100% accurate checkouts of a given revision can do it with the old tools and we can evaluate subversion without having to deal with any possible issues brought up by weirdness caused by cvs2svn.

I personally think this may be the smartest way to move forward, but I'm sure that others have differing opinions. Care to share them with me?

[02:54] | [/tech/KDE] | # | G
Thu, 17 Feb 2005
.: lseek(fd, 0x5c, SEEK_SET) ::

Our Intel rep managed to secure me an 802.11a/b/g mini-PCI card for my ThinkPad. Direct from Intel. Totally sweet.

Somehow managed to get the ThinkPad apart, and dropped in the new card, and connected the antennae, and turned it on, and was greeted rather rudely by two beeps and the infamous Error 1802.

I was prepared for this though. I expected to spend the rest of the day hacking around IBM's evil authorized-miniPCI-card whitelist and being otherwise 1337 just like mjg59. But instead, I found the source for a neat little hack that resets part of the nvram to a magic value and disables the whitelist check.

All this means for those of you who don't speak Geek is that I overrode some IBM stupidity and made my hardware work the way it should. Which should have been much easier, but hey, this is Linux, and we like things like lseek(fd, 0x5c, SEEK_SET) just fine.

[17:49] | [/tech/redhat] | # | G
.: Google Dinner beta ::

I spent most of this week at LinuxWorld in Boston (and the very beginning of the week at the XDevConf, which ajax took notes of) so my legs are killing me. But last night, Google sponsored this amazingly kick-ass dinner for a few dozen of us free software hacker types, and it was completely badass.

They had some issues with their food distribution algorithms though. Hopefully next year, if they roll out Google Dinner 2.0, they'll have that algorithm sorted out. (It took an inordinate amount of time to get our food since everyone had to wait in a huge line to get served - there's definitely room for optimization there, I think.)

I talked Dave Jones into coming along and we had an awesome time. As soon as we walked in, we were accosted by Google folks who made us fill out some registration cards. One of the fields on the card said "Desired position" so I asked the woman (who had an amazingly kick-ass Google shirt, one with a female symbol on one of the 'o's in Google, but I digress) "What does this 'desired position' field mean?"

"We want to know, if you were to work for us, what position would you want to have?"

This stunned me. What an amazingly smart way of getting people interested. So davej and I filled in "spaceman" and "Batman" respectively. I mean, if Google is going to be hiring someone to be Batman, I certainly hope that they'd consider me for the position, because I think I could do really well in that role.

Got to meet some cool people there, including Mako who apparently wanted to meet me because he knew who I was. Finding out that other people know who I am and want to meet me.... that's kinda freaky. I mean, granted, we're not talking about Havoc Pennington-style rockstar status.

Yet.

[09:32] | [/tech] | # | G
Sat, 12 Feb 2005
.: xdevconf version 2.0 ::

Zack Rusin flew in and Adam Jackson drove up last night and both are crashing at my place.

We're at the X Developers' Conference in Cambridge. ajax is taking notes, so I'll link to them once he uploads them.

Anyway. Back to the discussion about freedesktop and current level of desuckification.

[10:41] | [/tech/fdo] | # | G
Mon, 31 Jan 2005
.: world of warcrack ::

I attempted to hunt down a copy of World of Warcraft a few weeks ago, in vain.

My searches were fruitless. I went to several Wal-Marts, Targets, and Gamestops. All were completely devoid of World of Warcraft loving. This made me sad.

I ended up going to go visit Tony (who I'll be dropping by to see again on the sixth for the Chinese New Year) and I crashed at his place after he, Rob, and I stayed up until way too late watching Battlestar Galactica at Rob's place. The following morning, we got up and I talked Tony into going to the Apple store. It wasn't that hard to convince him, actually. I just said "We're going to the Apple Store," and he complied. Once there, I had the instant flash of realization that the wonderful bastards at Blizzard put the Mac and PC versions of their games on the same CDs. Those crazy fools. I searched for the gem and - lo and behold - there were FIVE copies of WoW. I picked mine up, made sure it wasn't some book or gift card (like Target had. For shame, Target! For shame.) and I carried it to the line at the register and bought it.

The game is incredible. It's seriously just amazing. If only I had a decent video card, one that didn't overheat when I played it... And dealing with Windows is shitty.

Which is why I've bought a dedicated World of Warcraft box. It hasn't arrived yet, which irks me. But it should be here "on or before" the seventeenth of February, according to Apple. Huzzah for that.

That's about all that's new in the past few weeks. I'll attempt to blog more frequently - hey, I should dump my .plan on here sometime and see what people think - but it'd probably be easier if I had my blogging app working again. Sounds like a fun project for tonight!

[20:59] | [/tech] | # | G
.: the other british dave ::

Spent the entire weekend hanging out with Dave Jones, kernel slacker extraordinaire, an