Notification overload

Scenario:

Someone sends me a tweet, email, iMessage, or I get a calendar alert

Result:

  • My Macbook alerts me
  • My iPad alerts me
  • My iPhone alerts me
  • And now my wrist vibrates as the alert is forwarded from my iPhone to my Pebble.

Aaaghhh.

It would be great if Apple could solve the problem of sending notifications to whichever device is most relevant to me at the time - here are my suggestions:

  • If I'm sat casually browsing on my Macbook then alert me on there (but also send the notifications to my iPhone incase I suddenly get up and go).
  • If I'm working on my Macbook then send all notifications to my iPhone.
  • If I'm actively using my iPhone send all notifications there.
  • If I'm walking and my iPhone is sleeping in my pocket then buzz my Pebble.

A week with the Pebble

Just over a week ago my Pebble smartwatch arrived and I wrote up my initial thoughts. Having used it for a week now I thought I'd write up some further observations.

I said that my initial reason for buying the Pebble was so I could use it as actual watch and I'm slowly getting used to doing so though out of force of habit I still find myself reaching for my phone sometimes but I assume over time this will change.

One aspect that I hadn't thought about originally (but pointed out by Mother) was that of safety; wandering around late at night in areas of London I'm not as familiar with I do feel more comfortable quickly changing song with a few pushes on my wrist rather than pulling my phone out of my pocket and showing it off to anyone watching. I've already developed some muscle memory to quickly change song without looking at my wrist.

I've also developed some muscle memory when it comes to knowing where the buttons are and how much force to exert with my thumb in order to register a change of state in the menu. I still think you need to push a little too hard but I don't think a touch screen is necessarily a better solution.

I've now become used to having something on my wrist (this is the first watch I've owned) though I may change the strap at some point so I can have custom hole placements as I'm finding the two holes on the strap the Pebble comes with that I use the most are either ever so slightly too lose and so the watch slips or ever so slightly too tight so I'm conscious of that the watch is there.

The word Pebble is now part of my vernacular and everyone else around me because I keep yammering on about it. Therefore I've pretty much settled on not referring to it as a watch and just calling it "my Pebble".

I've been running beta versions of the 2.0 firmware and the better iOS app and there are some nice goodies that have been added:

  • Apps; I've got apps for getting bus, train and tube time. All immensely useful.
  • I've been trying the [7 minute workout exercise methodology] and there is an app for that.
  • I bought an app called Smartwatch Pro on the iOS AppStore which works as a "companion" to it's Pebble app. With this I can access my calendars, tweets, reminders, setup and execute custom HTTP requests (useful if you've got smart light bulbs for example) and also make my phone make a loud noise if I can't find it in my flat (I'm disgusted at myself for how much I've already used this - normally I have to eat into my Skype credit to call my mobile to find it).

Beta 6 of the firmware is still a bit buggy but I'm sure they'll iron out the kinks shortly.

All in all I'm still very happy with the Pebble, for the £90 or so it cost me it's provided excellent value for money and a definite place in my digital life.

Introducing OAuthello, a book about OAuth

https://s3.amazonaws.com/titlepages.leanpub.com/oauthello-a-book-about-oauth/large?1389476512

So tonight I announced on Twitter that I'm writing a book - OAuthello, a book about OAuth.

Why?

  1. I've been helping Phil Sturgeon edit his book for the past few weeks and I've really enjoyed the process.
  2. It's a personal challenge - I genuinely care about this subject and it motivates me.
  3. I've written several 5000+ word reports before in my old job so I know I'm capable of putting words on paper.
  4. Everyone else in the PHP community is writing a book so I may as well join in.

So here's my rough plan:

  1. Publicly talk about the book so people will badger me about it and judge me if I don't finish it.
  2. Get a few chapters done before I open the landing page up for sales.
  3. Finish the book by April/May.
  4. Talk about the whole process at Croydon Tech City once it's published.

Here goes!

6 hours with the Pebble smartwatch

My new Pebble watch

