Tag Archives: Happiness

FAQoverflow Has Launched!

I’m very happy to announce that FAQoverflow has launched! Yay! Please take a look, by visiting www.faqoverflow.com, and please help to spread the word in whichever way you can.

FAQoverflow

FAQoverflow Has Launched!

FAQoverflow is the coffee table book version of the StackOverflow (SO) family of Q&A sites. It contains great answers to questions about everything, and is ideal for flipping through.

Our crazy algorithms automagically generate FAQoverflow, selecting the best questions and answers from each Q&A site (there’s about 20 of them so far, on topics from Cooking and Home Renovations to Advanced Mathematics and Computer Programming). These questions and answers are then rearranged into a traditional FAQ format, with a bit of Javascript to make everything readable from the home page.

There is a dedicated webapp version of FAQoverflow for the iPhone. It’s free, and it’s easy to install.

In the next week or so we’ll be releasing PDF and eBook versions of FAQoverflow, idea for offline reading. When they’re available, you’ll be able to get them here.

I had the idea for FAQoverflow just over two weeks ago, and I quickly set about making it real. All up, implementation has taken about 60 hours so far. This is what I did:

  1. Registered the faqoverflow.com domain name.
  2. Set up an Amazon Web Services account.
  3. Set up S3 (Amazon’s file hosting service) and CloudFront (Amazon’s content-distribution network).
  4. Quickly got a “Coming Soon” page online
    • Hand-coded HTML5 and CSS
    • Incorporated Google Analytics
    • Chose suitable Typekit fonts
    • Set up site for Google Webmaster Tools (and Yahoo! and Bing as well)
    • Made sure site works well on the iPhone
  5. Wrote a Ruby script to spider the Stack Exchange API
    • Made sure the script recovers gracefully if it crashes out, as spidering takes a long time
    • Made sure the script doesn’t hit the SO servers too hard
    • Developed a crazy algorithm for finding and categorising the best questions and answers
  6. Wrote a Ruby script to generate a static website from the spidered content
  7. Tweaked the CSS to make sure each question and answer is beautifully formatted
    • Used Google’s “Prettify” library for code formatting
    • Used MathJax to format LaTeX-style maths equations
    • Hooked up a PayPal donation button (in the hope the community can fund ongoing hosting)
  8. Wrote some snazzy JavaScript so you can navigate all content without leaving the home page.
  9. Wrote a Ruby script to upload all of the generated content to S3, thereby setting the site live :)
    • Compact HTML with HTML Tidy
    • Compact JavaScript with the Closure Compiler
    • Compact CSS with the YUI Compressor

Spidering the content is relatively easy. It works as follows.

  1. Make a request to the Stack Auth API to find all SO sites that are publicly visible, excluding the “meta” sites.
  2. For each site, request the top 1000 questions, sorted by votes.
  3. For each question, request the top 2 answers, sorted by votes.
  4. Exclude any questions that are closed, or that don’t have any answers.
  5. For each question, calculate a quality score. This takes into account the following factors:
    • The number of votes the question received.
    • The difference between the number of votes of the top two answers (thereby favouring questions that have one standout answer).
    • The length of the question (preferring questions that are a few sentences long).
    • The length of the answer (preferring answers about a page long).
  6. For a particular site, sort the questions by quality.
  7. Divide the questions up into sections, as follows:
    • Consider the question at the top of the list (i.e. the one with the highest quality score).
    • Create a tentative section for each combination of tags for that question, but don’t create a tentative section if the FAQ already contains that section. So, for example, if a question is tagged “Ruby” and “Web”, then create three tentative sections (“Ruby”, “Web” and “Ruby and Web”).
    • Walk through the list, adding questions to the tentative sections if they have the requisite tags. Stop adding questions to a tentative section once it contains ten questions.
    • Discard any tentative sections that contain less than 5 questions by the end of this process (we want each section of the FAQ to contain between 5 and 10 questions).
    • Of the remaining tentative sections, choose the one with the greatest number of tags. If there is more than one such section, choose the one with the largest average quality score. Add the chosen section to the FAQ, and remove the questions in that section from the list. Repeat this process!
    • If no tentative sections remained after this process, add the question to the “Miscellaneous” section. Once that fills up, we’re done!
  8. Sort the sections by their average quality, but always place the Miscellaneous section last.
  9. Sort the sites (which we now call “chapters”) by their average quality, but always place the “About FAQoverflow” chapter at the top.

