<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
    <title>Alex Muller</title>
    <link href="http://alex.mullr.net/blog/feed/" rel="self"/>
    <link href="http://alex.mullr.net/blog/"/>
    <updated>2018-12-27T14:14:02+00:00</updated>
    <id>http://alex.mullr.net/blog/</id>
    <author>
        <name>Alex Muller</name>
        <email>alex@mullr.net</email>
    </author>

    
    <entry>
        <title>Using Lambda to do bits and pieces</title>
        <link href="http://alex.mullr.net/blog/2017/09/using-lambda-to-do-bits-and-pieces/"/>
        <updated>2017-09-20T11:30:00+01:00</updated>
        <id>http://alex.mullr.net/blog/2017/09/using-lambda-to-do-bits-and-pieces</id>
        <content type="html">&lt;p&gt;I hate the idea of vendor lock-in, but I&amp;rsquo;ve found myself using AWS Lambda more and more often this year. And
while neither of these uses are going to change the world, it&amp;rsquo;s lovely to have an easy, maintenance-free way
of running code periodically.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m lucky that both of these are just little side projects which I don&amp;rsquo;t need to care too much about, so
I haven&amp;rsquo;t had to think about setting up deployments for a team or monitoring or any of that supporting stuff.
The web interface works well and is quick enough to get set up with.&lt;/p&gt;

&lt;p&gt;The Lambda free tier is ludicrously generous for personal use, with 1 million invocations
and about 74 hours of compute time per month (at the maximum 1.5GB memory). If you&amp;rsquo;re cynical then I guess
they do that precisely so that people use it for things like this and then bring it to work.&lt;/p&gt;

&lt;h2&gt;Password protected podcast feeds&lt;/h2&gt;

&lt;p&gt;Earlier this year I switched to &lt;a href=&quot;https://overcast.fm/&quot;&gt;Overcast&lt;/a&gt; because my old podcast client stopped being updated.
Overcast is great in lots of ways but it doesn&amp;rsquo;t support XML feeds behind a paywall, which was
unfortunate because I&amp;rsquo;d just started paying for a subscription to LBC&amp;rsquo;s password-protected full show podcasts.&lt;/p&gt;

&lt;p&gt;This is a great use-case for Lambda. I wanted a bit of code which would run periodically, access the XML
feed with my password and put it somewhere secret that didn&amp;rsquo;t have a password.&lt;/p&gt;

&lt;p&gt;So I wrote a script that does exactly that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use my username and password to get a session cookie from the LBC podcast service&lt;/li&gt;
&lt;li&gt;Download the XML feed I&amp;rsquo;m interested in&lt;/li&gt;
&lt;li&gt;Put it in an S3 bucket with a filename that only me and my podcast client know&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;CloudWatch Events schedules this script and runs it every 15 minutes for me and it&amp;rsquo;s worked flawlessly
for the last 5 months.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/alexmuller/lambda-proxy-lbc-podcasts&quot;&gt;code&amp;rsquo;s available on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Renaming Strava activities&lt;/h2&gt;

&lt;p&gt;This one&amp;rsquo;s a little more nerdy and a little less necessary. I cycle to work and use &lt;a href=&quot;https://www.strava.com/&quot;&gt;Strava&lt;/a&gt;
to see how far I&amp;rsquo;ve ridden. But I like things being named properly and I&amp;rsquo;d rather not have a load of
&amp;ldquo;Morning Ride&amp;rdquo; and &amp;ldquo;Evening Ride&amp;rdquo; every day on my profile.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;d been renaming those things in the Strava interface and it took me too long to
realise that it was a huge waste of my time and I should get a computer to do it for me. So
I wrote a little script:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Get the latest activity from my Strava profile&lt;/li&gt;
&lt;li&gt;Check if it has a boring name like &amp;ldquo;Morning Ride&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Use the coordinates of the start and end to figure out if it&amp;rsquo;s a commute&lt;/li&gt;
&lt;li&gt;Rename it&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;As before CloudWatch Events makes this super easy to schedule with an expression like &lt;code&gt;rate(1 hour)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Again, the &lt;a href=&quot;https://github.com/alexmuller/lambda-strava-commute-namer&quot;&gt;code is on GitHub&lt;/a&gt; if you want to see it. As this was the second time I&amp;rsquo;ve
used Lambda I had a quick look around for something that might make Lambda easier to develop against
and settled on &lt;a href=&quot;https://pypi.org/project/python-lambda/&quot;&gt;python-lambda&lt;/a&gt; for my simple needs.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Pensions: the basics</title>
        <link href="http://alex.mullr.net/blog/2015/02/pensions-the-basics/"/>
        <updated>2015-02-16T20:30:00+00:00</updated>
        <id>http://alex.mullr.net/blog/2015/02/pensions-the-basics</id>
        <content type="html">&lt;p&gt;Over the last couple of weeks our chatroom at work has revealed that nobody
completely understands pensions. I find financial planning quite interesting, so this
blog post is my attempt to gather what I think I know about the Civil Service pension
scheme &lt;a href=&quot;http://www.civilservicepensionscheme.org.uk/members/nuvos/&quot;&gt;nuvos&lt;/a&gt; and hopefully be corrected by people who know more than me.&lt;/p&gt;

&lt;p&gt;It should be pretty obvious from the fact this is written on my personal blog
that it is absolutely not affiliated with the Civil Service and nobody there
has reviewed it.&lt;/p&gt;

