Reflections on software development from anywhere on an iPad
ghuntley.com
ghuntley.com
I thought of using just a tablet to replace my laptop and my paper notebook, but thin client development only works with a fast, stable Internet connection.
This isn't possible everywhere. It's not even possible on German intercity trains/buses. It's also not possible across the oceans due to latency.
Even when the location is fine, there are bad wi-fi connections, paygates and network outages. Hotel wi-fi is hit or miss. Camping wifi is mostly miss. Censorship is also an issue in some countries. Some wi-fi networks block certain ports too.
My definition of anywhere includes those places, and far more remote ones. Therefore I need a local development environment, so I'm taking my laptop with me.
However, I really love the idea of working from a quiet place outdoors. I spend a few hours on my small balcony every morning. I was considering working from quiet places in the woods like you do.
Guessing you might’ve, given how much effort it looks like you’ve put into this, but if not, it’s worth a look. Integrates really well with Alfred.
One needs a stable connection (Edge network connectivity is all I need), fast is not needed. If there’s high packet loss I switch over to using mosh+ssh and elinks.
There are local / offline code editors on iOS that will sync via Git next time you're online, and Git itself is pretty tolerant of bad connections. As is blink terminal client, over mosh.
For enterprise or systems devs, the negatives of attempting to host a complex system environment on your laptop outweigh the challenges of marginal network coverage (except when there is no network coverage).
Because of those negatives, even dedicated full time dev machines on gigabit connectivity are moving towards CodeEnvy style local (and portable) workspace for edit, with remote deploy/run/debug models. That's basically thin client / thick client debate coming around again.
Vast majority of enterprise/system devs are not so remote as to have to run a simulated cloud environment (e.g. minikube) locally, and I've found almost zero rural areas in the US that can't do a mosh session over the iPad Pro's cellular chip.
To add some context. Had to take my fully specced out 2018 MBP 15" to get the battery replaced. Basicly, I had to go a week without my daily driver and I didn't have a backup. So I picked up a macbook air since they have a 14 day no questions asked return policy. I expected this thing to do some light work. I didn't expect it to actually keep up with my entire workload but it did and without getting particularly warm either. This tiny 1k laptop with 8 gb of ram was ding the job of a 3.5k fully specced mbp with 32 gigs of ram.
can't wait to see what they do with the m1x but I think the macbook air will handle everything you need + allow you to devlop locally.
I'm getting a MacBook Pro with the M1 Pro next, since I really want the ability to drive more than 1 external monitor. But if the Air could do that, I'd be all over it now even with the original M1.
With 16GB, I normally have open: RubyMine, DataGrip (two heavy JetBrains products), a terminal with two tabs, one having tmux and multiple local subshells and one with a remote connection to a server which has tmux (love tmux!), PostgreSQL, MailCatcher, any number of custom app servers (some ruby, some Node), Firefox with far too many open tabs, Spotify, and a handful of other apps.
I'm just about to find out how this thing handles 4k video processing as I got some new video toys to travel with. Maybe I'll end up needing the extra cores of an M1 Pro Max, but hopefully not.
Mmm. That's disconcerting, as I just bought my fiancee an M1 Air with 8gb. (Getting her to spend more than strictly necessary on a laptop would be worse than pulling teeth.) Hopefully that's not an issue with her computing needs, which should be fairly minimal ... Word, Excel, BlueJeans for teleconferencing, Chrome.
FWIW, it hasn't happened to me in days now. Normally I never reboot, and I usually have a lot of services and dev stuff running in the background that I forget about. Since my last reboot, days ago, I haven't had the problem. Maybe it's because I also haven't been working :D, so the background pressure is low.
I use IDEs that are heavier duty than the average user, but those didn't even seem to be the issue, once I had more than about a couple dozen or so tabs open the machine would start grinding to a halt. Sometimes so badly that even closing applications was difficult.
I upgraded to a 16GB and have zero issues now. It seems browser tabs just don't play to the strengths of the M1's memory setup
I suspect its just a recent MacOS bug that will get sorted out, and not an actual OOM issue. Chrome can use a lot, but I've never gotten close to using 16 gigs in my workflows, let alone 32.
I had configured the 'sliding panels' or whatever it's called to use a whole album of about 1000 photos, and noticed that I was getting these weird OOM notices, and when I checked in activity monitor, there didn't seem to be any memory overuse. But I realised it was happening when I was waking my computer from sleep.
I reduced it to 100 photos and now I don't see the warnings any more, so my guess is that the screensaver was trying to read all 1000 or so photos into memory at once, which was causing the issues.
If you have a photo screensaver, worth checking (possibly also the desktop background).
No need to wait, they're available starting this week!
https://www.apple.com/macbook-pro-14-and-16/
https://www.tomshardware.com/news/apple-m1-pro-max-everythin...
I bought a Chromebook Duet at Best Buy for $259. Works very well for software development without internet (runs Debian out of the box). I can plug it into an external monitor and add a keyboard and mouse when they're available. Otherwise the case comes with a keyboard, so I can program at any time.
For day-to-day software development. Use Gitpod or GitHub Codespaces or Mosh+SSH to a Baremetal machine.
What’s your technology stack? What’s the tooling you need to do?
Also, iSH allows you to install Alpine Linux along with many packages.
The feature is there, but it's not readily discoverable.
For that reason, I mentioned PDF Expert, which doesn't have Adobe's lack of UX sensibility baked in.
(Was doing that was back with a gen 1 ipad, a pencil from “53” and a cheap pdf editor.)
As a counter-piece of anecdata:
With connectivity, VS Code runs on an iPad, blink mosh terminal client, remote desktops of all kinds, etc. Without connectivity, various code editors with full syntax highlighting and git sync, to the point I've been handling enterprise software dev via iPad Pro for several years now. It used to be hard, now it's trivial.
Since circa 2017 I've only taken MacBook Pro on a trip if I'm somewhere more than 3 weeks, and ever since the keyboard with trackpad and now the Xbox controller for Xbox cloud gaming, I'm not even sure I need that. The MBP is probably a crutch.
Given the portability, true lap top usability, all-day battery life, built in cellular connectivity, ability to transform into a Kindle or touch device, etc., along with tools needed to code both online and offline, most devs with an iPad Pro 12.9 can ask, "What's a computer?"
Children want stability, access to age-appropriate entertainment (playgrounds, soft play centres, or cinemas and suchlikes for older ones), good schools, friends with similar age.
All those things funnel you to populated centres, likely wealthier ones (for schools, though this varies by locale), and hence also pricier ones.
Sure, some kids are super-happy slumming it in a van, or a shack somewhere beautiful, and enjoy outdoors so much that they don't mind missing out on the other things, and I'm sure (I know in fact) that you can have a very valuable childhood this way. But I guess this is not great for most kids, or at least unsuitable to many.
The van is setup like a house (office) on wheels with all the typical luxuries such as toilets, running water, seperate sleeping areas, microwave for popcorn+movies, massive electrical system and “the best interest in Australia” - https://ghuntley.com/internet so it is hardly slumming it.
Mine are 1 and 3 (1's a bit young for major exploring, admittedly, but 3 is getting there). The 3-year old likes outdoors, but I can't picture her living permanently out in the sticks. She likes her big-city nursery, her little friends, going for croissants etc.
In a way it's a shame, I'd love to pack up and live in the back country, but how things are for me, I could only do it at a detriment to my kids development - YMMV.
I am recently considering that imagery on the web is too powerful. It can be detrimental or subversive to my attention. I feel rejuvenated from HN much of the time because it's textual and thoughtful, not so much of the web that's trying to influence me with images (moving images even more so). Using reader mode / pocket can help.
In college a lot of students get a device that needs to last for 4 years, not knowing what classes they’ll end up taking (often they switch majors).
Lots of students will get iPad Pros as their only device. When they decide to take a class that requires coding, they’ll run into all the support problems, and either need to do all their work in a library or pony up more money they don’t have to get a worse-spec computer that they can actually do their assignments on.
These classes typically have support guides for MacOS and Windows. Even making it possible to install MacOS on an iPad Pro would make the device good enough to be a student’s only computer.
Anyway, if as much as I enjoy handwriting, taking notes via keyboard is much better: you can type a lot faster than you can write and you get all of the benefits of handwriting recognition (searchability, editability, etc). And if you’re using an iPad, your keyboard experience is significantly poorer than with a laptop. The only compelling advantage for a stylus is diagrams IMO.
As for “learning curve”, I have a hard time believing that children will have a significantly harder time with macOS versus iOS. Kids seem pretty smart when it comes to technology.
https://twitter.com/geoffreyhuntley/status/14531947902169538...
I don't understand why Apple doesn't give Ipad pro users an option similar to Samsung Dex. There seems to be an aversion to enabling MacOS on touch devices.
Anyway enough with my rambling, the author seems pleased with his setup so it is what it is.
https://twitter.com/k33g_org?s=20
> I still find magical everytime I pick it up
So magical. I love mine so so much. If it could run Xcode natively it would be so much better and I would not need to carry around my M1 MacBook Pro.
I also use my iPad for drawing / handwritten note taking. This is a use-case which the iPad is clearly superior compared to a MBP/MBA. :)
btw, I'm not a core committer to golang but gololang (based on Java & invokedynamic)
That made me think, Apple must have some internal prototype of Xcode for iPad? Creating iOS apps on iPad could be a killer 'Pro' app, convincing people to choose a Pro version over the regular iPad. Maybe they are worried apps created on iPad wouldn't be quite the same standard as apps created on regular Macs?
It was surprisingly OK. Mosh definitely works for dodgy connections, tmux keeps the session(s) around and all works fine. I was writing C in vim, so that also helped, no heavy tools other than the compiler.
I only wish I had the bigger iPad model. And I wish there was a way to attach that keyboard when in portrait mode (far superior for coding on iPad).
Using code-server in iPad Safari means Cmd+N etc. won't work and also losing very precious display real estate to Safari's UI. Adding it to the home screen and launching from there solves that, but now switching to Safari and back causes keyboard input to stop registering at all in code-server. The Serverediter [2] app doesn't have that issue, but its UI and parts of the code-server UI will jump around for a second when Cmd-Tab-ing to it, which is pretty unnerving.
Then there's connectivity: Apparently background SSH tunnels get killed by iOS after a while. Serverediter has its own SSH client, but port-forwarding any other ports than code-server's doesn't seem to work. Not being able to expose a running web service on my local device makes lots of things infeasible. Maybe I'd need a separate VPN between the code-server machine and my iPad? But that adds more complexity to an already quite complex setup. And finally, https with self-signed certs isn't exactly a walk in the park with iPads (I can't use letsencrypt), but without it I believe the clipboard won't work right.
I realize there are SaaS offers that will make some (or most?) of these issues go away, but those don't seem to be all that customizable, and since I'd use this for personal projects that don't earn any money, keeping costs down is a priority as well (so if I can self-host on hardware I already have, I'd rather do that).
So while I totally get the appeal, I really wonder how others make it work for them. It doesn't seem to be quite as straight-forward as the blog posts made it look.
There is a hack to get background ssh connections to stay alive: https://docs.termius.com/faq/troubleshooting/cant-run-in-the...
(As an aside, the blog post is… disconcerting. I was expecting long form and not what my brain initially believed to be a mass of banners interrupting the actual text. Extremely hard to end until the end, reminded me of TikTok).
Ended up giving it to my wife and getting a surface go 2 m3, its lighter smaller and 1000% more capable, couldn't be happier.
> One goal of Open VSX is to have extension maintainers publish their extensions according to the documentation. However, you may be missing specific extensions that have not been published by their maintainers: either they are not willing to do it, or they haven't found time to do it, or simply they haven't heard about Open VSX yet. Though the preferred solution for such a situation is to convince the maintainers to start publishing themselves, you can add the extensions here to have them published by our CI workflow.
It fizzled. But we didn't have all the advantages he has.
These cloud style development environments are lovely because all development is happening in a data centre and frankly it’s all sandboxed. Every time you run “git pull && make” from GitHub you are essentially rolling the dice that the end result is not “rm -rf /*” or “sudo apt-get install miner” (if you are lucky)