tag:blogger.com,1999:blog-91259455203221722342009-05-07T17:22:43.566-05:00Beautiful DesignIndustrial, user centered, interface driven, interaction, task oriented... designChristianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comBlogger43125tag:blogger.com,1999:blog-9125945520322172234.post-37605540086244739442009-04-24T07:18:00.001-05:002009-04-24T07:24:10.930-05:00The humble button + a sprinkling of css<p>I always figured buttons were born into this world boring, had boring childhoods and died well… boring.</p> <p><a href="http://lh6.ggpht.com/_WU8UfBm3iWw/SfGt-PKcqzI/AAAAAAAAAIE/HMqb8gL4HrI/s1600-h/before%5B13%5D.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="before" border="0" alt="before" src="http://lh3.ggpht.com/_WU8UfBm3iWw/SfGt-ZPEAkI/AAAAAAAAAII/st96UPBWr0A/before_thumb%5B9%5D.png?imgmax=800" width="78" height="24" /></a></p> <p>See what I mean? But after reading <a href="http://24ways.org/2008/shiny-happy-buttons">Shiny Happy Buttons at 24ways.org</a>, my entire world view shifted:</p> <p><a href="http://lh4.ggpht.com/_WU8UfBm3iWw/SfGt-SGV-0I/AAAAAAAAAIM/O6LhM5-kWz4/s1600-h/after%5B3%5D.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="after" border="0" alt="after" src="http://lh4.ggpht.com/_WU8UfBm3iWw/SfGt-pvYu4I/AAAAAAAAAIQ/eyDkRrHDPEQ/after_thumb%5B1%5D.png?imgmax=800" width="91" height="34" /></a></p> <p></p> <p></p> <p>Wow!! (Firefox 3)</p> <p>Note: They obviously look great in Firefox but so too in Safari (Chrome seems to do something weird to them for some inexplicable reason. They’re both supposed to use Webkit though right?! Right???!!!) and IE although not identical - IE doesn’t do rounded corners:</p> <p><a href="http://lh6.ggpht.com/_WU8UfBm3iWw/SfGt--eNoII/AAAAAAAAAIU/aFFqJ4lIA4s/s1600-h/after_ie%5B3%5D.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="after_ie" border="0" alt="after_ie" src="http://lh6.ggpht.com/_WU8UfBm3iWw/SfGt-1uVfWI/AAAAAAAAAIY/hdwQuQZ_iXU/after_ie_thumb%5B1%5D.png?imgmax=800" width="126" height="37" /></a></p> <p>Still lovely in IE me thinks although the padding is somewhat exaggerated. Safari:</p> <p><a href="http://lh4.ggpht.com/_WU8UfBm3iWw/SfGt_LfSRRI/AAAAAAAAAIc/IB9uOJr22kY/s1600-h/safari_after%5B3%5D.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="safari_after" border="0" alt="safari_after" src="http://lh6.ggpht.com/_WU8UfBm3iWw/SfGt_f7n-pI/AAAAAAAAAIg/BdCWojMJmGY/safari_after_thumb%5B1%5D.png?imgmax=800" width="88" height="34" /></a></p> <p>Last, and in this case certainly least, Chrome:</p> <p><a href="http://lh3.ggpht.com/_WU8UfBm3iWw/SfGt_dUYFyI/AAAAAAAAAIk/2gufUY-9LDU/s1600-h/chrome_after%5B3%5D.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="chrome_after" border="0" alt="chrome_after" src="http://lh3.ggpht.com/_WU8UfBm3iWw/SfGt_vtTENI/AAAAAAAAAIo/hjBwnLS9_p8/chrome_after_thumb%5B1%5D.png?imgmax=800" width="91" height="38" /></a></p> <p>And here’s the Css:</p> <pre>.buttons button {<br /> padding: 7px 10px;<br /> color: #ffffff;<br /> font-weight: bold;<br /> text-shadow: 1px 1px 1px #000;<br /> border: solid thin #882d13;<br /> -webkit-border-radius: 7px;<br /> -moz-border-radius: 7px;<br /> border-radius: 7px;<br /> -webkit-box-shadow: 2px 2px 3px #999;<br /> box-shadow: 2px 2px 2px #bbb;<br /> background-color: #ce401c;<br />}</pre> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-3760554008624473944?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-15516815217512356612009-04-18T08:21:00.001-05:002009-04-18T08:21:16.188-05:00Lighthouse<p>I’ve decided to start work on a little side project of mine very own mostly to keep the old juices of creativity properly exercised and flowing freely, and to have a place where I can play with any new and exciting webby-type technologies along the way.</p> <p><a href="http://www.lighthouseapp.com">Lighthouse</a> came to mind immediately for project management (New ideas pop up faster than I can implement them… must capture them! :-)) since I’d remembered hearing good things about them from the 37signals guys. To make a long story short, Lighthouse is awesome!</p> <p>Getting started is easy - your first project is free so trying them out doesn’t cost you a penny. (I have other ideas I’ll eventually want to try out which is where the service starts costing money. Fine. I don’t mind paying for excellent software.) In terms of usability, the interface is a complete joy to use - the only thing that tripped me up (for all of about 2mins) was getting my milestones properly prioritized.</p> <p>An excellent service I’d recommend to anybody starting out. Setting up <a href="http://trac.edgewall.org/">Trac</a>, <a href="http://www.bugzilla.org/">Bugzilla</a>, et. al, hosting it myself, and backing it up regularly is just something I don’t want to spend my time on.</p> <p>(I went with a <a href="http://beanstalkapp.com/">Beanstalk</a> hosted SVN repository too which happens to have at least 1 very simple, very nice integration point with Lighthouse that I’m aware of anyways, but I’ll save that topic for later.)</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-1551681521751235661?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-31113430477507638172009-04-11T11:11:00.001-05:002009-04-11T11:11:51.883-05:00Welcome to Internet Explorer 8<p>Apparently Microsoft has quietly released IE8. My inner geek couldn’t resist trying it out so here goes...</p> <p><a href="http://lh5.ggpht.com/_WU8UfBm3iWw/SeDBRD7ks1I/AAAAAAAAAH8/LPJY31njKkE/s1600-h/image%5B3%5D.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_WU8UfBm3iWw/SeDBRwsbDgI/AAAAAAAAAIA/efYRJ78bSas/image_thumb%5B1%5D.png?imgmax=800" width="402" height="293" /></a></p> <p>So far so good. Roboform still seems to work. (That’s non-negotiable.) First thing I found was a neat little ‘blog this’ option under one of the menus that proceeded to fire up Windows Live Writer and immediately start work on a new post. The brand new post gets pre-filled with the title of whatever happens to be active in IE when ‘blog this’ is clicked + a link back to that page.</p> <p>Very cool indeed!</p> <p><a href="http://www.microsoft.com/canada/windows/internet-explorer/welcome.aspx">Welcome to Internet Explorer 8</a></p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-3111343047750763817?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-71010583931010438882008-12-22T13:54:00.001-05:002008-12-22T13:54:42.577-05:00Lifehacker v2...<p>I didn't have the words to describe a not-quite-right feeling I couldn't shake for the new lifehack look - until reading Robin Williams's most excellent "The Non-Designer's Design Book" that is. (<a href="http://www.amazon.com/Non-Designers-Design-Book-3rd-Designers/dp/0321534042/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1229970925&sr=8-1">Link</a>)</p> <p><a href="http://lh5.ggpht.com/_WU8UfBm3iWw/SU_ibwPeL_I/AAAAAAAAAHs/rUgSDzCubgE/s1600-h/lifehacker%5B3%5D.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="275" alt="lifehacker" src="http://lh3.ggpht.com/_WU8UfBm3iWw/SU_icTbWMWI/AAAAAAAAAHw/F-MZX-yXQ3Y/lifehacker_thumb%5B1%5D.jpg?imgmax=800" width="406" border="0" /></a></p> <p><strong><font size="6">Contrast</font></strong> is what's lacking. (That's contrast of the non-wimpy variety.) The tall vertical banner on the left blends with the horizontal bar at the top, blends with the article headers to the right. The links and summaries are devilishly difficult to distinguish too. (Say that 5 times fast I dares ya!)</p> <p>With the right amount of contrast - of which size is but one technique, there's also colour, form, direction and weight - a reader should be able to pick up on the different elements of a layout almost immediately with little-to-no effort.</p> <p>Highly subjective of course. Can you tell I'm not digging the new look? :-)</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-7101058393101043888?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-3342299858276223932008-10-26T08:19:00.001-05:002008-10-26T08:19:08.115-05:00Macbooks...I was kinda waiting on this one for awhile and was it ever worth it! Isn't she beautiful?<br /><br /><img src="http://lh4.ggpht.com/christian.leskowsky/SQRtsy500eI/AAAAAAAAAGI/mFNlQS-9s48/IMG_2201.jpg?imgmax=800" alt="IMG_2201.jpg" border="0" width="360" height="270" /><br /><br />Small, light, excellent build quality and with a bright, vibrant screen too. I couldn't be happier. So long MS... it was great while it lasted. :-)<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-334229985827622393?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-45860951033226089492008-09-05T07:21:00.005-05:002008-12-21T20:23:30.928-05:00Model associations in Cake...I just bumped into this little trick in a forum post on model associations...<br /><br /><pre name="code" class="php"><br />class Recipe extends AppModel {<br /> var $hasOne = 'User';<br />}<br /><br />class User extends AppModel {<br /> var $hasMany = 'Recipe';<br />}<br /></pre>Associations seem to allow ->finds like these:<br /><br /><pre name="code" class="php">$this->User->Recipe->find('all', array('conditions' => array('cooking_time <' => '30 mins.'));<br /></pre><br /><br />Who knew?! This automatically does a Left Join of User on Recipe. Note to self: Find a code snippet formatter/style for Blogspot! :-(<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-4586095103322608949?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-65088892617102844052008-08-31T17:07:00.005-05:002008-12-21T20:25:55.568-05:00PHP HereDocsLook what I found in some random bit of open source php the other day:<br /><br /><pre name="code" class="php"><br />$a = <<<END<br />Hello, World!<br />Hi ma!<br />END;<br /></pre><br /><br />Excellent!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-6508889261710284405?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-33929411302417770022008-07-05T08:36:00.001-05:002008-07-05T08:36:51.430-05:00Notes: PowerPoint is not presentation<p>From a presentation by Nancy Duarte.</p> <p>[<a title="http://www.vizthink.com/blog/2008/06/18/webinar-creating-powerful-presentations-with-nancy-duarte/" href="http://www.vizthink.com/blog/2008/06/18/webinar-creating-powerful-presentations-with-nancy-duarte/">http://www.vizthink.com/blog/2008/06/18/webinar-creating-powerful-presentations-with-nancy-duarte/</a>]</p> <p>Telling stories in pictures </p> <p>Thinking visually <br />Simplicity <br />Clarity </p> <p>Start with open space/empty whiteboard </p> <p>Perfection achieved when nothing left to take away... not nothing left to add </p> <p>Presentations as a platform <br />  Mediums <br />    projector <br />    paper <br />    web <br />    devices <br />      interactive <br />      view <br />      collab </p> <p>Need a visual language for your business <br />  specific artwork <br />  really resonates with your business</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-3392941130241777002?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-88317655416515431872008-06-27T09:03:00.001-05:002008-06-27T09:03:11.904-05:00Zoomii.ca<p>Here's a very neat take on browsing the bookshelves of an online bookstore. The interactions are surprisingly intuitive and very responsive-I actually had fun perusing the fantasy section. When was the last time I <em>perused</em> the catalog of an online store? Let me tell you... it's never happened! I'm either searching for something specific or have been given a direct link. Here's their new releases section:</p> <p><a href="http://lh4.ggpht.com/christian.leskowsky/SGTzHeMuf2I/AAAAAAAAAFc/RmzeCgUyccE/zoomii-1%5B3%5D.jpg?imgmax=800"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="276" alt="zoomii-1" src="http://lh4.ggpht.com/christian.leskowsky/SGTzHgJRaeI/AAAAAAAAAFg/KYtWnW7HOd8/zoomii-1_thumb%5B1%5D.jpg?imgmax=800" width="408" border="0" /></a></p> <p>Clicking on a title brings up what you'd expect... detailed product info. direct from Amazon's ginormous book database:</p> <p><a href="http://lh4.ggpht.com/christian.leskowsky/SGTzH1LAr4I/AAAAAAAAAFk/EUq9p7QYpXE/zoomii-2%5B8%5D.jpg?imgmax=800"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="291" alt="zoomii-2" src="http://lh5.ggpht.com/christian.leskowsky/SGTzHyxJNpI/AAAAAAAAAFo/rUARRF0d_sY/zoomii-2_thumb%5B6%5D.jpg?imgmax=800" width="408" border="0" /></a></p> <p>Way to go guys!! </p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-8831765541651543187?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com1tag:blogger.com,1999:blog-9125945520322172234.post-43273851722602557392008-06-17T20:18:00.001-05:002008-06-17T20:18:36.637-05:00Internet Retailer Conference 2008<p>"Get Elastic Ecommerce Blog" is quickly becoming one of my fave blogs. (<a title="http://www.getelastic.com" href="http://www.getelastic.com">http://www.getelastic.com</a>)</p> <p>They were down in Chicago last week for the Internet Retailer Conference and have posted a few of the vendor interviews they managed to squeeze in between sessions. :-)</p> <p>I found Berdine Wu's common-sense advice particularly enlightening. She talked about some of the things any company going online needs to get right to be successful...</p> <ul> <li>Search engine optimization/marketing</li> <li>User experience of your website (smooth, few clicks to buy)</li> <li>Clear, crisp imagery</li> <li>Directed email campaigns</li> <li>Branding coming across strongly</li> </ul> <p>Nice.</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-4327385172260255739?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com1tag:blogger.com,1999:blog-9125945520322172234.post-77074496058223915532008-06-15T09:24:00.001-05:002008-06-15T09:24:54.475-05:00Notes: Google I/O State of Ajax<p></p> <p>User Experience </p> <p>Book: Jeff Raskin: The Humane Interface </p> <p>2 parts: <br />  Visual design <br />  Interaction design </p> <p>User experience expectations have changed dramatically for the web </p> <p>Google Gears->Gears </p> <p>Gears Demo 1: <br />  A neat demo was shown with gears being used as a background <br />    processing thread <br />  Common pattern for doing long running tasks <br />    Spawn a background thread keeps the UI responsive <br />    Can't really do that in the browser <br />    Complex Javascript fights repainting... both share same thread <br />    Gears can do this though!! </p> <p>Gears Demo 2: <br />  Form History pattern <br />    like Time Machine <br />    Replacement for undo <br />    Can go back in time to different states of form <br />    Trying to implement undo is hard (instead of warning dialogs) <br />      The browser has its own undo stack <br />      2 dueling undo stacks? -> Confusion </p> <p>Gears is really amping up responsiveness! </p> <p>Gears Demo 3: <br />  Demo-ed a growls like widget for web applications</p> <p>Unobtrusive Javascript: <br />  An application that degrades gracefully in environments where <br />  javascript/ajax might not be available <br />    Progressive enhancement <br />  Does your application still work?</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-7707449605822391553?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-55391410251677867272008-06-15T07:59:00.001-05:002008-06-15T07:59:08.665-05:00Firebug Rocks!!<p>I was trying to figure out how the site logo at <a title="http://www.macsbeer.com/index.php" href="http://www.macsbeer.com/index.php">http://www.macsbeer.com/index.php</a> was done so I right clicked it and hit "Inpect Element". (FF3+Firebug1.2.0b3)</p> <p>Here's what I got from firebug...</p> <p><a href="http://lh4.ggpht.com/christian.leskowsky/SFUSGqowa9I/AAAAAAAAAFU/6nrw3h-bno8/s1600-h/firebug%5B3%5D.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="279" alt="firebug" src="http://lh3.ggpht.com/christian.leskowsky/SFUSHJyRLcI/AAAAAAAAAFY/pQZlAtad4x0/firebug_thumb%5B1%5D.jpg?imgmax=800" width="422" border="0" /></a> </p> <p>In the style window on the right I quickly found the background image responsible for the nice logo but look what happened when I mouse-d over it!</p> <p>Fantastic.</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-5539141025167786727?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-27287440845401202752008-06-07T08:23:00.001-05:002008-06-07T08:23:40.638-05:00The Dreyfus Model of Learning (Applied to Medicine)Each and every skill we possess falls into one of the following 5 categories of proficiency... <br /><br />(1) In the novice stage, the freshman medical student begins to learn the process of taking a history and memorizes the elements, chief complaint, history of the present illness, review of systems, and family and social history. <br /><br />(2) In the advanced beginner stage, the junior medical student begins to see aspects of common situations, such as those facing hospitalized patients (admission, rounds, discharge) that cannot be defined objectively apart from concrete situations and can only be learned through experience. Maxims emerge from that experience to guide the learner. <br /><br />(3) In the competent stage, the resident physician learns to plan the approach to each patient’s situation. Risks are involved, but supervisory practices are put in place to protect the patient. Because the resident has planned the care, the consequences of the plan are knowable to the resident and offer the resident an opportunity to learn. <br /><br />(4) In the proficient stage, the specialist physician early in practice struggles with developing routines that can streamline the approach to the patient. Managing the multiple distracting stimuli in a thoughtful way is intellectually and emotionally absorbing. <br /><br />(5) In the expert stage, the mid-career physician has learned to recognize patterns of discrete clues and to move quickly, using what he or she might call "intuition" to do the work. The physician is attuned to distortions in patterns or to slow down when things "don’t fit" the expected pattern.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-2728744084540120275?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-36801486259558820852008-06-07T08:17:00.001-05:002008-06-07T08:17:01.018-05:00On Craftsmen and Novices...Here's an excerpt taken from 'A Pattern Language' by Christopher Alexander written more than 30 years ago. A craftsman brings to bear an intuition garnered from years of experience in his work. The novice prefers to follow rules and be told what do to. The craftsman uses abstract concepts and considers context. In the fantastic quote I've included below, Christopher describes the craftsman as being unconcerned with small mis-steps here and there - he knows he can fix them later... <br /><br /><blockquote><br />Why does the principle of gradual stiffening seem so sensible as a process of building?<br /><br />To begin with, such a structure allows the actual building process to be a creative act. It allows the building to be built up gradually. Members can be moved around before they are firmly in place. All those detailed design decisions which can never be worked out in advance on paper, can be made during the building process. And it allows you to see the space in three dimensions as a whole, each step of the way, as more material is added…<br /><br />The essence of this process is very fundamental indeed. We may understand it best by comparing the work of a fifty-year-old carpenter with the work of a novice. The experienced carpenter keeps going. He doesn’t have to keep stopping, because every action he performs, is calculated in such a way that some later action can put it right to the extent that it is imperfect now. What is critical here, is the sequence of events. The carpenter never takes a step which he cannot correct later; so he can keep working, confidently, steadily.<br /><br />The novice by comparison, spends a great deal of his time trying to figure out what to do. He does this essentially because he knows that an action he takes now may cause unretractable problems a little further down the line; and if he is not careful, he will find himself with a joint that requires the shortening of some crucial member – at a stage when it is too late to shorten that member. The fear of these kinds of mistakes forces him to spend hours trying to figure ahead: and it forces him to work as far as possible to exact drawings because they will guarantee that he avoids these kinds of mistakes.<br /><br />The difference between the novice and the master is simply that the novice has not learnt, yet, how to do things in such a way that he can afford to make small mistakes. The master knows that the sequence of his actions will always allow him to cover his mistakes a little further down the line. It is this simple but essential knowledge which gives the work of a master carpenter its wonderful, smooth, relaxed, and almost unconcerned simplicity.<br /></blockquote><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-3680148625955882085?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-5944501583234450252008-05-04T22:06:00.001-05:002008-05-04T22:06:11.598-05:00The BBC wants your feedback<a href="http://lh6.ggpht.com/christian.leskowsky/SB55oS6q_AI/AAAAAAAAAEQ/Bnem7PNhUAo/s1600-h/bbc_complaints%5B7%5D.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="307" alt="bbc_complaints" src="http://lh4.ggpht.com/christian.leskowsky/SB55oy6q_BI/AAAAAAAAAEY/JXWoV8gy-n8/bbc_complaints_thumb%5B3%5D.jpg?imgmax=800" width="296" border="0" /></a> <p>Making it easy for disgruntled customers to leave feedback about your product - both positive and negative - is one of the best ways we have as product managers and designers to make it better.</p> <p>I just stumbled upon BBC's complaints website. (Shown above.) Visitors can learn about the broadcaster's complaints process, file complaints and look to past responses to see how theirs might be handled.</p> <p>Nice.</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-594450158323445025?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-35952512524134366102008-04-23T08:02:00.001-05:002008-04-23T08:02:46.240-05:00Paging on Smugmug.com<p>I love the way Smugmug does its paging of large photo albums...</p> <p>The first page:</p> <p><a href="http://lh5.ggpht.com/christian.leskowsky/SA8zby6q-6I/AAAAAAAAADg/ML4s4i3ITXg/page_control-1%5B2%5D.jpg?imgmax=800"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="68" alt="page_control-1" src="http://lh6.ggpht.com/christian.leskowsky/SA8zcC6q-7I/AAAAAAAAADo/gLeIkdd62yc/page_control-1_thumb.jpg?imgmax=800" width="244" border="0" /></a> </p> <p> </p> <p>The second page:</p> <p><a href="http://lh3.ggpht.com/christian.leskowsky/SA8zcS6q-8I/AAAAAAAAADw/1XIWfROg7Gk/page_control-2%5B2%5D.jpg?imgmax=800"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="81" alt="page_control-2" src="http://lh4.ggpht.com/christian.leskowsky/SA8zci6q-9I/AAAAAAAAAD4/bI_ES0d2tTY/page_control-2_thumb.jpg?imgmax=800" width="244" border="0" /></a> </p> <p>Look at the nice little overlay control with all 6 pages!</p> <p> </p> <p>and the last page:</p> <p><a href="http://lh6.ggpht.com/christian.leskowsky/SA8zdC6q--I/AAAAAAAAAEA/NwraWlhZs-A/page_control-3%5B2%5D.jpg?imgmax=800"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="70" alt="page_control-3" src="http://lh3.ggpht.com/christian.leskowsky/SA8zdS6q-_I/AAAAAAAAAEI/4v5BY-sIP8U/page_control-3_thumb.jpg?imgmax=800" width="244" border="0" /></a></p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-3595251252413436610?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-18977468033811470782008-03-26T10:28:00.001-05:002008-03-26T10:34:43.782-05:00Parsing command line args<p>I love the way it's done in Gant!!</p> <pre>def cli = new CliBuilder ( usage : 'gant [option]* [target]*' , parser : new GnuParser ( ) )<br />cli.c ( longOpt : 'usecache' , 'Whether to cache the generated class and perform modified checks on the file before re-compilation.' )<br />cli.d ( longOpt : 'cachedir' , args : 1 , argName : 'cache-file' , 'The directory where to cache generated classes to.' )<br />cli.f ( longOpt : 'gantfile' , args : 1 , argName : 'build-file' , 'Use the named build file instead of the default, build.gant.' )<br />cli.h ( longOpt : 'help' , 'Print out this message.' )<br /><br />cli.l ( longOpt : 'gantlib' , args : 1 , argName : 'library' , 'A directory that contains classes to be used as extra Gant modules,' )<br />cli.n ( longOpt : 'dry-run' , 'Do not actually action any tasks.' )<br />cli.p ( longOpt : 'projecthelp' , 'Print out a list of the possible targets.' )<br />cli.q ( longOpt : 'quiet' , 'Do not print out much when executing.' )<br />cli.s ( longOpt : 'silent' , 'Print out nothing when executing.' )<br />cli.v ( longOpt : 'verbose' , 'Print lots of extra information.' )<br /><br />cli.D ( argName : 'name>=<value' , args : 1 , 'Define <name> to have value <value>.  Creates a variable named <name> for use in the scripts and a property named <name> for the Ant tasks.' )<br />cli.L ( longOpt : 'lib' , args : 1 , argName : 'path' , 'Add a directory to search for jars and classes.' )<br />cli.P ( longOpt : 'classpath' , args : 1 , argName : 'path' , 'Specify a path to search for jars and classes.' )<br />cli.T ( longOpt : 'targets' , 'Print out a list of the possible targets.' )<br />cli.V ( longOpt : 'version' , 'Print the version number and exit.' )<br /><br />def options = cli.parse ( args )</pre><br /><p>parse(args) returns a map you use like so...</p><br /><pre>if ( options.h ) { cli.usage ( ) ; return 0 }<br />if ( options.l ) { gantLib << options.l.split ( System.properties.'path.separator' ) }<br />if ( options.n ) { GantState.dryRun = true }<br />def function = ( options.p || options.T ) ? 'targetList' : 'dispatch'<br />if ( options.q ) { GantState.verbosity = GantState.QUIET }<br />if ( options.s ) { GantState.verbosity = GantState.SILENT }<br />if ( options.v ) { GantState.verbosity = GantState.VERBOSE }</pre><br /><p>PS. I'll try to clean this up later... pygments.org looks neat!</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-1897746803381147078?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-72336844711901377882008-03-25T12:13:00.001-05:002008-03-25T12:13:55.095-05:00The Four Stages of Learning<h5>Unconscious incompetence</h5> <p>In the first stage of learning you don't know you're no good - ignorance is bliss! Sometimes this comes from simply having preconceptions about how easy a task is and sometimes it comes from not knowing there's a better way. Dysfunctional teams and developers are often unaware of what they're doing wrong, even if it becomes obvious when scrutinized.</p> <h5>Conscious incompetence</h5> <p>The second stage of learning is the tricky one as it starts to dawn that you're not actually all that good! At this stage, teams and developers need a lot of support to prevent them wallowing in despair and to help them select and adopt new techniques.</p> <h5>Conscious competence</h5> <p>In the third stage of learning you're consciously applying the techniques you need in order to be "good". Here teams and developers know what they should be doing but need their momentum to be maintained, often by external encouragement and review.</p> <h5>Unconscious competence</h5> <p>At the fourth stage of learning you're naturally doing things right. </p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-7233684471190137788?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-23924938547531917332008-03-24T08:51:00.001-05:002008-03-24T08:51:09.299-05:00Interview: Nathan Shedroff<p>An interview by Kate Rutter with Nathan Shedroff about blending the roles of designer and business analyst in a new program being offered at the California College of the Arts. Brilliant...</p> <p><strong>[KR]</strong>: It seems that a common attribute of similar programs is to blur the boundaries between fields, and to foster the ability to synthesize…to cross-pollinate concepts and ideas across different functional areas. With this trend towards generalization, how do you avoid teaching people to be, for lack of a better phrase, Jack-or-Jane-of-all-trades but master of none?</p> <p><strong>[NS]</strong>: This is a great question. There’s no way we can teach students everything they need to know. We’re specifically looking for passionate individuals who will take what we learn together and apply it to the passions, interests, and experience they already possess. Their learning is life-long so the best we can do is frame some of these perspectives and skills for them, give them some experience, and inspire them to continue the process. We’ve prioritized, in the curriculum, the skills, knowledge, and experiences we think they will need the most, but it’s just a start. Besides, there’s only so much you can learn in school. At some point, you need to learn “on-the-job” — whatever that job may be. So, we’re exposing our students to a variety of skills but with unified perspectives (design-led innovation, meaningful experience, sustainability, and visionary leadership) so that their deep skills will follow these lines. They will be expert innovation leaders and will be able to apply these skills to any domain or challenge.</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-2392493854753191733?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-21307021182775429522008-03-23T08:35:00.001-05:002008-03-23T08:35:33.580-05:00Bounded Irrationality or Decision Making Traps<p>1. Anchoring</p> <p>When considering a decision, our minds are unduly influenced by the first information we find. Initial impressions and data anchor subsequent judgments.</p> <p>2. Confirmation</p> <p>Through selective search and perception, we subconsciously seek data that supports our existing point of view, and avoid contradictory evidence.</p> <p>3. Memorability</p> <p>We are overly influenced by recent or dramatic events. Repetition from one or multiple sources can also influence belief, memory, and judgment.</p> <p>4. Status quo</p> <p>Decision makers exhibit a strong bias toward conservatism, inertia and alternatives that perpetuate the status quo. We look for reasons to do nothing.</p> <p>5. Sunk cost</p> <p>Unwilling, consciously or not, to admit past mistakes, we make decisions in a way that justifies past choices.</p> <p>From Ambient Findability (pg. 157)</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-2130702118277542952?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-55755029791831710252008-03-23T08:16:00.001-05:002008-03-23T08:16:39.772-05:00User Experience<p>Peter Morville's definition of user experience is broader than most but I like the direction he takes it in... (His book Ambient Findability is fantastic btw.)</p> <p>1. Useful</p> <p>As practitioners we can't be content to paint within the lines drawn by managers. we must have the courage and creativity to ask whether our products and systems are useful, and to apply our deep knowledge of craft and medium to define innovative solutions that are more useful.</p> <p>2. Usable</p> <p>Ease of use remains vital, and yet the interface-centered methods and perspectives of human-computer interaction do not address all dimensions of web design. In short, usability is necessary but not sufficient.</p> <p>3. Desirable</p> <p>Our quest for efficiency must be tempered by an appreciation for the power and value of image, identity, brand and other elements of emotional design.</p> <p>4. Findable</p> <p>We must strive to design navigable web sites and locatable objects, so users can find what they need.</p> <p>5. Accesible</p> <p>Just as our buildings have elevators and ramps, our web sites should be accessible to people with disabilities (more than 10% of the population). today, it's good business and the ethical thing to do. Eventually, it will become the law. Standards-based design for accessibility also supports access via mobile devices.</p> <p>6. Credible</p> <p>Thanks to some ground-breaking research out of Stanford's Persuasive Technologies Lab, we're beginning to understand the design elements that influence whether users trust and believe what we tell them.</p> <p>7. Valuable</p> <p>Finally, it's not just about the user. Our sites must deliver value to our sponsors. For non-profits, the user experience must advance the mission. With for-profits, it must contribute to the bottom line and improve customer satisfaction.</p> <p>From Ambient Findability (pg. 109)</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-5575502979183171025?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-39436190442844299202008-03-01T00:25:00.001-05:002008-03-01T00:25:48.482-05:00Information Hierarchies<p>It really is amazing the amount of information most people can absorb quickly if it's organized effectively. The 2 screens linked below illustrate this...</p> <p>Yahoo Desktop1:</p> <p><a href="http://lh3.google.com/christian.leskowsky/R8josphE0EI/AAAAAAAAACw/2Bz63Pf1aM8/before-page-hierarchy%5B3%5D?imgmax=800"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="332" alt="before-page-hierarchy" src="http://lh5.google.com/christian.leskowsky/R8jotJhE0FI/AAAAAAAAAC4/sCBEoCfo4vo/before-page-hierarchy_thumb%5B1%5D?imgmax=800" width="347" border="0" /></a> </p> <p>Yahoo Desktop2:</p> <p><a href="http://lh3.google.com/christian.leskowsky/R8jotphE0GI/AAAAAAAAADA/_7Hp0khnVag/after-page-hierarchy%5B4%5D?imgmax=800"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="292" alt="after-page-hierarchy" src="http://lh6.google.com/christian.leskowsky/R8jouZhE0HI/AAAAAAAAADI/e9Gep2vG2x0/after-page-hierarchy_thumb%5B2%5D?imgmax=800" width="355" border="0" /></a> </p> <p>Differences between the first and second screens:</p> <p>- 4 main content groupings: the search field, sidebar, main content area and tag cloud</p> <p>- Data grouped to align with user goals like music, photos and documents</p> <p>- Icons are used effectively to break up the different groups with the main content area</p> <p>- Even fonts are used to group similar items with categories</p> <p>[Proximity, shape, size and colour are all examples of some of the visual cues we'll use to group related things together.]</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-3943619044284429920?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-38725375834684590812008-02-24T02:48:00.001-05:002008-02-24T02:57:25.525-05:00H&R Block's Tango<p>H&R Block has taken their tax preparation offering in a radically new direction this year for your 2006 returns. Enter project Tango...</p> <p><a href="http://lh5.google.com/christian.leskowsky/R8Eh_3LcIUI/AAAAAAAAACg/njqjWwjDLrg/tango%20tax%20prep%20software%20making-of%20story-2%5B12%5D?imgmax=800"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="305" alt="tango tax prep software making-of story-2" src="http://lh5.google.com/christian.leskowsky/R8EhL3LcIRI/AAAAAAAAACk/GL6nqcVKVLU/tango%20tax%20prep%20software%20making-of%20story-2_thumb%5B10%5D?imgmax=800" width="400" border="0" /></a></p> <p>It runs in a browser like Firefox (shown above), but they've re-jigged the experience by getting rid of back/forward, refresh, et. al. Very slick!</p> <p>Check out their making of video: "The Journey Continues...". It feels like I'm reading an interactive comic book.</p> <p><a href="http://lh6.google.com/christian.leskowsky/R8EhMHLcISI/AAAAAAAAACo/D-Pm1Eg96c8/tango%20tax%20prep%20software%20making-of%20story%5B15%5D?imgmax=800"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="291" alt="tango tax prep software making-of story" src="http://lh4.google.com/christian.leskowsky/R8EhMnLcITI/AAAAAAAAACs/nZrzntHdBus/tango%20tax%20prep%20software%20making-of%20story_thumb%5B11%5D?imgmax=800" width="400" border="0" /></a> </p> <p>[Link: <a title="http://hrblock.com/tango/thejourney.html" href="http://hrblock.com/tango/thejourney.html">http://hrblock.com/tango/thejourney.html</a>]</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-3872537583468459081?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-41465026520884011862008-02-24T01:56:00.001-05:002008-02-24T01:58:02.219-05:00User Stories<p>Def'n: <em>"Those that are familiar with Agile approaches to software development are also familiar with the idea of a user story being a deliverable unit of business value within the context of a system."</em></p> <p>[Link: <a title="http://studios.thoughtworks.com/2008/2/19/forest-for-the-trees" href="http://studios.thoughtworks.com/2008/2/19/forest-for-the-trees">http://studios.thoughtworks.com/2008/2/19/forest-for-the-trees</a>]</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-4146502652088401186?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0tag:blogger.com,1999:blog-9125945520322172234.post-19138612015605379332007-12-09T11:31:00.002-05:002008-01-06T16:57:53.218-05:00Best is the Enemy of Good Enough...<p>I've written about this before, but the message is worth repeating now and then so I don't forget...</p> <p>Sometimes I'll spend hours on something I'm trying to get perfect. "This block of code could be cleaner." or "Progressing through this form doesn't feel very natural now does it?" It's a trap I fall into all the time. (Thankfully I'm getting a little better at catching myself on the edge.)</p> <p>That's not to say I shouldn't always be trying to do my best! I do however have to accept my best for what it is today, continue to learn from my experiences and improve.</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9125945520322172234-1913861201560537933?l=christian-leskowsky.blogspot.com'/></div>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com0