gnu/linux

It’s Not A Phone, It’s A Mobile Computer

Nokia N900
Credit: mackarus [CC BY]

People keep asking me about my new “cell phone,” but the Nokia N900 isn’t a phone. It’s a handheld, mobile computer. Calling it a phone is like calling a house a bed—sleeping is just one thing you do inside a house.

I became interested in the Nokia N900 in the fall, and after a several good reviews, I ordered one off eBay earlier this month. The N900 is the first from a series of Nokia Internet tablets to have cellular capabilities, but the SIM card doesn’t overshadow all the other things you can do with the device—it just frees you to connect to the Internet on the go. The day after it arrived, I signed up with WIND Mobile (another contributing factor to the purchase: leaving Rogers). The combination of a powerful mobile computer, and unlimited 3G data for just $35/month has changed the way I use the Internet.

Yes, it can handle phone calls and SMS messages, but it’s totally arbitrary that a call is a cellular call as opposed to over Google Talk or SIP / VOIP, or that a message is SMS rather than IM; the same applications are used in either case. I can use it as a cell phone, but I can also use it as an Internet tablet, GPS, digital audio player, camera, etc.

Maemo, the operating system that comes installed on the N900, is a fully-featured GNU/Linux distribution. Android shares a common (ish) kernel with other Linux-based distributions, but Maemo has much more in common with the operating system running on my laptop. It uses the same system for finding and installing new software, and it has a lot of the same applications available, since it’s easier to port from other GNU/Linux distributions. Rather than forcing developers to write Java “apps,” Maemo makes a variety of common development environments available. Thus, it’s the first platform to see a Firefox mobile release.

It’s a computer, not a phone. And it’s not just semantics. When we think of mobile computers as merely “phones,” we tolerate restrictions that we would otherwise reject on our computers. How many iPhone users would come to Apple’s defence if they instituted the same strict policies and arbitrary limitations on third-party applications for a Macbook as they do on their mobile computer? (Update: I spoke literally hours too soon.) Recognizing that these devices are really mobile computers is an essential step to gaining control over our mobile computing. Carriers and handset makers control our phones. We should control our own computers.

Google has tried to replace the term “smartphone” with it’s own buzzword — “superphone” — but it’s not just the “smart” part that’s become inadequate. It doesn’t make sense to call these devices “cell phones” anymore than it would make sense to call the buildings we live in “beds.” I have a handheld computer, and my carrier is my ISP.

ps I wrote and edited this post on my N900 using MaStory

SOLUTION: Extract .exe archive with 7z in Ubunu 9.04, fix “Unsupported Method” error

Just posting a quick fix to a problem I had with using 7z to extract an archive. I could list the contents of the archive, but any attempts to extract gave an “Unsupported Method” error. Dan Jacobson posted a solution to the debian bug tracking system, which is to install the package p7zip-rar.

In Ubuntu 9.04, I ran:
sudo apt-get install p7zip-rar

Now, I can extract the contents of my file with 7z as follows:
7z e TekSavvyAM.exe

HOWTO: Installing Android on the Freerunner + Rogers APN

I’ve been using the Openmoko Neo Freerunner as my mobile phone for over two months now. The phone can run a variety of software distributions. I started off with the Om 2008.12 Update, but spent the first few weeks testing out other popular distributions: FDOM, SHR, Qt Extended and finally Android. When I first tested Android, I had some trouble connecting to the GSM network and it felt like there were still some issues being worked out, so I went back to Om 2008.12, with the intention of dual-booting Android. The dual-boot turned out to be a bit trickier than anticipated, and I kept putting it off. Om 2008.12 is a cool idea, but there were some really annoying bugs and little hope of future development [Update: Ben left a comment about the recent flurry of development, including progress on Om2009t5], so yesterday I took the dive and went to a single-boot Android setup.

