Saturday, October 11, 2014

Go for....C64

My first computer was a TRS-80 Model I. I still have fond memories of this black and grey box with it's black and white screen, 128x48 monochrome graphics, 12" monitor and tape drive for data storage. Unfortunately we sold it when we got the twice as fast and portable Aster CT-80 (4 Mhz clock, two floppy drives!). Only for sentimental reasons I'd love to own one now., but  they are quite rare and therefore relatively expensive on eBay...
Anyway, I always kept a weak spot for these all-in one keyboard computers like the TSR-80, Atari 2600, VIC-20 and of course the Commodore C64. According to Wikipedia 12 to 17 million of these units were sold at the time making this a lot less rare.
 (An uncertainty of 5 Million ? That's so weird there are even special pages dedicated to this mystery..)

Anyway, 12 million or more seems to be enough to saturate the demand even 30 years later and complete systems can be bought for 50 to 100 Euro's. Actually I own a complete system myself. It's a complete, working set including an original tape recorder and diskette drive. I might have to wipe the dust off and find a suitable TV-set to check if it's still 100%. In the meantime I thought it was a nice idea to have just an empty C64 housing with keyboard and use that as a keyboard for my PC. Or maybe mount a Raspberry Pi inside to turn it into a working Linux computer. Or connect it to a tablet running a C64 emulator like C64.EMU .

[ As usual, I'm not the first to think about this and there is even a complete interface for sale: the Keyrah V2. Better (or worse..) there is even an Etsy shop that has Commodore and many other computers converted to USB keyboards. But that's what I consider cheating. At least some hacking has to be done or it would be too easy ! My first thought was to use the Arduino Micro. While building my MAME cabinet I already discovered that this would have been the easiest way to implement a virtual USB keyboard.  On the biosrythm blog there is already a complete description on how to use Arduino to get the C64 keyboard to USB, but he is using the Duemilanove . ]

I picked up an empty C64 from ebay.de for €30 and bought a Arduino Pro Micro for only €7,- (who said hobbies have to be expensive?)

 The cable that sticks out on the right is the keyboard connector that used to be connected to the C64 motherboard.
First we obviously have to find out how the keboard is actually wired. I found a neat diagram on the 'WaitingForFriday' blog:

Corrected C64 Keyboard matrix and keyboard connector diagrams  
Great, but it presents and unexpected surprise: we will need 16 Input / Outputs for reading this matrix. And the Micro Pro only has 9 digital I/O pins. My first idea was to expand the number of I/O pins by using some shift registers but then I remembered I also had some PICAXE chips in my toolbox. The PICAXE is a standard PIC micro-controller, pre-programmed with a Basic interpreter which makes programming real simple.And the PICAXE 28X2 has 16 freely configurable I/O pins so that should work fine.

This chip even has all the I/O pins nicely laid out,making it easy to route the connector to the chip.
Some soldering will be necessary though to split out the connector in sections that will go to B0..B7
C0...C3 and C4...C7.
 Unfortunately this does not work. The PICAXE does not have any pull up or down resistors on its pins, so when no key is pressed they are all floating which results in random values.

Friday, January 03, 2014

My Claim to MAME. (Building MAME: Intro)

This is the first post to what hopefully is going to be a (small) series. For many years I always had in the back of my mind that one day I wanted to build a MAME cabinet. It started back in the days when this was a rarity and only a few people did such a silly thing. Building it was complicated and expensive. Nowadays it looks like there are thousands of middle-aged men around the world that  attempt to re-capture their youth this way, and parts, plans and building instructions are widely available. Hundreds of on-line shops sell every possible part you'd ever need and even complete cabinets. (just Google for 'MAME Arcade Shop' and you 'll see what I mean)

But I want to keep the costs to a minimum by using parts I already have lying around.

The monitor

An old 15"LCD monitor that became surplus since everybody in my family now has it's own laptop...
The computer
 Any old laptop, even with a broken screen, will do. I've some of these lying around at the office.Or I could even use my Raspberry Pi.
The cabinet
 Some leftover MDF board is still in my shed for years. Maybe it's not enough for a full cabinet but it will get me started.
The controls
 I will need a joystick, some buttons, a 'spinner' (for playing Tempest) and a trackball. The trackball I already have. The joystick and buttons I had to buy, but they're not overly expensive ( €35,- for a joystick and seven buttons). The spinner is a bit of an issue. It seems not to hard to make myself, and they are quite expensive to buy so that will be a project in itself.
