descent into hell: one man's journey to find the perfect game controller

okay, so maybe that was a little dramatic for a title. Along the lines of my discussion of searching for the perfect shopping cart, this is the fruitless culmination of my grand search for a game controller that has a thumbball (i.e. trackball manipulated with your thumb) in the place of the traditional analog right stick. Sadly any mention of this idea on message boards tends to bring out the ‘sky is falling’ people who think that will ruin first-person shooters on the console. To be honest I could care less what they think, as it’s more of an issue of playability for me rather than just trying to get that little extra edge. I have what you would call I guess mild RSS, in that I can’t really use a mouse at all for more than a few minutes at a time without causing tremendous pain to my wrists. I basically worked around this through the years by using various other methods of input. It is pretty amazing that once you step away from the standard mouse concept that there really are a crapton of other options out there, at least for basic computer usage. But there is one glaring exception to this: the inability of any company to bring a game controller with a trackball to the market. The sad part is that, for those of use who care, we would pay almost any price for a solution. I have even looked into building one myself, as I do have some small experience with electronics.

So this is a documentation of my own journey of trying to find an acceptable substitute in this lack of market satisfaction.

so let’s back up. I’m not a huge gamer though I do get obsessed with a game on occasion. And I’ll play through a game from start to finish in a few days time once a month or so. But at the moment I’m really having a hard time finding a usable controller configuration for my needs. A few years ago was a little more into playing first-person shooters I had a game controller called the Panther XL, which combined a trackball and a joystick. It actually worked pretty well, where the trackball was used to manipulate where you are aiming, and the joystick was used for movement and firing. Sadly the Panther XL suffered from poor quality and tended to break frequently. It also really didn’t solve the whole pain problem I was suffering from as you tended to be flexing your wrists to a certain degree to reach the trackball properly. and most computers don’t come with game ports anymore.

Fast forward a few years, and panther XL no longer exists. my initial spelunking came across a site discussing the exact product I’m looking for, along with links to a promising product that fit the bill perfectly along with cool pics, but unfortunately has yet to make it to market, and probably never will. this product was called the paradox or reflex game controller from a company/person called BodieLobus. It seems they were accepting pre-orders for a year but have since returned any monies for the pre-orders.

I came across a number of other products before finding the fragFX controller from a company called Splitfish. they had mockups of another controller called the glideFX, which was also along the same lines except the controller was split into two parts with the trackball being on the right portion of the controller and left analog stick and D. pad being on the left. This product looked promising as well as there were mentions that it would be available over the summer of 2008, but when I contacted them by e-mail recently they said the product was essentially shelved for now.

I still haven’t come up with a final solution yet, but I just purchased a 3D Connexion/Logitech SpaceExplorer (there are special community-provided gaming drivers in the forums) trying to fit part of the bill. I was able to find a deal on it at Dell, for like $190 delivered, and I plan on using it for things other than gaming. Essentially my goal would be to use that in some sort of handheld trackball for a first-person shooter games. At least on a PC. For the console I might be able to use the same setup in combination with an XCM XFPS keyboard/mouse converter for the PS3.

UPDATE: So I got my 3d SpaceExplorer but I also ordered an AlphaGrip iGrip, realizing that I don’t really need an analog left stick for FPS, though it is nice. I also got an XBOX360 when Dell had a $50 off sale for the Pro model ($270 delivered with tax, 2 games, 60GB). The AlphaGrip will be used with PC FPS’ for now, once it comes in, as there are plenty of those, and the AlphaGrip would probably require the XCM XFPS for most PS3 and all XBOX360 games. Will let you know how it works out.

Other links and products you may find interesting if your needs are slightly different from mine:

Zalman FPS FG1000 Mouse

Cheap handheld trackballs

There are some decent ones like those in these pictures that could be useful in combination with a Joystick/keyboard/space explorer or space navigator.

Doing it yourself DIY - Build Your Own Helpful Links:

Touchpad replacement of RIght Analog Stick

Adding a trackball to a ps3 controller

Great Parts place

DIY SIXAXIS Airplane model

BenHeckendon Links:

Put the PS3 guts into an XBOX 360 controller

Completely customizable controller

That’s it for now! I will let you all know how it works out!

Posted by slaingod Wed, 15 Oct 2008 05:17:00 GMT


The man's foldable, collapsible, lightweight cart

So whenever I prepare to buy something I tend to agonize over every little decision. search engines are great, but you really have to know what exactly are looking for to find what you need. Otherwise you end up spending hours and hours searching through the same pages over and over. That’s basically what I did for about a week recently. I needed a new shopping cart as the one I had was beginning to show its age. It was big, wide, too wide to fit through most New York City grocery aisles, rattled and shook, and it felt like the wheels were always about to come off, until they finally did.

