Category Archives: Culture

Geek culture

Allow more JavaScript, maintain privacy

I’ve long regarded JavaScript in the browser to be one of the biggest security holes in web-browsing, and at the same time the Internet works less and less well without it. In 2008 Joel Spolsky made the observation that for some people the Internet is just broken:

Spolsky:   Does anybody really turn off JavaScript nowadays, and like successfully surf the Internets?

Atwood:   Yeah, I was going through my blog…

Spolsky:   It seems like half of all sites would be broken.

Which is not wrong.  Things have changed in the last five years, and now the Internet is even more broken if you’re not willing to do whatever random things the site you’re looking at tells you to, and whatever other random sites that site links off to tell you to, plus whatever their JavaScript in turn tells you to. This bugs me because it marginalizes the vulnerable (the visually impaired, specifically), and is also a gaping security hole.  And the performance drain!

Normally I rock with JavaScript disabling tools and part of my tin-foil-hat approach to the Internet, but I’m now seeing that the Internet is increasingly dependent on fat clients. I’ve seen blogging sites that come up empty, because they can’t lay out their content without client-side scripting and refuse to fall back gracefully.

So, I need finer granularity of control.  Part one is RequestPolicy for FireFox, similar to which (but not as fine-grained) is Cross-Domain Request Filter for Chrome.

The extensive tracking performed by Google, Facebook, Twitter et al gives me the willys. These particular organisations can be blocked by ShareMeNot, but the galling thing is that the ShareMeNot download page demands JavaScript to display a screenshot and a clickable graphical button – which could easily been implemented as an image with a href. What the hell is wrong with kids these days?

Anyway, here’s the base configuration for my browsers these days:

FireFox Chrome Reason
HTTPSEverywhere HTTPSEverywhere Avoid inadvertent privacy leakage
Self Destructing Cookies “Third party cookies and site data” is blocked via the browser’s Settings, manual approval of individual third party cookies. Avoid tracking; StackOverflow (for example) completely breaks without cookies
RequestPolicy Cross-Domain Request Filter for Chrome Browser security and performance, avoid tracking
NoScript NotScripts Browser security and performance, avoid tracking
AdBlock Edge Adblock Plus Ad blocking
DoNotTrackMe DoNotTrackMe Avoid tracking – use social media when you want, not all the time
Firegloves (no longer available), could replace with Blender or Blend In I’ve have had layout issues when using Firegloves and couldn’t turn it off site-by-site

Subtitling tries to make me dumber

I was watching Todd Sampson‘s Redesign My brain S1E1 Make Me Smarter and noticed the subtitling was annoyingly wrong. FMRI was subtitled as MRI. Baseline became based on – and there was more errors. My hearing’s not super-great, but even I could tell that these weren’t right.

Twice I’ve seen subtitling so bad that I’ve been prompted to find out who did it. Last time it was Jacqui Mapoon at CSI.

This time it was Jacqui Mapoon at CSI. Either Jacqui does a lot of work for CSI and sometimes has bad days, or she does a little work and often screws it up. What are the odds that on the two occasions I notice very bad subtitling, the same person’s behind it?  Subtitling is a very specialized field, so there can’t be that many people doing it, but at the same time a lot of TV is subtitled. I know from personal experience that subtitling takes at least 5 minutes per minute of show, and can take more if it’s particularly speech-heavy. There are a few hours of TV a night requiring subtitles, and it’d take one person one day to subtitle one hour of TV, so there’s probably a few dozen people in Australia doing it; live subtitling is a different specialty. Perhaps work processes need to be changed; I know I proof my subtitling after having done it, and spot errors. Perhaps someone other than the original subtitler ought to do the final proofing? Proof-reading error rates would show whose work needed more attention.

Most of the subtitles that I’ve seen are great – precisely timed transcriptions of the spoken dialogue, either exact reproductions or well thought through précis, contracted just enough to be faithful to the words and the intent whilst also fitting on the screen. For some reason American stuff is all caps unless the character is off-screen. Given so many in this industry can get it transparently right, why does one person’s work repeatedly poke me in the eye? Somebody give Jacqui some training, stat!

