Content here is by:
Michael Still
mikal@stillhq.com

All my Open Source projects
Extracted view of CVS
Home
Site map

See recent comments. RSS feed of all comments. Raw dump of all comments for research purposes.

ImageMagick book
MythTV book








This page documents the various toys I have in my collection, and what I needed to do to get them to work, normally with Linux. I've done this because it's handy to be able to get them to work again with new machines or whatever. I'll be doing a little bit of back capture of old toys over time as I feel in the mood.


Sat, 16 May 2009



Early Father's day

    The kids aren't going to be in the same country as me for US father's day (I get two this year!), so they gave me my present early. I now have a complete set of UK police riot armor -- the helmet, shield, and leg protectors. This has already come in handy whilst parenting hyperactive children. I wonder if its legal for me to own such things in Australia?

    Digging a bit further, it appears:
  • Possessing soft body armor (for example ballistic Kevlar) is illegal in the ACT except for those employed by licensed security organizations -- PROHIBITED WEAPONS REGULATION 1997, section 12.
  • In fact, the Commonwealth customs regulations mostly seem concerned with the possession or import of armor intended to stop bullets -- CUSTOMS (PROHIBITED IMPORTS) AMENDMENT REGULATIONS 2005 (NO. 4) (SLI NO 249 OF 2005)

    I can't see any mention of riot armor (which wouldn't stop a bullet) though, nor a reference to militaria, apart from militaria fairs needing a permit. I wonder if anyone else has thoughts on this?

    Tags for this post: blog(S) toys(S)

posted at: 18:21 | path: /diary/toys | permanent link to this entry


Thu, 14 May 2009



