Hacker News new | past | comments | ask | show | jobs | submit login
Remotely tunneling to a server using an iPad Pro for programming (jann.is)
64 points by TheArcane on Oct 26, 2017 | hide | past | favorite | 78 comments



Wait, what? This isn't about using an iPad as a development machine, it's about using a server as a development machine and an iPad + keyboard to access said development machine.

I get that the author wants to use his iPad for day-to-day stuff, and that's fine, but it's a stretch to say it's their main programming machine when it's not actually running the "local" setup.

Heck, it would drive me bananas having to stop working every time I went through a tunnel on a train, or didn't have reliable connection to my VPN. Kind of destroys the point of a local environment.


This is nonetheless a helpful article for pointing out some interesting tools available on iOS and on a server for getting this type of work done. But I agree, the $1000+ iPad Pro here is basically being used as a dumb terminal. If you're willing to accept a less-spectacular screen, look into inexpensive vintage products instead, like a Surface 3.


It's funny to me that you refer to a 2 year old product as 'vintage'. You can barely call it 'old'.


Well, when you consider that most semiconductors have an anticipated operational lifespan of 5-7 years, and the surface contains many such components, 2 years is well into middle-age.

ref. https://c3.nasa.gov/dashlink/static/media/other/ObservedFail...


> most semiconductors have an anticipated operational lifespan of 5-7 years,

Funny, my 7 year old laptop seems to be running just fine.


So, still within the 5-7 year range? An operational lifespan is a timeframe in which most of the objects in question are expected to still work, not the timeframe by which most have failed.

If it continues to work for another 5-7 years, that's when you're getting into the "sturdier than average" realm. Your laptop could be a micron's worth of a whisker away from shorting itself out - you won't know until it happens.

Perhaps I should have stated my earlier point differently, but 2 years is still not a small portion of the lifespan of your average computer.


Hardware terminals are back! \o/

Everything that's old is new again.


Yup, they are, but for different reasons.

Today, I believe the push to terminals is due to the slow death of Moore's law. Computer performance today is not getting much faster, and it's certainly not growing at the exponential rate it was from the 1970s-2000s.

Previously, if you wanted to double your performance, you would just wait 18 months or so, and some manufacturer would provide it. Now, we don't have that luxury. If you want to double performance, you basically need to double the number of computers. Unfortunately, doing that takes up physical space and power. So the solution is to create massive server farms with big beefy computers that can run in parallel.

The death of Moore's law is depressing.


I disagree. The death of Moore's law is exciting. It means all those optimization and constraint driven design skills are relevant once again.

For better or worse, working within constraints is frequently much more interesting than "don't worry about constraints, Moore will take care of it".

I'm excited to see where we go now that we've started to plateau.


Indeed the article is about the ipad as a thin/remote client, not as a "main computer for programming" in any way, shape or form.


Depends on the length of the tunnel since he is using Mosh. Also then there's the Macbook for when you know you are going through some swiss megatunnel. ;)


Hey, brace yourself, we have 3g coverage in all tunnels in Switzerland!


> every time I went through a tunnel on a train

The author made it seem that mosh would make that a non-issue.


So mosh is going to guess the auto-complete suggestions or code-docs your editor will offer while you are effectively offline?

Don’t be daft. Mosh can in a limited way eliminate latency, but it can’t provide the intelligence offered by code running on the server if the server can’t be reached.

For this you either need full connectivity or running the full stack locally. And right now only Android (and possibly Windows?) seem to offer the latter option.


I thought the dream was to sit in front of a computer and work on several machines at once? Those machines being anywhere.

“The Network is the Computer“


So basically what this guys says is "golden" and good enough reason to warrant buying the most expensive tablet on the market can be summed up as this:

1. iOS 11 now supports very basic multitasking, years after Android (and Windows mobile, if that counts)

