<?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-2538248514140644264</id><updated>2011-07-07T21:31:21.404-07:00</updated><category term='mashup camp'/><category term='QEDWiki'/><category term='mashups'/><category term='Javascript loops'/><title type='text'>nullcheck</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nullcheck.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nullcheck.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>n kolba</name><uri>http://www.blogger.com/profile/14720347316839818863</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_BEEWY9CwWIw/RwkLttiCi7I/AAAAAAAAA98/vILkqIoJS6o/s400/IMG_3506.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2538248514140644264.post-4504192212107107202</id><published>2008-11-20T19:55:00.000-08:00</published><updated>2008-11-20T21:17:49.412-08:00</updated><title type='text'>digital daddy</title><content type='html'>Well, it's been an embarissingly long time since my last post and all I can say is that I am sorry.  I have been swamped with life changes: moving, house construction, new dog, plus the ever present increadible amounts of work.  But, there really is no excuse, so there you have it.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway, what finally got me off my ass to make a post was a very touching evening I spent with my daughter.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's already winter here in the Catskills.  Snow has been flurrying all week, the ground is hard, the air is crisp, and at night, the stars blaze in a perfectly clear sky.  So after dinner, Lucia and I cozied up by a roaring fire and I taught her HTML.  (this was before the whole family gathered around the TV to watch the second installment of Brian Greene's "The Elegent Universe" on Nova.  Yes, I think we qualify as a nerdy family).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway, this is what she created (with my help), excerpted for blogger compatibilty:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'times new roman';"&gt;&lt;a href="http://luciastories.blogspot.com/"&gt;hello &lt;img src="http://bp2.blogger.com/_BEEWY9CwWIw/Rnq1Dpds0kI/AAAAAAAAAW8/Wv1E-KPVBYw/s400/Photo+6.jpg" /&gt;&lt;/a&gt; &lt;input id="lunick" type="text"&gt; &lt;button onclick="clickMe();"&gt;lucia&lt;/button&gt;&lt;p style="font-size: 30px; font-style: italic; color: blue; "&gt;homeschooling is the best and schools are the worst&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The blonde one is Lucia, for those who don't know us, she is 8 and dropped out of school after kindergarten.  We haven't looked back since.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The source:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'times new roman';"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="webkit-line-content"&gt;&lt;span class="webkit-html-tag"&gt;&amp;lt;html&amp;gt;&lt;/span&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt;&lt;span class="webkit-html-tag"&gt;&amp;lt;head&amp;gt;&lt;/span&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt; &lt;span class="webkit-html-tag"&gt;&amp;lt;script language&lt;/span&gt;="&lt;span class="webkit-html-attribute-value"&gt;javascript&lt;/span&gt;"&amp;gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt;  &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt;function clickMe(){&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt; var value = document.getElementById("lunick").value;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt; alert(value);&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt;};&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt; &lt;span class="webkit-html-tag"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt;&lt;span class="webkit-html-tag"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt;&lt;span class="webkit-html-tag"&gt;&amp;lt;body bgcolor&lt;/span&gt;="&lt;span class="webkit-html-attribute-value"&gt;red&lt;/span&gt;"&amp;gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt; &lt;span class="webkit-html-tag"&gt;&amp;lt;a href&lt;/span&gt;="http://luciastories.blogspot.com/"&amp;gt; hello &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt; &lt;span class="webkit-html-tag"&gt;&amp;lt;img  src&lt;/span&gt;="http://bp2.blogger.com/_BEEWY9CwWIw/Rnq1Dpds0kI/AAAAAAAAAW8/Wv1E-KPVBYw/s400/Photo+6.jpg"&amp;gt;&lt;span class="webkit-html-tag"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt; &lt;span class="webkit-html-tag"&gt;&amp;lt;input id&lt;/span&gt;="&lt;span class="webkit-html-attribute-value"&gt;lunick&lt;/span&gt;" &lt;span class="webkit-html-attribute-name"&gt;type&lt;/span&gt;="&lt;span class="webkit-html-attribute-value"&gt;text&lt;/span&gt;"&amp;gt;&lt;span class="webkit-html-tag"&gt;&amp;lt;/input&amp;gt;&lt;/span&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt; &lt;span class="webkit-html-tag"&gt;&amp;lt;button onclick&lt;/span&gt;="&lt;span class="webkit-html-attribute-value"&gt;clickMe();&lt;/span&gt;"&amp;gt;lucia&lt;span class="webkit-html-tag"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt; &lt;span class="webkit-html-tag"&gt;&amp;lt;p style&lt;/span&gt;="&lt;span class="webkit-html-attribute-value"&gt;font-size:30px;font-style:italic;color:blue;&lt;/span&gt;"&amp;gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt;  homeschooling is the best and schools are the worst&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt; &lt;span class="webkit-html-tag"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt;&lt;span class="webkit-html-tag"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="webkit-line-number"&gt;&lt;/td&gt;&lt;td class="webkit-line-content"&gt;&lt;span class="webkit-html-tag"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I started with explaining how when you go to a website, your computer calls another computer up, and that computer gives your computer a document, which the browser reads and uses as instructions to draw the page.  Those instructions may look funny at first but we can look at them and read them ourselves.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Personally, I think the above is probably &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;the&lt;/span&gt; most important thing about the web.  I certainly would never have been drawn back to computers after an awkward start with BASIC and LOGO as a child if it wasn't for View Source culture.  I had to hold back the tears as I showed Lucia how you can right click on any webpage select "View Source" and see how its put together.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Obviosuly, I am not going to keep an 8 year old's attention going with lofty waxing on the beauty of http, so I quickly moved on to tags.  I knew I would start with the &amp;lt;img/&amp;gt; tag, which has immediate gratification and introduces URLs and then move to the all important &amp;lt;a&amp;gt; tag.  From there we went to text, then forms and some simple javascript, touching on the nature of data and functions.  We then started a choose your own adventure type program, I'll let you know when its in beta.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Reflecting on this later, I realize that the most important thing for me was that Lucia really got something positive about what I do.  Since I started working from home full time in June, it has really been underscored for me just how archane and bizarre my job is to the rest of my family - and especially my daughter.  Tonight, she got to experience software as a creative act.  And it was a good reminder for me too that software development is not just answering email, writing documents, conference calls, and all matter of other things kids intuitively hate, it can be about things kids inherently love: invention, creativity, and play.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&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/2538248514140644264-4504192212107107202?l=nullcheck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nullcheck.blogspot.com/feeds/4504192212107107202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2538248514140644264&amp;postID=4504192212107107202' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/4504192212107107202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/4504192212107107202'/><link rel='alternate' type='text/html' href='http://nullcheck.blogspot.com/2008/11/digital-daddy.html' title='digital daddy'/><author><name>n kolba</name><uri>http://www.blogger.com/profile/14720347316839818863</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_BEEWY9CwWIw/RwkLttiCi7I/AAAAAAAAA98/vILkqIoJS6o/s400/IMG_3506.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_BEEWY9CwWIw/Rnq1Dpds0kI/AAAAAAAAAW8/Wv1E-KPVBYw/s72-c/Photo+6.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2538248514140644264.post-4683986599842794930</id><published>2008-03-24T14:47:00.000-07:00</published><updated>2008-03-24T15:27:29.740-07:00</updated><title type='text'>AJAX Who?</title><content type='html'>&lt;p class="MsoNormal"&gt;The AJAX World conference in &lt;st1:state st="on"&gt;New York&lt;/st1:state&gt; last week clearly marked to me that we have long driven past a turning point in &lt;st1:city st="on"&gt;&lt;st1:place st="on"&gt;AJAX&lt;/st1:place&gt;&lt;/st1:city&gt; and are somewhere on the eastside of the Gartner hype cycle curve.&lt;span style=""&gt;  &lt;/span&gt;There were many telltale signs: almost no vendors, no recruiters from Google, largely shallow presentations, and a sparse and low energy audience.&lt;span style=""&gt;  &lt;/span&gt;Poor timing (sandwiched between St Patrick’s and Easter) and economic turmoil further emphasized the message that the &lt;st1:city st="on"&gt;&lt;st1:place st="on"&gt;AJAX&lt;/st1:place&gt;&lt;/st1:city&gt; hype has passed.&lt;span style=""&gt;  &lt;/span&gt;(Jeremy Geelan however was chipper as always)&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eTQRHAzkIOM/R-gilwl0c9I/AAAAAAAAAAU/6iEnXcIj86Q/s1600-h/hype_cycle_gra416.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_eTQRHAzkIOM/R-gilwl0c9I/AAAAAAAAAAU/6iEnXcIj86Q/s320/hype_cycle_gra416.gif" alt="" id="BLOGGER_PHOTO_ID_5181429403383788498" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Yes, &lt;st1:place st="on"&gt;&lt;st1:city st="on"&gt;AJAX&lt;/st1:city&gt;&lt;/st1:place&gt; is no longer and I say good riddance. I hope the day will soon come when we can just talk about javascript and browser capabilities without having to resort to tacky buzzwords.&lt;span style=""&gt;  &lt;/span&gt;We are entering the “Post-AJAX” world, which just means that the distinction between what is &lt;st1:city st="on"&gt;&lt;st1:place st="on"&gt;AJAX&lt;/st1:place&gt;&lt;/st1:city&gt; and what is not is not worth making anymore.&lt;span style=""&gt;  &lt;/span&gt;This may be bad for people who run conventions, but it is generally good for everyone else, because quiet times are usually productive times.&lt;span style=""&gt;  &lt;/span&gt;Let’s not forget that AJAX itself was born out of the lull (i.e. recession) between 2000 and 2003, when nothing much seemed to happen because people were, well, writing a lot of really good code.&lt;span style=""&gt;   &lt;/span&gt;So, in a post-AJAX world,  we might expect to see a few key things happen:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;ol&gt;&lt;li&gt;Consolidation of &lt;st1:city st="on"&gt;AJAX&lt;/st1:city&gt; frameworks: the &lt;st1:place st="on"&gt;&lt;st1:city st="on"&gt;AJAX&lt;/st1:city&gt;&lt;/st1:place&gt; hype fueled the productization (usually as open source) of dozens of javascript frameworks (most of them in-house frameworks started sometime between 2000 and 2003), most of these will die off or merge into others in the coming year or two.&lt;span style=""&gt;  &lt;/span&gt;&lt;/li&gt;&lt;li&gt;Browser improvements: the next generation of browsers already show marked improvements.&lt;span style=""&gt;  &lt;/span&gt;These will get digested in the coming years, and at the same time, older browsers (IE 6!) will be safely flushed out of the mainstream.&lt;span style=""&gt;  &lt;/span&gt;This glacial migration of browsers is one of the key limiting factors in web innovation.&lt;/li&gt;&lt;li&gt;&lt;span style=""&gt;&lt;/span&gt;Mainstreaming in the enterprise:&lt;span style=""&gt;  &lt;/span&gt;we’ll see the results of the current general mainstreaming of things like mashups and &lt;st1:place st="on"&gt;&lt;st1:city st="on"&gt;AJAX&lt;/st1:city&gt;&lt;/st1:place&gt; into the enterprise (meaning internal corporate sites and premium corporate software). We’ll know when its actually happening because people will stop talking about it.&lt;span style=""&gt;  &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=""&gt;&lt;/span&gt;Maturation, Standardization, and Consolidation of RIAs:&lt;span style=""&gt;  &lt;/span&gt;as RIA frameworks mature, there simply wont be any rational for supporting 3+ proprietary systems.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Maturation of Mashups: significant improvements will drive the mashup ecosystem.  A lot of this will simply be filling in the gaps in available content. &lt;/li&gt;&lt;/ol&gt;&lt;p class="MsoNormal"&gt;It’s a fairly safe prediction that post-AJAX innovation will focus mainly on leveraging the resources of the "mashup ecosystem".   This is the golden promise that we have been hearing about from AJAX, and that initiatives such as SMash (from OpenAjax Alliance), and Douglass Crockford's various proposals are trying to address.  Not all of the pieces of the puzzle are in place yet for the browser-based mashup to become the killer application it is hyped to be, but just as DHTML needed a few years of quite for the pieces to come together into AJAX, Mashups may need the same here and now.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2538248514140644264-4683986599842794930?l=nullcheck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nullcheck.blogspot.com/feeds/4683986599842794930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2538248514140644264&amp;postID=4683986599842794930' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/4683986599842794930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/4683986599842794930'/><link rel='alternate' type='text/html' href='http://nullcheck.blogspot.com/2008/03/ajax-who.html' title='AJAX Who?'/><author><name>n kolba</name><uri>http://www.blogger.com/profile/14720347316839818863</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_BEEWY9CwWIw/RwkLttiCi7I/AAAAAAAAA98/vILkqIoJS6o/s400/IMG_3506.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_eTQRHAzkIOM/R-gilwl0c9I/AAAAAAAAAAU/6iEnXcIj86Q/s72-c/hype_cycle_gra416.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2538248514140644264.post-9149017639496831933</id><published>2008-02-23T07:27:00.000-08:00</published><updated>2008-02-23T07:45:59.247-08:00</updated><title type='text'>obsolete skills</title><content type='html'>I came across this Wiki of obsolete skills on SlashDot: &lt;a href="http://obsoleteskills.com/"&gt;http://obsoleteskills.com&lt;/a&gt;.  It is a pretty diverse list, including Assembly Language programming and darning socks for example.&lt;br /&gt;&lt;br /&gt;I seem to have a pretty healthy helping of these skills, and some of them make me feel pretty darn &lt;a href="http://obsoleteskills.com/Skills/BlowingTheDustOutOfANintendoCartridge"&gt;old&lt;/a&gt;.  Blowing the dust out of a Nintendo Cartridge?  I may not have any experience in that, but I sure know how to blow the dust out of a &lt;a href="http://en.wikipedia.org/wiki/Colecovision"&gt;Colecovision&lt;/a&gt; cartridge.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://en.wikipedia.org/wiki/Image:ColecoVision.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/37/ColecoVision.jpg/300px-ColecoVision.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;(yes, and seeing the &lt;span style="font-style: italic;"&gt;Ladybug&lt;/span&gt; cartridge at the ready like that brings a pang to my heart)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I am such a dinosaur that I also know how to change vacuum tubes (and I question that being obsolete.  To paraphrase Steve Albini: when it comes to music, give me Analog or give me Death!) and the ribbon on a Selectric typewriter, clean VCR heads, adjust vertical and horizontal hold, use an old-style cable box to hack into the Playboy channel, and a whole slew of other undoubtedly outmoded technical skills.  Hell, I can even play 36 versions of Pong and Hockey.  There's something to put on a resume right next to "can use the Card Catalogue"  (sorry kids, you'll have to Google that one).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2538248514140644264-9149017639496831933?l=nullcheck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nullcheck.blogspot.com/feeds/9149017639496831933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2538248514140644264&amp;postID=9149017639496831933' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/9149017639496831933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/9149017639496831933'/><link rel='alternate' type='text/html' href='http://nullcheck.blogspot.com/2008/02/obsolete-skills.html' title='obsolete skills'/><author><name>n kolba</name><uri>http://www.blogger.com/profile/14720347316839818863</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_BEEWY9CwWIw/RwkLttiCi7I/AAAAAAAAA98/vILkqIoJS6o/s400/IMG_3506.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2538248514140644264.post-5647270576610066856</id><published>2008-02-02T09:45:00.000-08:00</published><updated>2008-02-02T10:06:51.930-08:00</updated><title type='text'>RIAs vs AJAX</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eTQRHAzkIOM/R6Ss2bhPVbI/AAAAAAAAAAM/O99LUcCScVk/s1600-h/ria.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_eTQRHAzkIOM/R6Ss2bhPVbI/AAAAAAAAAAM/O99LUcCScVk/s320/ria.jpg" alt="" id="BLOGGER_PHOTO_ID_5162441123973518770" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;p style="text-align: center;" class="MsoNormal"&gt;&lt;span style="font-size:78%;"&gt;   &lt;/span&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;*Excerpted from a recent email for AJAX World conference&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;There is currently a lot of hype about a supposed battle between RIAs and &lt;st1:place st="on"&gt;&lt;st1:city st="on"&gt;AJAX&lt;/st1:city&gt;&lt;/st1:place&gt;.  In my humble opinion, the whole business is greatly misconstrued.  Here is what I think are some of the misconceptions:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt; &lt;span style="font-weight: bold;"&gt;That there is such a thing as "&lt;/span&gt;&lt;st1:city style="font-weight: bold;" st="on"&gt;&lt;st1:place st="on"&gt;AJAX&lt;/st1:place&gt;&lt;/st1:city&gt;&lt;span style="font-weight: bold;"&gt;".  &lt;/span&gt;&lt;st1:city st="on"&gt;&lt;st1:place st="on"&gt;AJAX&lt;/st1:place&gt;&lt;/st1:city&gt;, is a made up term that was created to sell people on DHTML, which was a made up term to sell people on what you can do in the browser using just HTML and javascript.&lt;span style=""&gt;  &lt;/span&gt;So, “&lt;st1:place st="on"&gt;&lt;st1:city st="on"&gt;AJAX&lt;/st1:city&gt;&lt;/st1:place&gt;” is not a platform, a RIA, or a new technology.&lt;span style=""&gt;  &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;That RIAs are anything new. &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;RIA might as well be named “Reactionary Internet Applications”.&lt;span style=""&gt;   &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;No paradigm shift has been introduced.  They represent a qualitative improvement over Applet and ActiveX control solutions of past years.&lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;(Likewise, Adobe AIR and WPF are qualitative improvements on traditional desktop installs.)&lt;/li&gt;&lt;li&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;That there is a choice to be made between &lt;/span&gt;&lt;st1:place style="font-weight: bold;" st="on"&gt;&lt;st1:city st="on"&gt;AJAX&lt;/st1:city&gt;&lt;/st1:place&gt;&lt;span style="font-weight: bold;"&gt; and RIA.&lt;/span&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt; &lt;/span&gt;Just about any RIA will be embedded in an HTML page that uses javascript to communicate with it.&lt;span style=""&gt;  &lt;/span&gt;Some RIAs will even make use of HTML and javascript as content (a selling point of Adobe AIR), so the only question is whether to use an RIA or not for a particular problem.&lt;span style=""&gt;  &lt;/span&gt;If you are working on a web application, you are using HTML and javascript.&lt;span style=""&gt;  &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;That RIAs are going to rise up and squash “&lt;/span&gt;&lt;st1:city style="font-weight: bold;" st="on"&gt;&lt;st1:place st="on"&gt;AJAX&lt;/st1:place&gt;&lt;/st1:city&gt;&lt;span style="font-weight: bold;"&gt;”.&lt;/span&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt; &lt;/span&gt;This would mean that RIAs would render browser based applications obsolete as anything other then a launching pad for RIA content.  The ramifications would be (among other things):&lt;ul&gt;&lt;li&gt;Literally hundreds of millions of web pages of content would have to be transformed into RIA content&lt;/li&gt;&lt;li&gt; The cost of creating content on the web would, for the first time ever, go up rather then down, as the means of creating content became locked behind proprietary systems with much higher learning curves then HTML and javascript. &lt;/li&gt;&lt;/ul&gt;    Besides all of that, there is also the simple fact that the browser has historically evolved to fill     the gaps that RIA solutions provide, and it will continue to do so.&lt;span style=""&gt;  &lt;/span&gt;Basically, anything that RIAs     are doing exclusively today, will be in the native browser domain some point in the future, and     that future is often closer then you think.&lt;span style=""&gt;  &lt;/span&gt;For example, look at the dojo charting and vector         graphics packages.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;That the debate is at all related to innovation in Web Software.&lt;/span&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt;  &lt;/span&gt; &lt;/span&gt;I can’t think of any real paradigm shift in web development that has hinged on a distinction between using Flash or Silverlight or JavaFX vs Javascript, while many of the innovations in the past 8 years have been related to the openness and document structure of browser-based development.&lt;span style=""&gt;  &lt;/span&gt;Google maps wouldn’t have been much different if it had used Flash (as Yahoo maps in fact does) to do the map drawing.&lt;span style=""&gt;  &lt;/span&gt;What is important to note about the Maps and subsequent Mashup explosion that came out of that, was that it was achieved by exposing aJavascript API that was scriptable in the browser.&lt;span style=""&gt;  &lt;/span&gt;The mapping component could be Flash, Silverlight, or anything else, but the way you talk to it is with javascript and where it lives is in the DOM.&lt;span style=""&gt;  &lt;/span&gt;Likewise, it is hard to imagine document and hyperlink based collaboration patterns such as Wikis and Blogs emerging in a world that is completely dominated by RIAs.&lt;/li&gt;&lt;li&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;That the limitations of browser based applications are a bad thing.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;  &lt;/span&gt;Limitations have a lot of benefits.&lt;span style=""&gt;  &lt;/span&gt;Most software is overbuilt by a wide margin which increases cost, stifles innovation, and frustrates end-users.&lt;span style=""&gt;  &lt;/span&gt;Web applications have been so successful at delivering inexpensive software because of the limitations of the browser rather then in spite of them.&lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;Google has proved over and over again that people want simple and clear interfaces without a lot of moving parts, yet the writing on the wall is ignored over and over again.&lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;                  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;So there you have it.&lt;span style=""&gt;  &lt;/span&gt;Please, feel free to use Flash, Flex, Air, Silverlight, JavaFX, or even Applets or ActiveX wherever you find it needed, but please, lets stop debating RIA vs Browser-based HTML and javascript as if it were an apples-to-apples comparison. &lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2538248514140644264-5647270576610066856?l=nullcheck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nullcheck.blogspot.com/feeds/5647270576610066856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2538248514140644264&amp;postID=5647270576610066856' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/5647270576610066856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/5647270576610066856'/><link rel='alternate' type='text/html' href='http://nullcheck.blogspot.com/2008/02/rias-vs-ajax.html' title='RIAs vs AJAX'/><author><name>n kolba</name><uri>http://www.blogger.com/profile/14720347316839818863</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_BEEWY9CwWIw/RwkLttiCi7I/AAAAAAAAA98/vILkqIoJS6o/s400/IMG_3506.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_eTQRHAzkIOM/R6Ss2bhPVbI/AAAAAAAAAAM/O99LUcCScVk/s72-c/ria.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2538248514140644264.post-2490604518711038787</id><published>2007-12-20T01:39:00.000-08:00</published><updated>2007-12-20T03:56:07.732-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript loops'/><title type='text'>Decrementing vs Incrementing</title><content type='html'>A while back, I had read some things about how decrementing loops in javascript were faster then incrementing, especially in IE.  (see &lt;a href="http://www.moddular.org/log/javascript-loops"&gt;http://www.moddular.org/log/javascript-loops&lt;/a&gt;)  The main point being that it is faster to compare to 0 then any other number.  As a result, I had implemented some decrementing loops in my own code (loop unrolling seemed too heavy handed) but haven't been too compelled to make a habit of it.  Today I decided to investigate this again, since I had some lingering doubts about if any of this made a difference at all...   So, here it is.&lt;br /&gt;&lt;br /&gt;My test code consists of the following:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;var limit = 1000000;&lt;br /&gt;function testi(){&lt;br /&gt;var n = 0;&lt;br /&gt;for (var i = 0; i &lt; n =" i;" n =" 0;" i =" limit;"&gt; 0; i--)&lt;br /&gt;n = i;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;time1 = new Date().valueOf();&lt;br /&gt;testi();&lt;br /&gt;time2 = new Date().valueOf();&lt;br /&gt;document.write("time incrementing (" + limit + " times) = " + (time2 - time1) + "&lt;br /&gt;");&lt;br /&gt;&lt;br /&gt;time1 = new Date().valueOf();&lt;br /&gt;testd();&lt;br /&gt;time2 = new Date().valueOf();&lt;br /&gt;document.write("time decrementing (" + limit + " times) = " + (time2 - time1) + "&lt;br /&gt;");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;Fairly straight forward.  I can change the limit value and check to see what the differences are for different size loops.  I compared in Firefox 2 and IE 7.  And I found the following.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;At a million loops in FF and IE, decrementing is usually twice as fast as incrementing (~220ms vs ~440ms).  But how important is a 200ms baseline difference when you are doing a loop a million times?  Presumably, whatever you are doing inside of that loop will most likely eclipse the difference.*&lt;/li&gt;&lt;li&gt;If we decrease the loop to 100,000, the difference in IE becomes ~20ms decrementing vs ~40ms incrementing.  And Firefox, surprisingly, shows the same results.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;At 10,000 loops, Firefox wavers between 0 and 10 ms for either incrementing or decrementing.  As does IE.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;At 1,000 loops, we are in 0ms land for both IE and FF.&lt;/li&gt;&lt;/ol&gt;So, we see that at a million, decrementing saves us some time -- especially in IE.  When we drop down to 100,000, the differences between the browsers disappear, and while decrementing seems to be twice as fast, the ~20 ms difference is tiny in the grand scheme of things.  At 10,000, the differences incrementing and decrementing in both browsers disappears entirely.&lt;br /&gt;&lt;br /&gt;One problem with decrementing loops I have found is that they don't &lt;span style="font-style: italic;"&gt;behave&lt;/span&gt; the same as incrementing loops.  If you are looping through an array, you end up going through it backwards.  This is sometimes a problem, if for example you are executing a string of functions stored in an array, and you want to ensure that the first one in is executed first.  A simple way to fix this, is to find the index by subtracting your decrementing index from your limit.  But does putting this simple bit of math into the loop corrodes any performance gains we made by decrementing in the first place?  To find out, I substituted the &lt;span style="font-style: italic;"&gt;n = i;&lt;/span&gt; assignment in the decrementing loop function with a &lt;span style="font-style: italic;"&gt;n = limit - i;&lt;/span&gt; assignment.  I found that:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;In Firefox (at 1 million loops), the cost of decrementing rose to ~550ms vs ~440ms for incrementing.  Erasing any gains and adding cost.  In IE, the time for decrementing increased beyond the time for incrementing.&lt;/li&gt;&lt;li&gt;Below 1 million loops, decrementing lost all of its advantage (at best being equal) when the compensating math was implemented.&lt;/li&gt;&lt;/ol&gt;In conclusion, it seems that decrementing loops are more efficient, but only when the loops are extremely large.  This advantage pales next to whatever else you might be doing in an extremely large loop.  Above all, decrementing is counter-intuitive and requires compensating math when used with loops that are order dependent (or might be order dependent), and this compensation nullifies any gains that decrementing gives in the first place.  As with many optimization tricks, it seems that the cure is worse then the symptom.&lt;br /&gt;&lt;br /&gt;*&lt;span style=";font-family:courier new;font-size:85%;"  &gt;Strangely, in Internet Explorer only, if I reverse the order of the loops and execute the decrementing function first (at a million loops), decrementing takes ~210ms and incrementing takes anywhere from 900 to over 2000 ms.  This is a big difference, and I haven't been able to figure out the source of the disparity.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2538248514140644264-2490604518711038787?l=nullcheck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nullcheck.blogspot.com/feeds/2490604518711038787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2538248514140644264&amp;postID=2490604518711038787' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/2490604518711038787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/2490604518711038787'/><link rel='alternate' type='text/html' href='http://nullcheck.blogspot.com/2007/12/decrementing-vs-incrementing.html' title='Decrementing vs Incrementing'/><author><name>n kolba</name><uri>http://www.blogger.com/profile/14720347316839818863</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_BEEWY9CwWIw/RwkLttiCi7I/AAAAAAAAA98/vILkqIoJS6o/s400/IMG_3506.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2538248514140644264.post-4882634724728164258</id><published>2007-12-19T05:03:00.000-08:00</published><updated>2007-12-19T05:53:47.099-08:00</updated><title type='text'>Always Eat Alone (sometimes)</title><content type='html'>A friend of mine recently read the book &lt;span style="font-style: italic;"&gt;Never Eat Alone&lt;/span&gt;, and since he's been singing the praises of networking.   Yes, networking is important.&lt;br /&gt;&lt;br /&gt;I have always seen the value in networking, but I get a little cranky when networking gets all of the attention at the expense of well... being alone.  Being alone is &lt;span style="font-style: italic;"&gt;really&lt;/span&gt; important. &lt;br /&gt;&lt;br /&gt;I recall a networking buff extolling the virtues of practicing small talk at every possible opportunity, like when your in a cab.  When I'm alone in a cab with a non-talkative driver, I see it as an opportunity to think and reflect.  Maybe I am just a misanthrope, but I actually like, and require, time alone with my thoughts.&lt;br /&gt;&lt;br /&gt;Since I began working in France, one of the customs that has stuck out is lunch.  In the office I work in, everybody takes about a full hour for lunch, and almost always in a group.  In my office in New York, it is normal to eat alone at your computer in about 10 minutes, eating socially is the exception for most. &lt;br /&gt;&lt;br /&gt;Part of the difference is due to the fact that in France, lunch is generally the main meal of the day -- so having a sandwich for lunch would be like having a sandwich for dinner in the US.  Another reason, is that in France, eating is considered a social activity and not just an unfortunate biological function.  I have to say that, in general, I am much more partial to the French attitude then the American. &lt;br /&gt;&lt;br /&gt;However, I still do miss eating alone sometimes.&lt;br /&gt;&lt;br /&gt;Anybody who does creative work (which I count software development as),  must find a balance between being alone and being social.  We need time alone to think and to create, and we need time with people to communicate ideas, share our work, and get a break from being alone.   Going between the two requires a shift in gears that can take time.   So, taking an hour break for a social lunch, can easily add up to an hour for lunch plus an hour afterwards getting back into the mindset you were in before lunch.  &lt;br /&gt;&lt;br /&gt;So, when you eat alone, you are free to work on the problem you failed to solve before lunch, to catch up on your reading, to think about something entirely different, and you can preserve your mindset.  Consider of this the next time you feel a pang of shame as you hunker down in front of your computer with a sandwich.  Don't let the networking people guilt you into going out for lunch everyday.  You have nothing to be ashamed of (as long as you keep the mustard off of the keyboard).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2538248514140644264-4882634724728164258?l=nullcheck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nullcheck.blogspot.com/feeds/4882634724728164258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2538248514140644264&amp;postID=4882634724728164258' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/4882634724728164258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/4882634724728164258'/><link rel='alternate' type='text/html' href='http://nullcheck.blogspot.com/2007/12/always-eat-alone-sometimes.html' title='Always Eat Alone (sometimes)'/><author><name>n kolba</name><uri>http://www.blogger.com/profile/14720347316839818863</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_BEEWY9CwWIw/RwkLttiCi7I/AAAAAAAAA98/vILkqIoJS6o/s400/IMG_3506.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2538248514140644264.post-7624999771408615381</id><published>2007-12-19T03:54:00.000-08:00</published><updated>2007-12-19T05:03:40.491-08:00</updated><title type='text'>Questions for Review</title><content type='html'>As the end of the year draws near, it is review time at my company again.  Here are some questions that I wish appeared on the review (oh well, they are good for my own personal reflection anyway):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;What risks have you taken this year?&lt;/li&gt;&lt;li&gt;How much code have you eliminated?&lt;/li&gt;&lt;li&gt;What tasks have you eliminated?&lt;/li&gt;&lt;li&gt;How many people have you pissed off and why?&lt;/li&gt;&lt;li&gt;How many projects did you start up that failed? (if you have a lot of failed start ups, thats a good thing)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Who did you meet this year?&lt;/li&gt;&lt;li&gt;How many design documents did you write?&lt;/li&gt;&lt;li&gt;What new hobbies/interests that have nothing to do with your job do you have?&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2538248514140644264-7624999771408615381?l=nullcheck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nullcheck.blogspot.com/feeds/7624999771408615381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2538248514140644264&amp;postID=7624999771408615381' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/7624999771408615381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/7624999771408615381'/><link rel='alternate' type='text/html' href='http://nullcheck.blogspot.com/2007/12/questions-for-review.html' title='Questions for Review'/><author><name>n kolba</name><uri>http://www.blogger.com/profile/14720347316839818863</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_BEEWY9CwWIw/RwkLttiCi7I/AAAAAAAAA98/vILkqIoJS6o/s400/IMG_3506.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2538248514140644264.post-3576029381216807796</id><published>2007-12-17T06:56:00.000-08:00</published><updated>2007-12-17T07:25:11.877-08:00</updated><title type='text'>The Led Zeppelin Principles of Innovation</title><content type='html'>&lt;img src="http://upload.wikimedia.org/wikipedia/en/0/05/LedZeppelinLedZeppelinalbumcover.jpg" align="right" /&gt;&lt;p class="MsoNormal"&gt;The recent Zeppelin reunion and a book on innovation (&lt;span style="font-style: italic;"&gt;Weird Ideas That Work&lt;/span&gt; by Robert I. Sutton) I have been reading have given me the opportunity to reflect on the particularly innovative qualities of the band. &lt;/p&gt;    &lt;p class="MsoNormal"&gt;Whether you think Zeppelin rocked or sucked, there is no denying the innovative success of the band.&lt;span style=""&gt;  &lt;/span&gt;No, they didn’t innovate the way jazz musicians innovate, but they were probably the most disruptive force to hit popular music in the roughly 25 years between the age of Elvis and the era or The Sugar Hill Gang and The Sex Pistols.&lt;span style=""&gt;  &lt;/span&gt;Led Zeppelin was not only hugely commercially successful, but they created an entirely new category of music that to this day bears their mark clearly.&lt;span style=""&gt;  &lt;/span&gt;How did they do it? &lt;span style=""&gt; &lt;/span&gt;Here are some lessons I think we can learn from Zeppelin about innovation:&lt;/p&gt;    &lt;ol style="margin-top: 0in; font-weight: bold;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;Be      proud of other people’s rejection.&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;The story goes that the name “Led Zeppelin” came from an insult thrown at Jimmy Page: that his new band would go over like a “lead balloon”. &lt;span style=""&gt; &lt;/span&gt;Who names their band “Led Zeppelin” (in 1968)?&lt;span style=""&gt;  &lt;/span&gt;Who names a company “Google” or “Yahoo!”?&lt;span style=""&gt;  &lt;/span&gt;If people think your idea is going to fail, great.&lt;span style=""&gt;  &lt;/span&gt;That’s less competition for you. &lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;If you are doing something innovative, don’t call it something traditional to try to make it palatable to the main stream, put your differences front and center.&lt;span style=""&gt;  &lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in; font-weight: bold;" start="2" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;If you      are doing something that seems ridiculous and makes you uncomfortable,      then you might be doing something right.&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;Jimmy Page actually wanted Rod Stewart for the singer in his new band, but Jeff Beck got him instead.&lt;span style=""&gt;  &lt;/span&gt;The legend is that Robert Plant’s over the top vocal and stage persona bothered Page so much at the beginning that he was ready to fire him after their first tour.&lt;span style=""&gt;  &lt;/span&gt;What 26 year old seasoned musician wants to be on stage with an 18 year preening hippy doing a bizarre James Brown impersonation?&lt;span style=""&gt;  &lt;/span&gt;In the end though, it is the un-self-conscious audacity of Zeppelin that made it so different from the myriad of other British bands imitating black American blues.&lt;/p&gt;  &lt;ol style="margin-top: 0in; font-weight: bold;" start="3" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;Forget      about tradition and following the proper path.&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;Led Zeppelin basically hacked traditional blues songs and called them their own.&lt;span style=""&gt;  &lt;/span&gt;While this practice has many ethical issues, there is a lot to be admired in their lack of timidity in appropriating what they liked, and they weren’t overly concerned with following the established traditions of appropriation (i.e. performing traditionals as “traditionals”).&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;Jimmy Page, Jeff Beck, and Eric Clapton all came out of the Yardbirds, a British blues/garage rock band.&lt;span style=""&gt;  &lt;/span&gt;Beck and Clapton continued on the trajectories set in the Yardbirds, refining traditional blues motifs and conservatively synthesizing them with rock.&lt;span style=""&gt;  &lt;/span&gt;Page violated those traditions by stealing riffs and putting them in non-traditional contexts.&lt;span style=""&gt;  &lt;/span&gt;For traditionalists, the original context is sacrosanct.&lt;span style=""&gt;  &lt;/span&gt;If you are going to play the blues, you have to play it like a bluesman from &lt;st1:state st="on"&gt;&lt;st1:place st="on"&gt;Mississippi&lt;/st1:place&gt;&lt;/st1:state&gt;, not like a Viking.&lt;span style=""&gt;  &lt;/span&gt;So, while Eric Clapton aspires to play “Crossroads” in as close an homage to Robert Johnson as possible (with some incremental changes), Jimmy Page took a Muddy Waters riff and turned into “A Whole Lotta Love”,&lt;span style=""&gt;  &lt;/span&gt;the first Heavy Metal anthem of all time.&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;*&lt;span style="font-weight: bold;"&gt;Disclaimer:&lt;/span&gt; everything above on Led Zeppelin was taken from memory, from my many readings of Hammer of the Gods during the 8th grade.  All of you devotees out there,  please excuse any minor factual inaccuracies.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2538248514140644264-3576029381216807796?l=nullcheck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nullcheck.blogspot.com/feeds/3576029381216807796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2538248514140644264&amp;postID=3576029381216807796' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/3576029381216807796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/3576029381216807796'/><link rel='alternate' type='text/html' href='http://nullcheck.blogspot.com/2007/12/led-zeppelin-principles-for-innovation.html' title='The Led Zeppelin Principles of Innovation'/><author><name>n kolba</name><uri>http://www.blogger.com/profile/14720347316839818863</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_BEEWY9CwWIw/RwkLttiCi7I/AAAAAAAAA98/vILkqIoJS6o/s400/IMG_3506.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2538248514140644264.post-6083451596935009147</id><published>2007-12-03T17:12:00.000-08:00</published><updated>2007-12-03T17:21:47.863-08:00</updated><title type='text'>Display is Data</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Traditionally, the judgment has been that HTML is entirely about display, is generally throw away, and at best is for graphic designers to lovingly handcraft into skillful and brittle, baroque shapes.&lt;span style=""&gt;  &lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;Or to put it more bluntly: “HTML is the crap the server has to spit out and we don’t care what it is, just as long as it makes the browser do what the spec says.”&lt;/p&gt;    &lt;p class="MsoNormal"&gt;But what about a world where HTML is data returned from web services, display is the domain of CSS only, and javascript runs on the margins of the page and is not embedded into the HTML?&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-weight: bold;"&gt;For example:&lt;/span&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Say you need to build a page that is going to display a table of data.&lt;span style=""&gt;  &lt;/span&gt;Let’s say it’s a table of charges on an account that includes name, amount, and date.&lt;span style=""&gt;  &lt;/span&gt;In standard web development practice, this page would be given to a graphic designer and then to a developer who will plug data into the designer’s display, and you might end up with something like this:&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;blockquote&gt;  &lt;p class="MsoNormal"&gt;&amp;lt;table class=”dataTable”&amp;gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;/span&gt;    &amp;lt;tr&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;                        &lt;/span&gt;&amp;lt;td class=”tableHeaderLeftSelected”&gt;Name&amp;lt;/td&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;                        &lt;/span&gt;&amp;lt;td class=”tableHeader”&gt;Amount&amp;lt;/td&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;                        &lt;/span&gt;&amp;lt;td class=”tableHeaderRight”&gt;Date&amp;lt;/td&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;&amp;lt;/tr&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;&amp;lt;tr&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;                        &lt;/span&gt;&amp;lt;td class=”tableDataLeft”&gt;&amp;lt;span class=”bold”&gt;Bob Smith&amp;lt;/span&gt;&amp;lt;/td&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;                        &lt;/span&gt;&amp;lt;td class=”tableData”&gt;57.50&amp;lt;/td&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;                        &lt;/span&gt;&amp;lt;td class=”tableDataRight”&gt;&amp;lt;span class=”highlight”&gt;December 1&lt;sup&gt;st&lt;/sup&gt;, 2007&amp;lt;/span&gt;&amp;lt;/td&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;&amp;lt;/tr&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&amp;lt;/table&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;p class="MsoNormal"&gt;The above example was driven by the following requirements:&lt;/p&gt;  &lt;ol&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt; &lt;/span&gt;&lt;/span&gt;the first column had to be left aligned&lt;/li&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;the last column needs to be right aligned&lt;/li&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;/span&gt;all other columns need to be center aligned&lt;/li&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;dates need to be highlighted&lt;/li&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;names need to be bold&lt;/li&gt;&lt;/ol&gt;              &lt;p class="MsoNormal"&gt;What’s so bad about this?&lt;span style=""&gt;  &lt;/span&gt;Nothing is terrible, and in fact, this is a big improvement over a lot of markup I have seen (no inline styles and relatively clear class names), but there are a number of ways this could be improved:&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;ol&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&lt;/span&gt;&lt;/span&gt;use the HTML structure as data (hence the “Cascading” in CSS)&lt;/li&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;break up the classes into semantic tags&lt;/li&gt;&lt;li&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;/span&gt;tag data, not styles&lt;/li&gt;&lt;/ol&gt;            &lt;p class="MsoNormal"&gt;here is the transformed HTML:&lt;o:p&gt; &lt;/o:p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p class="MsoNormal"&gt;&amp;lt;table class=”data accounts”&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;&amp;lt;tr&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;                        &lt;/span&gt;&amp;lt;td class=”header first selected”&gt;Name&amp;lt;/td&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;                        &lt;/span&gt;&amp;lt;td class=”header”&gt;Amount&amp;lt;/td&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;                        &lt;/span&gt;&amp;lt;td class=”header last”&gt;Date&amp;lt;/td&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;&amp;lt;/tr&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;&amp;lt;tr&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;                        &lt;/span&gt;&amp;lt;td class=”data first name”&gt; Bob Smith&amp;lt;/td&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;                        &lt;/span&gt;&amp;lt;td class=”data currency dollars”&gt;57.50&amp;lt;/td&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;                        &lt;/span&gt;&amp;lt;td class=”data last date”&gt; December 1&lt;sup&gt;st&lt;/sup&gt;, 2007&amp;lt;/td&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;&amp;lt;/tr&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&amp;lt;/table&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;/blockquote&gt;    &lt;p class="MsoNormal"&gt;This not only lets you build cleaner CSS, but also allows you to load the markup with of latent capabilities (for example, lets say months down the road, you want to make all ‘dollar’ data green, you just need to make one change in the CSS), and provides clean hooks for plugging in functionality to this HTML using javascript without actually putting any code inline. This has a lot of advantages in browser mashups where the content of a page is built on the fly and we want to defer the definition of most behviors to the controlling page. &lt;span style=""&gt; &lt;/span&gt;For example, if the above HTML were returned as the result of an &lt;st1:city st="on"&gt;&lt;st1:place st="on"&gt;AJAX&lt;/st1:place&gt;&lt;/st1:City&gt; request, a querying utility such as dojo,query could be used to pick out the headers and attach event handlers to control sorting in a way appropriate to the particular page:&lt;br /&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;var headersArray =&lt;span style=""&gt;  &lt;/span&gt;dojo.query(“.header”);&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;for (var i = 0;&lt;span style=""&gt;  &lt;/span&gt;i &lt; headersArray.length; i++) {&lt;br /&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;    //attach event handler to each header&lt;br /&gt;&lt;o:p&gt;                 }&lt;br /&gt;&lt;/o:p&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;Of course, HTML is not an alternative to XML or other pure data formats, but it can provide a useful middle ground in many content syndication scenarios. &lt;span style=""&gt; &lt;/span&gt;And overall, data is a good paradigm to start with when implementing HTML. &lt;span style=""&gt; &lt;/span&gt;The W3C sums this up well in &lt;a href="http://www.w3.org/TR/2007/WD-html-design-principles-20071126/"&gt;the Working Draft for HTML 5&lt;/a&gt;:&lt;br /&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p class="MsoNormal"&gt;HTML should allow separation of content and presentation. For this reason, markup that expresses structure is usually preferred to purely presentational markup. However, structural markup is a means to an end such as media independence. Profound and detailed semantic encoding is not necessary if the end can be reached otherwise. Defining reasonable default presentation for different media may be sufficient. HTML strikes a balance between semantic expressiveness and practical usefulness&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/2538248514140644264-6083451596935009147?l=nullcheck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nullcheck.blogspot.com/feeds/6083451596935009147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2538248514140644264&amp;postID=6083451596935009147' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/6083451596935009147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/6083451596935009147'/><link rel='alternate' type='text/html' href='http://nullcheck.blogspot.com/2007/12/display-is-data.html' title='Display is Data'/><author><name>n kolba</name><uri>http://www.blogger.com/profile/14720347316839818863</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_BEEWY9CwWIw/RwkLttiCi7I/AAAAAAAAA98/vILkqIoJS6o/s400/IMG_3506.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2538248514140644264.post-4171827290077985169</id><published>2007-11-14T06:36:00.000-08:00</published><updated>2007-11-14T06:38:44.738-08:00</updated><title type='text'>smells like teen spirit</title><content type='html'>I googled "kolba mashup" to see if my blog would come up. &lt;br /&gt;&lt;br /&gt;It didn't.&lt;br /&gt;&lt;br /&gt;But I got this gem as a consolation prize.  Wow.  We didn't have pep rallies like this in my high school. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.tubarati.com/video/uvYl7-aR3Kw/Mini-playback-show-in-Kolba-City-CZARNO-CZARNI--NOGI-:PP"&gt;http://www.tubarati.com/video/uvYl7-aR3Kw/Mini-playback-show-in-Kolba-City-CZARNO-CZARNI--NOGI-:PP&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I think my next vacation has to be to "kolba city".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2538248514140644264-4171827290077985169?l=nullcheck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nullcheck.blogspot.com/feeds/4171827290077985169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2538248514140644264&amp;postID=4171827290077985169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/4171827290077985169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/4171827290077985169'/><link rel='alternate' type='text/html' href='http://nullcheck.blogspot.com/2007/11/smells-like-teen-spirit.html' title='smells like teen spirit'/><author><name>n kolba</name><uri>http://www.blogger.com/profile/14720347316839818863</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_BEEWY9CwWIw/RwkLttiCi7I/AAAAAAAAA98/vILkqIoJS6o/s400/IMG_3506.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2538248514140644264.post-2606120156427810853</id><published>2007-11-12T13:19:00.000-08:00</published><updated>2007-11-13T01:36:14.470-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mashups'/><category scheme='http://www.blogger.com/atom/ns#' term='mashup camp'/><category scheme='http://www.blogger.com/atom/ns#' term='QEDWiki'/><title type='text'>end of mashup camp</title><content type='html'>Today was the last day of Mashup Camp in Dublin.  Here is a quick summary of days 2 &amp;amp; 3 (from my perspective):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Day 2&lt;/span&gt;&lt;br /&gt;The first half of the day was given to more presentations as part of "Mashup University".  Although, many of the presentations are interesting (and some are very interesting) they start to drag a bit after a full day of presentations yesterday.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mashup, SOA or RIA?&lt;/span&gt;&lt;br /&gt;Martha Rotter from Microsoft kicked off the day with another go at some of her material that had been a casualty of the wireless network the previous day.  We saw some more demos of mashups using Silverlight with more of an emphasis on social networking functionality.   Martha also touched on &lt;a href="http://codeplex.com/"&gt;codeplex.com&lt;/a&gt;: "Microsoft's open source project hosting web site".&lt;br /&gt;&lt;br /&gt;As usual, everything coming out of Silverlight looked very slick and pretty, yet I found myself  often wondering "is this really a mashup?".  This would become a reoccurring theme for the rest of the conference.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;AOL &amp;amp; LOL&lt;/span&gt;&lt;br /&gt;Next, there were two presentations on APIs from AOL.  The first was a very funny one, by John Herren, on AOLs XDrive storage API.  (John isn't with AOL, he was just filling in).  The presentation is available &lt;a href="http://jhherren.wordpress.com/2007/11/11/mashup-university-i-talk-about-aols-xdrive/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;After John, Stephen Benedict (who really is from AOL) talked about &lt;a href="http://developer.aim.com/"&gt;Open AIM&lt;/a&gt;.  The goals are to allow users to build their own custom AIM clients as well as allow users to take bits of functionality from the AOL messenger and plug it into their web apps.  Developers can also write their own bots and and plugins for the client and contribute them.   This is cool stuff, an intd Stephen made the very good point that it allows start-up sites to automatically tap into the AOL community.&lt;br /&gt;&lt;br /&gt;Also, Stephen demoed what AOL is calling WIMZI.  Which is an embeddable IM window that the owner of a site can put on a page using a small amount of HTML.  The IM window lets end users of the site message the owner directly, anonymously, and also while protecting the owner's identity.  This is very similar to what &lt;a href="http://wwwm.meebo.com/"&gt;Meebo&lt;/a&gt; has done.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Mashups are coming...&lt;/span&gt;&lt;br /&gt;The first day, I had noticed a number of large poster displays (like the kind you'd see in an actual conference) featuring close up shots of people who are half modern primitive / half corporate suits.  The most prominent image was of some tough looking guy with full body tattoos and big honking posts in his ears wearing a button down shirt and tie (and cuff links!).   On the top of the poster it reads: "The Mashups are coming. Unleash your inner developer."  The whole display seemed incongruous with the spirit of Mashup Camp, and when &lt;a href="http://www.serena.com/"&gt;Serena&lt;/a&gt; did their presentation it became clear that the guy in the suit had gone and gotten the tats to mix with the young crowd.  Serena is a 20 something old mainframe company that has taken their workflow application and hooked into SOA on the backend and onto HTML on the frontend.   Not that there is anything wrong with any of this.  I proudly work for a company that goes all the way back to the 1800's and that is in the middle of reinventing itself right now.  I just didn't see how this was a mashup.  To quote &lt;span style="font-style: italic;"&gt;Fight Club&lt;/span&gt;: "sticking feathers up your ass does not make you a chicken", and I would say that calling Salesforce.com, while very nice, does not make you a mashup.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Kegerator&lt;/span&gt;&lt;br /&gt;The last talk (that I can remember at least) was by Chad Dickerson, who is the director of the &lt;a href="http://developer.yahoo.com/"&gt;Yahoo Developer Network&lt;/a&gt;.  He of course talked about the developer network and the great work they have been doing.  Not just with APIs, Pipes, and YUI (as if that weren't enough), but with design patterns documentation and performance tunning recommendations and the YSlow plugin.  If you are a web developer and haven't looked at Yahoo's &lt;a href="http://developer.yahoo.com/ypatterns/"&gt;Design Patterns&lt;/a&gt; and rules for &lt;a href="http://developer.yahoo.com/performance/"&gt;Exception Performance&lt;/a&gt;, I strongly recommend you do.  However, the biggest highlight of Chad's talk was his  revelation that he is best known on the internet as a &lt;a href="http://www.chaddickerson.com/blog/2005/10/15/how-to-make-a-kegerator/"&gt;kegerator&lt;/a&gt; construction expert.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Geeking Out, Pubbing Out, and Install Hell&lt;/span&gt;&lt;br /&gt;In the afternoon, we broke into discussion groups.  The discussions and groups were participant lead and moderated, and are one of the hallmarks of the &lt;span style="font-style: italic;"&gt;unconference&lt;/span&gt;.  Unfortunately, at this point, I became caught in one of those installation/configuration hell's of a very deep level as the IBM team labored ceaselessly to determine what was wrong with my QEDWiki setup.  About 36 hours and the tremendous help of Will, Flavio, and Dan (thanks again!) I now have QEDWiki running on my local machine -- just a little too late to enter the Mashup challenge.&lt;br /&gt;&lt;br /&gt;The discussion I did get to participate in a bit was primarily around widget and service discoverability.  The general consensus was that standards should adopted for metadata around widgets and services.  While you can't really argue that this is a good idea, I do wonder what can really be implemented that will be practical, work for a wide enough range of situations, and that people will really use.&lt;br /&gt;&lt;br /&gt;I am also not so sure that there is that much of a problem with discoverability to begin with.   Or at least, a problem that wont be fixed with defacto standards coming out of particular business needs.  Also, discovery is where the real value is in mashups, and where some of the key differentiation happens.  If discovery were easy, we would have to come up with something else just as hard in order to compete.  In other words, easily discovered data has little or no value.  So, its nice to play around with, but nobody's going to build a business off of it.&lt;br /&gt;&lt;br /&gt;The evening last night ended up in a couple of different pubs, in what was probably a relatively calm Sunday night out for many Dubliners.  This morning, things got started a little late...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Competition&lt;/span&gt;&lt;br /&gt;The Competition was definitely one of the most exciting parts of Mashup Camp.   After people had put together the mashups, &lt;span style="font-style: italic;"&gt;speed geeking&lt;/span&gt; began, each mashup creator had 5 minutes to present their mashup to each observer.  There was some interesting work done with QEDWiki (there was a QEDWiki mashup challenge as well as the Mashupcamp best mashup award being given - I helped judge for the QEDWiki challenge), and there were a number of mashups being done using mobile phones.  The amount of mashup in the mashup varied from one (3rd prize) that very entertainingly made a game out of yahoo news headlines by substituting the terms in the headline with a result from a Yahoo image keyword search,  (For example, "Bush Fires Staff" might show a picture of a shrub, a fire, and a big wooden stick,  you then try to case what the actual headline is then click through to see the real headline and article.) to many that I would consider to be primarily standard web applications calling free services on the web rather then ones built from scratch.  All in all, it was really impressive to see what people had done with very little time and (in some cases) very much beer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Leaving Camp...&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;There was definitely a "leaving camp" feeling to leaving mashup camp that distinguishes it from other conferences.  It's a nice feeling, and one that makes me reflect on how we can build a stronger development community where I work.  I hope I can take some of these lessons back to Reuters.&lt;br /&gt;&lt;br /&gt;Finally, as the mashup ecosystem develops I think its important that &lt;span style="font-style: italic;"&gt;mashup&lt;/span&gt; doesn't become just another check mark to put on software and that it doesn't the term become become diluted to mean just calling a 3rd party service on the web.  In my opinion, mashup implies some novelty of use where two (or more) incongruous objects are brought together in a way that creates a third.  Or, it could be said this way: Mashups should be easy to build, but hard to conceive. &lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&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/2538248514140644264-2606120156427810853?l=nullcheck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nullcheck.blogspot.com/feeds/2606120156427810853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2538248514140644264&amp;postID=2606120156427810853' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/2606120156427810853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/2606120156427810853'/><link rel='alternate' type='text/html' href='http://nullcheck.blogspot.com/2007/11/end-of-mashup-camp.html' title='end of mashup camp'/><author><name>n kolba</name><uri>http://www.blogger.com/profile/14720347316839818863</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_BEEWY9CwWIw/RwkLttiCi7I/AAAAAAAAA98/vILkqIoJS6o/s400/IMG_3506.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2538248514140644264.post-3401624115996393508</id><published>2007-11-10T13:37:00.000-08:00</published><updated>2007-11-10T17:36:04.589-08:00</updated><title type='text'>mashup camp Dublin: Day 1</title><content type='html'>Winding down from my first day of mashup camp with some takeout chinese stirfry and a cup of tea.  Here are my reflections on the day:&lt;br /&gt;&lt;br /&gt;After an unsolicited and random tour of Dublin by my cab driver (Brahm Stocker's house, school where the guy who wrote the screenplay for&lt;span style="font-style: italic;"&gt; the Commitments&lt;/span&gt; taught, etc) I arrived at mashup camp held in the Guinness Storehouse, fresh from an early morning flight out of London.  Amazingly enough, mashup camp is held in the very place they brew Guinness beer.  This will be a very interesting few days.&lt;br /&gt;&lt;br /&gt;The first day and half of camp is dedicated to what is called "Mashup University".  These are presentations by various contributors to the mashup ecosystem.  Today they included several presentations from IBM on QEDWiki and the Mashup Hub, which together make their &lt;a href="http://www.alphaworks.ibm.com/tech/ibmmsk"&gt;Mashup Starter Kit&lt;/a&gt;, Microsoft on their &lt;a href="http://popfly.ms"&gt;Popfly&lt;/a&gt; site showcasing mashups with Silverlight, John Musser from &lt;a href="http://www.programmableweb.com/"&gt;Programmable Web&lt;/a&gt;, and presentations from Kapow, AOL and others.   (sorry if I missed anybody, I was a little late).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;QEDWiki from IBM&lt;/span&gt;&lt;br /&gt;I have had some experience with QEDWiki already.  I saw a demo of it at AjaxWorld in SantaClara last year and later had the opportunity to work with Dan Gisolfi, who presented today, with doing a proof of concept with it around a project at Reuters.  QED has come a long way in the past year, and I think that packaging it with MashupHub was a good idea.  MashupHub is feed aggregator much along the lines of Yahoo Pipes (even with a similar slick GUI for linking feeds together).  One major difference that is beneficial to potential enterprise users, is that the MashupHub can run on a private server, unlike Pipes which is all in the public domain.  The combined kit from IBM attempts to enable the assembly of Mashups by non-technical &lt;span style="font-style: italic;"&gt;domain experts&lt;/span&gt; who would work with widgets and feeds already built by the &lt;span style="font-style: italic;"&gt;mashup enabler&lt;/span&gt;.   This is an ambitious and important goal, since so many &lt;span style="font-style: italic;"&gt;situational applications&lt;/span&gt; are never built for the simple reason that the domain expert who conceptualized the app is not able to create it directly.  And engaging IT to build something from scratch is too expensive and/or too slow.  QED covers a lot of ground, but we are not out of the woods yet.  While it is true that you can build an application in QED without doing any &lt;span style="font-style: italic;"&gt;coding&lt;/span&gt;, the assembling itself requires quite a bit of expertise of a technical sort, especially when it comes to resolving aggregation and filtering of  disparate data feeds.  These are problems that no one has the solution for yet, but IBM has done a lot of heavy lifting with QED and MashupHub.&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;Dan touched on many of the partnerships IBM is forming around the project: wiith Dapper, StrikeIron,  SMILE and OpenSearch.  He also summarized the Enterprise Mashup Challenge that IBM is hosting here for the best Enterprise Mashup built on QED.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;p style="margin: 0in; font-family: arial; font-size: 10pt;"&gt;&lt;span style="font-size:100%;"&gt;One of the big problems with QED is aesthetics.&lt;span style=""&gt;  &lt;/span&gt;Its clunky look detracts from its real utility, and risks undermining the confidence non-technical people will have in using it to build mashup applications.&lt;span style=""&gt;  &lt;/span&gt;It’s a shame because if it just got polished, it would really shine.&lt;span style=""&gt;  &lt;/span&gt;Ironically, the mashup hub looks far more finished, and this is the backend tool that feeds QED. &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in; font-family: arial; font-size: 10pt;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in; font-family: arial; font-size: 10pt;"&gt;&lt;span style="font-weight: bold;"&gt;Hi Ho Silverlight and away&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0in; font-family: arial; font-size: 10pt;"&gt;&lt;span style="font-size:100%;"&gt;An interesting contrast to IBM's demo was the demo by Microsoft of the the Popfly community for Silverlight mashups.  Here it was all style with a shortage of substance.  The widgets in Silverlight looked awesome, zooming around the page in 3D and Martha (Rotter?), who was doing the demo was able to easily link the widgets to feeds, visualizing data in different formats effortlessly (barring network problems).  However, most of the lush graphics have no meaning for me and in fact are a negative.  What use could I have for the &lt;span style="font-style: italic;"&gt;whack-a-mole&lt;/span&gt; visualization of data when I am trying to solve the workflow problems of high volume financial traders?  Microsoft seems to be preoccupied with out-flashing flash here, in a bid which I don't think plays to Microsoft's strengths.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in; font-family: arial; font-size: 10pt;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in; font-family: arial; font-size: 10pt;"&gt;&lt;span style="font-size:100%;"&gt; &lt;span style="font-weight: bold;"&gt;social networking&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in; font-family: arial; font-size: 10pt;"&gt;&lt;span style="font-size:100%;"&gt;John Musser delivered what was an excellent summary of the evolution of web mashups he has been tracking with Programmable Web in the past 2 1/2 years.  He focused largely (for good reason)  on the rise of Social Networking platforms and discussed Google's OpenSocial project.  John also gave some entertaining examples of mashups.  My favorite was a mashup that actually used the Amazon.com wish list service to identify political subversives and locate them on a Google map.  Oddly enough, they are mostly on the east and west costs.  Check it out &lt;a href="http://www.applefritter.com/bannedbooks"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in; font-family: arial; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0in; font-family: arial; font-size: 10pt;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="www.gregsmind.com"&gt;Gregory Cypes&lt;/a&gt;' summary of &lt;a href="http://developer.aim.com"&gt;AOL's AIM API&lt;/a&gt; project tied into John's presentation very well.  Gregory also talked about AOL's use of the OpenID standard. &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;The day was wrapped up perfectly with the freshest pint of Guinness possible from the bar at the top of the storehouse.  Tomorrow should be even more exciting as the gloves come off and the geekiness is unleashed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2538248514140644264-3401624115996393508?l=nullcheck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nullcheck.blogspot.com/feeds/3401624115996393508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2538248514140644264&amp;postID=3401624115996393508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/3401624115996393508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/3401624115996393508'/><link rel='alternate' type='text/html' href='http://nullcheck.blogspot.com/2007/11/mashup-camp-dublin-day-1.html' title='mashup camp Dublin: Day 1'/><author><name>n kolba</name><uri>http://www.blogger.com/profile/14720347316839818863</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_BEEWY9CwWIw/RwkLttiCi7I/AAAAAAAAA98/vILkqIoJS6o/s400/IMG_3506.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2538248514140644264.post-4534689060200256957</id><published>2007-11-08T15:29:00.000-08:00</published><updated>2007-11-09T00:17:26.824-08:00</updated><title type='text'>Enterprise Mashups?</title><content type='html'>It's the day before I go to Mashup Camp in Dublin.  One of the focal points of this "unconference" will be "the enterprise mashup", which has become kind of a holy grail of web 2.0.&lt;br /&gt;&lt;br /&gt;For some time now, I have been trying to resolve for myself how collaboration, mashups, and other web 2.0 &lt;span style="font-style: italic;"&gt;buzzologies&lt;/span&gt; can really be relevant to my end users who are time-poor, technologically conservative, and only concerned with the bottom line.  On top of this, technology in my enterprise world is wrapped in a tight web of permissions, corporate IP, and government regulation.&lt;br /&gt;&lt;br /&gt;However, I am still optimistic that many of the technologies and models from the web 2.0 world have a great deal of value for the enterprise world.  One of the problems seems to be that many of the guiding principals in the web 2.0 consumer world are incompatible with the enterprise world and need to be transformed.  Here are a few:&lt;br /&gt; &lt;br /&gt;   &lt;span style="font-weight: bold;"&gt;Consumer Web 2.0 principals&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Information should be free&lt;/li&gt;&lt;li&gt;Users want to interact with the system and use it for expression&lt;/li&gt;&lt;li&gt;Build first, monetize later.  For example: build up a community of people and then generate revenue through ads.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;    &lt;span style="font-weight: bold;"&gt;Enterprise Web 2.0 principals&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Information needs to be monetized&lt;/li&gt;&lt;li&gt;Users want to use the system to do their jobs.  They don't want to put anymore information into the system then their current work flow requires (and less would be even better).&lt;/li&gt;&lt;li&gt;Everything must begin and end with a business case.   Advertising is not a relevant business model for premium enterprise applications, which must demonstrably cut costs, generate more revenue, or both.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2538248514140644264-4534689060200256957?l=nullcheck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nullcheck.blogspot.com/feeds/4534689060200256957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2538248514140644264&amp;postID=4534689060200256957' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/4534689060200256957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/4534689060200256957'/><link rel='alternate' type='text/html' href='http://nullcheck.blogspot.com/2007/11/enterprise-mashups.html' title='Enterprise Mashups?'/><author><name>n kolba</name><uri>http://www.blogger.com/profile/14720347316839818863</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_BEEWY9CwWIw/RwkLttiCi7I/AAAAAAAAA98/vILkqIoJS6o/s400/IMG_3506.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2538248514140644264.post-6416342573170231038</id><published>2007-10-29T14:56:00.000-07:00</published><updated>2007-10-29T16:15:45.574-07:00</updated><title type='text'>House without Halls (an Anti Pattern parable)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm2.static.flickr.com/1388/1287978558_ebc925951b.jpg?v=0"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px;" src="http://farm2.static.flickr.com/1388/1287978558_ebc925951b.jpg?v=0" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Imagine you are an architect building a house.&lt;br /&gt;&lt;br /&gt;First, you go to one builder and you ask him (or her) to build you a kitchen, you describe in adequate detail the cabinets you want and what kind of sink, stove, etc.&lt;br /&gt;&lt;br /&gt;Next,  you go to another builder and ask for a living room.  And then to another builder for a bathroom, and another builder for a bedroom, etc.&lt;br /&gt;&lt;br /&gt;All of the builders go off into separate shops and build these rooms, then they bring them back to you.  And you can just push them together into a house.  Right?&lt;br /&gt;&lt;br /&gt;You quickly discover that there is no way to go from one room to the next, since only one door was needed to build each room.  You find that you can travel between the rooms by going through the windows, but this becomes confusing when you have guests, since there is no common and predictable way for people to flow through the house.  You don't know which room to wait in for your guests to arrive, and if they have come into a different room then you, you have to wander around, going in and out of windows, until you find them.  Not having a clear point of entry for the house has made any opening into the house as likely an entrance as the next one.&lt;br /&gt;&lt;br /&gt;You described to each builder exactly what you wanted in each room, and how many windows you wanted, but you didn't specify how large each room should be, how it should be shaped, or how the windows should be placed.  Each room is built from the inside-out rather then from the outside-in.  So, without considered edges, each room is a haphazard polygon and you are forced to fit rooms together by complimentary shape rather then by function.  So, after you have prepared dinner in the kitchen, you have to carry it out the window, around the outside of a quarter of the house, back into a window for the bedroom, where by a bit of luck, there is an interior facing window opening out onto the dining room (this is the short cut, you'd have to walk clear around to the other side of the house to get to the exterior facing window of the dining room).&lt;br /&gt;&lt;br /&gt;"This isn't so bad" you tell yourself.  "once it becomes part of my daily routine, I am sure I can optimize."&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Anti-pattern"&gt;http://en.wikipedia.org/wiki/Anti-pattern&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2538248514140644264-6416342573170231038?l=nullcheck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nullcheck.blogspot.com/feeds/6416342573170231038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2538248514140644264&amp;postID=6416342573170231038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/6416342573170231038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/6416342573170231038'/><link rel='alternate' type='text/html' href='http://nullcheck.blogspot.com/2007/10/house-without-halls-anti-pattern.html' title='House without Halls (an Anti Pattern parable)'/><author><name>n kolba</name><uri>http://www.blogger.com/profile/14720347316839818863</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_BEEWY9CwWIw/RwkLttiCi7I/AAAAAAAAA98/vILkqIoJS6o/s400/IMG_3506.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2538248514140644264.post-8094239237194180027</id><published>2007-10-26T02:43:00.000-07:00</published><updated>2007-10-26T03:14:08.712-07:00</updated><title type='text'>what's in a name?</title><content type='html'>Well, I finally did it.  I am finally going to make a blog post.  After almost a decade of being a web developer, and years of procrastination (and actually starting blogs and writings for blogs that I fussed with indefinitely and never made public), I will finally press the "publish" button.  I promise.&lt;br /&gt;&lt;br /&gt;I won't even preview.  I'm just going to publish.&lt;br /&gt;&lt;br /&gt;really.&lt;br /&gt;&lt;br /&gt;Part of the problem with the web is coming up with a name.   Naming something on the web is kind of like naming a pet.  With the added caveat that your name has to be unique.&lt;br /&gt;&lt;br /&gt;Sorry 'Fido''s already taken.  Try again.&lt;br /&gt;&lt;br /&gt;So, all of the obvious names get filled up fast, and the clever ones a bit faster and your left with having to come up with something really, really clever  or something like "nickkolbaswebdevelopmentblog"  that just screams "I wasn't clever enough to come up with a good name for my blog".&lt;br /&gt;&lt;br /&gt;So anyway, here I am debugging massive amounts of javascript and I decide on a name.&lt;br /&gt;&lt;br /&gt;I don't know, maybe there's a connection.&lt;br /&gt;&lt;br /&gt;OK, here's what &lt;span style="font-style: italic;"&gt;nullcheck&lt;/span&gt; means to me:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It sounds like 'soundcheck'&lt;/li&gt;&lt;li&gt;Its one of those things that you have to do, and everybody is guilty of 'forgetting' to do at least once in a while.&lt;/li&gt;&lt;li&gt;It could be a metaphor (you decide), which appeals to my philosophical tendencies.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Alright, I am going to post this.  Stay tuned for:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;possibly some interesting and useful information on javascript, ajax, mashups and other things I am occupying myself with&lt;/li&gt;&lt;li&gt;insight into my life as a web developer&lt;br /&gt;&lt;/li&gt;&lt;li&gt;probably a lot of bulleted lists&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;OK.  I lied, I did preview first.  Hitting publish now...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2538248514140644264-8094239237194180027?l=nullcheck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nullcheck.blogspot.com/feeds/8094239237194180027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2538248514140644264&amp;postID=8094239237194180027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/8094239237194180027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2538248514140644264/posts/default/8094239237194180027'/><link rel='alternate' type='text/html' href='http://nullcheck.blogspot.com/2007/10/whats-in-name.html' title='what&apos;s in a name?'/><author><name>n kolba</name><uri>http://www.blogger.com/profile/14720347316839818863</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_BEEWY9CwWIw/RwkLttiCi7I/AAAAAAAAA98/vILkqIoJS6o/s400/IMG_3506.jpg'/></author><thr:total>0</thr:total></entry></feed>
