For $350, the Yoga 710 is a great linux 2:1

If you’re looking for an inexpensive 2:1 to run Linux I would highly recommend the Yoga 710, 11.6″. I found an open box deal from BestBuy at $350 and eBay has plenty of them running form $300-400. For that price you get a solidly built fanless 2:1 laptop, with  4 cores, 4GB Ram and 128GB SSD.

If you go the Ubuntu route like me, don’t waste your time trying to install 16.10. According to the interwebs it’s possible but I didn’t have any luck. 17.04 however, installed without a hitch. I replaced the pre-installed Windows 10 image and now have nicely portable (2.3 lbs) laptop to cart around the house and yard for basic computing and light development.

One hint though: learn about the Novo Button before starting any OS modification. As far as I can tell easy access to the BIOS assumes restarting from that Windows 10 option. No combination of ALT, DEL or function keys will trigger the BIOS at boot. On the 710 the NOVO button is paper clip actuated and sits between the power and HDMI slot on the right side of the chassis. The Novo buttonThis seems to be a Lenovo thing, that’s not easily discoverable, but pretty handy once you realize it’s there.


Sharing SSH keys between Ubuntu on Windows and Windows 10

I’ve got a handful of Ubuntu VPS’s on DigitalOcean. This is all part of my effort to teach myself how to admin and eventually develop for that OS. So far I’ve got a WordPress site (this one), a node box and an ELK box to monitor them.

When I’m working at home in my office I’m running Windows 10. When I’m camped in front of the TV with my wife, I’m on a Chromebook with Crouton and Ubuntu. The first thing I notice is that the workflow between the two is quite different. Putty and FileZilla on the one, straight Bash on the other.

I’m not ready (nor will I likely ever be) ready to switch to Linux for everything so I’m going to try to get the to environments to feel the same.

If you’re a Windows guy like me, but interacting with Linux machines, you probably started with PUTTY to generate ssh keys and are using it for secure shell. Another option is now Bash on Ubuntu for Windows (aka the Windows Subsystem for Linux), which I’ve just started to play with.

The nice thing about it is that it’s, well…, Linux. Everything (I’m sure not everything but you get the point) just works the same. No need to SSH to a remote machine just to start running some Bash scripts. No PAgent. No PUTTY. Just pop open Bash right on your Windows box and away you go.

Converting and Sharing PuttyGen SSH Keys with the Linux Environment

Since I’ve already got a private key for my Windows box, and don’t really want a new one for the Linux environment, it’s also possible to share the same key between environments.

A couple of stackexchange posts help immensely there. I want to keep my keys all in one spot, so directions on how to convert a PuttyGen key and share them with the Ubuntu environment made that a snap.

  • Open your private key with PuttyGen
  • Export it to a file named id_rsa in the same location as the ppk file. (Conversions->Export OpenSSH)
  • From Bash on Ubuntu for Windows execute the following (assuming that your private key is in .ssh in the root user location on Windows):
ssh-keygen -e -f /mnt/c/Users/UserName/.ssh/id_rsa > /mnt/c/Users/UserName/.ssh/
ssh-keygen -i -f /mnt/c/Users/UserName/.ssh/ > /mnt/c/Users/UserName/.ssh/
ln -s /mnt/c/Users/UserName/.ssh/id_rsa ~/.ssh/id_rsa
ln -s /mnt/c/Users/UserName/.ssh/ ~/.ssh/
chmod 600 ~/.ssh/id_rsa

This will convert the PuttyGen key to OpenSSH format and link it from the Windows file system to the Linux home location.



From GUI to CLI

So thus far I’m running an Ubuntu desktop on a Chromebook (mostly to play around with VSCode and dotnetcore) and this here Linux VPS running wordpress. Now I’m not a 100% *nix noob but pretty close. The last time I really interacted with a Unix system in a meaningful way was college (SCO and Irix).

My first observation is that 25 years of living in a Microsoft world has made forget how to run a computer from the command line. It is amazing when you think about it how much Windows tooling allows you to do without needing the command line.

Since Visual C++ 4 or so, projects were less and less about config/make files and more about settings dialogs (which generated config/make files). Now in VS.NET 2017, if there isn’t a checkbox for it, you probably don’t need it. A nice thing about that is it allows you to focus on the problem domain. The downside is I seem to have forgotten a lot about the actual toolchain.

There was a time when I could troubleshoot a build problem by quickly  examining a make file or preprocessor output. Or run a complex system build from a batch script. Now I wouldn’t know how to invoke the c# compiler without at least a few minutes on google.

VSCode is a radical shift from the approach of Visual Studio. The IDE looks to be going back to being a code editor and debugger. You can’t make good use of it without the CLI. Configuration is all file, not GUI, based. In short you need to be much closer to the toolchain.

I’m not quite sure how I feel about it yet. Nostalgically it feels somewhat more pure and powerful. The first thing I notice I miss is the discoverability that GUI based configuration brings.

Setting up even a fairly simple set of projects in VSCode for the first time entails a lot of documentation reading. Not a bad thing. But also I’m not quite sure if it’s 100% good.

Are software engineers better off being fully immersed in the tooling or insulated from it?


Sigh… linux

I suppose it’s about time to finally really, really (no really I mean it this time) learn Linux.

I’ve installed Linux multiple times over the years. I’ve compiled the kernel. Configured X windows by hand. Run unity, kde and gnome desktops. I’ve never actually done anything useful with Linux though. I install it, screw around with it a bit, and then go back to Windows which has been my bread and butter since it was actually just DOS.

Now even Microsoft loves Linux, and platform agnostic may actually be a reality. So here’s my wordpress site. Running on Linux. Running on a VPS.

We shall see what happens from here.