2007-01-17 23:46:30 (in Berlin, Germany)

AVR-235, Updated reference

I have to update my reference. Video 1 is now connected to the old VCR and Video 2 is the TV card (mostly because the buttons on the remote are labeled accordingly). The self-learning/programmable remote control of the AVR is great but lacks support for the old VCR. Bummer.

Interestingly the composite connector of the AVR-235 doesnt work with the signal from the VCR's SCART cable. With a simple converter-plug to S-Video it works on the other hand. Strange. While the TV card is connected with S-Video itself to the AVR I have to select "Composite1" as the video source (or otherwise only black and white video is shown). All this analog technique is very strange.

Anyway, why connect an old VCR? Someone gave me a VHS tape with Steven Spielberg's Duel (1971). Definitly worth to watch for various reasons.

Oh, I replaced the front sattelite speakers with my old Grundig HiFi Box 5500 speakers. Their larger volume is better suited for music playback. The HKTS speakers are not very well fit for that. Seems audio people in the internet are right after all :) Perhaps I should replace the other sattelites as well and only keep the HKTS' impressive sub.

Boring, aint it...

Posted by Raimund 'Raimi' Jacob | Permalink | Categories: english, Technical Fun, Talking Movies

2007-01-14 22:49:13 (in Berlin, Germany)

New audio toy, finally

Finally, I've managed to make a dream come true for me. I invested some money I saved in a home cinema system by Harman/Kardon. It's based on the AVR-235 A/V-Receiver which puts noise with up to 50W to 7.1 speakers. I use only 5 speakers and the giant subwoofer of the HKTS 7 set. Content is delivered by a DVD-47 also by HK (which other company uses this acronym? Dont even think about it).

Hooking up the AVR is pretty flexible so I need this spot as a reference for my configuration:
  • The DVD player is connected with S-Video, Optical 2 and Coax 1. I use optical, usaully - just bough the coax cable accidentally.
  • My SB Live is connected with analog 5.1 to the only analog input called 6/8 channel direct. This allows multichannel output from the computer but disables any DSP processing in the AVR.
  • The on-board sound card is connected to Optical 1 but not configured and untested. Will be interesting.
  • The TV card is both connected to line-in of the SB and to Video 1 of the AVR. This allows for Dolby decoding of TV audio and provides emergency TV audio in "computer mode".
  • The video output of the AVR is is connected via S-Video with the TV card. To watch a DVD the xawtv input source has to point there and the AVR has to be set to DVD. Note: Do not confuse with TV mode where the video signal is not passed through the AVR so the OSD doesnt work there.
  • I should hook up the old VCR to Video 2 for the fun of it and perhaps some other audio-capable devices (Apple SE, Sun Sparc) to Video 3 and 4. Let's see...
The sound quality is great. My ears aren't used to anything but this is the best audio equipment I ever had. And it looks cool, too.

A note to the music industry: Mark my words: I will _never_ buy a SACD or DVD audio. This is really too bad, because I have all these great audio devices that use lossless digital connections. But for some reason the DVD player is only allowed to playback SACD/DVDA (which is multi-channel capable) via a lossy analog cable. As far as I understand it, this is a restriction specifically wished for my "content providers" (or those who call themselves that). Now, this wouldnt be more than an inconvenience with some proper cabling, but there is only one 6/8 channel input - and I need that one for my primary entertainment device (which accidentally is controlled by me).

Posted by Raimund 'Raimi' Jacob | Permalink | Categories: english, Technical Fun, Life, Talking Movies

2006-10-29 22:12:02 (in Berlin, Germany)

Update: Low power/noise appliance

PS: I had to move the MySQL database(s) away from the hard disc, too. Turns out that the InnoDB backend writes something every hour and a half or something, even when the application is idle (some kind of check- or savepoint, I guess).

There are still some unaccounted spin-ups that are hard to track down. To get to the bottom of those one requires some tool that can tell when the discs turned on. Together with the respective timestamps a pattern should show. Does anyone have an idea? Perhaps there is a SMART attribute indicating something related to motor movement (I know there is a spin-up time that probably changes a little everytime the disc turns on).

PPS: When I described the hardware of the machine, I forgot to mention something rather annoying: It runs out of random bits. The symptom is a blocking /dev/random device (which produces good random bits) which in turn makes exim block for long amounts of time when delivering mail with SMTP/TLS. Test your entropy:
 cat /proc/sys/kernel/random/entropy_avail