CCD Barcode Scanner

    I just picked up a CCD barcode scanner cheaply on eBay. The plan is to use it to bulk enter a bunch of books into my book database. Many US books don't have bookland barcodes, but instead have something which looks like this:



    So, the barcode has no problems with the big barcode on the left, however it doesn't recognize the little barcode on the right. So, does anyone know what format that little barcode is in? What mode do I need to put my barcode scanner into to get both barcodes read, either at the same time or individually?

    Update: once again the Intern has earn his Intern-chow (or whatever it is he eats when he's allowed out of his cage). The deal was I needed to scan the magic "make all possible barcode types work kthxbye" barcode in the book of exactly 1 billion configuration barcodes. It all works well now. I wont mention the Intern's name, because I want to hire him and need more security through obscurity in my life.

    Tags for this post: blog(S) toys(S)

posted at: 21:46 | path: /diary/toys | permanent link to this entry


Wed, 25 Feb 2009



Roomba Battery Repack 1

    I bought two different versions of the Roomba battery repack kits from ebay and the first one arrived today. This is the nicer of the two versions, because it includes pre-soldered tabs on the battery wires. It cost me an extra dollar, and was about $26 including shipping. To be honest, if I'd found this one first I probably wouldn't have bought the one without the tabs.

    Here is the contents of the kit:



    Note that there are no instructions in the kit.

    The first step is to open up the battery case. The screws are pretty obvious, although the triangular screw driver than the kit ships with sure made this easier. Then you need to crack open the case, which for some reason is glued shut. That took a bit of patience, a jewelers screw driver, and in the end a hammer. I started out not wanting to bash the case too much, but it was glued pretty solidly. In the end it opened up just fine though:



    Now you just need to put the new pack in, making sure to get the tabs in the right places. Screw the lid shut, and go for it. My roomba is charging at the moment, and I'll let you know how it goes once that's done.

    (You might recall this means that I now have two fully functional roombas. I'm thinking of building the serial control cable, hooking up arduinos, and having some sort of swarming vacuum system. Its a pity I don't know anything about swarming algorithms...)

    Tags for this post: blog(S) toys(S) roomba(S)

posted at: 16:43 | path: /diary/toys/roomba | permanent link to this entry


Sun, 22 Feb 2009



New Roomba batteries

    For some reason I am the Roomba battery kiss of death. I've been through two batteries in about three years. Last time I just bought a new Roomba on special instead of replacing the battery. Its hard to justify three Roombas in the house though, so this time I'm trying something different -- I've bought replacement cells for the batteries from ebay, and will install them in the yellow shell myself. This sounds like its pretty easy to do, and there are several supplies who sell these cells.

    I'll let you know how I go.

    Tags for this post: blog(S) toys(S) roomba(S)

posted at: 14:32 | path: /diary/toys/roomba | permanent link to this entry


Wed, 26 Dec 2007



Via M10000, video, and a Belkin wireless USB thing

    I've had a Via Eden M10000 literally lying around since soon after I moved to the US two years ago, and I finally decided that it was time for a full blown home workstation the other day, having got fed up with the small screen on my laptops. Sometimes I really miss my 30 inch monitor at work, and the 24 inch I am using at home is a much better substitute than a laptop screen.

    Anyway, getting the machine working was surprisingly difficult given its a three or four year old design. The problems:

    • The PCI 802.11g wireless card didn't work. In fact, the machine wouldn't boot with it installed. I suspect this was a PCI version problem, as I have had pain with this card in the past.
    • The PCI 802.11b wireless card I tried next wasn't much better. The connection would drop out randomly, and the machine would occasionally lock up. This was the card I used as my first access point about six years ago (using hostap), so perhaps its just old. It got swapped out as well.
    • The Belkin USB 802.11g thingie didn't work reliably. It would stay connected to the network for five minutes before something went wrong. This made me annoyed, especially when it turns out this is because the latest release of Ubuntu (gutsy) installs an old version of the rt73usb driver, which is known not to work with this card. Following these instructions from the canonical wiki which tell you to install drivers from here fixed the problem. Its annoying that Ubuntu ships with known broken drivers though.
    • Next, video. The video card built into the mother board sucks. I'm running a t24 inch LCD at 1920x1200, and there was significant ghosting on the monitor. Additionally, I couldn't run at 24 bit, I had to use 16 bit because the video card was running out of RAM bandwidth.
    • Not to worry, I installed a Matrox G450 I had lying around, and now the monitor works nicely as well, with no ghosting.
    • Finally, the whole thing is much louder than I expected from an Eden machine (there is a fan on the board, a fan in the case, and the hard disk). Then again, given I built the entire machine for $90, I can't complain too much.




    Tags for this post: blog(S) toys(S)

posted at: 15:25 | path: /diary/toys | permanent link to this entry


Mon, 18 Jun 2007



Configuring the n800

    In the battle to install ntpdate on my newish n800, I came across this excellent setup page. It was really very useful. I ended up with an NTP client from here.

    Tags for this post: blog(S) toys(S) nokia(S) n800(S)

posted at: 21:47 | path: /diary/toys/nokia/n800 | permanent link to this entry


Fri, 16 Mar 2007



Dell e310 upgrade

    I'm starting to get annoyed with the reliability of the USB chip sets in my external disks (of which I have six), so I am considering upgrading to a home theatre style case for my Dell e310 so I can have room to move the disks to inside the case. There are of course warts -- the Dimension e310 appears to have a BTX mother board ( which causes people pain ). Additionally, no one seems to make a BTX home theatre PC case, which sucks.

    So, I might end up having to replace the entire machine, which isn't so cool. I'm gonna put all of this on hold until I can apply more thought to it.

    Tags for this post: blog(S) toys(S)

posted at: 08:35 | path: /diary/toys | permanent link to this entry


Sat, 03 Mar 2007



Free on demand from Comcast

    Catherine and I have had analog Comcast cable TV in the US since we moved into our apartment here. We've resisted going digital because of the brain dead requirement that you use the Comcast set top box (which sucks), and therefore it not working with MythTV. If they shipped a digital decoder card which worked in a PCI slot with Linux, I would upgrade right away.

    I've told them that a bunch of times, and they've offered us free upgrades about four times.

    In the end they must have got the hint, because they just gave us a free "on demand" digital box for our analog cable. It's free for a year, and appears to be a Motorola DCT 700, which seems to just be a embedded computer which uses a two megabit connection to Comcast to deliver programs.

    Now I'm meant to be activating the device, but I've been on hold with Comcast for 15 minutes. The user documentation even promises the call should only take three to four minutes. Of course plugging the MythTV box into the back of the Motorola box also broke our existing analog reception, so I might end up giving on the call and backing out the cabling change until Comcast gets with the program...

    More device gossip as it comes to hand.

    Tags for this post: blog(S) toys(S)

posted at: 10:32 | path: /diary/toys | permanent link to this entry


Mon, 26 Feb 2007



Debugging reboot problems with a n800?

    The n800 seems to be spontaneously rebooting, which is very annoying. It's also at the same time going through a lot more battery life when idle than I would expect. Does anyone know of a good tool for tracking down what the device thinks is happening (I don't have R&D mode installed on the machine).

    Tags for this post: blog(S) toys(S)