The entire process is automated, and recovers from errors. At the moment we kick things off manually, but we plan to start up a server so that the FAQ spidering and generation process runs automatically, around the clock, which will allow me to update FAQoverflow every few days.

Yes, that’s right – we currently do not run a server at all. The entire site is static, and hosted by CloudFront. It look like it’ll cost us a few cents a month to run. Not only that, we leverage Amazon’s content distribution network, so the site is really fast regardless of where you are in the world, as it serves files from “edge locations” in the US (9 datacentres across the country), Europe (four countries across the EU) and Asia (Singapore, Hong Kong and Japan), depending on where the requests are coming from. Finally, it’s super reliable and robust, so that we fully expect to survive any level of Slashdottery that we may be subjected to. Great stuff!

We believe that this is the direction that webapps are moving in; with the smarts migrating from the server back-end to the client and to offline script processing, and we anticipate experimenting with this approach a whole lot more.

Anyway, I’ve spent hours reading FAQoverflow, so it works for me. Hope you’ll get some pleasure out of it too!

Zarch

My three favourite games of all time are Exile, The Sentinel and Zarch.

Zarch is the name of a game on the Acorn Archimedes; I played the Amiga port, which was called Virus. In fact, Zarch itself was a full-fledged version of an Archimedes demo called Lander. David Braben (yes, he who, along with Ian Bell, created Elite) wrote it in three months in 1987. Virus, the Amiga port, didn’t look as good (no light-sourced polygons), ran slower, and was released a year later, but I still loved it.

Virus

Virus on the Amiga. Image by Wikipedia.

Lander became known for its fast, smooth, solid-3D graphics. In 1987 this was an almost unbelievable achievement. ACE magazine (which was known for rating games out of 1000 points, and for publishing a lastability graph with each review that extimated how much you’d still be enjoying the game after an hour, a day, a week, a month and a year) featured it on it’s cover, along with the headling: “Solid 3D – The Future of Games?”

I loved playing Virus for its procedurally generated landscapes, but what really clicked for me was the controls. It was the first game I played where a mouse was the preferred control method for movement. Moving the mouse rotated the ship around two axes, while the right mouse button was used to generate thrust. First time players would instantly crash and burn, due to the precision and sensitivity of the controls, and the learning curve was steep. Persistence paid off, however, and after plenty of practice it was possible to skim low over the landscape and turn on a dime. Sweet.

The left mouse button, of course, was used to fire your weapon. The gameplay consisted of ridding the landscape of all polluting alien craft before they could complete their task of seeding the verdant land with their evil red virus. Simple, really.

Post Scriptum

Some people have asked how to get hold of The Sentinel, Exile and Zarch (aka Virus). Here’s how:

  1. Purchase the Plus edition of Amiga Forever, which includes licensed versions of all Amiga Operating System ROM and 100 games of various quality. It costs US$30, and it comes with Exile included.
  2. Search Google to try to find versions of The Sentinel and Virus that you can run under emulation via Amiga Forever, but that may not be available with the permission of the copyright owner.
  3. Alternatively, search Google for free remakes of these games (although I cannot vouch for their quality).

Exile

My three favourite games of all time are Exile, The Sentinel and Zarch.

Exile is an “arcade adventure” (a now defunct term; these days you’d call it an “exploration platformer”) that features realistic physics and AI, and which has a large map that was mostly procedurally generated (but then touched-up by hand). How could I not love it?

Exile

The Chimps of Ni. Image by: Hall of Light

I discovered Exile when a playable demo was included on the cover of Amiga Power in 1991. I played the demo for hours on end, and eventually wound up buying the full game (reaching the limits of the demo took quite a lot of playing). I just loved the exploration, and the ways that items interacted with one another. You could pick up a glass jar, carry it into a pool of water to fill it up, then gently transport it across the map to use to extinguish a fire, for instance.

Much of the game involved experimenting with the world, and solving subtle puzzles to open up new areas for exploration, all interspersed with moments of frantic combat.

The physics engine was quite advanced for the day. In fact, it was a rarity to play a game that had any kind of physics simulation at all, so it was quite a novelty. It was fun to pick up and throw objects of all sorts, just to see what would happen.

