I'm a bit late but rather than VMs I'd recommend Docker with Kitematic.

From the UI you can search for images and in a couple of clicks have the latest and greatest pulled and running locally. Operating systems, databases, programming environments, forums, bug trackers, infrastructure, CI, you name it, there are images for it.

There's a video with a brief introduction here. At the nine minute mark he demonstrates mapping drives, which will give you what you need from a playground point of view.


I think Social Bookmarking services are a niche trend at best. They were very popular in the early-mid 2000's but the need for them was erroded from multiple angles.

Chrome came along with its excellent browser syncing, which in turn forced Firefox to up its game and follow suit. This negated the 'access my bookmarks from anywhere' angle, as once you're signed into your browser, you have full access to not only your bookmarks but also your logins, passwords, sesssions etc.

Secondly, sites like Digg, Reddit and even Pinterest filled the 'sharing cool stuff' niche.

Here's the trend for Delicious over the last 13 or so years.




Here's how I'd do it (and have done it for years). It's the canonical, accepted answer for Linux too.

The SSH program has support for 'shortcuts' built in, you simply need to add the hostnames (or aliases) in your ~/.ssh/config file.

So, in my config file, if I have the following entry:

# Github
host github
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_work

Then, on the command line I simply type ssh git and hit tab a couple of times, and all of the entries that start with git automatically appear for selection/autocompletion:


Note that in the config file I'm specifying which private key (IdentityFile) to use for that host, SSH will use this whenever connecting to this specified host. Previous commenters have already gone through how to set up key pairs; this is definitely the best and most secure way of connecting to remote machines. Ideally you should turn off password based login and rely entirely on a key pair.

If you really want desktop shortcusts, just create a bash script (and make sure it's executable) with the .command suffix. However, with nice tab completion on the command line it's quicker and easier (imho) to just use the built-in command.

Edit: here are Digital Ocean's instructions for setting up SSH keys. They are very thorough and generic enough to use anywhere.

Votes + Comments

There are plenty of esoteric programming languages, some of which have been around for a long time.

I'm not sure actually teaching students syntax is too important, but demonstrating that there are many languages each with their own strengths and weaknesses is. Readability and succinctness are definitely advantages.

Votes + Comments
Great link that explains what I was trying to say perfectly =

Has anyone tried Mastodon yet? For those who don't know it's a federated, distributed and (currently) technology-orientated social network (well, rather a group of interoperable social networks) that's fully open source and ad-free. I've been impressed so far but as with every new network, whether it flies or not will depend on how many people join, contribute and keep the ball rolling.


I am not a lawyer, but I believe that if you 'port' software from one language to another, you're creating a derivative work and the original licence applies. However (from Wikipedia):

The code base of Netlib was written at a time when computer software was not yet considered merchandise. Therefore, no license terms or terms of use are stated for many programs. Before the Berne Convention Implementation Act of 1988 (and the earlier Copyright Act of 1976) works without an explicit copyright notice were public domain software. Also, most of the Netlib code is work of US government employees and therefore in the public domain.[3][4] While several packages therefore don't have explicit waiver/anti-copyright statements, for instance the SLATEC package has an explicit statement.

As you have created the ports of libraries that are in the public domain, I'd suggest that a Creative Commons licence makes most sense. I noticed on several netlib pages that attribution is requested, so CC-BY might be most suitable (crediting both the original authors and you), or CC-0 if that's not required.


Yes, that sounds like a good use case and it's quite easy to set up a reasonable demo in Neo4J.

    (Frank:Member {name:'Frank'}),
    (Julian:Member {name: 'Julian'}),
    (Amanda:Member {name: 'Amanda'}),
    (Claire:Member:Admin {name: 'Claire'}),
    (Susie:Member {name: 'Susie'}),
    (Dolly:Member:Admin {name: 'Dolly'}),


Which results in this graph:

neo4j graph

Simple queries are straightforward, I'm no expert though and combining multiple conditions baffles me.

match (n:Member)-[r:HAS_CHATTED_TO]-(m) where n.name='Frank' return n as Frank,r,m


| Frank                  | r                      | m                       |
| Node[25]{name:"Frank"} | :HAS_CHATTED_TO[24] {} | Node[27]{name:"Amanda"} |
| Node[25]{name:"Frank"} | :HAS_CHATTED_TO[25] {} | Node[28]{name:"Claire"} |
2 rows
17 ms

Compiler CYPHER 3.1

Planner COST


| Operator         | Estimated Rows | Rows | DB Hits | Variables        | Other                      |
| +ProduceResults  |              1 |    2 |       0 | Frank, m, r      | Frank, r, m                |
| |                +----------------+------+---------+------------------+----------------------------+
| +Projection      |              1 |    2 |       0 | Frank -- m, n, r | {Frank : n, r : r, m : m}  |
| |                +----------------+------+---------+------------------+----------------------------+
| +Expand(All)     |              1 |    2 |       3 | m, r -- n        | (n)-[r:HAS_CHATTED_TO]-(m) |
| |                +----------------+------+---------+------------------+----------------------------+
| +Filter          |              1 |    1 |       6 | n                | n.name == {  AUTOSTRING0}  |
| |                +----------------+------+---------+------------------+----------------------------+
| +NodeByLabelScan |              6 |    6 |       7 | n                | :Member                    |

Total database accesses: 16
Attachments Screen_Shot_2017-03-07_at_19_08_23.png 114.89 KB

A graph database alone isn't the right choice for a chat application. A message would be represented as an edge between two nodes (people) and too many edges will hurt performance.

Storing the actual social network portion of a chat app in one makes a lot of sense, though. It's the perfect use case for a graph database.

Something like OrientDB might make more sense. There's even a chat program in the use cases section of the documentation.


If you want to play 3d games or develop with Cuda/OpenCL, very. For browsing the web and 'normal' development, not so much.

Neither my MBP and XPS have one, both are lightweight and quiet, and both cope fine with a big external monitor.

Also, if you plan on running Linux on your laptop, drivers become an issue. Especially if your machine supports switching between onboard and GPU modes.


@pty: Good try, but it was a refurb (and I wanted new, the two year warranty at John Lewis is always hard to ignore), there was only one of them (I needed two) and they don't have any stock :-)

Haha yeah, it was such a good deal it was snapped up in hours

I'd have a higher-specced refurb over a brand new lower-spec machine every day of the week. Granted the 2 year warranty from John Lewis is a nice extra (they sell refurbs with the 2 year warranty too, by the way!)