It usually shows values between 3000 and 4000 but on blackbox it frequently goes down to 0. The reason seems to be that the entropy is largely derived from hardware interrupt timings but leaving out sources that might be controlled from the outside (NICs, they say). This excludes most of the IRQ sources on this host (the HDDs are intentionally left idle most of the time).

The workaround is to make the applications use /dev/urandom (which produces pseudo-randomnes). This is actually bad but the only usable solution. I do the switch globally with a symlink which sometimes is reset by a Debian update.

Posted by Raimund 'Raimi' Jacob | Permalink | Categories: english, Technical Fun, Linux

2006-10-01 21:44:55 (in Berlin, Germany)

Low power/noise appliance

(I would've loved to call this article "Silence of the LAMP" but the machine in question is not primarily a webserver - and I have some issues with the M and P part, but that's yet another article).

As noted below I updated my dialup gateway a couple of days ago and I wanted to follow up with some additional information on how to tweak a machine like that. First some technical details: It's based on the VIA Epia platform with a 1 GHz Nemiah CPU (C3) in a small barebone case with a 200W power unit (ITX, i think). It has 512MB of RAM, 2x160GB HDD as a RAID 1 (mirror). The only PCI slot is filled with an active ISDN card (AVM B1). The board itself is pretty cool for dialup servers, because it has two ethernet NICs (via-rhine) and not much other gimmicks you wouldnt need anyway (audio, several USB ports, even some GPIO stuff which isnt documented, afaik).

Design goals

The machine is to serve my general needs in my home network: give me internet access and protect me from it. It is hooked up to my DSL-modem and ISDN-terminator and works as a masquerading gateway (aka nat) and firewall. It serves my workstation and various other hardware from my museum and whatever friends bring. Mainly DHCP, DNS, Samba shares and a printer, NFS, lpr-printing, internal web server and some special purpose applications as well as shell access when I'm not home.

It is up 24/7 and it is located in my flat. So it has to be as quiet as possible, consume as little power as possible and still be there when I need it.

Hardware choice and preparations

Most consumer hardware is not meant to be running 24/7. Also most people dont want to have a 19" rack in the kichen (I wouldnt mind actually, but i dont have the space). So I went for Epia for its small form factor and because it is meant to be used for appliances like mine. CPU power is not what you would expect from 1Ghz (feels more like 600Mhz on a PIII), but this box is not meant for number-crunching anyway.

For reasons mentioned below the hard disk is a RAID of two mirrored drives. If possible, use drives that are meant to be used in servers. Consumer disks _will_ crash sooner than later (i learned this the hard way). The little extra fee is definitly worth it. Still, a single drive is too dangerous, even monitoring it might not give an advance warning before failure. I have the linux software raid setup on virtually all of my machines now (should I write about it?) and I did play the disk-failure game more than once. Dust is a serious problem for long-running hardware, especially in my flat. The fans dont like it and it makes the interior ugly. The case I use has a grill in the front panel which I vacuum once a year and the little holes on the side are covered with nylon stockings from the inside. Pretty effective as shown here. To reduce case vibration I applied some fragments of sealing strip (about 6, 1cm each) between the frame and the cover. Makes closing the case a little tricky.

Reduce power consumption

Not only for economical reasons is a reduced power consumption a good idea. Energy produces heat which has to be transported out, which requires noise fans (I will leave the philosophical and ethical aspects of energy consumption as an exercise for the reader).

IMHO, there are three main factors that determine energy consumption of a setup like this. First, there is the total amount of energy needed for all related devices. Second is the CPU and third is the hard disk.

When optimizing a setup like this people tend to forget all the little devices we have in our flats that all have a small power converter and constantly need something simple like 5 or 12V DC. Both of which are readily available from the power supply unit of a normal PC. Reducing the number of power units involved reduces the wasted energy because each unit works much less than 100% effective. Also, most PC power units work most effective when they are used with about 80% of their designed output. So adding a device or two is no problem or even a good idea. I hooked up my DSL modem to the machine serving the internet (I dont need the one without the other, when one device fails there is no further reduction of quality-of-life). Another candidate would be the base of the cordless phone that is in the vicinity anyway. The images here show a little adapter that provides 12V DC via a standard plug. The device could convert it to other voltages, too, but I wouldnt trust that cheap little thing too much. I cant even find it in the online shop I bought it anymore (perhaps it turned out to be too dangerous :). But you can tap into the power cables directly or even use some mA from the USB ports (as all those silly gadgets at ThinkGeek do).

