At sea!

We’re sailing again!

sea

It’s so lovely being back at sea, and David seems to quite like it too.  He actually slept right the way through the night the first night!  Amazing… (If only he’d do it again…)

AV work is going reasonably well.  We’re doi

team
ng loads of training, as much as possible, but still trying to get everything working again too.  It’s really hard trying to arrange work for people to do, who know nothing about A/V at all, and may not have even touched a sound, lighting, or video console before joining the team.  Still, they’re all great people, and we’re having a lot of fun.

fanroom
One very frustrating thing was that I had to fix the Deck 4 music and paging system.  For whatever historical reason, that’s part of A/V’s responsibility, rather than the electricians.  The rack is located in a loud noisy fanroom, full of dust and grime.

wires
The rack isn’t very accessible, and getting in to the wires is really really awkward and scrapey.

It’s not massively well documented (another task on my list…), and I think several people had tried to fix it recently, so all the settings were messed up.  In the end, I pulled out the entire system, took it down to our storeroom to clean and test and set up, and then brought it back and plugged it in.  It all worked!  Which was great.  It just then took ages of walking around with the team getting them to tell me which zones were connected and had the right volumes, and so on.  Not fun, and as it needs to be working before we arrive in the next port, it meant I had to do that for 4 days rather than work on any of our venues. Grrr…

The new portable ‘fender’ sound systems that we bought are a huge success.  They work really well.  I asked one of the new A/V team to paint ‘Logos Hope A/V’ on the side of them all so that they don’t get lost, or apprehended into some other department.  I was expecting something ugly but functional.  Instead I got this:

logo

Really cool!

Anyway, to end this post, here’s a photo of David from when we took him to the kids water zone at the mall in Singapore.  Wet as a fish, a nappy as wet as he, and as Becky puts it, “Happy as Larry”. (Whoever Larry is…)

happy_as_larry

Off day.

We just had a pretty awesome day off.  We woke up pretty late.  Well, that is to say David woke up very early, and we were too tired to try and persuade him to sleep in his cot again, so he came to join us in bed for a couple more hours.  Eventually we all got up, and had a bit of breakfast.

I then went to the galley to get some supplies (icing sugar, cocoa powder, carrots, pears, and dry pasta) for us to make cakes for some of our ‘ship family’ birthdays coming up, the rest for making food for David.  You can guess which ingredients are for which activity.

I then took David to run around and play in the Logos Lounge, while Becky did some laundry.  We then had lunch, and then (finally) got around to giving David his first toothbrush, and first teeth brushing!

brush-teeth-2
We next headed out by MRT to the Singapore Botanical Gardens.  It was lovely - really peaceful and green, but extremely well paved and buggy friendly.  We found a somewhat random statue of Chopin,

chopin
we managed to prop up the camera on the buggy for a family photo too:

family
David wasn’t totally convinced by all the shots, though:

kiss
We spent a few hours there, and headed back.  We bought a couple of extra bits from the supermarket, and got back just in time for dinner.  On the way through the mall, Mini were giving out free balloons - so David got his first balloon as well!

balloon

At Dinner, our friend Maria, one of the new AV team, came and sat at our table and said, “So, we’re playing settlers tonight, right?”

So we went up to the cabin, and had a lovely game of Settlers of Catan!  David loved it, and for some reason went in to giggles almost every time Maria rolled the dice for the first half of the game!  Funny boy.

settlers-baby
We finished the game - Becky won, with 10 points (short game), by stealing the longest road from me and Maria would have won on her turn, again, by stealing my longest road.  We were just about to pack away, when Becky looked really puzzled, and realised that I should have won the previous round, as I also had 10 points (I’d forgotten about a hidden victory point)!

So.  Quite even.

setters

A good day.

brush-teeth

Cleaning and Settling in.

So we’ve been here almost 2 weeks now. It seems to have passed extremely quickly. The AV team have been hard at work, cleaning, installing, cleaning,

Cleaning the AV Store
testing, cleaning, training, and cleaning. I’ll try and post some more photos of the new equipment and nerdy stuff like that soon. But for now - here’s a photo of the 3 new recruits down in the AV store room cleaning it out. There’s a couple of tank man-holes in the store room, so often during dry-dock deck teams go in through there to work in the tank, and so everything gets covered in dust and grime. It would be nice if they told us in advance so we could get stuff out of their way and protected… but more of that another time.

