WordPress, the software that powers this blog, released a new version recently and I, like many others, upgraded right away. As it turns out, there’s a minor bug in the XMLRPC handling that breaks my favorite blogging client Ecto.
If you’re using Ecto and WordPress, you can apply the patch or you’ll have to wait for the next maintenance release of WordPress.
Typically, you would install rubygems like so:
tar xfvz rubygems-0.8.11.tgz
sudo ruby setup.rb
Unfortunately, attempting to install anything will generate an error:
sudo gem install rails –include-dependencies
ERROR: While executing gem … (Gem::GemNotFoundException)
Could not find rails (> 0) in the repository
As I understand it, the Ruby package will look in /usr/lib/ruby/gems, but the rubygems tarball will look in /var/lib/gems. To get around this, create a symbolic link:
sudo ln -s /usr/lib/ruby/gems/ /var/lib/gems
sudo gem update –system
sudo gem install rails –include-dependencies
I had been excited by the prospects of the Nokia 770 from the moment I read about it on Planet GNOME. An internet tablet that ran Open Source Software and used GNOME/GStreamer bits. It was hard to not be excited. The early reports from the people who received developer units was promising. Software was being ported and written, and things seemed to be progressing by all accounts.
The Nokia 770 was finally released, but only available online. I waited patiently for them to appear locally. Jorge finally spotted one in the wild, at a CompUSA in Michigan. I braved a snow storm and headed out to my local CompUSA and picked up the only one in inventory. I was almost giddy when I got home and plugged it in to charge. And then I used it.
The review Eric wrote for Ars Technica sums up my feelings on it nicely. I really wanted to like the 770. It had the potential to be a great device but severely fell short on expectations. The hardware seems underpowered, with the lack of RAM crippling the performance. Beyond that, the software itself was buggy — even for a first release. I could forgive the occasional glitch or two and wait for an update but the persistent issues with the UI — slow visual response to operations, applications crashing or refusing to start without restarting the device and the minimal working configuration options made it a profound disappointment.
Apparently I’m not the only one to return the Nokia 770, either. When Jorge returned his, the manager came to talk to him. He wanted to know if it was really that bad, because his store had seen a 100% return rate on the device. Let that sink in for a minute: every single person who purchased the Nokia 770 at that store returned it. That doesn’t bode well for a future revision of the device to address the flaws in this virgin release. Nokia had a great idea, but the poor execution leads me to proclaim the Nokia 770 the most disappointing gadget of 2005. Better luck next year, guys.
I was chatting on irc and organizing my wallpaper when I realized that there was no way to set my background image directly through Nautilus. I cracked open Anjuta and got to work.
Here is the result: nautilus-wallpaper
I still need to wrap my brain around autoconf, automake, etc. I did manage to hack the Makefiles so that the extension is installed to prefix/lib/nautilus/extensions-1.0. Hopefully there aren’t any other quirks with that.
Just a little bit of code I’ve been working on. Call this a proof-of-concept to test the geo-targetting library that I’m using. Taking that (a commercial product) and combining it with the Google Maps API, I’ve come up with something kind of fun:
Where am I?
It’s not 100% accurate and it only goes to the city level but it’s close enough for most purposes I need it for. It’s some pretty interesting technology, too. My next step is extending it to not only target the city you (or your ISP) is in, but other cities around you in a certain mile radius.
I’m writing a new web application using mod_perl 2.0. It’s heavy on network I/O so I’m doing some benchmarking and testing with simulated I/O to see just how many requests/second I can expect a single server to handle. While reading through Practical mod_perl I discovered one of the greatest tools ever: ab.
stone@moradin:~ $ ab -n 5000 -c 10 http://localhost/echo
This is ApacheBench, Version 2.0.41-dev < $Revision: 1.141 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Finished 5000 requests
Server Software: Apache/2.0.54
Server Hostname: localhost
Server Port: 80
Document Path: /echo
Document Length: 33 bytes
Concurrency Level: 10
Time taken for tests: 2.326156 seconds
Complete requests: 5000
Failed requests: 0
Write errors: 0
Total transferred: 1145916 bytes
HTML transferred: 165132 bytes
Requests per second: 2149.47 [#/sec] (mean)
Time per request: 4.652 [ms] (mean)
Time per request: 0.465 [ms] (mean, across all concurrent requests)
Transfer rate: 481.05 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 0.7 1 8
Processing: 2 2 1.2 3 10
Waiting: 0 1 0.9 2 8
Total: 3 3 1.2 4 11
WARNING: The median and mean for the waiting time are not within a normal deviation
These results are probably not that reliable.
Percentage of the requests served within a certain time (ms)
100% 11 (longest request)
This is awesome. Not only does it rock, but it’s included by default with Apache.
I haven’t had much time to do anything but sleep or work the last few weeks but I had to take a quick break to share something very, very cool.
The page is marked as obsolete and a historical reference but that’s okay with me. I’m trying to detect obsolete browsers, so I figure it’s appropriate.
I had an old IBM Thinkpad that I bought used at a local computer show for Dena. A Pentium II 233Mhz with a 5G hard drive and 192M of PC100 RAM. Not exactly high end but hey, it’s a Thinkpad and it was fairly cheap.
After she got her Powerbook I installed Debian on it and used it as a backup laptop. A buddy of mine needed a machine for a while so I lent him the Thinkpad. I eventually got it back a year or so later but it wouldn’t boot. Instead it greeted me with the BIOS error code “161, 192, 163″, which is computer speak for “What the fuck, I can’t remember who or what I am.” I did a little googling and found that this Thinkpad uses a very standard battery for CMOS, the CR2025, which can be bought damn near anywhere. I picked one up at Radio Shack for under $3.50 with tax.
Getting to the BIOS battery is painfully easy. Remove the cover housing the memory and pull the top piece of memory. You might be able to work around it but why bother. From there, you can disconnect the battery lead and pull it free. It’s just sitting there waiting for attention.
The guy at Radio Shack was in awe of the yellowness of the battery. Apparently he’s unfamiliar with modern marvels such as “shrink-wrapped plastic”. In any case, we’ll be cutting off the plastic coating shortly.
Cut away the plastic coating. The negative and positive leads are stamped into the surface of the battery so you have to pry them off carefully. I used the flat blade of a screwdriver to work the lead away from the battery.
Putting it back together is a bit of a cheap hack but it seems to work well enough. I cut small strips of electrical tape to secure the leads to the battery. I made sure to wrap the exposed leads to the wire so that there is no chance of them coming into contact with each other or anything else metallic in the case. Then I wrapped the entire thing for safe measure. Putting the battery back in place is easy, just reverse the process. Tighten it up and you’re ready to go.
The first time you power it up you’ll get another BIOS error code, this one telling you that you need to set the date/time. It’s an ugly screen but it works.
This quick and simple hack has given this old Thinkpad a new life. Armed with a fresh install of Ubuntu and a wireless card, I’ll be rigging this up as a semi-permanent member of my wardriving setup.
As a whole I love C# but sometimes I find some quirk that I just don’t understand. I’m sure there is a reasonable explanation of why it works the way it does but I don’t know what it is.
I was building a Gtk.TreeView last night and setup an enum for each column in the TreeView. No big deal, right? The enum looks something like this:
enum1 = 0,
Then, to build the column I do something like this:
TreeViewColumn col = new TreeViewColumn ();
CellRenderer NameRenderer = new CellRendererText ();
col.PackStart (NameRenderer, true);
col.AddAttribute (NameRenderer, "text", (int)Fields.Keyword);
Notice on that last line that I have to cast the enum member to an int, even though the type of the enum is int, you still have to cast its value.
You can specify the base type of an enumerator, but it defaults to an int. You could do this (and I tried) but it doesn’t change anything:
enum Fields : int
enum1 = 0,
It would be nice to not need to cast the value of the enum, especially given the ability to explicitly set the type of the enum. I don’t know the internals of how the compiler works nor have I read the CLR specification. It’s just annoying to to tell an enum that it’s an int, only have to remind it of that fact every time you use it.
Holy shit what a disaster.
The file consisted of 5 lines of code, only one of which was actually necessary. The problem was that the single line was approximately 46,838 characters long. Yes, you read that right: 46,838 characters.
Let this serve as a public plea to anyone who develops web applications in any form: For the love of all that is sacred, never, ever, neglect the endline. Endline characters are my friend. They should be your friend, too. If you can’t grasp the fact that an application, especially a web browser, might have problems handling FOURTY SIX THOUSAND characters without a line break, then I have one favor to ask: find a new line of work. People like you make it more difficult for people like me to do my job. Sure, I get to play the part of hero when I show my client their “new and improved website” that loads an order of magnitude faster because I simply applied sane whitespace rules. At the end of the day, however, I would rather spend my time doing my job and not cleaning up your crap.