The website of Ben Falconer

Power Mac G4 Cube tear-down (or build-up)

I was recently given one of the old (released 2000) Mac G4 Cube computers to play around with, if you’ve never heard of the Cube it’s probably because it didn’t do very well commercially, it was $1600 for one despite not having a huge amount going for it but the form factor.

Due to the casing these have unsurprisingly been incredibly popular with the modding community as you get a nice frame to build a modern computer within, there’s just enough space for a mini ITX motherboard, a hard drive, RAM, laptop sized optical drive and a (very) small power supply if you’re lucky.  The G4 Cube was a fanless computer and the G4 processor runs pretty hot so most of this space can be found with relative ease by removing the enormous heat sink which takes up almost 30% of the interior space and runs the entire way through the machine.

I didn’t actually think of taking pictures of this until I had already taken it to bits, so instead of showing the pictures in reverse I’m going to describe this as a build-up rather than a tear-down.

The first part is the CPU which is attached to the heat sink, I could have seperated these but I didn’t have any thermal paste handy so I thought I’d leave it attached.

The heat sink is huge, it runs the entire height of the cube and makes up a large part of the weight of the box.  On each side of the heat sink are runners that the retractable handle slides into, this is one of the neatest features about the Cube and I’m rather regretting not taking any pictures of it.

The motherboard is pretty well designed with pretty much no space to spare, a PCI slot, 3 SDRAM slots, 2 Firewire ports, 2 USB ports, PS/2 port.  The motherboard plugs directly into the white connector on the CPU, in fact at first I didn’t think that they were even separable.

A small Ethernet card also attaches to the underside of the motherboard giving it a (for the day) pretty speedy 10Mb connection.

Connecting all the parts so far onto the back panel the Cube starts to take shape.

After taking apart many standard ATX power supplies I was surprised at how small this voltage regulator board was.  This is probably half because most of the power is handled in an external power transformer leaving very little for this board to do.

The voltage regulator board plugs straight into the motherboard with a little fiddling (the back panel interferes slightly).  In this picture I’ve also connected the hard drive and the slim form CD drive to the bottom of the cube however these were fairly standard parts and I didn’t think they warranted too much discussion here.

The AGP graphics card is an ATI Rage Pro with a whole 16MB of SDRAM, a VGA port and an Apple Display Connector.  She may not look like much but she’ll run glxgears at 250FPS.

To connect the AGP graphics card to the PCI motherboard this nifty adapter was used (also taking care of turning 90°), unfortunately sources say that this won’t work on other computers (and here I was wanting to get a last bit of use out of my old AGP card!).

Attaching the graphics card via adapter and we’ve got the final piece in place before putting the casing back on.

Putting the aluminium casing back on an the cube is operational again.  I didn’t take any photos but this whole construction slides into the perspex container and locks in place, it’s not all that interesting.

I left the Cube out of its case and on the floor installing Debian.  Unfortunately the Cube came before USB booting was used much so I needed to write a CD in order to install Debian, this proved a bit of an issue since none of my computers actually had a CD writer connected at the time.

Installing Debian was also rather interesting, for some reason when it installed yaboot (a bootloader for powerpc) it failed to configure it properly meaning I needed to go in with the rescue console and sort out where it was pointing.  When I got it trying to boot the correct partition yaboot threw an input/output error accessing the vmlinux and initrd files which were in /boot/.  For some reason I have yet to fathom if I copied the contents of /boot to /toot and then changed yaboot’s config to point there it worked fine, I was quite lucky to find this fix deep in a mailing list since I was pretty stumped at this point.

Now Debian is up and running it works pretty smoothly with awesome, unfortunately Chromium is not available for the powerpc architecture at the moment so I’m using Midori instead (Firefox was way too intensive), it even runs Flash and can almost cope with YouTube (audio is full speed, video skips a lot of frames).

In comparison with a Raspberry Pi (mine should be in the post soon hopefully) the G4 cube only has a 500MHz processor (where the raspi has 700MHz) but it makes up for it with a colossal 1.5GB of RAM with all it’s slots full (about 6 times what the raspi has).

