Russ

Journal

  • Portishead @ Brixton Academy

    17 Apr 2008, 23:34

    Portishead @ Brixton Academy

    This gig was packed. I was stuck at the back with a load of people who were talking throughout the whole thing (why?).

    Damn, it was good.

    There are very few gigs, even for my favourite bands, where I walk out and wish it could have been twice as long - this was one of them.

    The music: people seemed a bit unusure about the new tracks. Maybe they hadn't heard them before - I had, and I thought they were ace. They started with PlaySilence, which I think is my favourite track on the new album. PlayMachine Gun was much better live than it was on the album.

    The old tracks were good too - they were all altered slightly and that made them seem fresher, especially PlayOver, which had a different pace. They were all great though.

    Now I have to review the technical bits... The LX/visuals were pretty great - some of the best I've seen at this sort of gig.

    The sound was interesting - I think the Academy is a great-sounding venue (mainly because it's so big and interestingly-shaped), but to start with I thought the sound was a bit muddy. But it seems they were trying to emphasize Beth's voice over everything else. I dunno if it was an artistic choice or just a lack of time, but I think it worked quite well, at least in places. Certainly it's some of the best vocal mixing I've heard.

    I hope Portishead stick around and don't disappear for another 11 years. I especially hope they play at Glasto this year, because that'll be really special.
  • Postgres Connection Pools: Pgpool vs. PgBouncer

    21 Feb 2008, 17:03

    We use Postgres for a lot of stuff here. Since it's a multi-process database server (unlike MySQL which is multi-threaded), creating a direct connection to Postgres is relatively slow.

    This can be worked around by using a connection pool server in front of the DB. Up until recently we used pgpool for this. But it has a few disadvantages:

    * It's multi-process itself (although it preforks), so it eats quite a lot of RAM.
    * Once you reach the maximum number of processes, it "queues" incoming connections in the OS accept queue, which is ugly.
    * It has poor (but improving) instrumentation.

    Recently we switched to using PgBouncer from our friends at Skype. It fixes all these problems quite nicely:

    * It uses single-process event-based socket handling, using the excellent libevent like memcached. This means it uses several orders of magnitude less RAM than pgpool.
    * It has configurable internal queuing, so your clients' connections don't time out if they're in the queue.
    * It has good instrumentation in the form of an internal pseudo-database you can query.

    Now here are some pretty graphs. Spot where we changed:



  • The Cinematic Orchestra - Live at the Barbican

    7 May 2007, 22:22

    Sun 6 May – The Cinematic Orchestra

    Here's (most of) the track listing, for those of you with the live CD:

    Disc 1:
    1. PlayThe Awakening of a Woman (Man With a Movie Camera)
    2. PlayChild Song (Ma Fleur)
    3. As The Stars Fall (Ma Fleur)
    4. Familiar Ground (Ma Fleur)
    5. PlayOde to the Big Sea (Motion)

    Disc 2:
    1. Breathe (Ma Fleur)
    2. PlayMan With A Movie Camera (Man With a Movie Camera)
    3. To Build A Home (Ma Fleur)
    4. PlayChannel 1 Suite (Motion)
    5. ?
  • Spam Filter Investigation

    26 Mar 2007, 00:10

    In the recent (slightly problematic) version of the submissions server, we've added logging of items which are rejected by the spam filter for content reasons. I want to try and use these to evaluate whether we should remove some rules.

    Here is a little summary (URLs have been broken by me to stop them profiting off my pagerank and the forums' auto-linking).

    Top Rejected Artists:

    14633 various artists
    6193 various
    5662 va
    4970 artist
    3130 unknown artist
    2905 no artist
    1287 (+44)
    1175 unknown
    208 [amatory]
    182 various artists dubstep allstars vol. 4 - disc 2 (mixed by dj hatcha)
    133 [ingenting]
    132 mosaic.wav
    122 [game music]
    116 v/a
    106 (smog)
    88 noartist
    71 [spunge]
    66 [o3]
    58 http://spyd3 r.ru/ipbforum
    58 elliot goldenthal & various artists
    50 [:sitd:]
    46 various artists jon brion
    45 [soundtrack]
    41 (la vela puerca)
    32 [www.potencia dance.com]
    32 (delerium)
    29 [raised fist]
    28 various artists - system recordings
    28 [unknown]
    28 (by dj morphologik)

    Top Rejected Tracks:

    1742 track 10
    1736 track 01
    1666 track 02
    1632 track 03
    1573 (antichrist television blues)
    1528 track 11
    1507 track 04
    1438 track 05
    1317 track 06
    1311 track 12
    1233 track 07
    1220 track 08
    1138 track 13
    1043 track 09
    977 track 1
    952 track 14
    896 track 2
    780 track 3
    721 track 15
    710 track 4
    706 track 6
    696 track 5
    618 track 16
    584 track 7
    566 audiotrack 01
    562 track 8
    535 track 9
    507 track 17
    496 audiotrack 02
    494 audiotrack 03

    Top tracks (ignoring "Track" and "Audiotrack" filters):

    1573 (antichrist television blues)
    351 (untitled)
    294 (nice dream)
    186 (sic)
    132 (exchange)
    130 (*fin)
    120 (intro)
    102 bohemian rhapsody.mp3
    78 albumwrap album
    77 (manifest)
    74 (10) and counting
    73 (515)
    71 (interlude)
    68 (c'estlavie; en)
    66 (d▒but)
    63 (hospital vespers)
    61 (letter from home)
    58 (intermission)
    56 childhood (1)
    54 (camel; ch)
    52 (hidden track)
    44 (unlisted)
    43 (12) bother
    42 (something)
    39 (past due)
    33 (a)
    31 (hidden finale)
    28 (subversive script)
    28 (b)
    27 (reverse)
  • PHP House of Horrors

    13 Nov 2006, 17:45

    Two weeks late for hallowe'en, but here's my latest PHP nightmare. Consider the following two pieces of PHP4 code, from a singleton pattern (apologies for the formatting, I need to fix our BBCode):

    A:

    function &instance() {
    global $httpmanager_instance;
    if (!isset($httpmanager_instance)) {
    $httpmanager_instance =& new HTTPManager();
    }
    return $httpmanager_instance;
    }


    B:

    function &instance() {
    if (!isset($GLOBALS['httpmanager_instance'])) {
    $GLOBALS['httpmanager_instance'] =& new HTTPManager();
    }
    return $GLOBALS['httpmanager_instance'];
    }


    They're identical right? Wrong. "global $var" doesn't act the same as "$GLOBALS['var']".

    In fact, "global $var" is equivalent to "$var =& $GLOBALS['var']", which means that example A above is equivalent to:

    A1:

    function &instance() {
    $httpmanager_instance =& $GLOBALS['httpmanager_instance'];
    if (!isset($httpmanager_instance)) {
    $httpmanager_instance =& new HTTPManager();
    }
    return $httpmanager_instance;
    }


    Now it should be (more) obvious what is happening. $httpmanager_instance contains a reference, which is getting replaced when you use =& on it, while the actual global variable remains empty. The answer in this case is to use = instead of =&, because in that case, PHP will follow the reference and replace the original variable:

    A2:

    function &instance() {
    global $httpmanager_instance;
    if (!isset($httpmanager_instance)) {
    $httpmanager_instance = new HTTPManager();
    }
    return $httpmanager_instance;
    }


    This is equivalent to B above.

    Now I'm not entirely sure what the PHP developers were thinking when they decided to make references and variables appear identical, but they certainly weren't following the Rule of Least Surprise...

    But PHP5 fixes all this, right?
  • New Audioscrobbler Protocol

    3 Oct 2006, 14:01

    The first draft of the long-overdue Audioscrobbler Protocol 1.2 is out. Read more here (comments in that thread, please).
  • Free Bonobo Ticket Tonight!

    26 Sep 2006, 11:58

    I have one spare ticket to the Bonobo album launch party at The Luminaire in Kilburn tonight (September 26th). I got it for free, so I'm giving it away for free to the first comer.
  • Scrobbling Visualisations

    13 Sep 2006, 23:02

    I've been working on geographic visualisations in my spare time. Here's an animation of the number of scrobbles over a 24-hour period:

    Still:



    (click for the animation, 4MB animated GIF)
  • DeviantArt

    15 Aug 2006, 10:41

    DeviantArt has a new design. I really like it, it's got much better contrast than their old site had, and they've got a nice depth effect going on now. Kind of like what the new Last.fm design did.

    I love their JS menus too.

    So what do the users think of the new design? It's almost a 50:50 split between love and hate. Kind of like what the new Last.fm design did.

    You can't please everyone.
  • Hardware

    1 Jul 2006, 16:46

    For those of you who think it can't be so hard to run this site, here are a few facts for you:

    18 web nodes - newest ones are Dual-CPU dualcore Opteron 4GB RAM 1U.
    12 profile database servers (soon to be Hadoop nodes) - 12-disk SCSI 8GB RAM dual Opteron 3U.
    2 global database servers - 12-disk SCSI 16GB RAM dual Opteron 3U.
    5 storage nodes - 12 SATA disks, 3TB each.
    Plus another 20 or so general-purpose boxes for indexing, searching, charts, etc.

    We have 5 racks' worth of equipment spread across 2 datacenters in east London. All in all about 140 CPU cores and 230GB of RAM.

    Average bandwidth usage: 300 Megabits (10 megabits of that is solely HTML).
    Total power supply: 24kW (102 amps), which probably costs us about £100/day.