The controller
 To connect all the controls to the PC you need some kind of interface. Again this can be bought, but I have a feeling this probably can be done with one of the USB powered micro controller boards I have lying around like the NetDuino, Arduino or Launchpad.

Fortunately there are ton of sites (mainly blogs like these) with examples and how-to's. A few that I found very useful:
The Arcade Art Library - Where you can find all the graphics you need to create some good marquees and side art.
Project MAME- Some very good step by step instructions on how to build different types of cabinets. I did not use any of their design but there are some really useful hints and tips in there.
Build Your Own Arcade Controls (BYOAC) -  A general reference site with lots of info.
I Built An Arcade! - Great example of how to build a beautiful cabinet. Takes 13 months though...
How to build a bartop arcade - Another detailed how-to with some good ideas.
1UPArcade -  An amazing cabinet with a rotating control panel !

And finally:
What Is This Crap. - A showcase of how NOT to do it. (beware, contains strong language..)

The Games
By building a cabinet with a vertical monitor and just 4 buttons I have already limited the number of games that will be played on it. Which is fine with me since I prefer games from the seventies and eighties of which most were actually vertical platformers or shooters. Finding the games is easy, if you know where to look for. The best starting point I've found so far is the more than comprehensive MAME Database. This does not only list the games but has descriptions and screenshots. No downloads however since (as you may well know) games are usually still copyrighted and downloading ROMs is considered illegal. But once you know the name of the game you can just Google it to find the ROM. (don't be surprise if you find some more 'obscure' sites with ads that are not directly suitable for kids...)







Thursday, January 02, 2014

Buiding the Box (Building MAME: The Cabinet.)

When looking at all available designs and previously built MAME cabinets you soon find out that there is not just one universal design. And actually if you take a closer look at all the original cabinets you'll see they also differ a lot.
 I decided to take the 'Defender' design which is available as a Sketchup model. Imported it into the free 'DesignSpark' solid modeller and just projected the side of the box  on the piece of MDF I had available. This also gave me the chance to make it less deep. Since my cabinet will be fitted with a slim LCD screen instead of a bulky monitor it can be a lot smaller than the original. From the model I created the following plan-view of the side:
From there its just a matter of transferring the design to the board and use a jigsaw to shape them.
It's hard to saw straight lines using a jigsaw, so I first clamp on a piece of wood to align the saw. And when you just clamp two identical pieces of MDF together when you are sawing you get two perfectly identical sides.
Note that sawing two layers at the same time like this probably only works if you use 8 to 10 mm MDF. If you use it on thicker material it is very hard to keep the jigsaw exactly vertical and if it is slightly tilted your lower board will have a different size than the top one.

After I created the two sides I just estimated the optimum width by just holding the monitor next to one of the plates and finding good position. 50 cm seems like a good width so I just made the second MDF board exactly 50 cm wide. By doing this very carefully and making sure all corners of the board are now exactly 90 degrees it will be easy to create all front, top and rear surface plates.
And then we paint..and paint
and paint..and paint...
 Yes, two layers of MDF primer on each side is the minimum. Because MDF sucks... And that I mean literally. It just sucks up paint so for a good final finish you just have to primer it first.

Drilling the holes for the buttons. Using a 28 mm speed drill creates nice clean holes, but you must drill half way from one side, reverse the board and drill the rest from the other side.
Glue on the supporting blocks. I used a 20x20 wooden stick that I found in the shed. It's painted wood so using wood glue is not optimal since that is supposed to be applied to unpainted surfaces. Using a Polyurethane based construction adhesive is better.
In the mean time I keep refining the 3D model. And it's actually progressing faster than the real thing:

But after assembling the main parts it starts to look like real:
Next step would be to create the perspex cover for the control panel. I chose a standard 100x50 cm, 2mm thick perspex sheet which is available at almost every large hardware store. It was actually a coincidence that I chose 50 cm for the inner width of the cabinet but it's very convenient now since the perspex only has to be cut to length. And cutting perspex appeared a lot harder than I expected. First I tried to saw it using a fine pitch wood-saw intended for cutting laminate flooring. That does not work. The cut is very irregular and pieces just tend to break off. Second I tried cutting it using a hobby knife. This might be possible but its very hard to get one straight cut. Even if you use a steel ruler as a guide the knife just runs off if you are not very careful. After creating the cut (it's impossible to cut through the perspex) you can break it on the edge of a table. That does work but if the cut is pot too deep and not very straight you will get a very irregular edge with razor sharp points.
Finally used the blade  of a fine tooth hack-saw. That works better but it is essential that you carefully support both sides of the cut or the perspex will break.