I am very tempted to mod my own computer into this, because you always need more computers!  The perspex casing is pretty heavy so I’d probably try to make something that didn’t use that and used the nifty handle (which I failed to take any pictures of) for portability, I imagine the casing would find other uses (LED cubes come to mind).

Tags: , , ,

Review/Build of 10212-1: Imperial Shuttle

I have had Tower Bridge (10214-1) for several months now and been generally quite impressed with the build in general as well as the value, given this I thought it would be nice to get some more of the collectors sets. I happened to see that the Imperial Shuttle (10212-1) was down to £200 (down from £250) in the Lego May 4th Star Wars sale and I had been admiring it for some time so I gave in and bought it.

Looking at the reviews beforehand I was rather sceptical of the “challenging construction” that reviews had claimed in this model, the same had been claimed of Tower Bridge and I had found it reasonably easy, putting it together in about 3.5 hours, which I guess isn’t bad for 4287 pieces.
The reviews also complained that the wings were fragile and that the landing gear had to be removed while the model was on its display stand; neither of these things particularly bothered me since I wasn’t planning to use the model for play and “swooshability” wasn’t much of an issue.

Despite claims from Lego that it would be late, due to the popularity of the sale, the set arrived in the post on Saturday and I opened the set claiming that I would be finished by 3am.
Due to the sale I got a free poster of the new Ultimate Collector Series R2-D2 (which I’m not keen on, I don’t think that they did the rounded body very well), a micro scale TIE fighter, and a E-3PO (silver version of C-3PO); I disregarded all of these, eager to get on with the build.

One of the first things I noticed on opening the set was that, although there are 4 instruction booklets, the pieces all come in bags sorted by type rather than according to which set of instructions you needed them for (unlike Tower Bridge and the Medieval Market Village). Due to this I spread all of the pieces out on the floor and relied on searching the old fashioned way (I almost always build on the floor due to childhood habits, though my knees are getting a bit old for it now).

I ran into a hitch on the first few instructions due to mistaking dark grey for black in the instructions; I thought that Lego had taken to outlining pieces that were black in white to prevent confusion but they were pretty indistinguishable for this set. I de-constructed the model I had so far when I realised that there weren’t any of the pieces I needed in black and rebuilt it using dark grey.

I was struck fairly soon by just how complicated the model was, the build starts you off by building the main body of the shuttle and the mechanism for winding the wings up and down, some of the steps were fairly fiddly and required you to balance a piece of Technic while you slotted a rod into place. I realised about this point that the reviews had been justified in calling this a challenging build.

As can be seen above there is a reasonably complex interior to the body of the shuttle, both for the wing mechanism and to keep the structure from falling apart.  The vertical wing slots into the red Technic pieces that can be seen at the rear of the model.

I realised now just how large the model was going to be, the pictured part was around 250mm across and, by my reckoning, there would be at least that again on either side for the side wings.

The vertical wing is the first to be constructed, using the new style Technic beams (the ones without studs on top) for structural stability and using various types of pegs to hold a standard bricks in place.  The whole construction is then slotted into the top of the body of the shuttle.

Continuing to build up the wings confirmed to me that this model is absolutely huge, when I slotted the vertical wing into place it bested the height of my coffee table which isn’t exactly small:

The side wings are constructed similarly to the vertical, but with more fiddly bits, some of the first pieces have to be balanced for several instructions until they are held in place securely.  Apart from being fiddly the wings are reasonably standard to make, although you do have to follow mirrored instructions for each which, although I didn’t mind, might discourage some builders.

I was quite worried about how strong the wing connections would be since the wings are quite big and connected wholly in the space of three studs but they seem to hold ok.  The cogs to adjust the wings seemed to slip a little before I had put all the pegs in but afterwards they worked fine.

After the wings are connected you build various guns around the shuttle and the display stand.  It turned out that at some point in the build I had once again mistaken dark grey for black in the instructions and so I had a 1×4 plate that was the wrong colour that I needed to use in the display stand.  Given that it was at this point about 4:30am I couldn’t bear the thought of tearing the shuttle apart to find the rogue black piece so I just used the dark grey one in the display stand; at least it wasn’t too obvious.

