<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-38780847</id><updated>2012-01-27T09:14:04.573-08:00</updated><category term='feeds'/><category term='Atom'/><category term='hobbies'/><category term='famous quotes'/><category term='Photovine'/><category term='as3'/><category term='Slide'/><category term='community'/><category term='Just Three Words'/><category term='advertising'/><category term='events'/><category term='general'/><category term='application'/><category term='Top Friends'/><category term='SQLAlchemy'/><category term='python'/><category term='rss'/><category term='internet'/><category term='mp3 players'/><category term='Apture'/><category term='eclipse'/><category term='work'/><category term='startups'/><category term='facebook'/><category term='three word story'/><category term='thought of the day'/><category term='business'/><category term='mySQL'/><category term='engineering'/><category term='security'/><category term='random'/><category term='information'/><category term='music'/><category term='XML'/><category term='context'/><category term='twiistup'/><category term='themes'/><category term='flex'/><category term='life'/><category term='web strategy'/><category term='Identity theft'/><category term='social networks'/><category term='hacks'/><category term='Django'/><category term='self-expression'/><category term='vinyl'/><category term='coding'/><category term='search'/><category term='marketing'/><category term='design'/><category term='music and sound-effects'/><category term='progress'/><category term='conferences'/><category term='discovery'/><title type='text'>Watch This Space</title><subtitle type='html'>Like a pdb.set_trace() in my mind.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>67</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-38780847.post-6238535330902426427</id><published>2012-01-27T09:14:00.000-08:00</published><updated>2012-01-27T09:14:04.584-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='progress'/><category scheme='http://www.blogger.com/atom/ns#' term='vinyl'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Music on vinyl making a comeback</title><content type='html'>&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-qBik103_ctE/TyLWOvIVT1I/AAAAAAAAAMc/qif8IWhS80Q/s1600/Turntable_with_Vinyl_LP_Record.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="155" src="http://3.bp.blogspot.com/-qBik103_ctE/TyLWOvIVT1I/AAAAAAAAAMc/qif8IWhS80Q/s200/Turntable_with_Vinyl_LP_Record.jpg" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span style="font-size: xx-small;"&gt;Old turntable and LP. &lt;br /&gt;(jazzology.blogspot.com)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;I've known about the increase of music-industry vinyl sales for few months now, and when I heard about it I was pleasantly surprised. &lt;br /&gt;&lt;br /&gt;Not long after I'd heard that sales of music on vinyl were up over the previous year, I was in a conversation about music with some folks at our local bar.&lt;br /&gt;&lt;br /&gt;So the kid says to me, "Hey, there's this new thing, it's music on vinyl, like a big disc. You need a special device to hear it, kind of like a DJ turntable. You should check it out, you like music".&lt;br /&gt;&lt;br /&gt;Now, either he thinks I'm really young (oh, bless him the little scoundrel), or he's unaware that vinyl pre-dates the recent LP release by&amp;nbsp;&lt;i&gt;Vampire Weekend&lt;/i&gt;. I suspect it's the latter, though I'd be happy with the former.&lt;br /&gt;&lt;br /&gt;Yes, Virginia, I know what vinyl is.&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-6ALX6XoH8Ug/TyLW67sZyBI/AAAAAAAAAMk/HyZYQE6X5Jo/s1600/940_WH_7591A_QD_800.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="150" src="http://4.bp.blogspot.com/-6ALX6XoH8Ug/TyLW67sZyBI/AAAAAAAAAMk/HyZYQE6X5Jo/s200/940_WH_7591A_QD_800.jpg" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Tubes.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;My first amplifier was my father's hand-me-down Fisher tube amplifier (which started with a primer button - you kept it pressed until the tubes were properly lit). The turntable was some used thing I picked up at the local used-stereo-equipment store (we had those back then), and I'd buy records from the stacks at our local used-record-store (we had those back then). &amp;nbsp; There was nothing like lying on the floor, album sleeve in hand, reading the back cover. Back then we &lt;i&gt;listened&lt;/i&gt;&amp;nbsp;to music. We'd just be there, and listen.&lt;br /&gt;&lt;br /&gt;Even when the Walkman cassette players were ubiquitous, we'd still find time to listen to great music. As we were able to buy better gear, the old used stereo rigs were replaced with better-quality amps, speakers, receivers, and so on. &amp;nbsp;Quality music and listening for the enjoyment of listening hadn't yet been replaced by the convenience of portable, lower-quality music and the use of music simply as a background, a soundtrack, to our (increasingly frenetic) lives.&lt;br /&gt;&lt;br /&gt;I'm glad to see vinyl making a comeback. The quality of the LPs are better now then they were at the end of the LP-era; they're thicker, heavier, with deeper grooves. &amp;nbsp;The quality of music from the big black disc should be high, provided you're using an analog signal chain (whether tube or solid-state) or a digital signal chain containing an excellent DAC (digital-analog-converter). &amp;nbsp;The LP master (for manufacturing) is probably cut from a 24-bit, 96k sample-rate studio master (or better, if you're artist's producer had the foresight to record at 24/192). In some cases the original may be 16/48k (16 bit, 48k sample rate), but that's still better quality on analog vinyl than you'll get from an mp3. &amp;nbsp;These days, 24/96 in the music studio is common, so what you're hearing via vinyl is &lt;i&gt;much&lt;/i&gt;&amp;nbsp;better than you'll get either on CD (16/44.1) or mp3 (a conveniently small file at the cost of degraded audio quality).&lt;br /&gt;&lt;br /&gt;Now, what I really want is a convenient, portable high-quality music I can listen to as the soundtrack for my increasingly frenetic life &lt;i&gt;and&lt;/i&gt;&amp;nbsp;an analog system at home with LPs for recreational listening.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-6238535330902426427?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://urlenco.de/wggzj' title='Music on vinyl making a comeback'/><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/6238535330902426427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=6238535330902426427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/6238535330902426427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/6238535330902426427'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2012/01/music-on-vinyl-making-comeback.html' title='Music on vinyl making a comeback'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-qBik103_ctE/TyLWOvIVT1I/AAAAAAAAAMc/qif8IWhS80Q/s72-c/Turntable_with_Vinyl_LP_Record.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-5278468207605670620</id><published>2011-09-20T17:12:00.001-07:00</published><updated>2011-09-20T17:12:35.836-07:00</updated><title type='text'>Good, bad math joke</title><content type='html'>&lt;blockquote&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;An infinite number of mathematicians walk into a bar. The first one tells the bartender he wants a beer. The second one says he wants half a beer. The third one says he wants a fourth of a beer. The bartender puts two beers on the bar and says “You guys need to learn your limits.”&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 11px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Verdana, sans-serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;Oof.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 11px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-5278468207605670620?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/5278468207605670620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=5278468207605670620' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/5278468207605670620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/5278468207605670620'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2011/09/good-bad-math-joke.html' title='Good, bad math joke'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-7323262726348335566</id><published>2011-08-28T10:04:00.000-07:00</published><updated>2011-08-28T17:42:28.691-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='Photovine'/><title type='text'>Change (again)</title><content type='html'>Last Thursday, we at Slide (now a part of Google) got word that we were officially shut down, and we'd be moving to other (very interesting) opportunities within Google. &amp;nbsp;Slide is over, and it's been an interesting and educational run.&lt;br /&gt;&lt;br /&gt;Last January, my team was directed to a new project: Photovine. We launched to the public just over a week ago, so one week from launch to dead-pool is about the quickest death of a project I've yet to experience. It was also the best product I've been a part of, and one of the ones about which I'm most proud ("&lt;i&gt;Just Three Words&lt;/i&gt;" being the other, outside of a couple of my music projects).&lt;br /&gt;&lt;br /&gt;During the time to launch, from January&amp;nbsp;through&amp;nbsp;last week, I had the opportunity to learn how to develop software for the iPhone (iOS, Objective-C), how to be a better engineer in python, and had the opportunity to take what I'd learned from my previous products at Slide and apply them - and so improving overall as an engineer. If any mistakes were to be made, they'd be new mistakes and not repeats of old ones. &amp;nbsp;("&lt;i&gt;Tomorrow, make better mistakes&lt;/i&gt;". - old sign at old Slide offices)&lt;br /&gt;&lt;br /&gt;The Photovine team was comprised of some of the smartest and most talented people I've ever had the good fortune which which to work. To say that it was a collection of creative, smart, hard-working, professional, self-directed and pleasant people would be an understatement.&lt;br /&gt;&lt;br /&gt;In the end, we delivered an absolutely fantastic product. Here's what some of the tech writers and bloggers had to say about it during it's short run:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;"...a&lt;span class="Apple-style-span" style="line-height: 19px;"&gt;nd we think it goes without saying Photovine was Google’s best designed piece of software. Period."&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;"&lt;span class="Apple-style-span" style="background-color: white; line-height: 19px;"&gt;The concept is certainly fun...&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; line-height: 19px;"&gt;Definitely worth checking this one out."&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;"&lt;span class="Apple-style-span" style="background-color: white; line-height: 23px;"&gt;&amp;nbsp;Design-wise it’s beautiful....&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; line-height: 23px;"&gt;The community is growing at an exponential rate and there are some seriously clever, interesting and beautiful photos being shared already."&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;I'm very proud of the work we did on this app. It could have been just another photo-sharing app, but it was most definitely not that - it was a way to discover people via the medium of a topical,&amp;nbsp;shared&amp;nbsp;photograph. The fact that a community sprung up almost immediately around Photovine (within days of launching our restricted-access beta version) does not surprise me.&lt;br /&gt;&lt;br /&gt;As an engineer, I had a great time - we went from knowing next to nothing about iPhone development to becoming very proficient in a very short time, and I had the opportunity to work with engineers whose styles and&amp;nbsp;proficiencies&amp;nbsp;in many ways complemented my own. I learned a lot from those guys, and I can only hope that they in turn learned something from me as well.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So now, on to new things. I don't know what these new things are yet - the upcoming weeks are filled with meetings and planning - but I'm certain it will be interesting. &amp;nbsp; New opportunities, and new possibilities, and although every day offers nearly endless possibilities, at the moment that fact has a clarity of focus that is pretty exciting.&lt;br /&gt;&lt;br /&gt;In the meanwhile, I've started up some music projects again. It's been six or seven years since my last music work - you can hear it over at &lt;a href="http://www.jasonrubenstein.com/"&gt;www.jasonrubenstein.com&lt;/a&gt; and all of my music is free for download, and free for listening. I'm seeing more and more work being done (and more and more companies started) in the intersection of music and social, and am keeping my eyes open on this one.&lt;br /&gt;&lt;br /&gt;And I'm still fiddling around with the website project I started many weeks ago. It's on my personal (non-public) server at home, and now that I'm out of a "&lt;i&gt;OMG we're launching a product&lt;/i&gt;" kind of schedule, I'll get back to it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-7323262726348335566?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/7323262726348335566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=7323262726348335566' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7323262726348335566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7323262726348335566'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2011/08/change-again.html' title='Change (again)'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-6529968343620436109</id><published>2011-06-25T08:06:00.000-07:00</published><updated>2011-06-25T08:30:03.367-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Identity theft'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>How to survive identity theft</title><content type='html'>&lt;i&gt;Waitasecond&lt;/i&gt;. Someone out there is pretending to be &lt;i&gt;me&lt;/i&gt;? Attempting to get &lt;i&gt;credit&lt;/i&gt;? In my name? Why those dirty bastards!&lt;br /&gt;&lt;br /&gt;This, dear readers, is how to prepare for, and deal with, identity theft.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What happened?&lt;/b&gt;&lt;br /&gt;Someone, persons unknown to me,&amp;nbsp;pretended&amp;nbsp;to be me in order to attain credit at department stores and buy things. Expensive things. &lt;i&gt;Really&lt;/i&gt; &lt;i&gt;expensive&lt;/i&gt; things. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How'd they do this, JRub?&lt;/b&gt;&lt;br /&gt;They had my name, my SSN, my phone number, and a driver's license with my current address. &amp;nbsp;They walked into a few really swish department stores and, pretending to be me, tried to buy designer-label goods. Little do they know I'm an Armani or a Zegna kind of man, and clearly not a Ferragamo or a Paul Smith dude. &lt;i&gt;Pfft&lt;/i&gt;. Idiots.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How'd they get that info!?&lt;/b&gt;&lt;br /&gt;I haven't a clue. I have some guesses, all semi-educated, as to how they might fish up my personal info. But lets leave it at that - they got it, and they used it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What happened?&lt;/b&gt;&lt;br /&gt;Very little. Most credit for this schmuck was denied. And I found about it out so quickly that the door of felonius opportunity slammed shut so fast that the dumb bastard couldn't get away with very much.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How'd you find out?&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I subscribe to a credit-monitoring service (see below) and&amp;nbsp;received&amp;nbsp;an alert of several credit inquiries against my report.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;One of the retail stores called me to ask ..."if I still wanted the Ferragamo". I did not; That was not me; I was not in the store that day (or week, or month). This confirmed the credit-monitoring alert that someone was pretending to be me. I got as much information as I could from the store clerk who called me.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I received a letter from another retail credit company asking for verification of identity. Again, it wasn't me.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Once I knew there was fraud going on, I called each and every credit fraud dept at each business for each incident of which I was made aware by the credit monitoring service. I asked for as much information from them as possible and answered all of their questions.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How to protect yourself before any fraud occurs. Or: the paranoid, proactive part of the story&lt;/b&gt;&lt;br /&gt;Years ago I purchased a subscription to one of those credit-monitoring services. Whenever there is a change of any kind to my credit on any or all of Experian, Equifax, or Trans-Union reports, I receive an email indicating the change and the approximate date of activity.&lt;br /&gt;&lt;br /&gt;This, it turns out, was a wise move:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Good&lt;/i&gt;: I received an email &lt;i&gt;within days&lt;/i&gt; of several credit inquiries against my credit history.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Bad&lt;/i&gt;: Some (but not all) of the reporting was up to 4 days behind the actual credit inquiry event, and two days behind a fraudulent credit event. I'd have liked the notification to have been within hours of every, and not just some, activity, but: a few days at most is better than nothing, or than a month.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Summary&lt;/i&gt;: &lt;u&gt;GOOD&lt;/u&gt;, because I found out that something fishy and illegal was going in within days, and not weeks, of the event(s). I was able to respond very quickly and shut the door of criminal opportunity.&lt;/li&gt;&lt;/ul&gt;Without this service, I would not have known that some loser was out there lining up credit in my name, using my personal information, as quickly as I did.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What happens when someone steals your identity (Or: the reactive part of the story):&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;As soon as you get notice from your credit-monitoring service (usually via email, but you can get notices via SMS) that funny business is going on with your credit history, read this: &lt;a href="http://www.ftc.gov/bcp/edu/microsites/idtheft/consumers/defend.html"&gt;The FTC Guide to Recovery from Identity Theft&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Place a &lt;a href="https://www.experian.com/fraud/center.html"&gt;fraud alert&lt;/a&gt; on your credit reports at all three agencies.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Place a&amp;nbsp;&lt;a href="http://www.experian.com/consumer/security_freeze.html"&gt;security&amp;nbsp;freeze&lt;/a&gt; on your credit reports at all three agencies.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Immediately, &lt;i&gt;and I do mean immediately&lt;/i&gt;, contact the creditors' credit-fraud departments and get the credit lines canceled (or suspended). &lt;br /&gt;Get as much information as you can from them as possible as to what information the thief had, what they purchased, when, and where. Get the mailing address and email (or fax number) of the credit fraud department, and if they have their own fraud claim form, have them send one to you. You'll need the information you receive from them in later steps, below.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;File a police report with your local police. (I walked to my local police station with all the paperwork I needed, organized, and prepared. The officer was very helpful: I made his job easy and he went the extra mile for me).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;File an &lt;a href="https://www.ftccomplaintassistant.gov/"&gt;FTC Identity-theft complaint form&lt;/a&gt;. You can use this to help get the fraudulent credit canceled by the creditors as well as removed from the credit agencies' reports. This is where you'll need the information you asked for from the credit fraud department (above).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Send a copy of the FTC form, and any police reports if available (you should at least have the report or case number) to the creditors' fraud claims department. Send it via fax, email, and regular mail. If the fraud department(s) have their own form, of course fill that out and return it as well.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Contest any fraudulent credit reporting with each credit bureau. You may need to send them copies of the reports as well.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Don't let up until the fraud has been removed from your credit reports, and you're not responsible for paying anything. Not one thin dime. Keep contesting the credit report, and keep at it.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Watch your mail over the coming months. You may receive a bill for credit you've never asked for, or a letter requesting clarification of identity, or a bill for some new service, or a collections notice. This is indication of additional fraud the credit monitor may not have picked up or been alerted to, and you'll need to act.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;In summary:&amp;nbsp;&lt;i&gt;Do not fuck around. &lt;/i&gt;Act, and act immediately. Show the world (and the would-be creditors, and the credit bureaus) that you are like-a-goddam-heart-attack serious.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;WTF are these credit bureau or credit agency things you're talking about, Mr. Rubble?&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://www.experian.com/"&gt;Experian&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.equifax.com/home/en_us"&gt;Equifax&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.transunion.com/"&gt;Trans-Union&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;If you don't know what a credit bureau is, and you're in the U.S., read this:&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Credit_bureau#United_States"&gt;http://en.wikipedia.org/wiki/Credit_bureau#United_States&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;b&gt;Can't I get a free copy of my credit report?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Why yes; yes, you can. Read here for more info:&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.fdic.gov/consumers/consumer/ccc/reporting.html"&gt;http://www.fdic.gov/consumers/consumer/ccc/reporting.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;What else can I do to prevent loss, web identity theft, hacking, or other financial damage?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Here are some general tips that can help you &lt;i&gt;reduce the probability of&amp;nbsp;significant&lt;/i&gt;&lt;i&gt;&amp;nbsp;financial loss.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Register with a credit-monitoring service that covers all three major bureaus, or with the credit-monitoring service of one (or all) of the credit bureaus.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If the monitoring service alerts you to activity that you did not initiate, &lt;i&gt;act immediately&lt;/i&gt;. (see above)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use complex passwords for every website you use.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;a simple password is one that reads like a real language or sequence: examples are "fluffy", "fido", "123 Main Street", "123456789", "1020304050" or even keyboard patterns that are easily guessed like "1q2w3e", "qwerty", "asdfgh", and so on. Also, any proper name like "Chicago", "Dixon", "Sacramento", "OMalley", "Goldberg", "Lee", "Twilight", "Harry Potter", "Serenity". &amp;nbsp;&lt;i&gt; Do Not Use These.&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;a complex password is a password made up of a wild mix of UPPERCASE letters, lowercase letters, digits, and if possible symbols ("@#$%&amp;amp;_."). &amp;nbsp;A great example of a complex password looks nothing like a real language: for example "nj2.TXd5", "A7&amp;amp;M20vkL", or "788$jK6b00Y4H!".&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Never, ever, ever, ever, ever use the same password at more than one website.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;No, really, I'm not kidding. Re-read that until you are ready to puke potted-violets. Never, and I mean never, use the same password twice. Don't complain to me about how hard it is to remember crazy complicated passwords all over the place! This is &lt;i&gt;YOUR&lt;/i&gt; bank account / IRA / 401k / Level 85 Night Elf Warrior. Not mine. I'm just trying to give some reasonable advice here. &lt;i&gt;&lt;u&gt;Use unique password&lt;/u&gt;&lt;/i&gt;&lt;u&gt;s&lt;/u&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If possible, for banks and other sites that have access to your money (whether cash or credit), use the longest password possible. If you like, use a &lt;a href="http://en.wikipedia.org/wiki/Password_manager"&gt;password manager.&lt;/a&gt;&amp;nbsp;Some of my passwords are 32-characters long. No kidding. And they look like a someone left a box of Alpha-Bits on a live land-mine.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;And, whenever possible, use different user names (login IDs, whatever you want to call it). Some sites restrict you to using your email address &amp;nbsp;("johndoe@some-email.com"), but if you can use different ones for different sites, go for it: "john.doe", jdoe1975, johnqdoe, johndough, and so on.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Shred any documents at home before tossing them into the recycling bin. &amp;nbsp;(Hey, look! &lt;a href="http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&amp;amp;field-keywords=shredders&amp;amp;x=0&amp;amp;y=0"&gt;Shredders&lt;/a&gt;!) Believe it or not, some people like to dive into the dumpster behind your apartment building and look for documents that contain personal information. Yes, I know: these people are losers. But rather that sit there and psychoanalyze these jerks, instead do yourself a favor and buy a shredder.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Go through your email and delete any email that has a password from a website in it. On the odd, but possible, chance your email is compromised, at least the thief won't be able to get to any other accounts whose credentials are lurking in your email. Make sure you "Empty the trash" of your email service, if possible.&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;There are probably more things you can do to protect your credit and your assets. This is &amp;nbsp;a good start.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There is no such thing as perfect security. But&amp;nbsp;remember: "&lt;i&gt;Perfect is the enemy of Good&lt;/i&gt;". These steps should reduce the probability that your online identity will be compromised.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-6529968343620436109?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/6529968343620436109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=6529968343620436109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/6529968343620436109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/6529968343620436109'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2011/06/how-to-survive-identity-theft.html' title='How to survive identity theft'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-8755496771904811341</id><published>2011-05-22T22:37:00.000-07:00</published><updated>2011-05-23T13:32:45.120-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hobbies'/><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><title type='text'>Finally, a new project</title><content type='html'>I'm finally working on a new personal website.&lt;br /&gt;&lt;br /&gt;It will be jasonrubenstein.com.&lt;br /&gt;&lt;br /&gt;I haven't worked on a personal project of any kind in a few years. I haven't had the interest, really, but in the last few weeks something has been nagging at me. I needed to build &lt;i&gt;something &lt;/i&gt;because NOT building anything was Driving. Me. Nuts.&lt;br /&gt;&lt;br /&gt;So, a new personal website, my little "&lt;i&gt;ME!&lt;/i&gt;" on the interwebs.&lt;br /&gt;&lt;br /&gt;I'll have my music up there, and some words made into sentences corralled into paragraphs, and some photos, and some other things.&lt;br /&gt;&lt;br /&gt;Yesterday morning, after the rolling up of sleeves and the brewing and drinking of coffee, I dove into hand-coding html and css to create a basic prototype of the design I have in mind. The design is minimalist, with at most three fonts (two sans-serif and one serif). Much like in music, where what is between the notes is as important (and sometimes more important) than the collected notes, what's not in space is as important (and sometimes more important) than what is collected in other parts of the space. I'm keeping this in mind as I go.&lt;br /&gt;&lt;br /&gt;Back to yesterday: once I had a working prototype of a webpage, I shattered it into several pieces.&lt;br /&gt;&lt;br /&gt;Those pieces became the building-blocks for several web pages.&lt;br /&gt;&lt;br /&gt;Once I had the pieces of the shattered webpage, I jumped into &lt;a href="http://www.python.org/"&gt;python &lt;/a&gt;and built a little webpage-builder function that consumes shards of &amp;nbsp;shattered prototype-webpage and produces several new, different, webpages. &amp;nbsp;This little, and simple, html rendering engine builds the pages for my new website.&lt;br /&gt;&lt;br /&gt;Once I turned the webpage-shards into proper webpages, I used a couple of open-source packages to set up a webserver. Using &lt;a href="https://github.com/teepark/greenhouse"&gt;Greenhouse &lt;/a&gt;and &lt;a href="https://github.com/teepark/feather"&gt;Feather&lt;/a&gt;, I set up a little server in the comfort of my own home.&amp;nbsp;(The future! It is here!)&lt;br /&gt;&lt;br /&gt;I made a deliberate and certain decision to eschew the use of a templating engine (Cheetah, Mako, etc). I'm having more fun writing my own rendering functions. &amp;nbsp;I'm not using a framework because, well, what fun would that be? That and I'm not framing a subdivision of houses, I'm building a little mid-century-modern joint with big windows and Helvetica.&lt;br /&gt;&lt;br /&gt;I may use jQuery or some other javascript library, but at the moment have no need for one.&lt;br /&gt;&lt;br /&gt;I'm shooting for &lt;i&gt;simple&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;I decided against more commonly used http server solutions as I want to work with a newer open-source package and help work out the kinks in whatever way I can. &lt;br /&gt;&lt;br /&gt;Yesterday, from 7am through 7pm, was really, exceptionally, fun.&lt;br /&gt;&lt;br /&gt;I've been experimenting with fonts with the intention of beautiful web typography. I love typography and clean, minimalist design, and I'm going to see if I can get what's in my imagination out onto the screen.&lt;br /&gt;&lt;br /&gt;I'm learning different things than I learn at work, and remembering things I have forgotten I knew. (Or at least I've forgotten that I remembered how to do some of this stuff a few years ago but in the meantime of non-use had forgotten to remember it, or simply forgot it, and now have&amp;nbsp;remembered&amp;nbsp;where I put some of this knowledge).&lt;br /&gt;&lt;br /&gt;This project is going to take a while. I have a few pages of content to work through followed by wrestling some css into submission. Not to mention some spit&amp;amp;polish of the http server, the image server, and deciding from where the hell to serve the mp3 files of music.&lt;br /&gt;&lt;br /&gt;But since I have an addiction to shipping product, this thing will be live relatively soon.&lt;br /&gt;&lt;br /&gt;The most important thing, the thing that is most important, the point that makes the point is: I'm finally, Finally, finally working on a project for the love of working on, and shipping, a project. I want to learn, hands-on, &amp;nbsp;how servers along the lines of Greenhouse and Eventlet really work, and how something like Feather or Spawning really work. I want to hack at css to make pretty san-serif to happen on my computer screen, even though the problem has been solved 132,619 times already.&lt;br /&gt;&lt;br /&gt;So, I'm doing this because not doing it was becoming impossible. Well, and the vanity of my name on a live website that's all about me.&lt;br /&gt;&lt;br /&gt;Vanity might have a little to do with this.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Update&lt;/i&gt;: At lunch, a friend asked me if I thought I was over-engineering a solution for a very simple project (a static website). Yes, I am! The website is the &lt;a href="http://en.wikipedia.org/wiki/MacGuffin"&gt;macguffin &lt;/a&gt;, the thing that gives me the reason to go on this journey of coding. I could just set up nginx and serve html and be done with it. But that's not the point to me; the point to me, right now, is rolling up my sleeves and playing with some tech.&amp;nbsp;&amp;nbsp; Next round, I'll work on something that solves a real problem.&amp;nbsp; This round, the problem I want to solve is personal, and not technical.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-8755496771904811341?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/8755496771904811341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=8755496771904811341' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8755496771904811341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8755496771904811341'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2011/05/finally-new-project.html' title='Finally, a new project'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-5818108102774968370</id><published>2011-03-21T19:15:00.000-07:00</published><updated>2011-03-21T19:15:23.504-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><title type='text'>"What qualities make a good startup engineer?"</title><content type='html'>My answer on &lt;a href="http://www.quora.com/What-qualities-make-a-good-startup-engineer/answer/Jason-Rubenstein"&gt;Quora.com&lt;/a&gt; to the question "&lt;i&gt;What qualities make a good startup engineer?&lt;/i&gt;" (originally written on Quora and copied below):&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;1. The ability to "get s*** done. This is too vague a description for an attribute, so: The ability to recognize a "best fit" solution to a particular (product) problem or requirement and implement it as quickly as possible, also recognizing that the best solution for the product **right now**&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;i style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;may&lt;/i&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;mean acquiring some technical dept to be paid later. Another way to say it is the ability to ship as quickly as possible probably without adherence to some engineering dogma. Ship!&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;1a. Very important: knowing when to pay off technical debt. It can be more of an art than a science, and at times it's blatantly obvious; I'm not sure whether this is an acquired or a native skill, but it's important.&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;1b. Love your own code, and love to rewrite your own code. Don't be precious with it. Your code is not you, you are not your code. Rewriting your own work is a perk of the job, not a chore.&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;2. The ability to learn very quickly. I believe this implies some (high) level of intellectual curiosity, as the best learners (in my experience) are also very intellectually curious. This doesn't just mean learning new-to-them engineering knowledge, but also new-to-them people/management/social/&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;wbr style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;etc. knowledge.&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;3. The ability to suspend the behavior most commonly associated with jerks, a**h***s and know-it-all software engineers. Also, see #2, as a part of working in groups is learning how to work in groups as a civilized person and not akin to a chimpanzee throwing your poo at people you think are idiots. This is especially important (it seems) for extremely intelligent engineers accustomed to being the smartest person in the room in most other situations.&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;4. Related to #3 is learning to trust the other people in your startup, and trusting that they are just as smart (and in some areas of expertise, smarter) than you. Trust that the people around you are fantastic. And learn from as many of them as possible.&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;5. Also related to #2 is learning very quickly how to handle stress. I must put the emphasis here on learning what shifts in behavior and habit will get you through it all over purely cognitive solutions. Changing diet, getting enough sleep (where "enough" is relative, but learning when "enough" is enough if you get my meaning), and other changes in lifestyle are what I'm suggesting (among others). It's one thing to convince yourself that you're handling the stress, it's another to actively take action to counteract the effects of stress. Pro-tip: breakfast cereal at every meal and 3 hours of sleep per night only get you so far - probably to MVP. After that, you're in a marathon; learn to run a marathon. I'm not suggesting a "work/life" balance. I'm suggesting a "work/recharge-for-more-w&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;wbr style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;ork" balance.&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;6. Experience. If possible. If not, see #2.&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;7. Somewhat related to #6 is knowing what tools to use in your trade. For example, knowing when something is more appropriate to use (I.e., well-established, broad base of support, very active and numerous community) vs. when some new, hot, (probably fashionable) new technology is at least not entirely inappropriate (brand new, not proven to scale, but so very very cool new tech) but probably inappropriate for the immediate task at hand. And vice-versa - when it is OK to use some yet-to-be-annealed-in-the&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;wbr style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;-furnace-of-a-quickly-gro&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;wbr style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;wing-product-of-a-success&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;wbr style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;ful-startup technology.&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, default; font-size: 13px; line-height: 17px;"&gt;8. Honesty, personal responsibility. I've seen otherwise honest engineers show their compulsive-liar side when put under extreme pressure (usually after very little sleep), or called-to-task for some error of judgement. Stand up, admit mistakes, and see #2 as usual. Learn from the error&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-5818108102774968370?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.quora.com/What-qualities-make-a-good-startup-engineer/answer/Jason-Rubenstein' title='&quot;What qualities make a good startup engineer?&quot;'/><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/5818108102774968370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=5818108102774968370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/5818108102774968370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/5818108102774968370'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2011/03/what-qualities-make-good-startup.html' title='&quot;What qualities make a good startup engineer?&quot;'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-7401699361327593775</id><published>2011-02-21T09:29:00.000-08:00</published><updated>2011-02-21T12:06:57.120-08:00</updated><title type='text'>Avoiding Burnout</title><content type='html'>&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Sure, all-nighters can be fun once in a while. And 16-to-20-hour-days can be very rewarding when you're starting your own company or working at one about which you're excited. But no one, even you the 20-something hyperactive borderline-ADD super-evil-genius engineer, can keep it up for weeks on end and remain effective. &amp;nbsp;Beware burn-out!&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;How do I know?&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;The &lt;a href="http://www.mayoclinic.com/health/burnout/WL00062"&gt;Mayo Clinic&lt;/a&gt; advises the following as possible signs of burn-out:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;ul style="color: #555555; font-family: Verdana, sans-serif; font-size: 12px; line-height: 15px; margin-bottom: 15px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 45px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="list-style-image: initial; list-style-position: initial; list-style-type: square; margin-bottom: 15px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Have you become cynical or critical at work?&lt;/li&gt;&lt;li style="list-style-image: initial; list-style-position: initial; list-style-type: square; margin-bottom: 15px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Do you drag yourself to work and have trouble getting started once you arrive?&lt;/li&gt;&lt;li style="list-style-image: initial; list-style-position: initial; list-style-type: square; margin-bottom: 15px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Have you become irritable or impatient with co-workers, customers or clients?&lt;/li&gt;&lt;li style="list-style-image: initial; list-style-position: initial; list-style-type: square; margin-bottom: 15px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Do you lack the energy to be consistently productive?&lt;/li&gt;&lt;li style="list-style-image: initial; list-style-position: initial; list-style-type: square; margin-bottom: 15px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Do you lack satisfaction from your achievements?&lt;/li&gt;&lt;li style="list-style-image: initial; list-style-position: initial; list-style-type: square; margin-bottom: 15px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Do you feel disillusioned about your job?&lt;/li&gt;&lt;li style="list-style-image: initial; list-style-position: initial; list-style-type: square; margin-bottom: 15px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Are you using food, drugs or alcohol to feel better or to simply not feel?&lt;/li&gt;&lt;li style="list-style-image: initial; list-style-position: initial; list-style-type: square; margin-bottom: 15px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Have your sleep habits or appetite changed?&lt;/li&gt;&lt;li style="list-style-image: initial; list-style-position: initial; list-style-type: square; margin-bottom: 15px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Are you troubled by unexplained headaches, backaches or other physical complaints?&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #555555; font-family: Verdana, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 12px; line-height: 15px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Advice for the Engineer&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Learn to run a marathon, not a sprint. Learn how much sleep you need every night to perform at a&amp;nbsp;&lt;i&gt;consistently high level for many years&lt;/i&gt;. Consider vacation a part of your compensation; the way you consider a paycheck. (Would you really want your boss withholding a paycheck because "it just isn't a good time right now"?) &amp;nbsp;Learn when you need to recharge your batteries, and go away and recharge them.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;i&gt;Live, sleep and eat in such a way as to maximize your cognitive abilities&lt;/i&gt;.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Find something away from work on which to focus. Whether it's the gym, cooking, riding a bicycle, reading.. whatever, as long as it isn't coding. Do this thing most days of the week.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Find a manager you trust, and trust your co-workers to carry the load while you're away. If you can't trust them, find some to trust.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;When you're working -&amp;nbsp;&lt;i&gt;work&lt;/i&gt;. Focus, concentrate, pay attention, do your absolute best. The same goes for when you're not working: when you're asleep, your job is to sleep. Focus on that and don't worry about work. Divide your time into highly-focused, separate cycles. When you're not working, focus on not working.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Find the number of &lt;i&gt;productive hours per day&lt;/i&gt; that works for you. I bet it's many more than 8 and less than 18. How many of those hours are ones in which you're working on difficult problems that require highly-focused cognition, and how many are those in which you're only good for answering emails, perusing CSS, tuning documentation, or catching up on Hacker News? And at what point are you a useless, over-caffeinated lump in a hoodie, only useful for converting O2 into CO2? Figure out what works for you.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;It's more fun to be pleasant, happy, and fun to be around! Being a cranky, burned-out curmudgeon sucks, for you and for people around you. If you see someone who's work habits are leading them to a crispy end, try to mentor them a bit into a better work cycle:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;i&gt;Take responsibility for your people&lt;/i&gt;. Work on lowering the probability that someone will burn-out. If you see someone who's burned out (and they report to you), get them out of the office and in a vacation. It's either that or work them until they quit - or get fired.&amp;nbsp;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;If your employees (or subordinates) are not important to you, and if the intellectual property in their heads is not valuable to you, by all means work them to the bitter-end, until they quit.&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;If you care about your company and want to keep talented, very-hard-working engineers in your employ, help them prevent burning-out and make sure they take vacation (as a manager, you should worry that your best and/or most enthusiastic engineers won't take vacation at all rather than worry they'll take too much). Assist them in their "work-life" balance. For many engineers, work is their life and their life is their work; instead, you may need to assist them in their "work-recharge" balance.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;i&gt;Take responsibility for yourself&lt;/i&gt;; if you start to feel edge, cranky, cognitively dull, stressed and unable to sleep you may need to get away. Better yet is to plan vacations months in advance, and make them indelible in your calendar. Be proactive with your "recharge" time. Take responsibility for it; it's best to be the engineer your manager never has to watch for signs of burn-out because you've already preempted the possibility.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-7401699361327593775?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/7401699361327593775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=7401699361327593775' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7401699361327593775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7401699361327593775'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2011/02/avoiding-burnout.html' title='Avoiding Burnout'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-4517187217434752537</id><published>2010-09-04T08:58:00.000-07:00</published><updated>2010-09-04T08:58:48.882-07:00</updated><title type='text'>What do you mean by "Everything"?</title><content type='html'>I had a great meeting with someone the other day who, during the course of our conversation, questioned my statement in my post below&lt;sup&gt;1&lt;/sup&gt; that "&lt;span class="Apple-style-span" style="color: #333333; font-family: arial; font-size: 14px; line-height: 19px;"&gt;Everything does not need to be a Class".&amp;nbsp;&lt;/span&gt; His rationale was that if something had attributes, it should be a class. I realized that this point of mine needed clarification. &lt;br /&gt;&lt;br /&gt;I like Classes that represent some real-world object; whether tangible (car) or intangible (transaction). It's a &lt;i&gt;thing &lt;/i&gt;that has real attributes which, when taken as a whole, comprise that &lt;i&gt;thing&lt;/i&gt;. &amp;nbsp;So sure, create a Class and instantiate it a few times as needed to get a few &lt;i&gt;things &lt;/i&gt;happily bouncing around your system. If it has an analogue in the physical world, it's an excellent candidate for a Class.&lt;br /&gt;&lt;br /&gt;What I object to can be shown by example: A Class composed of a collection data transformation functions. Why does this need to be an Object? It's a module full of functions, really, and does not need the additional layer of Class in there to wrap the methods. This Class doesn't represent a &lt;i&gt;thing&lt;/i&gt;, and doesn't have attributes. I'd recommend module-level functions.&lt;br /&gt;&lt;br /&gt;Another example is best demonstrated by a process that does the following:&lt;br /&gt;1. Generate some JSON for consumption by a web client&lt;br /&gt;2. Wrap this JSON in an instance of a class (no other attributes).&lt;br /&gt;3. Send this object to the client.&lt;br /&gt;4. The client unwraps the JSON from the object&lt;br /&gt;5. The client consumes the JSON.&lt;br /&gt;&lt;br /&gt;I object that there needs to be an Object here.&lt;sup&gt;&amp;nbsp;&lt;/sup&gt; I'd rather see&lt;br /&gt;1. Generate some JSON for consumption by a web client.&lt;br /&gt;2. Send the JSON to the client&lt;br /&gt;3. The client consumes the JSON.&lt;br /&gt;&lt;br /&gt;I fully realize that all of this sounds (and is) absolutely elementary. &amp;nbsp;And yet, I run into over-Objectification more frequently than I believe is&amp;nbsp;desirable. (The whole wrap-JSON-in-an-object was rationalized by the engineer, "Everything in the system is an object, and I wanted to be consistent". &amp;nbsp;Someone else was optimizing for the future, "We might need more stuff sent to the front-end someday. This makes it a no-brainer for the next engineer".)&lt;br /&gt;&lt;br /&gt;"&lt;i&gt;If all you have is an OOP, everything looks like a Class"&lt;/i&gt;. &amp;nbsp;I believe that engineers should have a whole box of tools from which to choose, and OO is one of those tools &lt;i&gt;among others&lt;/i&gt;. When everything in your system is an object, it's clear that your toolbag contains only one tool. Even worse is when every object inherits from some other object, sometimes in stacks of 5, 7, 12 Classes high. (e.g., no use of object-composition whatsoever: conflation of the "Is-A" ad "Has-A" relationship concepts, conflation of data and function, etc). &amp;nbsp;And, once again, ultimately we're engineers in a business; our responsibility&amp;nbsp;is not at all to the gods of OO, it is to the business. &amp;nbsp;It's very valuable to learn when a Class is absolutely appropriate and awesome, and when It Is Not.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: arial; line-height: 19px;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;1.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://jasonrubenstein.blogspot.com/2010/04/thoughts-and-advice-part-0.html"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://jasonrubenstein.blogspot.com/2010/04/thoughts-and-advice-part-0.html&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-4517187217434752537?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/4517187217434752537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=4517187217434752537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/4517187217434752537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/4517187217434752537'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2010/09/what-do-you-mean-by-everything.html' title='What do you mean by &quot;Everything&quot;?'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-3942244258806529325</id><published>2010-08-07T07:58:00.000-07:00</published><updated>2010-08-07T07:58:59.100-07:00</updated><title type='text'>News</title><content type='html'>Quick update:&lt;br /&gt;&lt;br /&gt;Yes, I'm back at Slide, and yes, we've just been acquired by Google.&lt;br /&gt;&lt;br /&gt;Look out, world.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-3942244258806529325?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.businessweek.com/idg/2010-08-06/google-confirms-slide-acquisition.html' title='News'/><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/3942244258806529325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=3942244258806529325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/3942244258806529325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/3942244258806529325'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2010/08/news.html' title='News'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-8251223637547185057</id><published>2010-04-30T09:48:00.001-07:00</published><updated>2010-08-08T08:21:05.553-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><title type='text'>Thoughts and Advice, part 0</title><content type='html'>&lt;i&gt;General advice regarding engineering&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Some tenets:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Everything does not need to be a Class.&amp;nbsp;&lt;/li&gt;&lt;li&gt;When you do use Classes, consider composition.&lt;/li&gt;&lt;li&gt;Keep it simple.&lt;/li&gt;&lt;li&gt;Ask yourself, "Now that I consider this complete, how can I make it simpler?"&lt;/li&gt;&lt;li&gt;Can any &lt;i&gt;reasonably talented and/or experienced&lt;/i&gt;&amp;nbsp;engineer read what I have created and extend it/modify it in as little time and as effectively (e.g., regression-free) as possible?&lt;/li&gt;&lt;li&gt;Ask yourself, "Have I separated data from function?"&lt;/li&gt;&lt;li&gt;See 3. (above)&lt;/li&gt;&lt;li&gt;"There are many right ways to do the task" does not mean there are not wrong ways to do the task[2]. &amp;nbsp;If one can say "All things being equal, this is a correct way to do this task", one must remember that all things are &lt;i&gt;never &lt;/i&gt;equal, and the solution you are proposing may violate or lay beyond the principles of the existing &lt;i&gt;robust &lt;/i&gt;architecture. If it does violate the principles of the existing and robust architecture, it is indeed a bad solution and you probably shouldn't do it.&lt;/li&gt;&lt;li&gt;When in doubt, find two or three engineers whom you respect and ask their opinion. Better yet, get them together and present your idea/solution to them (preferably&amp;nbsp;at a&amp;nbsp;white-board). The act of explanation slows down your thought process, and activates a different part of the brain (you engage in a different cognitive process than you do just sitting there, ruminating). It forces you to clearly articulate and &amp;nbsp;linearly work through the solution. Then: make an educated best-guess.[3]&lt;/li&gt;&lt;li&gt;If your rebuttal to anything starts with "&lt;i&gt;Yeah, but&lt;/i&gt;..", stop and reconsider your argument.&lt;/li&gt;&lt;li&gt;Rationalizing a bad decision does not alter the quality of that decision. While not all bad decisions can be mitigated &lt;i&gt;right now&lt;/i&gt;, don't conflate time- and project-management with the idea that "&lt;i&gt;it was the best we could do at the time, therefore it's as good-code as everything else in the system&lt;/i&gt;". &amp;nbsp;Rather, "&lt;i&gt;Yeah, I know it sucks, and we'll fix it when it's&amp;nbsp;opportune; for the moment we have to live with it&lt;/i&gt;".&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Some fallacies:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Everything needs to be a Class.&lt;/li&gt;&lt;li&gt;Functional programming "doesn't work"&lt;/li&gt;&lt;li&gt;Imperative (procedural) programming "doesn't work"&lt;/li&gt;&lt;li&gt;[software that is used very successfully around the world] "doesn't work"&lt;/li&gt;&lt;li&gt;Everything must be an Object.&amp;nbsp;&lt;/li&gt;&lt;li&gt;The more complicated it is, the better the system.&lt;/li&gt;&lt;li&gt;"&lt;i&gt;I don't need to explain myself, just do what I tell you&lt;/i&gt;."&lt;/li&gt;&lt;li&gt;Picking emotionally immature managers will result in a mature, professional organization.&lt;/li&gt;&lt;li&gt;"&lt;i&gt;Ur doin it rong&lt;/i&gt;". (See 7. and 8. above)&lt;/li&gt;&lt;li&gt;Great engineers &lt;i&gt;always &lt;/i&gt;make great managers.&lt;/li&gt;&lt;li&gt;Code is a good outlet to demonstrate to other engineers/the world/my mom how brilliant I really am.&lt;/li&gt;&lt;li&gt;"&lt;i&gt;My code will help The Singularity arrive more quickly&lt;/i&gt;".&lt;/li&gt;&lt;li&gt;"&lt;i&gt;The names of things doesn't matter - a good engineer should be able to read the code and know what things are&lt;/i&gt;". (Imagine an Exception class named "Fred". &amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;raise Fred('there has been a problem')&lt;/span&gt;&lt;/span&gt; is meaningless).[4]&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[1] Project specifications are generally a &lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;static &lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;'snapshot' of an evolving business process. The business changes rapidly as the people running the company must respond to changing market conditions. It's &lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;dynamic&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;. We are engineers, but we do not work in a vacuum. We must act as engineer/entrepreneurs.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[2] Via &lt;/span&gt;&lt;a href="http://unethicalblogger.com/posts/2010/05/being_libor_addendum"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Libor&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[3] If you work for a good manager, they'll &amp;nbsp;understand that part of their job is to help you recover from bad (although reasoned) decisions and failures; they will also understand that it is not a part of their job to try to prevent you from making bad (although reasoned) guesses/failures. [&lt;/span&gt;&lt;a href="http://hbr.org/2008/09/how-pixar-fosters-collective-creativity/ar/1"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://hbr.org/2008/09/how-pixar-fosters-collective-creativity/ar/1&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;]. They should strongly advise you against making unreasoned, and unreasonable, decisions.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;[4] &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;_items = items.item.Item.items()&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; and &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;from items.item import Item&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; is also&amp;nbsp;ridiculous. As are one-letter attribute names and attribute names that still conform to 1970's-era 6-character name limitations. &amp;nbsp;Also ridiculous is code that isn't sufficiently namespaced: &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;import game.store.items as stitems&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; and &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;import game.trade.items as tritems&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; is ridiculous. &amp;nbsp;Worse yet is i&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;mport game.challenges.exceptions as lolufailz&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;. No, really. Don't do that.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-8251223637547185057?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/8251223637547185057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=8251223637547185057' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8251223637547185057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8251223637547185057'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2010/04/thoughts-and-advice-part-0.html' title='Thoughts and Advice, part 0'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-217086165520976865</id><published>2010-03-20T08:21:00.000-07:00</published><updated>2010-03-20T08:44:52.908-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>How to be a Programmer</title><content type='html'>Time and time again, I return to &lt;a href="http://samizdat.mines.edu/howto/HowToBeAProgrammer.html"&gt;this classic essay by Robert L. Read&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Debugging is the cornerstone of being a programmer.    The first meaning of the verb &lt;span class="emphasis"&gt;&lt;i&gt;to debug&lt;/i&gt;&lt;/span&gt;  is to remove errors, but the meaning that really matters is &lt;span class="emphasis"&gt;&lt;i&gt; to see  into the execution of a program by examining it&lt;/i&gt;&lt;/span&gt;.  A programmer that cannot debug effectively is blind.  &lt;br /&gt;&lt;br /&gt;Idealists that think design, or analysis, or complexity theory, or whatnot, are more fundamental are not  working programmers.  The working programmer does not live in an ideal  world.  Even if you are perfect, your are surrounded by and must interact with code written by major software companies, organizations like GNU, and your colleagues.  Most of this code is imperfect and imperfectly documented.  Without the ability to gain visibility into the execution of this code the slightest bump will throw you  permanently. Often this visibility can only be gained by experimentation, that is, debugging.&amp;nbsp;&lt;/blockquote&gt;&amp;nbsp;If you're an engineer, this is a must-read.&amp;nbsp;&amp;nbsp; Related: &lt;a href="http://www.quora.com/What-should-you-learn-during-your-first-job-as-a-software-engineer-at-a-startup?__snid__=347824#answer_17944"&gt;this thread on Quora&lt;/a&gt;. And more quotes from the essay after the break.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;Debugging is fun, because it begins with a mystery.  You think it should   do something, but instead it does something else.  It is not always quite so simple---any examples I can give will be contrived compared to what sometimes happens in practice.  Debugging requires creativity and ingenuity.&lt;/blockquote&gt;&lt;br /&gt;On documentation:&lt;br /&gt;&lt;blockquote&gt;Life is too short to write crap nobody will read;  if you write crap, nobody will read it.  Therefore a little good documentation is best. [...] Writing good documentation is, first of all, good writing.  I suggest you find books on writing, study them, and practice.  But even if you are a lousy writer or have poor command of the  language in which you must document, the Golden Rule is all you really  need: ``Do unto others as you would have them do unto you.''  Take time to really think about who will be reading your  documentation, what they need to get out of it, and how you can teach that to them.  If you do that, you will be an above average documentation writer, and a good programmer.&amp;nbsp;&lt;/blockquote&gt;&lt;br /&gt;on bad code:&lt;br /&gt;&lt;blockquote&gt;It is very common to have to work with poor quality code  that someone else has written.  Don't think too poorly of them,  however, until you have walked in their shoes.  They may have been asked very consciously to get something done  quickly to meet schedule pressure.  Regardless, in order to work  with unclear code you must understand it.  To understand it takes learning time, and that time will have to come out of some schedule, somewhere, and you must insist on it.  To understand it, you will have to read the source code.  You will probably have to experiment with it.&amp;nbsp;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-217086165520976865?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://samizdat.mines.edu/howto/HowToBeAProgrammer.html' title='How to be a Programmer'/><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/217086165520976865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=217086165520976865' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/217086165520976865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/217086165520976865'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2010/03/how-to-be-programmer.html' title='How to be a Programmer'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-4850384812421124773</id><published>2010-03-19T06:52:00.000-07:00</published><updated>2010-03-19T10:44:25.802-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='discovery'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='information'/><category scheme='http://www.blogger.com/atom/ns#' term='Apture'/><title type='text'>Discover Information</title><content type='html'>You might have noticed that if you scroll down on this blog, a bar appears at the top. Go ahead, scroll down a bit now, I'll wait.&lt;br /&gt;&lt;br /&gt;Cool, isn't it? It's means that I have Apture 2.0-beta installed on the blog. This is a way to discover more information. Gain more knowledge! It's also a way to share that information and knowledge with the world.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;For example....&lt;/b&gt;&lt;br /&gt;Now try this: highlight this word: Iran. (You can highlight a word by double-clicking on it, or by dragging the mouse over it). See that little thought-bubble that says "Search"?&amp;nbsp; Click it. (or hit Control-C)&lt;br /&gt;&lt;br /&gt;Now you have a bunch of relevant links to information up to your right. Click on one, and a small box with that information appears. Now click on a few. Now you have a few windows of relevant information for the term (or phrase) in the page about which you wanted more knowledge and.or were curious about.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Information, knowledge, context&lt;/b&gt;, &lt;b&gt;discovery&lt;/b&gt;&lt;br /&gt;This is cool. So when I write all sorts of technobabble like "&lt;i&gt;I'm skeptical about the value of designing systems in python using only object inheritance without also considering object composition&lt;/i&gt;", readers unfamiliar with the esoteric nomenclature of object-oriented programming can use Apture to quickly and easily learn more about wtf I'm talking about, and gain a greater context in which to understand the discussion.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;You are not entitled to your opinion; you are entitled to your informed  opinion. If you are not informed on the subject, then your opinion  counts for nothing.&lt;br /&gt;~ Harlan Ellison&lt;/blockquote&gt;&lt;br /&gt;&lt;b&gt;I want it everywhere.&lt;/b&gt;&lt;br /&gt;I've been using Apture 2.0 beta for a few days now, and I'm addicted to it. I want it on every page I visit, especially on those where I frequently find a term or subject with which I am unfamiliar.&lt;br /&gt;&lt;br /&gt;So enjoy! And please let me know what you think.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Update&lt;/i&gt;: &lt;a href="http://blog.apture.com/2010/03/10-reasons-why-you-should-try-apture-2-0/"&gt;More information at our Apture blog&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-4850384812421124773?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/4850384812421124773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=4850384812421124773' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/4850384812421124773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/4850384812421124773'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2010/03/discover-information.html' title='Discover Information'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-4506307743271004240</id><published>2010-03-13T12:10:00.000-08:00</published><updated>2010-03-13T12:11:43.968-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='context'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Brian Eno on context</title><content type='html'>Brian Eno discusses context by way of the analogy of how one listens to Miles Davis:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;[&lt;i&gt;from The Wire Dec./Jan. 1993&lt;/i&gt;] When you listen to Miles Davis, how much       of what you hear is music, and how much is context? Another way of saying       that is, 'What would you be hearing if you didn't know you were listening       to Miles Davis?' I think of context as everything that isn't physically       contained in the grooves of the record, and in his case that seems quite a       lot. It includes your knowledge, first of all, that everyone else says       he's great: that must modify the way you hear him. But it also includes a       host of other strands: that he was a handsome and imposing man, a member       of a romantic minority, that he played with Charlie Parker, that he spans       generations, that he underwent various addictions, that he married Cicely       Tyson, that he dressed well, that Jean-Luc Godard liked him, that he wore       shades and was very cool, that he himself said little about his work, and       so on. Surely all that affects how you hear him: I mean, could it possibly       have felt the same if he'd been an overweight heating engineer from Oslo?       When you listen to music, Aren't you also 'listening' to all the stuff       around it, too? How important is that to the experience you' re having,       and is it differently important with different musics, different artists? &lt;/blockquote&gt;&lt;blockquote&gt;Miles was an intelligent man, by all accounts, and must have become       increasingly aware of the power of his personal charisma, especially in       the later years as he watched his reputation grow over his declining       trumpeting skills. Perhaps he said to himself: 'These people are hearing a       lot more context than music, so perhaps I accept that I am now primarily a       context maker. My art is not just what comes out of the end of my trumpet       or appears on a record, but a larger experience which is intimately       connected to who I appear to be, to my life and charisma, to the Miles       Davis story." In that scenario, the 'music', the sonic bit, could end       up being quite a small part of the whole experience. Developing the       context- the package, the delivery system, the buzz, the spin, the story -       might itself become the art. Like perfume... &lt;/blockquote&gt;&lt;blockquote&gt;Professional critics in particular find such suggestions objectionable.       They have invested heavily in the idea that music itself offers intrinsic,       objective, self contained criteria that allow you to make judgments of       worthiness. In the pursuit of True Value and other things with capital       letters, they reject as immoral the idea that an artist could be       'manipulative' in this way. It seems to them cynical: they want to       believe: to be certain that this was The Truth, a pure expression of       spirit wrought in sound. They want it to 'out there', 'real', but now       they're getting the message that what its worth is sort of connected with       how much they're prepared to take part in the fabrication of a story about       it. Awful! To discover that you're actually a co-conspirator in the       creation of value, caught in the act of make-believe. 'How can it be worth       anything if I did it myself?' &lt;/blockquote&gt;&lt;blockquote&gt;I remember seeing a thing on TV years ago. An Indonesian shaman was       treating sick people by apparently reaching into their bodies and pulling       out bloody rags which he claimed were the cause of their disease. It all       took place in dim light, in smoky huts, after intense incantations. A       Western team filmed him with infrared cameras and, of course, were able to       show that he was performing a conjuring trick. He wasn't taking anything       out of their bodies after all. So he was a fake, no? Well, maybe-- but his       patients kept getting better. He was healing by context-- making a       psychological space where people somehow got themselves well. The rag was       just a prop. Was Miles, with a trumpet as a prop, making a place where we,       in our collective imaginations, could somehow have great musical       experiences? I think so. Thanks, Miles, and thanks everyone else who took       part, too. &lt;br /&gt;BRIAN ENO&amp;nbsp;&lt;/blockquote&gt;&lt;i&gt;&amp;nbsp;(via hyperreal.org)&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-4506307743271004240?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://music.hyperreal.org/artists/brian_eno/interviews/Miles.html' title='Brian Eno on context'/><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/4506307743271004240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=4506307743271004240' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/4506307743271004240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/4506307743271004240'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2010/03/brian-eno-on-context.html' title='Brian Eno on context'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-4960122068978939044</id><published>2010-03-05T11:12:00.000-08:00</published><updated>2010-03-05T11:19:50.072-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Slide'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='Apture'/><title type='text'>Closing one door, opening another one</title><content type='html'>Today is my last day at &lt;a href="http://slide.com/"&gt;Slide&lt;/a&gt;. After two-plus years of being a Slider, I resigned a couple of weeks ago to join the gang at &lt;a href="http://apture.com/"&gt;Apture&lt;/a&gt;. While I'm sad to leave Slide, I'm excited to join Apture.&lt;br /&gt;&lt;br /&gt;I'll be moving from a company of over 100 people to a company of around 10 people.&lt;br /&gt;&lt;br /&gt;When I started at Slide, we were somewhere between 50-70 people, and each team within the company felt like a mini-startup. I worked wild hours and loved it, and had a lot of fun working with the brilliant people by whom I was surrounded. Literally surrounded: our office at the time was essentially one big room, and we were packed in like obsessive-compulsive python-chewing sardines. At one point I shared a cheap Ikea desk with a QA engineer's pet fish. &lt;br /&gt;&lt;br /&gt;Slide is a bigger company now and, while still maintaining some of the "scappy little startup" atmosphere, has grown into the "now we're a real company" phase. And while I loved going to work every day, I began to yearn for the 5-10 person sized company.&lt;br /&gt;&lt;br /&gt;I had no intention of leaving Slide so soon, and I won't be ready to start a company of my own again until I've slept for a month straight and taken a vacation in some sunny, &lt;a href="http://item.slide.com/r/1/83/i/7hbEQ4CKy1ygcF2uKBSkFqLfbIm0t4N9/"&gt;gin-and-tonic laden locale&lt;/a&gt;. But after several serendipitous conversations with &lt;a href="http://www.linkedin.com/in/tristanharris" id="aptureLink_lSlebFbvrX"&gt;Tristan&lt;/a&gt;, &lt;a href="http://www.linkedin.com/in/cansar" id="aptureLink_igsDyVq5Lg"&gt;Can&lt;/a&gt;, and &lt;a href="http://www.linkedin.com/in/stevenkan" id="aptureLink_kYK3bxotSh"&gt;Steven&lt;/a&gt;, I felt that we could "make good &lt;a href="http://en.wikipedia.org/wiki/Jazz" id="aptureLink_kGHmBTfULe"&gt;jazz&lt;/a&gt;" together (I'll explain what that means in a later post). &lt;br /&gt;&lt;br /&gt;Slide was, and is, a great place to work. When the opportunity to work at Slide came to me in an email from &lt;a href="http://en.wikipedia.org/wiki/Max%20Levchin" id="aptureLink_ENNG4Lrdqw"&gt;Max&lt;/a&gt;, I drove from Los Angeles to San Francisco the next day. Within a week of signing the offer, I had packed almost everything from the home-office rental in &lt;a href="http://maps.google.com/maps?om=0&amp;amp;iwloc=addr&amp;amp;f=q&amp;amp;ll=34.0936181%2C-118.6014735&amp;amp;hl=en&amp;amp;z=13&amp;amp;ie=UTF8" id="aptureLink_YNCRHEoOHz"&gt;Topanga&lt;/a&gt; (from where &lt;a href="http://www.linkedin.com/in/paulthiel" id="aptureLink_mu9Trfzq8B"&gt;Paul&lt;/a&gt; and I launched several products including our reasonably successful Facebook app) to &lt;a href="http://maps.google.com/maps?om=0&amp;amp;iwloc=addr&amp;amp;f=q&amp;amp;ll=37.7774052%2C-122.4099154&amp;amp;hl=en&amp;amp;z=13&amp;amp;ie=UTF8" id="aptureLink_NXmpTVTWEz"&gt;SoMa&lt;/a&gt;. I'll miss the place and the people at Slide.&lt;br /&gt;&lt;br /&gt;I'm very excited to work with the team at Apture on an &lt;i&gt;extremely&lt;/i&gt; cool-and-useful product, and once again with some very smart people. You can see some of our product in this blog-post, but I'm sure that the best is yet to come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-4960122068978939044?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/4960122068978939044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=4960122068978939044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/4960122068978939044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/4960122068978939044'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2010/03/closing-one-door-opening-another-one.html' title='Closing one door, opening another one'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-8123738218852676230</id><published>2010-03-01T11:51:00.000-08:00</published><updated>2010-03-01T11:54:27.108-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><title type='text'>Programming as an objective art</title><content type='html'>&lt;blockquote&gt;&lt;a href="http://unethicalblogger.com/posts/2010/03/programming_objective_art"&gt;Managing or working&lt;/a&gt; with any team of highly motivated, passionate and creative developers presents this problem, as a group: &lt;b&gt;how can you objectively judge code while preserving the sense of ownership by the author?&lt;/b&gt;&lt;/blockquote&gt;&lt;blockquote&gt;The first step to objectively judging code in my opinion, is to separate it from the individual who wrote it when discussing the code. For a lot of people this is easier said than done, particularly for younger engineers like myself. Younger engineers tend to have "more to prove" and are thereby far more emotionally invested in the code that they write, while older engineers whether by experience or simply by having written more code than their younger counterparts are able to distance themselves emotionally more easily from the code that they write. Not to say older engineers aren't emotionally invested in their work, in my experience they typically are, it's just a matter being better at picking battles.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-8123738218852676230?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://unethicalblogger.com/posts/2010/03/programming_objective_art' title='Programming as an objective art'/><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/8123738218852676230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=8123738218852676230' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8123738218852676230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8123738218852676230'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2010/03/programming-as-objective-art.html' title='Programming as an objective art'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-5870521566446660997</id><published>2010-02-15T14:26:00.001-08:00</published><updated>2010-02-15T14:26:41.346-08:00</updated><title type='text'>Apple on Design</title><content type='html'>&lt;blockquote&gt;During the design process, if you discover problems with your product design, you might consider applying the 80 percent solution—that is, designing your software to meet the needs of at least 80 percent of your users. This type of design typically favors simpler, more elegant approaches to problems. &lt;br /&gt;If you try to design for the 20 percent of your target audience who are power users, your design may not be usable by the other 80 percent of users. Even though that smaller group of power users is likely to have good ideas for features, the majority of your user base may not think in the same way. Involving a broad range of users in your design process can help you find the 80 percent solution. &lt;/blockquote&gt;&lt;a href="http://developer.apple.com/mac/library/documentation/UserExperience/Conceptual/AppleHIGuidelines/XHIGDesignProcess/XHIGDesignProcess.html"&gt;Read the whole thing&lt;/a&gt;, as they say.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-5870521566446660997?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://developer.apple.com/mac/library/documentation/UserExperience/Conceptual/AppleHIGuidelines/XHIGDesignProcess/XHIGDesignProcess.html' title='Apple on Design'/><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/5870521566446660997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=5870521566446660997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/5870521566446660997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/5870521566446660997'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2010/02/apple-on-design.html' title='Apple on Design'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-4020677710726796828</id><published>2010-02-15T07:21:00.000-08:00</published><updated>2010-02-15T13:41:23.568-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><title type='text'>Of the ten best engineers with whom I have worked...</title><content type='html'>6 do not have a C.S. degree, &lt;br /&gt;2 have a liberal-arts degree,&lt;br /&gt;1 has an engineering-related graduate (and post-graduate) degree, &lt;br /&gt;4 did not finish college (or did not attend), instead opting for entering business,&lt;br /&gt;2 are women (because I know someone's going to ask),&amp;nbsp; &lt;br /&gt;5 are over 40.&lt;br /&gt;&lt;br /&gt;This deserves some additional commentary, to which I will have to attend later.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;(I'd been thinking that of the best engineers I know, the majority did not finish university or did not attend. I'd also thought that many, or most, of them had some sort of liberal-arts study. I quickly compiled a list and derived some elementary statistics in order to do a quick analysis of my supposition. More on this later.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-4020677710726796828?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/4020677710726796828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=4020677710726796828' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/4020677710726796828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/4020677710726796828'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2010/02/of-ten-best-engineers-i-know.html' title='Of the ten best engineers with whom I have worked...'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-36803308145211210</id><published>2010-02-12T22:40:00.001-08:00</published><updated>2010-02-12T22:44:15.932-08:00</updated><title type='text'>test</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Asparagus" id="aptureLink_3mCIzyVIpf"&gt;asparagus&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Drawing" id="aptureLink_mNqn8RVKJC"&gt;squiggle &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-36803308145211210?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/36803308145211210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=36803308145211210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/36803308145211210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/36803308145211210'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2010/02/test_12.html' title='test'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-7165650200273658752</id><published>2010-02-10T10:49:00.001-08:00</published><updated>2010-02-10T10:49:33.903-08:00</updated><title type='text'>Suicyclists</title><content type='html'>You ride a bicycle?&lt;br /&gt;&lt;br /&gt;This is your &lt;i&gt;must-read&lt;/i&gt; for today:&lt;br /&gt;&lt;a href="http://unethicalblogger.com/posts/2010/02/i_hope_you_bump_your_head"&gt;http://unethicalblogger.com/posts/2010/02/i_hope_you_bump_your_head&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-7165650200273658752?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://unethicalblogger.com/posts/2010/02/i_hope_you_bump_your_head' title='Suicyclists'/><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/7165650200273658752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=7165650200273658752' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7165650200273658752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7165650200273658752'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2010/02/suicyclists.html' title='Suicyclists'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-1959881150952044202</id><published>2010-01-29T06:49:00.000-08:00</published><updated>2010-01-29T10:35:46.431-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>Plan for community</title><content type='html'>If people love your game/site/product/&lt;i&gt;etc.&lt;/i&gt;, they'll be compelled to talk about it, brag to their friends about their involvement with it, share ideas about it, complain about it... in short: they'll feel a natural compulsion to get involved.&lt;br /&gt;&lt;br /&gt;While working on an idea for a product, make sure that the community elements are intrinsic&lt;span style="font-size: x-small;"&gt;*&lt;/span&gt; to your product.&amp;nbsp; Your product must be comprised of many things, one of which must be some sort of mechanism for community involvement.&lt;br /&gt;&lt;br /&gt;For example, if you're building a game, insure that one or some of the core mechanics implemented are dependent on community involvement. For a non-game, insure that there's some necessary community involvement from the earliest customer contact. &lt;br /&gt;&lt;br /&gt;From the start, make certain that community is one of your behavioristic design components&lt;span style="font-size: x-small;"&gt;**&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;The alternative is to build something, launch, and subsequently "bolt-on" a community, usually in the form of a bulletin board/forum. What happens in this case, unfortunately, is that (usually) by the time you get around to it there's already one out there created by your fanatic customers, and you now have to either co-opt theirs or build your own and compete with it.&lt;span style="font-size: x-small;"&gt;***&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;*&lt;i&gt;adjective&lt;/i&gt;: belonging naturally; essential&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;** And please, don't be cynical with your behaviorist design. We're not mice, and you're not building a Skinner Box.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;*** When Paul and I built "Just Three Words", two separate forums popped-up within a week of each other, very quickly after launch. We'd missed the boat on creating our own, and so became members of a customer-operated community.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-1959881150952044202?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/1959881150952044202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=1959881150952044202' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/1959881150952044202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/1959881150952044202'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2010/01/plan-for-community.html' title='Plan for community'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-1208905149682334907</id><published>2010-01-16T12:01:00.000-08:00</published><updated>2010-01-16T12:06:02.885-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='thought of the day'/><title type='text'>Thought for today</title><content type='html'>Great engineers assume ownership of their projects and become emotionally invested in the success (or failure) of their project.&lt;br /&gt;&lt;br /&gt;Preventing them from doing so is a quick path to failure. Enabling and encouraging them to do so and assisting them where necessary (removing obstacles to success and so on) makes success much more likely.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-1208905149682334907?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/1208905149682334907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=1208905149682334907' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/1208905149682334907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/1208905149682334907'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2010/01/thought-for-today.html' title='Thought for today'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-2971397706840346277</id><published>2009-11-05T18:56:00.000-08:00</published><updated>2009-11-05T18:56:42.643-08:00</updated><title type='text'>Max on What We Do</title><content type='html'>&lt;a href="http://venturebeat.com/2009/11/05/max-levchin-will-virtual-goods-bring-slide-profitability-next-year/"&gt;http://venturebeat.com/2009/11/05/max-levchin-will-virtual-goods-bring-slide-profitability-next-year/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;...Tonight I’m going to watch a movie. But I could participate in an interactive movie or create something for my friends. They’re substitutes for each other. At the end of the day, when you’re watching a movie, you’re just consuming pixels. You’re taking them in with your optic nerve. &lt;br /&gt;You could also consume these pixels by participating in an online economy, by making items that other people want to buy. The point is we’re trying further the arrival of a digital society where people ultimately can earn real value inside our product. They will receive a cut of the sale. At a certain point, someone will sell enough virtual goods that they can quit their real job.&lt;br /&gt;Today’s press critics aren’t ready for it. But it’s perfectly reasonable substitute. It’s a bummer I can’t film a feature-length film but maybe I can create content for my friends. I can go draw something and put it on the market. Some other users can say, ‘That’s so cool, I need to own it right now.’ Not all these things are live yet. We still have trials going on right now.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-2971397706840346277?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://venturebeat.com/2009/11/05/max-levchin-will-virtual-goods-bring-slide-profitability-next-year/' title='Max on What We Do'/><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/2971397706840346277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=2971397706840346277' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/2971397706840346277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/2971397706840346277'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2009/11/max-on-what-we-do.html' title='Max on What We Do'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-8767500280656576321</id><published>2009-10-26T05:58:00.000-07:00</published><updated>2009-10-27T22:32:53.135-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><title type='text'>1 Year and more</title><content type='html'>So what's happened over the last year?&lt;br /&gt;&lt;br /&gt;I moved from the Top Friends team to the &lt;a href="http://apps.facebook.com/rockriot/"&gt;Rock Riot&lt;/a&gt; team, spending probably as many hours into the night coding as I did trying to get a perfect score on YYZ*. Yeah, the game is somewhat addicting.&lt;br /&gt;&lt;br /&gt;As we developed the app, we learned some interesting things about our our development practices. I can summarize in three words: "iterate, iterate, iterate".  Rather pithy, I know.&lt;sup&gt;1&lt;/sup&gt;&lt;br /&gt;&lt;br /&gt;From a developer's point of view, this means implementing a few essential, and basic, practices that minimize regressions, minimize time spent in development, and maximize the number of feasible** options open to product as the features expand and change.  I hope, dear readers (both of you), that these little tenets and rubrics seem so elementary to you as to be ridiculous. In my experience listening to the technical debates between freshly-minted C.S.-degreed engineers arguing which über-cool theory is absolutely best for product development over cups of hipster-crack***, I suspect you may be in the minority.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Keep it simple.&lt;/span&gt;&lt;br /&gt;No, really. Simple is better. Why? You're not the only nerd reading the code. And even if you are, later on (which might mean the day after tomorrow), you have to understand your own work. A caffeine-fueled brilliant epiphany about the One and True Use of Meta-Classes&lt;span style="font-size:85%;"&gt;[tm]&lt;/span&gt; applied to a class that makes your fat little avatar eat a fat little hamburger may not make much sense to you after only 5 hours of sleep 3 days from now.&lt;br /&gt;&lt;br /&gt;And other people (E.g., all of  those other nerds in the office who also eat the Cocoa-Puffs at 3am) need to quickly grok the structures you've just committed. Complaining that "those guys" are just stupid when they can't understand your obviously brilliant implementation of virtual-hamburger-consumption doesn't help your start-up reach that nice fat exit any more quickly (in fact, it probably delays it as you add to the technical debt that must be paid eventually).&lt;br /&gt;&lt;br /&gt;Usually, simple code is quicker to write and conforms to the essential language standard employed by fellow engineers,  is clearly documented, and is obviously located. This is very important in a fast-moving environment, and I'll get to why in a minute if it isn't already obvious.&lt;br /&gt;&lt;br /&gt;Simple does not mean tightly-coupled, and it does not mean non-extensible. In fact, writing simple, easy-to-understand code is not mutually exclusive to writing easily-extensible software and easily-modifiable systems.&lt;br /&gt;&lt;br /&gt;By the way, see what I did there? I segued from code to systems. I'm clever that way, stick with me here. We're not just writing code, we're creating systems. Systems basically represent a snapshot (and therefore by definition static)  of some real-world business process, therefore we'll need to insure that these systems are as easily mutable as possible in order to follow the ever-changing (and by definition, dynamic) business model (strategy, goals, tactics, measurement).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Keep it loosely-coupled&lt;/span&gt;.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Keep it easily modifiable and easily extensible.&lt;/span&gt;&lt;br /&gt;In my experience, with practice  it takes no longer to write code that is loosely-coupled than it does code that it tightly coupled.  It does, however, take much more time and/or resources to modify systems built with tightly-coupled components than it does to modify systems built with loosely-coupled components.  Hey, want to integrate that nice thingmawibble that speaks JSON into your system that speaks XML? It should be easy.  Point the important components on your side of the fence to the "GimmeJSON" component instead of the "GimmeXML" method, and transmit to the thingamawibble.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Keep it short, sharp, and simple&lt;/span&gt; &lt;span style="font-style: italic;"&gt;&lt;br /&gt;prototype in iterations, salvage and destroy, build for realz in iterations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One rubric of startup success is to launch the simplest (and probably ugliest) product or feature possible, and then begin a cycle of iteration.  The same idea can be applied to writing code, within reason. &lt;span style="font-style: italic;"&gt;Caveat emptor&lt;/span&gt; - YMMV, and it will probably take some trials and successes/failures to find that sweet spot of how good enough is "good enough". GEFA&lt;sup&gt;2&lt;/sup&gt; is a good rule of thumb, as it's a reminder that the code isn't permanent.  Build with the idea that it's a trial run. Once you have an idea as to whether this sucker's going to fly, that these dogs are going to hunt and that these overused metaphors are about to end, invest more time into implementing a more permanent solution.  I find that I can quickly salvage many of the pieces from the "alpha" version, and re-implement them in an iteration-friendly system that's by definition easily extensible.&lt;sup&gt;3&lt;/sup&gt;&lt;br /&gt;&lt;br /&gt;The combination of simple, short, loosely-coupled, and documented will not only provide a code platform that's conducive to change, but also allows you to salvage parts, quickly discard parts, and move to the next version of the product relatively quickly and easily (and painlessly, if we've done it right).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Make it easy to find&lt;/span&gt; (or, "Where the hell did I leave my shoes?")&lt;br /&gt;&lt;blockquote&gt;"Hey, where's the audio file transmogrifier tool script?"&lt;br /&gt;"It's in a directory called 'car_parts' under jason/whatever/things/cabinet/stuff/misc/noisy". &lt;/blockquote&gt;Yeah, we all know that guy. Don't be that guy. Basically, put your code where other can find it, and where it should be obvious. This goes for transient modules as well as for stacks of classes.  "&lt;span style="font-style: italic;"&gt;Dude, just grep|scan|locate|read the code and you'll find it&lt;/span&gt;" is rude, and lazy in the wrong way. It's also a good way to slow down development. Imagine your engineers spending as much time trying to locate re-usable utilities as it does to write new code. Kinda silly, and unnecessary. Good lazy is to, for example, put your dev tools in a place called (ok, wait for it...) 'tools'. OMG. So simple.  This also applies to location of new methods in existing code. Putting a localized method way up in the stack where everyone loads it, regardless of how orthagonal their application is to yours, is probably a bad idea.  Placing your "buy buns" method for your "Hamburger City Farm" product in a module meant for controlling all incoming http requests for your company is, as they say, &lt;span style="font-style: italic;"&gt;BAD&lt;/span&gt;.&lt;sup&gt;4&lt;/sup&gt;&lt;br /&gt;&lt;blockquote&gt;"Excuse me, where can I find the biography of Ulysses S. Grant?"&lt;br /&gt;"Teen Romance, next to New Age"&lt;br /&gt;"...wtf?"&lt;/blockquote&gt;I know, You're thinking "What the hell, who &lt;span style="font-style: italic;"&gt;does &lt;/span&gt;this?".  You'd be surprised, my friend, you'd be surprised. Luckily, it's not a common occurrence at Slide. We're somewhat fanatic about putting code where it belongs, and I've found that I've become spoiled in that when I look for code, I find it within a few seconds.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Done&lt;/span&gt;.&lt;br /&gt;Why is all of this important (at least, in my opinion)? It helps your company succeed. And unless you're a geek in a basement, h4xx0r1ng away without responsibility to anyone, you'll need to work with other engineers and be a part of a group that excels at quickly building robust systems.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;*&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Rush, "Moving Pictures"&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;** "feasible" as defined by you and your team. YMMV.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;*** Blue Bottle coffee&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;1. &lt;/span&gt;&lt;span style="font-size:85%;"&gt;I'm not going to discuss business stuff because (a) I'm not a PM, and (b) I'm not really interested in spilling Slide's business knowledge to the entire blogosphere.&lt;br /&gt;2. &lt;/span&gt;&lt;span style="font-size:85%;"&gt;"Good Enough for Alpha"&lt;br /&gt;3. &lt;/span&gt;&lt;span style="font-size:85%;"&gt;I realize that this is all pretty vague. There are many places on the web to get info on loosely-coupled code practices, proper OOD, self-documenting code, bug-preventive practices, and so on.  The really important point here is that the best way to learn this stuff is  with practice. Trial and success/trial and error is the only way. Build some systems and hurt yourself a few times, ask a few questions, and you'll probably quite quickly find the correct answers.&lt;/span&gt;&lt;br /&gt;4. &lt;span style="font-size:85%;"&gt;I know, this is also an extreme example, but it serves the discussion and isn't too far off from a real-world example I once corrected.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-8767500280656576321?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/8767500280656576321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=8767500280656576321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8767500280656576321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8767500280656576321'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2009/10/1-year-and-more.html' title='1 Year and more'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-7250267421325413260</id><published>2009-10-22T16:18:00.001-07:00</published><updated>2009-10-22T16:19:51.971-07:00</updated><title type='text'>Hey, it's been a while</title><content type='html'>It's been over a year since I've updated the blog?&lt;br /&gt;&lt;br /&gt;oops.&lt;br /&gt;&lt;br /&gt;Well, I'll get back to some scribbling here fairly soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-7250267421325413260?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/7250267421325413260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=7250267421325413260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7250267421325413260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7250267421325413260'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2009/10/hey-its-been-while.html' title='Hey, it&apos;s been a while'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-6658393221132828034</id><published>2008-09-14T09:55:00.000-07:00</published><updated>2008-09-14T09:58:40.041-07:00</updated><title type='text'></title><content type='html'>&lt;a target="_blank" href="http://www.slide.com/s/gtvb3oiJ0j_H7EG5NWwudqedEeDWOsCN?referrer=hlnk"&gt;&lt;img src="http://widget.slide.com/rdr/1/1/1/W/10000000d257b43/1/103/7tnSfvas6T-DB3hqXkG75Bh3_g4Ib-vx.jpg" border="0" alt="Host unlimited photos at slide.com for FREE!" title="Host unlimited photos at slide.com for FREE!" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I, for one, welcome our new robot overlords...&lt;br /&gt;&lt;br /&gt;This is indeed our Fearless Leader, Max.  &lt;br /&gt;&lt;br /&gt;Caption contest anyone?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-6658393221132828034?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/6658393221132828034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=6658393221132828034' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/6658393221132828034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/6658393221132828034'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2008/09/i-for-one-welcome-our-new-robot.html' title=''/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-3132697244029395206</id><published>2008-05-18T18:35:00.001-07:00</published><updated>2008-05-21T00:06:17.841-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Slide'/><category scheme='http://www.blogger.com/atom/ns#' term='Top Friends'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><title type='text'>Top Friends News</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_bewqXULb5dQ/SDDcjPBvZ5I/AAAAAAAAABA/uj09EWhTYjk/s1600-h/TFN.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_bewqXULb5dQ/SDDcjPBvZ5I/AAAAAAAAABA/uj09EWhTYjk/s320/TFN.jpg" alt="" id="BLOGGER_PHOTO_ID_5201900067500287890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now that Paul and I are at Slide.com, we've been busy creating new stuff.&lt;br /&gt;&lt;br /&gt;My latest is a humble, yet ever-so-cool &lt;a href="http://apps.facebook.com/topeight/?public=1"&gt;Public version of the Top Friends News on Facebook&lt;/a&gt;. Given that Top Friends has between 1.5M and 2.5M users per day, the news feed is a fascinating cross-section of activity across the different Slide applications.&lt;br /&gt;&lt;br /&gt;Paul's latest project is the new Top Friends Network page - if you're a member of Top Friends, on Facebook, &lt;a href="http://apps.facebook.com/topeight/?network=1"&gt;check it out!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you're not a member of Top Friends, join up and &lt;span style="font-style: italic;"&gt;then &lt;/span&gt;check it out!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(By the way, my latest project for Top Friends involves ActionScript-3. Stay tuned.. I'll blog on that later).&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-3132697244029395206?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.topfriends.com' title='Top Friends News'/><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/3132697244029395206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=3132697244029395206' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/3132697244029395206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/3132697244029395206'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2008/05/top-friends-news.html' title='Top Friends News'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_bewqXULb5dQ/SDDcjPBvZ5I/AAAAAAAAABA/uj09EWhTYjk/s72-c/TFN.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-1594781555888455073</id><published>2008-05-07T23:51:00.001-07:00</published><updated>2008-05-08T00:00:37.828-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>Do not adjust your set</title><content type='html'>It's been a month since my last post, and since joining Slide, and I've kept myself too damn busy to blog.&lt;br /&gt;&lt;br /&gt;At least I can say I've been reading some interesting material: &lt;a href="http://www.python.org/download/releases/2.2.3/descrintro/"&gt;this, for example&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have some work to do - my last post managed to mix in "&lt;a href="http://en.wikipedia.org/wiki/Mise_en_place"&gt;&lt;span style="font-style: italic;"&gt;mise en place&lt;/span&gt;&lt;/a&gt;", The &lt;a href="http://en.wikipedia.org/wiki/Shaw_Brothers_Studio"&gt;Shaw Brothers&lt;/a&gt;, and &lt;a href="http://en.wikipedia.org/wiki/Brahms"&gt;Brahms&lt;/a&gt;. For your entertainment, I'll see what other wildly disparate combinations of turns-of-phrase I can come up with in a new useful and informative post soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-1594781555888455073?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/1594781555888455073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=1594781555888455073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/1594781555888455073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/1594781555888455073'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2008/05/do-not-adjust-your-set.html' title='Do not adjust your set'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-8925294798225722739</id><published>2008-04-05T08:52:00.000-07:00</published><updated>2008-04-05T16:20:15.603-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Slide'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>Changes</title><content type='html'>Well, you just never know where you may end up.&lt;br /&gt;&lt;br /&gt;A few weeks ago &lt;a href="http://pauljthiel.blogspot.com/"&gt;Paul&lt;/a&gt; and I received an offer for the purchase of Just Three Words in the midst of several RFPs (Request for Proposal) for website and Facebook application development.  We began to juggle the prospects of consulting work that would keep our rent paid through June at least and selling Just Three Words &amp;amp; proceeding to create a new product for our business.&lt;br /&gt;&lt;br /&gt;After much discussion weighing our options, Paul and I decided to accept jobs at &lt;a href="http://www.slide.com/"&gt;Slide.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;I was resistant at first&lt;/span&gt;&lt;br /&gt;If you'd asked me in mid-January whether I'd consider employment anywhere, I'd have scowled at you.  I love being independent, and running my own company - both the technical and non-technical challenges were what got me out of bed in the morning and kept me out of bed until early the next morning.&lt;br /&gt;&lt;br /&gt;Having said that, it was becoming increasingly likely that we'd have to take various consulting jobs in order to keep the startup afloat. This is exactly the situation in which I found myself in the early days of Gearhead Music, and was wary of making the same mistake twice - &lt;span style="font-style: italic;"&gt;I.e&lt;/span&gt;., once you start to make money contracting it is very difficult to stop; and while you're working on someone else's project, you're not working on your own product.  Neither the consulting nor the startup excel from the benefits of your undivided attention, and in the end consulting proves to be a trap since you really can't ever turn down a job.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The excitement kicks in&lt;/span&gt;&lt;span&gt;&lt;br /&gt;But a "real" job? I couldn't think of a company working for which I'd be happy.  But in a casual email exchange a while ago, a friend at Slide.com mentioned that when I was ready to consider a job, come talk to the engineers there.&lt;br /&gt;&lt;br /&gt;I know a few of those guys, and not only like them but really respect them professionally and personally and respect the work they do &amp;amp; their approach to solving difficult technical problems.  "Hmm", thinks I, "this could be interesting, and worth the consideration".&lt;br /&gt;&lt;br /&gt;So I agreed to an interview, flew up to San Francisco from Los Angeles for the day, and over the course of several conversations, started to get excited about coming onboard. Not only are the engineers at Slide sharp as hell and extremely knowledgeable, but also very hard-working.  And on a personal level, I liked everyone with whom I spoke.&lt;br /&gt;&lt;br /&gt;And the prospect of learning a lot more about python, about solutions to challenging problems of scale (when you serve as many widgets and apps as they do the challenges of scale become very interesting), and about creating products and solutions that just don't exist yet is what really got me fired up about considering employment with them.&lt;br /&gt;&lt;br /&gt;By the end of the day I was on the fence, but very seriously interested in working with this excellent group of engineers.&lt;br /&gt;&lt;br /&gt;And, in music if you want to get really good go work with people who are better musicians than you are.  The same applies to engineering - work with people whose knowledge and ability surpass your own and so inspire you to achieve and improve.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Why this is a great opportunity for an engineer&lt;/span&gt;&lt;span&gt;&lt;br /&gt;Man, these people know their &lt;span style="font-size:78%;"&gt;[EXPLETIVE DELETED]&lt;/span&gt;.   It's been only one week and I've already learned techniques that make me a better engineer.  There are few better ways to improve than when surrounded by other very smart people solving problems.&lt;br /&gt;&lt;br /&gt;And the technical challenges the company faces with regard to application development, infrastructure, database and so on are red meat for any True Geek™.  I obviously can't talk specifics here, but if you thrive on solving problems that few companies are required to solve and for which there are very few out-of-a-box solutions, send me your resume and I'll pass it along.¹  Slide does more than make pretty widgets - there's a lot of engineering going on in the boiler room that's just way too damn cool.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Why this is a great opportunity for an engineer with entrepreneurial tendencies&lt;/span&gt;&lt;span&gt;&lt;br /&gt;First, the obvious - Slide is run by Max Levchin who is one of the founders of PayPal -  one of the few tech startups to survive and thrive through the tech crash. So not only is it very safe to bet that he and his executive staff know what they're doing, but he's a top-notch engineer himself with an intense entrepreneurial drive. A good kung-fu master to learn from if there ever was one.*&lt;br /&gt;&lt;br /&gt;Second, this is a new market - social networks are still in their infancy, and it is probable that the speed of progress and opportunity will cause the landscape of the market to look different a year from now than it does currently.  For any business-minded soul, the internet space in general is a once in a lifetime opportunity (analogous to what the chemical industry was to 19th century minds**), and within this space the social network market an opportunity within an opportunity rarely seen, as the reward v. risk is higher than in other sub-sectors of the larger market.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;So, I'm very excited. I didn't come to the decision to join Slide lightly, and now that I'm there I'm very happy to be a member of the team. I'm working on the Top Friends application, and am just now finding where they put everything. I've been working in my own kitchen (so to speak) for a year and know where everything is. Now, in someone else's, I spent most of my time last week finding where the hell they put the can-opener.  But soon, I'll have my technical, geeky &lt;span style="font-style: italic;"&gt;mise-en-place&lt;/span&gt; all set and I'll be geeking-out in your Top Friends.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;¹&lt;span style="font-style: italic;"&gt;python, AS2, AS3, C++, java, whatever - the ability to solve problems and possessing intelligence are most important.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;*Max is short for "Maximum", so you will work your ass off for this cifu (teacher) and frog-jump up and down the figurative temple stairs until your technical and entrepreneurial -fu are the best anywhere.  My apologies to the Shaw Brothers for this analogy...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;**And if your interests lie in additional areas but you still want to get involved in the interwebs, remember: both Brahms and Borodin were chemists, and they did some nice work in other fields ;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-8925294798225722739?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/8925294798225722739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=8925294798225722739' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8925294798225722739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8925294798225722739'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2008/04/changes.html' title='Changes'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-7534981663466330697</id><published>2008-02-23T11:15:00.000-08:00</published><updated>2008-02-23T13:28:57.130-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQLAlchemy'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='mySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Quick and Dirty Database Pooling in Django and MySQL using SQLAlchemy</title><content type='html'>As our Facebook application "&lt;a href="http://apps.facebook.com/threewords/?utm_source=WatchThisSpace&amp;amp;utm_medium=blog&amp;amp;utm_campaign=quickdirty"&gt;Just Three Words&lt;/a&gt;" started to get rolling, we started to optimize our database calls.&lt;br /&gt;&lt;br /&gt;The first step was to take a look at the ORM db calls taking the most time. Django has a facility to do this, by &lt;a href="http://www.djangoproject.com/documentation/0.96/faq/#how-can-i-see-the-raw-sql-queries-django-is-running"&gt;taking a look at the raw SQL Django is running.&lt;/a&gt;   Once we did this and replaced the obviously slow calls with &lt;a href="http://www.djangoproject.com/documentation/model-api/#executing-custom-sql"&gt;custom and optimized SQL&lt;/a&gt;, I started to look into some sort of database connection pooling for Django.&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://unethicalblogger.com/"&gt;friend &lt;/a&gt;suggested I look into, among other things, &lt;a href="http://www.sqlalchemy.org/"&gt;SQLAlchemy&lt;/a&gt;. There's a very good database connection pooling piece to SQLAlchemy (&lt;a href="http://www.sqlalchemy.org/docs/04/pooling.html"&gt;docs here&lt;/a&gt;), and after thinking about ways to write my own db pooling code based on routines I'd researched all over the web, I figured it was quicker and easier to use what was already out there. I could get pooling in place and buy myself some time to write a customized db pooling routine, thus not only getting what I specifically needed but also learning how exactly to write a db pooling routine!&lt;br /&gt;&lt;br /&gt;(Of course, I haven't done that yet - part of the price of quick and dirty code that works is that the pressure is off to actually create a routine that isn't q&amp;amp;d).&lt;br /&gt;&lt;br /&gt;We're using MySql, so I opened up django.db.backends.mysql.base.py and applied the code from the SQLAlchemy docs to base.py:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import sqlalchemy.pool as pool&lt;br /&gt;from django.db.backends import BaseDatabaseWrapper, BaseDatabaseFeatures, BaseDatabaseOperations, util&lt;br /&gt;try:&lt;br /&gt;   import MySQLdb as Database&lt;br /&gt;   Database = pool.manage(Database)&lt;br /&gt;except ImportError, e:&lt;br /&gt;   from django.core.exceptions import ImproperlyConfigured&lt;br /&gt;   raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This wasn't enough, however, as SQLAlchemy didn't like the use of **kwargs at the time  the connection is created.   So I changed this:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;self.connection = Database.connect(**kwargs)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;to this:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;self.connection = Database.connect(user=kwargs['user'], db=kwargs['db'], passwd=kwargs['passwd'], charset='utf8')&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;and voila!  Quick and dirty DB pooling hack in Django for MySql implementations!&lt;br /&gt;&lt;br /&gt;There are problems with this, of course, the most obvious being that I'm now branched from the standard Django trunk, that this isn't a universal solution &amp;amp; if taken to other database implementations violates DRY, &lt;span style="font-style: italic;"&gt;etc&lt;/span&gt;.  But: as a quick stopgap, and as a solution to an immediate need to speed up the user experience and keep them happy, it's pretty good.&lt;br /&gt;&lt;br /&gt;(Facebook has an 8-second timeout for calls to your server. If 8 seconds passes and your server is still ruminating the nature of it's navel, the users see the White Screen Of Death, and they drop your app like it was an unpleasantly hot rock)&lt;br /&gt;&lt;br /&gt;As usual, post your comments, criticisms, and cliches, and feel free to tell me UR DOIN IT ALL WRONG &amp;amp; offer suggestions if that's what makes you happy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-7534981663466330697?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/7534981663466330697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=7534981663466330697' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7534981663466330697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7534981663466330697'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2008/02/quick-and-dirty-database-pooling-in.html' title='Quick and Dirty Database Pooling in Django and MySQL using SQLAlchemy'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-8831154179373861220</id><published>2008-01-31T12:02:00.000-08:00</published><updated>2008-01-31T12:05:15.050-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><title type='text'>Hmmmm</title><content type='html'>&lt;span style="font-style: italic;"&gt;The early bird catches the worm.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The second mouse gets the cheese.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Great minds think alike. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Fools seldom vary. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Time heals all wounds. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Time wounds all heels.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-8831154179373861220?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/8831154179373861220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=8831154179373861220' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8831154179373861220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8831154179373861220'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2008/01/hmmmm.html' title='Hmmmm'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-943119699730850119</id><published>2007-12-27T09:41:00.001-08:00</published><updated>2007-12-27T10:07:09.712-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Just Three Words'/><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>New Just Three Words stuff</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_bewqXULb5dQ/R3PkhwEI2zI/AAAAAAAAAAs/a27m5Z3ShC4/s1600-h/JTW+Screenshot1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 60%; height: 60%;" src="http://bp0.blogger.com/_bewqXULb5dQ/R3PkhwEI2zI/AAAAAAAAAAs/a27m5Z3ShC4/s320/JTW+Screenshot1.jpg" alt="" id="BLOGGER_PHOTO_ID_5148710067503684402" border="0" /&gt;&lt;/a&gt;Between November 1 and now, we've been re-building Just Three Words into a really deep, functional application for Facebook.&lt;br /&gt;&lt;br /&gt;(It is a collaborative writing application as a game - you can only enter 1 to 3 words at a time until someone else posts their words).&lt;br /&gt;&lt;br /&gt;And it's really cool. And fun! Paul's design really works well and is simple to use.&lt;br /&gt;&lt;br /&gt;We're constantly improving the design, and changing the features based on user's input. One of the values we maintain is that we're in an ongoing conversation with our users. A "partnership" (not in the business sense of the word, of course).&lt;br /&gt;&lt;br /&gt;They provide content, and we provide the means for them to create and develop their content.  Most of the time, we take our best guess as to what will make the best experience for the users, changing or tweaking based on their input and on the metrics we collect &amp;amp; analyze.  Other times, we create functions that are straight from user experience and the inevitable "You know what would be cool?" email from a user.&lt;br /&gt;&lt;br /&gt;(We use both Google Analytics and our own metrics-collection, and spend a lot of time poring over the data)&lt;br /&gt;&lt;br /&gt;One of the things that helps us, I think, is that we love our users.  We're convinced we attract the best people on Facebook, and some of the most creative. We hit the jackpot, got lucky, whatever you want to call it - and I'm not sure who's more enthused: the writers for our application or us for our writers.&lt;br /&gt;&lt;br /&gt;If you haven't seen it yet, &lt;a href="http://apps.facebook.com/threewords/"&gt;go check it out&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-943119699730850119?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://apps.facebook.com/threewords/' title='New Just Three Words stuff'/><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/943119699730850119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=943119699730850119' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/943119699730850119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/943119699730850119'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/12/new-just-three-words-stuff.html' title='New Just Three Words stuff'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_bewqXULb5dQ/R3PkhwEI2zI/AAAAAAAAAAs/a27m5Z3ShC4/s72-c/JTW+Screenshot1.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-4422040518725481724</id><published>2007-12-27T09:21:00.000-08:00</published><updated>2007-12-27T09:38:27.407-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>New Year's Resolutions</title><content type='html'>What a year.  Lots of change, learning, and it's all good.&lt;br /&gt;&lt;br /&gt;In 2007, I:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Lost my job,&lt;/li&gt;&lt;li&gt;Ended my music publishing company, &lt;/li&gt;&lt;li&gt;Started a new web startup, built an entire web-application twice.&lt;/li&gt;&lt;li&gt;Stopped all work on the IBM iSeries &amp;amp; abandoned that company/career choice,&lt;/li&gt;&lt;li&gt;Re-skilled myself almost completely by learning python, actionscript3 &amp;amp; Flex, javascript, linux, django, and translated my DB2 skills to mySQL,&lt;/li&gt;&lt;li&gt;Created two facebook apps with Paul,&lt;/li&gt;&lt;li&gt;Ended the new web startup,&lt;/li&gt;&lt;li&gt;Started a &lt;span style="font-style: italic;"&gt;new &lt;/span&gt;new web startup,&lt;/li&gt;&lt;li&gt;Met some amazing entrepreneurs and coders in LA and SF, &lt;/li&gt;&lt;li&gt;Did more all-nighters than in the previous 10 years combined&lt;/li&gt;&lt;li&gt;Had a great time. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Now, what about 2008. Hm.  I hope it's as good as 2007 was - even better, building upon the foundations set this year.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-4422040518725481724?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/4422040518725481724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=4422040518725481724' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/4422040518725481724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/4422040518725481724'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/12/new-years-resolutions.html' title='New Year&apos;s Resolutions'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-7264425987636264367</id><published>2007-12-27T09:06:00.001-08:00</published><updated>2008-02-23T11:58:52.787-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Speed up your Facebook Django app</title><content type='html'>One of the things I loved about the iSeries was the easy, easy way we could toss a job to batch from the middle of an interactive session.&lt;br /&gt;&lt;br /&gt;It is also one of the things I miss while coding in Django.&lt;br /&gt;&lt;br /&gt;What's this have to do with Facebook apps?&lt;br /&gt;&lt;br /&gt;Every call to the FB API costs time -  from 280ms to 475ms on average - and the more calls, the more time. Where submitting some work really comes in handy is during processing after a user-gesture.    Want to publish a bunch of news after the user clicks "BITE ME" and not have the user sit there and wait (and maybe experience an FB timeout) while you send minifeed news and notifications to &lt;s&gt;4,219&lt;/s&gt; 20 of their BFFs?&lt;br /&gt;&lt;br /&gt;Use a thread.  Really, use a threadpool, but I haven't coded mine yet. It doesn't take long to code, but the holidays grabbed me around the ankle and forced me to take time with friends, so there you go.&lt;br /&gt;&lt;br /&gt;But the basics are here:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import threading&lt;br /&gt;&lt;br /&gt;def sbmthrjob(cmd, *args):&lt;br /&gt;    class newThread(threading.Thread):&lt;br /&gt;        def __init__(self, cmd, *args):&lt;br /&gt;            self.cmd = cmd&lt;br /&gt;            self.args = args&lt;br /&gt;            threading.Thread.__init__(self)&lt;br /&gt;            &lt;br /&gt;        def run(self):&lt;br /&gt;            self.cmd(*args)  &lt;br /&gt;        &lt;br /&gt;    try:&lt;br /&gt;        thread1 = newThread(cmd, *args)&lt;br /&gt;        thread1.setDaemon(True)&lt;br /&gt;        thread1.start()&lt;br /&gt;        &lt;br /&gt;    except Exception, e:&lt;br /&gt;        print 'sbmjob exception: ' , e&lt;/pre&gt;elsewhere:&lt;pre&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sbmthrjob(cmd, argle, bargle)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;What I want to do is to have the thread come from a pool of already-created threads - I'll get to that soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-7264425987636264367?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/7264425987636264367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=7264425987636264367' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7264425987636264367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7264425987636264367'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/12/speed-up-your-facebook-django-app.html' title='Speed up your Facebook Django app'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-9078184523885483340</id><published>2007-12-27T08:44:00.000-08:00</published><updated>2007-12-27T09:21:04.469-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='mySQL'/><title type='text'>Django and MySql character set tip</title><content type='html'>A couple of tips. The first one is from Leah Culver via her blog:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;&lt;br /&gt;&lt;a href="http://leahculver.com/2007/11/06/python-mistake/#comments"&gt;Python lesson I learned today&lt;/a&gt; - use “is None” when you want to check if something exists.&lt;br /&gt;[...]&lt;br /&gt;&lt;p&gt;Here’s where it hurt:&lt;/p&gt; def get_notes(qs=None):&lt;br /&gt;if not qs:&lt;br /&gt;qs = self.notes.all()&lt;br /&gt;[...]&lt;br /&gt;&lt;p&gt;The correct condition is “if qs is None” like so:&lt;/p&gt; def get_notes(qs=None):&lt;br /&gt;if qs is None: # no predefined queryset&lt;br /&gt;qs = self.notes.all()&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Next one is all mine:&lt;br /&gt;&lt;br /&gt;Our MySql implementation was set to default to character set latin1 and collation latin1_swedish_ci.  No big deal, says I, I'll change that globally to utf8 and utf8_general_ci so we can handle non-latin charsets like cyrillic and greek.&lt;br /&gt;&lt;br /&gt;But no go - when non-latin charactersets were used, the inserts to the database would fail. What the heck?  Well.. the problem was that I created the tables &lt;span style="font-style: italic;"&gt;before &lt;/span&gt;I changed the global default values from latin1 to utf8. The tables still had the old default character sets. Easy enough, just alter the table to use default charset utf8.&lt;br /&gt;&lt;br /&gt;Nope. So even though the tables' properties would show &lt;span style="font-family:courier new;"&gt;ENGINE=InnoDB DEFAULT CHARSET=utf8 &lt;/span&gt; some of the text columns would still had a default charset of latin1.&lt;br /&gt;&lt;br /&gt;Eventually, I did this and now it all works fine:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;ALTER TABLE tablename DEFAULT CHARSET=utf8;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ALTER TABLE tablename  CHANGE col1 col1 varchar(128) character set utf8 NOT NULL;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ALTER TABLE tablename  CHANGE  col2 col2 varchar(1024) character set utf8 NOT NULL;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I'm sure I'M DOING IT ALL WRONG, so make a comment if you just can't hold back.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-9078184523885483340?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/9078184523885483340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=9078184523885483340' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/9078184523885483340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/9078184523885483340'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/12/django-and-mysql-character-set-tip.html' title='Django and MySql character set tip'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-7093590499180548103</id><published>2007-12-27T08:29:00.000-08:00</published><updated>2007-12-27T09:21:16.212-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='general'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>Out  with the third, in with the fourth</title><content type='html'>&lt;blockquote style="font-family: times new roman;"&gt; We seen the last of Good King Richard&lt;br /&gt;Ring out the past his name lives on&lt;br /&gt;Roll out the bones and raise up your pitcher&lt;br /&gt;Raise up your glass to Good King John*&lt;/blockquote&gt;So, the old company is now dead, and the new company is moving along nicely.  And more quickly than its predecessor.  You can find us now at &lt;a href="http://www.scoobandgecko.com/"&gt;www.scoobandgecko.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And now that is 4 failures behind me: two absolute wrecks, and two relative failures that could be counted as successes in someone else's book (just not mine).  Great. Ok, learned a lot. Next!!&lt;br /&gt;&lt;br /&gt;Why'd we kill the old project? The site-whom-what-we-must-not-name? It wasn't scalable, and it wasn't something that lent well to a strategy that included the social networks. And, there were &lt;span style="font-style: italic;"&gt;people &lt;/span&gt;issues. Enough said.&lt;br /&gt;&lt;br /&gt;So, stay tuned.. I'll keep you updated!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;* Steely Dan, Kings, Can't Buy a Thrill&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-7093590499180548103?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/7093590499180548103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=7093590499180548103' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7093590499180548103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7093590499180548103'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/12/out-with-third-in-with-fourth.html' title='Out  with the third, in with the fourth'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-7975219429935562164</id><published>2007-10-20T17:34:00.000-07:00</published><updated>2007-10-20T17:54:41.589-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='application'/><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='three word story'/><title type='text'>New Facebook Application - Just Three Words</title><content type='html'>&lt;span style="float:left;padding-right:10px;"&gt;&lt;img src="http://www.feedtopia.com/fb_images/justthreewords/images/JTW_ad02_75.png" /&gt;&lt;/span&gt;Paul and I released a fun Facebook application last week called "&lt;a href="http://www.facebook.com/apps/application.php?id=5276633787"&gt;Just Three Words&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;It's a tell-a-story mashup where you and all of your friends (and we &lt;span style="font-style: italic;"&gt;do &lt;/span&gt;mean all!) put together a story three words at a time.  Remember that childhood game where you pass the paper around and everyone adds three words? Same thing - but in this case we take advantage of the simultaneity of users' access to a web-app: nobody has to wait for their turn and the story build rather quickly.&lt;br /&gt;&lt;br /&gt;If you have friends like mine who either a) are witty &amp;amp; clever, b) have wildly dirty minds, or c) both, you get some very, uh, interesting stories!&lt;br /&gt;&lt;br /&gt;We'll be making small enhancements over the next few weeks to make the user experience more fun and engaging.  Come on by and start a story or read existing stories, or better yet add your three words to a three word story.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-7975219429935562164?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.facebook.com/apps/application.php?id=5276633787' title='New Facebook Application - Just Three Words'/><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/7975219429935562164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=7975219429935562164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7975219429935562164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7975219429935562164'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/10/new-facebook-application-just-three.html' title='New Facebook Application - Just Three Words'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-1022147265216853368</id><published>2007-10-08T06:07:00.000-07:00</published><updated>2007-10-08T10:03:56.641-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='social networks'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>Conferences</title><content type='html'>I just got home from attending two conferences - &lt;a href="http://www.communitynext.com/"&gt;CommunityNext&lt;/a&gt; (organized by Noah Kagan and Johnny Lam) and &lt;a href="http://graphingsocial.com/"&gt;GraphingSocialPatterns &lt;/a&gt;(organized by Dave McClure).&lt;br /&gt;&lt;br /&gt;The latter is still going on - I had to get back to Los Angeles for some prior commitments, alas.&lt;br /&gt;&lt;br /&gt;At CommunityNext, in addition to meeting some &lt;span style="font-style: italic;"&gt;exceptionally bright&lt;/span&gt; developers &amp;amp; listening to their ideas about and experiences from developing successful &lt;a href="http://www.facebook.com/"&gt;Facebook &lt;/a&gt;applications, I listened to various presentations &amp;amp; observed: every successful developer/entrepreneur was quick to market with a product and quick to iterate new releases based on user feedback. In addition, they "failed" quickly - if an application didn't gain traction as hoped, they'd move on to a new idea.&lt;br /&gt;&lt;br /&gt;I was very lucky to have the opportunity to speak with, among others, the developers of &lt;a href="http://apps.facebook.com/freegifts/"&gt;Free Gifts&lt;/a&gt;, &lt;a href="http://apps.facebook.com/topeight/"&gt;Top Friends&lt;/a&gt;, &lt;a href="http://apps.facebook.com/honesty/"&gt;Honesty Box&lt;/a&gt;, &lt;a href="http://apps.facebook.com/nicknamethis/"&gt;Nicknames&lt;/a&gt;, &lt;a href="http://apps.facebook.com/audiopoke/"&gt;Audio Poke&lt;/a&gt;, &lt;a href="http://apps.facebook.com/socialmoth/?side=1"&gt;Social Moth&lt;/a&gt;, one as-yet-unlaunched application, the CTO of &lt;a href="http://hi5.com/"&gt;Hi5&lt;/a&gt;,  and representatives from &lt;a href="http://www.userplane.com/"&gt;UserPlane&lt;/a&gt;, &lt;a href="http://compete.com/"&gt;Compete&lt;/a&gt;, &lt;a href="http://facereviews.com/"&gt;FaceReviews&lt;/a&gt;, both Noah Kagan and Johnny Lam,  and others.  (If I didn't mention you here, gimme a shout!)&lt;br /&gt;&lt;br /&gt;It was humbling to sit at a table with developers whose Facebook applications have user bases in the millions while &lt;a href="http://apps.facebook.com/noisewall"&gt;mine &lt;/a&gt;has barely 1000.  &lt;span style="font-style: italic;"&gt;Lesson&lt;/span&gt;: Move!  Build something else quickly, and iterate.  And simplify!  While there are users who think what I've built is cool and fun, it needs to be re-worked to allow for more social engagement - and it still won't appeal to a general population, but rather only to the music&amp;amp;sound-geek-crowd.  So we're moving on to building other applications &amp;amp; will see what takes.&lt;br /&gt;&lt;br /&gt;And if you have a chip on your shoulder as large as the one I have on &lt;span style="font-style: italic;"&gt;my &lt;/span&gt;shoulder, being humbled &lt;span style="font-style: italic;"&gt;sucks&lt;/span&gt;.  So I won't be blogging much for a while.. I have a lot of work to do.&lt;br /&gt;&lt;br /&gt;At GraphingSocial, which I was only able to attend for one day, I took the technical session given by R. Tyler Ballance of &lt;a href="http://www.slide.com/"&gt;Slide.com&lt;/a&gt;.  He reviewed a Facebook application he created specifically for the class (&lt;a href="http://apps.facebook.com/whyareyouawesome/"&gt;Why Are You Awesome?&lt;/a&gt;) , gave insight into some ways to build a better application (&lt;span style="font-style: italic;"&gt;E.g.&lt;/span&gt;, use fql), and presented an excellent walkthrough of how to get started.  If you're interested in building facebook applications, watch the video once it's on the web. I suggest keeping an eye on the GraphingSocial website.&lt;br /&gt;&lt;br /&gt;I also got to meet Dave McClure, who truly rocks.  I've been following &lt;a href="http://500hats.typepad.com/500blogs/"&gt;his blog&lt;/a&gt; for a while, and his "&lt;a href="http://www.slideshare.net/dmc500hats/startup-metrics-for-pirates-long-version"&gt;Startup Metrics for Pirates&lt;/a&gt;" presentation is a must-see for anyone building a web site or application, or even an intranet application since within an intranet, your "customers" are your employees.&lt;br /&gt;&lt;br /&gt;Some technical notes from R. Tyler's presentation:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If you're building a facebook application, try to use fql instead of the apis. If you don't know what this means, email me or leave a comment and I'll reply - or come to the IRC channel for Facebook and ask anyone there: it's on freenode and is called #Facebook.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you're working in python and using the excellent &lt;a href="http://code.google.com/p/pyfacebook/"&gt;pyfacebook &lt;/a&gt;module, I'd suggest adding &lt;a href="http://cheeseshop.python.org/pypi/python-cjson"&gt;cjson &lt;/a&gt;to the code. The module is written to use simplejson, but cjson is much faster. What I did was to try import cjson and fall back to simplejson on an exception.  If you're using &lt;a href="http://www.djangoproject.com/"&gt;django&lt;/a&gt;, pyfacebook is the way to go.  Also,  I prefer to use &lt;a href="http://pycurl.sourceforge.net/"&gt;pyCurl &lt;/a&gt;to urllib2 for heavy http work.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Learn to love the &lt;a href="http://wiki.developers.facebook.com/index.php/Main_Page"&gt;Facebook developers wiki&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-1022147265216853368?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/1022147265216853368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=1022147265216853368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/1022147265216853368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/1022147265216853368'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/10/conferences.html' title='Conferences'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-3873996159010249764</id><published>2007-09-07T18:13:00.000-07:00</published><updated>2007-09-08T08:44:34.070-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='startups'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>Doing this at 42</title><content type='html'>Ok, I'm not the normal web startup guy, as I'm 10 to 20 years older than your typical startup geek.&lt;br /&gt;&lt;br /&gt;Who else out there falls into the category of 40+ web entrepreneur?  Leave a comment &amp; share your experience.&lt;br /&gt;&lt;br /&gt;Some of my thoughts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Prior business experience helps in some ways, but actually hinders in other ways. I won't make some of the same mistakes I made with GHM; but some of "business as usual" in the non-web-commerce world has little relation to or analogy with the web-commerce world.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Learning new technology, a new platform, and new programming languages takes more work that it seems to have taken when I was 20-something. What I thought I could accomplish in 3 months took 5 months.   Has anyone else experienced something similar?&lt;/li&gt;&lt;li&gt;It seems that everyone around you can code more quickly and produce output more quickly than you.  Darned kidz...&lt;/li&gt;&lt;li&gt;The business "learns" are as exciting as the technology "learns"; an opinion that doesn't seem to be shared by many of the under-30 geeks I've met.  Anyone else find this as well?&lt;/li&gt;&lt;/ul&gt;Most of my complaining and &lt;span style="font-style: italic;"&gt;kvetching* &lt;/span&gt;is about how long it is taking me to produce good code and the website/product. I'm not easy on myself, and my expectations are high.  It probably doesn't help that the guy I really admire and look up to is one of SV's most notorious workaholics!  I get that everyone has their own pace of learning, but I have no point of reference here.  I hear of people picking up RoR in a week and launching a website six weeks later.  And why the hell am I worried about this?  Why is this an issue? Is my hour over already? You take checks, right?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*&lt;span style="font-size:85%;"&gt;it's like complaining but much, much more.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-3873996159010249764?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/3873996159010249764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=3873996159010249764' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/3873996159010249764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/3873996159010249764'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/09/doing-this-at-42.html' title='Doing this at 42'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-5192552022306799473</id><published>2007-09-07T18:06:00.000-07:00</published><updated>2007-09-07T18:08:52.761-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><title type='text'>Things they don't tell you, and some things they do</title><content type='html'>When I asked a friend for advice on how I could better monetize my music publishing business, he responded by telling me to get out of it and start, or join, a web commerce startup.  And since I can code and have been hacking in some way or another since childhood, I took his advice and did just that.&lt;br /&gt;&lt;br /&gt;We then discussed what I was in for, and he described some of the consequences of the life I was about to choose (again).&lt;br /&gt;&lt;br /&gt;Here's a list of stuff I was warned about, or have already experienced in my other business, or am discovering and experiencing now as I put all of my time and energy into making something useful, beautiful and cool for the web:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Your social life will come to an end.  Yeah, well, something has to suffer when you spend a lot of time working, and social life is it. To be honest, when I was getting a music catalog put together at the start of  Gearhead Music (GHM) I was in the studio all day, every day, and had little social life then. So this isn't new to me.&lt;br /&gt;&lt;br /&gt;What I'd forgotten about this time around was that your friends &amp; family don't really understand that yours is not a M-F, 9-5 lifestyle.  Some don't seem to take it kindly when I consistently cancel Friday-night pub meetups, or can't talk on the phone for a few hours "after work".  My solution is to find friends who "get it", or who have businesses of their own.  And, when I am spending time with them, they have my 100% attention.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Advice.  Boy, you get all sorts of advice. Luckily for me &lt;span style="font-style: italic;"&gt;now&lt;/span&gt;, with GHM I listened to and took all sorts of bad advice from all sorts of people. I learned my lesson then, and painfully. This time around I listen to advice from people in the business whom I respect and from other entrepreneurs.  Uncle Freddie the plumber? Not so much.&lt;br /&gt;&lt;br /&gt;Examples of bad advice? "Don't ever quit the day job!", "Make sure you write a full business plan before you do anything", "You can't start with less than $2mil", and my favorite "Don't do it. Find a job somewhere that's safe."  Excuse me while I go puke now.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The emotional roller-coaster.  Yeah, well, be prepared. But it's not different than working for a corp - the experience is  just compressed in time. While working in a cube-farm, you may be depressed for a week or two, then content for a week, and excited for a day or a few hours.  In business for yourself? A month's worth of emotions in a 12-hour period! Ecstatic at 9am, mood indigo at 3pm, excited at 10pm, exhausted at 1am.  Rinse, repeat! Neato!  Hey look Ma, I'm bipolar!! And I'm told that the amplitude of the emotional sine-wave only gets greater from here. Coool.  That being said? No complaints. I still love what I'm doing.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Do what you love. This one is easy.. if you love it, do it, and have fun. Ask yourself the hard questions: Do I love this, and am I having fun?&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;No more assholes.  Make a decision to minimize assholery in your life as much as possible, lest #4 above become impossible and you can't have fun.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;No more idiots (corollary to #5). There are plenty of idiots out there. Stay away from 'em. My favorite is the coder-as-couch-potato idiot. The one whose idea of "working from home" or "starting a business" is to turn on the TV, poke at the laptop a few times, troll for hotties on MySpace, and then walk out for a smoke every ten minutes. Followed by a deafening volume of advice. Followed by a litany of excuses in pseudo-tech-speak about why his web project isn't complete yet.  Obviously, don't hire these buffoons. But in addition, get away from them as quickly as possible. While they might be tolerable in doses when you're not trying to start a business, they're utterly intolerable on the days when you feel slightly like Sisyphus.  There is no room for morons, and this becomes painfully clear when starting a company - as I have discovered. And the IT world is fill of them. Don't believe me? Take a job at a large mainframe or midrange shop.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;One thing I wasn't warned about - my wine consumption has increased.  Wow. Gotta be careful with this one, of course.  Start a business, drink more wine.  If it isn't a law of nature, it oughta be. However, slow-burning money means fewer trips to Bev Mo, or Sam's.  So at least there's &lt;span style="font-style: italic;"&gt;that &lt;/span&gt;control in place!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Do Not think from extremes, and don't work with anyone who does.  At the end of &lt;a href="http://www.amazon.com/iWoz-Computer-Invented-Personal-Co-Founded/dp/0393061434/gearheadmusic"&gt;iWoz&lt;/a&gt;, Steve Wozniak's autobiography, he mentions that engineers should, and must, see things in shades of gray. Most people it seems see and think in black-and-white terms. This is what a colleague of mine calls "Thinking from extremes".  Drives me nuts, frankly. It's is also called building a "&lt;a href="http://en.wikipedia.org/wiki/Straw_man_argument"&gt;straw-man argument&lt;/a&gt;" when in discussion.  I'm tempted to file this under "no more idiots. And as far as I know my experience with straw-man conversations might be due to my working in the music and music-related business for so long  - a biz that hardly attracts the best&amp;amp;brightest minds.  Regardless, it's a habit that's deadly to engineers, or anyone in a creative field.  Absolutist thinking, extreme positions, incorrect inferences, misrepresentations.. leave that to the gossip bloggers.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Back up your work.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Don't abuse coffee.  Oh hell, NOW they tell me.  By the way, did you know Peet's delivers?&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;People you meet will not understand what you do or why you do it.  This is close to #1, but as I've heard it from multiple sources, it bears repeating.  They'll admire you and think you're nuts - all at the same time. Deep down, they might be thinking they wish they could do it if they only had the knowledge/guts/$2mil "everyone" knows you need before you can get started.  I dunno. I do know that, outside of other geeks, the #1 questions I get are "Aren't you scared?" and "What are you doing for money?".  Why, using the green paper stuff everyone else is using.. I tried using oak leaves, but Ralph's didn't seem interested in them.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There are days it will feel incredible. That's great. There are days it will feel hopeless.. just keep going!  Also from multiple sources.  Enough said.. and good advice this one.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-5192552022306799473?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/5192552022306799473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=5192552022306799473' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/5192552022306799473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/5192552022306799473'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/08/things-they-dont-tell-you-and-some.html' title='Things they don&apos;t tell you, and some things they do'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-1392107013178554868</id><published>2007-08-18T11:48:00.000-07:00</published><updated>2007-08-18T13:22:36.819-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='general'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>Six Months !</title><content type='html'>Hey, my company's six-month anniversary came and went and I forgot to blog it.  We started this journey on Feb 14th of this year.  We're not as far along as I'd like, but given that I started this adventure with a &lt;span style="font-style: italic;"&gt;seriously &lt;/span&gt;rusted set of technical skills, well.. maybe I'll learn to give myself some slack.&lt;br /&gt;&lt;br /&gt;My original plan was to have a Flex prototype up and working by May 15th.  That target date flew by and I had it ready by about June 20th.&lt;br /&gt;&lt;br /&gt;Our next milestone is to have an alpha launch by Aug 31st.   After that, we shall have weekly miletones and we'll "iterate, iterate, iterate"!&lt;br /&gt;&lt;br /&gt;Most days I feel like I can't work fast enough, and that this is taking way too long to get into alpha. However, looking back...&lt;br /&gt;&lt;br /&gt;On Feb 1, my tech skills were limited to the RPG procedural language, DB2 (and SQL), midrange architecture, HTML, and some hacking experience with  linux, assembly, C and java. from 1994-1996.  But I was pretty seriously rusty in anything outside of RPG procedural programing and relational database design and implementation using DB2, SQL, and DDS.&lt;br /&gt;&lt;br /&gt;Since then, I've learned Flex and Actionscript3, javascript, python, django, more modern HTML and CSS practices, apache server administration, object-oriented techniques, MVC framework, some RoR (not much, but enough to hack through it if I had to) and coding for the Facebook platform.  I'm no expert or guru obviously - but enough of a generalist to competently build, and to keep learning.&lt;br /&gt;&lt;br /&gt;I did it by &lt;span style="font-style: italic;"&gt;doing &lt;/span&gt;- building some mp3 players, building our prototype in AS3, building a Facebook app in django and FBML, and so on.&lt;br /&gt;&lt;br /&gt;In other words, I &lt;span style="font-weight: bold;"&gt;hacked&lt;/span&gt;. And made countless mistakes.. boy, my original AS3 code is ugly!  Wow. Unsightly. But with help, and advice from more experienced coders (thank you all !), I've re-written most of it using the Cairngorm microframework for AS3 and the django framework &amp;amp; javascript for XHTML.&lt;br /&gt;&lt;br /&gt;I'm taking this moment to pat myself on the back. Because compared to damn near everyone else I've met in tech circles, I've felt like an idiot!,  but looking at the last 6 months' work as I've written it here.. I gotta say: not bad.   I still want to work faster, and more efficiently.. but that will come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-1392107013178554868?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/1392107013178554868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=1392107013178554868' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/1392107013178554868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/1392107013178554868'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/08/six-months.html' title='Six Months !'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-3953211972050827709</id><published>2007-08-14T18:16:00.000-07:00</published><updated>2007-08-14T18:18:43.826-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='marketing'/><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='web strategy'/><title type='text'>Jeremiah Owyang on Web Strategy and Facebook</title><content type='html'>&lt;blockquote style="font-family: times new roman;"&gt;"If you’ve not already figured it out, the corporate website is becoming less relevant, and web marketing (and support) has spread off your domain and google results. You also know that prospects trust the opinions of existing customers (who are ‘like them’) far more than marketers, and Facebook let’s these communities of practice assemble, your brand is decentralized –embrace!."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-3953211972050827709?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.web-strategist.com/blog/2007/08/11/web-strategy-what-the-web-strategist-should-know-about-facebook/' title='Jeremiah Owyang on Web Strategy and Facebook'/><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/3953211972050827709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=3953211972050827709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/3953211972050827709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/3953211972050827709'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/08/jeremiah-owyang-on-web-strategy-and.html' title='Jeremiah Owyang on Web Strategy and Facebook'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-7002385624187592854</id><published>2007-08-11T15:31:00.000-07:00</published><updated>2007-08-14T18:19:30.006-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='advertising'/><category scheme='http://www.blogger.com/atom/ns#' term='web strategy'/><title type='text'>Doc Searls on Advertising</title><content type='html'>&lt;blockquote style="font-family: times new roman;"&gt;&lt;p&gt;"Advertising has always been woefully inefficient. Improving targeting and making advertising accountable by counting click-throughs does not solve the problem that advertising has always been an exercise in guesswork. At some point the guessing ends — not by absolute improvements in targeting, but by the creation of new methods by which demand finds supply. These methods will be anchored in better tools for customers, and better means for sellers and intermediaries to satisfy demand by connecting to better-equipped customers.&lt;/p&gt; &lt;p&gt;The Net revolution has always been about radically improving the connections between demand and supply, and about equipping profusions on both sides of the relationship — while reducing intermediary costs and frictions in the direction of zero.&lt;/p&gt; &lt;p&gt;As a term for describing this development, “commoditization” is a misleading failure. &lt;em&gt;Roles&lt;/em&gt; are changing far more than “content” — a term which itself misleads by reducing the informing of people to deliverable commodities. People still need to inform other people. More ways to do that will emerge. There will be business models there. Supply and demand will find each other. We need to figure out how to make new and better money with new and better roles. Advertising will still be part of that picture, but it won’t fund the whole thing."&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-7002385624187592854?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.law.harvard.edu/doc/2007/08/09/looking-toward-life-beyond-advertising/' title='Doc Searls on Advertising'/><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/7002385624187592854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=7002385624187592854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7002385624187592854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7002385624187592854'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/08/doc-searls-on-advertising.html' title='Doc Searls on Advertising'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-24297814605967727</id><published>2007-08-09T08:40:00.000-07:00</published><updated>2007-08-09T17:06:45.643-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='twiistup'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><title type='text'>speechless</title><content type='html'>I was at the &lt;a href="http://twiistup.com/"&gt;Twiistup 2&lt;/a&gt; event last night in Venice, CA and had a great time hanging out with SoCal geekdom.  The tech sector is exploding down here, and it's damn exciting.&lt;br /&gt;&lt;br /&gt;I have no voice left, and am just getting my coffee, so I'll blog more about this later. But suffice to say it was cool, and there's a lot happening that you should check out. Among others, take a look at &lt;a href="http://elephantdrive.com/"&gt;Elephant Drive&lt;/a&gt;, &lt;a href="http://www.fafarazzi.com/"&gt;Fafarazzi&lt;/a&gt;, &lt;a href="http://geni.com/"&gt;Geni&lt;/a&gt;, &lt;a href="http://teleflip.com/"&gt;Teleflip&lt;/a&gt;, &lt;a href="http://beat9.com/"&gt;Beat9&lt;/a&gt;, &lt;a href="http://goowy.com"&gt;Goowy/YourMinis&lt;/a&gt; and &lt;a href="http://verse-studios.com/"&gt;Verse Studios&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(uh, and oh yeah - that wasn't Bono.  Sheesh.)&lt;br /&gt;&lt;br /&gt;update: Forgot one... sorry about that!&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-24297814605967727?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/24297814605967727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=24297814605967727' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/24297814605967727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/24297814605967727'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/08/speechless.html' title='speechless'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-8922113945957420830</id><published>2007-08-06T21:59:00.000-07:00</published><updated>2007-08-06T22:47:47.281-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='advertising'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='self-expression'/><title type='text'>Self-Expression Advertising</title><content type='html'>&lt;div style="text-align: right; float: right; border-style: solid; border-width: 1px;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_bewqXULb5dQ/RrgG0rp9HoI/AAAAAAAAAAc/PkLfJaHePJg/s1600-h/Triumph+Logo.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_bewqXULb5dQ/RrgG0rp9HoI/AAAAAAAAAAc/PkLfJaHePJg/s320/Triumph+Logo.jpg" alt="" id="BLOGGER_PHOTO_ID_5095830480511377026" border="1" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;What is Self-Expression Advertising?&lt;br /&gt;&lt;br /&gt;It's a form of advertising by means of self-expression, of course!&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;I like this/I am this&lt;/span&gt;" is the key concept here* - and it's not a new concept. If I identify with a certain product strongly enough for whatever reason - aesthetics, prestige, etc. -  I'll be more than happy to wear their t-shirt, or jacket, or whatever with the big 'license plate' logo. Manufacturers and rocks bands have known about and marketed this way for decades (see the designer products markets), and now web advertising is finally catching up.&lt;br /&gt;&lt;br /&gt;Allowing people to choose their ads, giving them incentive and making it easy &amp; fun to do so &lt;span style="font-style: italic;"&gt;and &lt;/span&gt;making the process a vehicle for self-expression, is a great way to advertise on the web.&lt;br /&gt;&lt;br /&gt;Advertising then becomes a form of self-expression and a conversation between the viewer, the content provider, and the vendor - the relationship here is probably complex, and I'm toast at the moment after having been coding all day, but I'm right. Don't argue, we're good to go on this one.&lt;br /&gt;&lt;br /&gt;This, my friends, is gonna be huge.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;* from "The Substance of Style", V. Postrel&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-8922113945957420830?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/8922113945957420830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=8922113945957420830' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8922113945957420830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8922113945957420830'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/08/self-expression-advertising.html' title='Self-Expression Advertising'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_bewqXULb5dQ/RrgG0rp9HoI/AAAAAAAAAAc/PkLfJaHePJg/s72-c/Triumph+Logo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-3673766190431516117</id><published>2007-08-04T23:38:00.000-07:00</published><updated>2007-08-05T00:50:36.606-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Learning the learns</title><content type='html'>I've been learning the Facebook platform these last few weeks and before that I was getting our prototype into a state ready for review.  Coding day and night, and as Paul put it the other day "learning the learns".  I knew I'd need a widget strategy for our product and as soon as Facebook launched their platform last May I quickly knew that FB was going to play a big role in that strategy. As soon as I returned from my last trip to SF a couple of weeks ago, I jumped into learning the Facebook platform markup language (FBML), and really started coding in earnest with &lt;a href="http://www.djangoproject.com/"&gt;django&lt;/a&gt; rather than with PHP.&lt;br /&gt;&lt;br /&gt;Oh yeah.. &lt;span style="font-style: italic;"&gt;lots &lt;/span&gt;of learns.  Re-tooling my rusted tech skills to actionscript, javascript, python, linux, and apache has taken longer than I'd hoped (three months to learn it all was unrealistic!), and developing while you're learning something new sometimes feels like you're trying to ride a 10-speed in molassess.*  I'm used to developing very quickly on an iSeries, and so have had to change the expectations I place upon myself as I now produce code more slowly; some skills translate from my former hacker life - on the one hand I can design a database, normalize it in my head,  and get it modeled &amp; implemented very quickly. On the other, I'll make basic mistakes in code that put me behind schedule by days, or I'll hack together programs that require later re-design. My debugging skills are getting back up to top quality, which is good, and I know of more efficient frameworks now that I seldom needed on an iSeries.&lt;br /&gt;&lt;br /&gt;I commented to a friend that music production was a much faster process than consumer web product development. His reponse was that it wasn't - just stick with what I'm doing and eventually it'll be as natural as walking. He's right, of course - and what I should have said was that music production &lt;span style="font-style: italic;"&gt;feels &lt;/span&gt;like a faster process.&lt;br /&gt;&lt;br /&gt;However, all this being said - back in January I had no idea how to code in as, js, python, how to use django, or how to develop an application on Facebook.  Now I can do all of these things, and even launched&lt;a href="http://apps.facebook.com/noisewall"&gt; a small app on FB&lt;/a&gt; the other day. I gave myself one week to get it functioning, and another week to polish it to a rudimentary state for launch.  I'm not really taking advantage of the platform's incredible access to a huge social graph yet - that's by design  - and the program I created is at the limits of my javascript expertise as of last Friday. But as I learn, and as users respond, I'll enhance the app, change it, and connect it further to points of engagement into FB's social graph.  At the moment I'm not proud of it - the UI still needs work, and the overall functionality will be improved as I figure out how to do what I want, and how to implement what Paul has designed. (Hint: It's cool!).&lt;br /&gt;&lt;br /&gt;I attended the L.A. Facebook Developer's Garage last weekend and asked a couple of people to "beat the crap" out of my app - in other words, review it with a critical &amp; professional eye and offer constructive criticism. Thanks to Max, Kareem, Ryan and Otis for taking a look and offering said criticism. As a result, I changed the program and am much happier with the results.  As I built my app, I paid no attention to flow, or design - a HUGE contradiction to my usual development philosophy: design first, then technology.  However, as an exercise to learn some hacking skills,  I broke my own rules. Jump into the code, quickly, and start swimming.&lt;br /&gt;&lt;br /&gt;I'm looking forward to getting back into Flex, but have been having a blast with django and python. This stuff is very cool.  Once I'm back coding in AS3, I'll be implementing the cairngorm framework, which is a very lightweight MVC microarchitecture that provides a very easy-to-maintain framework on which to hang code. I'll never go back to coding RPGLE on an iSeries, ever again if I can help it. While the iSeries is a fantastic piece of hardware, and I'd love a new one with a linux partition the size of Montana, I can't go back to the mind-numbing tedium of 1980s-style shitcode.&lt;br /&gt;&lt;br /&gt;I'm also looking forward to more of the business stuff. Unlike many hackers I've met, I like the business work of business.  But in the meanwhile, I'm getting closer to the point where coding for the web is as easy as walking.&lt;br /&gt;&lt;br /&gt;If you're an &lt;span style="font-style: italic;"&gt;as(2 or 3) &lt;/span&gt;or &lt;span style="font-style: italic;"&gt;js &lt;/span&gt;coder, and interested in some side-work, send me an email.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;*Orson Welles is alleged to have said that working in Hollywood was like 'trying to ride a tricycle in a barrel of molasses' or words to that effect.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-3673766190431516117?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/3673766190431516117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=3673766190431516117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/3673766190431516117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/3673766190431516117'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/08/learning-learns.html' title='Learning the learns'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-3974788853813351939</id><published>2007-07-13T14:34:00.000-07:00</published><updated>2007-07-13T14:56:58.614-07:00</updated><title type='text'>Very very cool.</title><content type='html'>&lt;div&gt;&lt;embed src="http://www.hotornot.com/swf/widget.swf" quality="high" salign="1" wmode="transparent" style="width:400px;height:300px" name="hon" flashvars="host=services.hotornot.com&amp;wid=RQKLB&amp;swfhost=http://www.hotornot.com" type="application/x-shockwave-flash" /&gt;&lt;div style="width:400px"&gt;&lt;a href="http://www.hotornot.com/inbound/?lid=5&amp;wid=RQKLB" target="_blank"&gt;&lt;img src="http://pix.hotornot.com/i/hotlist_widget_footer.gif" border="0" ismap="ismap"&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-3974788853813351939?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/3974788853813351939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=3974788853813351939' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/3974788853813351939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/3974788853813351939'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/07/very-very-cool.html' title='Very very cool.'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-6522827337884250436</id><published>2007-06-21T07:31:00.000-07:00</published><updated>2007-06-21T07:36:10.772-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Eclipse 3.2 crash and solution</title><content type='html'>Are you working on a big project in Flex Builder, or have several projects open at once? Is Eclipse 3.2 giving you woe and grief by running out of memory and crashing often?&lt;br /&gt;&lt;br /&gt;If so, friend, I used to be just like you, until I searched the web and found this answer that is working fine so far:&lt;br /&gt;&lt;br /&gt;In your eclipse.ini file, add the following line:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;blockquote&gt;-XX:MaxPermSize=128m&lt;/blockquote&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;My .ini file looks like this:&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family: courier new;"&gt;-vmargs&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-Xms40m&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-Xmx1024m&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-XX:MaxPermSize=128m&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-6522827337884250436?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/6522827337884250436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=6522827337884250436' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/6522827337884250436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/6522827337884250436'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/06/eclipse-32-crash-and-solution.html' title='Eclipse 3.2 crash and solution'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-6322805624582858728</id><published>2007-06-19T07:51:00.000-07:00</published><updated>2007-06-20T07:16:05.236-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='work'/><title type='text'>Finally</title><content type='html'>After coding like a madman, re-coding like a madman to correct learning-curve mistakes in AS3 and in python, getting software installed on the server, reading tech manuals, coding experiments, late night coffee-fueled code hacking turned to early morning greet the dawn coffee-fueled code hacking... after all of this I finally have a decent prototype in Flex up and running!&lt;br /&gt;&lt;br /&gt;Last week I demo'ed it for some friends, who actually gave it a thumbs-up. They didn't say "It sucks", which they would tell me if they thought it sucked.  So it doesn't suck!&lt;br /&gt;&lt;br /&gt;About halfway through the coding of the proto, I switched my approach from building something for me to use to building something everyone else in the world to use - something easy and elegant and way &lt;span style="font-style: italic;"&gt;&amp;%$#*&amp;amp;% &lt;/span&gt;cool.  This approach was confirmed by an email from a mentor-type friend (Mr Mentor) who suggested I narrow the focus of the product down even further, and do NOT build for myself - I'm a geek, the vast majority of the rest of the world are not, so what works for me will annoy the hell out of them - imagine my users, become a user-advocate, and go from there. Think of and build for them, not for me.&lt;br /&gt;&lt;br /&gt;And I'm halfway through &lt;a href="http://www.amazon.com/Humane-Interface-Directions-Designing-Interactive/dp/0201379376/"&gt;The Humane Interface&lt;/a&gt; by Jef Raskin, a must-read for anyone developing machines (soft or otherwise) for humans. *&lt;br /&gt;&lt;br /&gt;So yeah, OK, I get it.. understood and gladly. I love the idea of being a user-advocate, since it isn't very far from being a teacher. And when I was traveling around the country for Softlanding, I was teaching -- placing myself in the shoes of the student and drawing upon whatever common experience I could to communicate the understanding of certain ideas, followed by the understanding and usefulness of techniques in and of the software.  Creating usable user-centric  software isn't so far off from that.&lt;br /&gt;&lt;br /&gt;That being said, yesterday Paul and Charlie and I finally got to talking about the prototype, and criticizing the hell out of what we have so far. We meet this Weds to discuss what the UI should look like, considering all of the use-cases and not just the handful I started with when I was building the infrastructure of the thing. (MVC of course, so changing flow and cosmetics won't be too painful).  The UI of the "back office" piece needs improvement/overhaul, but I expected that.  It seems that none of us are overly precious with our work, so we're critical as hell of every little piece and more than willing to change it so it works. &lt;br /&gt;&lt;br /&gt;(There is a fine line between engaging in perfectionism and engaging in ant-f*****g, but so far we're on the safe side of  that line).&lt;br /&gt;&lt;br /&gt;So, much more work to go before an invite-alpha launch, but soon.. &lt;span style="font-style: italic;"&gt;soon &lt;/span&gt;Igor, soon the monster will rise....&lt;br /&gt;&lt;br /&gt;***&lt;br /&gt;&lt;br /&gt;I read this yesterday: &lt;a href="http://blog.pmarca.com/2007/06/the_pmarca_guid_1.html"&gt;Why Not To Do A Startup, Part 1&lt;/a&gt; and it didn't discourage me.  Depressed the crap out of me, sure, but I'm not swayed from my intentions here. While I even now have the occasional frightful dream about running out of money and having to return to the hot furnaces of iSeries dev work, in my pajamas, a day late for the final exam, I read it and came to the same answer I came to when told pretty much the same thing by Mr. Mentor - "I can't NOT do it".   (Of course, Mr Mentor also told me to make music my hobby and get into the interwebs business, but I think he meant work for a  startup, not create one. Not sure.. I leapt pretty quickly into creating one and may have missed the last memo).&lt;br /&gt;&lt;br /&gt;I feel the same drive, the same intensity now that I felt when I started the music biz.    What I do NOT feel is the same sense of blindness; the music biz failed, in the end, and the lessons I learned there are being applied here.  That in and of itself is a pretty good bit of light (and enlightenment). And - Failure measured in monetary terms - it was a success in some other ways.&lt;br /&gt;&lt;br /&gt;(In short: while I had incredible distribution of music on TV, I was monetized vertically - two or three huge corporate vendors owed me (lots of) money.   What happens if your big enterprise customers don't pay, for whatever reason?  Your company dies, that's what.  I finally got paid, years later, after much learning and pain.).&lt;br /&gt;&lt;br /&gt;Drive. It's a big one. As is the utterly deep-seated, non-rational yet unshakable belief that I'll be successful, no matter what.**  And "&lt;span style="font-style: italic;"&gt;L'Audace, l'Audace, toujours l'Audace!&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;Now, what's it like to do this at age 42?  Uh.. more on that later.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*&lt;span style="font-style: italic;"&gt;Books I  suggest very highly&lt;/span&gt;:&lt;br /&gt;&lt;a href="http://www.amazon.com/Humane-Interface-Directions-Designing-Interactive/dp/0201379376/"&gt;The Humane Interface&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Substance-Style-Aesthetic-Remaking-Consciousness/dp/0060933852"&gt;The Substance of Style&lt;/a&gt; and &lt;a href="http://www.amazon.com/Future-Its-Enemies-Creativity-Enterprise/dp/0684862697"&gt;The Future and its Enemies&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Road-Serfdom-Documents-Definitive-Collected/dp/0415035287"&gt;The Road to Serfdom &lt;/a&gt;and &lt;a href="http://www.amazon.com/Individualism-Economic-Order-F-Hayek/dp/0226320936"&gt;Individualism &amp;amp; Economic Order&lt;/a&gt; and anything else by Hayek&lt;br /&gt;&lt;a href="http://www.amazon.com/True-Believer-Thoughts-Movements-Perennial/dp/0060505915"&gt;The True Believer&lt;/a&gt; and anything else by Hoffer&lt;br /&gt;&lt;a href="http://www.amazon.com/Treatise-Human-Nature-David-Hume/dp/1406927554"&gt;A Treatise on Human Nature&lt;/a&gt;&lt;br /&gt;and anything by Mark Helprin. especially &lt;a href="http://www.amazon.com/Freddy-Fredericka-Mark-Helprin/dp/0143037250"&gt;this&lt;/a&gt;, &lt;a href="http://www.amazon.com/Winters-Tale-Mark-Helprin/dp/0156031191"&gt;this &lt;/a&gt;and &lt;a href="http://www.amazon.com/Memoir-Antproof-Case-Mark-Helprin/dp/0156032007"&gt;this&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;** Some people call this delusion, naivety, etc. I call it a very good way/method to skewer fear right where it sits and be done with it.  How do I know I can do it?  I know - the rest I'll learn and figure out, and ask for help.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-6322805624582858728?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/6322805624582858728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=6322805624582858728' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/6322805624582858728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/6322805624582858728'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/06/finally.html' title='Finally'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-8909598414890623669</id><published>2007-05-18T18:54:00.000-07:00</published><updated>2007-05-18T18:56:50.677-07:00</updated><title type='text'>The best sax player the world has ever known.</title><content type='html'>&lt;embed src="http://widget.slide.com/widgets/single.swf" type="application/x-shockwave-flash" quality="high" scale="noscale" salign="l" wmode="transparent" name="flashticker" align="middle" flashvars="url=http%3A%2F%2Fwww.slide.com%2Fs%2FSLC-nHDltj9Rqixa2psXiRL-6hseb6sN%3Fcy%3Dms%26referer%3Dtheme&amp;sk=3&amp;thc=-1&amp;th=0&amp;media_url=http%3A%2F%2Fwww.youtube.com%2Fv%2FDDOgYw5-pNs" style="height:256px;width:350px"/&gt;&lt;p&gt;&lt;a href="http://www.slide.com/pivot?ad=1&amp;tt=0&amp;sk=3&amp;cy=ms&amp;th=0&amp;id=72057594214320094&amp;map=7" target="_blank"&gt;&lt;img src="http://widget-f9.slide.com/s1/72057594214320094/ms_t000_v000_a001_f00/images/xslide8.gif" border="0" ismap="ismap" /&gt;&lt;/a&gt; &lt;a href="http://www.slide.com/pivot?ad=1&amp;tt=0&amp;sk=3&amp;cy=ms&amp;th=0&amp;id=72057594214320094&amp;map=8" target="_blank"&gt;&lt;img src="http://widget-f9.slide.com/s2/72057594214320094/ms_t000_v000_a001_f00/images/xslide7.gif" border="0" ismap="ismap" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-8909598414890623669?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/8909598414890623669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=8909598414890623669' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8909598414890623669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8909598414890623669'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/05/best-sax-player-world-has-ever-known.html' title='The best sax player the world has ever known.'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-8730521758103723105</id><published>2007-04-23T16:26:00.000-07:00</published><updated>2007-04-23T16:34:18.471-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='mp3 players'/><title type='text'>new mp3 player</title><content type='html'>I needed a break from my project, and so finally took some time to create a prototype of the easy-to-use, simple mp3 player I'd been thinking about.  It's over there, to the right.. black.. says "MP3" in nice, clean, mid-century-modern lettering. &lt;br /&gt;&lt;br /&gt;The background will (should!) change every time the widget is loaded, choosing randomly from one of four background images. &lt;br /&gt;&lt;br /&gt;The next step is to display the CD cover art when the song is loaded and to include the little VU meters that respond to the audio.  I'm not so sure people care about seeing the CD cover art, unless it's also the image for a link to a store from which the music can be purchased. What do you think?  Is the CD cover art important to you?&lt;br /&gt;&lt;br /&gt;I do think the volume buttons need to be instead a volume slider, and some sort of visible VU meters needed so as to give a visual clue as to volume levels.   &lt;br /&gt;&lt;br /&gt;But you look at this, and think "Yep, it's an mp3 player".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-8730521758103723105?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/8730521758103723105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=8730521758103723105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8730521758103723105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8730521758103723105'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/04/new-mp3-player.html' title='new mp3 player'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-6517784334876140101</id><published>2007-03-25T12:15:00.001-07:00</published><updated>2007-03-27T11:01:56.456-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='life'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>work work work work work</title><content type='html'>&lt;span style="font-weight: bold;"&gt;This weekend,&lt;/span&gt; this very weekend in which we are right now, is the first weekend in over five weeks that I'm not working.&lt;br /&gt;&lt;br /&gt;Just over five weeks ago, I started a new company.&lt;br /&gt;&lt;br /&gt;This was just after the two-and-a-half weeks that I spent learning some new programming skills and a new development platform that isn't based on an IBM midrange system.&lt;br /&gt;&lt;br /&gt;So I haven't taken any time off in over a month, until now.&lt;br /&gt;&lt;br /&gt;(pause for dramatic effect here).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I have no idea what to do with myself.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;It's a strange feeling! I love working for myself - this is my third company in sixteen years - and when I work, buddy lemme tell ya I &lt;span style="font-style: italic;"&gt;work&lt;/span&gt;. So for a over a month I've been doing 12 to 18 hour days, an all-nighter or two for good measure and still feel that I can't seem to work quickly or efficiently enough. And I jump out of bed every morning eager an excited to get going. Drink coffee, get to work. That simple, and exactly how it should be. So now, when I give myself "nothing" to do, I have no idea what to do. As in: have a life. What? How?&lt;br /&gt;&lt;br /&gt;So yesterday and today have been "have a life" days. "Smell the flowers" days. It's important, I know, but still... it feels strange. Anyway, I had no intention of sitting in front of my computer, but here I am, and for the first time in eons adding to this blog. [e&lt;span style="font-style: italic;"&gt;d note: this is crossposted from my other, older blog&lt;/span&gt;] Not exactly "having a life", but in a few I'm up and out and going somewhere interesting. Or at least somewhere with beer in clean glasses. Maybe I'll take my camera - the one that uses real film - and go shoot things.&lt;br /&gt;&lt;br /&gt;I can't bring myself to blog about politics. I'm still burned out on blogging about politics, though I'll still talk about it off-blog. It's all a mess - what more is there to say?&lt;br /&gt;&lt;br /&gt;So, today, a rare day off.  Then tomorrow, back at the desk working to my heart's content.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-6517784334876140101?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/6517784334876140101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=6517784334876140101' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/6517784334876140101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/6517784334876140101'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/03/this-weekend-this-very-weekend-in-which.html' title='work work work work work'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-8581707975548608476</id><published>2007-03-23T08:48:00.000-07:00</published><updated>2007-03-23T17:27:17.511-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Creating a new hit-area for a button in Flex Builder 2.0.1</title><content type='html'>I ran into this yesterday, and thought I'd put it up here &amp; share with the class.&lt;br /&gt;&lt;br /&gt;I have a button in mxml:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;#60;mx:button x="-22" y="294" id="reallyBigButton" stylename="reallyBigButtonStyle" buttonmode="true" usehandcursor="true" creationcomplete="addHitArea()" /&amp;#62;&lt;/blockquote&gt;It's really big, this button, and I only want a portion of it to be the hit area. The button is skinned via css with a .png file, and it covers about a sixth of the pixellated real-estate. Not good.&lt;br /&gt;&lt;br /&gt;So notice that on creationcomplete it calls a function addHitArea().&lt;br /&gt;&lt;br /&gt;That function looks like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;private function addHitArea():void{&lt;br /&gt; var newHitArea:Sprite = new Sprite();&lt;br /&gt; newHitArea.visible = false;&lt;br /&gt; newHitArea.mouseEnabled=false;&lt;br /&gt; newHitArea.graphics.clear();&lt;br /&gt; newHitArea.graphics.beginFill(0x000000, 1.0);&lt;br /&gt; newHitArea.graphics.drawCircle(117,216,80);&lt;br /&gt; newHitArea.graphics.endFill();&lt;br /&gt; reallyBigButton.addChild(newHitArea);&lt;br /&gt; reallyBigButton.hitArea = newHitArea;&lt;br /&gt; reallyBigButton.validateDisplayList();&lt;br /&gt;}&lt;/blockquote&gt;Notice a couple of things: the new hit area doesn't need to be visible. And it should have mouseEnabled set to false. You want the button to reference the button sprite for size and location,  but not to capture &lt;span style="font-style: italic;"&gt;control &lt;/span&gt;of any click events. Click events are still captured by the button.&lt;br /&gt;&lt;br /&gt;Why the graphics.clear? I'm not sure, other than good-practice. Clean the board before scribbling, I suppose.&lt;br /&gt;&lt;br /&gt;Keep in mind that the coordinates of the hitarea sprite are relative to the coordinates of the button, not of the stage or the button's parent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-8581707975548608476?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/8581707975548608476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=8581707975548608476' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8581707975548608476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8581707975548608476'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/03/creating-new-hit-area-for-button-in.html' title='Creating a new hit-area for a button in Flex Builder 2.0.1'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-8224774884189346658</id><published>2007-03-17T17:19:00.000-07:00</published><updated>2007-03-19T11:04:38.105-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='Atom'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='feeds'/><category scheme='http://www.blogger.com/atom/ns#' term='rss'/><title type='text'>as3syndicationlib and ATOM feeds</title><content type='html'>This needs review, but for anyone else reading Atom feeds using the &lt;span style="font-family:courier new;"&gt;as3syndicationlib&lt;/span&gt;, you may have found that feeds with no &lt;span style="font-style: italic;"&gt;content &lt;/span&gt;tag for an &lt;span style="font-style: italic;"&gt;entry&lt;/span&gt;, but with the &lt;span style="font-style: italic;"&gt;summary &lt;/span&gt;tag, don't process correctly. I.e., feeds that use summary and not content don't get processed as intended.&lt;br /&gt;&lt;br /&gt;As a quick fix, I modified &lt;span style="font-weight: bold;"&gt;Entry.as&lt;/span&gt; in &lt;span style="font-weight: bold;"&gt;src.com.adobe.xml.syndication.atom&lt;/span&gt; below the comment block at line 194.&lt;br /&gt;&lt;br /&gt;I'm still working on this, and so this code needs work. It's not the prettiest, but it's a start. Please note that indentations didn't make it from eclipse to blogger.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;*JDR -- Changed assignment to content. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;* Also, detect for &lt;/span&gt;&lt;summary style="font-family: courier new;"&gt; or &lt;content&gt; tag usage.  Blogger uses &lt;summary&gt;summary tag, but feedburner et.al. use &lt;content&gt;content tag.&lt;br /&gt;* I'm also loading the same source for XHTML or not, since ATOM feeds with XHTML  I tested&lt;br /&gt;* don't have the x.atom::content.xhtml::div contained.&lt;br /&gt;* And, type="html" is causing &gt;&gt;if (content.type == "xhtml") to valuate true in the debug session.&lt;br /&gt;*&lt;br /&gt;*&lt;br /&gt;*/&lt;br /&gt;public function get content():Content&lt;br /&gt;{&lt;br /&gt;var content:Content = new Content();&lt;br /&gt;content.type = ParsingTools.nullCheck(x.atom::content.@type);&lt;br /&gt;content.src = ParsingTools.nullCheck(x.atom::content.@src);&lt;br /&gt;if (content.type == "xhtml")&lt;br /&gt;{&lt;br /&gt;    // this line needs to be changed, but for now, return flat         content.&lt;br /&gt;    content.value = ParsingTools.nullCheck(x.atom::content);&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;    content.value = ParsingTools.nullCheck(x.atom::content);&lt;br /&gt;}&lt;br /&gt;if(content.src != null || content.value == null)&lt;br /&gt;{&lt;br /&gt;    content.type = ParsingTools.nullCheck(x.atom::summary.@type);&lt;br /&gt;    content.src = ParsingTools.nullCheck(x.atom::link.(@rel=="self").@href);&lt;br /&gt;    if (content.type == "xhtml")&lt;br /&gt;    {&lt;br /&gt;        content.value = ParsingTools.nullCheck(x.atom::summary);&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;    {&lt;br /&gt;        content.value = ParsingTools.nullCheck(x.atom::summary);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;return content;&lt;br /&gt;}&lt;/content&gt;&lt;/summary&gt;&lt;/content&gt;&lt;/summary&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://www.atompub.org/2005/01/10/draft-ietf-atompub-format-04.html"&gt;here &lt;/a&gt;for more info on Atom.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-8224774884189346658?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/8224774884189346658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=8224774884189346658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8224774884189346658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/8224774884189346658'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/03/as3xmlsyndicationlib-and-atom-feeds.html' title='as3syndicationlib and ATOM feeds'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-2162617232839538693</id><published>2007-03-15T07:41:00.000-07:00</published><updated>2007-03-17T17:55:47.888-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>AS3 object mistake</title><content type='html'>Most of my experience in coding is with a procedural language on an IBM iSeries. And on occasion I fall into old habits in as3. For example, I coded:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var var1:Text = new Text();&lt;br /&gt;var var2:Text = new Text();&lt;br /&gt;var1.text = "Var 1 text";&lt;br /&gt;var2.text = "Var 2 text";&lt;br /&gt;trace(var1.text, var2.text);&lt;br /&gt;var2=var1;&lt;br /&gt;trace(var1.text, var2.text);&lt;br /&gt;var1.text="Some new var1 text";&lt;br /&gt;trace(var1.text, var2.text);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;and didn't expect these results:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Var 1 text Var 2 text&lt;br /&gt;Var 1 text Var 1 text&lt;br /&gt;Some new var1 text Some new var1 text&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Oops.  Old (and bad) habits die hard.  In RPG, I'd expect the system to take care of instantiating a new object, so a change to var1 didn't also change var2.  I know better in as3, but it had me puzzled for a few minutes.  This works:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var var1:Text = new Text();&lt;br /&gt;var var2:Text = new Text();&lt;br /&gt;var1.text = "Var 1 text";&lt;br /&gt;var2.text = "Var 2 text";&lt;br /&gt;trace(var1.text, var2.text);&lt;br /&gt;var2=var1;&lt;br /&gt;trace(var1.text, var2.text);&lt;br /&gt;var1 = new Text();&lt;br /&gt;var1.text="Some new var1 text";&lt;br /&gt;trace("Final var1: "  + var1.text, " -- Final var2: " + var2.text);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;and yields:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Var 1 text Var 2 text&lt;br /&gt;Var 1 text Var 1 text&lt;br /&gt;Final var1: Some new var1 text  -- Final var2: Var 1 text&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Note new object instantiation before the last "Some new var1 text" assignment.&lt;br /&gt;&lt;br /&gt;Learning curve.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-2162617232839538693?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/2162617232839538693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=2162617232839538693' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/2162617232839538693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/2162617232839538693'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/03/as3-object-mistake.html' title='AS3 object mistake'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-7149952455098903403</id><published>2007-03-14T08:41:00.000-07:00</published><updated>2007-03-17T17:54:31.891-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>One month</title><content type='html'>Today marks one month of working on my own company!  After two and a half weeks of training, teaching myself Flex and AS3, and remembering half of what I've forgotten in python, I started actual work on Feb 14.&lt;br /&gt;&lt;br /&gt;One month. Blew right by. But the long days and weekends are paying off, though slowly.&lt;br /&gt;&lt;br /&gt;In the meanwhile, here's another little tip for FlexBuilder 2.0.1: before you refactor any code, make sure you remove all watch expressions from the debugger view.  I was able to freeze eclipse in subsequent debug sessions after I changed a couple of properties in a class while said properties were being watched. Removing the watch expressions from the debug view &amp;amp; replacing them to the debug view when needed seemed to clear up the problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-7149952455098903403?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/7149952455098903403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=7149952455098903403' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7149952455098903403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/7149952455098903403'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/03/one-month.html' title='One month'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-595328719527123843</id><published>2007-03-11T17:15:00.000-07:00</published><updated>2007-03-17T17:55:03.732-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='themes'/><title type='text'>flex theme use</title><content type='html'>I recently needed to "grey-box" something  - I needed to check the flow from use-case to use-case throughout the app.  Rather than use the standard flex themes, I used&lt;a href="http://www.scalenine.com/"&gt; Juan Sanchez's "Shadow" theme.  &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Usually we think of themes and skins in terms of final product - at least I did until about a week ago - but there's a call for their use in any situation. What impression do we give our audience about the product? What are we communicating about our attention to detail, our understanding of aesthetics, and what first impression are we inspiring people to infer, or feel?&lt;br /&gt;&lt;br /&gt;I plan on using more themes as different situations arise, and I use "Obsidian" for my own personal tools just because I like it &amp;amp; it feels good to me.   And of course content and functionality need to be high-quality, but I've found that in many cases there are more than a few people in a room who, when asked why they went with our product (back a few months ago when I had a job) was that "it just felt right".  Hm. Not an answer Descartes would be happy with, but a valid and valubale answer none-the-less.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-595328719527123843?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/595328719527123843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=595328719527123843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/595328719527123843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/595328719527123843'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/03/flex-theme-use.html' title='flex theme use'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-5892311322814331965</id><published>2007-02-25T10:14:00.000-08:00</published><updated>2007-03-17T17:55:31.121-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>A handy Eclipse tip</title><content type='html'>I was reminded of this recently when I read it on &lt;a href="http://www.onflex.org/ted/2007/01/close-projects-to-improve-compilation.php"&gt;Ted Patrick's blog&lt;/a&gt;.  To be fair, I think I first heard about this from Paul Thiel...  but.. uh.. forgot. .  .&lt;br /&gt;&lt;br /&gt;In Eclipse, be sure to close projects that aren't currently active.  Go to your navigator, right-click on a project folder, and select "Close Project".&lt;br /&gt;&lt;br /&gt;It turns out that Flex Builder will scan all open projects &amp;amp;  decider whether anything requires compilation. This will bog eclipse on open -and on save!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-5892311322814331965?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/5892311322814331965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=5892311322814331965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/5892311322814331965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/5892311322814331965'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/02/handy-eclipse-tip.html' title='A handy Eclipse tip'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-117201893887621940</id><published>2007-02-21T09:00:00.000-08:00</published><updated>2007-02-22T15:55:50.326-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='mp3 players'/><title type='text'>"i am the musicplayer of my pocket calculator" (a pre-beta beta)</title><content type='html'>Something I've been messing with:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.gearheadmusic.com/player.html"&gt;&lt;img src="http://bp1.blogger.com/_bewqXULb5dQ/Rdu_eCKM3WI/AAAAAAAAAAM/bZk3hDa3fxU/s320/calculatorplayer.jpg" alt="" id="BLOGGER_PHOTO_ID_5033827531213299042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.gearheadmusic.com/"&gt;&lt;img src="http://www.gearheadmusic.com/images/GHLogo_small.jpg" border="0" /&gt;&lt;/a&gt;&lt;small&gt; &lt;i&gt;mp3-player!&lt;/i&gt;&lt;/small&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;You'll have to go &lt;a href="http://www.gearheadmusic.com/player.html"&gt;here &lt;/a&gt;to see the real one.  Enjoy!&lt;br /&gt;&lt;br /&gt;(roll the cursor around to see the tooltips that should guide you in the right direction).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Update:&lt;/span&gt; I've cleaned up a couple of small things in the design. The app is still too heavy, and future iterations will have to be much lighter and faster.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Update 2 and 3:&lt;/span&gt; Updated the engine to the XSPF standard, added a load-progress bar, help text, credits, and included a rollover to XML provided ID if ID3 isn't available. Later: changed the division key to a "help" key.&lt;br /&gt;&lt;br /&gt;Some notes: yep, this is not a design that allows for intuitive use. (Where's the "play" button? How do I make it go?)  This is not a design I'd spring upon an unwary populace, but it's fun - and as an exercise for me, it's perfect. And the buttons are be skinned dynamically.. just drop them into a folder with the correct filenames and they will appear on the calc at runtime! So changing the "=" button to look like a "play" button at rollover is eaaaaasy....&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Update 4:&lt;/span&gt; Whoa!  This is featured on the &lt;a href="http://www.scalenine.com/"&gt;scale nine&lt;/a&gt; frontpage! Thanks, Juan!&lt;br /&gt;(and re-positioned this post to the top of the blog)&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-117201893887621940?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.gearheadmusic.com/player.html' title='&quot;i am the musicplayer of my pocket calculator&quot; (a pre-beta beta)'/><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/117201893887621940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=117201893887621940' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/117201893887621940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/117201893887621940'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/02/i-am-musicplayer-of-my-pocket_20.html' title='&quot;i am the musicplayer of my pocket calculator&quot; (a pre-beta beta)'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_bewqXULb5dQ/Rdu_eCKM3WI/AAAAAAAAAAM/bZk3hDa3fxU/s72-c/calculatorplayer.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-5932253651544641164</id><published>2007-02-21T08:19:00.000-08:00</published><updated>2007-02-21T08:31:55.680-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>new blogroll - the scale nine website</title><content type='html'>I picked up Flex really only three weeks ago, read the &lt;a style="font-style: italic;" href="http://www.amazon.com/Adobe-Flex-2-Training-Source/dp/032142316X/gearheadmusic" window="_blank"&gt;Flex Training From The Source&lt;/a&gt; book and &lt;a style="font-style: italic;" href="http://www.amazon.com/Advanced-ActionScript-3-Design-Patterns/dp/0321426568/gearheadmusic" window="_blank"&gt;Actionscript 3 with Design Patterns&lt;/a&gt;, and started coding. I also picked up &lt;a style="font-style: italic;" href="http://www.amazon.com/ActionScript-3-0-Cookbook-Joey-Lott/dp/0596526954/gearheadmusic" window="_blank"&gt;The ActionScript 3 Cookbook&lt;/a&gt;, which I can also highly recommend.&lt;br /&gt;&lt;br /&gt;One of the sites that has been a great inspiration and resource is &lt;a href="http://www.scalenine.com/" window="_blank"&gt;scale nine&lt;/a&gt;, Juan Sanchez' site/blog.  Added to the blogroll!  Read his information and collections of information on skinning Flex apps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-5932253651544641164?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.scalenine.com/' title='new blogroll - the scale nine website'/><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/5932253651544641164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=5932253651544641164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/5932253651544641164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/5932253651544641164'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/02/new-blogroll-scale-nine-website.html' title='new blogroll - the scale nine website'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-117177656366267531</id><published>2007-02-17T01:56:00.000-08:00</published><updated>2007-02-20T21:52:55.217-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Software Dev and Music Prod, pt. 2.5</title><content type='html'>&lt;span style="font-style: italic;"&gt;Use what ya got &lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;When I first fell in with the local composers crowd, I'd join them  once in a while at a Studio City coffee joint and we'd talk shop. This piece of gear, that piece of gear, this client, that project, blah blah blah.  Inevitably, several of the guys would speak of the newest, latest, best recording equipment in reverant tones, and offer this bit of (to them) sage advice: "&lt;span style="font-style: italic;"&gt;If you don't have [piece of gear x] and [piece of gear y], you can't compete. You suck. You'll never make it. Who are you fooling? You can't possibly be professional unless you own these gadgets! Go home! Now!&lt;/span&gt;" How odd that these guys, save one, did not produce even one product. Everything was, oddly enough, a "demo".  This is akin to never getting out of "prototype" stage.&lt;br /&gt;&lt;br /&gt;Hey, look. If I had the extra cash to buy the thing, I might. But the gear I own is not only good enough, it's excellent if you know what you're doing. And if you don't know what you're doing, learn what to do so that you eventually know what you're doing!&lt;br /&gt;&lt;br /&gt;And, with one exception, the music out of my studio was far and away of better quality than the work of these gearheads. In the end, they depended on the hardware to make them successful,  rather than depend on their knowledge, skill, and talent to get them to where they wanted to be.&lt;br /&gt;&lt;br /&gt;Here's a great example. While we were working on a Gypsy Soul production, we needed a decent shaker and also a decent brushes-on-snare sound.  We had no budget, and so we had to use what we had.&lt;br /&gt;&lt;br /&gt;Use what ya got.  What'd we &lt;s&gt;got&lt;/s&gt; have? For one, we had Roman's production skills and bat-like hearing. For two, we had my sound-design and editing skills.  And for three.. we had a cupboard full of spice canisters and imaginations fueled by gallons of &lt;span style="font-style: italic;"&gt;caffe americanos&lt;/span&gt;. (two shots of espresso and hot water in a tall cup).  We found a plastic canister of sesame seeds for our shaker. I still have it, and it's the best damn shaker I own. And it turns out that a bunch of loose change in Roman's corduroy pants pocket made the best brushed-snare sound if you recorded it in the right way. (See their CD "Superstition Highway").   In fact, our at-the-time odd recording style made it into EQ magazine!  Go figure.&lt;br /&gt;&lt;br /&gt;In software development, the same applies. Use what ya got. Anyone who's worked on an iSeries &lt;span style="font-style: italic;"&gt;nee &lt;/span&gt;AS/400 knows what I mean.. Enterprise solutions using RPG-III and IV?  Get outta here. I mean.. ouch. But we did it, from 1987 onward.&lt;br /&gt;&lt;br /&gt;Now, to be fair, I did just spend two weeks learning AS3.   And I have one killer laptop to go with my two used, old, slow, ancient laptops.  So it isn't like I'm suffering here... But, using what I got, I am going forward with the skills I already have, learning more as I go.  Might this mean re-engineering later?  Well, &lt;span style="font-style: italic;"&gt;maybe&lt;/span&gt;. But rather than wait for my RoR ship to come in, or for some expert in AS3 or somesuch to arrive at my doorstep, or for the free money to go and buy a monster server, an additional flatscreen monitor, etc. etc.,  I'm coding coding coding...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;There are limits, of course. Lets make an agreement right now, shall we?  I won't argue from extremes here - everything I write will take into account that there is always an exception to a rule, somewhere.. and there are always extreme cases that can serve as arguments contrary to what I write.  Let's be clear - unless I'm &lt;span style="font-style: italic;"&gt;way&lt;/span&gt; off about something, "thinking from extremes" gets us nowhere and provide little but anecdotal suppositions with a highly suspect probability of occurrence. For example "&lt;span style="font-style: italic;"&gt;Yeah, use what ya got, but what if all ya got is a TRS-80 and a cassette recorder, and an old Hitachi black and white TV, huh? Huh? Huh?&lt;/span&gt;"  Shaddup. Don't think or argue from extremes.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-117177656366267531?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/117177656366267531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=117177656366267531' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/117177656366267531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/117177656366267531'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/02/software-dev-and-music-prod-pt-25.html' title='Software Dev and Music Prod, pt. 2.5'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-117177525761161313</id><published>2007-02-17T01:23:00.000-08:00</published><updated>2007-02-20T21:52:39.754-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Software Dev and Music Prod, pt. 2</title><content type='html'>Alright, lets talk about some of these points I mentioned in the first part.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Work harder than anyone else you know&lt;/span&gt;.  This one seems obvious. And yet...&lt;br /&gt;&lt;br /&gt;This one isn't a surprise to anyone, I hope, in any business. Programmers have a reputation of being work-fanatics whose problem might be characterized not as needing to working harder, but to work smarter.  (Although, I know of more than a few programmers who talk about work more than they actually work). Musicians on the other hand... ah, the easy party life.  Let's put it this way: in three years, the four of us produced and published &lt;span style="font-style: italic;"&gt;over fourteen &lt;/span&gt;high-quality, full-length CDs. Our immediate competition barely got four out the door. And they had more people working on their projects! Our secret? One example: Roman and I would start at 8am, finish at midnight or later sustained on coffee and ginger cookies and capped with drives around a semi-sleeping Los Angeles, reviewing our work on the car stereo and checking for anything that might be a problem, and start again the next day. For ten days to two weeks straight, we'd kick some serious studio ass.  It paid off.  It's a lesson I learned and have brought to the coding of my new project.&lt;br /&gt;&lt;br /&gt;Work hard.  It helps if you love what you do (and is necessary in my not so reasonably humble opinion), but as Vonnegut said about being a successful writer: "&lt;span style="font-style: italic;"&gt;Put glue on the chair&lt;/span&gt;".  This will propel you past your competition, who don't work as hard as you do and will end up wondering how you got so much done before they did.&lt;br /&gt;&lt;br /&gt;On a personal note, it's been a good three weeks for me here. Since my last day at the old job as an employee, I've taken two weeks of Flex training, a review of OO design patterns, and re-read some Hume, some Hayek and some Postrel, and started coding my new project in AS3. A lot of work, to be sure, but still not enough.&lt;br /&gt;&lt;br /&gt;(Uh, I also found out that Hume and Hayek are two of Virginia Postrel's philosophical influences. Hm. No wonder I like her work..).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(Sidenote: You can't go wrong with Hume, Hayek, Hoffer, and the occasional Plato. Trust me.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Don't fear the all nighter, or the near all-nighter.&lt;/span&gt;  Look, there are times when you have to produce. Better yet, there are times when you're on a roll and lose track of time. At some point, your eyes feel like they're made of grade-D sandpaper, your mouth feels like the cotton-harvest-boom of 1919, and your head starts to feel like it's floating a half-meter to your left.  At these times, I think to myself  "Man, it must be midnight!" and it is, of course, 4:30am.  This is a great all-nighter, or if you choose to crash at this point, near-all-nighter.&lt;br /&gt;&lt;br /&gt;However, there are times when you and your business need you to just go. Do it. Go until it's done.  There's not much for me to say here, other than there is nothing quite like the wolf at the door to hone your focus, energy and commitment into laser-like concentrations.  If it isn't.. uh, this kind of work may not be for you.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Don't forget to smell the flowers. I.e., Balance!&lt;/span&gt;  Lest you burn out and die young, here's one I didn't follow my first time around: balance!  Relax. Take time out. Don't forget to stop speeding, get out, and smell the marigolds.  It's miserably hard sometimes, at least it is for this writer, since I can go go go go go business 24/7/365.  Ask my friends.. I drive 'em nuts. Won't shut up, I won't.  So a reminder to myself is to relax.. do something else, and find some balance. How you do it is up to you.  Personally, I find that there are a couple of restaurants nearby with excellent wine selections, superb food, and very pleasant bartenders that I will visit when I need to get away, relax, and smell the merlots. And the pinots.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Be a mentor to someone&lt;/span&gt;.  I know I didn't mention this before, but it just occurred to me. At the moment, I have a fantastic mentor. I got lucky is all I can say.  And ten years ago, I was a mentor to two talented musicians who knew &lt;span style="font-style: italic;"&gt;nothing &lt;/span&gt;or next to it about computers and their use in music production. I became a mentor to them and taught them everything I knew about computer music, and computers in music production. They're now experts in their own rights, and I'm very proud of them.  They in turn were mentors to me,  and from them I learned volumes.&lt;br /&gt;&lt;br /&gt;When you teach, you also learn. Go for it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-117177525761161313?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/117177525761161313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=117177525761161313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/117177525761161313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/117177525761161313'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/02/software-dev-and-music-prod-pt-2.html' title='Software Dev and Music Prod, pt. 2'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-117130487229828906</id><published>2007-02-12T10:23:00.000-08:00</published><updated>2007-02-20T21:52:14.869-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='famous quotes'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>quotes</title><content type='html'>Two from Ludwig Mies van der Rohe:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:lucida grande;"&gt;"God is in the details."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:lucida grande;"&gt;"Architecture starts when you carefully put two bricks together. There it begins."&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;And one from Frank Lloyd Wright:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:lucida grande;"&gt;"Form follows function - that has been misunderstood. Form and function should be one,  joined in a spiritual union."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;(And on that note, &lt;a href="http://dynamist.com/tsos/index.html" target="_blank"&gt;this book comes to mind&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-117130487229828906?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/117130487229828906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=117130487229828906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/117130487229828906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/117130487229828906'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/02/quotes.html' title='quotes'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-117100343999531319</id><published>2007-02-10T03:37:00.000-08:00</published><updated>2007-02-20T21:51:55.640-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Software development lessons applied to music production, and music production lessons applied to software development, pt 1</title><content type='html'>&lt;span style="font-style: italic;"&gt;Some background.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I became a professional programmer straight out of college, coding on the IBM system/38 and AS/400 (now &lt;s&gt;iSeries&lt;/s&gt; &lt;s&gt;i5&lt;/s&gt; System i platform). In my spare time I'd code 3D animation in assembly language, teach myself C++, and later eventually HTML and all the web goodies.&lt;br /&gt;&lt;br /&gt;And, after working for someone else for a few years, I decided I &lt;span style="font-style: italic;"&gt;had&lt;/span&gt; to run my own business. There's no other way to describe the need to be self-employed other than as a &lt;span style="font-style: italic;"&gt;need&lt;/span&gt; to be self-employed. And so, I struck out on my own and started a small company that contracted programmers (including myself) to IBM midrange systems shops.&lt;br /&gt;&lt;br /&gt;Now also during this time, I &lt;span style="font-style: italic;"&gt;had&lt;/span&gt; to have music in my life. I &lt;span style="font-style: italic;"&gt;had&lt;/span&gt; to be a musician. There's no other way to explain this calling other than to say it was a &lt;span style="font-style: italic;"&gt;need&lt;/span&gt;, a &lt;span style="font-style: italic;"&gt;drive&lt;/span&gt;, and I &lt;span style="font-style: italic;"&gt;had&lt;/span&gt; to do it. Simple, no? And so... while I was coding, drumming up new clients, learning new-to-me languages, and writing .asm code for an early-90s &lt;a href="http://en.wikipedia.org/wiki/Demogroup" target="_blank"&gt;demogroup&lt;/a&gt;, I attended piano lessons and jazz ensemble classes and performed around town.&lt;br /&gt;&lt;br /&gt;My apartment was comprised of a bedroom, a kitchen, and  a stockpile of computers, technical manuals, synthesizers samplers and keyboards, many bags of coffee and a bottle of single-malt whiskey.&lt;br /&gt;&lt;br /&gt;Hey, my senior project in college for my C.S. degree was writing my own MIDI sequencer on a fat Mac in 68000 assembly! Hello? 1986 on the phone for you, line one...&lt;br /&gt;&lt;br /&gt;Music and computers.. huge in my life, and I didn't have the sense to pick one over the other.  So I did both.&lt;br /&gt;&lt;br /&gt;It was only a matter of time before I decided to start a second business, and that was music production and publishing. (It later became music licensing and sound design, and thus my first lesson of entrepreneurship: be willing to sail with the wind, and not against it).&lt;br /&gt;&lt;br /&gt;After a few years, I noticed more than a few similarities between successful software development and engineering projects and successful music production projects.  I'll share some of these observations in this article and in subsequent articles.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Choose the right people: find good people and throw out the rest.&lt;/span&gt;&lt;br /&gt;I observed many horrible ways to run projects while I was a contract programmer, and a few good ways.  You can learn a lot by watching, or being involved in, a disaster and that's exactly what I did - experienced disasters and so learned &lt;span style="font-style: italic;"&gt;a lot&lt;/span&gt;!  If you work in enough shops, you can very quickly learn what is and isn't good project management and practice.&lt;br /&gt;&lt;br /&gt;My father's first advice to me early on when I had my own project to run was "&lt;span style="font-style: italic;"&gt;Rule number one: don't mess with people&lt;/span&gt;".  Er, he used an entirely different and much more colorful word that "mess" when he said it, but you get the drift.  This brings us to the first lesson:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Find and work with the right partner(s).&lt;/span&gt;&lt;br /&gt;Lets face it - no one likes to work for an [&lt;span style="font-size:78%;"&gt;EXPLETIVE DELETED&lt;/span&gt;]. We don't always have a choice, of course, but if you can help it, avoid 'em.  This also goes for the people &lt;span style="font-style: italic;"&gt;with &lt;/span&gt;whom you work, and who work for you!  My colleagues and I have a rule, decided upon sometime after our collective 38th birthdays: "&lt;span style="font-style: italic;"&gt;No more working for/with &lt;/span&gt;[&lt;span style="font-size:78%;"&gt;EXPLETIVE DELETED&lt;/span&gt;]s&lt;span style="font-style: italic;"&gt;!&lt;/span&gt;" It may mean short-term lost income, but has not meant lost opportunities whatsoever. Another opportunity always seems to pop up.&lt;br /&gt;&lt;br /&gt;What I noticed as a contract programmer was that most of the time, the projects that failed were run by said unpleasant personalities. On very rare occasion, someone was so smart and possessed with ability that you simply figured out a way to deal with their steel-wool social skills.  A vast majority of the time, a single aberrant personality could sink a project very, very quickly.  Ditto for music production: a troll in the control room usually meant disaster, or at the very least a lot of extra time (and money) fixing Mr. Troll's damage.&lt;br /&gt;&lt;br /&gt;And in a small shop or group, or &lt;span style="font-style: italic;"&gt;godferbid &lt;/span&gt;in a startup, it's completely deadly to the project/startup.   So choose wisely. Find people who have similar values, similar goals, and are preferably smarter than you are in some areas of expertise. Avoid toxic people.. they're toxic. [DuH! -&lt;span style="font-style: italic;"&gt;ed&lt;/span&gt;]&lt;br /&gt;&lt;br /&gt;This is vitally important for a number of reasons, many of which aren't clearly tangible. Projects of any kind are incubators for stress, pressure, anxiety, doubt... do you really want to be harnessed to a complete jerk during these times? At one-in-the-morning the day before a launch or release? When nothing's working right? When you feel that all of the music or code you've just been creating &lt;span style="font-style: italic;"&gt;totally sucks&lt;/span&gt;?  And this may sound strange, but the ability to pick up the phone &amp; talk to your trusted, respected, &lt;span style="font-style: italic;"&gt;smart &lt;/span&gt;co-founder simply to hear "don't worry", or get a reiteration of the project focus, or blue-sky new ideas and/or narrow down the existing ones, or dismiss some doubts, is huge.  At least to me, it is.  And remember, you may find that you also provide the same occasional duty for him or her.&lt;br /&gt;&lt;br /&gt;This also may mean cutting certain people out of your life: the nay-sayers, the "Yes, But Did You Think About How You're Going To Do [x]" advisers, the free-advice relatives, the leeches, the coat-tailers, and so on. Anyone who's a psychological (or physical!) obstacle between you and success - dump 'em.&lt;br /&gt;&lt;br /&gt;Surround yourself with people you look up to, people you respect, people from whom &lt;span style="font-style: italic;"&gt;you' d&lt;/span&gt; like to learn! There's a thought that "&lt;span style="font-style: italic;"&gt;We become like the people with whom we relate&lt;/span&gt;", and I agree with that idea. Pick people who inspire you to be a better person, better developer, better businessperson, better musician.  Keep the group small, and make sure your personalities work well together. Respect each other, and each other's skills and abilities. The weight of a project is nearly impossible to carry alone, so finding a co-producer, co-founder or partner is in my opinion very key to success.&lt;br /&gt;&lt;br /&gt;I got lucky: I met a handful of talented, committed, brilliant musicians while we were all working with a complete lunatic.  No, really, the guy was banana-nut bug&lt;span style="font-style: italic;"&gt;$%#@&lt;/span&gt; crazy. We cut the lunatic out of our lives and decided we'd all keep each other.  We've been working together in music on and off for ten years now, and some of the best music production in independent music has sprung from our studios! Check out the works of &lt;a href="http://www.gypsysoul.com" target="_blank"&gt;Gypsy Soul&lt;/a&gt; and of &lt;a href="http://www.kevinfisher.biz/" target="_blank"&gt;Kevin Fisher&lt;/a&gt; to see what I mean. Roman Morykit of Gypsy Soul has been my producer and co-producer for years, and we work together extremely well.  We all brought different knowledge and skills to the table - for example, while I taught everyone else computer skills and new project management techniques, they taught me music-production engineering skills, new work managment skills, and so on.&lt;br /&gt;&lt;br /&gt;(I also found an excellent co-producer for the audio-effects library "Orchestrated Chaos".  The director or a short film I'd scored proved to be another excellent choice for partnership in our sound-effects-for-television-productions project)&lt;br /&gt;&lt;br /&gt;Early on, we all worked mostly from one studio, pooling our technical resources and our technical expertise, and most of what we learned is uncannily similar to agile software development.   I'll talk more in detail about these in later posts.  For you coders out there, isn't it interesting how some of these concepts overlap with "agile"practice, and some of the stuff the &lt;a href="http://gettingreal.37signals.com/" target="_blank"&gt;37signals group talk about&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;work harder than anyone else you know (which in our case was pretty easy): start early, end late. fear not the all-nighter, or the very-near-all-nighter.&lt;/li&gt;&lt;li&gt;use what ya got.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;set boundaries (to what technologies will we limit ourselves?).*&lt;/li&gt;&lt;li&gt;be eager for change, be ready for change.&lt;/li&gt;&lt;li&gt;Descartes was right. But even so, don't forget about your instincts.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;document everything.&lt;/li&gt;&lt;li&gt;don't be precious with what you've coded/recorded. Be prepared to toss it aside and move on: Hard Work doesn't always mean it's Cool or Good. And Cool doesn't guarantee it's also Valuable.**&lt;br /&gt;&lt;/li&gt;&lt;li&gt;tell nobody nuthin'. ("If you're gonna shoot, shoot. Don't talk")&lt;br /&gt;&lt;/li&gt;&lt;li&gt;work fast. quickly. fast. well, you know what I mean.&lt;/li&gt;&lt;li&gt;be flexible.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;have a general project plan - a high-level design of what you want to do. When you end up doing might be different from your plan, but we had one notebook-page per song, and one notebook-page for the entire CD.  Gypsy Soul had a stack of Cilette's lyrics to serve the same purpose, and even then they wrote some songs "on the fly" (see "be flexible").&lt;/li&gt;&lt;li&gt;take care of the people with whom you work.&lt;/li&gt;&lt;li&gt;no "ant-fucking".  Splitting hairs. At some point, finish the task and move on. You can always go back, but it's preferable to go forward.&lt;/li&gt;&lt;li&gt;fear not failure. We learn by doing things the wrong way and then deducing the correct solution. If we already know how to do something, we're not learning, we're executing (this is not a manichaen dichotomy, by the way).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;fear not execution. If you can do it, Do It.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;* &lt;span style="font-size:78%;"&gt;Too many limitations means no freedom. No limitations means no freedom. &lt;/span&gt;&lt;br /&gt;**&lt;span style="font-size:78%;"&gt;if you only knew how many songs we threw away after 18-hour sessions...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Some of the CDs made this way are here:&lt;br /&gt;&lt;div&gt;&lt;embed src="http://widget-8e.slide.com/widgets/slideticker.swf" type="application/x-shockwave-flash" quality="high" scale="noscale" salign="l" wmode="transparent" flashvars="cy=bl&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;il=1&amp;channel=72057594047514510&amp;amp;site=widget-8e.slide.com" name="flashticker" align="middle" height="100" width="400"&gt;&lt;div style="width: 400px; text-align: left;"&gt;&lt;a href="http://www.slide.com/pivot?sk=0&amp;amp;tt=0&amp;cy=bl&amp;amp;ad=1&amp;id=72057594047514510&amp;amp;map=1" target="_blank"&gt;&lt;img src="http://widget-8e.slide.com/p1/72057594047514510/bl_t000_v000_a001_f00/images/xslide1.gif" ismap="ismap" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.slide.com/pivot?sk=0&amp;amp;tt=0&amp;cy=bl&amp;amp;ad=1&amp;id=72057594047514510&amp;amp;map=2" target="_blank"&gt;&lt;img src="http://widget-8e.slide.com/p2/72057594047514510/bl_t000_v000_a001_f00/images/xslide2.gif" ismap="ismap" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-117100343999531319?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/117100343999531319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=117100343999531319' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/117100343999531319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/117100343999531319'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/02/software-development-lessons-applied.html' title='Software development lessons applied to music production, and music production lessons applied to software development, pt 1'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-117043914044808584</id><published>2007-02-02T09:57:00.002-08:00</published><updated>2007-03-09T08:26:13.432-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>Gypsy Soul Live in Cannes (reposted)</title><content type='html'>A beautiful song, great lyrics, amazing singing and some fine guitar work.&lt;br /&gt;&lt;br /&gt;&lt;embed src="http://widget.slide.com/widgets/single.swf" type="application/x-shockwave-flash" quality="high" scale="noscale" salign="l" wmode="transparent" name="flashticker" align="middle" flashvars="url=http%3A%2F%2Fwww.slide.com%2Fitem_finder%3Fcy%3Dms%26referer%3Dtheme%26pciid%3DZdSteCxMYoQUfInINP2jURWv_sq1020cuykcbrki9dtzSmtboUMKkpVNAeoIGVVl%26dir%3D0&amp;sk=13&amp;thc=-1&amp;th=0&amp;media_url=http%3A%2F%2Fwww.youtube.com%2Fv%2FfcTJncgeGTA" height="356" width="450"/&gt;&lt;div style="width:700px;text-align:left;"&gt;&lt;a href="http://www.slide.com/pivot?ad=1&amp;tt=0&amp;sk=0&amp;cy=ms&amp;th=0&amp;id=72057594200787239&amp;map=7" target="_blank"&gt;&lt;img src="http://widget-f9.slide.com/s1/72057594200787239/ms_t000_v000_a001_f00/images/xslide1.gif" border="0" ismap="ismap" /&gt;&lt;/a&gt; &lt;a href="http://www.slide.com/pivot?ad=1&amp;tt=0&amp;sk=0&amp;cy=ms&amp;th=0&amp;id=72057594200787239&amp;map=8" target="_blank"&gt;&lt;img src="http://widget-f9.slide.com/s2/72057594200787239/ms_t000_v000_a001_f00/images/xslide7.gif" border="0" ismap="ismap" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-117043914044808584?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.youtube.com/watch?v=fcTJncgeGTA' title='Gypsy Soul Live in Cannes (reposted)'/><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/117043914044808584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=117043914044808584' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/117043914044808584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/117043914044808584'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/02/gypsy-soul-live-in-cannes.html' title='Gypsy Soul Live in Cannes (reposted)'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-117034718137940311</id><published>2007-02-01T08:18:00.000-08:00</published><updated>2007-02-20T21:51:11.235-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music and sound-effects'/><title type='text'>sound design bragging and "LOST"</title><content type='html'>I won't post much about music and sound-design here because I'm spending most of my energy these days in the software engineering world.&lt;br /&gt;&lt;br /&gt;But I'll brag a little bit. &lt;br /&gt;&lt;br /&gt;Back in 2000, I and a co-producer created and assembled a library of audio effects for television use called "Orchestrated Chaos".   Included in the library is a sound called "Howl1" that eventually was used in the howling, clanking sound-effect of the "smoke monster" from ABC's show "LOST".&lt;br /&gt;&lt;br /&gt;And so, without further ado, here's the howl component of that smoke monster: &lt;a href="http://gearheadmusic.com/audio/howl1.mp3"&gt;Howl1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can download it and use it for personal, private use only. Please don't distribute it, don't sell it, don't do something to it you wouldn't want done to your own work-product. It's copyright protected and &lt;span style="font-style: italic;"&gt;etc etc etc&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;If you do like it and want more information, &lt;a href="http://www.winogradsky.com/contact.php"&gt;click here to contact The Winogradsky Company&lt;/a&gt;, who handle my entire library of music and sound.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-117034718137940311?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://gearheadmusic.com/audio/howl1.mp3' title='sound design bragging and &quot;LOST&quot;'/><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/117034718137940311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=117034718137940311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/117034718137940311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/117034718137940311'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/02/sound-design-bragging-and-lost.html' title='sound design bragging and &quot;LOST&quot;'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-117027761789816249</id><published>2007-01-31T12:55:00.000-08:00</published><updated>2007-02-20T21:50:37.849-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='general'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Re-tooling</title><content type='html'>I spent my December vacation in study: read a bunch of manuals, brushed up on my javascript, my python, played with RoR for a day or two, coded a bunch of little things in javascript learning the DOM.  It'd been a while since I'd used javascript.. a long, long while.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(And helped out a friend who needed music for his pilot. No joke.. three hours to compose and record the titles-music for his project.  Yikes.)&lt;/span&gt; &lt;a href="http://gearheadmusic.com/audio/MCN_titles.mp3"&gt;*&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now, I'm in the middle of some excellent, and fun, training in Adobe Flex.  Great stuff!&lt;br /&gt;&lt;br /&gt;I'm enjoying learning these new tools.  Not only do I believe that it is important to keep the mind sharp by learning new concepts, new techniques, and new languages but it keeps me going.. this stuff is fun.&lt;br /&gt;&lt;br /&gt;In the end, of course, they're all just tools.  Some more enjoyable to use than others, but useful only for creating solutions to problems.  For the holy-grail-description of the problems inherent in software engineering, read the famous &lt;a href="http://www-inst.eecs.berkeley.edu/%7Emaratb/readings/NoSilverBullet.html"&gt;No Silver Bullet essay&lt;/a&gt; by Frederick Brooks, Jr.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-117027761789816249?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/117027761789816249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=117027761789816249' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/117027761789816249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/117027761789816249'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/01/re-tooling.html' title='Re-tooling'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38780847.post-117026698641372839</id><published>2007-01-31T09:14:00.000-08:00</published><updated>2007-02-20T21:49:55.290-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>First!</title><content type='html'>Ah, the first post on a blank blog. So clean, so pristine...&lt;br /&gt;&lt;br /&gt;Well, not anymore.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;So,&lt;/span&gt; I'm back on my own, starting up my third company in 20 years. It's been a wild few months leaving my previous employer, and I'm glad it's over and done and I can now concentrate on this new venture!&lt;br /&gt;&lt;br /&gt;(The first two companies were an IBM iSeries consulting company, and a music licensing company. I closed the consulting operation in 2002, and the music licensing company still exists and is still raking in the nickels).&lt;br /&gt;&lt;br /&gt;So far, I've spent a little bit of money, but have "re-capitalized" my existing assets. My old laptop is now my development server and backup system. My new laptop is my development machine. My existing office will do for now, with a new printer as the old one died in a fit of grinding noises and ill-smelling smoke. &lt;a href="http://www.37signals.com/"&gt;Web-based project software&lt;/a&gt; and whatever else I can use that's clean, fast, and low-to-no-cost is the way to go.&lt;br /&gt;&lt;br /&gt;The key here is "slow-burn" of the cash resources. Aside from a new laptop, which I needed anyway, the most expensive bit has been a set of new technical manuals and guides.&lt;br /&gt;&lt;br /&gt;So far, so good.  I'll post here as things progress and I have time.&lt;br /&gt;&lt;br /&gt;And so, dear reader(s).. all 3 of you.... watch this space.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38780847-117026698641372839?l=jasonrubenstein.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonrubenstein.blogspot.com/feeds/117026698641372839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38780847&amp;postID=117026698641372839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/117026698641372839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38780847/posts/default/117026698641372839'/><link rel='alternate' type='text/html' href='http://jasonrubenstein.blogspot.com/2007/01/first_31.html' title='First!'/><author><name>Jason Rubenstein</name><uri>http://www.blogger.com/profile/09028465657976012846</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://4.bp.blogspot.com/-jBMiijpMUuo/Tlp2eKv3nXI/AAAAAAAAAIA/DUAojjXH4fg/s220/pic1.jpg'/></author><thr:total>0</thr:total></entry></feed>