The AI was also impressive. You discover and interact with many different kinds of creatures in the caverns beneath the planet’s surface, including anthropomorphic monkeys who say “ni” and steal items from you, and a friendly robot who responds to your whistle, and which you can use to solve puzzles.

Exile was conceived and written by Peter Irvin and Jeremy Smith (Jeremy, RIP, also wrote the classic C64 game Thrust). How good is it? Well, Edge Magazine has awarded only three perfect 10/10 ratings to games that were released before the magazine started publication. Those games are Elite, Super Mario Bros. and Exile. Which means you should play it. Now.

FAQoverflow

StackOverflow is a Q&A website for professional programmers. Joel Spolsky and Jeff Atwood developed the concept as a direct competitor to Expert Sex Cha… errr, Experts Exchange, and I now find that answers on StackOverflow are often in the top few results when I search Google for geeky, programmer-type stuff. They’re doing some good things; I liked the podcasts they recorded while the site was being developed, and I’m excited that all user-contributed content is cc-wiki licensed, allowing it to be shared and remixed.

Stack Overflow

Stack Overflow. Image by Jeff Atwood.

Joel and Jeff reused the Q&A Engine they developed for StackOverflow to power a couple of related websites, ServerFault and SuperUser, and then attempted to monetise the whole shebang by offering StackExchange, providing hosted Q&A websites on any topic to whomever was prepared to pay a steep monthly hosting fee. That didn’t work out so well.

Not ones to give up, Joel and Jeff tried Plan B, visiting a whole bunch of VCs in a whirlwind tour, raising US$6m in two weeks. They then returned to the drawing-board, coming up with StackExchance2.0, which is totally free, and whereby new Q&A sites are born via a community proposal process, which is how the USENET newsgroups of yore were created. It seems to be going swimmingly, and there are now about a dozen new Q&A websites in open beta on topics that include Cooking, Bicycles, Home Improvement and Personal Finance.

Many of the questions and answers across all of the websites in the StackExchange family are interesting to browse. As a StackOverflow user, I’ve been creating accounts on all of the new sites as they go into open beta, but, unless you’re really motivated to ask questions or write answers (and they do their darndest to motivate you, with XBLA-style achievements, points and leaderboards), you’ll find it difficult just to browse the sites for enjoyment.

Late last week I discovered two things that I hope will change that.

  1. They’ve released a public API that’s super clean and powerful. It’s easy to browse if you have the JSONview Firefox extension, and really easy to access from script.
  2. Amazon have, finally, implemented default root object capability for CloudFront, making it possible to serve a static website entirely from S3.

I’m currently writing a Ruby script that will spider all of the StackExchange Q&A websites, with the intention of finding the 100 best question-answer pairs for each site (as determined by a metric that takes into account many things, such as the brevity of the question and answer, the number of upvotes the question received, and the difference between the upvotes received by the first and second answers). These question-answer pairs will be grouped into ten buckets, based on the tags associated with the questions. All of this will then drive a new website, FAQoverflow, which purports to contain “great answers to questions about everything”. The site will be easy to browse (even on your iPhone), using styling inspired by Readability. And there’ll be PDF and eBook editions of the FAQ available for download. It’ll all be built automagically via a script that publishes a new edition every week or so, and will be user-supported (I’ll ask for donations from the community to pay the minimal hosting bill).

LIMBO

I’m not in the business of reviewing games, or even caring whether anyone else likes the same games that I do. Having said that, I wanted to share my thoughts on LIMBO, the new XBLA title by PlayDead, which is precisely the kind of game I want to be making. I had my RROD’d XBOX repaired especially to play LIMBO, after having my interest piqued by the video. Style-wise it’s right up my alley, but I also love the physics and animation, and the similarities to Another World and Flashback (two “cinematic platformers” that I enjoyed playing on the old Amiga 500 many moons ago).

Limbo Confrontation

Confrontation. Image by: Playdead

The reason why I feel compelled to share my thoughts on LIMBO is that several friends have made statements to the effect that the demo was boring and that it’s just an average platform game with great lighting and artwork. I respectfully disagree, but I no longer find it important to convince everyone else they’re wrong (turns out you eventually grow out of that), and I appreciate having friends who have different opinions to me (I gave up wanting to be surrounded by clones of myself when I turned 8). So, rather than explain why everyone else is mistaken, I thought that I’d just try to explain why I like LIMBO, and why I think it’s more than a run-of-the-mill platformer with a pretty face.