I finally finished construction at around 5am and moved the shuttle to the kitchen bench before heading to bed.

All in all I thought it was a pretty enjoyable build.  The instructions could use a little clarification and I won’t underestimate a set like this again, the total build time was about 5 hours (for 2503 pieces) compared to Tower Bridge (about 3.5 hours for 4287 pieces).  The set is huge, it can be seen above towering over Tower Bridge.  I would definitely recommend it to advanced builders if you want something challenging, great value for money in terms of build time.

Colossal Castle IX entry

This is one of the pieces of Lego I made with the many sets I got for Christmas this year.
I happened to notice that Classic-Castle.com was having a competition so I thought I’d give that a shot.

This was designed for the “Hidden Treasure” category, the premise is that two dwarves are re-exploring a long forgotten mineshaft.

There is a light element which theoretically makes the gem at the bottom light up but in practice it’s far too dim and most of the lighting down there was done with a Maglite.

Tags: ,

Net

While I was bored a few days ago I thought I’d have a look at how terminal based GUI applications work, as I was wanting to see the nitty gritty of it I decided that it would be more educational to work directly with ANSI codes.

The project I ended up with was writing a terminal based version of the game Netwalk, probably best known from Simon Tatham’s Portable Puzzle Collection. This was inspired by playing around with the box drawing characters, making a grid and thinking, “hey, that looks like Net!”

Thus, I have created a fairly simple version of the game, the source is on my GitHub page. If you want to try playing it then you can download it from there and compile it with g++. Alternatively if you have an account on codd (the Warwick compsoc server) then you can run it directly from /home/zed0/programming/net/netgame .

The game seems to run without issue through PuTTY, on the condition that you are using UTF-8. The only other configuration I’ve tried it with is Cygwin, which compiles and runs fine, however, assuming you’re using the default Cygwin terminal, you’ll need to change the font to one which has the box drawing characters.

As this was made in the space of a few hours there are quite a lot of improvements to be made.
My current todo list includes:
Adjusting the drawing methods so that it only updates the bits of the screen it needs to.
Adding wrapping as the game is fairly trivial without it.
Writing a better map generation algorithm.

On that last point I haven’t really got many ideas. Writing an algorithm to generate a tree which takes up the entire map is fairly trivial, however I have no idea how to ensure that the map has a unique solution which would be desirable. If any mathsy people know how to do this then please comment.

Feel free to suggest other features or report bugs. Multiplayer has been suggested, which I may, at some point, try to implement.

WPA Enterprise networks on rooted Android 1.6

So I spent a while in DCS (Department of Computer Science) today trying to get my phone to connect to the network.

For some reason on the Cyanogen ROM I’m using at the moment (I don’t know about the official 1.6 build) wireless certificates were failing to install properly. They appear to install fine, however the drop down for certificates still shows no entries when one tries to connect to a network.

The easiest solution (at least for users with root access) to this appears to be to transfer the certificates to ones SD card and then edit the file /data/misc/wifi/wpa_supplicant.conf to add a new network.
Assuming one is connecting to the wifi in DCS this looks something like this:

network={
    ssid="dcs_wl"
    key_mgmt=WPA-EAP
    group=CCMP TKIP
    eap=TLS
    identity="csuxxx"
    ca_cert="/sdcard/root.der"
    private_key="/sdcard/csuxxx.p12"
    private_key_passwd="blah123BLAH"
    priority=11
}

If one tries to connect beforehand then there will already be an entry for dcs_wl which can be edited.

Voila, it now connects automatically.

From what Chris Sinjakli has said, he found connecting to the network significantly easier so it may well be that more recent ROMs don’t have this problem.

Easter Lego

During the Easter holidays I found myself rather bored at points, thus, given the amount of Lego in my room, I did the only logical thing:

As usual sorry about the quality of the pictures, I’m terrible at keeping my hand steady for them.