2. iOS 11 has support for keyboard-shortcuts, which (you probably guessed it) Android has had full support for at least since Android 3.0 (and we're now at 8).

3. He does no actual local development and has moved his entire development setup into the cloud, rendering the iPad a mere terminal, and thus it as the base-platform utterly irrelevant.

The only one who can call the cost-benefit factor of this as a development setup "good", are the ones already so invested in Apple-stuff that they're blinded to everything else. Especially its inherent limitations, not to mention the obscene cost given the limited offering you get.

Really: The cheapest chinese Android-tablet you can find... And no, not one of the cheapest. I mean the utterly cheapest of the cheap Android-tablets you can find... Can do all this.

At probably 1/20th the cost.

And it can run local chroots and native docker-containers too, so you have full offline support.

What's offered as an "amazing" experience here is only amazing if you don't consider cost a factor in what you get to work with. And once you do, it's about as far from amazing as you can possibly get, probably worst in class.


Should be titled, "I remotely tunnel to a server using my iPad Pro for programming" very misleading. Furthermore to the point: what's the benefit of tunneling to a remote machine for dev work? The latency would suck as would the overall slowness of things, it would drive you insane. You can hammer nails into a piece of wood using a rock, but why would you when you can use a hammer?


I have been doing this for 4 years. I can rent a 16 core server for a couple of years for less cost than a low entry Macbook, with a 1Gbps line. With mosh, I can develop literally anywhere with no lag at all (or at least, no noticeable lag) even with a 3G connection. I can RDP to an EC2 Windows instance when I need a quick Windows machine, again with minimal lag even over 3G.

I sold my desktop, and now use a cheap £200 garbage laptop as a thin-client to my machine. Not only do I get incredible compile performance due to being able to use 16 core Xeon's, but I am not tied to any desktop.

I can whip out my phone and pop open a tmux session from anywhere, in an emergency I can hop onto a friends computer and thanks to SSH 2FA fearlessly login to my dev system with my full environment that I never have to close.

At this point, I would actively avoid jobs that wouldn't let me work this way. Currently got a sweet remote gig and I'm going to fly to Spain next week and spend a couple of weeks coding on the beach with my 3G tethered laptop.

Edit: Just to clarify, I don't need to work in an IDE or use any Windows software that I couldn't tunnel over X. So it might not work for everyone. Just wanted to give an example of it working out great for someone.


Which service do you use for renting a server?


Used to use a SoYouStart E5-1650v2 for the 6 Core/12 Hyper-Threads. I moved when I got a sweet server auction deal with two Xeon's but recently moved to Hetzner because the price for their AX50 Ryzen 1700X + 32GB of RAM is hard to beat.


> I can develop literally anywhere

Except on airplanes.


Or underground trains, or long tunnels, or hikes, or many things. Hopefully though the typical developer doesn't spend the majority of his time on an airplane. Me personally, I don't need to be coding so consistently that the loss of a few hours on a plane is going to stop me doing this.


The latency really doesn't need to be that bad. If you can play games on an internet connection it's definitely good enough to type on.

(Someone will now come out of the woodwork to remind us of when they did all their development over a 300-baud serial teletype, uphill both ways)


At the last place I worked, all of our desktop computers were thin clients that logged into a virtual machine in a data center somewhere 30 miles away. The company had special network connections and even though latency was noticeable (especially scrolling large graphics), it was tolerable and good enough to get work done.

However, at home, I would routinely login to the same remote computer and the latency was horrible, every typed letter was delayed a tenth of a second or so. I wasn't about to spend a fortune on a dedicated line to the work servers.

The point is, when you're working remotely, you're totally at the mercy of the network. If the network is down or flaky, you can't get anything done.


That 10th of a second case is where Mosh shines - you typically won't notice the typing latency, even with closer to a full second of latency.

It's more noticeable when jumping around the code, but I've found that such activities are not as intolerant of latency.


Multiplayer games cheat a lot to ensure smooth gameplay. For instance, they usually run a local game instance and respond to your input immediately, and only then retroactively correct the game state after a round-trip to the server.

I could imagine a middleware doing similar cheating for shell, but in general, you'd have to have a stripped local version of software doing local simulation to ensure videogame-like smooth experience.


> Furthermore to the point: what's the benefit of tunneling to a remote machine for dev work?

You can do it from anywhere; you don't need a powerful local machine; controlling what devs do is easier; etc.

3 of my last 4 contracts have been development on remote machines. It's perfectly fine unless you somehow have abysmal networking (and then you really have bigger problems.)


I love to work offline. Sometimes I am most productive when there is no network.

> You can do it from anywhere; you don't need a powerful local machine; controlling what devs do is easier; etc.

I can do that from my mobile too. There is absolutely no comparision with the "powerful local machine". And yes, you do need a powerful local machine, unless you are just writing text.


> controlling what devs do is easier

That's not exactly a benefit for the dev.

> You can do it from anywhere; you don't need a powerful local machine

That's fair, but arguably, that's an argument for CEO to own an iPad, so that they can log in to company network from whatever country they happen to be in this week. For regular employees, that seems like introducing a stupidly huge amount of pointless friction into the dev process, which will directly impact productivity.


In your instance though, it sounds like the development on remote machines was a client choice and not your own? The author is choosing to develop remotely themselves because Docker makes their MacBook get hot and burns their thighs when they don't wear pants. Would have just been easier to buy one of those laptop rests with inbuilt fans than spend money on a monthly server though, right?


> the development on remote machines was a client choice and not your own?

I do 90% of my personal development on remote servers too.


s/You can do it from anywhere/You can do it from anywhere you have an Internet connection and a local terminal with the correct setup/

If you already take the local terminal around with you, then there's really no benefit to "You can do it from anywhere" as that's 1) not true, you need an Internet connection, and 2) you can do the same thing, even offline, with a halfway decent laptop.