posted at: 09:45 | path: /diary/toys | permanent link to this entry


Sat, 24 Feb 2007



Let it be known I am open to bribes

    My subsidised Nokia N800 arrived today, and I've been playing with it a little. It's not immediately obvious how to install software, let alone get root on the thing so you can start developing. More details as I find my way around the wiki.

    Tags for this post: blog(S) toys(S)

posted at: 18:34 | path: /diary/toys | permanent link to this entry


Wed, 21 Feb 2007



Ordered: Nokia N800

posted at: 13:19 | path: /diary/toys | permanent link to this entry


Wed, 07 Feb 2007



Random idea

    I'm tired after a trip, so this is short and incoherent. You know how Sun used to hand out demo hardware for evals a couple of months ago? I wonder if they'd give me one to try MythTV backend on? I wonder if it would suck?

    Tags for this post: blog(S) toys(S)

posted at: 17:45 | path: /diary/toys | permanent link to this entry


Sun, 31 Dec 2006



Video4Linux 2 webcam applications?

    Hi, I've spent some time poking around for a video4linux 2 webcam application which doesn't suck. All I want is something very simple -- grab a frame from the specified camera and dump it to a file on disk in a format I can use. I don't want a config file. I don't want a web server. I don't want it to scp the file somewhere. Just grab a frame.

    I can't find such a thing. I have some code myself which nearly does the job, but it's video4linux 1 and needs a rewrite. Should I just give in a write the code myself?

    Tags for this post: blog(S) toys(S)

posted at: 09:49 | path: /diary/toys | permanent link to this entry


Thu, 28 Dec 2006



Tick of death

    It's times like this that I don't mind that people make fun of me for using RAID 1+0 on my home server. One of my Seagate 400gb PATA drivers emits a ticking noise and is no longer detected by any of my Linux boxes. I don't think that's a good sign for the data on that machine. Luckily, the RAID array can run in degraded mode for a bit until a new disk arrives.

    Now to find out how much Seagate warranty support sucks.

    Tags for this post: blog(S) toys(S)

posted at: 21:59 | path: /diary/toys | permanent link to this entry


Tue, 26 Dec 2006



Jon's Nokia E61 WEP problems

    Jon is having problems getting WEP to work on his new Nokia but he doesn't have comments turned on so I can't reply to him on his blog. There are a couple of people at work who have claimed to get this working. It's not a work day today, but I will ping them tomorrow and see if I can get their instructions for you...

    Tags for this post: blog(S) toys(S)

posted at: 09:26 | path: /diary/toys | permanent link to this entry


Fri, 18 Aug 2006



OMG, Kernel modules

    So, once you've Debian bootstrapped the NSLU2 slug, there isn't any way I can see to get new kernel modules for DebianSlug. However, you can download the unslung kernel modules, unpack them and use the kernel module from that. Unpacking looks like this:

      wget "http://www.student-zw.fh-kl.de/~pasc0010/debianslug/kernel-modules/
      kernel-2.6.16_preempt/kernel-module-raid1_2.6.16-rc4-git9-r0.0_ixp4xxle.ipk"
      ar -x kernel-module-raid1_2.6.16-rc4-git9-r0.0_ixp4xxle.ipk
      tar xvzf data.tar.gz 
      cd lib/modules/2.6.16/kernel/drivers/md/
      


    And there you go.

    Tags for this post: blog(S) toys(S) nslu2(S)

posted at: 22:16 | path: /diary/toys/nslu2 | permanent link to this entry


Debian bootstrap complete

posted at: 11:53 | path: /diary/toys/nslu2 | permanent link to this entry