&lt;h2&gt;Defined contribution vs defined benefit&lt;/h2&gt;

&lt;p&gt;The first thing I had to get my head around was that there are at least two different
types of pension scheme around.&lt;/p&gt;

&lt;p&gt;The one I&amp;rsquo;m most used to is defined contribution. This is pretty straightforward because
it&amp;rsquo;s how you expect these kind of things to work intuitively:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each month you and your employer both purchase &amp;ldquo;shares&amp;rdquo; on your behalf&lt;/li&gt;
&lt;li&gt;These shares are managed by a pension provider&lt;/li&gt;
&lt;li&gt;Over time the value of the shares goes up and down&lt;/li&gt;
&lt;li&gt;As you get closer to retirement, you&amp;rsquo;d generally expect your pension provider
to balance your shares so that your pension becomes less volatile (ie more cash than stock),
so that your entire pension doesn&amp;rsquo;t disappear just before you retire&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;In the &lt;a href=&quot;https://en.wikipedia.org/wiki/Double-entry_bookkeeping_system&quot;&gt;double-entry bookkeeping&lt;/a&gt; software I use, defined contribution is simple:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Account: Income

                      Account                      Credit    Debit
August salary
    Gross salary      Income                       1000
    Net salary        Assets &amp;gt; Current account               600
    Tax               Expenses &amp;gt; Tax                         200
    Pension           Assets &amp;gt; Pension                       200
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This means that my pension account has a balance which I can monitor over time.&lt;/p&gt;

&lt;p&gt;Defined benefit schemes, on the other hand, are a bit weird.&lt;/p&gt;

&lt;p&gt;As the name implies, they define the benefit you&amp;rsquo;ll receive when you retire and then the pension
provider adjusts your contributions so that they have enough money in the bank.&lt;/p&gt;

&lt;p&gt;Defined benefit plans confuse me because &lt;a href=&quot;https://money.stackexchange.com/questions/44463/double-entry-bookkeeping-for-a-defined-benefit-pension-scheme&quot;&gt;there doesn&amp;rsquo;t seem to be a way to reconcile the amount
you put in with the amount you get out&lt;/a&gt;. It all looks a bit arbitrary.&lt;/p&gt;

&lt;p&gt;In double-entry bookkeeping, I&amp;rsquo;ve set it up like this because I don&amp;rsquo;t know what else to do:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Account: Income

                      Account                      Credit    Debit
August salary
    Gross salary      Income                       1000
    Net salary        Assets &amp;gt; Current account               600
    Tax               Expenses &amp;gt; Tax                         200
    Pension           Expenses &amp;gt; Pension                     200
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Instead of storing my pension contribution as an asset and being able to track its change in value,
I write it off as an expense.&lt;/p&gt;

&lt;h2&gt;nuvos&lt;/h2&gt;

&lt;p&gt;nuvos is the default Civil Service pension at the moment. It&amp;rsquo;s a defined benefit scheme that comes
with a 36 page instruction book which is an impenetrable FAQ.&lt;/p&gt;

&lt;p&gt;The interesting parts can be distilled into a few bullet points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You pay a &lt;a href=&quot;http://www.civilservicepensionscheme.org.uk/members/contribution-rates/&quot;&gt;contribution rate&lt;/a&gt; that depends on your &amp;ldquo;pensionable earnings&amp;rdquo;, which is
pretty much the same thing as your salary&lt;/li&gt;
&lt;li&gt;Each year that you work, your &amp;ldquo;defined benefit&amp;rdquo; increases by 2.3% of your pensionable earnings
from that year&lt;/li&gt;
&lt;li&gt;The benefit from previous years that you&amp;rsquo;ve built up increases in line with the cost of living&lt;/li&gt;
&lt;li&gt;At pension age (65ish) you end up with a number which is the amount of money you&amp;rsquo;ll receive
every year until you die (see, pensions are fun)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;This is changing slightly, but not massively, in April with the introduction
of the new pension scheme &amp;ldquo;alpha&amp;rdquo;.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>GitHub Pages that don't depend on JavaScript</title>
        <link href="http://alex.mullr.net/blog/2014/11/github-pages-without-javascript/"/>
        <updated>2014-11-29T13:30:00+00:00</updated>
        <id>http://alex.mullr.net/blog/2014/11/github-pages-without-javascript</id>
        <content type="html">&lt;p&gt;There&amp;rsquo;s a blog post that explains &lt;a href=&quot;http://www.carsonshold.com/2014/05/github-metadata-with-jekyll-and-javascript/&quot;&gt;how to use GitHub Pages metadata
to display a list of repositories&lt;/a&gt;. It&amp;rsquo;s great
because it&amp;rsquo;s one of the only uses of &lt;code&gt;site.github.public_repositories&lt;/code&gt;
that I can find online. But part way through it says:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;I needed to get the metadata into JavaScript&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Both the &lt;a href=&quot;https://shopify.github.io/&quot;&gt;Shopify&lt;/a&gt; and &lt;a href=&quot;https://yahoo.github.io/&quot;&gt;Yahoo!&lt;/a&gt; GitHub
Pages instances use that technique, and as a result if you load those
pages without JavaScript you&amp;rsquo;ll get something that looks a bit broken.&lt;/p&gt;

