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
Tuesday, January 15, 2008
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):
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):
-
You Tube - Van Halen- Won't Get Fooled Again (Live 1993)
You Tube - The Killers - When You Were Young
You Tube - welcome home - coheed and cambria
You Tube - Pixies - Wave Of Mutilation
You Tube - Bon Jovi - Wanted Dead Or Alive
You Tube - Stone Temple Pilots Vaseline, Vasoline
You Tube - Aerosmith - Train Kept a Rollin'
You Tube - bowie, tokyo 1978: suffragette city
You Tube - The Clash - Should I stay or should I go
You Tube - Weezer - Say It Ain't So
You Tube - Beastie Boys- Sabotage
You Tube - Iron Maiden: Run to the Hills
You Tube - The Strokes - Reptilia
You Tube - Black Sabbath - Paranoid
You Tube - R.E.M. - Orange Crush
You Tube - The Police - Next To You (Hamburg 1980)
You Tube - Mountain - Mississippi Queen - 1970
You Tube - The Hives - Main Offender
You Tube - Foo Fighters - Learn To Fly
You Tube - Nirvana - In Bloom
You Tube - Garbage - I Think I'm Paranoid
You Tube - Deep Purple - Highway Star
You Tube - OK Go - Here It Goes Again
You Tube - Nine Inch Nails - The Hand That Feeds
You Tube - The Outlaws - Green Grass & High Tides - Part One
You Tube - Queens Of The Stone Age - Go With The Flow
You Tube - The Rolling Stones Gimme Shelter
YouTube - Boston - Long Time (11/13/06 at Boston Syphony Hall)
YouTube - Molly Hatchet - "Flirtin' With Disaster"
YouTube - Faith No More: Epic
YouTube - Metallica- Enter Sandman
YouTube - Don't Fear the Reaper - Blue Oyster Cult
YouTube - Kiss - Detroit Rock City
YouTube - FALL OUT BOY: Dead On Arrival
YouTube - Red Hot Chili Peppers - Dani California
YouTube - Radiohead - Creep
YouTube - Smashing Pumpkins - Cherub Rock
YouTube - Hole - Celebrity Skin: Video
YouTube - Ramones - Blitzkrieg Bop
YouTube - Soundgarden - Black Hole Sun
YouTube - The Sweet - Ballroom Blitz
YouTube - Jet - Are you gonna be my girl ?
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:
and displayed in your template like this:
${ form.display(**form_args)}
then you can pass values into it from your controller like so:
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))}
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.
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):
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:
As soon as you put the widget in your controller:
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.)
<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:
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 :)
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:
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.
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:
A super bonus bbedit command line hint: bbedit *.py --new-window
paster create -t toscawidgetsand answer the questions. For a list of what other templates paster create has, try:
paster create --list-templatesFor 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:
[@id='centercontent'] == where the (@) attribute 'id' is equal to 'centercontent'
/* == select all the children elements
Breaking down the Xpath select statement a little more (removing the quote escapes):<!-- 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>
//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.
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 :)
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
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. :)
More to come in the future. :)
Saturday, August 04, 2007
Turbogears Banner
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. :)
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:
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:
As it turns out, when you create your form widget:
the field class gets created once, at the controller load, and that's it.editform = widgets.TableForm(
fields=EditFields(),
action="/editsave")
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:
(using the build_list method here) then, in my controller: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 )
and finally, in my model:return dict( form=self.editform,
values=objvalues,
options=self.fieldswidget.updatelists())
(I'm using Genshi, which is why I have the ET function there)<div py:content="ET(form.display(
value=values,
options=options))">
Subscribe to:
Posts (Atom)