Belkin UPS working

    I've had some troubles with drivers for my Belkin 375VA USB UPS, not that I have tried very hard. I finally got it working today with the help of Will the intern (who rocks by the way) and only a little bit of effort, so I thought I should document it here so I know how to next time. First off, you need to install nut and nut-usb for Ubuntu (or whatever you're using):

      $ sudo apt-get install nut nut-usb
      


    Now, create a configuration entry for the USB UPS. This lives in /etc/nut/ups.conf, and mine looks like this:

      [belkinusb]
              driver = newhidups
              port = auto
              desc = "Belkin UPS, USB interface"
              vendorid=050d
      


    The vendor ID here needs to match the UPS, which for my Belkin is 050d:0375. Next, you need a upsd.conf file in the same directory. Mine looks like this:

      ACL all 0.0.0.0/0
      ACL localhost 127.0.0.1/32
      
      ACCEPT localhost
      REJECT all
      


    This stops hosts other than local host connecting to the daemon. Now, you need a upsd.users file, which defines what users can use the UPS:

      [admin]
              password = thisisnotthepassword
              allowfrom = 127.0.0.1
              actions = set
              instcmds = all
      


    Now, start the USB UPS driver. Let's start it in debug mode first...

      $ sudo /lib/nut/newhidups -u nut -D -a belkinusb
      
      rk UPS Tools: New USB/HID UPS driver 0.28 (2.0.3)
      
      debug level is '1'
      Detected a UPS: Belkin /Belkin UPS
      Using subdriver: Belkin HID 0.1
      Path: UPS.BELKINConfig.BELKINConfigVoltage, Type: Feature, Value: 120.000000
      Path: UPS.BELKINConfig.BELKINConfigFrequency, Type: Feature, Value: 60.000000
      Path: UPS.BELKINConfig.BELKINConfigApparentPower, Type: Feature, Value: 375.000000
      Path: UPS.BELKINConfig.BELKINConfigBatteryVoltage, Type: Feature, Value: 12.000000
      Path: UPS.BELKINDevice.BELKINModelString, Type: Feature, Value: 66.000000
      Path: UPS.BELKINDevice.BELKINModelStringOffset, Type: Feature, Value: 0.000000
      Path: UPS.BELKINDevice.BELKINUPSType, Type: Feature, Value: 1.000000
      Path: UPS.BELKINControls.BELKINTest, Type: Feature, Value: 0.000000
      Path: UPS.BELKINControls.BELKINAudibleAlarmControl, Type: Feature, Value: 2.000000
      Path: UPS.BELKINControls.BELKINDelayBeforeShutdown, Type: Feature, Value: 0.000000
      Path: UPS.BELKINControls.BELKINDelayBeforeStartup, Type: Feature, Value: 0.000000
      Path: UPS.BELKINPowerState.BELKINInput.BELKINVoltage, Type: Feature, Value: 1208.000000
      Path: UPS.BELKINPowerState.BELKINInput.BELKINFrequency, Type: Feature, Value: 599.000000
      Path: UPS.BELKINPowerState.BELKINOutput.BELKINVoltage, Type: Feature, Value: 1208.000000
      Path: UPS.BELKINPowerState.BELKINOutput.BELKINFrequency, Type: Feature, Value: 599.000000
      Path: UPS.BELKINBatterySystem.BELKINVoltage, Type: Feature, Value: 139.000000
      Path: UPS.BELKINBatterySystem.BELKINCharge, Type: Feature, Value: 100.000000
      Path: UPS.BELKINStatus.BELKINPowerStatus, Type: Feature, Value: 49152.000000
      Path: UPS.BELKINStatus.BELKINBatteryStatus, Type: Feature, Value: 16.000000
      Path: UPS.PowerSummary.iProduct, Type: Feature, Value: 20.000000
      Path: UPS.PowerSummary.iSerialNumber, Type: Feature, Value: 42.000000
      Path: UPS.PowerSummary.iDeviceChemistry, Type: Feature, Value: 68.000000
      Path: UPS.PowerSummary.iOEMInformation, Type: Feature, Value: 4.000000
      Path: UPS.PowerSummary.Rechargeable, Type: Feature, Value: 1.000000
      Path: UPS.PowerSummary.Charging, Type: Input, Value: 1.000000
      Path: UPS.PowerSummary.Charging, Type: Feature, Value: 1.000000
      Path: UPS.PowerSummary.Discharging, Type: Input, Value: 0.000000
      Path: UPS.PowerSummary.Discharging, Type: Feature, Value: 0.000000
      Path: UPS.PowerSummary.ConfigVoltage, Type: Feature, Value: 12.000000
      Path: UPS.PowerSummary.Voltage, Type: Feature, Value: 1208.000000
      Path: UPS.PowerSummary.Current, Type: Feature, Value: 0.000000
      Path: UPS.PowerSummary.CapacityMode, Type: Feature, Value: 2.000000
      Path: UPS.PowerSummary.RemainingCapacity, Type: Input, Value: 100.000000
      Path: UPS.PowerSummary.RemainingCapacity, Type: Feature, Value: 100.000000
      Path: UPS.PowerSummary.RunTimeToEmpty, Type: Input, Value: 120.000000
      Path: UPS.PowerSummary.RunTimeToEmpty, Type: Feature, Value: 120.000000
      Path: UPS.PowerSummary.DesignCapacity, Type: Feature, Value: 100.000000
      Path: UPS.PowerSummary.FullChargeCapacity, Type: Feature, Value: 100.000000
      Path: UPS.PowerSummary.WarningCapacityLimit, Type: Feature, Value: 30.000000
      Path: UPS.PowerSummary.CapacityGranularity2, Type: Feature, Value: 1.000000
      Path: UPS.PowerSummary.RemainingCapacityLimit, Type: Feature, Value: 30.000000
      Path: UPS.PowerSummary.CapacityGranularity1, Type: Feature, Value: 1.000000
      Path: UPS.PowerSummary.ACPresent, Type: Feature, Value: 1.000000
      Path: UPS.PowerSummary.ACPresent, Type: Input, Value: 1.000000
      Path: UPS.PowerSummary.BelowRemainingCapacityLimit, Type: Input, Value: 0.000000
      Path: UPS.PowerSummary.BelowRemainingCapacityLimit, Type: Feature, Value: 0.000000
      Path: UPS.PowerSummary.ShutdownImminent, Type: Input, Value: 0.000000
      Path: UPS.PowerSummary.ShutdownImminent, Type: Feature, Value: 0.000000
      upsdrv_updateinfo...
      upsdrv_updateinfo...
      
      =>Got 1 HID Objects...
      upsdrv_updateinfo...
      upsdrv_updateinfo...
      upsdrv_updateinfo...
      [snip]
      


    You get the idea. You can see here that it's found the UPS, and listed a bunch of information about the USB capabilities of the device. It will then sit in a loop forever checking the status for the device. Now, let's hit control C on that, and start it as a daemon...

      $ sudo /lib/nut/newhidups -u root -a belkinusb
      Network UPS Tools: New USB/HID UPS driver 0.28 (2.0.3)
      
      Detected a UPS: Belkin /Belkin UPS
      Using subdriver: Belkin HID 0.1
      


    Next, start the NUT UPS daemon...

      $ sudo upsd
      Network UPS Tools upsd 2.0.3
      Connected to UPS [belkinusb]: newhidups-auto
      Synchronizing...done
      


    Finally, you can use the command line tool to check on the state of the UPS...

      $ upscmd -l belkinusb@localhost
      Instant commands supported on UPS [belkinusb@localhost]:
      
      test.battery.start.quick - Unavailable
      test.battery.start.deep - Unavailable
      test.battery.stop - Stop the battery test
      beeper.on - Enable the UPS beeper
      beeper.off - Disable the UPS beeper
      load.off - Turn off the load immediately
      


    Unfortunately, the UPS doesn't support power cycling it's ports (which is what I was really hoping for), it only supports powering them down, and then waiting for human intervention, which is a shame. You can still shutdown the machine gracefully when things are going flat.