Then the holes. This turned out to be even harder and it took me three attempts and a full panel of perspex before I finally had one that did not have cracks, or even completely destroyed edges. My tips for making holes:

Hole saw
- Use a vertical drill and push the drill very slowly. If you drill too fast the perspex will crack.
- Start every hole by drilling a small (3mm) hole in the centre. Then slowly increase the size of the drill but not more than 2 mm for every next step.
- Drill any hole larger than 10 mm using a hole-saw ! Trust me, any other drilling device (like a step-cone drill for example) will crack the perspex. This has one disadvantage. The arcade buttons require a 28 mm hole and this somehow seems to be a very uncommon size. So far I just found one set that has the 28 mm included.
- Support the perspex with wood and use a fresh piece for every hole so there is no hole in the wood under the perspex before you start the drilling.


CRACK !
 - Make sure you push down the perspex firmly and close to the drill. If you don't, the perspex might just jump up and crack.
- Don't drill too close to the edges. If there are holes near the edge of your control panel (like there are on mine) make the sheet larger, drill them first and then cut the sheet to size.
 









But finally with the inside painted deep-blue and the control panel covered with the perspex sheet it starts to look really good:
Creating the front bezel was actually very simple. First cut the perspex to size, place it in the cabinet and install the monitor so you can see were the screen is. Mark this on the perspex (I kept about 1 cm marging around the actual screen). Then (using a very sharp knife and a steel ruler) cut the protective foil and remove it on the edges. Then spray paint it a few times until the edges are really black. Make sure it really dry before removing the protective foil from the centre. And it looks really awesome when you look at it from the other side.

With the front-bezel installed, running LadyBug:
On the pedestal, with the top marquee installed:



Wednesday, January 01, 2014

It's all about Control. (Building MAME: The Controller)

Using the Arduino as a MAME interface.

MAME software runs on a computer. And modern computers do not have any simple I/O pins any more .(remember the parallel port that used to be on every computer for connecting a printer ?) So to connect switches and joysticks you will need some kind of interface that translates switch actions to USB. Early MAME builders cracked open standard keyboards and hard wired their switches to the different keys. This worked, but was quite difficult. Especially low cost keyboards did not have easy to solder contacts or convenient connectors to hook up to. Nowadays the most common solution is a dedicated controller that has lots of easy connectible inputs and USB output that just pretends to be standard keyboard. Best known are the UltiMarc I-Pac , OptiPac or J-Pac. An even lower cost solution are the Xin-Mo controller boards (aroun US$25,-, including the wires).
But to keep the cost to a minimum I intend to use what I already have...