Banshee: please, pick a version

Banshee is a cross-platform audio player built using Mono.

If you go to the official website and install Banshee for Windows, you’re offered version 2.4.0 with warnings about it being alpha and all (as of April 16, 2013 the latest version is 2.6.1). Once you’ve downloaded it, when you then run it up, you get the following dialog:
install-then-upgrade

Infuriating.  Why wasn’t I offered that one by the website? Naturally, one selects “Hell yes, give me the current (actually, still behind the main branch, but more current than what I’ve got) release!”, which is then followed by
download-failed

and no freaking explanation of what went wrong. How am I meant to fix this? Given that the project is built for a VM, why am I offered one version, then offered the chance to update to a different version, and both of these versions are behind the current release?

Gagh!

Christmas, already?

In Coles on the weekend, I bought (from an enormous stack) this season’s Fruit Mince Pies.

At the start of August.

Only five months to go before this particular seasonal treat is only on the shelves for a couple of post-Christmas months as stocks are wound down.

This is getting ridiculous.

Replace a missing remote control with an Arduino and a laptop

I recently found myself without a remote for my WDTV Live media player, and limited resources to do anything about it – but I did have an Arduino, a breadboard and the local Jaycar had an IR LED.  Controlling IR devices is common practice with an Arduino. I would even be able to hack in functions that didn’t exist on the manufacturer’s remote – like creating a three minute skip by switching to 16x speed for 12 seconds.

The first port of call was to obtain Ken Shirriff’s Arduino IR remote control protocol library – as opposed to communications protocols, of which there are quite a number; did you know the first cut of WiFi included an infrared version? Without the remote, I wasn’t able to record and playback the IR signals sent to the WDTVLive, as you would with a learning remote. I had to find what to transmit from my custom remote. I little googling and I found the WD TV Live infrared remote control codes, which also helpfully reveals that the protocol is NEC.

I knocked up a quick proof of concept, installed it and watched it not work. Given I can’t see in infrared, I didn’t know if my circuit was working. I hooked a red LED up in parallel, and it didn’t light up; I thought I had cathode and anode swapped around, so flipped the red LED – and it didn’t light up. I pulled the IR LED, and then the red LED worked… I was shorting out the red LED. I couldn’t – with the bits I had lying around – confirm the device was transmitting anything. Rather than put the LEDs in series, I got a cheap camera-phone with video function, and it could see IR just fine. And it turns out the IR LED was transmitting something, but the WD TV Live media player wasn’t listening. Why?

The NEC infrared control protocol transmits 32 bits in one of two formats, one old (as in elderly) format encodes for 256 devices with 256 commands each, and the other encodes for ~64K devices with 256 commands each. The first 16 bits encode the device, and the second 16 bits encode the command. 16 bits for one of 256 commands, you ask? Well, one byte of the second 16 bits is the command, and the other is – for error checking purposes – the one’s complement of that. Further details of the pulse timing and protocol contents are available in various places, but they neglect to mention the extended addressing format. There are many IR control protocols. To use Ken’s IR library you need to know which protocol is used (which the google search revealed), and you can determine the protocol from the timing data found in the LIRC definition of a protocol, in this case the LIRC infrared control protocol for WDTV Live media player remote. The LIRC protocol defintion format is described by WinLIRC, so you can see what the timings are. In this case, the NEC protocol is revealed by the header, one and zero definitions, along with the fact that each code has 16 bits of ‘pre-data’ and 16 bits of data (a 32 bit package). Everything I could see was showing that the two, separately arrived at sets of command codes that were empirically sampled from the real world were compliant with the spec. One of the things the spec taught me was to transmit the NEC code twice, and to wait 70ms between re-transmissions.

I wasted time finding other codes for the remote, in other formats; I checked for byte ordering issues. Nothing worked.

