MM, M=M, LMM, mmm, hmm?

I’ve been doing a lot of thinking and writing about AI, ethics, how we engage with content etc - some of it for our company blog, like this:

https://www.dev.ngo/views/mm-mm-llm-mmm-hmm/

And more of it which I’ll be posting soon.

Reflections on AI from Wagtail Space

I got to tune in to the wagtail space conference, and put some thoughts about how we use AI and other tech choices on our company blog

https://www.dev.ngo/views/reflections-on-ai-from-wagtail-space/

AI hallucination: The $1 trillion problem and why your gut feeling is still vital

I had a fun experience trying to get a quick solution working with an AI this week - and wrote about it on our company blog.

https://www.dev.ngo/views/ai-hallucination-the-1-trillion-problem-and-why-your-gut-feeling-is-still-vital/

Beyond the Hype: What we learned from our first two AI solutions in grants analysis

I wrote a case study on our company website about how we’ve been using AI for document analysis, working with a large library of content, and some of the limitations of such a system.

https://www.dev.ngo/views/beyond-the-hype-what-we-learned-from-our-first-two-ai-solutions-in-grants-analysis/

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

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

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'])

Ergonomic things.

I get wrist pain in … well, obviously, my wrists.

Man, that was a bit of a daft start to a post.

Especially when using a mouse, but also when I have to do a lot of typing.  I do touch type, but not ‘formally’, with perfect  full-hand position, and so on.

Anyway, to try and make things better, here are some of the things I’m using

Microsoft Natural 4000 Keyboard

One of the weird things about keyboards is that essentially, we still use the exact same design that was needed for swinging arm typewriters. Stuffing all the keys as close together as we can, in orderly rows, so that the arm can hit the paper in the same place every time.
Actually, though, our hands would be a lot happier somewhat spaced apart, and at an angle, rather than trying to line up next to each other.

I have been using one of these Microsoft Keyboards for over a year now at work, and although it’s not perfect, it is a lot nicer than regular cheap and nasty keyboards, and a lot cheaper than some other Ergonomic Keyboards.

I currently have it at home, as, since this is a bit of a quiet time at OMNIvision, I thought I should finally get around to learning a more sane keyboard layout than QWERTY.  I’m learning Workman, which is a little obscure at the moment, but to me makes sense.  We’ll see if it takes off at all in the future…

Kensington Trackball

The thing which makes my wrists hurt the most is using a mouse, so I’ve been playing for a while with using the popular alternative to mice: trackballs.  This one is really cool, in that it has a built in scroll wheel.  That’s normal on mice, but for no apparent reason, is kind of unusual on trackballs.

I’m not 100% sold on trackballs as the answer, I think probably as big a part of it as anything is having to reach way over to the side and grip at an angle.  So I try to keep the trackball in the middle of the desk, and I have it also on an angle using an old empty CD spool.

Wowpen Joy

At home, I tried for a while using another trackball I got on ebay, as it was cheap, as it was second-hand.  It also wasn’t very reliable, so it ended up being more frustrating than helpful.  I then looked at Vertical Mice - mice which are designed to keep your hand in the ‘handshake position’ more naturally than the twisted flat position of normal mice.

A lot of vertical mice, like ergonomic keyboards, are pretty expensive.  However, on ebay there were a lot of these incredibly named ‘WowPen Joy’ mice.  The name itself is enough to put you off.  Anyway, I thought I’d try and see how one was.  It’s actually very nice.  It is kind of small, but still works fine with my big hands, I just use my middle and ring fingers to click, not index and middle.

Read more...

Super fast review of the past few months.

Foolishly, perhaps, we thought this year would be a quiet one.
A couple months on the ship at the start, then back in the UK until August, Teenstreet in Germany, and then back home for the rest of the year.

There’s a quote regarding the fallibility of apparently structurally sound plans of humans and rodents which might be appropriate around here.