If you want to work from a terminal and log onto a server remotely to get stuff done, that's absolutely fine, each to their own! Just please don't paint it as better than having your local setup on a laptop, since it's not really. Apologies if you weren't saying that, but it came across as such.


> Just please don't paint it as better

Nope, wasn't doing that at all. Just pointing out that you can't apply a blanket "It's not as good" like many commenters are.


I think someone edited the title of my submission. I wasn't sure that was possible.


OK we've used your suggestion. Thanks!


With Android and Termux you will also have offline support more.

But from my experience: Better buy a good ultra portable Intel CPU notebook from/with a brand/os of your choice. There will be a time where you need to install something which only runs locally.


The show-stopper for me of all these set-ups is that you cannot sit on a sofa with your legs crossed and the machine on your lap which is by far the most comfortable setting for me


It's a very comfortable position, but not for the cervical spine. I just had an injury that according to the doc was because of this posture. I don't believe it though. Anyways, try not to sit in this position for long durations. The injury isn't fatal but will leave you with shooting pain in your arms and shoulders for weeks.


If slouching in a chair for long durations is harmful, I would have had serious problems by now. I haven't met a chair I didn't love to slouch in.

That said, I did twist out my back last year. My doc said ti was due to sports, but who knows.



So the actual development is all done on a remote server, no local development? In that case, it would appear that this setup would be more classified as a thin client than a “main computer”.


I've worked on a similar setup during the last summer. My laptop's battery busted and since I already own a desktop I decided to buy an iPad and SSH into my desktop with Prompt.

Prompt is alright although I need to stay active on it due to the iOS app lifecycle constraints. If an application is suspended for more than 10 minutes iOS will kill it, meaning that if I'm working on a different application I'll constantly receive notifications to switch back to Prompt just to reset the death counter.

I have also spinned up a jupyter server so whenever I want to work on a notebook I'll SSH into my desktop and start the server. I can then use Safari on iOS to do browser based work. I imagine something similar can work for web developers. React Native developers can also upload their applications to hosting services such as Expo or Codepush and work on mobile applications on the go.