The actual problem was the unsigned long for the command was previously an int; failing to notice this simple error led me to spend a long time trying to figure out why nothing was happening when I transmitted a command. One of the problems with the C language is the guarantees about data sizes aren’t worth much.  My entire life has been spent programming on architectures that have 32 bit data words; C compilers on these machines have all defined an int as 32 bits, but I’ve always been aware that the language spec says that an int is at least as wide as a short, which is at least as wide as a char with actual widths being up to the compiler implementation (although why you’d have different words for things of the same size is beyond me).  The AVR microcontroller in question has an 8 bit word; mathematical operands typically yield an 8 bit result (multiply is an exception) with compilers needing to implement more instructions to yield greater data widths. The defines express the codes as four byte values, which were then wrangled into a two byte int, and then again into unsigned four byte integer when passed to the IR library. Truncated bits in a protocol like this were the cause of inactivity.

Even with this fundamental problem solved, confusion was added by the fact that one of the memory cells in my Arduino is faulty. Once IR control code transmission was working, I noticed that sometimes it didn’t work. I decided to echo the command to the serial port, and the command being transmitted didn’t match that for the key pressed – the second byte was wrong. I added code to work around this memory corruption (not shown in the code below, because this is a pretty unusual). I’ve never come across this kind of problem before, recognising and then solving something like that is pretty old-school.

/*
Pin 3 is hard-wired into the IR library as the emitter
 */
#include <IRremote.h>
//#define DEBUG

IRsend irsend;

#define btn_enter  0x219E10EF
#define btn_right  0x219E906F
#define btn_left   0x219EE01F
#define btn_down   0x219E00FF
#define btn_up     0x219EA05F
#define btn_option 0x219E58A7
#define btn_back   0x219ED827
#define btn_stop   0x219E20DF
#define btn_rew    0x219EF807
#define btn_ff     0x219E7887
#define btn_play   0x219E50AF
#define btn_prev   0x219E40BF
#define btn_next   0x219E807F
#define btn_eject  0x219E08F7
#define btn_search 0x219EF00F
#define btn_home   0x219E609F
#define btn_power  0x219E48B7

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
const int onboard_led = 13;
const int retransmit=2;
unsigned long play_after=0;

void setup()
{
  pinMode(3, OUTPUT);     
  pinMode(onboard_led, OUTPUT);     
  Serial.begin(9600);
  Serial.println("WDTV Live serial controlled IR remote");
  Serial.println("~ Power    Eject ^ & Search   Rew - + FF");
  Serial.println("  w         Back q e Enter   Play  P");
  Serial.println("a s d (Arrows)     x Stop    Last < > Next");
  Serial.println("3 - FastForward three minutes");
}

void loop() {
  unsigned long cmd=0;
  if (Serial.available()) {
    switch (Serial.read()) {
      case 'E':
      case 'e':
      case ')':
      case '0':
      case 'O':
      case 'o': cmd=btn_enter; break;
      case 'q':
      case 'Q': cmd=btn_back; break;
      case 'P':
      case 'p':
      case ' ': cmd=btn_play; break;
      case 'S':
      case 's': cmd=btn_down; break;
      case 'W':
      case 'w': cmd=btn_up; break;
      case 'A':
      case 'a': cmd=btn_left; break;
      case 'D':
      case 'd': cmd=btn_right; break;
      case '-':
      case '_': cmd=btn_rew; break;
      case '=':
      case '+': cmd=btn_ff; break;
      case ',':
      case '< ': cmd=btn_prev; break;
      case '.':       
      case '>': cmd=btn_next; break;
      case '/':
      case '?': cmd=btn_option; break;
      case '~': cmd=btn_power; break;
      case '!':
      case '1': cmd=btn_home; break;
      case '^':
      case '6': cmd=btn_eject; break;
      case '*':
      case '8': cmd=btn_search; break;
      case 'x':
      case 'X': cmd=btn_stop; break;
      case '3': 
        if (!play_after) play_after=4; break;
    }
  }
  if (play_after > 0) {
    if (cmd) {
      play_after=0;
    }
    else if (play_after > 5) {
      if (play_after < millis()) {
        cmd=btn_play;
        play_after=0;
      }
    }
    else {
      cmd=btn_ff;
      if (--play_after == 0) {
        play_after=millis()+12000;
      }
    }
  }
  if (cmd) {
    digitalWrite(onboard_led, HIGH);   // turn the LED on to indicate activity
    for (int i = 0; i < retransmit; i++) {
      irsend.sendNEC(cmd, 32);
      delay(70);
    }
#ifdef DEBUG
    Serial.println(cmd, HEX);
#endif
    digitalWrite(onboard_led, LOW);    // turn the LED off - we're done transmitting
  }
}

