Tuesday, May 18, 2010

Unicycle

Back in February I posed about my new toy. I have now been riding it for 3 months in the parking lot, around the neighborhood, commute vehicle, and the most fun, Mountain Unicycling in the Santa Cruz mountains. I've figured out a lot and thought I'd start jotting down some notes to help others out.

Where to buy:

First off I've done most of my unicycle shopping at www.unicycle.com. They have the best selection of unicycles that I've found. I've noticed that the products they list tend to change price and available colors from day to day.

Equipment:

Every product out there has a high end, low end and something in the middle. The High end unicycle is the Kris Holm brand. Those unicycle parts are about as good as you can get. Nimbus is a pretty darn good runner up as the middle road. They are a little heavier but they are very good beginner unicycles and solid as a rock. I wouldn't use anything less than a Nimbus for Mountain Unicycling. I bought a Nimbus 26" MUni Cycle with ISIS hub. I got a 400mm seat post because I'm tall but I replaced it with a 350mm Kris Holm adjustable seat post. The adjustments are key. I got the 150mm Kris Holm cranks which are a standard length for the 24" and 26" unicycles. The 24" unicycle is considered the standard unicycle. It is a little slower than the 26" and a little easier to maneuver. I choose the 26" because it just seems to fit better and I like the ride. The Kris Holm cranks are a lot nicer than the Nimbus cranks but the Nimbus cranks work just fine for a beginner. There wasn't any other choice at unicycle.com when I ordered. A brake isn't worth it until you learn to ride and I didn't get one but I can see it would be really nice to have one when going downhill. But I figure it's a good workout so I won't be getting one any time soon. The most important part of the unicycle is the seat. Nimbus use a Kris Holm plastic seat frame but instead of using a draw string to hold the seat cover on they staple it to the plastic. This means the cover and innards are not replaceable or modifiable. The seat frame also seems to be more U shaped which I don't find very comfortable.

Safety:

The first requirement is to protect your noggin. I first tried my bike helmet but it doesn't protect against falling backwards. Not that I have fallen backwards but the possibility is there. So I bought a nice skateboard helmet. You'll also want to protect your wrists. I suggest a good pair of wrist guards. The best I've found are the Bullet Wrist Guards. I also wear a pair of fingerless gloves to protect my palms. Depending on the kind of riding you do you'll want to protect your shins and knees. At the very least you'll want a good set of shin guards. I have a pair of Kris Holm Percussion Leg Armor which are great but they get very hot and I need to make some adjustments because the XXL are perfect heigh wise but are designed for much larger around legs.

Monday, May 17, 2010

Liquid Mountaineering

I find this too funny to express in words. Just watch it and laugh.

Wednesday, April 28, 2010

May Photo of the Month



Spring is in full swing and here are the dogwoods to prove it.

Tuesday, March 30, 2010

Unicycling Street Trials

So I've been unicycling for 2 months now. It is the best workout I have ever done. It took just under 3 hours to gain the balance and strength to ride a mile. Over the next month more practice and then single track trails in Nisene Marks State Park for 6 miles. After all, I did buy a Mountain Unicycle! But I will never have the mad skills to pull this off.

Monday, March 29, 2010

The Move

This past weekend Embarcadero moved us out of the old Borland building to a new office space a very short distance away. Something about saving some money or something. To my surprise this is what my office cube looked like when I arrived.


Nothing but an Asus EE Touch Top to work with plugged in and ready to go with awesome touch goodness. It didn't take long to realize this was a practical joke. Over the next couple hours my equipment started showing up and here is what my cube should have looked like.

Wednesday, February 24, 2010

Blog Housekeeping

Over the last few days I have been getting an awful lot of comment spam. Usually Google figures it out so for the next couple weeks I am going to only allow registered users to post comments. Sorry for the inconvenience.

Thursday, February 18, 2010

iPad

If you didn't think the iPad was cool before then here is a great WIRED Magazine video on their iPad product that just might change your mind.

Monday, February 8, 2010

February Photo of the Month



This photo is currently featured on the Nature Photographer Magazine website. It was taken in Yellowstone on a very beautiful morning with a very simple camera: an old digital 3 mega pixel Canon Elph.

Friday, February 5, 2010

Awesome Chair

I have to look at this awesomeness every time I go home. It is very comfortable. I wouldn't trade it in for my Aeron® but the Missus loves it and it is a very well made chair. It makes her art and photography more creative or something.




I have no affiliation with HAG or Herman Miller.

Thursday, February 4, 2010

Hacking the TTouchKeyboard Part IV

Hacking the TTouchKeyboard Part I
Hacking the TTouchKeyboard Part II
Hacking the TTouchKeyboard Part III
Hacking the TTouchKeyboard Part IV
Hacking the TTouchKeyboard Part V (not published yet)

Here is a quick off the top of my head documentation for the XML layout that is used by the keyboard compiler. If something doesn't behave as expected drop me a line with a comment or email so I can get it fixed.


This describes the schema and the attributes for the keyboard layout XML file.

<keyboard keyboardtype="Standard" keyboardname="Standard101" width=768" height="228" maxwidth="0" maxheight="0" minwidth="0" minheight="0">

