tag:blogger.com,1999:blog-91259455203221722342008-07-06T09:32:13.070-05:00Beautiful DesignChristianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comBlogger36125tag: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 />&#160; Mediums <br />&#160;&#160;&#160; projector <br />&#160;&#160;&#160; paper <br />&#160;&#160;&#160; web <br />&#160;&#160;&#160; devices <br />&#160;&#160;&#160;&#160;&#160; interactive <br />&#160;&#160;&#160;&#160;&#160; view <br />&#160;&#160;&#160;&#160;&#160; collab </p> <p>Need a visual language for your business <br />&#160; specific artwork <br />&#160; really resonates with your business</p> Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag: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> Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag: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>&quot;Get Elastic Ecommerce Blog&quot; 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> Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag: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 />&#160; Visual design <br />&#160; Interaction design </p> <p>User experience expectations have changed dramatically for the web </p> <p>Google Gears-&gt;Gears </p> <p>Gears Demo 1: <br />&#160; A neat demo was shown with gears being used as a background <br />&#160;&#160;&#160; processing thread <br />&#160; Common pattern for doing long running tasks <br />&#160;&#160;&#160; Spawn a background thread keeps the UI responsive <br />&#160;&#160;&#160; Can't really do that in the browser <br />&#160;&#160;&#160; Complex Javascript fights repainting... both share same thread <br />&#160;&#160;&#160; Gears can do this though!! </p> <p>Gears Demo 2: <br />&#160; Form History pattern <br />&#160;&#160;&#160; like Time Machine <br />&#160;&#160;&#160; Replacement for undo <br />&#160;&#160;&#160; Can go back in time to different states of form <br />&#160;&#160;&#160; Trying to implement undo is hard (instead of warning dialogs) <br />&#160;&#160;&#160;&#160;&#160; The browser has its own undo stack <br />&#160;&#160;&#160;&#160;&#160; 2 dueling undo stacks? -&gt; Confusion </p> <p>Gears is really amping up responsiveness! </p> <p>Gears Demo 3: <br />&#160; Demo-ed a growls like widget for web applications</p> <p>Unobtrusive Javascript: <br />&#160; An application that degrades gracefully in environments where <br />&#160; javascript/ajax might not be available <br />&#160;&#160;&#160; Progressive enhancement <br />&#160; Does your application still work?</p> Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag: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 &quot;Inpect Element&quot;. (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> Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag: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.Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag: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>Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag: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> Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag: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>&#160;</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>&#160;</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> Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag: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&gt;=&lt;value' , args : 1 , 'Define &lt;name&gt; to have value &lt;value&gt;.&#160; Creates a variable named &lt;name&gt; for use in the scripts and a property named &lt;name&gt; 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 &lt;&lt; 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> Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag: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 &quot;good&quot;. 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> Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag: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&#8230;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&#8217;s no way we can teach students everything they need to know. We&#8217;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&#8217;ve prioritized, in the curriculum, the skills, knowledge, and experiences we think they will need the most, but it&#8217;s just a start. Besides, there&#8217;s only so much you can learn in school. At some point, you need to learn &#8220;on-the-job&#8221; &#8212; whatever that job may be. So, we&#8217;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> Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag: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> Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag: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> Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag: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> Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag: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&amp;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: &quot;The Journey Continues...&quot;. 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> Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag: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>&quot;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.&quot;</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> Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag: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. &quot;This block of code could be cleaner.&quot; or &quot;Progressing through this form doesn't feel very natural now does it?&quot; 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> Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag:blogger.com,1999:blog-9125945520322172234.post-65951739083870262492007-11-30T00:07:00.001-05:002007-11-30T01:17:03.857-05:00Why do you use 3rd party libraries?I asked a co-worker why he decided to roll his own javascript remoting framework rather than use something like prototype that would do it all for him. He told me he'd looked into a few, but couldn't find one that just did remoting - they all came more than generously padded with extra cruft he didn't need. I can sympathize with his point of view, but he did get me thinking about the times I've been willing to take on the additional cognitive burden frameworks like Spring, Hibernate, Struts2, etc. add to my projects. Here's what I came up:<br /><br /><ul><li>3rd party libraries are maintained by other people. To put another way, 3rd party libraries are not maintained by me. Which means bugs I get bug fixes for free.</li><li>They're usually the bits of my application that I consider plumbing ie. unrelated to the business problem I'm trying to solve. (eg. Spring, Hibernate) Why am I spending time on problems that don't add value to my project?<br /></li><li>Each major revision of a library is more polished/refined than the last. Better abstractions, shifts towards external configuration by xml, shifts back to configuration in code by annotations/intelligent defaults are some of the ways libraries have evolved in recent past to make using them easier.<br /></li><li>The very best are used by thousands of developers which makes them battle hardened aka. production ready. Odds are somebody somewhere has run up against bugs I would have otherwise hit in my project. Thanks Somebody!</li></ul>That's all I've got for now. If I think of any more, I'll add them.Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag:blogger.com,1999:blog-9125945520322172234.post-18418716692561109292007-11-10T11:11:00.001-05:002007-11-10T11:53:47.094-05:00My new Eee pc!I have no trouble whatsoever seeing this little device becoming indispensable to me. Out of the box, it comes with more than enough software to satisfy the needs of the 80%-ile. (Internet, productivity, media management/playback and games are all well represented.) I thought the "friendly" UI Asus developed would be the first thing I turned off but there are a few things it does right that eventually sold me on it:<br /><br />- The applications I use the most are maximized by default and can't be made smaller - Firefox, OpenOffice, etc. Asus specifically tailored the experiences of these applications for it's new platform and done it well.<br />- The little home key automatically minimizes everything instantly so you can see the dashboard. (It brings up the last application you were working in if you hit it again. Again this is instantaneous.) I use this all the time to start new applications.<br />- My favourite apps couldn't be easier to find. (Web browser, word processor, presentations.)<br /><br />(Compare that to the advanced view: 1. Apps wouldn't maximize on their own - I found I was doing this myself all the time. 2. The home key brings up KDE's start menu. 3. Applications were harder to find buried as they are in the start menu under multiple levels of submenus I'm not familiar with coming from Windows.)<br /><br /><a href="http://www.flickr.com/photos/angryfraggle/1950180100/" title="Photo Sharing"><img src="http://farm3.static.flickr.com/2094/1950180100_71f419ee3c.jpg" width="500" height="375" alt="IMG_1024" /></a><br /><br />Thanks Asus!Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag:blogger.com,1999:blog-9125945520322172234.post-53659699387313429032007-10-24T22:58:00.000-05:002007-10-24T22:59:47.309-05:00Scott's Grails/GORM talk...Scott Davis: davisworld.org<br /><br />used in grails stack<br />gorm: grails object/relational mapper<br /><br />thin wrapper over hibernate<br /><br />google: grails rails performance<br /><br />[what is quartz?]<br /><br />hibernate knowledge transferrable here<br /> can override default gorm behaviour<br /> .hbm files<br /><br />can map domain classes to tables with different names<br /> normally it's pogo name == table name<br /><br />nice dsl for gorm coming in grails 1.0-rc1 <br /><br />grails shell lets you connect to running application and query data<br />using app domain objects<br /><br />select * from artist<br /> * == splat<br /><br />See dynamic sorted list! awesome!<br />Simple dynamic queries<br /><br />Relationships are pretty damn cool too<br /> see 1-1 slide<br /><br />send thx!<br />email: scottdavis99@yahoo.comChristianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag:blogger.com,1999:blog-9125945520322172234.post-55820870188815961572007-10-24T22:55:00.000-05:002007-10-24T22:57:25.202-05:00Scott's Advanced Grails talk...quote: make easy things easy, hard things possible<br /><br />many-many relationships not easy<br /> but possible<br /><br />grails brings together lots of popular java libs/frameworks<br /> grails uses spring mvc for views<br /> user auth uses spring acegi<br /><br />google: many to many relationship grails<br /> managed by hand in domain class<br /> see BookAuthor class/slide<br /> not a bad solution<br /><br />get on grails mailing list->codehaus project<br /><br />grails ships with prototype, scriptaculous, yui out of the box<br /> in view:<br /> <g:javascript library="..."/><br /> emits &gt;script src=... tag into response<br /><br />take a look at:<br /> google: cos.jar<br /> manages file upload nicely<br /> + others<br /> project: "com.oreilly.servlet"<br /><br />file upload is nice<br /> uses spring under the covers<br /><br />security through acegi<br /> need to install plugin<br /> gem-like: <br /> grails list-plugins<br /> grails install the_plugin<br /> grails.org: jsecurity pluginChristianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag:blogger.com,1999:blog-9125945520322172234.post-9866904692181057492007-10-24T22:00:00.000-05:002007-10-24T22:57:46.079-05:00No Fluff wrapped up...I never did get a chance to write about my experience at No Fluff last weekend in real-time, but I've decided to put up some notes from a few of my fave sessions for posterity's sake. Scott Davis's Groovy/Grails track was by far my favourite. JSF/Seam/GWT et al were interesting to be sure, but more evolutionary IMHO. Grails on the other hand (which has, admittedly, borrowed rather generously from certain other frameworks du jour) was just neat-o!Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag:blogger.com,1999:blog-9125945520322172234.post-73771045010726307412007-10-19T09:30:00.001-05:002007-10-24T22:55:34.668-05:00No Fluff Just Stuff - Toronto has just rolled into town...... and I'm attending! This being my first time, I expect all the presentations will be fresh and *hopefully* exciting. I'll be sticking to the JSF, Grails and Spring 2.0 streams primarily as they seem most relevant/interesting to me, but the truth of the matter is it was really hard to choose sessions - they all look good. I'll be updating my blog throughout the day if I can - hopefully they have wifi at the hotel's conference center - otherwise expect updates in the evening.<br /><br />See ya there!Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.comtag:blogger.com,1999:blog-9125945520322172234.post-89266470054377417962007-08-29T19:15:00.000-05:002007-08-29T19:23:18.817-05:00Parallel ThinkingHas anyone else noticed the attention a little known language - Erlang - has been getting in recent past? It just hit me... it's an attempted shift away from more megahertz will save me, towards multiple cores will save me. Programmers everywhere are trying to find a better way to model concurrent systems. Getting shared memory systems right is just plain hard. Looks like Erlang may be my language to learn this year. :-)Christianhttp://www.blogger.com/profile/05075534189763405236noreply@blogger.com