The cheapest solution would be to use my FunDuino UNO R2 board. ( A cheap Chinese Arduino clone that ships at US$13,- from DealExtreme)
It's got 14 digital I/O pins so that should  be enough for an 8 way joystick + 7 buttons. (An 8 way joystick only has 4 switches). Since one of the buttons is just the 'Start' button so it will not need a fast response time I could also connect that to one of the analogue inputs and thus free 4 I/O pins for controlling additional stuff like lighting, sound or LEDs.
What I need is the Arduino to emulate a keyboard or to behave like a 'HID' (Human Interface Device). And if you know what to look for something like this is easy to find. Like on the blog of MitchTech. Now I did not immediately get the idea of this, until I realised that the Arduino board actually contains TWO different micro-controllers. One is the main controller (a ATmega328) that runs the Arduino 'sketches' and a second one (ATmega16u2) that just takes care of the USB communication from your PC to the main controller. And this communication controller is what we are re-programming to switch from a virtual COM port to a HID device.
First we will need a 'DFU' programmer. I use Windows, so I'll use 'FLIP' The procedure seems simple enough. Reset the Arduino, use FLIP to upload firmware. But I seem to have a problem with the reset. When I release the reset the board starts running the last sketch I've programmed it with, and it certainly does not show up as a new device. Which in turn is required so I can install the USB driver that FLIP needs. And of course I just overlooked something. When you have a non SMD Arduino board you should solder a resistor at the back. Yes, that is mentioned on the MitchTech page... (And it's no longer required with the latest revision of the Arduino UNO)
I just assumed I had a SMD board since there are many SMD components on the top of the board. But it's probably only so if the processor itself is a SMD version.
And indeed, when the resistor is mounted and we short circuit the two pins, left-top of the board, the unit shows up in the Windows device manager as a 'DFU' device. Left click on it, select 'Update Driver' and select the driver from the FLIP->usb directory. Then it shows up as an A90USB8. And when we unplug it and plug it back in it is again visible as the virtual serial port. 

Now we need to know what codes should be sent when a button is pressed. Which keys do we need to play MAME games ?
The full overview is on this page. And this is the selection of the ones I think I'll need:
Key                  Function               HID Key  
5                    Insert coin            34
1, 2                 Start (players 1, 2)   30,31
Arrow keys (U,D,L,R) Move Joystick          82,81,80,79
Left Control         Button 1               Bit0
Left Alt             Button 2               Bit2
Space                Button 3               44
Left Shift           Button 4               Bit1
Z                    Button 5               29  
X                    Button 6               27
ESC (Escape)         Quits the game         41

('Bit0..Bit2' marks a bit in the Modifier byte)

First I just used the MitchTech sample program. This just detects what pin is activated, sends a single key and then after 100 mS a 'releasekey' command. So if you press and hold a button you are sending 10 keydown / key-release commands per second. This works, but not very good. Most MAME games do not respond very well to a constant stream of key-presses. The movements often get a bit jerky, probably due to a regular key-buffer overload. Also it just sends one key at a time while the keyboard code does allow for multiple keys.
In my program I created a loop that checks every time which contacts are closed, find the keyboard code that has to be generated for that contact and add that to the keyboard message. Then only send the message itself when its different from the previous one. And when a key is released its code is forced to 0 so a key-release is only sent once. Also I use some analog inputs as extra inputs for buttons by just reading the voltage on that input. Note that these inputs are 'floating' so if they are left open the result may be unpredictable. You will need to add pull up or down resistors to the inputs.

So in the end the program looks a lot different but does exactly what I need:

MAME.ino (on my Google Drive)

Now what I love about software: you can re-configure the buttons and joystick at no cost after you wired them...
 I know most people use wires with crimp-on connectors for wiring their controls, but I just love soldering and for me this is much faster too. So I soldered all connections to the joystick and the plug on the FunDuino board. Here the buttons are not connected yet, but the black wire will serve as common ground for these.
Testing is a little hard since most normal software does not really show you if you pressed a Control or Shift key. But the 'GhostKey' program is an extremely simple way to test what code your keyboard is sending.
While testing this set-up with the actual buttons I noticed another problem. How do you insert a 'coin' to get the game started when you don't have an actual coin-slot ?  
I decided to make the 'Single player - start game' button to double as a coin insert. That's the benefit of having a programmable controller. Now it just checks the state of the 'start game' button and if it's pressed for more than 2 seconds it sends key '5' (Insert Coin) . But if you release it sooner it just sends '1' (Single player start).

Wiring it was pretty easy. As shown on the right I screwed the Arduino to the bottom and glued a small breadboard next to it. This way it is fully reconfigurable and I can just add some pull-up resistors if needed. The only thing that worries me a bit is that the breadboard is upside-down and the wires could fall out, but that has not happened yet. And when everything works fine I can make a more permanent solution.


(Note: If you start out without a board and want to buy one it is probably better to choose the Arduino Micro since that has 20 I/O pins and  'mouse' and 'Keyboard' commands built in) 

Ctrl Alt and....CRASH..
After a while I noticed that the system sometimes seems to crash while playing games that use both the A and B button. Some further investigation showed that it actually happened when pressing the buttons AND moving the joystick Left or Up. What actually happens is that you create the key combination Ctrl Shift and Left arrow, which is caught by the Intel graphics driver. So it just rotates the screen, or changes the resolution and (worse) throws you back to the main window. The solution was simple. Left click on the desktop, select 'Graphic options' and in the Intel graphics settings just disable hotkey support.

Saturday, June 22, 2013

The shortest path to serving a 'Hello World' using Apache and Python WSGI on Windows


So you want to create a website or service with some dynamic content, using templates, database and some code ? Get ready to choose form a gazillion choices in languages, frameworks and design patterns. And one of them is using Apache as the server, Python as the language and the Web Server Gateway Interface (WSGI)  to link them. All three are documented abundantly but for some reason I have not found a simple step by step guide to set it up on a Windows machine and just get 'Hello World' to show up in my browser. So here is how I did it.

Install Python. It's a standard Windows installer so that's just point and click. Then make sure the path to 'python.exe' is in your PATH environment variable

Install Apache using XAMPP.  This is also available as Windows installer and you can also install MySQL, FileZilla, Tomcat and Mercury. I'd advice to install at least MySQL. After all a database is one of the minimal requirements for most websites. In my example XAMPP is installed to D:/Xampp.
Using the XAMPP control panel, start Apache and make sure it's running: open a browser and type 'localhost' as the URL. If it works it will show the XAMPP configuration screen.

Now get the 'wsgi_mod.so' binary that matches your configuration. It must be the 32 bit or 64 bit version depending on system AND it must match the Apache version that is installed. Now XAMPP does not really show you which version it is using so the easiest way to find out is looking at the CHANGES.txt file in the apache folder. The current version of XAMPP (June 2013) contains version 2.4.3. This means that none of the 'wsgi_mod.so' files on the google.code page will work since they all target version 2.2 ! 
I Googled for 'mod_wsgi apache 2.4' and found it in the Apache Lounge .

Copy the 'wsgi_mod.so' to the 'apache/modules/' folder.
Add this line to 'httpd.conf' to load the mod_wsgi module:

LoadModule wsgi_module modules/mod_wsgi.so


Stop and start Apache to make sure it's still working.


Create a directory D:/Xampp/wsgi. Make sure you can run python scripts in this directory: open a command window, make sure you're in this directory and just type 'python'. If all is well it will show the installed python version and a command prompt. If not, check the environment variable 'PATH' and make sure the python folder is included.

Add the following lines to  'httpd.conf'. This will allow access to the wsgi directory, and make sure all wsgi requests are routed to the directory:

<Directory "D:/xampp/wsgi" >
    AllowOverride None
    Options None
    Require all granted
</Directory>

# Python WSGI interface module
<IfModule wsgi_module>

  WSGIPythonHome "D:/Python27"
  WSGIScriptAlias / D:/xampp/wsgi
</IfModule> 


Now create a text file with the following contents:

  def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output] 


