Tuesday, January 15, 2008

It's not easy being dorky

So, I was hanging out with some of my friends the other night, and we watched the 2nd ep of the new Terminator show, which they had DVR'd. I didn't see the first one, because I don't really watch TV, but it was a pretty good episode. It was odd seeing Summer Glau playing a robot, but not surprising somehow. Anyways, as John leaves the store in the mall, the address of the store is '1337', so I say "haha, leet" (obviously, what else would you say?). No-one in a room full of guys, including the one I'm dating, had any idea what the heck I was talking about, even when I tried to explain. I'm not even sure how to take that.

o.O

Wednesday, January 09, 2008

Rock Band is Awesome

So, I've been playing Rock Band like a mad fiend since late last year. I never got into the Guitar Hero thing, but I truly love drumming. Singing is also fun. My crowning achievements so far: 621 note streak on Medium with The Strokes song, and singing hard Say It Ain't So while playing the drums on hard for the first time without redlining.

Anyways, the fun stuff for you: I made a list of the music videos for the standard Rock Band songlist. (At least all of the ones I could find) Here's the html and rss feed from my del.icio.us account, and here's the list (not in any particular order):
  1. You Tube - Van Halen- Won't Get Fooled Again (Live 1993)

  2. You Tube - The Killers - When You Were Young

  3. You Tube - welcome home - coheed and cambria

  4. You Tube - Pixies - Wave Of Mutilation

  5. You Tube - Bon Jovi - Wanted Dead Or Alive

  6. You Tube - Stone Temple Pilots Vaseline, Vasoline

  7. You Tube - Aerosmith - Train Kept a Rollin'

  8. You Tube - bowie, tokyo 1978: suffragette city

  9. You Tube - The Clash - Should I stay or should I go

  10. You Tube - Weezer - Say It Ain't So

  11. You Tube - Beastie Boys- Sabotage

  12. You Tube - Iron Maiden: Run to the Hills

  13. You Tube - The Strokes - Reptilia

  14. You Tube - Black Sabbath - Paranoid

  15. You Tube - R.E.M. - Orange Crush

  16. You Tube - The Police - Next To You (Hamburg 1980)

  17. You Tube - Mountain - Mississippi Queen - 1970

  18. You Tube - The Hives - Main Offender

  19. You Tube - Foo Fighters - Learn To Fly

  20. You Tube - Nirvana - In Bloom

  21. You Tube - Garbage - I Think I'm Paranoid

  22. You Tube - Deep Purple - Highway Star

  23. You Tube - OK Go - Here It Goes Again

  24. You Tube - Nine Inch Nails - The Hand That Feeds

  25. You Tube - The Outlaws - Green Grass & High Tides - Part One

  26. You Tube - Queens Of The Stone Age - Go With The Flow

  27. You Tube - The Rolling Stones Gimme Shelter

  28. YouTube - Boston - Long Time (11/13/06 at Boston Syphony Hall)

  29. YouTube - Molly Hatchet - "Flirtin' With Disaster"

  30. YouTube - Faith No More: Epic

  31. YouTube - Metallica- Enter Sandman

  32. YouTube - Don't Fear the Reaper - Blue Oyster Cult

  33. YouTube - Kiss - Detroit Rock City

  34. YouTube - FALL OUT BOY: Dead On Arrival

  35. YouTube - Red Hot Chili Peppers - Dani California

  36. YouTube - Radiohead - Creep

  37. YouTube - Smashing Pumpkins - Cherub Rock

  38. YouTube - Hole - Celebrity Skin: Video

  39. YouTube - Ramones - Blitzkrieg Bop

  40. YouTube - Soundgarden - Black Hole Sun

  41. YouTube - The Sweet - Ballroom Blitz

  42. YouTube - Jet - Are you gonna be my girl ?

  43. YouTube - Yeah Yeah Yeahs - Maps

Friday, December 07, 2007

Documentation stuck in the 90's

I'd just like to put this out there: It's high time that in-application documentation systems adopt tabs. They're obviously using web browser technology, and since we're so familiar with that model, and using tabs, it's highly irritating that they don't follow suit.

Tuesday, November 20, 2007

Fuel! Cell! Consumer! Model! ....!!!!