keyboardtype - this allows multiple keyboard layouts to contribute to an overall keyboard type. For instance, for Standard we have the Standard101, Standard102 and Standard 106 keyboard layouts. Each one specifies a different layout for the Standard keyboard layout depending on the keyboard's language. This becomes the value of the TTouchKeyboard.KeyboardLayout property.

keyboardname - this is only used for humans to distinguish which keyboard layout is being used.

width - this is the default width of the keyboard layout.

height - is the default height of the keyboard layout.

maxwidth - is the maxwidth constraint of the keyboard layout.

minwidth - is the minwidth constraint of the keyboard layout.

maxheight - is the maxheight constraint of the keyboard layout.

minheight - is the minheight constraint of the keyboard layout.


<language languagename="en" />

languagename - specifies the two letter language code for the languages that this keyboard layout applies. When the system is searching for a keyboard layout for the current keyboard language it starts from the last keyboard layout registered, to allow developers to override the defaults, once a keyboardtype and language are found that keyboard layout is used.


<row topmargin="0" bottommargin="2">

topmargin - this is the padding between the key rows.

bottommargin - this is the padding between the key rows.


<key scancode="1" vk="200" caption="Esc" width="65" stretch="True" modifiername="fn" imageindex="3" toggle="True" mapscancode="42" mapvk="0" margin="5" doubletall="True" groupindex="1" combokeys="vk:12;vk:12;scancode:24;scancode:24">

scancode - this is the Scan Code that is sent to the active window. The default value is 0. A valid scan code is greater than zero. Any value greater than zero will be sent as a key. If the value is 0 then it is key that does not have a scan code. Any key that does not have a scan code and or a vk is not a real key. If the value is less than 0 then it is also a fake key. This is useful for modifier keys.

vk - Same as scancode above only for the vk. It is important to note that either one or both can be provided. If one isn't provided then the other will be determined by the OS.

caption - this is the key caption to display.

imageindex - this is a image that is displayed. -1 is the default which means the key caption is text. tab=0, shift=1, enter=2, backspace=3, up=4, down=5, left=6, right=7.

width - this is how wide the key is. Since the keyboard is flow layout from the upper left hand following to the right and down it just gets the next available location. The width and height of the key will be the hit test area. The button will be drawn inside this region offset by the margins.

height - Set the height of the key. The only valid value here is double the height of the row. Only one tall key is valid per row and only on the right hand side.

leftmargin - is the margin to the left of the key.

rightmargin - is the margin to the right of the key.

stretch - in flow layout when resizing setting the stretch to True will tell the resize function to allow this key to take up all available space. Keys that are not stretch keys must have their appropriate proportions no matter the size of the keyboard while keys that are stretch keys will take up the available space.

toggle - if a key is a toggle key then it can be pressed and stay's down. A second press will release the key and draw it normally.

groupindex - toggle keys can be in a group. If two ore more keys are in the same group only one of them can be toggled at a time. When pressing a toggle key all the other toggle keys in the same group will be drawn normally while the newly pressed key will be pressed.

combokeys - there are times when it is handy to generate a key sequence. The format is vk:# or scancode:# separated by a semicolon. The first time the vk or scancode is encountered it will trigger a down, the second occurrence it will be an up.

mapscancode, mapvk - keys like the left and right shift keys or left and right ctrl keys have different scan codes and vks, so to show the same state on these keys one can provide an alternate vk or scancode values.

modifiername - this tells the keyboard that this is a modifier key. When this key is toggled and a key has a modifier attribute then the key can change it's caption, scancode, vk and imageindex.

publishedname - this is the name of the key caption override that is displayed in the object inspector under the CaptionOverrides property. This caption will override any and all captions for this key. Note that the developer can provide keyboard locale specific overrides programatically.


<language languagename="fr" scancode="100" vk="2" imageindex="1" caption="AltGr" />

languagename - specifies a language override for the key. If the keyboard language is fr then the scancode, vk, imageindex and caption will overridden with the values provided.


<modifier scancode="44" vk="0" scancode="20" vk="20" imageindex="2" caption="foo" modifiername="caps">

modifiername - specifies an override for the key. If the modifier is toggled then the scancode, vk, imageindex and caption will overridden with the values provided.


<language languagename="fr" scancode="100" vk="2" imageindex="1" caption="AltGr" />
</modifier>
</key>
</row> </keyboard>

Wednesday, February 3, 2010

My New Toy



Bright Orange Nimbus 26" MUni Cycle with the tallest seat post they make.

Tuesday, February 2, 2010

Hacking the TTouchKeyboard Part III

Hacking the TTouchKeyboard Part I
Hacking the TTouchKeyboard Part II
Hacking the TTouchKeyboard Part III
Hacking the TTouchKeyboard Part IV
Hacking the TTouchKeyboard Part V (not published yet)

This post is going to be short because it is just an example application to illustrate how to convert an XML touch keyboard layout the binary version that you can then add as a resource and use from your touch applications. You can download the source to the command line utility called kcc (stands for Keyboard Command line Compiler).

My next post will be the documentation for the XML layout and the final post on hacking the TTouchKeyboard will walk you through the steps to make this all work.