I started off on the Openmoko wiki page about installing Android on the Freerunner, but the installation is quite simple if you’re going with Koolu’s Android images (though there are a few other options). They provide a near automatic installation with the latest beta releases. Simply visit the website to download the images, and the installation process is dead simple:

Installation Instructions for Beta4 and Later

  1. Unpack the files on to a FAT formatted SD card.
  2. Insert card into the Freerunner, and boot from NOR menu (hold AUX key, then power)
  3. Chose boot from SD Card (FAT and ext2)

The automated install process should begin. It installs the Qi bootloader, reboots, the kernel, reboots, then the system image.

NOTE: This install process overwrites *everything* on the NAND in the phone, including the bootloader. If this is not what you would like to do, please either look at the install process, and modify it to suit your needs.

I’m in the process and figuring out the APN settings for Rogers to make use of my data plan. Oliver Fisher has the details for how to setup the Rogers APN on a G1, which matches the details I got from calling Rogers tech support, but I haven’t been able to connect yet. Not sure if this is a problem with my APN settings or with my data plan. I’ll update this post with the details when I figure it out.

Update: I can’t seem to get connected, though sometimes it says connecting, but I’ve found two posts about the Android settings on the T-Mobile G1 with Rogers which match what I’ve been told when calling 1-888-ROGERS1 (internet.com, wapuser1 / wap).

Solution: Amarok Won’t Play Anything After An Upgrade To Ubuntu 9.04

I was happy to discover earlier today that Ubuntu 9.04 includes Amarok 2. But once I figured out how to queue up some music (which took a little time), I realized that nothing would play.