In other links, How-To: IR Remote Control your Computer

"Spaced" DVDs – volume problems

I've been re-watching the DVDs of Simon Pegg/Edgar Wright sitcom Spaced, and noticing that the volume levels go up and down all the time. I didn't remember that being the case from the first time I watched them… which was on a previous DVD player (a Pioneer).

Turns out I'm not the only one to have this problem — those reporting there noted it was an issue on some Toshiba players, but I'm currently using a Sony.

I also have a Panasonic Blu-Ray player I could use, but it's not multi-region, and these discs are Region 2. Damn. And I can't see any easy way of hacking the player to make it multi-region, alas.

That's okay though, because taking a cue from the forum led me to this post about DVD sound problems, and also to a Wikipedia description of Dynamic Range Compression — leading me to think this was causing the issue.

I found this in the DVD player's setup menu. Once I'd switched it from “TV mode” to “standard”, all seemed to be okay again, though in contrast, a newer DVD of Parks & Recreation now seems to have its volume fluctuate, so perhaps I need to switch it back for everything other than Spaced. Odd.

Subtitling now in the Suez

I imagine that Jacqui Mapoon from CSI (Captioning and Subtitling Australia… or International) is someone who helps them out very occasionally, judging by the quality of her work on The Doctor Blake Mysteries: Season 1, Episode 9 “All That Glitters” –  atrocious work.  The gaff that stood out most was the transcription of sewers, but there were so many problems.

Don’t these subtitling services get given the script?  There’s a job listed in the credits as “Post production scripts”, surely they’re able to hand the script over electronically, and it’s just a matter of timing, pagination and confirmation – no transcription, no transcription errors?  I doubt Tim Pye – the writer of the episode – would have got that wrong, nor made the other homophonic errors.

ePub html/xhtml (or chapter) upper file size limit is 300Kb

The size of individual html files — chapters — that make up an ePub should not exceed 300Kb, according to ePubPreFlight, and this thread. Presumably this is to deal with eReader limitations, which are unspecified.

(I’ve found tell that you shouldn’t make the html/xhtml files in your ePub eBook “too big”, but finding out what “too big” is seems to be hard. Now the Internet knows the maximum size, and you don’t have to know all the magic keywords.)

Ultimate geek nostalgia: help fund a doco about the origins of the UK games industry

Yesterday marked 30 years of the Commodore 64.

Meanwhile, a documentary about the origins of the UK games industry in the 70s and 80s, From Bedrooms To Billions is in the works, but needs pledges of support to be made.

If you donate, depending on the amount, you get some pretty cool gear including a digital or DVD copy, posters, your name in the credits, a T-shirt, and even a personalised portrait of yourself from ZZap64 illustrator Oliver Frey. Some of the higher donation amounts actually include vintage computers/consoles and signed (by the authors) copies of classic games for them. Zowee.

They’re aiming to raise the money by 17th of August.

From Bedrooms to Billions

Revisiting Wolfenstein

Wolfenstein 3D is 20 years old. To celebrate it’s been re-released as a browser game.

And as Crikey notes, a 1992 Sydney Morning Herald reviewer was “flabbergasted” with the game: The game, we are warned, is rated PC-13 – Profound Carnage. Good advice. There’s plenty of blood and guts, and the sound effects are blood-curdling, so my sub-13-year-olds won’t be playing.

I remember playing it at my mate Brian’s place back when it was first released — the ancient computer I had at home couldn’t cope with it.

I had a go of it again last night. Sure enough, it worked well in the web browser. After about half-an-hour of shooting Nazis (and Nazi dogs) I felt a bit queasy. I think it was due to focussing on the low-res 3D, rather than the blood and guts.