Blink and mosh fix this issue, as with that you can resume sessions even after the app is suspended by the OS.

However, this doesn't work perfectly yet: https://github.com/blinksh/blink/issues/59


> If an application is suspended for more than 10 minutes iOS will kill it

That sounds ridiculous. Is that still the case with iOS 11? Can you not make an app persistent?


Using Prompt to occasionally run a command on a remote server might be tolerable, but I’ve found it very annoying to work in as a Vim user.

I’m sure it’s not even the app’s fault, but rather a consequence of how iOS and SSH work.


MacBook 12” works great, has a better keyboard, is probably lighter/smaller than an iPad Pro

Why not use that instead?


Of course, the reason is that we wouldn't be talking about an article that described using your laptop to do something that its been doing since the 1990s! ;D

But seriously, I think these kinds of articles are great. I love to hear about people's different setups and trying to push what can be done on iPads. Why not?

The thing for me is that I absolutely LOVE my iPad (i have an Air2 for general use and a 12.9, mainly for art-related use) and I really, really want my iPads to do more -- to become more "real" work-capable. Why do I want that? I think the reason is because these things are so close to being a single thing to carry around. They are so perfect for certain things (web browsing, email, chat, and many types of gaming) that I would really like to keep expanding that list. I'd love a world where the iPad is the only device I take with me on trips.

I also think it's real important for everyone to keep pointing out the glaring flaws of tablets (iPads in particular). In a way, this article just reinforces the fact that the inability to do real, local programming work is a real limiter for a lot of people. Also, my favorite complaint is about just how awful selecting and editing text is. I'd love for Apple to fix these things.


If you want to work with Docker (like this guy does)... Using something Linux-friendly is probably better. Like a ThinkPad.

Docker is a million times better on Linux than any other platform, so if all the work you do is through Docker, it seems insane not to make that as a base-optimization.


This seems more appropriate as a title: "Using the iPad pro as a screen for my server based programming environment."


I feel a bit sorry for the author of the article to have put so much effort into fancy graphics and so on when he has completely missed the point. This isn't using your iPad as your main coding device. As someone else said earlier, this is a thin client at best.


IMHO, he has not missed the point. Tablet makers (IOS or Android) are fighting very hard to avoid that tablet becomes a generic versatile computer that you can use the way you want. We can stop fighting. Network is more and more reliable and we can rent very cheaply very good computers in the cloud. I use a bluetooth keyboard, connectbot and tmux to connect regularly to my web server. It works very well and I have more latency from the keyboard than from the network. If your computer (tablet) breaks or is stolen, you do not lose any data. Welcome to the cloud ;-)


I would summarize the answer as "it's surprising how much programming you can do, but it's not a great setup."

(Disclaimer: I love my iPad Pro, and am typing this note from mine.)


Posts like these are fun.

OP, I am now curious about using Docker to manage dotfiles and some installs. Could you tell us more about it, or give some resources to get started?


What resources other than the Docker quickstart do you need? He is basically using a VM to contain all of his settings and software.


I agree with everyone that is saying that he is not using the iPad Pro as his main computer, howeve I wouldn’t dismiss using an iPad Pro in a similar method with GUI based development. I’ve done remote troubleshooting with Windows environments with nothing more than my iPad and RDP -even remoting in Tony own desktop and using Visual Studio.

After seeing how badly running a Windows VM on a Mac laptop kills battery and how cheaply you can setup a VM on Amazon, I will probably just use that for Windows development when I get another a Mac. Then again, I have a gigabit internet up and down at home so maybe not.

I could also see using an iPad Pro for a terminal because I have “unlimited” data on my cellular equipped iPad for $20 a mont but I can’t get unlimited fast tethering to a laptop.