This was the standard output when I ran it from the command line:
balleyne@balleyne-laptop:~$ amarok
amarok(14270) Phonon::KdePlatformPlugin::createBackend: using backend: "GStreamer"
Object::connect: No such slot MainWindow::showStatistics() in /build/buildd/amarok-2.0.2mysql5.1.30/amarok-2.0.2/src/MainWindow.cpp:692
Object::connect: (receiver name: 'MainWindow')
QLayout: Attempting to add QLayout "" to MainWindow "MainWindow", which already has a layout
link XMLID_7_ hasn't been detected!
link XMLID_7_ hasn't been detected!
Couldn't resolve property: radialGradient3986
link XMLID_7_ hasn't been detected!
link XMLID_7_ hasn't been detected!
Couldn't resolve property: radialGradient3986
QWidget::insertAction: Attempt to insert null action
QWidget::insertAction: Attempt to insert null action
QWidget::insertAction: Attempt to insert null action
QWidget::insertAction: Attempt to insert null action
QWidget::insertAction: Attempt to insert null action
QWidget::insertAction: Attempt to insert null action
QWidget::insertAction: Attempt to insert null action
amarok(14270) Plasma::Applet::save: saving to "1"
amarok(14270) Context::ContextView::setContainment: "" Line: 599
amarok(14270) Plasma::ThemePrivate::config: using theme for app "amarok"
amarok(14270) Plasma::Applet::save: saving to "2"
amarok(14270) Plasma::Applet::save: saving to "3"
amarok(14270) Plasma::Applet::save: saving to "4"
amarok(14270) CurrentTrack::dataUpdated: CurrentTrack::dataUpdated
amarok(14270) Context::ColumnContainment::insertInGrid: "" Line: 603
amarok(14270) Context::ColumnContainment::insertInGrid: "" Line: 603
link XMLID_7_ hasn't been detected!
link XMLID_7_ hasn't been detected!
Couldn't resolve property: radialGradient3986
link XMLID_7_ hasn't been detected!
link XMLID_7_ hasn't been detected!
Couldn't resolve property: radialGradient3986
link XMLID_7_ hasn't been detected!
link XMLID_7_ hasn't been detected!
Couldn't resolve property: radialGradient3986
link XMLID_7_ hasn't been detected!
link XMLID_7_ hasn't been detected!
Couldn't resolve property: radialGradient3986
link XMLID_7_ hasn't been detected!
link XMLID_7_ hasn't been detected!
Couldn't resolve property: radialGradient3986
link XMLID_7_ hasn't been detected!
link XMLID_7_ hasn't been detected!
Couldn't resolve property: radialGradient3986
Object::connect: No such slot FileBrowser::Widget::setDir( const QString& ) in /build/buildd/amarok-2.0.2mysql5.1.30/amarok-2.0.2/src/browsers/filebrowser/FileBrowser.cpp:112
Object::connect: (sender name: 'KBookmarkHandler')
Object::connect: (receiver name: 'FileBrowser::Widget')
link XMLID_7_ hasn't been detected!
link XMLID_7_ hasn't been detected!
Couldn't resolve property: radialGradient3986
link XMLID_7_ hasn't been detected!
link XMLID_7_ hasn't been detected!
Couldn't resolve property: radialGradient3986
balleyne@balleyne-laptop:~$ amarok(14270) MagnatuneConfig::load: load
QPainter::begin: Cannot paint on a null pixmap
QPainter::begin: Cannot paint on a null pixmap
QPainter::begin: Cannot paint on a null pixmap
QPainter::begin: Cannot paint on a null pixmap
QPainter::begin: Cannot paint on a null pixmap
amarok(14270) CurrentTrack::dataUpdated: CurrentTrack::dataUpdated
amarok(14270) CurrentTrack::dataUpdated: CurrentTrack::dataUpdated
amarok(14270) CurrentTrack::dataUpdated: CurrentTrack::dataUpdated
amarok(14270) CoverFetcher::CoverFetcher: ""
amarok(14270) CurrentTrack::dataUpdated: CurrentTrack::dataUpdated
QString::arg: Argument missing: Amarok - No track playing., 0:00
QString::arg: Argument missing: Amarok - No track playing., 0:00
QString::arg: Argument missing: Amarok - No track playing., 0:00
QString::arg: Argument missing: Amarok - No track playing., 0:00
QString::arg: Argument missing: Amarok - No track playing., 0:00
QString::arg: Argument missing: Amarok - No track playing., 0:00
QString::arg: Argument missing: Amarok - No track playing., 0:00
QString::arg: Argument missing: Amarok - No track playing., 0:00
QString::arg: Argument missing: Amarok - No track playing., 0:00
amarok(14270) CurrentTrack::dataUpdated: CurrentTrack::dataUpdated
amarok(14270) CurrentTrack::dataUpdated: CurrentTrack::dataUpdated
amarok(14270) Context::ContextView::clear: "" Line: 165
amarok(14270) Context::ContextView::clear: "" Line: 165
amarok(14270) Context::ContextView::clear: "" Line: 165
amarok(14270) Context::ContextView::clear: "" Line: 165
amarok(14270) CoverFetcher::~CoverFetcher: ""

The “QString::arg: Argument missing: Amarok – No track playing., 0:00″ seemed to be the problem. I found the solution from Xavier Merino:

sudo apt-get install phonon-backend-xine

I restarted Amarok and now it works fine.

Update: People are reporting mixed results in the comments. This fix doesn’t work for everyone. Let me know if you become aware of a better solution and I’ll update here.

Another suggestion is sudo apt-get install libxine1-ffmpeg

Getting Started with the Openmoko FreeRunner: Installing Om 2008.12 in Ubuntu

Heather, my girlfriend fiancée, was kind enough to buy me an OpenMoko Freerunner in January. I went out to get a new SIM card (since there were known issues with my current one) and I experimented with it for a couple weeks, but had to leave it be lately as the past couple months have been very busy.

This morning I got back into the game.