Reducing CPU power (consumption)

Most modern CPUs have ways to reduce their power consumption by reducing their speed and by lowering their core voltage. My C3 processor does that with the 'longhaul' kernel module. I use the powernowd to measure CPU utilization and react accordingly. There are more sophisticated approaches but this one is easy to set up and effective without being too intrusive.

Results and current speed are visible in /proc/cpuinfo directly. The idle machine runs at 665Mhz but as soon as something CPU intensive (like compiling a kernel) is done, it goes back to 1Ghz. Keep in mind that such a machine is idle about 99% of the day, it only does some simple tasks when I'm actually at home, awake and using my workstation - and even then it's usually bored.

Reducing hard disc noise

Now, this is probably the most interesting and challenging part of this operation. As stated above the machine is idle most of the day so it is only logical that it should turn off the hard disk motors during that time. This sounds simple because modern drives have built-in logic for that. The problem lies in making sure that nothing happens on the drive when the machine is basically idle. This turns out to be pretty difficult.

First you have to have enough RAM so that everything the running services need end up cached. This is no problem nowadays, the 512MB are plenty (the old box had 96MB and about the same services). The most important thing to do is to mount all filesystems with noatime. It's a little known fact that the filesystem not only records the creation and last-modified timestamps of each file but also when it was last accessed. This way even read-only (and eventually cached) file operations result in traffic on the drive (observing users might notice a short blink of the HDD LED about every 5s). The noatime mount option turns this off.

The next logical thing is to make all running applications stop writing when they are idle. This is mostly syslogd -m 0 to disable the useless "MARK" lines in /var/log/messages. This trick was enough for my old box to send the HDD to sleep most of the day. Unfortunately the new services make it virtually impossible to have silence in /var/log and /var/run - most notably samba which maintains endless databases and logfiles of what is happening on the wire (interesting how much traffic a single redmond-OS host can require to not-use a share and a printer on a samba host). This felt like a dead end.

The solution comes in form of silent, solid state, non-volatile memory: cheap USB 2.0 flash rom sticks. I use one with 1GB - a joke compared with the 1GB my old box had as a HDD. For a simple appliance you could pack the entire OS installation with room for a decade of logfiles on a 2 or 4GB model. This would work even internally with an adapter like this and a compact flash device.

As indicated above, /var/log is not enough to put on that flash memory. The entire /var filesystem on the other hand would be too much because it may contain stuff that grows large: /var/cache/apt for all the downloaded Debian packages and /var/lib/mysql for some local databases. So I put those in /varhdd and bind-mount them to their old place (so that I do not have to reconfigure the services or remember the fact). The fstab contains this:
 /dev/sda1       /var            ext3    noatime,errors=remount-ro 0       0
 /varhdd/cache/apt /var/cache/apt none   bind 0 1
 /varhdd/lib/mysql /var/lib/mysql none   bind 0 1
Of course: USB core and mass storage have to be built into the kernel and the mount points have to exist on the out-sourced /var filesystem.

(Oddly enough this even works with /var/cache/apt being exported via NFS to the other Debian hosts. Seems bind-mounting is different from re-exporting mounted filesystems which works not that easy.)

It may be necessary to find other locations that are written by your applications. I used a crude approach like this (because the lsof manpage would have taken longer to read):
 lsof | sed 's/^\([^ ]*\).* \([^ ]*\)$/\2 - \1/' | sort | uniq | less
To configure the disks to spin down, hdparm has to be set up (/etc/hdparm.conf) for each drive:
/dev/hdc {
        mult_sect_io = 16
        write_cache = on
        dma = on
        spindown_time = 240
}
Read the manpage for the parameter format, it's silly. Those 240 means 20 minutes which works for me. Making it too short results in too many spindown/spinup cycles, making it too long wastes noise and energy.

Conclusion

So far it works. I am yet to measure the actual power consumption of the idle and busy setup which would allow me to calculate how much it actually costs per year. But perhaps I dont wanna know :)

Also, when the disks have to spin up, the i/o-operation can take up to 12s to complete (or even start). So a little patience is required to log into the idle machine.