Background

I’ve been playing games for 30 years or so. I used to be able to play Elite on the Commodore 64 from 5pm on a Friday to 5pm on a Sunday with few interruptions, but these days I have a wife and two small kids, which means I need to grab a spare 30 minutes here and there. The longest gaming session I’ve had in the last 5 years was playing Resident Evil 4 on the GameCube for 8 hours straight with the curtains drawn and the surround sound turned up, and only a six pack of beer and a few packets of chips for company, but that was Before Kids, and the wife was interstate at the time. The games that shaped me are Exile, The Sentinel and Zarch. I love puzzles, text adventures, the old LucasArts games and new games that favour atmosphere, exploration and narrative over precision, action and competition. These days I mostly play iPhone, XBLA and online Flash games. Yes, I’d like to try Red Dead Redemption, but I don’t think I can make a commitment to completing it. And no, I’m not a fan of the FPS genre in general. I do find many contemporary AAA titles repetitive and boring. Heck, I even thought Half-Life 2 got repetitive, and that’s supposed to be pretty good.

All of which means: perhaps it’s just me?

Style

The first thing you notice with LIMBO is its style. The animation, art, lighting and sound are all spot-on. Everything appears in silhouette, and a subtle vignette means that objects lose detail towards the edges of the display. In general, it looks like foreign arthouse cinema, and the typography used on the credits screen is consistent with that look. Everything contributes to an overall sense of foreboding. This puts you on the edge of your seat from the get-go. Something’s about to happen, and you don’t know what it’ll be.

Controls

The second thing you’ll notice is the controls. Or, should I say, the lack of controls. It’s the stick to move, one button to jump and a second button to manipulate stuff. Couldn’t be easier. No, I don’t want to spend time learning a complicated control system anymore; I don’t want that to be a barrier to entry. My time is precious, so I’d rather learn by doing. Character movement is fluid and natural, and platforming is as satisfying as it was in the original Prince of Persia.

Insta-Death

The third thing you’ll notice is the insta-death. Now, that’s often a sign of bad game design. But here I think it’s great. It never sets you back very far, and, although some instances (like the water) are unpredictable, you quickly learn the rules. All drops are fatal if you can’t see the bottom, so no leaps of faith are required. And many insta-deaths are forecast, and are therefore avoidable with careful play. When they’re not, the results are sometimes used to foreshadow a similar situation that occurs later in the game (one red herring is used to great comedic effect), or to form part of an intricate puzzle (such as turning the death traps against others).

Puzzles

These are what I really enjoyed about LIMBO. They’re so well designed. There’s no repetition, which is always so common in other games (as if the designer, happy with themselves for inventing a cool puzzle, decides to reuse it throughout the game, turning an original and fun idea into a chore). All objects that you can manipulate have a use, so there’s no blind alleys. And many objects have multiple uses, which is often really clever. Great puzzle design means that situations that initially seem impossible are surmounted after a little bit of experimentation, exploration and thinking. You get to experience that moment of insight throughout the game, which is very rewarding.

Game Length

I’m not an achievement whore, and I don’t care much for leaderboards, so, although they’re present in LIMBO, they’re not going to compel me to play through again. I’m very happy to have experienced LIMBO in 5 or 6 sessions of between 30 minutes and an hour each over the course of two weeks, and I found myself anticipating the next play session, as I do with the episodes of a great TV series. That synchronised pretty nicely with my wife watching some Mindless American Drama on the TV after the kids were put to bed, and didn’t hinder my ability to do other stuff after hours. Finally, the ending is really well done, and worth seeing. I will play LIMBO again, for the same reason that I watch great movies again; simply to re-live the experience. The short game length and lack of repetition benefits replayability greatly.

LIMBO is pretty, immersive and lean to the bone. An almost perfect game.

Movie Science: My Theory of Inception

HERE BE SPOILERS

I loved Inception, and I’m convinced that, unlike many movies that leave questions unanswered, there exists a single correct explanation of what happened (I reckon Nolan does know the answer, and will have placed enough evidence throughout the movie to allow others to find it). Here’s my theory. I plan to re-watch the movie to see if this holds water, and I’ll update this post as I gather more evidence (and perhaps change my mind entirely).

Is Reality a Dream?