One thing I wish I’d known from the outset is that there are a bunch of different distributions available. When I went into the IRC channel for help, I got several (polite) rtfms directing me to the Getting Started guide (which I was already looking at). Except, the Getting Started guide and FAQ provided a ton of contradictory information (which I’ve since tried to correct) about which distribution ships by default, nevermind a clear explanation that there are different distributions to begin with. Even worse, the FreeRunner ships with Om 2007.2, which is old, basic and not even supported anymore. (My mom asks, “so, would you say that it’s not quite ready for the average user yet?” Considering that the first order of business is to reflash it with a new distribution…) It took me a while to figure all that out. I hope to spend some more time soon trying to improve the documentation so that new users aren’t as confused as I was in the beginning.

I’ve decided to start with Om 2008.12 Update, the latest official distribution. I may consider FAT and Dirty Openmoko (FDOM) soon, which is just Om 2008.12 “updated with many ready-to-use applications.” Qt Extended is on my radar as the just-a-working-phone distribution (but where’s the fun in that?). Though, the next major step I think will be to dual-boot with Android, as that seems like it may be the best option in the long-run (though it’s very much a work in progress now).

Installing Om 2008.12 Update in Ubuntu

Installing Om 2008.12 was actually pretty easy in Ubuntu: download the kernel and rootfs, then follow the instructions to flash the NeoFreeRunner. (I didn’t worry about a backup since I had nothing of value on there.)

I choose to use dfu-util instead of the NeoTool GUI because dfu-util is already in the Ubuntu 8.10 repositories.

sudo apt-get install dfu-util

I only encountered one problem when following the instructions. When I tried to run the dfu-util command, it detected two devices, even though I had nothing else plugged into my laptop but a power cord. The second one was named “UNDEFINED”, which wasn’t particularly helpful either.

$ sudo dfu-util --llist
dfu-util - (C) 2007 by OpenMoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY

Found Runtime: [0x1d50:0x5119] devnum=4, cfg=0, intf=2, alt=0, name="USB Device Firmware Upgrade"
Found Runtime: [0x0a5c:0x2110] devnum=3, cfg=0, intf=3, alt=0, name="UNDEFINED"

According to the comments on this ticket, it’s actually expected behaviour for dfu-util, and it could very well be my bluetooth interface that was showing up. Instead of disabling it, I just used the -d flag as suggested in the comments to specify which device to update. (Also, under Ubuntu, don’t forget sudo…)

sudo dfu-util -a kernel -R -d 0x1d50:0x5119 -D Om2008.12-om-gta02.uImage.bin
sudo dfu-util -a rootfs -R -d 0x1d50:0x5119 -D ./Om2008.12-om-gta02.rootfs.jffs2

… where 0×1d50:0×5119 is vendor/product ID of the FreeRunner (found via `dfu-util –list`).

The FreeRunner can boot from flash memory or a microSD card. I plan to try Om 2008.12 (or a variant) in flash and I’ll probably dual-boot with Android on the microSD card at a later date. So far, I’ve just turned it on and sent Heather a message and added her as a contact, but I hope to finally be getting some real use out of it soon!

HOWTO: Compile Unison (and OCaml) under Unslung 6.10 on a Linksys NSLU2

This is a pretty obscure and incomplete howto, but I was left to figure all this out without much help so I figure I might as well post what I learned in case it is of assistance to anyone else.

At the office, we’re running a Linksys NSLU2 with the Unslung 6.10 firmware as our file server. We wanted to use Unison to do a two-way sync between portions of the server and a laptop, so that we can access documents offline and out of the office (e.g. in a meeting off-site). The unslung NSLU2 has a lot of software available through the OptWare package system, but Unison is not available. Since the architecture is non-standard (I want to say “arm” or something? anyways, not x86), I figured we’d have to compile from source. Then, one more roadblock — it’s written in OCaml, which also lacks an OptWare package and would need to be compiled from source.

Obviously, make sure you read and follow all the instructions provided with OCaml and Unison, and be sure to pay attention to the documentation at the NSLU2 Linux wiki. The following are just some tips for things that weren’t in the documentation which we had to figure out along the way.

Compiling OCaml