So in my grand tradition of hunting and gathering in cyberspace started searching for pretty much every combination of “cart, grocery, shopping, aluminum, casters, foldable, collapsible, etc.”. I finally came across my first contender, the polder aluminum cart pictured below. It really seemed to have a lot of features are looking for, such as being narrow, having rubber wheels, and being lightweight. But the reality was far far removed from those perceptions. This is arguably the worst product I have ever used for its intended purpose. Where to begin? First, the handle is too short and too close to the cart so you can’t really walk or pull it without it blocking your feet. Second, the wheels are barely held on by tiny little plastic clips, which the instructions didn’t even properly indicate how to use. The front wheels were also entirely too small intended to catch on tiny little sidewalk cracks, almost causing a pitch head over heels every few feet. Finally, the cart that I received a manufacturing issue where the brake would engage every few feet, making the card essentially useless without modification. Before realizing all the other issues the cart had, I had taken a Dremel to the brake, thereby removing any chance I had of returning it.

"Worst cart ever..."

So $60 later I was back to the drawing board. Armed with my new knowledge and my desire not to waste my existing purchase entirely, I struck upon the idea of finding a much sturdier handtruck style cart and then attaching the light weight aluminum foldable basket portion of the cart from hell. I finally found something usable at handtrucks.com(I know, who knew!) in their folding hand trucks section.

there were some other products that might have sufficed, but I went with the high-end Wesco folding aluminum handtruck for about $100. This car is pretty amazing and it collapses up into a pretty small area for discreet storage. It has awesome rubber tires, can hold 150+ pounds, and it is very lightweight. Once I received this, it was now time to turn part-time cart. At this point I took a hacksaw, and cut off the arms and wheels of the crappy Polder cart leaving just the foldable basket. Now it was just a matter of being able to attach the basket to the handtruck and a quick release manner. in the pictures below you’ll see that I use reusable zip ties, but I have since moved on to using Velcro Velstrap (2 inch wide by 3 foot cut to size ) as my quick release mechanism, which I found at CyberGuys for around $10 delivered.

Below you can see the final product of my efforts minus the Velcro with some added foam grip for the handle. this bad boy doesn’t grab some attention on the street, as easily the most maneuverable cart in the store. It is lacking the second set of wheels so does require a little more effort to manage when fully loaded, but all in all it is a huge improvement and should last for a really long time, and the handtruck will find other uses besides just holding the basket.

"The finished product: SHAZZAM!"

 "The padded handle"

"All folded up!"

Posted by slaingod Wed, 15 Oct 2008 03:50:00 GMT


Samsung T4081F Review

I recently purchased a new Samsung LCD for my main workstation. It’s a little smaller than my last, weighing in at 40 inches versus 42 for my old monitor which is now downstairs. The big new thing about this monitor compared other LCDs is that it has LEDs for backlighting rather than the typical florescent tube. This means it runs cooler but more importantly has much better black levels. And I can confirm that they really are pretty awesome. You really do notice it on titles playing and fade in on intros like the Lord of the Rings.

There is one crippling flaw in this TV though: the lack of DPMS, otherwise known as Display Power Management Something, which is what your computer uses to turn off the monitor when it goes to sleep or when your screensaver turns on, etc. That in today’s age a TV that can be connected to a computer does not have this functionality is a travesty. For power savings and environmental concerns alone this should be in every TV/monitor sold today, but the various revisions of the Energy Star requirements continue to let HDTV’s that aren’t marketed as computer capable to slip through the cracks. It is the one horrific blemish on an otherwise stellar monitor.

I did a great deal on it though, only paying $1400 delivered. The new models were coming out but none of the new models delivers LEDs for backlighting at the size that I need. Plus the one great thing that started all this was that my old monitor had a slight but noticeable dark line running down the middle that was driving me batshit.

Posted by slaingod Sun, 21 Sep 2008 22:06:00 GMT


Nuance Dragon NaturallySpeaking 10

So it’s pretty sad: I just got voice-recognition software but I’m trying to come up with things to say. I guess the first thing I can do is do a review of Dragon NaturallySpeaking 10. So far so good though there have been a few snags. Remembering punctuation is one of the hard things to get down. There are couple of gotchas if you use it on a computer with Comodo Firewall that you should be aware of. The NaturallySpeaking executables tried to interact with every other executable on the system and one really annoying problem was that when the executable tried to access the keyboard somehow locked out all the other keyboards attached the system. I finally figured out that I could control alt delete and things would come back. It may make sense to just bite the bullet and set the Dragon NaturallySpeaking executables as trusted.