So. That proves we’re actually working, (or at least that I’m making other people work - which is basically the same thing) now for some more fun photos.

me-and-baby
We’re all settling in. David is loving all the attention and stuff going on all the time. It’s lovely being able to eat with my family every day at basically every meal at the moment. Becky is finding it a bit odd, and lonely at the moment, as she didn’t really know many of the other mums, or what things there are to do. She misses cornerstone and the community there. Things are starting to pick up though.

walker-corridore

Playing with David is always fun - we’ve been leant loads of toys for him to play with, which is pretty cool. He’s always so active, and wanting to run around. He loves this walker, and spends plenty of time just coasting around the chairs too.

walker-own
He’s such a happy baby most of the time. The two things he hates are sleeping, and ending a meal. No matter how much he’s eaten, he’s always sad when we stop feeding him and wipe his face. I wonder if he’ll be a chef one day…

Oh. And since some toys are magnetic, and we have a metal deck-head in our cabin (ceiling)…

hanging-toys

Hello, WordPress, hello Logos Hope

I use WordPress at work, it’s the engine behind fr.om.org, transform.om.org and most of the other sites that we run for clients.

I’m in two minds as to whether I like it or not. Some things are great. For users (content authors, the people writing blog posts or static pages), it’s fine. Easy to understand and use. For writing plugins and templates, it’s… Well, kind of messy and ugly, but doable. For instance, rather than have 1 HTML template “base” file, with a block saying, “put posts here, and wrap each one in x,y,z”, you have a header.php which has only the start of all the HTML, and a footer.php which closes it all, and a content.php, a content-post.php, and so on, and you have to keep them all synced up. Also, since it’s designed for running on old PHP, it doesn’t use namespaces or other ways of keeping code clean, so all functions in all plugins and all templates are all global scope, so to avoid bumping in to each other, you have to name all your functions stuff like, “madprofs_teapot_plugin_get_resource() and similar. Then at the same time, Wordpress has multiple global functions of its own, some called things like, the_post(), others like wp_get_cached(), (so prefixed with wp_), and others in other styles. Messy.

Still, it gets the job done.

So when I wanted to update and clean up the brummie@sea blog, I thought I’d just stick with blogger. It works, it’s what I already had. But then, accidentally, while trying to update it, I lost the entire design, and putting it back together was this awful mess of Google-XML/HTML confusion, I thought, “you know, stuff it, I’ll just use WordPress.” So I span up a site on the server (in about 2 minutes), pointed the blogger importer at brummieatsea.blogspot.com, let it chug away for a few minutes, and here we are.

I’m just using a very simple built in design for now, (with my own background), but it seems to work. I now don’t have to worry about Google turning off blogger like they did with Reader and GoogleCode, and since I use Wordpress at work, I understand what’s going on pretty well.

That all said, we’re now on the ship, trying to settle in. We have a really nice cabin. Jet lag wasn’t fun, especially with the baby, but we’ll get through it. Yesterday Becky drank a big milky drink by accident - we thought it wasn’t cows milk but plant based, and last night and tonight David has been awful - screaming for ages and refusing to be comforted or to sleep lying down in his bed. So that does seem to confirm that maybe it is a lactose intolerance at the moment - hopefully he’s back to normal in a day or so.

Work so far is just cleaning the various venues. We’ve not even begun to start installing new equipment or doing anything really technical. We’ve got the lights out of their bags and air-blasted them all, cleaned many surfaces and TVs and vacuumed and dusted. It’s going alright. Still sooo much to do.

Read more...

It's been a while.

So. It’s been a while, blog.

9 months ago our son was born, and he kind of took priority over writing.  I’m sure you understand.

Anyway, the reason for this post is that once again, the brummie will soon be at sea! This time with Mrs. Brummie, and Baby Cumbrian.  I don’t know if Becky will object to being Mrs. Brummie, as she’s actually from Yorkshire, but whatever.

So we’re heading out to the Logos Hope again for 3 months.

Becky and I were on board for 3 months just over 2 years ago, helping with the A/V and Events teams after the 6 months dry-dock in Subic Bay.  This time, the ship has just come out of several months in dry-dock again, this time having the generators replaced.