This proved a bit tricky. First all, you’ll need to install a few dependencies, which thankfully have OptWare packages available: make, crosstool-native (for gcc), and gawk.

Second, make sure to use the prefix flag in the configure step to install to /opt/bin and /opt/lib, rather than the standard /bin and /lib (i.e. you want to install it on one of the NSLU2 drives, not the limited internal memory). So, for example:

./configure -prefix /opt

Last, there is one problem with the MakeFile generated — there is a reference to “awk” somewhere to needs to be changed to /opt/bin/awk (unless you’re luckier than me and somehow have /opt/bin correctly on the path, but trust me, I tried…). So, I did a `grep -n awk MakeFile` to find it and then you can use nano/vim to make the edit manually to the file before compiling.

If you do those things first, compilation should be easy (just be prepared to wait awhile):

make world opt 2>&1 > log.worldopt
make install

Compiling Unison

Don’t ask me what “etags” are, but the compiler will complain if you don’t have them, and I figured out it has something to do with emacs. Once you install emacs, it gets past that stage in the compilation, so:

ipkg update
ipkg install emacs

The emacs installation actually gave me an error with a file conflict of sorts, so I had to run:
ipkg -force-overwrite install emacs

For some reason, Nathan discovered that you need to set NATIVE=false when you make Unison. I didn’t see the command, but I gather it looked something like this:
make NATIVE=false UISTYLE=text

Lastly, you’ll want to put unison on your path, so something like…
cp ./unison /opt/bin/




And then, magic! Or tragedy, if you did something wrong.

HOWTO: ThinkVantage Button in Ubuntu 8.10

I’m pretty sure this is the same fix I used in Gutsy and Hardy, but I had to do it again to get my ThinkVantage button working on my ThinkPad T61 in Ubuntu 8.10 Intrepid. I just added the following line to /usr/share/hotkey-setup/ibm.hk and it worked after a reboot.

setkeycodes e017 148 #thinkvantage button

HOWTO: Thinkpad scroll button in Ubuntu 8.10

Overall, I’ve been pretty happy after upgrading to Ubuntu 8.10, but there were a few annoyances. I noticed my Thinkpad scroll buttons stopped working, and when I checked xorg.conf, all my changes were commented out with a note “HAL is now used.” At least wasn’t too hard to figure out how to configure it through HAL.

  1. Create a new file mouse-wheel.fdi at /etc/hal/fdi/policy : sudo gedit /etc/hal/fdi/policy/mouse-wheel.fdi
  2. Add the following lines to the file:
    <match key="info.product" string="TPPS/2 IBM TrackPoint">
    <merge key="input.x11_options.EmulateWheel" type="string">true</merge>
    <merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>
    <merge key="input.x11_options.YAxsisMapping" type="string">4 5</merge>
    <merge key="input.x11_options.XAxsisMapping" type="string">6 7</merge>
    <merge key="input.x11_options.ZAxsisMapping" type="string">4 5</merge>
    <merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
    </match>
  3. Restart and it should all be working.

Now to get my ThinkVantage button working again… *sigh* Update: fixed.

Ubuntu Christian Edition: Don’t surf the web, walk on it

I found this a while back and it’s pretty old, but I just came across it again recently and had a good laugh. There’s an unofficial Ubuntu distribution called Ubuntu Christian Edition and this blog has a ton of hilarious[ly nerdy] “facts” about it, for example…

  • In Ubuntu Christian Edition, all documents are saved by grace through faith
  • With Ubuntu Christian Edition, you don’t need to surf the web — you can walk on it
  • For 40 days before Easter, Ubuntu Christian Edition works in text mode only
  • Ubuntu Christian Edition has the confess command that deletes your logs and caches

sox soxio: Failed reading : unknown file type

I began receiving this error in Ubuntu (after upgrading to Hardy 8.04 I think) whenever I tried to use the sox or play commands. Turns out the solution is pretty simple, sox had just lost its available format libraries.

sudo apt-get install libsox-fmt-all