I say yes! Cobb’s “reality” is a dream of his own making. There are lots of clues during the movie that this is the case, from Miles (his father-in-law) telling him to “wake up” to Saito appearing out of nowhere to pull him into a car in Mombassa to the chase that saw him squeezing through a narrowing gap to him suddenly appearing in different places and so on. It’s a popular theory, and I’m subscribing to it. The entire movie is a dream.

The only time we see Cobb actually having a dream of his own, rather than entering someone else’s, is when he visits Mal (his wife) in their apartment. Ariadne follows, and chides him for recreating reality. Because that’s exactly what his “reality” is; a perfect recreation within his own dream, so believable that he’s convinced himself it is real.

But What About the Totem?

Cobb proves to himself that he’s not dreaming by using a totem (a spinning top) and watching it fall over. This reality test seems to suggest that he’s not dreaming. But that’s a red herring!

You see, we’re told that a totem is something personal that nobody else should hold, and that you need to be familiar with its weight and feel. Throughout the movie Cobb uses the spinning top, which was his wife’s totem. The clue is that we’re also told that other people’s totems won’t work, so the spinning top cannot be trusted. Remember that Cobb has presumably never held his wife’s totem “in real life”; he’s only held his imagined version of it in his dream. Therefore, it will behave exactly as he expects it to behave, because he can control what happens (subconsciously or not – think about the level of control Ariadne has over her dream world).

So where is Cobb’s true totem? He must have had one once. I think it’s his WEDDING RING (an object that’s intimately familiar to him, and which nobody else has held). In each of the dream levels, Cobb is wearing his ring, but, in his “reality”, he wears no ring (I never spotted this while watching the movie, but I’ve seen many forum posts that mention it). We are never told why he has no ring in “reality”. The big hint is what his wife does with her totem; she hides it from herself to prevent herself from realising that she is dreaming. Cobb has done the same thing with his totem.

Because Cobb uses his wife’s totem in a dream of his creation, he is able to control it, causing it to fall by concentrating hard (notice how he really focuses on it each time he performs a reality test). At the end of the movie his attention is distracted, which explains why it doesn’t fall (he’s in his own dream, and isn’t concentrating on the spinning top, so it keeps on spinning).

How Will Cobb Wake Up?

So Cobb is stuck in his own dream. Ariadne and Miles are attempting to rescue him. In “proper” reality the three of them are dreaming together. When Cobb witnessed Mal commiting suicide, he created a complicated dream world in which he was on the run, exiled from his country and unable to see his children. Ariadne and Miles (and perhaps others) need to make him realise he’s dreaming by leading him to his real totem. They do this by constructing an elaborate scenario that allows them to perform inception on Cobb – making him truly believe that he is able to finally return home.

Once Cobb finds his wedding ring, he’ll be able to prove to himself that he’s dreaming, and will wake himself up (presumably by suiciding). The wedding ring must be with his children at his home (either that or his children are another reality test – this is hinted throughout when he glimpses them in the various levels). This is why Miles so triumphantly reunites him with his children at the end of the movie – he and Ariadne have succeeded in their mission, and Cobb is about to discover that he is actually dreaming.

I’d love it if Cobb’s daughter was wearning a necklace with his ring on it at the end of the film, when she turns around. I must watch out for that next time I see the movie.

Why Doesn’t Mal Appear?

All of this begs the question why Mal, Cobb’s wife, never appears in his “reality” to let him know that her suicide worked. She appears in each of the levels as a projection of his, but never in his “reality”. Why doesn’t she just enter his dream and fix everything directly? Well, this is because his “reality” is a dream world of his own creation, and, as he believes it so deeply, and believes that Mal is dead, he simply cannot abide her presence. That is, if the real Mal entered Cobb’s dream, he would not allow himself to see her.

However, we know it is possible, with practice, to appear in a dream as somebody else. Therefore, I believe that ARIADNE IS MAL, in a different form. Cobb’s wife has entered his dream, with her father, and they are working throughout the movie to guide him out of it. This explains why Ariadne is constantly attacked by the projection of Mal. And it explains why Ariadne works her way so deeply into Cobb’s subconscious, ultimately convincing him to let go of the projected Mal.