Finally, the box is not completely silent, yet. There are still three fans: A large one in the power supply unit and two small ones in the case and on top of the CPU. I cannot tell if they are all temperature controlled or if I have to do anything about it. I'll have to experiment with lm-sensors (and the vt1211 module) some more.

Posted by Raimund 'Raimi' Jacob | Permalink | Categories: english, Technical Fun, Linux

2006-09-17 23:42:57 (in Berlin, Germany)

Finally - an update

It is done. I replaced a machine that was scheduled for demolition for years. The gate went into service around September 1998 to be my ISDN dialup masqurading/NAT gateway to the outside world (with bind8, dhcpd). It was also a vbox-based answering machine and an ermergency X terminal (in the hall).

It was based on SuSE 6.4 or 7.0 and ran with Linux 2.2.21 since about June 2002 and was upgraded for DSL somewhen. It was powered with a 133 Mhz Pentium, 96MB RAM, had a 3-COM and a ne2k NIC (the RTL-8139 committed suicide), an AVM A1 (Fritz) passive ISDN controller (ISA), and an ISA board with 4 additional serial ports (totalling 6 for one Wyse terminal and a mouse). It was rebooted only for kernel upgrades and about once a year for a .25 second power outage the local power company seems to like. The VGA board stopped working around mid-2004 (with the BIOS actually beeping on reboot because it couldnt find it anymore).

Ever since about March 2004 I was waiting for the 1 GB Quantum Fireball HDD to crash and force me to move to other hardware. The disc had an automatic spin-down and was powered off most of the day, which seems to have increased the life expectancy. However, back in the day this Fireball was known for being easily damageable.

So for 2 or 3 years I was literally waiting for the machine to fail. I bought a replacement already (blackbox based on a VIA Nemiah barebone) but had to replace the Maxtor disc already, losing all data without prior waring (smartmontools where running).

Since yesterday blackbox is serving NAT and other stuff (DNS, dhcpd, printer, NFS, Samba for the guests, ISDN (AVM B1 active card) and whatnot alone. I had to switch so that I could have VPN access to some place that uses un-tunnelable protocols.

Lessons learned: (1) There's life in the old dog yet. (2) Never touch a running system (3) ...unless you have to.

I just _know_ the prematurely switched-off hardware will seek revenge. gate was still good and it knows it. I'm so afraid. I will post funeral photos once I get myself a mask. There's enough dust in and around the case to feed several billion mites for a decade.

Posted by Raimund 'Raimi' Jacob | Permalink | Categories: english, Technical Fun, Linux

2006-06-17 17:43:22 (in Berlin, Germany)

ASCII and Pixel garbage

So, more stuff nobody needs (and that imply legal problems): These people demonstrate again what you can do with aa and too much time on your hand. As you see, you can watch the world cup with xawtv or telnet - I hope the GEZ doesnt get funny ideas.

Talking about funny ideas, a (still) big german tabloid has problems reading geographical coordinates which made me try Google Earth, that is now eventually available for Linux. The image below shows the spot Angelina Jolie has tattooed on her arm. I should've looked in the IMDB first - it says this is where her adopted children come from. I hope it's not the actual meadow on the airport.

Now let's see if showing Google Earth images is legal :(

Posted by Raimund 'Raimi' Jacob | Permalink | Categories: english, Technical Fun, Life, As seen on the Web

2006-05-29 22:37:01 (in Berlin, Germany)

[blatant advertising] Go, get Qucs !!!

It is done. Stefan released version 0.0.9 of Qucs today - the Quite Universal Circuit Simulator. Michael, Stefan and the translators worked hard to pack this release with cool features I cannot understand as a stupid computer scientist. I just did the CVS- and compile-test slavery :)

However, with Qucs you get a free (as in speech) analogue circuit simulator with a real nice GUI and a powerful backend. You can use it for educational purposes and real-life work. Mixing the GUI with FreeHDL 0.0.2 (the release has beed made but the file does not show up anywhere, yet), you get a nice pure digital simulator as well. Man, would I have loved that back in first semester when we worked against those archaic tools I already forgot the names of (chipmunk? diglog? analog?).