I’m not sure what I was expecting when I started making this, it looks rather more like it’s from Bioshock than intended. I also didn’t expect it to be this yellow, but then realised I didn’t have enough dark grey pieces.
I have actually made quite a few Lego models over the last couple of years, I’ll probably blog about them too before too long.

Minamicon Pictures

I went to Minami Con in Southampton last weekend which was a nice break before my term of horror.
Here are a few photos (sorry about the quality, I can’t keep my hand steady while taking shots):

If you want more pictures then there are quite a few here on Facebook.

Tethering on Debian

Rooting an android phone allows one to use several methods of tethering (using the phone’s internet on another device) including USB, bluetooth and wifi.
I have only tried wifi tethering and USB tethering so far but I imagine I will get round to trying bluetooth sometime.

Wifi tethering is simple, if your phone is rooted then you can simply get android-wifi-tether , open the application and touch the icon in the centre of the screen, this will create a wireless access point which you can then connect to with your laptop. I had no problems at all with this using Debian lenny. There are various options for access control and encryption and it works fairly well. The main downside to this method is that it uses a horrific amount of power, meaning I usually need my phone plugged in anyway.

USB tethering is provided with CyanogenMod and many other popular roms and is in most respects better than wifi tethering if you have a USB cable. To start tethering just turn on USB tethering in Settings > Wireless controls > Internet tethering. Connect the laptop via USB cable and depending on what OS you are using it may just work or it may take some setup.
I haven’t tried Windows XP but I believe that you can just install either the android SDK or a separate RNDIS driver, apparently later versions of windows come with this.
I have heard many people say that it just works with Ubuntu, however with Debian I couldn’t find any packaged drivers but found that the RNDIS drivers from SynCE worked fine
Download http://downloads.sourceforge.net/synce/usb-rndis-lite-0.11.tar.gz

tar -xvzf usb-rndis-lite-0.11.tar.gz
cd usb-rndis-lite-0.11/
make
sudo ./clean.sh
sudo make install

I found that network-manager picked it up immediately, though if you don’t use network-manager you may need to do:

ifup rndis0

I’m looking forward to trying this out for a longer duration on my 7 hour train trip back to Warwick on Wednesday.

Installing Debian on a G1 (HTC Dream)

I bought a G1 in November having heard good reviews of them from the few people I knew who owned one and pleasantly surprised at how easy it was to type on the keyboard, which was the main problem I had had with iPhones.

Anyway, I haven’t really done much messing with it until the last couple of weeks when I discovered myself very bored while at home for the Easter break. Having heard it was possible a while ago I started off by rooting the phone and installing CyanogenMod (instructions here for those of you who want to try it), a replacement for the default Android installation, adding a features that haven’t been pushed down the line by vendors yet and a few extras such as the ability to store apps on the SD card, USB tethering and various Unix commands.

Having rooted the phone I was curious as to what I could now do and found it mentioned that it was possible to install Debian in a chroot since it already supports ARM EABI. I partially followed this post by saurik but came across several issues and shortcuts due to using CyanogenMod.

Here are some brief instructions to get Debian working on CyanogenMod:

Making a Debian image
To avoid having to partition my SD card (I use it for various other things) I created a mountable image as follows (assuming you are running Debian on your computer too), to avoid confusion I also add an sdcard directory here that the sdcard will later be mounted in:

apt-get install debootstrap
dd if=/dev/zero of=debian.img seek=749999999 bs=1 count=1
mke2fs -F debian.img
mkdir debian
mount -o loop debian.img debian debootstrap --verbose --arch armel --foreign lenny debian http://ftp.de.debian.org/debian
mkdir debian/sdcard
umount debian

As CyanogenMod comes with the Linux filesystem drivers and busybox you don’t need to worry about adding them which means a large portion of saurik’s instructions can be skipped.
Mounting the Image
Mounting the loop device caused some problems but I eventually found that it was looking for the loop devices at /dev/block/loop* rather than /dev/loop* which was fixed by adding a few ifs to the start of the mounting script.

#!/system/bin/sh
if [ ! -e /dev/loop0 ]
then
	ln /dev/block/loop0 /dev/loop0
fi
	if [ ! -e /dev/loop1 ]
