(λ (x) (create x) '(knowledge))

Mobile Workflow: Part 2

A Nokia N900 Really is my Daily Driver! · August 28, 2020

I recently joined a new online community. And while introducing myself on the BBS (yes an actually old school BBS!) I mentioned that I love tinkering and developing on my old N900. This generated questions almost immediately, so what can I do? Well I think it's about time to revisit my mobile workflow!

I've written on this in the past, trying to figure out CI status', writing blog posts, really basic stuff. It's probably no surprise to say that this blog post was hammered out on the tiny three row keyboard of my N900 in question. It's a reflex for me, but for many it's a surprising statement. Over the past nearly two years the N900 has been a steadfast partner in my digital life. It's my grab and go system for everything and anything! I've written event engines in Common Lisp while waiting to pick up friends at the airport with it. I built most of the software that runs this blog from my N900 and the comfort of my couch. I've even built and shipped packages for Alpine Linux with it. Anything that can be done with a terminal is fair game with my handy dandy N900, and if the 600MHz CPU and 256MB of RAM can't handle the task; I'm an SSH session away from a VPC instance, or my hypervisor.

I've broken down my thoughts on various aspects of the setup below, and at the very bottom you'll find a list of tools, and some photos of the setup itself.

Thoughts on Hardware:

Battery Life

Nokia ACPI Estimate

I typically see about 7 hours of intense use. That's straight constant rattling away at the keys, brightness set to 1/4th (50/200). This can vary more or less based on how intense the work load is. If I'm leaving multiple prompts open or compiling software locally I'm liable to have worse battery. Additionally leaving Ofono and Connmanctl on and the 2g/3g cellular running reduces the battery life further. The setup isn't as optimized as what the Maemo hackers of old had managed.

That said I typically just work offline, toggling the mobile data on as needed. The Nokia remains powered off for most of the day anyways. I haven't gotten a reliable phone/SMS replacement working yet, so I'm a little bit stuck in that area. Of course, this has the added benefit of allowing me a mobile hotspot with access to 4g, and using that on the nokia is a no brainer, the network performance is just far better.

Most of the time the battery life isn't much of a limitation. I can leave it plugged in while at work if I'm actively using it, and I always keep a power brick with me. Even a modestly small one has enough juice to charge the N900 completely a couple of times.

Networking

The nokia is equiped with a 2.4Ghz wireless nic, as well as a GPRS modem. They're both okay, by the times standards I imagine they were excellent, but they haven't held up well with age. Using the modem itself I was seeing 500kb/s consistently, sometimes it would falter into the 700Kb/s territory. This probably has a lot to do with aging 2G/3G/3.5G infrastructure being removed. On the nic itself I can get a consistent 3Mb/s-5Mb/s, respectable. I won't win any competitions, but it gets work done. That said, trying to move tarballs of my multi gig home directory to my NAS as ad hoc backups has been the thing of nightmares.

Thoughts on Software:

Development:

Development on the N900 is my biggest use case, and something I mention most often. I primarily treat it as a thin client, unless I'm building tooling specifically for it. I defer all of the heavy lifting to various build systems, or handle things manually across an SSH session.

All of my praise thus far is revealed to centralize around one thing. The N900 has a keyboard.

A look at the N900 keyboard + Weechat

I can get an SSH session on Android, or IOS, but most of those systems lack a keyboard. If I had hundreds of dollars to throw at an fxtec, I likely would, because the killer feature that enables everything else is in fact the keyboard. It doesn't matter if I'm writing a package parser, updating a blog, building docker containers, terraforming infrastructure on AWS, or writing a complex embedded system in Common Lisp. If I have a keyboard, a terminal, and networking; then I'm an SSH session away from anything and everything.

Adding features to toAPK

It isn't all rainbows though, eventually these tiny keys do fatigue your thumbs. The issue, I feel, is exacerbated by the meta characters. If I want a < character or perhaps a { I have to hold the little blue arrow on the left side. Not bad, but what if I need to do Meta-x in Emacs, or ESC? Well that means holding shift, the blue meta and pressing the back key. Emacs pinky is already a real problem, and this keyboard can pass it right along to your thumbs! The same goes for any number, or typically seen programming syntax character, they're behind a shift of some sort. You get used to it though, and it's a price I'm willing to pay for a portable shell, a mainline linux kernel, and my favorite Linux distro chock full to the brim with custom tooling. Plus if you write lisp you only have to worry about (), maybe [] and {}, which isn't too bad!

Stability/Availability:

I'm on both the PostmarketOS and Alpine edge repos on my N900. In the two years I've used it, I've had two breaking issues. One caused by absolute failure on my part to sanely update packages, getting a network drop, and having the system die while the initramfs was being rebuilt (yes I had to rebuild it (no I did not lose data, the fs lives on an sd card, easy recovery!)), and two the recent breaking changes to musl libc caused issues with SSL and I chose to rebuild. Really that's no more down time than I've seen with any other computer I own.

Insofar however as software availability goes, I find that it can be limited sometimes. armv77 is still in use, but it's old. The CPU is weak. There's no ram. You simple cannot run Firefox well. Netsurf even struggles sometimes. That in and of itself nixes a great deal of graphical tools.

We can further add that Alpine's repos, while rather large, are not as expansive as say Debian's. And often times I find myself packaging new tools, and subsequently maintaining them to help bridge personal gaps. I don't mind this obviously, I in fact love contributing to Alpine, but it can get frustrating. It's even worse when things like Terraform are available, can be installed, but simply don't work. That's a whole segment of my job, and personal system maintenance workflow, that can't be done natively due to hardware constraints.

Building & Packaging doctl from the N900

I'm happy to say though that this improves every single day! And I spend a lot of time pushing packages that are armv7 compatible from my N900, in hopes of making it easier on everyone. In fact I packaged zangband for Alpine just so I could play it on my N900. And I working around Terraform is as easy as using ansible, doctl/awscli, or a simple SSH session to a capable system.

Social Media:

I guess the last note that I can think of, which is pretty much ubiquitous in our day and age, is social media. I personally try and limit what I do use, keeping it to only really IRC consistently. There exists a bunch of CLI tools for things like slack, twitter, etc. In this realm I'm really only actively using weechat to chat on Freenode, but toot provides a very interesting TUI option for Mastodon, which I've been urged to join by a few friends. There's also things like tilde town which is a modern take on a BBS community, which presents endless amounts of entertainment and socialization. The main point though is that really, I don't keep the nokia around to brose facebook or the likes.

Straight Up Cons:

The Nokia is a phone! Well guess what, it's not easy to do phone things with it.

Yes you can send SMS with Ofono, the modem works! Calls are possible too even, but there's no ecosystem. There's no contact manager, okay whatever Emacs org. There's no SMS app, I could probably make an ncurses thing in Fennel and archive messages in an SQLite db, but that's lots of needed development time. I have lots of excuses.

In this vein, I've also recently learned that the Motorola Droid4 (xt894) now has mainline linux support. This seems to be a solid upgrade, dual core armv7, 1G ram, 16GB emmc, 32GB SD card support, and 4G networking! Tmlind has put in a ton of work getting it to work, and it can handle SMS and calls, really exciting stuff! I've actually got one one the way and an a docking station along with it. It's fairly neat, one of the few phones I've seen that has an HDMI port built into it and designed specifically to be docked. Well before its time.

Either way if you want it though, it will work. You can build your own applications, daemons, databases, and enable modern phone features! I just don't have the time currently. I started an SMS application in Fennel, but it got lost in everything else. If anyone really wants to go down that route, let me know. If there's some collaborative effort towards a suckless or terminal based phone app collection, I'd love to join. But the task feels daunting for one person. That problem doesn't necessarily change if I upgrade to the Droid either. But oh well, that's not why I keep using the Nokia, or anything else like it. It's niche, and I love it for what it is!

Tools:

These lists aren't exhaustive, but if you're curious what kind of tools I'm using here you go!

Development:

Compiling the Chronos fake-event test suite

I rely heavily on CI/CD, Docker Containers, and Qemu VMs for testing code. But I keep enough tooling to write what I need to. Despite how weak the Nokia is, it can deftly handle compilation of even complex programs. The above is an example compiling a fake event generation program that's part of the KlockWork Systems Chronos project.

  • Emacs/MicroEmacs
  • Git
  • Fennel
  • SBCL
  • toAPK

Web:

Old school websurfing. Old school websurfing.

Super lightweight web stuff, IRC is a must have.

  • Lynx
  • Netsurf
  • Monocle
  • Weechat
  • Mutt

Organization:

fa notifications!

I handle my TODO & Calendar via Emacs, and M455's fa provides in terminal notifications for high visibility issues.

  • Emacs Org
  • fa

Work:

This is largely just a series of scripts/programs I've written to automate parts of my job. But they work as well on my N900 as they do on my main workstation.

  • jsd-get
  • toAPK
  • awscalc
  • bmon, htop, etc
  • nmap, netcat, etc
  • ansible

Entertainment:

Hey look I suck at ZAngband! Jack McDevitt's A Talent for War

There's not much here, but I mostly spend my time programming or reading. Some old school ascii games are perfect time killers. Probably my favorite though is epr, it's an excellent little ebook reader.

  • Nethack
  • ZAngand
  • epr