Okay, gotta make myself a checklist so I can finish this project up in a reasonable amount of time.  It looks like a lot, but I can usually take out a number of these in a day.

Did I mention that a MAME cabinet requires a huge amount of commitment?

Stage One: Construction

  • Round cabinet corner sides (optional).
  • Attach 2x4’s to sides of cabinet for all edges, monitor and speaker/marquee shelves.
  • Construct strong monitor shelf from already-cut wood and 2x4’s.
  • Attach cabinet sides to base, using 2x4s to connect sides together.
  • Install cabinet front using Blum hinges and key lock.
  • Install cabinet back with Blum hinges and key lock.
  • Cut 45-degree angles on cabinet back diagonal piece.
  • Install cabinet top and back diagonal piece.
  • Cut T-moulding groove with router and slot-cutting bit.
  • Install T-moulding.
  • Cut 45-degree angle for control panel back.
  • Assemble control panel, using blum hinges and draw hasp for top.
  • Install drawer slides in cabinet and control panel, attach control panel to cabinet.

Stage Two: Installation/Wiring

  • Purchase 25” or 27” inch TV (possibly Sony Wega).
  • Order buttons, joysticks, coin box, marquee light, marquee retainer from Happ Controls.
  • Order Opti-Pac, i-Pac, joysticks and trackball from Ultimarc.
  • Order spinners and spinner tops from Oscar Controls.
  • Cut coin box hole in cabinet front.
  • Install coin box.
  • Drill speaker holes above display.
  • Drill control and joystick holes in cabinet top.
  • Test-install all controls, make sure everything is correct, remove controls.
  • Sand, prime and paint all cabinet surfaces.
  • Re-install controls.
  • Wire all controls to i-Pac and Opti-Pac, test controls.
  • Install TV on monitor shelf, secure.
  • Construct paper bezel for TV (from forum instructions).
  • Install plexiglass (tinted and clear?) in front of TV.
  • Install speakers in speaker holes.
  • Install light behind marquee.
  • Install marquee with marquee retainer.
  • Install extra speakers, if needed.
  • Install subwoofer in cabinet base.

Stage Three: Computer Hardware/Software

  • Mount motherboard in cabinet by mounting in slotted 2x2 pieces of wood.
  • Mount power-supply to cabinet interior.
  • Mount harddrive and enclosure within cabinet.
  • Install additional ventilation- top and back of cabinet.
  • Install 4-port home-connect-style multimedia ports with ethernet jack in rear of cabinet (any other wiring?).
  • Drill/cut hole for single external power cord.
  • Install Fedora Core 2.
  • Install MAME packages.
  • Test-play system for kicks.  ;)
  • Set-up front end and fancy boot process.
  • … ?
Read full post

Started putting together the MAME cabinet on friday.  I managed to get as far as assembling the base.  Since it’s such an integral part of the entire cabinet, I spent a bunch of time with tubes of No More Nails and some good wood screws to make sure nothing moves. 

It supports me standing on top of it- hopefully it’ll support the weight of the cabinet and the TV (which probably weighs twice as much as me together!)

Fancy tip: pre-drilling all of the screw holes should ensure that none of your wood splits.

I’m still trying to figure out how to cut rounded corners for the cabinet.  I picked up a toonie-sized washer at Rona, hoping that I can use it with some double-sided tape to guide the router around the curve.  I’m not very confident in the success (or safety) of doing it this way.  I’ve noticed that a lot of cabinets seem to skip the rounding step - I suppose it won’t be too terrible if I just keep my 90-degree corners.

Since my last update, I’ve found a number of cabinet construction inspirations:

  • Nice pictures of cabinet construction, including T-moulding insertion.  Lots of detail about creating marquees.  Fellow canuck (big plus).
  • forum: Nifty implementation of a control screenshot with button labels.  I was thinking about doing this for my cabinet, but it would be nice to have something to just drop in.  Think of it as “context help” for the game you’re playing on your cabinet.
  • Massive MAME Project: Canadian source for Oscar spinners.
  • Stealth Boy’s MAME Cabinet: Lots of detail on good construction techniques.  Interesting links.
Read full post

I don’t usually report stuff from Slashdot, but this is too funny to pass up.  There’s also two lame videos that someone in the Slashdot comments picked out here and here.

The BSA–a trade group supported by Microsoft, Adobe Systems and other major software makers to enforce software licenses and copyrights–revealed the new mascot Tuesday as part of a national campaign to scare kids out of using peer-to-peer networks.

Snitchy the Weasel sez: “Remember kids - rat out your friends!”

Read full post

There’s an interesting Wiki discussing Copyright Economics.  It breaks down the interaction between producers and consumers of “intellectual property”, comparing it with the interaction between buyers and sellers of physical goods.

From what I can tell of the analysis, a “social gain” is equivalent to saying that the extra money that the producer gained over the minimum they would have done it for plus the extra money that the consumer has that they didn’t need to use to buy what they wanted results in extra money for everyone!

The interesting conclusion is that pirating IP actually results in a social gain in the short term, while in the long term can potentially result in a social loss:

Since the producer cost is $0 the short term social gain of piracy is always positive (PC = $0, CV > 0, SG = CV - PC = CV so SG > 0). In other words, pirating software that would not be bought is economically beneficial.

and later:

So piracy can harm society when the software would otherwise be purchased but the producer never produces the software in the first place since expected piracy levels are too high.

I’m curious to see how this sort of analysis sees concepts like tax-supported-free-music and the eventual drop of food in cost to $0.  Well, the latter certainly requires some major technological hurdles to exist, but I’d like to see it.

As an aside, what value does IP have in a world where food and shelter (effectively all basic necessities) are free?  A point to ponder for tonight!

