Category: Linux

  • Maemo blows me away again

    Nokia N810 Internet Tablet

    My wife and I just bought a house and I’ve realized that there isn’t any room in the budget for major gadget purposes, so I’ve been trying not to get too excited about things coming down the road. It’s not suprising that I’ve been following the recently announced Nokia N810 Internet Tablet in a much more detached manner than usual.

    That is until I saw Ari Jaaksi holding a prototype in his hand. Holy crap that thing is significantly smaller than the N800 and packs quite a punch. The slide-out keyboard is killer, GPS is a no-brainer these days and is included, the browser is Mozilla-based, the UI got a refresh… I could go on for days.

    The other thing I really like about the new tablet is that the Maemo platform is moving to be even more open than it was before (which was about as open as the lawyers at Nokia would allow). The quite good but closed source Opera web browser has been replaced by one that is Mozilla-based. This is yet another major component that is now open instead of closed. The major closed-source components (if I’m remembering correctly) are now limited to the DSP, various binary drivers that Nokia licenses directly, and the handwriting recognition software. That’s definitely a smaller list than it was before, and I applaud Nokia’s efforts in opening up as much as possible. It’s also worth noting that the Ubuntu Mobile project is basing a lot of its work on the work that Nokia has done with Maemo (most notable Matchbox and the Hildon UI).

    So yeah, I’m now paying much closer attention to this new device that I was doing my best to ignore. Job well done.

  • Properly serving a 404 with lighttpd’s server.error-handler-404

    The other day I was looking in to why Django‘s verify_exists validator wasn’t working on a URLField. It turns out that the 404 handler that we were using to generate thumbnails with lighttpd on the media server was serving up 404 error pages with HTTP/1.1 200 OK as the status code. Django’s validator was seeing the 200 OK and (rightfully) not raising a validation error, even though there was nothing at that location.

    It took more than the usual amount of digging to find the solution to this, so I’m making sure to write about it so that I can google for it again when it happens to me next year. The server.error-hadler-404 documentation metnions that to send a 404 response you will need to use server.errorfile-prefix. That doesn’t help me a lot since I needed to retain the dynamic 404 handler.

    Amusingly enough, the solution is quite clear once you dig in to the source code. I dug through connections.c and found that if I sent back a Status: line, that would be forwarded on by lighttpd to the client (exactly what I wanted!)

    Here’s the solution (in Python) but it should translate to any language that you’re using as a 404 handler:

    print "Status: 404"
    print "Content-type: text/html"
    print
    print # (X)HTML error response goes here
    

    I hope this helps, as I’m sure it will help me again some time in the future.

  • Packaging Python Imaging Library for maemo 3.0 (bora) and the N800

    I found myself wanting to do some image manipulation in Python with the Python Imaging Library on my N800. Unfortunately PIL isn’t available in the standard repositories. Not to worry, after reading the Debian Maintainers’ Guide I packaged up python2.5-imaging_1.1.6-1_armel.deb, built against python2.5 and maemo 3.0 (bora), and installs perfectly on my N800:

    Nokia-N800-51:/media/mmc1# dpkg -i python2.5-imaging_1.1.6-1_armel.deb 
    Selecting previously deselected package python2.5-imaging.
    (Reading database ... 13815 files and directories currently installed.)
    Unpacking python2.5-imaging (from python2.5-imaging_1.1.6-1_armel.deb) ...
    Setting up python2.5-imaging (1.1.6-1) ...
    Nokia-N800-51:/media/mmc1# python2.5 
    Python 2.5 (r25:9277, Jan 23 2007, 15:56:37) 
    [GCC 3.4.4 (release) (CodeSourcery ARM 2005q3-2)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from PIL import Image
    >>>

    Feel free to take a look at the directory listing for full source, diffs, etc. You might also want to check out debian/rules to see where to use setup.py in the makefile to build and install a Python package. If anyone wants a build of this for maemo-2.0/770 please let me know. It would just take a little time to set up a maemo-2.0 scratchbox.

  • Nokia N800 and camera.py

    Nokia N800 and camera.py

    I received my Nokia N800 yesterday and have been enjoying how zippy it is compared to the 770 (which has been getting faster with every firmware upgrade).. I got a chance to play with the browser while waiting for my wife at the airport and have been poking around to see how Bora is different than Mistral and Scirocco.

    One of the bigger physical differences between the 770 an N800 is the onboard camera. I haven’t set up Nokia Internet Call Invitation yet but I looked around for some camera code samples and was pleasantly suprised. Luckily Nokia is one step ahead of me with camera.py, an example program to show what the camera sees on the screen. It looks like some bindings are missing so saving an image from the camera is off limits at the moment but this is a great start.

    To run the above example on your N800, grab camera.py, install Python and osso-xterm, and run camera.py from the console.

    It’s time to dust off the Python Maemo tutorial and get my feet wet.

    Update: I’ve also been playing with the c version of the camera example code and have managed to get it running and taking pictures after building it in scratchbox and running it with run-standalone.sh ./camera.

  • iPhone and the new mobile web

    There are a few things that excite me about the newly announced iPhone (and a few details that I’m unclear on). One thing I’m pretty sure of is that the coming of the iPhone is the tipping point for a new kind of mobile web.

    I call it a tipping point more than trailblazing because there are already several devices out there that are just waiting for a new mobile web. These are fairly robust devices that have “real” browsers in them. These browsers are fully capable of reading the desktop web, but just because they can doesn’t mean it’s ideal. I’m specifically talking about Nokia’s internet tablets (the 770 and N800), current and upcoming mobile phones from Nokia that include the S60 browser, other mobile devices with advanced versions of Opera and even non-mobile gaming devices such as the Nintendo Wii.

    So what about this new mobile web thing? It’s quite simple. These devices fall somewhere in between the desktop web and the traditional mobile web. It’s sort of a Goldielocks and the three bears situation. Yes, you can view the regular desktop web on this new generation of devices, but you end up having to zoom in to actually read anything or blow everything in to a single column layout (killing the design in the process) if you’re going to read longer passages. The opposite is true when viewing traditional mobile web pages on this new breed of device: the sites look stripped down and barebones in a stark “All we want are the facts, ma’am” way.

    There is a middle ground between the desktop and traditional mobile web just waiting to thrive on these new devices. These new sites will feature more visually rich content and design from the desktop side but will also contain the immediacy and usefulness of the traditional mobile web.

    Developing for the mobile web has never been easy, and I don’t think it’s going to become as simple as creating a myspace profile any time soon, but there are a few things now and on the horizon that are going to make it a lot easier. First of all, there are more mobile browsers supporting more aspects of CSS and Javascript. Specifically the S60 browser, the versions of Opera on many of these new devices, and the version of Safari on the iPhone all support CSS and Javascript quite well. It is also quite nice that while the Nokia N95 and the Apple iPhone are very different devices, they both have at their core the same basic rendering engine, KHTML. The specifics may be different (Safari vs. S60 browser) but I’m hoping that the core rendering behavior remains relatively consistent across these devices. Writing for the iPhone, S60 browser, and Opera will hopefully become as (relatively) easy as making sure a site renders properly in Firefox, Safari, and Internet Explorer. I definitely think that making the same site look good with KTHML and Opera is going to be a lot easier than making a site look good in Safari and IE.

    Welcome to the tipping point, folks. It’s going to be a helluva ride.

  • VMWare Virtual Appliances

    Server graphic from openclipart.org by Oliver BoyerA few weeks ago I downloaded the free version of VMWare Server to try out a few operating systems on my testbed Ubuntu box. Installation went quite well (even though it felt like I was building something from CPAN) and it even handled building some modules for the Linux kernel I had installed quite gracefully.

    What I stumbled upon and have been thinking about off and on for the last few weeks is the selection of virtual appliances available for download. There are two pretty big things that you can do with this wide assortment of preconfigured images.

    First, these virtual appliances are killer for evaluating applications, servers, and software stacks. If you’re evaluating mail platforms you can download the Open-Xchange appliance and run it with VMWare Player, testing it in a lab or with your existing infrastructure. If you’ve used SQL Server for years but want to see what else is out there you can experiment with PostgreSQL or MySQL appliances within a virtual sandbox.

    The other killer feature of virtual appliances is that you can cram the functionality of several little pastic boxes in one relatively inexpensive box running Linux and VMWare Server. Load up a box with a couple of network cards and run a firewall, network attached storage, CRM software, and a PBX on it. This is the aspect of virtual appliances that VMWare is marketing well but I still think it’s a huge deal.

    Many of these appliances take up very little disk space and othe resources which means you can pack them in pretty tight. You can replace several different servers or appliances with one physical box and operate multiple appliances for virtually zero additional cost. It’s also nice that there are a ton of virtual appliances from companies and hobbyists alike.

    To be honest I’m not quite sure how VMWare isn’t loosing their shirt on this. Free appliances running with free (as in beer) software doesn’t bring in any money. They are however showing lots of people exactly how good their software is. Hopefully someone who loves VMWare server and player would be more likely to purchase a datacenter-quality product from VMWare over another vendor.

  • Internet Tablet OS 2006 FINAL Drops

    It’s not on the official Nokia software download page yet, but I just flashed my Nokia 770 to the final release of Internet Tablet OS 2006 from the Maemo download page.

    I can’t wait to play with the gizmo 770 client.

    The OS ships with links to tableteer.nokia.com, which looks really sweet on the 770 (see more screenshots here):

    Nokia Tableteer

    The application manager also includes http://catalogue.tableteer.nokia.com/certified/ and http://catalogue.tableteer.nokia.com/non-certified/ as default repositories. These currently only contain themes and a game, but there is tons of potential here. This is a great way to deploy new software for the 770 without requiring a flash. I would love it if the gizmo client or other official third-party apps end up in the certified repos and it would be great if Nokia made it easy for open source developers to get their software included in the non-certified repository.

  • Xgl

    XGL thumbnail

    A week or so ago I managed to get Xgl working on a box at home using these instructions wtih an aging Nvidia card. I previously had issues getting it to work with an ATI card, but I think that had more to do with flgx and my rather old Radeon than anything else.

    I was completely blown away when I started up XGL and enabled compiz for the first time. It brought an extra level of polish to the already amazing Dapper Drake. By default it enables several effects and features. Some are more whizzy than useful, but the alt-tab preview pane and expose-like features are quite useful. Less useful but still pretty are true transparency and the waving effect that happens when you drag a window.

    Unfortunately running Xgl and compiz meant that things like emacs didn’t run at all, and other apps like Evolution behaved unpredictably.

    That’s to be expected though. Xgl is still very much unstable and bleeding edge. Even if it’s not usable (for me) day in and day out, I think it’s a glimpse in to the future of desktop linux. The packages are available in the Universe repository for Dapper, but there are big warnings everywhere about their experimental nature.

    I really hope that over the next six months Xgl matures and that by the time Edgy Eft is born Xgl will be ready for prime time, if not in the default install.

  • My OSX Development Environment

    My work powerbook was out at Apple for a week or so getting a tan, a new motherboard, memory, and processor. While it was out of town I settled in to a Linux development environment focused around Ubuntu Dapper, Emacs 22 + XFT (pretty anti-aliased fonts), and whatever else I needed. Ubuntu (and other apt-based systems) are great for hitting the ground running because you just install whatever you need on the fly only when you need it. I also got pretty in to emacs and all of the stuff that’s there by default with a source build of the development snapshot. My co-worker James helped me get through some of the newbie bumps of my emacs immersion program.

    When the powerbook came back I decided it was time to reboot my development environment, so I started from scratch. Here’s what I installed, in the order that I installed it:

    • Updates. Oh. My. Goodness. I rebooted that thing so many times I started looking for a green start button.
    • Quicksilver (freeware): I use it all the time to get at stuff I need.
    • Transmit (commercial, $30): Worth every penny.
    • Firefox (open source): My browser of choice, though I really dig Safari’s rendering engine.
    • Textmate (commercial, 39 euro): I spend all day in this text editor and it rocks, though I do miss emacs.
    • Then I disabled capslock. I never hit it on purpose, it’s always getting in the way. I should really map a modifier key to it, but I’m not sure which one and I don’t know if I can convince my pinkey to hit it on purpose.
    • Xcode: A man has to have a compiler.
    • Subversion (open source): I used the Metissian installer since it has treated me well in the past, and I often have flashbacks of building subversion pre-1.0 from source.
    • Django (open source): I checked out trunk, .91, and magic-removal from svn.
    • Ellington (commercial, starting at $10-15k): I checked out ellington and other work stuff from our private repository.
    • Firebug: Essential for web development.
    • Python 2.4 (open source): I’m not a big fan of the Python 2.3 that ships with OSX.
    • Python Imaging Library (open source): It’d be really nice if this made its way in to the standard Python distro.
    • ElementTree (open source): I usually use either ElementTree or Sax for parsing XML documents.
    • GNU Wget (open source): It’s what I use to download stuff from the commandline.
    • PostgreSQL (open source): It probably hogs resources to always have this running in the background, but I use it often enough.
    • PostgreSQL startup item from entropy.ch
    • mxDateTime (open source): I’ve never really used it directly, but psycopg does.
    • Psycopg 1.x (open source): Django uses this to talk to Postgres.
    • Colloquy (open source): A really nice IRC client for OSX. I’m also rather fond of Irssi and screen over SSH.
    • Growl (open source): It’s not work critical but I like it.
    • Pearl Crescent Page Saver (freeware): I find it indispensable for taking screenshots of entire web pages.
    • Session Saver for Firefox: I hate looking at 15 different forum threads to find the latest version of this, but I love what it does for me.
    • Adium (open source): Best darned IM client for OSX that talks just about any protocol.

    While I may have missed an app or two, I think that just about covers my OSX development and living environment. I find the Ubuntu desktop useful enough that it’s still humming under my desk at work. The work LCD has both analog and DVI inputs so I’m able to switch between my two-screened powerbook and a one-screened Linux desktop in a pseudo-KVM kind of way.

    I can’t say enough how impressed I was with Dapper, and how productive it kept me. Aside from my emacs learning curve, I felt at home and had the command line and any app that I wanted to install at my disposal.

    I hope that this laundry list is helpful, if nothing else it’ll be a place for me to start the next time I’m looking for a clean slate.

  • Lighty Rocks My PHP/MySQL World

    A few weeks ago I was tasked with moving boards.kusports.com from an old, overloaded XServe to a newly appropriated Xeon box. The boards were notorious for going down after big games and during big news events and usually took other things on the same server down with them.

    Thankfully that is no more. A week or so before the Big 12 and NCAA tournaments we finally bit the bullet and committed some time to move the boards over to their own box with more horesepower and more RAM.

    I put the ubuntu-server version of Breezy Badger on the box and took the opportunity to see if I could get UBB Threads running under lighttpd and php fast-cgi. I’m glad that I took the time, because it’s smoking fast.

    The process was quite painless thanks to the Ubuntu packing system. I had to build lighttpd by hand but everything else was installable with command-line tools (aptitude/apt-get). The changeover process consisted of little more than shutting down the boards on the old box, doing a dump/restore of the database to the new server, updating DNS entries and issuing temporary redirects to get the board users through the day.

    The best thing about the conversion is that lighttpd, mysql, and php-fcgi barely register any load on the server, even at peak usage. While we were scrambling with stom coverage the other weekend, the boards box quietly registered a new high water mark for usage. After a painful first-round loss in the NCAA tournament, the boards registered yet another high water mark (1134 simultaneous users). The server barely flinched with a load anywhere from 0.00 to 0.20 with plenty of resources free. Previously a third of that number could potentially bring the XServe to its knees.

    While we were turbocharging things, I also installed eAccelerator on the box, which was equally painless and yielded about a 20-30% performance increase.

    All in all I’m gaga over lighty, mysql, and php-fastcgi for when the situation warrants it. It really is insanely fast. At the same time I’m really glad that I work in Python all day.

  • My Nokia 770 Is On The Way!

    I just got “the email” saying that my Nokia 770 developer device was ready to rock. It’s been ordered up, more when the device arrives!

    Update: It’s here, more later.

  • The Dapper Drake

    Now that Breezy Badger is out the door, I felt the need to find out what Ubuntu Linux 6.04 (the version coming out 6 months from now) had been named. The answer? The Dapper Drake. I’m guessing that the goals for the next release will solidify considerably after UbuntuBelowZero in a week or two.

  • Unleash the Badger!

    It’s been six months, and without delay, Ubuntu Linux 5.10 (Breezy Badger) is out the door. I’ve been running Breezy for a month or so and aside from a few minor hiccups it’s been treating me quite well.

    Ubuntu 5.10 features lots of goodies including Gnome 2.12.1, OpenOffice.Org 2 beta, Linux kernel 2.6.12.6, GCC 4.0.1, Python 2.4.2, and a ton of others. Check out the release announcement for more information and download links.

  • OpenWRT: Turbocharging My Hunk of Plastic

    Yesterday I installed OpenWRT on a Linksys WRT54GS while evaluating some technology for a potential client. After exploiting an overflow in Ping.asp I had boot_wait set to on and was tftping White Russian RC3 to the box.

    A few minutes later the WRT54GS began behaving like a router again and I SSHed in to it. I quickly ran ipkg update and ipkg install NoCatSplash. After that I edited /etc/nocat.conf and the splash page HTML. Finally some NVRAM tweaks (don’t forget nvram commit when you’re done) and a reboot and a cheap hunk of plastic was up to customer spec with a custom splash page including T&C and AUP agreement.

    In the process of installing and configuring OpenWRT I was amazed at the quality and depth of the wikified OpenWRT documentation. OpenWRT also works on a wide range of newer hardware including a WRT54GS 2.1 that was purchased a few months ago and a WRT54 3.0 that a friend purchased not long ago. See TableOfHardware for a complete list of compatible hardware.

    After such a positive experience yesterday I plopped OpenWRT on my WRT54G at home. It kept most of the settings from the NVRAM, I just had to tweak the SSID and some wireless settings before I could get back online via wi-fi.

    If you want to enable SSH from the WAN port, just uncomment two lines in /etc/firewall.user. I’ve also set up my box to update its clock via NTP by using these instructions. It also looks rather trivial to set up cron jobs.

    I feel stupid for not installing OpenWRT sooner, as I’ve obviously been missing out on the fun for quite some time. The project has improved an amazing amount since I last looked at it. Now I feel like grabbing newer hardware with more storage space and hacking the crap out of it!

    Update: There’s something satisfying about updating your firewall rules via SSH, hupping /etc/init.d/S45firewall and having everything behave as it should.

  • Rocks Cluster 4.1 Released

    DistroWatch notes that Rocks Cluster 4.1 (beta) is out the door. Rocks was one of several cluster computing Linux distributions that caught my eye while I was working on my research paper on open source clusters. According to the release announcement they have rolled BitTorrent in to the installer which should make for some amazingly fast compute node installations.

    I always love to see progress being made in Linux-based clustering technology. Congrats to the Rocks team for getting this (beta) release out the door.

  • Is It Hot in Here?

    No CPU Frequency Scaling

    Breezy Badger has been treating me quite well for the past few weeks. We’ve had our moments, like the other day a software update left me X-less (that was fixed by apt-get dist-upgrade --fix-missing), but all in all I’ve been quite happy.

    Today I was greeted with a note letting me know that my laptop would be running a little warmer and faster than usual after a kernel update. I’m guessing that later today or tomorrow another fix will come out calming things down again. If not, I’ll file a ticket. Things have been amazingly stable considering the sheer quantity of updates that I’ve been applying almost daily.

    The Badger Rules!

    Update: Just as I thought, the kernel update I applied this evening fixed the issue and I’m speed steppin’ again.

  • Tablet PCs Still Too Expensive?

    For as long as Tablet PCs have been on the market, I’ve been lamentinting that they’re a very cool idea. They just cost too much. At first they were in the stratosphere. Eventually you were only paying a $1000 premium over a standard laptop. Now the differential seems to be down even more, but it’s still in the range of a couple of hundred bucks.

    I was flipping through the latest HP catalog and opened it up to the page showing their range of business laptops. It starts at $663 for their low end model up to $1663 for (you guessed it) their Tablet PC. To be fair, it looks like the price difference is lower than I’ve ever seen it. The next model down is a nc8230 with a Pentium M 740 and a 15.4 inch widescreen at $1463. The Tablet PC (tc4200) has the same processor, memory, and hard drive, but comes in a smaller lighter package (12.1 inch screen).

    So really, there is no apple to apple comparison of Tablet PCs and laptops. A laptop isn’t a Tablet PC and a Tablet PC isn’t a straight laptop.

    Come to think of it, I probaby wouldn’t buy a Tablet PC unless I could install Ubuntu on it. It’s been well over a year since I had Windows as my primary boot partition on my aging HP ze4430us. I keep Windows around on a small partition for those times that you need to work with software that only runs on Windows or those freaking websites that you really need to use that only support (and only work in) Internet Explorer. Aside from a monthly or bi-monthly boot in to Windows, my primary laptop has been run by warthogs, hedgehogs, and badgers for the past year and was run by red hats, green lizards and a cast of others before them.

  • Breezy, Baby!

    Breezy Update

    I’ve finally completed backups and have successfully installed Breezy Badger, (the October Ubuntu Linux release) on my laptop.

    I ran Hoary (the current release) for serveral months before it was out and overall it was rock stable for me. I had some issues with early preview releases of Breezy, but so far everything looks great. I’m installing a tonne of updates and after that I’m going to take a look around and see what there is to see. Here are some things I am going to be looking at/getting up and running:

    • NDISWrapper (done and completely painless with ndisgtk)
    • ACPI support and in particular suspend/resume
    • RestrictedFormats for Breezy. I need my mplayer and codec support.
    • Finding and installing development tools
    • Reconfiguring Evolution (done)
    • Reconfiguring Gaim (done, I’m up to 8 accounts and haven’t bothered to look up my ICQ#)
    • Poking and prodding
  • Nokia 770 Gains FCC Approval

    I had completely missed this, but aparently the Nokia 770 was approved by the FCC on Friday. Thanks for the heads up, Koen! Everyone in #maemo is drooling right about now.

    Here’s some more information in PDF form:

  • Google Talk: One IM Identity Among Many

    Gaim Servers

    So I’m cautiously optimistinc about Google Talk rocking the house. Their choice of protocols is superb. The voice stuff is very cool but is something I will probably have to do without until the chat protocol is documented and/or the fine folks ag Gaim add it to their app.

    Unfortunately talk.google.com is a bit of a walled garden, though it looks like they’re going to open up gateways with a few select partners, including the I-think-they’re-cool Gizmo Project. What would be really cool though (and is not mentioned at all in the FAQs) is a Skype/Gizmo/Etc-style GoogleOut and GoogleIn service. Perhaps this could be as simple as a partnership with the Gizmo guys or as intricite as rolling their own solution.

    For now anyway, talk.google.com is one of many (now seven) different IM servers I connect to every day. I had a need for a home and away AIM account before that was baked in to that service, and now I answer to both, so they’re there. I don’t actually use my jabber.com account a whole lot but the others (MSN, Yahoo!, jabber.org.uk) get enough use that I should really be connected to if I’m online.

    Sure, I’d love to connect to one server and have everyone on the planet be able to reach me, but until that happens, I’ll be on all 7.