then
	ln /dev/block/loop1 /dev/loop1
fi
if [ ! -e /dev/loop2 ]
then
	ln /dev/block/loop2 /dev/loop2
fi
if [ ! -e /dev/loop3 ]
then
	ln /dev/block/loop3 /dev/loop3
fi
if [ ! -e /dev/loop4 ]
then
	ln /dev/block/loop4 /dev/loop4
fi
if [ ! -e /dev/loop5 ]
then
	ln /dev/block/loop5 /dev/loop5
fi
if [ ! -e /dev/loop6 ]
then
	ln /dev/block/loop6 /dev/loop6
fi
if [ ! -e /dev/loop7 ]
then
	ln /dev/block/loop7 /dev/loop7
fi
mount -o loop,noatime -t ext2 /sdcard/debian/debian.img /data/local/debian/mnt
busybox mount -o bind /sdcard /data/local/debian/mnt/sdcard
export PATH=/usr/bin:/usr/sbin:/bin:$PATH
export TERM=linux
export HOME=/root
export USER=root
busybox mount -t proc none /data/local/debian/mnt/proc
busybox mount -t sysfs sysfs /data/local/debian/mnt/sys
busybox mount -t devpts devpts /data/local/debian/mnt/dev/pts
if [ ! -e /data/local/debian/installed ]
then
	busybox chroot /data/local/debian/mnt/ /debootstrap/debootstrap --second-stage
	touch /data/local/debian/installed
fi

I saved this script as mountdeb.sh and the debian.img file in a folder called “debian” at the root of the SD card and mounted it on my G1 again.
I used a terminal emulator (search Market for Terminal Emulator by ZTA Technologies). First to enable things like tab completion and command history I changed the initial command (done through the menu in the Terminal) to:

su -c "busybox sh"

which nicely drops you in busybox as root instead of the poor implementation of sh that android comes with by default.

Running:

/sdcard/debian/mountdeb.sh
chroot /data/local/debian/mnt/ /bin/bash

drops you into bash in your shiny new Debian installation from which you can use apt-get to install whatever you feel like.

Automating the Installation
Since I didn’t want to have to type the above into the phone every time I wanted to use Debian on my phone and I also much preferred being able to use ConnectBot to access it I automated starting it as follows:

First I installed the dropbear ssh server onto the Debian install:

apt-get install dropbear

This allowed me to either ssh to localhost from the phone or ssh in from my computer, which I was quite glad of after typing on the small keyboard for a while. Next to automate it.

Cyanogenmod provides facilities for auto running scripts using /etc/init.d/ however these all get run before android mounts /sdcard which means that we can’t run our script at this point unless we mount /sdcard ourselves (which does work but it means that none of the applications on the phone will be able to access /sdcard (I think there may be a way to change this by messing around with permissions but I haven’t tried it yet)).

Since init.d ran things too early I found an autorun application called Phone Prioritizer (available here (put the .apk in the attached zip on your SD card and open it with the package installer. Unfortunately you have to register on the XDA forums to get it), not on Market for some reason) which allows a script to be executed once the system has started up (Broadcast the BOOT_COMPLETED intent), it also had some options for running cron like scripts but I disabled these for the moment. To start the Debian chroot I edited /sdcard/phonePrioritizer/afterboot.txt (the file it checks after booting) to read:

busybox sh /sdcard/debian/mountdeb.sh
busybox chroot /data/local/debian/mnt/ /usr/sbin/dropbear

Rebooting the phone I found I could immediately ssh in using ConnectBot on the phone. Some simple certificate setup later and I didn’t even need to type in a password from the phone to itself. :)

If anyone tries to follow these instructions let me know if you have any problems.

Brief update

Over the next week or so I’m planning to make a few posts about my trip to Canada over the summer, especially if I can find all of the pictures.
At the moment I’ve got a maths exam though so I’m going to have to you all with a picture and write about it later.leave

(click to enlarge)

Edit: So, I rather forgot to do this, but here are the photos that I meant to post back when I wrote this post: http://zed0.uwcs.co.uk/Misc/Canada/