Read full post

As part of the latest Mozilla Firefox grassroots marketing blitz, I received a personalized email message from Blake Ross.  I have to admit, a non-form letter really does make a good impression. 

To be honest, I’d been thinking of adding it before but this gave me the last little push to add it to my front page.  I might find a different spot for it later on, but it looks really good where it is right now.

UPDATE: If you’re looking for a button for your own site, check out the Mozilla Firefox - Promotional Buttons page.  The little guy they have there () is really nifty.

Read full post

I started applying the T-moulding to the edges of the cabinet today.  It took a little while to figure out the right height for the router but it goes quickly once you’ve got it set right.

I managed to cut the moulding slot too high or too low in a few places - I’m using “No More Nails” to hold it in.  If this doesn’t work I’ll probably try picking up a hot glue gun (a suggestion I saw elsewhere).

I’m pretty close to getting the cabinet sides attached (once the rest of the shelving supports are in).  This should be a virtual milestone for myself - it’s tough to see the pieces lying around unassembled for so long.

UPDATE: Looks like I’ll need a glue gun after all.  Home Depot, here I come!

Read full post

RSS (and Atom) should come with an acceptable use flag that lets me tell people that it’s okay to syndicate my blog posts in full.

For future reference, it’s okay to quote or aggregate any of my posts, even in full.

Read full post

I managed to get my .NET plugin wrapper for Firefox working just now.  I can get a .NET UserControl to show up embedded in an HTML page through Firefox.

Next step - hook up the <object> tag to download arbitrary .NET assemblies and run them as UserControls (with security of course).

Check it out!

The only issue I’m dealing with right now is that there’s lots of flicker as the control is overwritten by Mozilla (for some reason).  It’s almost like I’m supposed to be clipping the paint messages, but I don’t know enough right now about the event system to solve this.  I worked around it by forcing an invalidation on a WM_PAINT message.

It could be related to the interaction between the UserControl and Mozilla itself- perhaps the control is leaking some messages to its parent that shouldn’t be being sent.

Read full post

After some playing around with various bits in System.Windows.Forms, I’ve managed to pretty much eliminate the graphical glitches in the .NET control hosting plugin.

The only thing left is some strange WM_ERASEBKGND/WM_PAINT messages that seem to be coming out of nowhere.  Whenever I resize the browser I get a subtle flicker on some controls - it’s almost like the entire control has been invalidated by something.  Perhaps the Gecko plugin hosting window is doing this to force a refresh on any plugins.

Here’s another screenshot for fun:

Read full post

Lots of shakeup with Microsoft these days.  Of course, Scoble disappears on the verge of the big “Longhorn to be Stillborn” announcement from Microsoft.

I wonder if Microsoft might be moving towards a more open-source like approach, at least on the release side of things.  Perhaps the concept of a named and branded OS will disappear, replaced with a framework that is constantly upgraded via Windows Update (kernel and all!).  Unfortunately, I don’t think it’s possible to keep home users, who generally purchase Windows once and only once with their new PC, as well as business clients that would prefer to seamlessly upgrade their client systems piecemeal (browser today, explorer shell tomorrow, kernel the day after) to keep them up-to-date.

In somewhat unrelated new, the quality of non-OS products coming out of MS recently has really dropped.  Case and point: Visual Studio 2002 and 2003.  These two are the poorest releases of the Visual Studio line so far (Visual Studio 6 being the best, IMHO).  Part of me wonders if they QA’d the product on anything but simple two or three “Hello World” project solutions.  If you don’t believe me, try any of the following tasks:

  • Reference DLLs larger than 64kB.  You can only build once before having to delete all DLLs from the solution!
  • Edit tables in the VS.NET HTML editor.  In fact, try pasting something over top of something else in the editor. 
  • Use the Windows Forms editor for a complex form with nested panels and the like.  Have fun when you can no longer load the form in the editor and/or Visual Studio trashes your form class!  I hope you’ve checked in - into something other than VSS itself.
  • Enjoy the random crashes of Visual Studio.  No pattern detected so far.

I don’t have much faith in MS to release a stable version of VS.NET 2004 (or whatever this one will be).  The fact that serious bugs that hinder your ability to write complex solutions have existed all the way from the beta up to the latest VS 2003 is almost unforgivable.


Read full post

I’ve got gmail invites to give away to the first five to leave their name and email address in the comments.

First come, first serve!

Read full post

I wanted to move all of my old articles into yearly subdirectories, but I didn’t want to break any of the incoming links to my site.  Thankfully, mod_rewrite allows me to redirect incoming requests as necessary!

RewriteEngine on

RewriteCond         %{REQUEST_FILENAME} ^(.*/news)/
RewriteCond         %1/2004/$1          -f
RewriteRule         ^news/([^/]+)$       /news/2004/$1 [R,L] 

RewriteCond         %{REQUEST_FILENAME} ^(.*/news)/
RewriteCond         %1/2003/$1          -f
RewriteRule         ^news/([^/]+)$       /news/2003/$1 [R,L]

RewriteRule   ^(.+)  -  [PT]

Basically, these rules check to see if the file exists in the /news/2004/ or /news/2003 subdirectories and, if so, redirects immediately to the yearly subdirectory.

It took me a while to figure out how to do this, but I think I’ve got a good idea of what’s going on.

The strange (but cool?) thing about mod_rewrite is that you can use the “back-references” captured in the RewriteRule in the RewriteCond lines! In the rules above, %1 represents the request filename captured in the first RewriteCond, while $1 represents the URI segment captured in the RewriteRule below. See figure 1 in the mod_rewrite manual page for more information on how this works.

If you want to figure this stuff out for your own nefarious purposes, here are some links to help:

Read full post