&lt;p&gt;We&amp;rsquo;re &lt;a href=&quot;https://github.com/alphagov/alphagov.github.io/blob/e0099c76ab506f9b2720c2370976d26604a1b94f/index.html#L54-64&quot;&gt;using the same metadata for GOV.UK&amp;rsquo;s GitHub Pages&lt;/a&gt;.
I&amp;rsquo;d bet our repository hasn&amp;rsquo;t had as much work go into it as those other two, but
our text is right in the HTML, so the page works if the JavaScript fails
to execute.&lt;/p&gt;

&lt;p&gt;At the Government Digital Service we try and build things that are &lt;a href=&quot;https://www.gov.uk/service-manual/making-software/progressive-enhancement&quot;&gt;as resilient
to failure as possible&lt;/a&gt;. &lt;a href=&quot;https://alphagov.github.io/&quot;&gt;alphagov.github.io&lt;/a&gt;
is quite possibly the least important thing we do, but it feels nice to create
web things in the best way that we can all the time.&lt;/p&gt;

&lt;p&gt;GDS has jobs currently available for developers and junior developers, so if
this sounds like the way you work &lt;a href=&quot;https://gds.blog.gov.uk/jobs/#developer&quot;&gt;make sure you apply&lt;/a&gt;.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Performance Platform dashboard admin</title>
        <link href="http://alex.mullr.net/blog/2014/06/performance-platform-dashboard-admin/"/>
        <updated>2014-06-06T19:30:00+01:00</updated>
        <id>http://alex.mullr.net/blog/2014/06/performance-platform-dashboard-admin</id>
        <content type="html">&lt;p&gt;After releasing &lt;a href=&quot;https://www.gov.uk/performance/services&quot;&gt;about a hundred dashboards&lt;/a&gt; in the last couple of weeks,
members of the product team I&amp;rsquo;m part of at the Government Digital Service each spent a
week prototyping standalone projects that we thought would be of use to the Performance Platform.
&lt;a href=&quot;https://twitter.com/tombooth&quot;&gt;Tom&lt;/a&gt; and I created a basic interface for administering dashboards.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://s3.amazonaws.com/alexmuller/static/blog/2014-06-01-perfplat-dashboard-admin-sketch.jpg&quot; alt=&quot;A pen and paper sketch of the list interface&quot; /&gt;&lt;/p&gt;

&lt;p&gt;We only had a week so we didn&amp;rsquo;t want to spend time thinking about where it would
be hosted or how authentication could work, so we created a &lt;a href=&quot;http://nodejs.org/&quot;&gt;Node.js&lt;/a&gt; app
that non-technical members of our team can download and run locally.&lt;/p&gt;

&lt;p&gt;We ended up with an application that uses a GitHub repository to store our
configuration and does file modification, committing, pushing, pulling and deploying
through a browser. It&amp;rsquo;s hacky but it does exactly what we need it to do. SSH handles
authentication in the background and GitHub provides us with a lovely interface
for a history of who, what and when things changed.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://s3.amazonaws.com/alexmuller/static/blog/2014-05-31-perfplat-dashboard-admin.png&quot; alt=&quot;A screenshot of the list interface&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Hopefully this marks the end of &lt;a href=&quot;https://twitter.com/imattharrington&quot;&gt;Matt&lt;/a&gt; having to write out text changes into
Pivotal Tracker stories just to wait for a developer to copy and paste them into an
editor and push a commit.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m really happy with what we achieved in 5 days. The &lt;a href=&quot;https://github.com/alphagov/performanceplatform-dashboard-admin&quot;&gt;Performance Platform dashboard admin&lt;/a&gt;
app is on GitHub, as is &lt;a href=&quot;https://github.com/alphagov/spotlight-config&quot;&gt;the config repository&lt;/a&gt;. I&amp;rsquo;m looking forward to approaching
this project slowly and carefully now that we&amp;rsquo;ve got a good idea of the direction it should
go in.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Starting at the Government Digital Service</title>
        <link href="http://alex.mullr.net/blog/2013/10/starting-at-gds/"/>
        <updated>2013-10-27T12:30:00+00:00</updated>
        <id>http://alex.mullr.net/blog/2013/10/starting-at-gds</id>
        <content type="html">&lt;p&gt;Aside from the fact that the day-to-day work is interesting and challenging and the
people are fantastic, there are a few things that particularly stick out to me as
brilliant about &lt;a href=&quot;https://gds.blog.gov.uk/&quot;&gt;GDS&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Second line support&lt;/h2&gt;

&lt;p&gt;This seems quite polarising for developers, but I love it. Each week a different
developer pairs with somebody from the operations team to spend a week improving
infrastructure and responding to any production alerts and issues. I finished my
first rotation on second line as part of the operations team about a month ago.&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s such a great learning experience. You learn a load about the GOV.UK infrastructure,
as well as an awful lot about hosting, monitoring and deployment. It&amp;rsquo;s also a great way
to work with people outside your normal team on a short-term basis.&lt;/p&gt;

&lt;h2&gt;It&amp;rsquo;s all out in the open&lt;/h2&gt;

&lt;p&gt;Almost every line of code that technically can be is hosted at &lt;a href=&quot;https://www.github.com/alphagov&quot;&gt;www.github.com/alphagov&lt;/a&gt;
(obviously the passwords, keys and other fun stuff is elsewhere). British taxes pay for the
lights to stay on, so it&amp;rsquo;s only right that the public can see what GDS is up to as much as
possible. As with everything on this site, that&amp;rsquo;s my opinion and it may or may not be shared
by GDS. You&amp;rsquo;d have to ask someone who&amp;rsquo;s allowed to speak on behalf of the Cabinet Office.&lt;/p&gt;

