Doing my part to make a ripple in the pond.

Last month I visited Beijing, China and had to work remotely during my trip. At work we rely on a number of Google services, so I needed a reliable way to circumvent the Great Firewall of China (GFW). After doing a decent amount of research, I learned that just running a SOCKS proxy via SSH is likely to run into problems, so I used a couple of commercial VPNs, as well as a private Shadowsocks server I had set up on various ports of a Digital Ocean droplet. The idea being to have a couple of fall-back methods to tunnel through the GFW in case my primary one stopped working. I thought it might be useful to report on what worked well, and what was most challenging about this.

Given that I’m a Linux user and needed solutions that were Linux-friendly, I settled on two highly recommended commercial VPNs – ExpressVPN and Astrill. I also sprung for the added “VIP” add-on to Astrill that gives you access to a few additional VPN endpoints that presumably have lower utilization. In summary, Astrill was the clear winner, especially with the VIP add-on. Though no matter which VPN service I was using, there was a lot of fiddling that had to be done to test the latency of different proxy endpoints. There wasn’t one I could just set and forget.

Finding usable wifi in Beijing is another story, and proved to be a frustrating problem. My local resident friend told me that the Chinese tend to use the internet for recreation rather than getting work done, so the vast majority of folks packed in coffee shops are streaming video to watch movies or TV shows. My own observations backed this up, and it was easy to notice this, as a sizable proportion of these folks don’t bother to use headphones when watching their entertainment (grumble). So I found the only times I had really solid wifi speeds were when I found a coffee shop that was mostly empty, and probably half the time I gave up on the wifi and just tethered to my phone’s data connection. For most of my work I was running remote builds over SSH, and I found my phone’s data connection was laggy in a more consistent way than when I tried to use wifi in a busy cafe.

Regarding SIM cards in China, I have some tips to share as well. I ended up buying a prepaid China Unicom SIM with 2 GB of data from Amazon before I left for my trip, which was incredibly convenient. The way this works is you buy the SIM online, they send it to you, and you have to activate it over email with the seller. Once the SIM is activated, the 90-day lifetime of the SIM doesn’t start until you actually begin to use it, so you can complete the activation well before your trip and then pop the SIM card into your phone once you land in China. I have no complaints about dealing with the seller LvyCom on Amazon and would definitely recommend them.

So how was ExpressVPN? Decent and reliable, but not especially fast. I found it helped significantly to change the connection type from “auto” to “udp”, but Astrill’s Openweb connection type still beat it when it came to speeds. But to set expectations – generally the speeds were still slow. My friend had an 80 Mbit home internet connection which I tested without the VPN enabled, but once I enabled a VPN, the best I could get from it was around 3-5 Mbit. This was generally only good enough to watch YouTube videos at 480p. My friend was quite surprised when I told him I always watch YouTube at home at 1080p resolution with no hiccups or delays.

Shadowsocks turned out to be the least reliable method of tunneling out of China, sometimes working well and sometimes not working at all. Since it’s a lot of extra effort to set up a Shadowsocks server compared to just using a commercial VPN, I don’t think it’s necessary unless you want to have that extra peace of mind.

Overall I was able to get work done while in China, but it was regularly a frustrating experience to deal with the lack of bandwidth and annoying latency on SSH terminal sessions. Oh, and bring good headphones if you plan to try to work from coffee shops!

Photos from my recent trip to Beijing can be found here. For news about the GFW and VPNs, I recommend greatfire.org.

A while back I had picked up a neat little fanless Intel Atom computer based on the BayTrail N2807 CPU. It’s a dual-core system running at 1.6 GHz and has 2 GB of RAM and onboard flash disk, and seemed ideal as a micro server for my home LAN.

The device turned out to be a bit flaky to set up, so I thought I’d share my installation notes here. There are multiple revisions of this mini PC, and I believe I have one of the first versions. The case looks like this:

LIVA Mini PC

First, I created a USB flash drive with the Ubuntu 16.04 server install image using Ubuntu’s Startup Disk Creator app. Then, plug in an HDMI monitor and wired keyboard to the Liva. Hit F7 when the BIOS screen comes up and select the flash drive to start the installer.

The main issue I ran into was during the disk partitioning step. If I chose one of the guided partitioning options, the process wouldn’t complete, and raised an error about “Identical mount points for two file systems” on the flash storage.

After several unsuccessful attempts to try other options, I found a solution that worked. First, choose manual partitioning mode. Select the entire disk, and create a new partition table. Then select the free space and have it create partitions automatically. At this point I could save these changes and have the installer proceed past the partitioning step.

Everything else in the installer is pretty straightforward. Once I had everything set up the way I wanted, I disconnected the monitor and keyboard and intended to use the system as a headless server. However, the system refused to boot without a monitor attached. I tried several modifications to my GRUB bootloader command line to try to work around this, but had no luck. If someone knows the customization to make here, please let me know and I’ll update this post with the info.

Instead, I chose the lazy option. You can buy “dummy” HDMI connectors that emulate a monitor – for example here’s one that you can use.

Once I connected that to my Liva Mini PC, it was able to boot up headless and the device is now usable to me again.

I hope this information might be useful to others trying to make use of this handy mini PC system.

Over the last month I’ve had the opportunity to borrow/rent a 3D printer from a friend of mine. This was a healthy thing for me, since I had recently joined a local hackerspace (Brainsilo) to have access to a 3D printer a member kept there. With all the hype and excitement around 3d printing, I quickly got caught up in the possibilities and was overwhelmed with all the amazing things I could now potentially create, either of my own design or from sites like Thingiverse.

Having to actually go to Brainsilo to kick off prints was just inconvenient enough, and my ethusiasm just manic enough, that I started to seriously consider buying a printer of my own. Based on my research, one of the best values in 3d printing appeared to be the Printrbot Simple Metal, which you can buy for $539 in kit form or $599 assembled (plus shipping). Thankfully before I gave in to the desire to impulse-buy one of these, I worked out an arrangement to borrow this same model from a friend of mine who was starting to get a bit bored with it. In the end I worked through my obsession and gained more realistic expectations about what 3d printing could offer me.

I’ll reveal the conclusions now: it’s not useful enough for me at this time, but may be worth re-examining what options are out there in another year or so. But I will also say that the Simple Metal does live up to being one of the best value printers you can get for under $1k – I advise getting the heated bed accessory for it (another $100) and setting up an Octoprint networked print server.

My hope was to be able to use this printer to create useful things. A lot of people seem to use them for creating figurines and toys, but I wanted to build enclosures for various embedded boards I had (especially the RaspberryPi). I was disappointed with the results in a number of ways. First of all, printing anything thin-walled or with narrow standoffs wasn’t working for me, because it turns out that PLA is too brittle. Nearly all of the RasPi cases I tried printing fell victim to something snapping or cracking as I tried to fit the board into the case.

RaspberryPi Cases with Broken Parts

The solution here is likely to print with ABS plastic instead of PLA. That requires a heated bed, and the fumes of ABS are not something I wanted to deal with in my home office setup. Another issue which I assume would have been resolved with a heated bed was warping. I saw a lot of warping of anything that had a large surface area (especially embedded board cases). Printing with a brim mitigated this slightly, but still not enough. Printing with a raft fixed the warping issues, but as much as I tried to tweak the raft settings in Cura, the raft was always too strong and more or less ruined my prints when I tried to remove it.

3d printing is still pretty far from a simple usability experience. You have to learn the nuances of your printer, slicer, and even tweak print settings for every kind of filament you’re using. Hmmm….can I get away with printing this without support structures? Often you’ll waste hours trying a print without them and end up throwing it away. The process is quite tedious and iterations are slow.

Overall I’d have to say it’s still worthwhile to wait and see how the technology advances. We’re still in the infancy of 3d printing, and improvements in quality, convenience, and price will be substantial over the next few years. Printing in PLA is mostly useful for toys and prototyping things to eventually make in ABS. Without the ability to print ABS conveniently in my home, I think a 3d printer is still too much of an expensive toy, and if I want a 3d printed item, I’m better off finding a local printer a site like makexyz.com and having them print in ABS and apply the specialized knowledge they have about how to optimize prints with their printer.

This blog hasn’t been updated in quite some time. Like many people, I’ve switched over to using a social media platform for shorter posts (and especially photo sharing). I don’t use Facebook, but found a lot of the embedded Linux and kernel community seems to have adopted Google Plus, and I do like their circles model for sharing posts.

Some noteworthy adventures I’ve been on this summer include a trip to Asia, and climbing Mount Saint Helens with my wife. Below are some direct links to the photo albums which documented these travels.

I do have a couple of blog posts in mind that I may be writing up soon. Over the last month I borrowed a 3d printer and have some observations on that technology that I think are worth sharing. Until then, this is just a short update to let readers know that Google Plus is where you’ll get more regular updates of what I’m up to.

The intro level hands-on lab class I’ll be teaching has been reworked considerably based on feedback I received from the first event we did in February, to allow for more independent learning/exercises. And as before, we’ll have some hands-on labs for experienced Yocto Project developers as well in addition to a panel discussion.

I’m really excited to help people get started using our build system, and to meet our OpenEmbedded contributors from across the pond. Don’t be a stranger!

I thought it would be fun to write about how bicycling has evolved in my life over the past five years, when I got back into riding as an adult.

My original goals when I bought my first road bike were to find an activity that I could enjoy doing outdoors that could be an alternative to spending time at a gym. I didn’t want to have to drive places to do this activity, and there were few options for decent mountain biking nearby, so I decided to get a road bike.

Of course, I figured what I needed was your typical racing-oriented road bike, so I ended up with an entry-level Specialied Allez:

This was a great bike, and it really epitomized that feeling of just ‘gliding’ along that is so special about road riding.

As I am somtimes wont to do with new interests that I deeply enjoy and become passionate about, I soon became a bit obsessive about learning about my new sport and spent a lot of time in online forums. Through these forums I found many examples of people who were bike commuters, and rode to work and to run errands on a daily basis. For someone who couldn’t get enough of bicycling, this seemed like the logical next step for me – after all, why wouldn’t I want to substitute ridng my bike instead of driving my car? Anything that could add more time on my bike was good in my book!

So I started riding to work, finding decent back-road routes to get to my employment, and no longer needed to hit the gym during lunchtime. I became a bike commuter, and quickly found that my bike was not especially well-suited for carrying loads. I wanted something more comfortable to ride, not just for commuting but also for the increasingly longer rides I was doing during the summer.

There are some things that can make a bike much more suitable for commuting and longer-distance rides; a taller head tube, more “relaxed” frame geometry, clearance for wider tires, and rack and fender mounts. Soon I had my eye on a new bike, and replaced the Allez with a Salsa Casseroll:

This was a significant step up in comfort and practicality while still being a road bike well-suited for riding centuries. I could set it up as above with a light set of wheels for my faster rides, and I could also put fenders on it for the mild but wet winters I started to encounter after moving to Portland. A rack gave me the versatility to mount pannier bags on the bike, and I had something I could run errands with:

For most people, a bike like this is a perfect all-around, general purpose bike. But the longer I lived in Portland, the more I found myself using the bike as a serious commuter and errand-running machine. Trips to the grocery store and carrying increasingly heavy loads were taking their toll on my wheels, which needed to be replaced. Also, if you ride much in the rain, rim brakes will quickly wear down the surface of your rims and require frequent wheel rebuilds.

Four years after getting the Casseroll, I decided it would be worthwhile to have a second bike – one set up for wet winter riding and that could carry large loads without pushing the bike’s limits. Having a more upright riding position would be fundamental to this bike – no drop bars this time. And disc brakes work exceptionally well in wet conditions and no longer wear down your rims when braking. So meet the newest member of my family, a customized Surly Disc Trucker:

Riding this bike is just plain fun. The upright riding position feels like I’m sitting high, as one would in an SUV vs. a sedan. The tires on this bike are even wider than the Casseroll, and the sprung Brooks saddle also offers a bit more give on rough roads. The bike is definitely heavier and feels a bit slower than the Casseroll, but more than makes up for it with the fun factor.

So there you have it – a case study in the evolution of myself as a bicylist. I could now care less if I ever rode a racing oriented road bike again. It was a great introduction to the joys of riding on the road, but comfort, versatility, and practicality are the main attributes I seek to fulfill in my riding nowadays.

After teaching a very successful Yocto Project hands-on lab at the Intel Developer Forum last September, I learned that there was a lot of demand for training resources along these lines. Rather than having me fly out to various Intel sites to teach these courses, I decided it would be better to develop some hands-on labs in video format, so we’d have some “scalable” training materials to meet the demand.

The first screencast video was publicly released last week at the Embedded Linux Conference in Redwood City, CA. It’s a half-hour long and combines some introductory theory with hands-on exercises you can follow along with.

By the end of this screencast, a new user will understand fundamental concepts about the build system, and be able to start their exploration of the Yocto Project with a solid foundation of knowledge.

Quite honestly, creating this screencast was pretty agonizing, as the video editing tools Linux offers are either horribly complicated or extremely unstable. Perhaps at some point I’ll write up everything I learned about screencasting and give a talk for PLUG. 🙂

This won’t be the last screencast, but I can’t promise a timetable for the next one just yet.