Save it as 'hello_world.wsgi' in the 'wsgi' directory 
Open your browser and type 'localhost/hello_world.wsgi'. And yes: It will show 'Hello World' !


Note that strictly spoken the 'WSGIPythonHome "D:/Python27"'  is not required for this example, but if you want to add code that uses the 'import' statement Apache needs to know where to find your Python directory.

Tuesday, November 13, 2012

Going straight to Windows 8

I've been using Windows XP now for probably the whole 10 year of it's existence. Skipped Vista and Windows 7 because it just still worked for me. But now Windows XP is finally officialy declared obsolete and Microsoft generously offers the Windows 8 upgrade for only €29,- it's time for a change.
And these are my experiences so far.

The 'old' laptop
Still a bit scared of the transition I decide to try some things first on an old laptop. It's an ACER 2410 Travelmate with a 1 Ghz Intel Celeron and 1 GB memory running Windows XP. The 80 GB harddisk is partitioned in a C an D drive, both 40 GB in size and using FAT32.
First it appears installing Windows8 on a FAT32 disk with just 16 GB free storage is probably not a good idea. The installer just crashed twice without a clue why. So I first joined the two partitions using a partition manager (I used Paragon Partition manager, but there are many). Then I converted the resulting disk to NTFS using the command-line 'convert C: /fs:ntfs '
This finally seemed to solve it and although the installation took nearly three hours it succeeded. And it works fine. I installed some of my 'mission critical' applications (Borland C++Builder 5, Goldmine CRM, Visual Studio 2008) and that all worked fine.

The Work laptop.
This is more modern Toshiba Tecra 10A with a dual core Intel  at 2.8 Ghz, 2 GB memory and a 150 GB hard-drive. This drive is using NTFS, but it's also partitioned in a 60 GB and 90 GB section.
As expected the installation is easier here. There are no crashes and it takes somewhere around one and a half hour to complete.

Networking and Domain
Now if you have a work laptop that needs access to a domain take care of that first.
Here is an article on how to connect to a domain. (or the short version on SuperUser).
Then it might be useful to connect your domain account to your Microsoft account.