Getting set up I spent about an hour reading dictation to improve my recognition statistics. I have to admit it was kind of fun reading Kennedy’s address as one of the options. It really brings home the fact that you don’t do a lot of reading and speaking at the same time in your general life, or at least mine, especially text that you’re not necessarily familiar with. But practice makes perfect and after a while you sort of get into a groove. I’m still not the point where trusted to really capture all of my thoughts as I speak them without any kind of delay, but I’m getting there. I do tend to mumble a little bit in my normal conversation so I have to be a little extra careful with my diction.

I could really see this becoming useful if I am able to incorporate it more into my daily life, particularly with my coding. There are a number of tools out there to help coders use voice-recognition, but I will have to see if they have anything for Ruby and/or ActionScript that is worth the effort to get set up, or possibly integration with TextMate. By TextMate I mean of course the E text editor on Windows, a sanctioned clone of TextMate, with all the bundles etc.

That’s it for now; I’ll keep you posted. In the grand tradition of all voice-recognition reviews, this review was done using voice-recognition.

Posted by slaingod Sun, 21 Sep 2008 22:04:00 GMT


Trick For Selecting Even or Odd pages in Finereader

For a long time I thought selecting all even numbered pages wasn’t easily doable in Finereader (whereas Omnipage Pro had a special option to do so). Sometimes this is necessary when working with Save & Load Blocks, when the even pages have a different layout than the odds. So recently when faced with this again, I realized I could do this in FineReader, and while a little less intuitive, it is actually more flexible then the standard way in Omnipage (though this technic could very well be usable there as well).

Here is the gist of it: Under View, select Batch Window->Batch Window Maximized. Then resize your application window so it only shows 2 pages, as in the window below. You can now use your mouse to drag select all of the even/odds, or only some of them if needed. Note, this only works if you don’t have any gaps in your page numbers.

Posted by slaingod Fri, 25 Apr 2008 21:17:00 GMT


My Problems with Vista

I recently had to downgrade from x64 to x86 on Vista, to deal with a number of problems, like my scanner not working, Eclipse issues, and just general pain in the ass stuff that always made it just a little more difficult than it needed to be. So I’m giving up 800MB of RAM for my scanner, which I have to hack the drivers for anyway since shamefully HP doesn’t provide drivers for older hardware. Scanner tech simply does not change that much from year to year, and building drivers shouldn’t be that hard if they are competent at all. Spending another 400$ when the Automatic Document Feed scanner I have still works fine is a retarded ‘solution’. Anyway, I am still being annoyed by Vista x86.

So this is my own version of ‘Vista Annoyances’ only without the solutions generally:

  • Vista tries to reconnect network drives before the network is connected, which is retarded. It dutifully points out that it can’t reconnect all network drives. And rather than simply connect when it does find the network, I am forced to open up Windows Explorer and click on the disconnected drive to have it reconnect.
  • Sleep simply doesn’t work. Oh, it puts my system to sleep alright. Just nothing I do will turn it back on once it is in sleep mode. This probably corrupted my Search Index when I had to hard reboot my system, so I was getting ‘Search Indexer’ had to close error messages every minute or so. Lovely.
  • Windows’ continued inability to deal with network folders in Windows Explorer. How many billions of times do their users have to sit there wondering why there folder tree won’t expand while a green bar goes across the top of the screen. Reboot seems to be the only option here… See reconnect bitching.
  • UAC: User Access Control. Does it really need to pop up two dialog boxes? One to ask me if I want to acces, the other to actually access? Is there really no way to combine those into a single dialog? Seriously? I know the general mantra is to just disable UAC, but I run pretty fast and loose on my system, with minimal reliance on AntiVirus software, and maximal reliance on questionable software, so I figure a little insurance may be worth the pain. But damn…
  • Years and years later, and the Taskbar still cannot do what I tell it to. It won’t remember that I like 2 rows of programs. It won’t rememebr that I use Autohide. It won’t show the Taskbar half the times when I move my mouse to the bottom, I have to prress the Windows button to get it to show. Why in god’s name must the Quick Launch toolbar resize handles make me guess if my icons are going to all be visible when I lock the task bar, or if a few will be in a side menu.
  • Dear god enough with the Windows System Tray Notification Area (say that 5 times fast) popup notices! Nothing more annoying than when those things popup and simply don’t go away. Or take FOREVER.
  • Just because I like a lot of ‘recent programs’ to show up in my Start menu, why does the stuff on the right side of the start menu also have to move all the way to the top? Wouldn’t it be better to stay closer to the Start button if possible?

More soon…