I remember the moment when Ariadne used the mirrors to create a bridge that Cobb recognised (quick flashbacks showed him on the bridge with Mal – perhaps they met there). This scene is also evidence of the “Ariadne is Mal” theory. In that scene, Cobb warns Ariadne that building places from memory is the quickest way to lose track of what’s real and what’s a dream, and she says something like “is that what happened to you”. At that point, Mal’s projection knifes her (because Cobb, subconsciously, cannot accept the fact that Ariadne might be telling the truth).

Phone Call

One really fascinating moment is when Cobb receives a call from his kids. This is a man who’s on the run, yet his infant children can manage to call him up when he’s in some unknown location? What’s more interesting is that the kids on the phone sound older than those we see at the end of the movie, and that there’s someone else present during the call: their grandmother (Cobb’s mother-in-law, Mal’s father and Miles’ wife). We never meet her, but we can hear that she has a French accent. How about this for blowing your socks off:

  • Mal and Cobb live in America with their two kids.
  • Mal’s parent’s live in Paris, where her father lectures at the University.
  • When Cobb doesn’t wake up from his dream, he’s admitted to hospital in a “coma”, and Mal’s parents travel to America to help.
  • While Mal’s mother minds the kids, Mal and Miles stay at the hospital where they enter Cobb’s dream to attempt to wake him up.

So far, that all fits in with my theory. Now, imagine this. While Cobb is sleeping, the kids either talk to him Cobb directly, or over the phone (imagine Mal holding it to his ear). Cobb can hear his kids within his dream when they speak to him, in the same way that Non, Je Ne Regrette Rien is used as a signal to the dreamers (they hear the song within their dream when headphones are placed on them in real life). Within his dream, Cobb explains away the fact that he can hear his kids by imagining that they call him on the phone.

Further evidence in support of this theory (that Mal’s parents are helping to rescue Cobb): Miles, the father-in-law, seems to exhibit no emotion at all over his daughter’s death. He’s happy and friendly and helpful, not resentful of Cobb at all, even though he could rightly blame Cobb for her death. Not to mention the fact, of course, that he pleads with Cobb to “come back to reality”.

Conclusion

So, there you have it. Cobb is dreaming, and Mal (in the form of Ariadne) and Miles are working to wake him up (and they succeed). I think it’s a pretty consistent and believable explanation, and, like I said, I plan to watch the movie again to see how much evidence there is in support of this theory. Keep an eye on this post for updates!

Also, yes, I’m a tad obsessed with this movie.

Amazing First Week

I sent out an email to a bunch of friends and family on Monday morning announcing the fact that I’ve resigned my job to focus on personal projects for the remainer of 2010. The response was overwhelming; I received many emails and phone calls, all very supportive, and some offering help.

I’ve achieved the following things in my first sabbatical week:

  1. Found an office in Leederville that I’ll be moving into next Wednesday.
  2. Completed a prototype of one of my projects, the d-board (get it here).
  3. Pitched three of my other ideas to a handful of people who are interested in funding them with Real Money ™.
  4. Met with an accountant to set things up for if and when I actually do make any money.
  5. Started planning the implementation of MegaHAL10, another of my projects.

Thanks all so much for the overwhelming support. It’s been great. And don’t forget to subscribe to “The Occasional Jason” if you want more detailed updates; the subscription form is over there on the right (if you’re viewing this on my blog).

The Great Productivity Experiment

2010 was to be my year of “no unfinished project”. I tried really hard to work 10 hours a week on “Postal Worker”, but slotting in two hours of development time between 9am and 1am each weeknight resulted in burnout (we have a new baby in the house, and I just couldn’t continue to burn the candle at both ends). Rather than fail, I’ve decided to quit my job and spend the rest of 2010 working on personal projects, including Postal Worker, so expect to see a whole lot more bloggage going on around here. And, if you’d like details, here’s the first group email I sent out to friends and family (you can subscribe to the list from this blog; there should be a signup over there on the right).

Charcoal

For dinner tonight: 15 fresh clams, 15 fresh tiger prawns and a 750g silver perch, stuffed with spring onions and coriander. All cooked on a disposable charcoal barbeque and eaten with Thai “seafood sauce”, a delicious combination of green chilli, coriander, garlic and palm sugar. Smelled like Bangkok in our tiny back courtyard. Total cost: $25.

Deployment

Right happy with my new job this week… got some serious stuff done in four days, including a pretty comprehensive deployment script. And who can turn their nose up at free Nandos lunches, beer distribution while you work, and an empty office at 5pm every day?