My Pebble watch arrived today. Here are my initial thoughts having worn and used it for the last 6 hours.

  • My main reason for buying a watch was for telling the time (and because I can't rely on having my phone on/with me at music festivals). The fact that the Pebble does other stuff is a bonus.
  • This is the first watch I've ever worn and having something permanently attached to my wrist feels very alien to me.
  • I wish I could remove some of the default watch faces and just keep the "text watch" face; if you hit either the top or bottom buttons on the right-hand side accidentally the watch face changes and I don't like the look of them.
  • I don't know whether or not to call it a watch or a Pebble when referring to it.
  • At first I was wearing the Pebble watch on my dominant (right) hand and I was finding it a bit awkward to use. I've since moved it to my left hand and found it much more comfortable to press the buttons, although I seemingly have to turn my wrist more towards in order to look at the time.
  • I think the buttons are too resistant to being pushed and flipping through the menus can be a bit awkward.
  • I wear a long overcoat when out and about and it annoys me having to get my iPhone out of my pocket to look at the time or change the song that is playing. I can now leave my phone in my pocket and tell the time and change the music all at the push of a button on my wrist. It's the little things in life...
  • I love having iOS notifications pushed to my wrist however I keep accidentally pushing the middle button on the right-hand side and dismissing them all before I've read them; I wish there was a way to view past notifications.
  • I now want more contextual information available immediately to me on my wrist - e.g. if I'm within a few metres of a bus stop, I want it to tell me which buses are coming next and when? I'm going to take a look at the Pebble SDK to see if I could perhaps make an app to do this.
  • There doesn't seem to be a way of telling how drained the battery is which is strange.

I'll report back in a week or so with some updates.

Using Vagrant and Ansible for distributing educational course virtual machines

Tony Hirst wrote an article on his blog recently that I'd somehow missed in my RSS reader but in any case I'd like to quickly respond to it.

In "Cursory Thoughts on Virtual Machines in Distance Education Courses" Tony discuses using virtual machines in courses to help distribute software and operating systems to students who increasingly more and more are bringing in very different devices.

This is a common problem is development teams as well, in my current workplace two of us develop on OSX, another uses Ubuntu and our designer uses Windows; therefore it is important for us to have a development environment that works for all of us regardless of the operating system we use.

At the very end of the article Tony mentions using Vagrant which is a small piece of software to help "create and configure lightweight, reproducible, and portable development environments". Essentially you write a small document in Ruby called a Vagrantfile to describe a virtual machine and then Vagrant will download, configure and spin-up that virtual machine in Virtualbox or VMWare or other Virtualisation software.

A Vagrantfile looks like this:

Vagrant.configure("2") do |config|

    config.vm.box = "lucid32"
    config.vm.box_url = "http://files.vagrantup.com/lucid32.box"
    config.vm.network "forwarded_port", guest: 80, host: 8080
    config.vm.network "private_network", ip: "192.168.100.10"

    config.vm.provider "virtualbox" do |v|
      v.customize ["modifyvm", :id, "--memory", "512"]
    end

end

Inside the folder that has the Vagrantfile you just type vagrant up and Vagrant will do the following (based on the above config):

  1. Download a Vagrant box from http://files.vagrantup.com/lucid32.box (a Vagrant box is essentially a gzipped .img file with it's own Vagrantfile describing the box).
  2. Save the downloaded box with the name "lucid32" - if in another Vagrantfile you reference "lucid32" it will use the box that has already been downloaded.
  3. Configure the virtual machine to have 512mb of memory, port forward the guest port 80 to the host's port 8080 and then give it a private IP address of 192.168.100.10.
  4. Boot the virtual machine.

Tony also discusses pre-configuring the virtual machines before distributing them because some students won't be as au fait with installing software on Linux machines. This is certainly one option but I think in the long run academics would find it tedious trying to create different virtual machines with slight changes and having to store different images for each course.

A better option would be to use another devops tool called Ansible which "is a powerful automation engine that makes systems and apps simple to deploy".

Ansible uses YAML files to describe a list of tasks that should be executed on a machine. For example if you wanted to do the following:

  1. Update apt
  2. Install PHP + Apache
  3. Open port 80 in the firewall
  4. Start Apache

You could express it like this:

---

- hosts: webserver
  user: vagrant
  sudo: True

- name: update apt
  command: /usr/bin/apt-get update

- name: install web server packages
  action: apt pkg=$item state=installed
  with_items:
    - httpd
    - php

- name: allow port 80
  command: /usr/sbin/ufw allow http

- name: flush firewall
  command: /usr/sbin/ufw reload

This YAML file (called a "playbook" in Ansible terminology) can be automatically executed by Vagrant to "provision" the virtual machine.

Ansible playbooks can include other playbooks so an academic can have a playbook of common tasks and then have individual playbooks with slight variations for different courses.

Together the playbooks and the Vagrantfile can be distributed to the students and assuming they've installed Vagrant and Virtualbox for their OS they can be up and running with identical environments in just a few minutes.

At my workplace we use the same Ansible playbooks for both local development and provisioning our staging and production servers - together with similarly configured Vagrant boxes and VMWare vCloud (our cloud environment) images we've almost entirely removed the old problem of "but it works on my machine".

As well as teaching students a version control system and how to use the command line I think it is vital that all computer science students finish their courses with familiarity of devops tools like Virtualbox, Vagrant, Ansible, and even tools like Veewee which help build custom Vagrant boxes.