&lt;p&gt;In my team (I work on the &lt;a href=&quot;https://www.gov.uk/performance&quot;&gt;Performance Platform&lt;/a&gt;), we&amp;rsquo;re making data
about transactional services available for service managers (the people who run, for example,
the passport application process as part of HM Passport Office). But it&amp;rsquo;s a nice side effect
that the data is there, online, for everyone to see. The same thought process as for the code
applies: you&amp;rsquo;re paying for those transactions to take place. You should be able to see how
they&amp;rsquo;re performing.&lt;/p&gt;

&lt;p&gt;Informally we work off the idea that for every page we build, you should be able to pull the
data out yourself. For the &lt;a href=&quot;https://www.gov.uk/performance/licensing&quot;&gt;Licensing &amp;ldquo;Form submissions&amp;rdquo; graph&lt;/a&gt;,
&lt;a href=&quot;https://www.performance.service.gov.uk/data/licensing/application?period=week&amp;amp;end_at=2013-08-19T00%3A00%3A00%2B00%3A00&amp;amp;start_at=2013-06-17T00%3A00%3A00%2B00%3A00&quot;&gt;the JSON&amp;rsquo;s available&lt;/a&gt;. It&amp;rsquo;s not documented (yet), but you can use developer
tools in the browser to view the AJAX requests.&lt;/p&gt;

&lt;p&gt;Once more: all my opinion, possibly (but definitely not necessarily) shared by GDS. I might
turn up to work on Monday and find out it&amp;rsquo;s all changing.&lt;/p&gt;

&lt;h2&gt;Fixing broken windows&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://twitter.com/jabley&quot;&gt;James&lt;/a&gt; &lt;a href=&quot;https://github.com/alphagov/release/pull/32#issuecomment-26136206&quot;&gt;mentioned&lt;/a&gt; the &lt;a href=&quot;https://en.wikipedia.org/wiki/Broken_windows_theory&quot;&gt;broken windows theory&lt;/a&gt;
after I made a change to one of our internal apps recently. When I
&lt;a href=&quot;/blog/2013/04/internal-tools-and-infrastructure/&quot;&gt;wrote about a company&amp;rsquo;s tools in April&lt;/a&gt;, that theory was exactly what I
was getting at - I just didn&amp;rsquo;t know it had a name. If you make it easy to fix problems, as
GDS does by giving all staff the ability to push changes to almost every repository, the
state of the code and the community constantly improves. I love tinkering with little bits
and pieces that keep things running along smoothly, and internal apps are a great place to do that.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://www.gov.uk/service-manual&quot;&gt;Service Manual&lt;/a&gt; is another great example. Because it&amp;rsquo;s so easy to
fix typos and reword badly written sentences, I&amp;rsquo;ve
&lt;a href=&quot;https://github.com/alphagov/government-service-design-manual/commits?author=alexmuller&quot;&gt;committed to it far more than I would have expected&lt;/a&gt;. And that&amp;rsquo;s
mostly because I can do it in a couple of minutes when I&amp;rsquo;m bored. And even better than that,
making the repository public means that a load of people from outside government have submitted fixes too.&lt;/p&gt;

&lt;p&gt;GDS isn&amp;rsquo;t perfect by any means, but the good outweighs the not-so-good by an absolutely huge margin.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://www.gov.uk/design-principles#tenth&quot;&gt;tenth design principle&lt;/a&gt; says it all:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Make things open: it makes things better&lt;/p&gt;&lt;/blockquote&gt;
</content>
    </entry>
    
    <entry>
        <title>Internal Tools and Infrastructure</title>
        <link href="http://alex.mullr.net/blog/2013/04/internal-tools-and-infrastructure/"/>
        <updated>2013-04-30T18:30:00+01:00</updated>
        <id>http://alex.mullr.net/blog/2013/04/internal-tools-and-infrastructure</id>
        <content type="html">&lt;p&gt;At everywhere I&amp;rsquo;ve worked so far I&amp;rsquo;ve been disappointed by the tools available
to employees to help them do their jobs better; put simply, I think every
company I&amp;rsquo;ve been a part of could have benefitted immensely from a simple
MediaWiki install.&lt;/p&gt;

&lt;p&gt;Obviously I&amp;rsquo;m aware that the lack of such a setup stems from a people problem
rather than a technical one, but it needn&amp;rsquo;t be a people problem. If there&amp;rsquo;s an
argument that can be made against the following setup, I would love to hear
it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install a wiki with text-based markup and an obvious, attributable change
log. Everyone who gets an email address with your company gets an account.&lt;/li&gt;
&lt;li&gt;The front page can only be edited by people who manage internal company
communications. It should link to other important parts of the wiki.&lt;/li&gt;
&lt;li&gt;Official policies and company documents can only be edited by a very limited
number of people.&lt;/li&gt;
&lt;li&gt;Everything else is a free-for-all, open to edit.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;To pick on MediaWiki specifically: it is &lt;em&gt;so&lt;/em&gt; good at handling all this kind
of stuff, with a visible history with each change attributed to users. I&amp;rsquo;ve
never come across an employee both malicious and stupid enough to bother
messing with this theoretical open wiki and doubt I ever will. And if such a
person did exist, they should be handled exactly as though they&amp;rsquo;d scribbled on
the walls.&lt;/p&gt;

&lt;p&gt;This is so appealing to me because I&amp;rsquo;m the kind of person who loves to read
things. I really enjoy poking through obscure documentation, and if I have the
ability to fix a typo easily, I&amp;rsquo;ll do it. On Wikipedia you might describe that
kind of person as a &lt;a href=&quot;https://en.wikipedia.org/wiki/Wikipedia:WikiGnome&quot;&gt;WikiGnome&lt;/a&gt;. People should be encouraged to edit and to
make a mess, because for every well meaning employee who adds something useful
with bad syntax, there&amp;rsquo;s somebody like me who will make it neat. Win-win.&lt;/p&gt;

&lt;p&gt;This isn&amp;rsquo;t a technical problem. The software exists, and it&amp;rsquo;s really good. And
it shouldn&amp;rsquo;t be a people problem either.&lt;/p&gt;

&lt;p&gt;At this point, I&amp;rsquo;m probably just rehashing things that people smarter than me
have said before. If I was creating a company I intended to grow from scratch,
here&amp;rsquo;s how I&amp;rsquo;d start:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A MediaWiki install as detailed above.&lt;/li&gt;
&lt;li&gt;Internal services for employees have sane domain names with one internal
TLD: &lt;code&gt;http://calendar.muller/&lt;/code&gt;, &lt;code&gt;http://wiki.muller/&lt;/code&gt;, &lt;code&gt;http://mail.muller/&lt;/code&gt;,
etc&lt;/li&gt;
&lt;li&gt;Have an external domain that points to the same place, but only for
services you want available externally: &lt;code&gt;http://wiki.muller-network.com/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;No, your department doesn&amp;rsquo;t get to buy a domain name, hire a
designer/developer and host a WordPress site just to show the rest of the
company how great you are. Use the wiki.&lt;/li&gt;
&lt;li&gt;Have well publicised places for employees to help you run your company
better (Running a news site? Can Finance employees easily report typos? &lt;strong&gt;&lt;em&gt;Why
not?!&lt;/em&gt;&lt;/strong&gt;).&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;A more concrete example&lt;/h2&gt;

&lt;p&gt;When I&amp;rsquo;ve got &lt;a href=&quot;https://xkcd.com/303/&quot;&gt;a few minutes in between work&lt;/a&gt; here I might pop on
to &lt;a href=&quot;http://www.thetimes.co.uk/&quot;&gt;The Times&lt;/a&gt; site, see what&amp;rsquo;s going on and find an article that takes my
fancy to skim.&lt;/p&gt;

&lt;p&gt;I did that the other day and found a pretty bad typo in an article, a remnant
of an editor suggesting a text change that somehow made it through the CMS
(part of the article text read &amp;ldquo;&lt;code&gt;&amp;lt;NO1&amp;gt;10&amp;lt;NO&amp;gt;ten-month&lt;/code&gt; [sic]&amp;rdquo;). What were my
options at that point?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email it to… someone. The editor? The digital editor? The article author?
Seems like a little bit of overkill to compose an email for a typo and send
it to people I don&amp;rsquo;t know.&lt;/li&gt;
&lt;li&gt;Leave a comment on the article, or do something else that any &amp;ldquo;normal&amp;rdquo; user
could.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Why is there no third option? Why is there no issue tracker for employees to
report problems, especially public-facing problems that make the company look
less impressive at its core job?&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m not picking on The Times or The Sun here, just using them as an example
I&amp;rsquo;m familiar with: I&amp;rsquo;ve never seen this done well anywhere, but would love to
hear about examples.&lt;/p&gt;

&lt;p&gt;And if there are any good resources about internal tools and infrastructure
(perhaps even long-form articles or books?), I&amp;rsquo;d love to hear about them.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>On The Lab's blog: Designing for Receipt Printers</title>
        <link href="http://alex.mullr.net/blog/2012/12/link-newsint-receipt-printers/"/>
        <updated>2012-12-03T19:20:00+00:00</updated>
        <id>http://alex.mullr.net/blog/2012/12/link-newsint-receipt-printers</id>
        <content type="html">&lt;p&gt;I wrote a bit for the office blog about our work writing HTML and CSS that ends
up printed on a bit of paper a couple of inches wide:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;For web developers, there’s no real technical challenge in the front-end
side of creating a publication; it’s all HTML and CSS with nothing to think
about other than how WebKit will render your page in black and white. But
this lack of difficulty is more than made up for with the tough constraints
imposed by the media and the size it’ll be printed at. The printable area is
less than 400 pixels wide and just 800 tall to avoid the unpleasant surprise
of waking up to a publication five metres long trailing across the floor.
Berg’s guidelines recommend that text should be sized no smaller than 20px
(and they’re dead on), but with letters so large and paper so small there
isn’t room to say much.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;http://labs.newsint.co.uk/blog/2012/12/designing-for-receipt-printers/&quot;&gt;Designing for Receipt Printers (December 2012, News International R&amp;amp;D)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I love the way that our blog looks and works. It&amp;rsquo;s an Octopress-based static
site. &lt;a href=&quot;https://twitter.com/BeJaiG&quot;&gt;Bel&lt;/a&gt; created designs that look awesome, and &lt;a href=&quot;http://jalada.co.uk/&quot;&gt;David&lt;/a&gt; and I
set the thing up.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Pirate Party UK</title>
        <link href="http://alex.mullr.net/blog/2012/11/pirate-party-uk/"/>
        <updated>2012-11-01T14:50:00+00:00</updated>
        <id>http://alex.mullr.net/blog/2012/11/pirate-party-uk</id>
        <content type="html">&lt;p&gt;(I originally wrote this article in about May of this year, when the news stories mentioned were current.)&lt;/p&gt;

&lt;p&gt;2012 is the year I joined my first political party.
After a bit of back-and-forth with my elected Member of Parliament (Conservative Mary Macleod)
in which we discussed &lt;a href=&quot;http://wiki.openrightsgroup.org/wiki/Communications_Capabilities_Development_Programme&quot;&gt;the CCDP&lt;/a&gt;,
the High Court ruling against The Pirate Bay and
&lt;a href=&quot;http://www.bbc.co.uk/news/uk-17951067&quot;&gt;Claire Perry&amp;rsquo;s dangerous crusade to censor the web&lt;/a&gt;,
I wrote this to her:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;The Internet is being legislated by people who do not understand it.
I have not seen a single elected figure take any of the issues of
digital civil liberties seriously, and as a result I am incredibly
disheartened with the state of UK politics.
As a twenty-one year old I find that quite sad and I hope you do too.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I remember being on holiday in April two years ago, in a game camp in the middle of South Africa,
using a phone and a local SIM card to read about the Digital Economy
Bill vote on Twitter. I can still remember feeling entirely powerless, and the same&amp;rsquo;s happening now
with the three topics I mentioned to my MP &amp;ndash; different Government elected,
same mistakes being made.&lt;/p&gt;

&lt;p&gt;I wrote her that message two days before the local elections on the 4th of May
and was hoping for a little more of a reply than I actually ended up
receiving; her assistant simply noted that my concerns would be forwarded to
Ed Vaizey, who holds the title of &amp;ldquo;Minister for Culture, Communications and
Creative Industries&amp;rdquo;. While waiting for London Elects to announce the results
of the election for Mayor of London I (re)stumbled across the Pirate Party&amp;rsquo;s
site (led there, I think, by &lt;a href=&quot;https://tpb.pirateparty.org.uk/&quot;&gt;their Pirate Bay mirror&lt;/a&gt;). For whatever
reason I had never before realised that their thinking was so aligned with mine.&lt;/p&gt;

&lt;p&gt;I wish they weren&amp;rsquo;t called the Pirate Party. It&amp;rsquo;s not going to do them a
single damn favour as awareness of them becomes more widespread. But having
just one more MP who can talk sense about all things digital in the House of
Commons (alongside &lt;a href=&quot;http://www.tom-watson.co.uk/digital-pledges&quot;&gt;Tom Watson&lt;/a&gt;) would be hugely beneficial for the UK.&lt;/p&gt;

&lt;p&gt;Politics has made me feel nothing but frustration and disappointment for the
last couple of years. I&amp;rsquo;ve finally realised that (much like every aspect of life)
it&amp;rsquo;ll be far more productive to stop thinking negatively and put that energy
into contributing to a political party that has sensible policies relating to
issues I feel are the most important. Call me naïve, but I hope that
the next general election will see the vote spread far more evenly across
large and small parties, and the Pirate Party should be a piece of that.&lt;/p&gt;

&lt;p&gt;That paragraph contains a phrase it feels like it&amp;rsquo;s taken me too long to realise.
&lt;strong&gt;Sensible policies about issues &lt;em&gt;I&lt;/em&gt; think are important&lt;/strong&gt;.
Bad legislation will continue to magically appear unless people who understand the
issues involved make sure they&amp;rsquo;re vocal about the politicians who are doing it right.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;ve mentioned to a few friends recently that I&amp;rsquo;m constantly surprised by how few young people
are interested in the technical side of creating things for the web;
a tiny minority of the population want to learn what HTML is, let alone anything more involved than that.
Given how widespread the web is today and that it&amp;rsquo;s only going to grow,
I&amp;rsquo;d expect far more enthusiasm for web development.
That same idea applies equally to digital legislation,
but perhaps attitudes will change as those who have grown up with access to a computer start being elected.&lt;/p&gt;

&lt;p&gt;If you&amp;rsquo;re interested in The Pirate Party, have a flick through &lt;a href=&quot;https://www.pirateparty.org.uk/media/uploads/Manifesto2012.pdf&quot;&gt;their 2012 manifesto&lt;/a&gt;
which has recently been approved by members.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Twitter, Tweet Nest and the Data Protection Act</title>
        <link href="http://alex.mullr.net/blog/2012/08/twitter-tweet-nest-dpa/"/>
        <updated>2012-08-17T10:50:00+01:00</updated>
        <id>http://alex.mullr.net/blog/2012/08/twitter-tweet-nest-dpa</id>
        <content type="html">&lt;p&gt;I&amp;rsquo;ve had a copy of &lt;a href=&quot;http://pongsocket.com/tweetnest/&quot;&gt;Tweet Nest&lt;/a&gt; running since &lt;a href=&quot;/blog/2011/02/tweet-nest/&quot;&gt;the end of 2010&lt;/a&gt;,
pulling in a copy of my latest tweets twice a day.&lt;/p&gt;

&lt;p&gt;Unfortunately, as the nerds out there might be aware, Twitter allow access to
just your most recent 3200 tweets online. The only way to get a copy of your
older tweets is to &lt;a href=&quot;https://www.privacyinternational.org/blog/what-does-twitter-know-about-its-users-nologs&quot;&gt;send them a request under the Data Protection Act
1998&lt;/a&gt;. Folks elsewhere in the EU should have similar legislation to
help them, but I&amp;rsquo;m not sure about other countries. To their credit, Twitter
complied with the request fully (as far as I can tell) and without making it too
painful for me (depending on how painful you consider having to send a fax).&lt;/p&gt;

&lt;p&gt;Here&amp;rsquo;s the first twenty lines of the &lt;code&gt;alexmuller-tweets.txt&lt;/code&gt; file they sent:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


// Generated on:  2012-08-07 22:54:50 GMT+00:00
********************
user_id: 8645442
created_at: Tue Sep 04 14:02:10 +0000 2007
created_via: web
status_id: 246512472
text: Waiting for the Genius Bar

********************
user_id: 8645442
created_at: Tue Sep 04 16:47:24 +0000 2007
created_via: sms
status_id: 246822322
text: And I think my phone works...

********************
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;While it was good of them to supply so much information, there was really only
one thing I was interested in: the list of &lt;code&gt;status_id&lt;/code&gt;s of all my tweets.
Twitter provide the tweet text as part of this request, but strip other
interesting metadata such as location and source.&lt;/p&gt;

&lt;p&gt;With that, I used a rubbish bit of Python (with tweepy) to pull every bit of
JSON I could out of the Twitter API and save it to a file:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;import tweepy
import json
import time
import datetime

# I found this somewhere online. Add a .json attribute to just get the raw JSON.
@classmethod
def parse(cls, api, raw):
  status = cls.first_parse(api, raw)
  setattr(status, 'json', json.dumps(raw))
  return status

tweepy.models.Status.first_parse = tweepy.models.Status.parse
tweepy.models.Status.parse = parse

username = &quot;YOUR_USERNAME&quot;
password = &quot;YOUR_PASSWORD&quot;
auth = tweepy.auth.BasicAuthHandler(username, password)
api = tweepy.API(auth)

myfile = open('list_of_ids_to_grab.txt', 'r') # this is a list of tweet IDs
jsoncontents = open('tweets.json', 'a') # blank file

i = 1

for line in myfile.readlines():
  print i
  print datetime.datetime.now()
  line = line.strip()
  print line
  status = tweepy.api.get_status(line)
  print status.json
  time.sleep(25) # 150 an hour
  donetweets = open('done_tweets.txt', 'a') # blank file
  donetweets.write(line + &quot;\n&quot;)
  donetweets.close()
  jsoncontents.write(status.json + &quot;\n&quot;)
  i += 1
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;WARNING:&lt;/strong&gt; this code is so wonderfully breakable that it will probably set
your machine on fire. You&amp;rsquo;ve been warned.&lt;/p&gt;

&lt;p&gt;Basic auth calls are limited to 150 an hour, so I left this running overnight to
complete. With the result, you can easily turn it into an array (wrap it in &lt;code&gt;[]&lt;/code&gt;
and add commas to each line, also known as the poor man&amp;rsquo;s way to code) and then
use &lt;a href=&quot;http://avalonstar.com/journal/2012/jan/11/let-tweetnest-accept-json/&quot;&gt;Bryan Veloso&amp;rsquo;s beautiful script&lt;/a&gt; to import it into Tweet Nest.
It&amp;rsquo;s worth importing your older tweets first before setting up a repetitive job
to pull in new ones, or else you&amp;rsquo;ll have to do some MySQL funkery that I can
explain in more detail if you need (yell on Twitter).&lt;/p&gt;

&lt;p&gt;This script highlights a problem that Twitter mentioned again last night: basic
auth will not work for much longer. This is a huge issue for Tweet Nest too, as it
doesn&amp;rsquo;t use OAuth. I&amp;rsquo;m going to (attempt to) add OAuth support to it in the near
future.&lt;/p&gt;

&lt;p&gt;While you&amp;rsquo;re here, let&amp;rsquo;s have a quick look at what else they returned from the
DPA request. Apart from the normal stuff you shouldn&amp;rsquo;t be shocked to know
Twitter have access to (direct messages, favourites, followers and following),
these two things were surprising, though not massively so, to me:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A list of all the phone numbers and email addresses that were stored on my
phone when I first ran the official Twitter iPhone app (1222 in total).&lt;/li&gt;
&lt;li&gt;A list of every IP address that has accessed my account for the last four
months (it&amp;rsquo;s fairly standard practice to store this).&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;For what it&amp;rsquo;s worth, I agree entirely with David Singleton, who
&lt;a href=&quot;https://twitter.com/dsingleton/status/236381916599836672&quot;&gt;tweeted&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;In case it wasn&amp;rsquo;t clear, I&amp;rsquo;m pretty worried about the twitter changes too. I
suspect many of them won&amp;rsquo;t be enforced, but still, dangerous.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;No matter how much you trust Twitter, it would be prudent to store a copy of
your own data.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Mid-2012 tech priorities</title>
        <link href="http://alex.mullr.net/blog/2012/08/mid-2012-tech-priorities/"/>
        <updated>2012-08-05T08:05:00+01:00</updated>
        <id>http://alex.mullr.net/blog/2012/08/mid-2012-tech-priorities</id>
        <content type="html">&lt;p&gt;A quick update on how I&amp;rsquo;m feeling about technology and computer stuff, and where
my priorities are at the moment.&lt;/p&gt;

&lt;h2&gt;Security and ownership of data&lt;/h2&gt;

&lt;p&gt;Pretty much every password I use now is unique, and the ones that aren&amp;rsquo;t will be
soon. I only know a couple of them from memory, and most of the important ones
are over twenty characters. 1Password is still a dream come true. Password leak
after leak has meant I don&amp;rsquo;t trust anyone online any more (and probably never
should have).&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;ve changed the MX records (email provider) for this domain away from Google
Apps and over to FastMail.FM. I&amp;rsquo;ll register new accounts with this domain rather
than my &lt;code&gt;@gmail.com&lt;/code&gt; address, and will move important services over gradually.
I&amp;rsquo;m no longer comfortable with Google providing such an essential service for
free. I pay O2 in excess of £30 monthly for a phone; why on earth was I holding
out over £2.50 a month for email, which is arguably way more important?&lt;/p&gt;

&lt;p&gt;Dropbox is no longer my go-to place to shove everything into. Instead, I&amp;rsquo;ll be
even more anal about backup, soon setting up Crashplan to backup in an encrypted
fashion to a drive at (my parents') home. This&amp;rsquo;ll be more useful when it&amp;rsquo;s
actually an off-site backup.&lt;/p&gt;

&lt;p&gt;For services that store data on my behalf, I&amp;rsquo;ve become a bit crazy about
maintaining my own copy of that data. This includes keeping a copy of my Oyster
card history using &lt;a href=&quot;https://github.com/jwheare/mollusc&quot;&gt;Mollusc&lt;/a&gt;, and sending Twitter a request under the
Data Protection Act so that I can get a copy of my first three thousand tweets
(they&amp;rsquo;ll be imported into &lt;a href=&quot;http://lighfe.mullr.net/tweetnest&quot;&gt;Tweetnest&lt;/a&gt; soon).&lt;/p&gt;

&lt;h2&gt;Portability of data and striving to be lightweight&lt;/h2&gt;

&lt;p&gt;Much to &lt;a href=&quot;http://zethrae.us/&quot;&gt;Adam&lt;/a&gt;&amp;rsquo;s amusement, I fear, I&amp;rsquo;ve become a bit militant about
the idea that web servers should serve HTML files whenever possible. To that
end, this blog is now using Jekyll to generate HTML files that are transferred
from my computer using &lt;code&gt;rsync&lt;/code&gt;. I was rather shocked to see just how slow
WordPress is:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://alexmuller.s3.amazonaws.com/static/blog/2012-08-05-pingdom-response-time.png&quot; alt=&quot;Graph showing response time (ms) over time&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Nothing&amp;rsquo;s changed with regards to &lt;a href=&quot;/blog/2011/11/the-web-growing-up/&quot;&gt;what I wrote about links&lt;/a&gt;; I&amp;rsquo;ve
tried to keep everything intact, and I think I&amp;rsquo;ve done pretty well. Old posts
look old. I still like that a lot.&lt;/p&gt;

&lt;h2&gt;Reading&lt;/h2&gt;

&lt;p&gt;The iPad&amp;rsquo;s no good for long reading for me, even with the Instapaper or Kindle
apps. Instead, I bought a (non-touch) Kindle from Amazon for my new commute and
set up Instapaper articles to be delivered wirelessly each week. It&amp;rsquo;s
incredible. The weight and the screen together make it a great reading
experience on the Tube.&lt;/p&gt;

&lt;h2&gt;Money and graphs&lt;/h2&gt;

&lt;p&gt;I finally got serious about boring grown-up stuff like dealing with money.
GnuCash is an excellent app, and I wish I&amp;rsquo;d been using it for years. I spend way
too much on food. This is yet another example of how right Etsy are when they
get shouty about &lt;a href=&quot;http://codeascraft.etsy.com/2011/02/15/measure-anything-measure-everything/&quot;&gt;measuring everything&lt;/a&gt;. Graphing expenses isn&amp;rsquo;t
the most exciting thing in the world, but is so, so useful. For me personally, I
find it so much easier to improve something if I can see it changing over time.
A single GnuCash database that I can update both at my laptop and on an iPhone
doesn&amp;rsquo;t seem possible today, but that&amp;rsquo;s the ideal end goal.&lt;/p&gt;

&lt;p&gt;Later this year, I want to start graphing some of the data that&amp;rsquo;s generated by
the house I live in. &lt;a href=&quot;http://stanford-clark.com/&quot;&gt;Andy Stanford-Clark&lt;/a&gt; gave a talk in York about
some of his home monitoring kit and it&amp;rsquo;s got me a bit excited (&lt;a href=&quot;http://tedxtalks.ted.com/video/TEDxWarwick-Andy-Stanford-Clark&quot;&gt;his TEDx talk is
very similar&lt;/a&gt;). There are hugely practical uses, like figuring out
where in your house the majority of your electricity bill comes from so that you
can do something about it.&lt;/p&gt;

&lt;h2&gt;And that&amp;rsquo;s where I am right now&lt;/h2&gt;

&lt;p&gt;A bit of a mishmash of stuff. This is just what&amp;rsquo;s important to me this month, a
bit of a State of the Union brain fart.&lt;/p&gt;
</content>
    </entry>
    
 
</feed>