Best thing is: Qucs runs about everywhere, even on this silly OS (*.exe downloadabe from sourceforge). And even on the other silly OS, too -- once someone compiles/packs it again. I hope the Debian and FreeBSD maintainers pick the release up quickly, so it becomes available to the rest of the world. In the meantime and thanks to the autotools:
 ./configure; make; make install
If you have multiple CPUs/CPU cores (for example):
 ./configure; make -j 4; make install

Posted by Raimund 'Raimi' Jacob | Permalink | Categories: english, Technical Fun, As seen on the Web

2006-04-27 09:58:39 (in Berlin, Germany)

Quite Universal Character Stuff

As most of you probably dont know (nor care), I'm a proud supporter of the free (as in speech) Qucs circuit simulator. Although my contribution is mostly motivational and simple (I perform CVS commits for a main developer who doesnt have proper internet access) and I'm a software-guy, I can clearly remember how much I could've used Qucs during my studies of computer science.

Feedback indicates that Qucs is used by some educational institutions already, which is good for the students, because nobody really wants to use SPICE. Now, Stefan found this Japanese introduction to Qucs (try the link again if it doesnt work).

I have to say: Japanese looks really cool :) And this proves that Qucs is used not only by the guy who translated it to Japanese but also by others. Unfortunately, this also disproves my not caring for translations (because they are mostly bad and/or wrong). But perhaps that's a good thing, too.

Posted by Raimund 'Raimi' Jacob | Permalink | Categories: english, Technical Fun, As seen on the Web

2005-12-19 00:00:01 (in Berlin, Germany)

Blinken Helmet

Berlin is a dangerous place for bicyclists like myself. For improved security I upgraded my helmet. Shown here is Mark II, which adds a blinking Smiley on top of the battery casing (which used to be a backlight). The 4 big red LEDs belong to a helmet set which broke due to a design mistake. I originally dismantled the backlight and removed the LEDs. The 4 helmet LEDs (which are glued to it using silicone) are connected to the 3 outlets of the backlight.
The Smiley was added parallel to one of the LEDs. The Smiley itself is a cheap christman-fair accessory featuring 5 blinking LEDs (two red, two green, one blue). It used to be powered using two 3V button cells). Since i usually use the blinking mode of the backlight, I added a 2200 uF capacitor which provides a more stable voltage source for the blinking Smiley. It usually blinks the left and the red eye in red now.
This whole thing would be more fun when I added some blue or white LEDs pointing forward. I also need a bigger power supply. Those not-really-3V of the two R3 rechargeble batteries are not enough. Stay tuned.

Posted by Raimund 'Raimi' Jacob | Permalink | Categories: english, Technical Fun

2005-12-05 10:44:17 (in Berlin, Germany)

Correction

Please note that it was all Katrin's idea to start case-modding. It was also her idea to create an electric picture frame. This statement is entirely voluntary.

Posted by Raimund 'Raimi' Jacob | Permalink | Categories: english, Technical Fun, Life

2005-12-03 23:13:24 (in Berlin, Germany)

The electric picture frame

My good old Dell Inspiron 7500 has served me well for about 5 years but now it went the way of all the Dells: The right hinge broke. The machine itself and above all the display are still good, though. It's a Pentium III with 600Mhz, 256MB RAM showing photos at 1400x1050. So it seemed only logical to mount this thing to the wall so it can show pictures or videos when guests are around. Also it would be nice to have a terminal near the couch (for emergency internet access).
I dismantled the display cover so that only the panel was left. This wasn't easy because it is both screwed and glued into the cover (which i now have left, btw). The pieces of cork are used for the hot-melt adhesive to attach the back of the panel to the bottom side of the body.
This picture shows the plexiglass plate that holds everything together. The keyboard is screwed to it as well as the body itself. The mouse buttons had to go because they came out too much. The power switch is still on this side of the machine because i would've had to dismantle the body itself to move it somewhere else (it's a microswitch on a little board). Also the keyboard is a little leaning because it is not rectangular and also the cable is too short for a more comfortable position. I consider case-modding of laptops to be a more advanced topic (especially for the handicraft-challenged like me). However, the next laptop should be completely dismantled and rebuilt in a very different way.
I had to place new network and power sockets for the picture frame, but that's worth it. What's left to do: Automatically make it start a logged-in X session with free access from my local network. Use cases have to be defined (play a CD/DVD/mp3, show/download pictures from a flash medium) and scripts should automatically launch the required applications. Also the X server should get red of the screen saver.

