I built a thing called soonsnap, and various people said that I should write up how and why.
First, what it’s for.
Here’s the use case. You’re there in the pub, Friday night, and there’s a group of people squeezing themselves together behind a table while one of their number takes a photo of them. So you step up, helpful, and say “hey, let me take that, then you can be in it!” and whip your phone from your pocket and snap a picture of them all pulling faces and drinking cocktails.
Great. You’ve got a picture of them. How do you give that picture to the people in it?
Here are the constraints:
- You don’t know these people. This is not a surreptitious excuse to obtain the phone number of the attractive one in the group. So you can’t ask for a phone number, or add them as a Facebook friend
- You’re all in the pub having fun; you’re not at a computer class. You want to get this photo to them as quickly and easily as possible. So if you ask them to do anything complicated to get the photo, such as “install this app”, or “turn on Bluetooth and then tell me your phone’s Bluetooth name”, they’ll just shrug and say “whatever” and ignore you like the sad techie lunatic that you are
- Either you or they might not have an iPhone, so no AirDrop for you
- You’re in the pub. So this is primarily for mobile. Obviously it should work on a big wide screen, but that’s not what it’s aimed at
- Me, the person running the server, does not want to pay for lots of hosting, and people in the pub don’t want photos of them stored forever in someone else’s cloud. Images are not stored on the server; they’re transferred as much as possible device-to-device
Sometimes, the people asking for a photo will hand you a phone to take it with. At that point, you don’t need any technology to assist; take the picture, give the phone back, done. But if they don’t… you need to get that picture to them.
The one huge overriding goal here is complete ease of use. Anything at all which can be construed as a barrier will mean that you’re unsuccessful. “To get the picture, install this app” takes too long and is too annoying. “Turn on Bluetooth” is too annoying. “Turn on Android Beam” is too annoying. This means the solution needs to be on the web, because everybody has that.
But it should feel like an app, because people are accustomed to that and so the sense of familiarity is important. It’s a very simple set of actions: either “take a photo” or “receive a photo”. So the thing I came up with, soonsnap, is this:
- You hit this website and it tells you to pick or take a photo
- It gives you a simple four-letter code and gives you instructions to read out to them: go to this website, enter the four letters of the code
- They do it: it gives them the photo
- You say “there you go”, they say “thank you!”, and another little human interaction is improved with technology without getting in the way
So there are two paths through it: the photo taker, and the photo getter. The taker needs to say “take a photo”, then take the photo, then get a nice clear set of instructions and a code to tell to the getter. The getter needs to get to the website itself, say “receive a photo”, type in the code. That’s it.
To this end, all the thinking went into making soonsnap so it’s really hard to screw the interaction up. Take the codes as an example. They’re four characters — long enough that a code isn’t reasonably guessable, short enough that you can say it to someone else in a crowded bar and they’ll hear you. The code does not repeat any characters. This is done so that when tapping a letter of the code, that letter disappears and can’t be used again — this prevents someone accidentally tapping a letter twice. The characters used for the code could have been all 36 letters and numbers, but it’s actually only 20: 0123456789ACFHNRUWXY. This is so that all letters which sound the same are removed; this stops someone saying “did you say B zero one two or P zero one two?”, especially if you’re shouting over the music in a crowded pub.
And it looks simple but colourful and clear to make it easy to see what’s going on even if your vision’s a bit blurry. I wanted it to be attractive partially because of the aesthetic usability effect, and partially just because, well, things should be pretty. I knew I couldn’t do that, so I talked to Sam Hewitt who put together a great visual design for soonsnap. Thank you, Sam!
It was September of 2009. I answered a couple of gimme trivia questions and dropped my business card into a hat at a Linux conference in Portland, Oregon. A few hours later, I received an email on my Palm Pre. I had just "won" a developer edition HTC Dream -- the Android G1.
While I loved WebOS and my Palm Pre, I couldn't wait to tinker with the G1! It wasn't so much about the hardware in the G1. But I was quite anxious to have a hardware platform where I could experiment with Android. I had, of course, already downloaded the SDK, compiled Android from scratch, and fiddled with it in an emulator. But that experience fell far short of Android running on real hardware. Until the G1. The G1 was the first device to truly showcase the power and potential of the Android operating system.
And with that context, we are delighted to introduce the Orange Box!
The Orange Box
Conceived by Canonical and custom built by TranquilPC, the Orange Box is a 10-node cluster computer, that fits in a suitcase.
Ubuntu, MAAS, Juju, Landscape, OpenStack, Hadoop, CloudFoundry, and more!
The Orange Box provides a spectacular development platform, showcasing in mere minutes the power of hardware provisioning and service orchestration with Ubuntu, MAAS, Juju, and Landscape. OpenStack, Hadoop, CloudFoundry, and hundreds of other workloads deploy in minutes, to real hardware -- not just instances in AWS! It also makes one hell of a Steam server -- there's a charm for that ;-)
OpenStack deployed by Juju, takes merely 6 minutes on an Orange Box
Most developers here certainly recognize the term "SDK", or "Software Development Kit"... You can think of the Orange Box as a "HDK", or "Hardware Development Kit". Pair an Orange Box with MAAS and Juju, and you have yourself a compact cloud. Or a portable big data number cruncher. Or a lightweight cluster computer.
The underside of an Orange Box, with its cover off
Want to get your hands on one?
Drop us a line, and we'd be delighted to hand-deliver an Orange Box to your office, and conduct 2 full days of technical training, covering MAAS, Juju, Landscape, and OpenStack. The box is yours for 2 weeks, as you experiment with the industry leading Ubuntu ecosystem of cloud technologies at your own pace and with your own workloads. We'll show back up, a couple of weeks later, to review what you learned and discuss scaling these tools up, into your own data center, on your own enterprise hardware. (And if you want your very own Orange Box to keep, you can order one from our friends at TranquilPC.)
Manufacturers of the Orange Box
Gear head like me? Interested in the technical specs?
Remember those posts late last year about Intel NUCs? Someone took notice, and we set out to build this ;-)
Each Orange Box chassis contains:
- 10x Intel NUCs
- All 10x Intel NUCs contain
- i5-3427U CPU
- Intel HD Graphics 4000 GPU
- 16GB of DDR3 RAM
- 120GB SSD root disk
- Intel Gigabit ethernet
- D-Link DGS-1100-16 managed gigabit switch with 802.1q VLAN support
- All 10 nodes are internally connected to this gigabit switch
- 100-240V AC/DC power supply
- Adapter supplied for US, UK, and EU plug types
- 19V DC power supplied to each NUC
- 5V DC power supplied to internal network switch
Intel NUC D53427RKE board
The first node, node0, additionally contains:
- An Intel Centrino Advanced-N 6235 WiFi adapter
- A 2TB Western Digital HDD, preloaded with a full Ubuntu archive mirror
- USB and HDMI ports are wired and accessible from the rear of the box
Most planes fly in clouds...this cloud flies in planes!
In aggregate, this micro cluster effectively fields 40 cores, 160GB of RAM, 1.2TB of solid state storage, and is connected over an internal gigabit network fabric. A single fan quietly cools the power supply, while all of the nodes are passively cooled by aluminum heat sinks spanning each side of the chassis. All in a chassis the size of a tower PC!
It fits in a suit case, and can travel anywhere you go.
Pelican iM2875 Storm Case
How are we using them at Canonical?
If you're here at the OpenStack Design Summit in Atlanta, GA, you'll see at least a dozen Orange Boxes, in our booth, on stage during Mark Shuttleworth's keynote, and in our breakout conference rooms.
Canonical sales engineer, Ameet Paranjape,
demonstrating OpenStack on the Orange Box in the Ubuntu booth
at the OpenStack Design Summit in Atlanta, GAWe are also launching an update to our OpenStack Jumpstart program, where we'll deliver and Orange Box and 2 full days of training to your team, and leave you the box while you experiment with OpenStack, MAAS, Juju, Hadoop, and more for 2 weeks. Without disrupting your core network or production data center workloads, prototype your OpenStack experience within a private sandbox environment. You can experiment with various storage alternatives, practice scaling services, destroy and rebuild the environment repeatedly. Safe. Risk free.
This is Cloud, for the Free Man.
It’s been a surprisingly long time since I actually published anything on this blog, for a wide variety of reasons. A large part of why this blog existed was to talk about my involvement with the Ubuntu project, but I’ve drifted gently over the last four to six years from being a regular contributor to Ubuntu to being just another opinionated user of it. Interests change, projects get bigger and move in unexpected directions (Unity, to pick an old scab…) and things gradually drift apart. I’ve been renewing my hard-won Ubuntu membership mostly out of reflex for several years now, and will probably finally let it lapse when I next get that prompting email from Launchpad.
That said, I am going to be using this blog again, mostly to talk about bicycling (I have a really, really awesome and epic European bike touring holiday coming up this month through June & July!) and other things that interest me, but to keep the “what is this doing on Planet Ubuntu?” whingers happy I’ve finally used WordPress’ excellent category-based-RSS feature to (mostly) feed only actual Ubuntu-related material (should I happen to write any…) to Planet Ubuntu. Hopefully that frees me to write more without worrying if it’s “suitable for Planet U”…
If you want to read occasional postings from a bike ride from Vienna, Austria to Nantes, France starting in a couple of weeks and going through to the third week of July, though, please stick around!
Quickly collect information about packages in different Debian and Ubuntu releases.
apt-venv creates a sort of virtual environments in $HOME/.local/share/apt-venv (one for each release), able to exec bash sessions where apt thinks to be in another distro/release. In these sessions a $APT_VENV variable is set and points out the release name in use.
If you want to customize environment you can modify files in:$HOME/.config/apt-venv/$release
apt-venv is already available in Debian and Ubuntu utopic unicorn.Use case
Show which version of some package is in Debian and Ubuntu, simply:# init apt database for releases for release in unstable stable trusty lucid ; do apt-venv $release -u done # do what you want for release in unstable stable trusty lucid ; do apt-venv $release -c "apt-cache madison base-files | grep Source | tail -1" done
If you do not specify -c option you will entry an interactive shell.Usage $ apt-venv -h usage: apt-venv [-h] [-D DEBUG] [-v] [-d] [-c COMMAND] [-l] [release] positional arguments: release the debian/ubuntu release optional arguments: -h, --help show this help message and exit -D DEBUG, --debug DEBUG set debug level -v, --version show program's version number and exit -c COMMAND, --command COMMAND exec the given command instead of entry the interactive shell -d, --delete delete venv for release -l, --list list all venv installed in your system -u, --update update the apt indexes