Posted by slaingod Tue, 15 Apr 2008 15:38:00 GMT


Are you CALM enough?

Seems like a weird question right? I was taking the subway home and one side of the car was filled with ads saying:

  • Are you CALM enough?
  • Are you STRONG enough?
  • Are you COOL enough?
  • Are you CLEAR enough?

What were these adds for? NYS Child Protective Services looking for people to apply. I wanted to add a couple:

  • Are you ROBOTIC enough?
  • Are you EMOTIONALLY CRIPPLED enough?

because it sounds like they are looking for people with cast-iron stomachs who don’t feel anything. They probably are, that’s what’s sad. Every face on the ads was stoic, mask-like. Made me want to curl up into a ball, not apply for a job.

Posted by slaingod Sat, 22 Mar 2008 22:04:00 GMT


Bad Bath & Beyond Oddyssey

So I made a trek to BB&B yesterday, on 6th Ave and 18th St. (NYC). I hadn’t been in several years, so my list of things I needed had gotten pretty long. Plus, it is impossible to go in there and not walk out with twice as much as you expected. (As I was standing in line to have my purchases scheduled for delivery, the woman in front of me was saying the same thing to the delivery coordinator, who I’m sure hears that at least once a day.) My goal was to spend less than $1000, and I pulled through with only $850.

I got a humidifier, which I’ve been needing as it just gets dry with my boiler heat in the winter, even though winter is officially over. Nothing worse than itchy skin. I probably could have gotten it on sale in a week or two, oh well.

But the coolest little things I’ve found so far, are these little metal cans with magnetic bottoms, and clear tops that I put my vitamins and a couple of spices in and then stuck to the fridge door, clearing off the Boos prep table of those 4 jars/bottles. Only $2 a pop. And then I got a combined pepper mill/salt shaken, to knock down the number of things on my prep table to just the one.

Also got a coffee maker, as decaf coffee has replaced cigarettes as my vice of choice since I quit smoking. I know, I know, ‘DECAF??!?!?’ I’m sensitive to caffeine in general, so decaf, which still has like 1/6th of the caffeine of regular coffee, gives me a little buzz. Plus I drink a lot. And with my sleep patterns so messed up, half the time I wake up at 2am and have to wait for hours until my local cafe opens, or I wake up at 6pm right after they closed. And the nearest decent coffee is about half a mile away. Not that I don’t need the exercise…

Posted by slaingod Sat, 22 Mar 2008 09:54:00 GMT


Rails Active Record Lameness

I know this is sacrilegious, but there is some serious lameness going on in ActiveRecord I’ve dealt with lately. Maybe I’m drawing outside of the Rails lines (going off the tracks?), but ActiveRecord seems to go out of its way to make things a pain in the ass.

AR::Base#sanitize_sql being a ‘protected’ method has always been a burr in people’s sides. This means you can’t call it yourself on your own piece of SQL. Presumably it is done this way so people HAVE to do it the Rails way, whether that means duplicating a bunch of code, or taking a lot more time for a one-off project, etc.

Currently I’m working a report generator for Flex, where the Flex app handles the SQL generation and passes back an XML version of the sql options like:

<query>
    <name>
    </name>
    <sql>
        <select>
            <![CDATA[Date(created_at) as date]]>
        </select>
        <select>
            <![CDATA[count(id) as total]]>
        </select>
        <from>
        </from>
        <conditions>
        </conditions>
        <group>
            <![CDATA[date]]>
        </group>
        <having>
            <![CDATA[date >= :start_date and date <= :end_date]]>
        </having>
    </sql>
</query>      

Now we can argue all day about the best way to do this, but the reality is that only Admin authenticated people are going to see these reports, so the fact that someone could send arbitrary sql against the database is outweighed by the Flex-ibility of being able to dynamically adjust the query values in Flex without having to create a custom server-side method for each report. It is easier in my case to let more readily available/cheaper Flex programmers handle this than more expensive Ruby coders.

Getting this accomplished in Rails led to 5 workarounds in the code:

  def replace_named_bind_variables_no_quotes(statement, bind_vars) #:nodoc:
    statement.gsub!(/:(\w+)/) do
      match = $1.to_sym
      if bind_vars.include?(match)
        bind_vars[match]
      else
        raise ActiveRecord::PreparedStatementInvalid, "missing value for :#{match} in #{statement}"
      end
    end
  end

  def query

    # from_xml puts it in something like { queries => {query => [{name, sql}, {name,sql}....] }}
    queries = Hash.from_xml(params[:queries])['queries']['query']
