Saturday, August 30, 2008

Giant SNES table: Video and final touches

I'll keep adding any changes that I make to the project to this post. I'll also try and answer any questions that I see from other blogs/ sites. Heres 2 videos of the controller in action.


Me and my roomate

Judging from some reactions, I think alot of people missed the point of this entirely. I love woodworking, and saw this as a big challenge for my craftsmanship. I also love video games, though I'm usually too busy to play them much. I also thought this would be a cool novelty/ conversation piece. I might eventually make it into a table w/ legs, but for now I like it as a stand alone controller. Its not 4 feet wide, its 40 inches. I did this so it would be more ergonomic to play with one person. The D pad and buttons are a comfortable arms length.

So heres a few responses to comments from some of the other blogs that posted an article about the controller.

  1. "Props for the man's craftmanship, but I think he needs a job. Possibly, a wife too."
    -I have a sweet job as an intern as well as being a Senior at UCF for Engineering, and I'm 21, not lookin for a wife.
  2. "So is this that guy's bid at becoming King of the Dorks?"
    -I don't think I'm 1st in line, but "the dorks" welcome me with open arms.
  3. "He should have just spent the time building a life sized girlfriend."
    -I might be wrong, but wouldn't that be more pathetic?
  4. "Surprised no one has said "OMG THE BUTTONS ARE THE WRONG COLOUR!!" I was expecting someone who grew up playing the PAL or Japanese SNES to at least come in with that comment."
    -I've said this a few times now, but I grew up with the purple toned SNES. I like the 4 color PAL/JAP colors better, but its not near as nostalgic for me. I've lived in FL all my life, not too many people around here would recognize the other color set.
  5. "the best controller just got bigger :P"
    -I totally agree, my favorite controller as well.
  6. "SCAD Inc., which I will charitably call a garage-based novelty enlargement collective"
    - Wow, pretentious much? First off, I live in an apartment without a garage, so I work on my front porch and store the tools in my room. Also, we don't claim to be anything but a couple guys that like to build things. We thought it'd be fun to give our not-so-company a name and logo. This was a project I took on myself, but many of the other projects on here were done by all 3 of us (surf fins, sub box... which I'll put up at some point... etc). We just build the things we want that can't be found anywhere else... not "novelty enlargement". But thanks for the post and link to my blog, I appreciate the hype.
  7. "How is this the least bit pratical? How do you use a 4 foot wide controller?"
    - Its not practical... its fun. I use it just fine, watch the video.
  8. "Yeah, thats a gag for my console but it really works. But mainly I play DAoC on the big machine. " He remarked. " DAoC ? What is DAoC ? " She asked. "Ahhh, you have to see this, it is the best RvR MMORPG on the net!" He answered. "Oh!" She exclaimed. "Nevermind, I play WoW, I think the little cartoon people are sooo cute!">>> BASH <<<>>> Thud <<<<(or date killer if you are a single guy)I like dual purpose hardware."
    - What?
  9. "didnt they do a working nes controller?now this will be even harder for just 2 people to usewhos going to be hitting the l1/l2 and r1/r2 buttons"
    - Yes the NES was done, thats why I did the SNES, and again, watch the videos for playability. Oh, and there are no L2 or R2...
  10. "not when you are over compensating and have to produce something like a 4 foot snes controller to make yourself sleep better at night."
    - I sleep fine, but thanks for the concern.
  11. "someone needs to work on their jig saw skills..."
    -really? Didn't realize Bob Vila over here was judging me.
  12. "all i can say is "why?"
    - A bad question deserves a bad response. Why not.
  13. "So this is only the.. what… 1000000th giant game controller?"
    - Third to my knowledge, though theres also an atari stick, not sure if it worked.
  14. "Those springs look too weak to support enough push for the buttons.I would like to see him fabricate a giant silicone membrane :P"
    - (this was a comment on a pictureonly showing the button mount, no buttons) The springs your referring to don't support the buttons, they are the grounding side of the contact for the button. Each of the ABXY buttons are supported by 3 springs wrapped around bolts cut off and nailed into the buttons. The other buttons are different. If you're interested read the older posts.
  15. "this creation is only 15 years overdue. Do you realize snes hasnt been around since 1993!?"
    - Old systems don't disintegrate when a newer one comes out, though clearly some people don't appreciate that.

Heres just a few links, there are so many more. If you know of anymore definately post them for me!:

MAKE!!! My favorite so far.

there are so many more, google around if you're curious. Also, theres a "links to this post" section that you can see a few more.

Wednesday, August 27, 2008

Bound properties in Scala

I've been doing some GUI programming in Scala recently. Following the bean conventions in Java, I tend to require three things of each property I have on an object that will be used in a GUI:
  1. A getter method.
  2. A setter method.
  3. A listener / notification mechanism for when the property changes.
The getters and setters are required for encapsulation, so that the internal representation of the properties of an object implementation can be changed without affecting the properties themselves. The notification mechanism is required for a GUI, so that one or more components that display the property can be updated when it changes.

The key problem with the ad-hoc implementation of properties (as in JavaBeans) is that they tend to make classes noisy, with all of the getX(), setX() stuff, and the listener mechanism. Things become even more complicated when properties take on the nature of collections, where multiple objects can conceptually be added or removed.

In a search for simplicity, I have been investigating JavaFX and the even more impressive ScalaFX. However, JavaFX does not yet allow bindings to properties implemented in a Java model, and ScalaFX, although very promising, is not quite ready for prime time. (It's more the potential for bugs I can't understand rather than API changes that have put me off ScalaFX for the time being.)

Until ScalaFX is ready, I have found a neat stop-gap solution. Inspired by the Scala wiki entry on Properties, I have set up my own properties as follows:
My Properties extend scala.swing.Publisher so it's possible to listenTo them for events. I defined a PropertyChanged event that is intended to be fired when a property changes. The properties also have apply() and update() methods which act as getters and setters respectively.

So, what advantages do these kinds of properties have over normal getX(), setX() and a listener mechanism?

Firstly, the contract of a property is clearly defined. There is no bean-like assumption that a setX() method on a class is related to a corresponding getX() method, nor that a particular event will be fired when a change occurs.

Secondly, each property is nicely modularized. Properties often refer directly to a value stored in a class, and it's easy to define a ValueProperty which performs this automatically. Then, for the enclosing class, you can write something like this:
Instead of something like this:
At first glance, the properties version of x may appear to break the principle of encapsulation, but it doesn't. If, in the future, I wish to change the implementation of x, I could do something like this:
Clients of the code will then be able to use the x property in the same way they always did.

This method of defining a clear contract for a property can also be extended to vector properties, in which the property contains a collection. It can be done fairly generally, so that the collection property may be backed in various ways by pre-existing collections (in the same way that you could implement a Map as a HashMap or a TreeMap or whatever).

A final advantage of these properties arises when they are bound into a GUI. For example, I have a text field derivative called BoundIntField which displays an integer value. To create an instance of this class, bound to property x I do the following:
And... that's it! The BoundIntField automatically listens for changes to x and updates itself. Also, when BoundIntField loses focus or receives an enter key press, it updates x. This is all done without breaking encapsulation, and without me having to write any duplicate glue code at all!

Sunday, August 24, 2008

Ticketing - Fail

Here in Melbourne, Victoria, Australia, our public transport system is far from perfect. The trains and buses that I catch to work each day are slow and unreasonably crowded. All I can really say in their favor is that they are only rarely delayed by more than 10 minutes, and only rarely are they cancelled. However, more than once, I have missed a train because I simply couldn't get through the doors due to over-crowding.

Public transport here is also expensive. As a result, our trains and stations are policed by small tribes of trench-coat-clad transit police who will gladly dispense large fines to those who are not in possession of a ticket. They are also notorious for being heavy-handed. I don't blame the individual transit police themselves; they're clearly under-staffed and over-worked. I hope readers can see that I'm describing a larger problem here.

The tickets themselves work by a process known as "validation". You insert the ticket into a machine, and the machine prints the date and time of the next expiry of the ticket. This information is also encoded in a magnetic strip that runs down the side of the ticket. Simple right? What could possibly go wrong?

A couple of weeks ago, this validation process failed me. I inserted my ticket into a machine, only to receive it back without a printed date stamp! I was fully aware that if I were to be stopped by one of the transit police, they would only see me as being in possession of a ticket that had not been validated. I would have no proof that I had actually validated the ticket and the machine had failed. Knowing this, I decided to buy a new ticket, and pay for my journey twice, rather than risking a large fine or a discussion with an unreasonable, dim-witted individual.

However, the proof of the machine failure is clearly evident in the picture of the ticket. Where the second trip (and second expiry date of the ticket) should appear, I have a blank line. I assure you that, even though I am entirely capable of it, there is no photographic trickery at work here. The machine simply failed me. Clearly, the magnetic strip encoding did not fail, and kept a record of my validation. Unfortunately, however, the transit police have no way to inspect the magnetic strip, so that would have been useless to me.

In the past, I've heard people claim that they tried to validate a ticket and it didn't work. The transit police still fined them. Now I wonder: were some of them actually telling the truth? I pay some $2500 to ride the trains each year. For that kind of money, I should have enough room at least to stand on a train when a seat is not available; I should have courteous, reasonable transit police; and I should have a ticket machine that works. So, of those three, let's see what I do have: Fail, Fail, and... oh yes, Fail.

Wednesday, August 13, 2008

Ego boosting news paper scans!

To anyone actually following this blog; sorry about the very slow rate at which I post here.
I figure it is better to do less posts, with lots of substance, than more posts that are just pointless and completely uninteresting.

Also, I've been working like 15 hours a day on my final semester uni project, which is sending me slightly mental, so I haven't had time to try anything else constructive (I'll make sure to post some updates on how that is going a bit further down the track).

Anyway, since a couple of friends have been asking to see them, I thought I'd better scan-in-and-upload a few of me super famous news paper appearances of the last few weeks.

So here you go:

This was the first one to be published, the guys from the Extra:Tech section of the Herald sun decided to do a short write up for the July 16th news paper:

Soon after that, The Australian called me to ask a few questions, they also sent out a photographer to get some snaps, this article was published on the front page of the Higher Education section in the 23rd of July paper.

Also that week, the Moonee Valley Community News called as well as the Leader, to organise a photographer to be sent out , unfortunately I was going away on a ski trip with some friends that week, so the leader wasn't able to get a photographer out in time, but the community news was able to.

The photographer from the community news was really nice and totally took the best pictures I reckon (the guys from the bigger papers were a lot older and kind of hostile).
So I totally hit the front page of the local paper as you can see here:

And there was a photo of both me and Emily on page 12.
Holy crap, I am so pasty white in this picture, you can't even see where my T-shirt ends and my arm starts....

So yeah, all this has been quite beneficial for me, especially since I am finishing uni in a few months and will be looking for a job soon, and any publicity is good publicity.

I reckon the coolest part so far though is hearing from other people who have been inspired to make their own giant videogame accessories and stuff.
That's a pretty fucking cool feeling; inspiring people.

My favourite so far is definitely Matt from who has (apparantly just finished) making a giant SNES pad.
That thing looks fucking awesome, I'm pretty impressed by how he has done the round edges, that's a whole lot of gap filler he must have used there...
The only problem I've got is the colours, he totally should have done the PAL/Jap colours, the US version of the SNES just looked like arse, with it's pansy purple colours.
But either way, that takes nothing away from his awesome craftsmanship.

Oh also; every asking for a wiring diagram for the controller;
There is none! Just locate ground on the pad and wire it to the ground wire in the buttons, then link each of the "active" (or whatever you call them) wires to their corresponding ones.
The Male/Female plug was just so that I could unplug the controller from the original.
Either way, I might post a tutorial in the future explaining how to wire old controllers into USB-computer controllers, so you can play NES/SNES/Megadrive etc. emulators with their original controllers.

Till next time, awesome.

Monday, August 11, 2008

Giant SNES table Phase IV: Wiring, Button Adjusting, Detail Painting... etc

The Controller is finally finished! It has taken me all summer to do it, mainly because of classes and the new job... which by the way also helped me build the controller.

Button Mounting and wiring. The mounting was a bit tricky getting all these clamps in while it dried... but I somehow made it work.
This one shows the clamping of one of the bumper mounts. Its hinged with a single spring/ bolt at the other end.

Soldering for the SNES controller card, actually quite easy.

I used these screw plates to connect each button so I could disconnect each seperately for potential repair/ maintanence.

I used stencils made on the computer and cut on a machine to get the lettering just right. Turns out that the SNES font is almost identical to Hattenschweller, I think thats how its spelled. Its a standard font italicized. I also made a few stencils for the skateboards I'm making (the ones that say "meret"), and the Lost logo for some potential surfboard airbrushing.

I also stenciled out the circle for the A B X Y buttons, came out pretty clean. I had originally tried a rubbery brush-on material for the start select, but it stuck too much on the sides when pressed.
You can see the contacts are just springs, and the other side of the contact are metal plates.

You can see my sharpied arm chair here.


It looks a little off here, but it actually sits straight, but it looks weird because it has to rock about the center.

Like the definition around the D-pad? I do.
The plug is normal sized, and fits in a normal size SNES.