I'm almost embarrassingly excited about this.

Last night, I saw this IMHO awful commercial with the most amazing ending ever - a fuel cell car that will be commerically available!



Wikipedia had this to say about the Honda FCX Clarity:

In 15 November 2007 at the Greater Los Angeles Auto Show, Honda unveiled the FCX Clarity, the first production model, and announced that the car would be available for lease beginning in the summer 2008. Initial availability will be limited to the Southern California market, with availability expanding as hydrogen fueling stations become available...

...The new FCX utilizes several interesting new features. The new V Flow fuel cell stack can operate at temperatures as low as −30 °C. This is achieved by allowing the gas to flow vertically in the fuel cell stack. The tanks can store up to 5 kg (171 litres) of hydrogen at a pressure of 350 atmospheres, thanks to the new hydrogen absorption materials used. This allows a longer range of up to 350 miles (570 km)...

...To support the hydrogen fuel-cell technology, Honda also introduced the Home Energy Station (HES). This home solution can convert natural gas to electricity, heat and hydrogen to refuel fuel-cell vehicles. This allows consumers to refuel vehicles with hydrogen at home, important until hydrogen stations become widespread. Alternatively, the hydrogen can be used in the HES's built-in hydrogen fuel cell, providing up to 5 kW of normal or backup electricity and/or hot water for the home.

Apparently there are 20 already-leased 2002 prototypes, some of which are here in New York. What especially excites me is that they've come up with with a home refueling solution! With a range up to 350 miles that sounds like it might be a practical enough solution to make up for the lack of hydrogen fuel infrastructure.

I wish mass production might get started sooner than 2018..

Thursday, November 15, 2007

Best Gaming News All Year

I'm super duper stoked about the news that they're going to be making Lego Batman games. I love Legos, I love Batman, and I love the Legos Starwars Games. (My awesome sister bought me the complete saga for the Wii as a birthday gift this year) Life doesn't get any more exciting than this. :)

Wednesday, September 26, 2007

Toscawidgets Forms: Passing Compound Widgets

For lack of documentation's sake, and because it wasn't initially obvious to me after poking around in the code (in fact, I got led astray, thinking there was some dot notation I would have to use), this is how you pass values into Compound Widgets in Toscawidgets:

Say you have some Widget like this:
form = Form('FormName',
children=[
FieldSet('FieldSetName',
children=[
TextField('TextFieldName')])
])

and displayed in your template like this:

${ form.display(**form_args)}


then you can pass values into it from your controller like so:
def controller(self):
return dict(form=form,
form_args={'value':{
'FieldSetName':{ 'TextFieldName':
'Desired TextField Value'}}})

I guess it's pretty obvious in retrospect, in fact, the compound Form outputs something much like this (minus the outside dictionary), and those values can be passed right back into the Compound Form again. Perhaps, had I been actually using a Model, or gotten more sleep, this all would have been more natural - but hopefully this helps someone else.

Hint: If you're overriding templates, be sure that you're still passing the right values in to fetch the children arguments, i.e.:


${section.display(value_for(section), **args_for(section))}

Monday, September 24, 2007

Aardvark: Must have Firefox Extension