Viruschecker and security
What I used to do first on any PC is installing Security Essentials. But this is not necessary any more since Windows 8 comes with 'Defender' which is exactly the same. So no need to install additional software for this.

Installations that require .NET 2.0 or 3.5. 
Even though Windows 8 comes with .NET 4.5, some software requires .NET 2.0 or 3.5 to be present. It can be installed as described in this MSDN article 'Installing the .NET Framework 3.5 on Windows 8'.
NOTE: Installing a Windows language pack on Windows 8 before installing the .NET Framework 3.5 will cause the .NET Framework 3.5 installation to fail. So since there probably will be lot of .NET 2.0 software around for a while it might be a good idea to just do this for every installation.

Changing the language
One of the nice features of Windows 8 is the ability to switch languages even after you installed it. If you go to 'Control Panel -> Clock, Language and Region -> Language' you can just select another language.
The article Using the language you want by Steven Sinofsky explains it all.

TinyCAD application fails
The only software so far the does not work is TinyCAD , an open source schematics drawing program. It installs fine and runs but when you click File Open or Save it just gives a error:
'Encountered an improper argument'. Everything else works fine, bur if you cannot load or save files it's pretty useless. Selecting 'Windows XP compatibility mode' when running does not solve the problem. I tried to find a solution but nobody has found one yet.So for the time being it just has to run in an Windows XP on Virtual box

VirtualBox
The virtual PC software VirtualBox runs very smooth on Windows 8. Since Windows XP mode is no longer included in Windows 8 this is your only chance left if older software fails to run.

E-Mail
Originally my idea was to avoid additional software and just stick as much as possible to the standard installation. Since there is such a nice e-mail tile on the start page I decided to go with that. Unfortunately it apparently does not support the POP3 protocol, so this attempt failed immediately and I had to install Thunderbird. Which works fine...

Matrox DualHead2Go (Multiple monitors)
 As a developer you can never have too much screen-space so I use the Matrox DualHead2Go adapter to connect an additional 2 monitors to my laptop. This always worked fine on Windows XP but on Windows 8 it really rocks ! It automatically switches to expanded desktop as soon as you plug in the adapter and returns to single screen mode when you take it out again. Even though the desktop is expanded, both screens get their own task-bar and charms. So if you open the 'Tiles' or 'RT' interface on your laptop screen it appears only there and the other screens just continue to show the desktop. And then, if you opened an RT program that fills the laptop screen you can just grab it and drop it to the monitor.

Sticky notes
Windows 8 has it's own 'sticky notes' that do exactly what you'd expect. You can write them, change colors or font and stick them anywhere on the screen. Probably enough for most people, but I prefer the 'Stickies' by Zhorm Software . These are much more versatile. You can save and recall them, use them as an alarm clock and give them adjustable transparency. And they work fine on Windows 8...

Experience
After using it for a few days I must say I'm impressed. Of course it takes some time to get used to the new interface and all the little differences between XP and 8 but the search function in the charms makes it super easy to find anything you need. And when you are used to it it just works a little faster. Like on my XP machine when it recovered form hibernation it would not reconnect to my companies network. I always first had to log off and log in again to get access to our server. Windows 8 just does this automatically.
When switching my laptop off I always had to remember first to switch the desktop to my laptop screen or else if I switched it on without the external monitor my desktop would sometime still be off screen. Again: no problem on Windows 8. You can connect or disconnect a monitor anytime and the desktop will just restore to the most optimum settings. And with Fences installed all your icons will always be in the right place.

And it definitely pays off to learn some of the Windows-key shortcuts like:


Windows-C : Show the charms
Windows-D : Go to the desktop
Windows-X : show most common administrator settings
Windows-Tab : Switch between apps and desktops (And Alt-Tab of course still works to switch between applications)
Windows-R : Display the 'Run' window

And there are many more as listed here on the 'List of Windows 8 Shortcuts'.





Sunday, October 14, 2012

Pi on the Side.

So I bought a Raspberry Pi. Just in the unlikely case you have not heard of this credit card sized Linux computer at the incredible $35 price-point you can read all about it on the Wikipedia entry. And since I will try to write down my experiences I decided to create a separate blog for it.:

I Spy My Pi

(which does not really mean anything, it just sounds nice..)