I’ll be working with the A/V team again, doing training and helping getting everything back on track and working again.  We’ve bought some new equipment, as most of what’s there now is from the original install 6+ years ago, and is in need of some serious overhaulage.

During the Subic Bay drydock 2 years ago, none of the A/V gear was packed away properly, which is part of why everything is in such bad condition now.  At least now, since then, it’s become part of A/V culture to do a serious pack down at the start of every dry-dock.  All of the lights on the truss get plastic bagged, all of the lighting dimmers get unplugged and tagged out, the desks get bagged and covered, etc.

In some ways, I’m extremely excited about going back again.  For the last couple of years I’ve ended up doing more and more I.T. work here, making and maintaining websites for transform.om.org, fr.om.org, omnivision.om.org, omnitube.org, and video.om.org, as well as a few internal projects (including stuff-management and streetsign).  It’s kind of interesting, some days, but also pretty frustrating too.  I feel I’m more of a creative ideas person, rather than a server-maintenance guy, so the initial creation of websites or programming projects is kind of fun, the on-going maintenanace and bug-fixing drives me to despair (not to mention having to work in PHP with Wordpress…).

I love the ship’s work, I love doing events (especially the school visits and other kids events and actual theatre type events), and am quite excited about not having to do I.T. stuff here for a while.

It’s really strange to think that when we get back from the Logos Hope in 3 months time, it’ll be 10 years since I started this blog, when I first went to Doulos for 3 months….

Anyway, time for dinner, and I need to go play with our son.  I’ll try and post something a lot more regularly this time.  Writing is theraputic, and I suspect I’m going to need it…

vim

I use the text editor “VIM” for almost everything, since it’s quick, does pretty much everything I need. It’s interface isn’t the quickest to learn, but once you can use it, it’s great.

I especially like being able to log into the server from any computer in the world and be able to have my whole environment available to me, I don’t have to install huge complex IDEs or whatever.

Some plugins I use:

and some bits I have in my .vimrc which may be interesting to you other VIMers:

and

Spacebar leaderkey

One thing I only recently did was switch the spacebar to being my ’leaderkey’. I’d not really used the ’leader’ stuff much before, but now it’s all working I really like it.

which seems a bit odd, but seems to work. Essentially I’ve mapped the “real” leaderkey to something I can’t easily access by accident, and then (outside of visual / insert mode) mapped space to the leader. I was trying for a while to figure out some kind of noimap or something syntax to say only do this outside of visual/ insert mode, but then this works without any complexity. Cool.

I’ve then assigned a bunch of window/pane movement leaderkeys:

which lets me switch windows with hitting space and then a direction, or swap windows with double tapping space.

Visible tabs and spaces:

A couple of minor things that really bug me is spaces at the end of lines, and mixing tabs and spaces. Here’s a couple of bits which make that a bit better.

Python PEP8 style helpers

It’s also pretty helpful having a visual reminder about line lengths:

Matt's Blog

Euan, Ant and I just finished releasing “Matt’s Blog” over lent/easter this year.

It was a really fun project, dramatising what we think it could have been like for Matthew, Jesus’ disciple, if he was a video blogger.

Here’s the videos!

  1. Cafe Eavesdropping
  2. A change of Scenery
  3. Story Shennanigans
  4. Something’s a bit fishy..
  5. The gravity of the situation
  6. My worst nightmare!
  7. Back in the Big Time
  8. The End of EVERYTHING
  9. Big Nights and Big Fights
  10. When the world comes crashing down
  11. Pain
  12. Everything’s Changed
  13. Not an Ending, but a beginning

LVM snapshots for a resetable machine

I have ended up maintaining a few websites which we are hosting on a machine off in Germany somewhere.

I want to get everything automated, so I have less work to do if something goes wrong.

I’m using ansible, which is wonderful, and have a nice set of playbooks I’ve written which take a raw CentOS install, and install everything, (php-fpm, nginx, etc…) set up the virtualhosts, install wordpress & joomla and all that for the sites that need it, etc.

Until today, I’ve been using a virtualbox on my local computer to test on, and it works great.  I haven’t bothered with vagrant, as I tried it for a couple of days, and it crashed my whole computer twice, so I gave up.  With virtualbox, it’s almost as simple.  I have a virtualmachine which I can spin up, install stuff on, and then when I want to go back to a fresh machine, it’s a matter of turning it off, and clicking ‘restore snapshot’ to the snapshot I made when it was clean installed.