posted at: 09:51 | path: /diary/toys | permanent link to this entry


Thu, 17 Aug 2006



Recovering from a bad flash

    In the previous post I mentioned that I had a couple of bad experiences with the Debian installer and the Linksys upload web page. Luckily, it's really easy to recover from these. You do that with the magical RedBoot sequence (RedBoot is the boot loader the slug uses). Do something like this:

    Download the Linksys firmware from their web site. I tried this technique with the Debian installer image and it didn't work, so I only know it works with the Linksys firmware. Put that firmware on a web server on your local LAN which the slug will have access to. Then, connect to the boot loader. You do that by running this command...

      sudo arping -f 192.168.0.1; telnet 192.168.0.1 9000
      


    ...and then power cycling the slug. You'll end up with this:

      $ sudo arping -f 192.168.0.1; telnet 192.168.0.1 9000
      ARPING 192.168.0.1 from 192.168.0.100 eth0
      Unicast reply from 192.168.0.1 [00:0F:66:7D:1E:09]  10.717ms
      Sent 17 probes (17 broadcast(s))
      Received 1 response(s)
      Trying 192.168.0.1...
      Connected to 192.168.0.1 (192.168.0.1).
      Escape character is '^]'.
      == Executing boot script in 1.670 seconds - enter ^C to abort
      ^C
      RedBoot> 
      


    You have to be pretty quick on the draw here with the control C, as you have about 2 seconds to hit the sequence before the slug starts to boot normally instead. Now that you're logged in, you can download the new firmware:

      ip_address -h 192.168.1.100      The IP of the HTTP server
      load -r -v -b 0x01000000 -h 192.168.0.100 -m http /NSLU2_V23R25.bin
                                       Load the firmware file
      fis write -f 0x50060000 -b 0x01060000 -l 0x7a0000
                                       Write it
      reset                            Reboot
      


    And you should be back at the Linksys firmware. Note that you will still have the network settings that you had set before...

    Tags for this post: blog(S) toys(S) nslu2(S)