A guy (Mark O'Connor) did this 5 years ago. At the time I had a full dev stack (LAMP, vim, tmux, hg, etc.) on a netbook eee1001 (or whatever it was, the little guys) for portability. I liked my setup way better as I took my dev environment with me. But I would probably go nuts if I had to work on that little screen all the time.

http://yieldthought.com/post/12239282034/swapped-my-macbook-...


it's looks more like a classic terminal, I bet you get more work done that way


When you are sshing into server you are using the server, not the local machine (beside the terminal and ssh app itself).

Please correct the title.


The "but it's not local and therefore not programming!" style reactions make little sense to me. Programming is an activity; where the code resides or executes doesn't change that fact. How would you have the title "corrected"?


If the title says "using device $X as a main computer for programming", that linguistically entails two things:

1. that "main computer for programming" is the one running the stack and software used for programming and

2. that this device is $X.

In this case the main computer for programming is a machine in the cloud ($Y, not $X), and $X is a terminal connecting to the cloud ($Y).

The title for this submission is clearly inaccurate and misleading.


We will have to agree to disagree. When I'm programming, as a backend engineer (like the article's author) I am almost always making use of numerous computers at once: my local hardware, a remote dev instance, remote production instances, databases, etc etc. The one I consider to be "main" is the one I use to input commands, write code, etc. Like the author's iPad Pro.


Did I say it is not programming? Where you got that from?


Comments here went a bit crazy. Just think of the article as "The iPad Pro as main computing device for programming".


"Remote server as main computing device for programming"


I use my mini 2 to connect remotely and do some work from my couch or my bed. I cannot see doing this 8 hours a day though.


This is awesome! I've been eyeing the ability to use an iPad for a dev device for a while now. As a frontend and react native dev I'm unfortunately still restricted by my need for a good web debugging experience (eg chrome dev tools + react/redux dev tools) and the ability to compile to an iOS device. I can't imagine either of these are coming anytime soon, so for now I'll stick to an old fashioned MacBook Pro.

That said, sometimes I wonder if Apple will ever make the plunge and make an iOS version of Xcode. The thought of a mobile version seems scary, and obviously this would only be practical on the iPad, but at the same time if they ever try to make the iPad replace the professional workhorse that the Mac currently is that'd be a natural direction to go in.


can you work with those keyboards without a table, like put it on your lap?


The Logitech Create keyboard/case [0] for the 12.9 iPad Pro works great on my lap. The new Logitech Slim Combo case/keyboard [1] has a removable keyboard that doesn't work well on a lap but makes using it as a tablet easier.

Both keyboards are backlit and I like typing on them.

[0] https://www.logitech.com/en-us/product/create-ipad-pro-keybo... [1] https://www.logitech.com/en-us/product/slimcombo?crid=1762


No, not really, or at least, not comfortably.

I tried this with my 12.9 (with the same keyboard, the foldable one) for a few days on the train and it is possible to balance it on your lap while sitting nicely with your legs bent at the knee at a 90ish degree angle, feet flat on the floor. The keyboard is stiff enough as long as the gulf between your legs isn't too wide. The problem is that any shifting around can cause this set to move and tip. It just doesn't feel long-term stable. It is possible to do it for a few minutes, say, to reply to an email.

That said, the keyboard is really nice to type on and is really easy to get used to. I know these things are very subjective.


I got a Surface Book 3 for $600 and runs Windows 10. The keyboard detaches, and you can install a full dev environment (Ubuntu Linux).


Aka: I use an iPad Pro as a terminal.


I wish my vim could show ligatures. still - not enough to switch away from simple term


Are you sure that's a problem with vim and not with your terminal (emulator)?



The title should really say "Using an ipad to be able to develop in one's underwear"... Outside of this key element, there is really no upside over using a laptop!


> Outside of this key element, there is really no upside over using a laptop!

From the article:

> Even though the MacBook's retina display is a really great display, the iPad Pro's display is another big step up. I don't know if it's the Pro Motion, the True Tone or the Wide color (P3) but the iPad Pro display just looks a lot better than my 2015 MacBook Pro's.


For writing some javascript?


It's what you're looking at whilst doing that, yes.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: