Parallels with Ubuntu 15.10

At work, I don’t have a proper Linux computer yet, and am a bit reticent to install Linux on the Mac I have.  So I’ve been using Parallels.  It’s ok for an emulated experience, but not great: it crashes regularly, runs out of memory, and I still occasionally hit some key combinations that rudely drop me back into the world of Mac from Linux.  But it’s still a heck of a lot better than having to use Mac OS.

Today though, Ubuntu asked if I’d like to upgrade to 15.10, I said yes, and things really got ugly – after upgrading, I could no longer boot into a graphical environment.  Looking at the error logs a bit, it looked like there may have been a problem with “Parallel Tools”, the stuff you install in the guest OS to make it run.

I tried to reinstall that, but there were various compilation errors in the kernel modules…. uh oh.

It turns out the fix was not that hard, although it required reading up on some Linux kernel changes.  And I don’t know if it’s actually correct – but it was enough to get my Ubuntu instance up and running again.

Here’s what I did:

  • Open the kmods/prl_mod.tar.gz file directly, with Emacs, in order to edit the files within.
  • Make the following modifications:
diff -ru parallels2/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c parallels/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c
--- parallels2/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c 2015-07-09 06:22:30.000000000 -0700
+++ parallels/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c 2015-07-09 06:22:30.000000000 -0700
@@ -650,12 +650,21 @@
 return tgt_path;
+#define compat_follow_link_t char*
 #define compat_follow_link_t void*
 #define compat_follow_link_t int
+static compat_follow_link_t prlfs_follow_link(struct dentry *dentry,
+ void **cookie, struct nameidata *nd)
+ return *cookie = do_read_symlink(dentry);
 static compat_follow_link_t prlfs_follow_link(struct dentry *dentry,
 struct nameidata *nd)
@@ -671,6 +680,7 @@
 return vfs_follow_link(nd, do_read_symlink(dentry));
 static int prlfs_readlink(struct dentry *dentry, char *buf, int buflen)
Binary files parallels2/prl_mod.tar.gz and parallels/prl_mod.tar.gz differ
diff -ru parallels2/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c parallels/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c
--- parallels2/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c 2015-07-09 06:22:30.000000000 -0700
+++ parallels/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c 2015-07-09 06:22:30.000000000 -0700
@@ -21,6 +21,7 @@
 #include <linux/pagemap.h>
 #include <linux/proc_fs.h>
 #include <linux/hash.h>
+#include <linux/vmalloc.h>
 #include <asm/uaccess.h>
 #include <asm/atomic.h>
 #include <asm/io.h>

Boulder, Colorado vs Bend, Oregon

When we started preparing to move to the US, we were almost 100% sure we were going to go to Boulder, Colorado.  It’s a nice town, with a lot of things going for it: beautiful places to go outdoors, a good university, and a booming tech scene.  It’s not too big, and not too small for our tastes.  The climate is variable, but not bad.  It’s bike friendly. We already know several people there, to boot.  I’m pretty picky about where I live, and Boulder seems to check off a lot of things on the list that make a town a good place to live.  Having grown up in Oregon, the idea of going to Colorado, with many new places to explore, was also appealing.

With that in mind, I flew there from Italy to start interviewing at companies, check things out, and get started on finding a place to live.  I was pleasantly surprised at just how friendly, enthusiastic, and positive people were.  I like a lot of things about Italy, but people’s attitudes are often anything but positive.  There are a lot of cool people and cool things happening in tech in Boulder!

The only problem with it is that it’s expensive.  Boulder is one of very few places to have really captured something of the Silicon Valley ecosystem: a good university, lots of people in tech, and venture capital.  That’s a very impressive accomplishment, as tons of places try to rebrand themselves Silicon This or Silicon That without really succeeding.  The down side of this is that Boulder also seems to have inherited the house price trends and problems of San Francisco.

One part of the problem is that there is a significant minority of people in Boulder who seem to not want any change at all.  They want it to remain exactly as it was when they moved there 30 or 40 years ago, and the changes that have already taken place disturb these people.  They tend to be older, wealthier, own houses in town and tend to be vocal and politically active.  To understand the practical implications of this attitude, you have to know something about how Boulder is configured, geographically.

To the west are mountains which no one wants to see covered with new buildings.  On the east, Boulder is ringed by open space preserves, in order to avoid sprawling to the horizon, which is something most people are fairly happy with.  However, the anti-growth crowd also eschews density, despite the town being a very typical western US town with extremely low density.  Lots of wide streets, huge unused front yards, and tons of mostly empty parking lots for automobiles; something you’d see in many places in the US.  I’m more partial to slightly higher density cities, so that it’s easier and more convenient to go somewhere on foot or by bicycle (Boulder does have a pretty good bike lane network).  Here in Padova, our house is a 10 minute walk from both our children’s schools, as well as a grocery store, a pizza place, several cafes, and a few other little shops, and a tram stop that we can use to get downtown fairly quickly.  In any event, Boulder is an attractive location to live, and the burgeoning tech scene is causing highly paid workers to move there.

This is an “iron triangle“: you can’t have A) a desirable place to live, B) no housing growth and C) affordable housing.  You have to pick two.  No one wants A to go away, so Boulder has lost C. People like me, who are in tech, can still afford it, but unless they happened to move there and purchase a house years ago, teachers, nurses, firefighters and people like that likely will soon be priced out of the market entirely and be forced to commute in from nearby towns, increasing traffic and pollution.  This does not strike me as a very egalitarian or “progressive” way to go about things.

One suggestion favored by some in the debate about housing there is that “Boulder needs fewer jobs”, as put forth here: :

“I went to the East Boulder workshop and couldn’t wait to discuss my ideas about slowing down job growth in Boulder and other ideas for the housing issues.”

Living in Italy, where unemployment is high, and pay low, that kind of attitude absolutely dropped my jaw.  You could sell your expensive Boulder house and live pretty well in many places in Italy if you want to come experience what a bad economy does for people.  It also seems to point to a lack of courage to try new things, and a selfishness very much not in keeping with my own progressive inclinations.

In concrete terms, the high prices for housing mean the average house price is nearing $600,000, and rents for fairly standard 3 bedroom/2 bath family homes are somewhere around $2500 – and that’s in fairly average locations, not the nicest bits of town.

Even so, I liked Boulder a lot, and I figured I’d be eligible to vote and make my own voice heard too, when we got there.  Being there in person confirmed a lot of the good things that I’d read, and I was pretty excited to get going with our move.

As time passed after returning to Italy, things didn’t move quite as quickly as I’d hoped on the job front, and the thought of dropping that much money on rent every month “stuck in my craw” as they say. In Italy, the expression is “rodere il fegato” or, literally, to “gnaw at your liver”, although you’d actually translate it as “eat away at you”.  I’m interested in startups of all kinds, but especially the bootstrapped variety, and a place that is so expensive to live in would not be very good for that.  Also, we’d like to set aside some more money for the future.

On a whim, I dropped a note to a company in Bend, Oregon after seeing a “if you are interested in this, you might also consider that” on a job site.  To tell the truth, I hadn’t even thought of Bend.  My recollection of it was, as a child, a very small town that was suffering from the closure of its lumber mills, and then later on as something of a vacation destination and sleepy place to retire.  I didn’t think of it as a place where much was going on in tech or startups were happening.  The people who I spoke with at the company, though, were very enthusiastic, as well as quick and professional in their efforts to put together an offer in short order to compete with the offers in Boulder that had arrived.

I started doing some research on “Bend in 2015” as opposed to the Bend of my memories, and it seems it is starting to acquire the beginnings of a startup ecosystem, as described in this article: .  There isn’t as much as in Boulder, it’s still smaller, and only in the next few years will it get a full-fledged 4 year university, if local NIMBY’s do not get their way ( ).  Still though, it feels like a place that’s a bit hungrier for success, because it’s still something of an underdog.  Housing isn’t cheap in Bend, as it is a nice place to live, with tons of outdoor activities, but it’s still at levels I’d consider “expensive, but reasonable”, with a range of prices available.  The average price is just over half of what it is in Boulder, to put things in perspective.  Critically, there are also some interesting opportunities in biotech for my wife.

So when the company in question made an offer that was very competitive with those in Boulder, everything clicked: a good place to work, good pay, cheaper housing that we might be able to buy into sooner, and still plenty of outdoor opportunities and a dry climate.

That’s why we’re going to Bend, Oregon rather than Boulder, Colorado.

I have some regrets, as there were a lot of nice things in Boulder, and who knows, maybe we’ll go there one day yet, but Bend seems like the right move for now.

Elixir vs Erlang: a question of momentum

I fiddled around with Erlang the first time a number of years ago, and have come back to it off and on ever since.  I’m currently using it professionally, and enjoying the experience a lot.  However, Erlang has always struck me as a language that is not particularly “well-rounded”: the best in the business at certain things, and… not always a lot of fun for others.  String handling for instance.  You pick up Ruby or Python or Java, you know they’ll probably be “ok” for anything you throw at them.  Maybe not great, but you’re likely to at least be able to put something together, even if it’s got some flaws.  Erlang has always felt a bit more hit-and-miss – if you’re not operating in its sweet spot, you may be in for a slog.  Not that it’s an unpleasant language.  I’m rather fond of it, actually.  Just that you might end up having to write things yourself that you’d get as easy to install libraries in other systems.

While not a user of it yet, this is one of the reasons why it’s so interesting to watch the Elixir programming language evolve.  Outside of the other languages besides Java targeting the Java Virtual Machine, it’s not every day that we get to see a new language created for a VM.

It’s impressive how much momentum they seem to have.  Sometimes Erlang’s progress feels a bit like trench warfare, where major battles are fought over a few meters.  Elixir, on the other hand, seems to have broken out and is charging ahead fast.  This is of course something of a generalization, and there is plenty of good stuff happening with Erlang too, just that I get a feeling of Elixir racing ahead.

Being, among other things, a “web guy”, this is particularly noticeable to me, and perhaps less so to people using Erlang for what Erlang traditionally has done well.  Erlang has long had some tools for the web, but they’ve never been as easy to use as, say PHP, and they don’t have half the tools available that something like Ruby on Rails has available to it.  It seems that Elixir is cranking out a lot of stuff that Erlang never really got:

  • A web framework, Phoenix that seems to have a lot of work going into it.  Erlang has several web servers, like Yaws, and the excellent Cowboy, as well as some other bits and pieces that work well.   But Erlang has been lacking in the framework space.  You can criticize frameworks, but good ones do save you some time initially, and then get out of your way when you want to do more.  They’re a great starting point for someone who just wants to do some learning by making something that works, and then iterating.  Trying to put together cowboy, poolboy, a circuit breaker, a database driver, erlydtl, and various and sundry other pieces, for someone not well versed in Erlang is a losing proposition.  Their friend, using Elixir, will at least have something up and running in short order.  Also, if putting together the same bunch of components is something a lot of people do, why not do it once and do a good job at it?
  • A package management system, “hex”.  Erlang has rebar, to download and compile source packages, which works ok, but hex seems to do more.  A package system has always seemed around the corner for Erlang, and the Elixir guys just went out and built one.

Those are the two that stick out the most, but there are all kinds of things going on – here are a few random examples:

  • Ecto database driver, with Postgres as the first database integrated (yay!).
  • Ecto migrations.
  • Porcelain, for working with external processes, where Erlang  is somewhat lacking (you need ).

These are things that are available for Erlang, but I’m just impressed at how quickly the Elixir guys are cranking stuff out, even if at the same time I also wonder if for some things, they’re not a bit too ready to create something new when there’s already a perfectly good solution.

Naturally, Elixir is young, and can afford to experiment more in some ways, and perhaps much of this code is not quite “battle tested”, but it’s still nice to see things moving so quickly.

Maybe it’s just the “grass is greener” feeling, but it seems like Elixir has something which Erlang never really managed to acquire: momentum.   It should be very interesting to see how this plays out over the next few years.

The bicycle: a thinking machine

No, not a machine that thinks, but a machine that helps you think.  Me, at least.

With two kids, a job, side projects, and a lot of things going on, it’s easy to put off fun things like riding my bike, but when I do get out, I realize how good it is for me not just physically, but mentally.

  • I’m finally alone – no coworkers, no kids, no wife.  It’s fun to go with friends too, but those solo rides are where thinking happens.
  • No emails, no popups, no phones ringing, no distractions!
  • It gets the blood flowing to my brain in a way that makes me feel more awake, and thinking quicker.
  • It’s mostly smooth and steady so you get into a rhythm that makes it easy to think: the ideal pace is not too hard, nor too slow.

And of course, if you live in the right place, it’s beautiful:


The Cargo Cult Cofounder

Paul Graham is – rightly – regarded as an authority on startups, having done a successful one himself, and having seen hundreds pass through Y Combinator.

So what he says carries a lot of weight.

One thing he wrote, though, seems to have not been completely understood by many people.

Not having a cofounder is a real problem. A startup is too much for one person to bear. And though we differ from other investors on a lot of questions, we all agree on this. All investors, without exception, are more likely to fund you with a cofounder than without.


Having read this, a lot of people decided they absolutely, positively must find themselves a cofounder at any cost – because it’s what you have to do.  But from everything I’ve seen and read, that’s backwards: the good cofounders are the ones you come by naturally, the ones you already have a lot of history with.  People you already know you can count on, because you have already.

It’s a little tiny bit like having a baby: long term, things usually go better if you have one with someone you’re really in love with and committed to, rather than the first person you come across who is willing and happens to have a complementary set of reproductive organs.

This is, naturally, something of a catch-22, because by the time you get around to deciding to start the company, you probably already need to have that shared history and background with someone for them to make a good cofounder, but if you don’t have anyone like that available, it’s not like you can create that kind of bond overnight.

The “we need a cofounder at all costs” mentality reminds me a bit of “cargo cult programming“, which in turn takes its names from the cargo cults of the South Pacific: who would perform rituals mimicking actions taken by soldiers in the hopes that it would bring more planes and boats full of “cargo”.

As they say in Italian, “meglio soli che male accompagnati”, which means “better to be alone than in bad company”.

Alarming number of spam false positives in Gmail

This morning, I was checking into some unfinished work on my side project, LiberWriter and  noticed that I hadn’t seen several emails.  I checked in Gmail’s spam folder and found around 15 emails that had been dumped there, without anything obviously wrong with them. Several were from customers wondering why they hadn’t heard anything from us.

Worried, I started digging further.  Here’s what I have found so far:

  • An email from the people at work regarding payments to me.  This is important stuff!
  • An important personal email.
  • Emails from JIRA at work.  I get a bunch of these every day; and while they are not high priority, not seeing them is potentially damaging for me and the company.
  • Several emails to the erlang-questions mailing list that were fairly typical and topical.
  • Update: I just found a large (10’s) of emails from the Apache Software Foundation.
  • Update 2: Another personal email, not that important, but not at all spammy.
  • Update 3: Numerous emails from the tcl-core and Postgres ‘general’ mailing lists.

Several of these things were pretty easy to search on, but I am now very worried that there may be many others which I am missing.  I do receive a lot of spam, and in the past, the Gmail team has done an excellent job of filtering things, which is why I have happily recommended it.  Google employs a lot of extremely intelligent and capable people, so the thought that they’re hard at work on the spam problem has always been a good one.

I don’t know what has changed though, but seeing all those emails discarded in spam gave me a bad scare and has got me really worried.  I live in email… and if I can’t trust it, I’m in big trouble.

Ironically, I am a paying customer of Google as of a few days ago, in order to have extra storage space.

Update 4: I got in touch with someone from Google, who said that there was indeed a problem and they are working to push a fix soon.  I’m really glad to hear that!

I Default to Postgres

With a startup or new project of any kind, you’ll face many uncertainties.  One thing I always count on is the Postgres database.

I like to experiment with new things.  I have a particular weakness for programming languages, but over the years, I’ve always come back to Postgres for data storage.  It’s solid, reliable, flexible, and I know I can take it in whichever direction I need.

I think you have to pick your battles – no one can do it all. You need to strike a careful balance between trying out new stuff, so that you don’t miss out on new and improved ways of doing things, and avoiding churn generated by blindly jumping to new technologies.

I’ve always been happy to try out new programming languages or frameworks, but I like to be able to count on my data, so I’ve always come back to Postgres.

You can do a lot with Postgres, and its capabilities slowly but surely expand, year after year.  One of the nice things is that new capabilities are pretty solid when they come out, rather than feeling like rough concepts waiting to be polished.

Postgres also has a great community, of thoughtful, helpful, talented people, which makes dealing with it that much more pleasant.