posted at: 18:29 | path: /diary/toys/nslu2 | permanent link to this entry


Slugging away

    I've been sitting on a Linksys NSLU2 for a few weeks until I time to hack at it. That time came today. The NSLU2 (called a slug) is a Linksys NAS device, which runs Linux natively. There are two USB 2.0 ports, and a wired ethernet port. The CPU runs at 133MHz normally, but that can be bumped up to 266MHz by removing a resistor from the board. Thanks for the NSLU2 Linux project you can also run your own distro on them, and do cool random things. Oh, and they're cheap at about $60 to $90 US.

    So, let's talk about the install of Debian on this thing. First off, you need to use the Linksys user interface to configure the network settings. I recommend a static IP, because otherwise it's going to use DHCP, which will make it hard to find later...

    There is a Debian installer option, which uploads firmware via the Linksys web interface, and then you run through the installation with ssh. That's a great idea, and I would be much more keen on it if it had worked. I gave it a couple of tries, and then declared it not working.

    Instead, I went for the DebianSlug image, which isn't as Debiany as the Debian installer option. Think ipkg instead of dpkg. You need to grab the firmware image, and a program called upslug2, for which you can find a source download at SourceForge. Do the normal source building thing with upslug2.

    Next, you need to grow another arm, and try the magical reset sequence, which is documented under the heading "Flashing the image" on this page. Then, run upslug like this:

      $ sudo ./upslug2 -i path to firmware image from before
      Password:
      LKG7D1E09 00:0f:66:7d:1e:09 Product ID: 1 Protocol ID:0 Firmware Version: R23V63 [0x2363]
      Upgrading LKG7D1E09 00:0f:66:7d:1e:09
          . original flash contents  * packet timed out
          ! being erased             - erased
          u being upgraded           U upgraded
          v being verified           V verified 
      
        Display:
          <status> <address completed>+<bytes transmitted but not completed>
        Status:
          * timeout occured          + sequence error detected
      
         7983f+000000 ...u------------------------------------------------------------
      


    This takes a while. Be patient, it probably hasn't crashed. Probably.

    The slug will reboot, and now you can ssh into it to play. Use the username root, and the password opeNSLUg. At this point it's a useful computer, and you can keep it like this if you don't mind using ipkg for everything and dealing with the rather limited set of packages available. If you need pointers on where to go from here, then I recommend you try a turnup help on the command line, and play with ipkg update and it s friends ipkg list and ipkg install. There are more instructions here if you want them.


    Tags for this post: blog(S) toys(S) nslu2(S)

posted at: 18:23 | path: /diary/toys/nslu2 | permanent link to this entry