#     logger.dbg queries.inspect

        # generate the report structure
        report = []
        queries.each { |data|

            query = data['sql']
            logger.dbg query.inspect

            # Now we need to get around a bunch of ActiveRecord lameness....
            # Presumably it is done this way to satisy someone's idea of 'how you should do things'
            # rather than, 'let's help them do it, no matter how they want to get it done'

            # first, AR doesn't do bind variables for anything but conditions...
            replace_named_bind_variables_no_quotes(query['group'], params) if query['group']
            replace_named_bind_variables_no_quotes(query['having'], params) if(query['having'])

            # second, we need to join the select clauses, as :select doesn't accept an array...   
            query['select'] = query['select'].join(', ')

            # third, AR doesn't support a separate HAVING clause, you have to attach it to GROUP BY
            if query['having'] and query['group'] # you always have both...
                query['group'] = query['group'] + " HAVING " + query['having']
                query.delete('having')
            end

            # fourth, we need to intern the keys so that they pass 'inspection' by AR
            interned_query = {}
            query.each { |key, value|
                interned_query[key.intern] = value if(value != nil) # AR doesnt like :conditions => nil either...
            }
            logger.dbg interned_query.inspect

            # fifth, we need to use Creative instead of just ActiveRecord::Base because there is a bug/weirdness in reset_table_name 
            # where it can't find the abstract_class
            report << [data['name'], Creative.find(:all, interned_query)]
        }

    # output the results xml
        str = ''
        xml = Builder::XmlMarkup.new(:target => str, :indent => 1)

        xml.result {
            report.each { |query|
                xml.query {
                    keys = []
                    xml.name query[0]
                    xml.cols {
                        exemplar = query[1].first
                        exemplar.attributes.each { |key, value|
                            xml.col key
                            keys << key
                        }
                    }
                    xml.rows {
                        query[1].each {  |row|
                            xml.r {
                                keys.each { |key|
                                    xml.v row.attributes_before_type_cast[key]
                                }    
                            }
                        }
                    }
                }
            }
        }
        render :xml => str

  end

Posted by slaingod Thu, 20 Mar 2008 10:06:00 GMT


Rolling back to NETCF v1.0 from 2.0+

So on a little side project I am working on, I realized that I needed to roll back to .NET Compact Framework (NETCF) v1.0 from a newer version. Why, you might ask? Well, it seems that even on my fairly recent Windows Mobile 5 XV6700 HTC Apache/Mogul whatever (only 2 years old, hey now), that not even NETCF v2 is available. Now you can always just install NETCF 2 or 3.5, but those take up 5+ MB of precious space on your device. Even worse, when you start even the simplest app, your RAM usage can balloon to 3-4 MB with just a few simple controls.

Using the built-in NETCF (v1.0-ish) can help reduce those issues dramatically.

I was never able to figure out how to create a new NETCF v1.0 project in Visual Studio 2005, so I went back and installed VS 2003. Created the project, then opened it in VS2005 and added all of my old files. I need to use VS2005 because I am using Vista x64 and the device emulator in VS2003 doesn’t work in that environment it seems (drivers wouldn’t load). It is also my understanding that you can’t move forward to VS2008 either, that you are forced to upgrade the framework version.

So once I got my files included, I tried to compile. Ooops! Quite a few problems I had to fix popped up.

  • The shorthand for property get/set (get; set;) didn’t work. I had to go back and redo all of my properties that used this. There is still a ‘prop<tab><tab>’ helper though.
  • My resources were all messed up. I had to basically rebuild my forms from scratch, then copy in all of the stuff from the newer NETCF versions. I took the opportunity to simply move a lot of my resources into a skin folder and just load them at runtime with FileStream and Bitmap.
  • I had a splash page that was just another form, and used TopMost to make sure it was on top. This isn’t available in NETCF v1, and it really isn’t clear to me at all how control paint ordering occurs by default. BringToFront/SendToBack didn’t really do much for me, and the order of creation of the controls didn’t help either. There is supposed to be a way to do this with SetWindowPos.
  • List<string>-style templates aren’t available, or anything from System.Collections.Generic. You need to use ArrayList or similar instead, and some occasional casting from object.
  • The MenuItem.Tag(and Tag from other controls) is missing, which is where you store your user data for menu controls. For instance you might create a list view of files, and each file would have a Tag object containing its FileInfo object. You have to come up with another solution here, like keeping track of the order/array of MenuItems, unless I figure something else out.
  • Enum.Parse isn’t available.

It seems a lot of these problems can be solved by using the OpenNETCF Smartphone Device Framework v1.4. For instance EnumEx.Parse is available in that framework addition.

Posted by slaingod Tue, 26 Feb 2008 20:29:00 GMT


Older posts: 1 2 3