When we finished our time on Logos Hope, we were in Bangkok.  Our organisation was holding a conference there at that time, so we helped out with the A/V techie arrangements for that.  When that was over, Becky headed home to Carlisle, and I went North for a week or so as cameraman, filming and visiting with one of our teams in the region.

After I got back two weeks later to the UK, We had a couple of weeks ’normal work’, before I had to go to Ireland to run sound for an Event in Cork, as one of our other Sound Engineers needed to go back to Korea for surgery.

After getting back to Carlisle, we had about two weeks before we’d scheduled a couple of weeks in Cyprus, to take the Christmas break we’d missed on the ship, and take some time off, in lieu.

Two days before we were due to leave Cyprus, my Grandmother in Birmingham passed away, quite suddenly - although not totally unexpectedly - and so we returned to the UK with my parents and brother for her funeral.

We were then in back to Carlisle for a few weeks, before travelling over to Germany for Teenstreet.

While we were at Teenstreet, the arrangments came together for a filming project my Dad has been planning for a while in Cyprus, so instead of coming back to the UK, we headed over to Cyprus again to help with that, myself doing the sound recording and Becky the shoot documenting and general assisting.

We’ve since been back in the UK for just about three weeks, and so wondering what’s going to happen next.

Right now we have our friend Ant, staying with us, and he inspired me to start blogging again.  This may not be the most exciting post in the world, but it at least starts to cover the great gap of the last several months.

You should check Ant’s Thoughts About Job.

Documentation, and how balanced audio cables work.

I finally had a bit more time this morning to write a bit more in the A/V manual.  There’s lots of bits and pieces of documentation on board, but no comprehensive single getting started manual.  So I’m writing one, bring together bits and pieces from all over the place, sorting out what documentation there is, updating schematics, etc.

Anyway, here’s the rough version on the article I just wrote about how balanced sound cables work.  It’s pretty much my standard explanation of Balanced Audio, and aimed at people coming to A/V from a non-techy musical background, rather than for Electronics Engineers.
You may find it interesting.  Then again, you may not.

---–

Sound is basically vibrations in the air.

TODO: more details, pingpong ball analogy?

Inside an (SM57) Microphone head.
That is the bit of plastic and the coils!This translates really easily into an analogue electrical signal: you simply turn the air vibrations into voltage vibrations.A Dynamic microphone does this by having a small bit of paper (or plastic) which vibrates with the air around it, and pushes against a very small copper coil which, moving inside a magnetic coil itself, generates a very-very-very small amount of electrical current.

TODO: more pictures.

This gets dumped down a wire, which gets amplified by (you guessed it) an amplifier into a very big amount of electrical current, which then drives a big electromagnet inside a speaker, which pushes another copper coil around, which is attached to another big bit of paper (the speaker cone), which causes the air around the speaker to vibrate – with the same vibrations that the microphone vibrated with, just bigger.

Simple, isn’t it? (well. Kind of.)

Balanced Audio Cabling

The trouble with simply dumping an audio signal down a cable, and picking it up at the other end is that your signal line, and return (usually ground) will pick up noise (say from A/C mains electricity, fluorescent lights, dimmers, mobile phones, etc)  along the way.

Here’s an original signal:

And here’s some noise:

And the result:

This is a Bad Thing™.

So some clever engineers, back in the deep recesses of time figured out the following:You could take a signal, and before sending down the wire where it could pick up noise, invert it:

If we add the signal to the inverse, you get a grand result of nothing (e.g. -3 + 3 = 0).

Now, if we throw these two signals down a pair of very similar cables twisted round and round each other like crazy, then they’ll both pick up noise pretty much the same as each other:

Note that 3 (the original) + 1 noise = 4,
while -3 (the inverse) + 1 noise = -2. NOT -4!

This is really cool, because if we add these two signals together, we don’t get 0 anymore, we get no original signal, but you do get the noise (doubled).

So we’ll use our amazing maths skills again, and divide this doubled noise in half. (2/2 = 1).

Read more...