It’s practically instant, and just works.

However, running a virtualmachine on my primary work computer all the time does make everything else somewhat sluggish.  So I’ve scrouged an old computer that wasn’t doing anything, and am now using that instead.

In order to get snapshots and restore points going well, here’s how I did it:

  1. Install CentOS, leaving a bunch of free space on the LVM primary group.
  2. Make a snapshot when it’s first installed
  3. Restore (merge to) that snapshot whenever I want it back to original settings.
  4. Reboot

To make & restore the snapshots, I’ve written the commands as scripts so I don’t have to remember the lg-whatever stuff. (vg_localtest is the name of the volume group I set up for the HD when I installed):

/usr/sbin/snapshot_make:

#!/bin/sh
lvcreate –size 100G -s -n original_snapshot /dev/vg_localtest/root

/usr/sbin/snapshot_restore

#/bin/sh
lvconvert –merge /dev/vg_localtest/original_snapshot && reboot

It works great so far.  One improvement I’m making, since I one time forgot to make a snapshot, and so couldn’t restore to a blank slate without re-installing the whole thing (which, admittedly, only takes half an hour or so):

I’m adding ‘snapshot_make’ into a boot script, and then modifying it to remove itself from the bootscript once it’s made the snapshot.  That way as soon as the machine reboots into it’s original snapshot, it will automatically re-create the snapshot.

This looks like:

/usr/sbin/snapshot_make:

#!/bin/sh
lvcreate –size 100G -s -n original_snapshot /dev/vg_localtest/root
sed -ine ‘/snapshot/d’ /etc/rc.local

and then /etc/rc.local will look like:

#… whatever it has
/usr/sbin/snapshot_make

"Matthew's Blog"

For the last few months, some friends and I have been working in our spare time on a 12 part video series, “Matthew’s Blog” - a video blog from the point of view of the Apostle Matthew (although he doesn’t know it yet).

He starts off as a young, arrogant tax officer, which is where we meet him in the first Episode:

I hope you enjoy!  Please join us as it leads up to the climax at Easter this year on facebook.com/matthewsblog !

Merging directories with the magic of Python.

We finally got the last projects out of that monstrosity ‘Final Cut Server’, but one project at the end was a nightmare to export, and we weren’t sure which files from the end actually were in a different version of the project that we already had.

We essentially needed to merge two different versions of projects directories, making sure not to lose any files, and we didn’t want to lose the organization of the files.

Here’s a quick python script I wipped up to make it quicker.

With the 4000 odd files in the project, it took under a second to run, and it turned out we only had about 20 files which hadn’t already been merged.  Much simpler to sort out.

The script took about 10 minutes to write and test. This is why you should learn to program.  Hacking stuff like this up is easy, and saves *so* much time.

(Yes, you probably could do this with a couple of lines of perl or BASH, but what the heck.)

#!/usr/bin/env python
from subprocess import Popen, PIPE
from os import stat
from os.path import basename, abspath
def run(*command):
    found = Popen(command, stdout=PIPE)
    return found.communicate()[0]
def files_in(dirname):
    return [x for x in run('find', abspath(dirname), '-type','f', '-print0').split(chr(0)) if x]
if __name__ == '__main__':
    from sys import argv
    try:
        sourcedir = files_in(argv[1])
        destdir = files_in(argv[2])
    except IndexError:
        print 'Usage:'
        print argv[0], '  '
        print 'Where you want to check if files in  are also in '
        print '(but perhaps with a different relative path)'
        exit(1)
    print '---------------------------------------------------'
    print '{0} files in {1}'.format(len(sourcedir), abspath(argv[1]))
    print '{0} files in {1}'.format(len(destdir), abspath(argv[2]))
    print '---------------------------------------------------'
    destnames = {}
    for destfile in destdir:
        destnames[basename(destfile)] = {'size': stat(destfile).st_size,
                                         'path': destfile }
    for newfile in sourcedir:
        base = basename(newfile)
        if base not in destnames:
            print newfile, 'is NOT in the new dir'
        else:
            destfile = destnames[base]
            if stat(newfile).st_size != destfile['size']:
                print '{0}({1}) differs from {2}({3})'.format(
                      newfile, stat(newfile).st_size,
                      destfile['path'], destfile['size'])