Posted by Raimund 'Raimi' Jacob | Permalink | Categories: english, Technical Fun

2005-11-23 20:51:07 (in Berlin, Germany)

ctrl-z

When i took nikita out of service (replaced by livsfare) i had some spare parts which were just too good to be thrown away. Also, Katrin and I wanted to try some case-modding so we started what should become this: The complete set of pictures is here. Here are some details. Rationale:
  • Put it in the spare suitcase
  • Use leftovers
  • Gather tools and experience for other projects
  • It should do something useful
  • Make it look good
  • Let it glow
  • Make it orange
The reason for the last two items is this: You can buy lots of case-modding equipment, but only in the standard LED colors red, green, blue and white. Orange is another standard LED color, but there is no case-modding equipment in orange.

The idea

First, there was only the rough idea of the aluminium suitcase. The question was if board and power supply unit would fit. Later we discovered two things: Firstly, the actual mainboard from nikita was bigger then the broken victim-board we used for all tests. Secondly, the suitcase isn't much of aluminium. It's basically chipboard laminated with a shiny metal film. That's why it's so cheap (something like 10 Euro). But it is easy to be dealt with, sawing and rasping is easy.

First steps

The old hardware had to be cleaned because it was growing dust puppies already. The guts of the suitcase were removed and painted orange. The CPU fans and little plastic thingies we tought could carry the mainboard were sprayed orange (which didnt turn out very well).

The Glowing

The most interesting part was to stuff as many orange LEDs into as we could (afford and manage). The building block and limiting factor are LED stripes which we thought would easily carry our normal 5mm LEDs. But we didnt read carefully: Those stripes are meant for SMD LEDs. At least hey came with a collection of suitable SMD resitors. So we ended up drilling 0.8mm holes into the stripes (after some attempts you just know how wide 2.54mm is). One side of the stripes were sprayed orange,too (guess which one).
Then followed some soldering and goofing around (check the gallery). Light is so much fun.
144 LEDs switched like this (4 in a row, all blocks parallel) use up about 13W of power (1.1A at 12V). Yes, this is surpisingly much if you consider that the entire machine runs at 80W (120 when booting).

Putting everything together

A (part of a) peanuts can had to serve as an exhaust pipe for the power supply unit which is glued and screwed inside the case. . The picture to the right shows what carries the board now. M3x25mm screws hold those metal thingies and the board. The socket for the 230V power supply was a little difficult because i wanted it well protected with heat schrink tubing - which of course shrinks while you are soldering. That took me nearly have an evening until i was satisfied with the result.
Then there was a mean surprise: Not only was the dummy board smaller than the real one, it also had the AGP slot at a different spot. That was actually new to me: The AGP slot may be the first one one the board, but it's not neccessarily the first opening in the case. There was another small surprise. A 5mm LED doesnt fit in a 5mm reflector case. There is a small ring that needs to be rasped off. I love this little power tool.
the 4 HDDs are screwed to 2 plexiglass plates which in turn are screwed to the suitcase. Changing a HDD is not easy, but i don't indend to do that anytime soon.

Turning it on

Long story short, eventually we could turn the thing on with this extra cool protected switch (the cap itself costs more than 6 Euros). See the gallery for some more pictures.

Software and Usage

The machine named ctrl-z runs Debian sid. It has two 800 Mhz PIII processors, 768 MB of RAM and 4 HDDs. Two of them have 40GB, the other two are 80GB and 120GB. To make some use of this the 40GB discs are connected as a RAID1 (mirror) array (those are old IBM discs, waiting to fail). Together with the 80GB disc as a RAID0 (stripe) this makes 120GB which in turn is a RAID1 mirror of the 120GB disc. Yes, you can make RAIDs be members of RAIDs in Linux software RAID. Unfortunately the boot-time autorun of the kernel (2.6.14.2) does not detect this correctly, so the RAIDs are assembled with a kernel command line. So this machine serves as a backup device (hence the name). If only wake-on-lan worked, i could do everything automatically. So i have to turn it on manually, but at least this is fun. So, feel free to drop us a note and always keep in mind: safety first. Wear glasses, a helment, gloves, scarf and a jockstrap when working with a Proxxon Micromot.

Posted by Raimund 'Raimi' Jacob | Permalink | Categories: english, Technical Fun