For a while I had wanted to put together an ultra-portable dev environment based around a tablet device to replace my 2013 MacBook Air.
Since I travel a fair bit I’m always keen to reduce the weight of my standard load-out especially since when travelling for work I used to end up carrying at least two laptops (work plus personal MacBook Air). And to think back in 2010 I was lugging around a fully loaded Pelican 1510! I’ve come a long way.
So the idea was to combine a tablet device with a Bluetooth keyboard and mouse and try to come up with an environment that approaches the ergonomics and productivity of a laptop but in a much smaller package.
Six months into this experiment I’d like to share my current configuration and I plan to follow this up with a couple more posts on the pro’s and cons of this concept.
I happened to have an old Huawei Mediapad T1 7” tablet laying around and was able experiment with that device to evaluate the ergonomics and practicality of the idea. For these tests I also used my Logitech MX Master 2S mouse and a wired Apple keyboard connected via USB OTG.
Despite the T1’s screen being comically small for this purpose both in terms of physical size and resolution - it actually worked quite well. During these experiments I discovered JuiceSSH and Termux which became elements of my final setup later.
One of the more interesting tests was editing a video (some game footage to share with my Miscreated clan) in Adobe After Effects via Remote Desktop tunnelled over SSH to my home PC from Koh Samet island - which worked surprisingly well!
The Huawei Mediapad M3 8” tablet ended up being my platform of choice for this experiment.
I chose this device over the Apple iPad, Samsung Galaxy Tab, Microsoft Surface and numerous other options based on:
- Physical size - I wanted something small enough to fit in my pocket (when necessary) and this device fits in the back pocket of my jeans (depending on the jeans).
- Screen resolution - the M3 screen is 2560 x 1600 - more pixels more better! This does means the DPI is very small and that won’t work for everyone.
- Expandable Storage - via micro SD card.
- Connectivity - GSM / 3G / 4G UMTS and LTE support.
- Price - the M3 came in at a bit under 12,000 baht - about half the flagship iPad and Galaxy Tab options.
Note that not long after I bought this, Huawei released the next rev - the Huawei Mediapad M5 8” Tablet. The specs are only slightly better and the M3 has a headphone jack which has been dropped on the M5, so I’m still very happy with the M3.
Naturally for most work tasks and especially for coding - a keyboard is critical. I bought the Apple magic keyboard to go with the M3 which connects via Bluetooth. I tested the Apple iPad keyboard and quickly concluded that it completely sucks and I can’t imagine how anyone could use it for anything more serious than the occasional email.
For the mouse I’m using the secondary Logitech MX Master 2S from my desk (it’s so good I have two). The cool thing about this mouse which I didn’t realize when I bought it is that it can memorize three device pairings which you can select with a small recessed button on the underside - so I have the connections setup as follows:
- Connection 1 - Secondary keyboard on my desk at home (via dongle)
- Connection 2 - Huawei M3 (via Bluetooth)
- Connection 3 - AWS work laptop (via Bluetooth)
The key to this is that most of what I do is not on the tablet all all but is actually running on a remote machine, usually my home dev workstation PC. This is the reason you don’t need a flagship tablet from Apple or Samsung or a Surface device running full Windows to be productive - because the tablet is just a window to another machine. Of course that puts a big dependency on network connectivity but we’ll get to that in the Cons discussion later.
Therefore the key tools on the tablet are:
- JuiceSSH - A freemium SSH client that supports MOSH and port forwarding - you need the paid version to be able to do open port forwards but its only a few dollars. I have a profile configured that connects to a SSH box (which happens to be a Raspberry Pi) at home and then port forwards RDP traffic to my desktop PC
- Microsoft Remote Desktop for Android which connects via the port forward - e.g. I have a profile configured in Remote Desktop to connect to 127.0.0.1:29989 where 29989 is a port forward configured in JuiceSSH that routes to desktoppc:3389 within my home network.
The Raspberry Pi that handles the SSH connections runs MOSH) and the connection from JuiceSSH uses MOSH, but this doesn’t actually seem to help at all when I have a flaky network connection so next time I possibly wouldn’t bother with MOSH.
So the procedure for most work is:
- Tap SSH port forward profile in JuiceSSH
- Tap desktop PC profile in Remote Desktop
- Work on my home dev workstation
I also have Termux installed. This is an amazing and free Debian-ish Linux layer for non-rooted Android. It gives you a bash shell in which you can do all kinds of stuff that importantly includes running command-line Git and Python. This opens up a number of offline options. For example if you had a Python project on GitHub you could clone it and work on it on your tablet while disconnected from the network.
As an aside - I had a similar setup 14 years ago running CVS under Linux on my secondhand Sharp Zaurus!
When I’m offline I tend to mostly work on Git VCS’d markdown documentation using an Android app called QuickEdit or more often just directly in vim running under Termux. I’m hoping that somehow there will be an Android port of the amazing Typora some day - this would complete my setup.
Future Enhancement: Cloud-Based Workstation
An alternative to remoting to my home workstation would be to replace it with an AWS EC2 instance. Adding this to the mix is on my TODO list but given I have a powerful home PC and decent upstream bandwidth from my condo its an optimization for problem that currently only comes up rarely. If I didn’t have that home PC however I would have gone straight to running a dev env on AWS.
The benefits of the cloud-based option are:
- You can get a static IP address (using AWS Elastic IP) whereas my home network has a dynamic IP address and when that changes there can be up to a 15 minute blackout while my dyanmic DNS script runs and the DNS changes propagate.
- More robust infrastructure - although there is a UPS on my home PC, a long enough power failure can take my workstation down and if I’m on day two of a 10 day trip when that happens, it means I lose access until I get back (although this can be solved with some remote start mechanism that I haven’t gotten around to investigating yet)
- Elastic - the instance can be created and destroyed on demand and only run when needed
- Regional - if I’m in Europe the latency back to Bangkok can be a problem. With cloud-based I’ll be able to launch the EC2 instance in a European region.
If you’re looking for a lightweight and highly portable dev environment, based on my experience I can recommend the tablet option - if you are comfortable with the ergonomic differences and constraints like requiring a good network connection. As mentioned I will go into those cons as well as the pros in more detail in follow-up posts.