Any discussion on Firefox Extension recommendations must include the obligatory "Firebug is the most amazing tool ever" note. (Because it's really fantastically useful, and it just keeps getting better)

Today, I'd like to mention Aardvark. It's super useful for isolating parts of the page for easy printing, and quite easy to use, once you learn the keystrokes. I use it all the time for printing out comics and lolcats for posting on my cubical walls.

Gotcha: Toscawidgets and Mochikit

So, after much annoyingness, I've finally realized why I was having so much trouble using the Mochikit extension to Toscawidgets. As the Toscawidgets docs state, you need to include this template if you're using Genshi, which basically adds these lines (plus matching matching body top and bottom lines):

<link for=\"css in tg_css\" replace=\"css.display()\">
<link for=\"js in tg_js_head\" replace=\"js.display()\">

Now, if you're silly, like me, and don't really pay attention, you just include it, without looking too hard at your master template, which includes these lines by default:

<link for=\"css in tg_css\" replace=\"ET(css.display())\">
<link for=\"js in tg_js_head\" replace=\"ET(js.display())\">

As soon as you put the widget in your controller:

from toscawidgets.widgets.mochikit import mochikit
class Root(controllers.RootController):
@expose("genshi:mumapp.templates.sections")
def info(self):
return dict( form = InformationForm,
js = mochikit )

You start to get funny Genshi errors, mine was "AttributeError: 'Stream' object has no attribute 'tag'" which prompted me to try various combinations of adding ET() and HTML() to my templates, when the problem was that Toscawidgets cleans that whole ET/Genshi issue up and breaks when you leave them in.

So, long story short, add the site template and remove the conflicting lines from your master template. (Though, if you are mixing Toscawidgets and Turbogears widgets, you'll have to do something like what's outlined here.)

Wednesday, September 12, 2007

Security Camera Shenanigans

One of the funniest things I've seen in a while: At the Port Authority in Tampa, they have a whole bunch of security cameras, in a really nice movie looking setup. Unlike the movies, though, a whole colony of ants has built a highway across one, so it looks like something out of Them!.. and on another camera, a huge fuzzy spider crawling about a pier. It was quite alarming at first, out of the corner of my eye, but ultimately quite amusing. I wish I could have taken a picture, but I doubt they would like me whipping out a camera in their security room.

Tuesday, September 11, 2007

Announcement: GenshiColumnTemplate

I've made a quickstart Genshi template for Turbogears that gives you a ready made 3 column layout, using the excellent 3 column layout from A List Apart's Holy Grail article. If you spent 5 minutes, you could do it yourself, but it's kinda nice to have something ready made. I pull out the layout css in a separate file, and relaid out the welcome page to use 3 columns. The master.html template uses Genshi's Xpath select function to pull content together into the columns.

To Install:
easy_install genshicolumntemplate

To Use:
In your templates that include master.html, make divs that have ids of 'left', 'center', 'right', 'footer', and 'header', or just add your static content to master.html. The only caveat is that there must be some sort of other element inside the positional div wrapping your text, it can't be just text, as xpath won't select it for replacement.

ToDo:
  • Documentation. It should be mercifully short, yet I still haven't done it
  • Fix up the welcome page a bit
  • Figure out some sort of decent unit test for templates
  • Wait for suggestions, criticisms, etc :)
Please let me know if you try it out.

Monday, September 10, 2007

Python Cheeseshop and Eggs

I've been playing with putting a package up on the Cheeseshop, Python's Package Index. There isn't a lot of documentation out there, but there really doesn't need to be, it's pretty easy. I cheated and modified someone else's egg for my own use, but the file setup isn't all that hard, and you can get paster to make a ready-eggable template for you.

Anyways, the quick commands to use, after creating an account and setting up your egg and metadata:

  • python setup.py register
    this creates an entry in the cheeseshop for your project and populates it with the metadata from your egg. If something is wrong, just fix it and rerun this command.
  • python setup.py sdist upload
    this creates a source distribution (the egg folder tarred and gunzipped) in dist/ and uploads it to the cheeseshop
  • python setup.py bdist_egg
    upload this creates a binary distribution (the egg folder all zipped up) in dist/ and uploads it to the cheeseshop


Super bonus hints:
python setup.py develop installs the egg using a link to your source code instead of putting it in the site-packages folder, so you can test things.
easy_install -m package_name
takes the package name out of the appropriate places, allowing you to uninstall a package by deleting it from the site-packages folder.

Sunday, September 02, 2007

Toscawidgets and Paster

So, I'm playing around with making a bunch of Toscawidgets (Toscawidgets widgets?) and found, by hunting around a bit, that you can get a pretty handy package template by using PasteScript. Try:
paster create -t toscawidgets
and answer the questions. For a list of what other templates paster create has, try:
paster create --list-templates
For some reason, figuring this out took me way longer than it really should have last night. (Thanks Daniel)

A super bonus bbedit command line hint: bbedit *.py --new-window

Friday, August 24, 2007

Genshi Templates: include and select()

Hint for today: If you don't know Xpath select stuff at all (like I didn't a couple minutes ago) and you want your Turbogears templates to be a little more intelligent about column content placement, you can do something like this:

<!-- in master.html -->
<div id="centercontent">
<div id="status_block" py:if="tg_flash"
class="flash" py:content="tg_flash">
</div>
<div
py:replace=
"select('//div[@id=\'centercontent\']/*|text()')">
</div>
<div id="rightcontent">
<div
py:replace=
"select('//div[@id=\'rightcontent\']/*')">
</div>

<!-- in welcome.html -->
<div id="centercontent">
<!-- all your base here -->
</div>
<div id="rightcontent">
<!-- navigation stuff here -->
</div>

Breaking down the Xpath select statement a little more (removing the quote escapes):
//div[@id='centercontent']/*
//div == in all 'div' elements
[@id='centercontent'] == where the (@) attribute 'id' is equal to 'centercontent'
/* == select all the children elements

Tuesday, August 14, 2007

Coolest Hotel Design Ever - Eco-Aqua Hotel in a Quarry

It won't be completed for at least another 2 years, but I would so fly to china just to stay here:

http://atkinsdesign.com/html/projects_hotels_songhotel.htm

It's already cool enough that they're apparently using an old quarry as a lake, so the whole thing is sunk into a pit and looks like an especially fantastical Bryce creation, or that they're using geothermal power. The thing that drops my jaw is the ginormous *waterfall-like elevator* that apparently runs over the glass face of the building. A
t least, I think it's an elevator.




Really nice flash sketch widget

I really like the texture aesthetic of this online sketch app, it's the best I've seen. I really like the background "paper," he thinner-line tools resemble actual penstrokes (after they're scanned, anyway).

http://www.odopod.com/sketch/

If only I had a spare second to doodle :)

Thursday, August 09, 2007

Really Awesome Ad.

This is the best ad I've seen in a long, long time. Well, the iphone ads are really, really good and everything, but they do lack in a certain... initial bafflement. :D

http://www.youtube.com/watch?v=FsBvMvHk1BE

Sunday, August 05, 2007

Website Teaser

It's coming! Got my MossyStone.org domain name, got hosting through Webfaction, who gives half their turbogears related signup fees to the turbogears project. They keep on top of tech, I like it, and I like the hosting so far. Site is running in Turbogears on Python of course.

More to come in the future. :)

Saturday, August 04, 2007

Turbogears Banner

I couldn't find a small Turbogears banner / logo / powered by image to my liking, so I just whipped one up. Also, here's a Python logo I found through a google search. Enjoy.


Wednesday, August 01, 2007

reCAPTCHA: Stop Spam, Read Books

This is by far the coolest captcha service ever. (Blogger, you should pick this up) Out of Carnegie Mellon, this service aids in digitizing books. It gives you two words to type, the first is a known word, the second is a word that their OCR algorithm couldn't figure out. If you get the first word right, it assumes that you also got the second word correct.

I think it's a fantastic idea, putting captchas to a good purpose. :)

Gotcha: Turbogears Form Widget

So, I had one of those barking up the wrong tree moments this morning, where I was sure as can be there was something going on with SQLObject caching, but it turned out to be much simpler than that. I have a simple sort of application linking products to the company that makes them, but when you added a new company, then tried to add a new product for that company, the company didn't show up in the pull down box. (a SingleSelectField)

As it turns out, when you create your form widget:
editform = widgets.TableForm(
fields=EditFields(),
action="/editsave")
the field class gets created once, at the controller load, and that's it.
Therefore, if you populate your fields when you create the form, they won't be updated, possibly causing you to learn more than you wanted to about SQLObject caching. I found the solution on this page. Similar to passing values, you just pass a dictionary of the options to the appropriate widget. Since I have a generic CRUD controller, I created a function in my EditFields class that returns a dictionary of all the options fields and updated values, like so:
def updatelists(self):
"""Return a dictionary of any lists
that need to be updated due to new objects"""

companylist = Company.build_list(
'name',
orderBy=Company.q.name)

#in my form, companyID is the
#name of the SingleSelectField
return dict(companyID=companylist )

(using the build_list method here) then, in my controller:
return dict( form=self.editform,
values=objvalues,
options=self.fieldswidget.updatelists())
and finally, in my model:
<div py:content="ET(form.display(
value=values,
options=options))">
(I'm using Genshi, which is why I have the ET function there)