<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Mindful Technology</title>
	<atom:link href="http://mindfultechnology.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://mindfultechnology.wordpress.com</link>
	<description>improving people's lives, one bit at a time</description>
	<lastBuildDate>Tue, 18 Aug 2009 19:42:49 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='mindfultechnology.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/0f66c40575b18eec53116a4b38d49066?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Mindful Technology</title>
		<link>http://mindfultechnology.wordpress.com</link>
	</image>
			<item>
		<title>Protect your Site from Bots and Help Digitize Books</title>
		<link>http://mindfultechnology.wordpress.com/2009/06/01/protect-your-site-from-bots-and-help-digitize-books/</link>
		<comments>http://mindfultechnology.wordpress.com/2009/06/01/protect-your-site-from-bots-and-help-digitize-books/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 20:36:42 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
				<category><![CDATA[none]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://mindfultechnology.wordpress.com/?p=89</guid>
		<description><![CDATA[Having investigate multiple different CAPTCHA solutions to prevent spam bots or &#8220;not so serious&#8221; visitors from registering for a site&#8217;s account, I am can highly suggest reCAPTCHA. It is a very secure implementation that will also make good use of the time people spend entering answers to challenges by using part of the answers to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=89&subd=mindfultechnology&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Having investigate multiple different CAPTCHA solutions to prevent spam bots or &#8220;not so serious&#8221; visitors from registering for a site&#8217;s account, I am can highly suggest <a href="http://recaptcha.net/">reCAPTCHA</a>. It is a very secure implementation that will also make good use of the time people spend entering answers to challenges by using part of the answers to digitize books.</p>
 Tagged: development, productivity, usability <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mindfultechnology.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mindfultechnology.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mindfultechnology.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mindfultechnology.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mindfultechnology.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mindfultechnology.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mindfultechnology.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mindfultechnology.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mindfultechnology.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mindfultechnology.wordpress.com/89/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=89&subd=mindfultechnology&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mindfultechnology.wordpress.com/2009/06/01/protect-your-site-from-bots-and-help-digitize-books/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8757731f313f53b0c15c812ddda213c1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TJ</media:title>
		</media:content>
	</item>
		<item>
		<title>12 Steps to Better Code &#8211; Revised, now 7</title>
		<link>http://mindfultechnology.wordpress.com/2009/05/11/12-steps-to-better-code-revised/</link>
		<comments>http://mindfultechnology.wordpress.com/2009/05/11/12-steps-to-better-code-revised/#comments</comments>
		<pubDate>Tue, 12 May 2009 07:21:03 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
				<category><![CDATA[none]]></category>

		<guid isPermaLink="false">http://mindfultechnology.wordpress.com/?p=64</guid>
		<description><![CDATA[Note: This is a work in process, but I wanted to get it out &#8220;as is&#8221; to see what others think.
Unit testing is now such a paramount part of producing quality software that its absence from the list alone necessitates a revision of Joel&#8217;s 12 Steps to Better Code. There are other enhancements to include based on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=64&subd=mindfultechnology&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Note: This is a work in process, but I wanted to get it out &#8220;as is&#8221; to see what others think.</p>
<p class="synopsis">Unit testing is now such a paramount part of producing quality software that its absence from the list alone necessitates a revision of <a href="http://www.joelonsoftware.com/articles/fog0000000043.html">Joel&#8217;s 12 Steps to Better Code</a>. There are other enhancements to include based on what we have learned in the almost 9 years since their original publication. Also, 7 Steps sounds sexier.</p>
<p>So here&#8217;s my revised list. Use these steps to evaluate a software organization the same <em>quick-and-dirty</em> way Joel describes in his original article.Remember, there is <a href="http://en.wikipedia.org/wiki/No_Silver_Bullet">no silver bullet</a>.</p>
<ol>
<li>Do you have (something at least resembling) a spec that <strong>solves a real user/business problem</strong>?</li>
<li>Do your developers have <strong>frequent code design sessions</strong> and <strong>mutual code reviews</strong>?</li>
<li>Do you use unit and regression tests that are <strong>very easy to write</strong> and execute?</li>
<li>Do you have automated continuous builds that include running all unit and integration tests?</li>
<li>Do programmers have quiet working conditions and regular, 40-hour-week work schedules?</li>
<li>Do you have testers with input in the development life cycle <strong>and</strong> the requirements?</li>
<li>Do you have an integrated system for bug tracking, development tasks, source control browsing/statistics and a wiki?</li>
</ol>
<p>Compared to the original list, I enhanced and combined some of the original items, added a few and re-ordered the whole list. I also dropped a lot (see below). In addition to applying my own experience as a software development team member, I integrated a few ideas repeated in other comments on the original list. I purposefully avoided buzz words such as <em><a href="http://agilemanifesto.org/">agile</a></em> or <em>pair programming</em>, because they are mostly polarizing and would distract from the real goal of this (and the original) test: evaluate the quality of your software development process and have a simple guideline for improving it.</p>
<p>Before I go into detail about the items on the list, I want to comment on what I dropped:</p>
<p><strong>Original 1. Do you use source control?</strong> From a perspective of necessity to the software development process, using source control, even if you are the only one on the project, is equivalent to providing electricity to your computer. I am not going to put the latter on the list, either.</p>
<p><strong>Original 2. Can you make a build in one step?</strong> I removed this for two reasons: First, it is inherent in the new step 4. Second, tools for doing very sophisticated things with builds are readily availably nowadays (Ant, NAnt, <a href="http://www.scons.org/">SCons</a>, <a href="http://cruisecontrol.sourceforge.net/">Cruise Control</a> &#8230;).</p>
<p><strong>Original 5. Do you fix bugs before writing new code?</strong> This did not really get dropped, but it may be hard to recognize as inherent to step 3 of the new list. More details on this below.</p>
<p><strong>Original 6. Do you have an up-to-date schedule?</strong> This is not always applicable based on context and it&#8217;s also a very controversial item with no simple solution. Most software teams have experienced that meeting a schedule is a rare event, even if you keep moving the delivery date. Some teams try to solve the problem with frequent, small release cycles; other teams try to find different solutions. In essence, how this problem gets solved has often more to do with actual business requirements than with the quality of your software development process. Adhering to the 7 steps in the new list while at the same time meeting business requirements will essentially <em>force</em> this problem into a particular, workable solution. Also, since step 4 is essentially assuring that there is (almost) always releasable software, it may provide management with an opportunity to make more flexible release decisions.</p>
<p><strong>Original 9. Do you use the best tools money can buy?</strong> Depending on your context, the best tools are actually free nowadays. You should still have the best tools, but what they are is so specific to a particular team&#8217;s requirements that it is quite difficult to evaluate a team based on the ones used.</p>
<p><strong>Original 11. Do new candidates write code during their interview?</strong> As much as <strong>I</strong> would like that to happen, team environments differ so significantly that this just is not a reliable indicator for a functioning software development process. What about open source projects that don&#8217;t <em>hire</em> people? There are many ways to evaluate a new team member and integrate him/her in the existing team process that are better than the traditional interview. One is to have a conditional agreement and get the new guy/gal to write code.</p>
<p><strong>Original 12. Do you do hallway usability testing?</strong> What if there is no hallway? Teams differ too widely in their structure to make this an indicator for a good process. The requirement that the end-result of a functioning process <strong>must be usable</strong> is embedded in the new steps. But usable does not always mean usable by an end-user. A software component, for example, must be easily usable by other software developers; &#8220;hallway&#8221; testing in the way Joel described it is not going to help there. Steps 2 and 7 on the new list may.</p>
<h1>The new 7 Steps to Better Code</h1>
<h3>1. Do you have (something at least resembling) a spec that solves a real user/business problem?</h3>
<p><strong>This is the most important step, period.</strong> If you find a team that writes software without this, run. Not having to solve a real, existing, validated user or business problem will guarantee that requirements change in such extreme ways that they cannot be reasonably accommodated or even anticipated with any of the other 6 steps. Schedules will never be met (because early releases will demonstrate incorrect or insufficient requirements) and everyone will be frustrated from very early on. It&#8217;s a vicious cycle. It&#8217;s like taking a road trip without an idea where you are going, just because it sounds like fun. But everyone in the car will be screaming and cussing.</p>
<p>I am repeating this in different words because it&#8217;s so important: Make sure that what your team is building is needed. It could be written on a napkin, but it&#8217;s has been validated to be a real need. Otherwise, don&#8217;t bother.</p>
<h3>2. Do your developers have frequent code design sessions and mutual code reviews?</h3>
<p>This step migrated from the bottom of my first draft to almost the top because besides having something real to build, I have come to experience this step as absolutely fundamental to building quality software. Frequent design and code reviews may be new to some and not be going far enough for others. A third group of people might experience some serious discomfort on reading this, because it affects the developer&#8217;s ego. Even if you are a team of one, have someone else look over your ideas of how you want to build software. Doing so causes several things to happen:</p>
<ol>
<li>You will seriously think through the problem first before writing any code, because you will have to talk to someone else about why you think your approach is correct.</li>
<li>While working on 1., you will uncover any deficiencies in the requirements given to you, before you wasted time writing code solving the wrong problem; even before you wasted another programmers time reviewing your design.</li>
<li>Both code design sessions and code reviews will dramatically enhance code quality. I consider myself a decent software engineer, but none of the stuff I come up with on my own is half as good as what I produce if I cooperate with another developer on it, even if the other developer is less skilled.</li>
<li>Less skilled developers will quickly improve their coding and design skills as a result of the frequent interaction with more advanced programmers.</li>
</ol>
<p>I have experience with pair programming and love doing it. But, in today&#8217;s typical software business environments, it simply is <strong>not reasonable</strong> to expect two people to sit next to each other 6 to 8 hours a day while only one of them is writing code. An average of one hour per developer per day doing code design sessions and mutual code reviews with feedback will go almost as far as pair programming in code quality improvements and team education/IP transfer, with much lower personnel costs.</p>
<h3>3. Do you use unit and regression tests that are <strong>very</strong> easy to write and execute?</h3>
<p>Even though I frequently interact with developers who see unit testing as an afterthought, my own experience with <a href="http://en.wikipedia.org/wiki/Test-driven_development">Test-driven Development</a> has proven to me that this is by far the best way I, as an individual, can produce quality software. In order for the individual programmer to even be able to use TDD, the software process/environment must make it extremely easy to write and execute tests. This has further-reaching implications than most realize:</p>
<p>First, the <em>tools</em> for unit testing must be available, and if they are not, they need to be devised first. This is true whether you are writing a web application, a scientific application, an embedded or mobile application or a device driver. Your ability to take the smallest unit of code and test it independently of the rest of the system will enable you to produce very high quality code.</p>
<p>Second, as a corollary, this approach forces you to design your software system so that you even <em>can</em> isolate every small unit of functionality. That is very important for future code quality: On the one hand it makes the components of your system as independent as possible, allowing you to easily replace each of them with new implementations down the road to accommodate new requirements. On the other hand, it enables you to enhance <a href="http://en.wikipedia.org/wiki/Code_coverage">code coverage</a> as well as write robust regression tests down the road, which is important, because it is unlikely that you are starting out with <a href="http://www.sqlite.org/testing.html">100% statement or branch coverage</a>.</p>
<p>Third, in combination with the &#8220;pass&#8221; requirement described in step 4, this step means that every new bug gets a regression test that must pass before new software can be written.</p>
<p>Forth, the entire system needs to be flexible and should be able to be &#8220;brought up&#8221; automatically into which-ever state is needed. See the next step for more about that:</p>
<h3>4. Do you have automated continuous builds that include running all unit and integration tests?</h3>
<p><em>Build</em> in this context means something that automatically composes your system in its entirety and executes a vigorous functional validation test suite against it. It doesn&#8217;t just mean <em>compile</em>, which is not applicable in many contexts anyway. There are some contexts in which even the automated acceptance tests have part of the system stubbed out, for example when writing embedded software. But if you <em>can</em> feasibly devise a system that is equivalent to the final deployment, even if it takes extra work, then you should make the effort. For example, if there is any way that you can get your embedded code to automatically deploy to that FPGA chip you are trying to program, you should attempt to make it happen and write a test suite against the actual chip. If you are writing legacy FORTRAN code, find a way to emulate your entire system and run the tests against that.</p>
<p>+ whatever Joel had to say on the one-step build.</p>
<p><strong>There is no excuse for not doing continuous testing.</strong></p>
<p>The principle behind this step is that new code must never break the build; and if it is broken, it&#8217;s the first thing that gets addressed before anything else. As a consequence, bugs are always fixed first, because a new regression test for an existing bug would break the build until the bug is fixed.</p>
<p>The immediate business benefit is two-fold: On one hand, this approach provides a level of business process stability and security, because business owners can asses the state of the product simply by analyzing the result of the latest continuous build (which they should be able to do easily). On the other hand, it provides scheduling flexibility, because business owners can make release decisions for any of the passed builds.</p>
<p>Because many software projects have multiple concurrent release cycles in various release states and therefore keep multiple branches of code around, this step forces every single component of the system to be designed with the utmost flexibility. An often overlooked component are database systems, which, as a consequence of steps 3 and 4, need to be automated in their creation and management. The initial effort to getting this done right will result in significant savings down the road.</p>
<h3>5. Do programmers have <a href="http://c2.com/cgi/wiki?ProgrammingOutsideTheCube">quiet working conditions</a> and regular, 40-hour-week work schedules?</h3>
<p>The same arguments that Joel had 9 years ago all still apply and it&#8217;s sad to see that we haven&#8217;t made much progress &#8230; despite there being so much evidence out there collected by others that support this point so sufficiently that the best I can do is repeat it:</p>
<ol>
<li>Don&#8217;t kill the <em><a href="http://en.wikipedia.org/wiki/Peopleware#Peopleware:_Productive_Projects_and_Teams">zone</a></em>, because it is expensive to get back into it.</li>
<li>Remember the <a href="http://en.wikipedia.org/wiki/Diminishing_returns">law of diminishing returns</a>. More work does not necessarily mean more (or better) output. It usually means the opposite.</li>
</ol>
<h3>6. Do you have testers with input in the development life cycle <strong>and</strong> the requirements?</h3>
<p>What good is testing if it is not used to find problems? What if the problem is not a bug in the software, but something else, for example, in the process or with the requirement? What if a usability tester can spot a usability bug in the requirements <strong>before any code is ever written</strong>? Human testing must be used to uncover all the problems that cannot be found with automated tests. Depending on a team&#8217;s composition, testers may not even write any automated tests, but simply observe or review them for correctness.</p>
<p>The biggest issue is if there is no independent quality control, someone to keep requirement writers and software developers on their toes to build quality software; the kind of quality control that rejects code changes if there is not sufficient unit test coverage, the kind that protects developers against silly requirements, the kind that in very few teams actually exists.</p>
<p>In small teams, anyone may be a tester and it may be beneficial to the quality of the final product to give everyone the ability to veto requirements, design, code or even test results.</p>
<h3>7. Do you have an integrated system for bug tracking, development tasks, source control browsing/statistics and a wiki?</h3>
<p>One would think this should be treated like source control, and hopefully in 9 years from now we can do that. But the current state of affairs in many teams is what I call the &#8220;SharePoint&#8221; problem: multiple bug tracking systems, word documents, spreadsheets, tables, wiki entries, lists, text notes, print-outs, JPEGs, Photoshop and Illustrator files and who knows what are littered over many servers and drives, with many duplicates and no way of finding anything. Some people try to solve this problem by installing a full text search system against the entire mess only to find out that for any reasonable search they find hundreds of unorganized documents or nothing. Or there is no reasonable search term to define.</p>
<p>All communication, requirements, comps, tasks, bugs, and documentation need to be in a single place. E-mail should never contain specifications. At best, it must only contain a link to a wiki page that has the specifications on it so it can be discussed there. If the source code is the specification, create a new tracking item for the discussion pointing to the code and e-mail the link to the tracking item. That requires whatever system you are using to support the easy creation of links to pretty much any item in it. At best, don&#8217;t use e-mail for this stuff at all, but have a good notification system.</p>
<p>For every modification to be done to the system, there ought to be a tracking item that allows visibility into the change for all stake holders: the business owner, the developer and the tester. This is true for any software project.</p>
<p>Without such a system, it&#8217;s hard to do any of the other 6 reasonably efficiently.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mindfultechnology.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mindfultechnology.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mindfultechnology.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mindfultechnology.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mindfultechnology.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mindfultechnology.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mindfultechnology.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mindfultechnology.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mindfultechnology.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mindfultechnology.wordpress.com/64/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=64&subd=mindfultechnology&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mindfultechnology.wordpress.com/2009/05/11/12-steps-to-better-code-revised/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8757731f313f53b0c15c812ddda213c1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TJ</media:title>
		</media:content>
	</item>
		<item>
		<title>Debugging Adobe AIR Applications with Aptana Studio</title>
		<link>http://mindfultechnology.wordpress.com/2009/02/11/debugging-adobe-air-applications-with-aptana-studio/</link>
		<comments>http://mindfultechnology.wordpress.com/2009/02/11/debugging-adobe-air-applications-with-aptana-studio/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 22:35:52 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
				<category><![CDATA[none]]></category>

		<guid isPermaLink="false">http://mindfultechnology.wordpress.com/?p=57</guid>
		<description><![CDATA[Aptana&#8217;s AIR plugin is providing (almost) full debugging support for Adobe AIR.
I consider any platform production-ready when you have an IDE with full debugging support available for it. The simple reason is that being able to debug code using breakpoints and step-by-step execution makes me at least 10 times faster (rough estimate) in finding bugs [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=57&subd=mindfultechnology&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="synopsis">Aptana&#8217;s AIR plugin is providing (almost) full debugging support for Adobe AIR.</p>
<p>I consider any platform production-ready when you have an IDE with full debugging support available for it. The simple reason is that being able to debug code using breakpoints and step-by-step execution makes me at least 10 times faster (rough estimate) in finding bugs or understanding someone else&#8217;s code. This is a significant difference, because it means I am either able to find and fix a bug, including writing a test for it in half an hour with a debugger versus a whole day without it.</p>
<p><a href="http://www.adobe.com/products/air/">Adobe AIR</a> is an appealing environment for cross-platform application development, especially for a web-focused developer like me. <a href="http://www.aptana.com/">Aptana</a> recently released an <a href="http://www.aptana.com/air">Adobe AIR plugin</a> for their Studio product that allows full debugging of JavaScript right from within the IDE. From a productivity-focused developer perspective, this makes AIR now an option.</p>
<p>Their are still a few bugs in the plugin (it&#8217;s &#8220;beta&#8221;). I am sure they will be fixed soon; one bug I filed with Aptana&#8217;s issue tracker got attention within minutes.</p>
<p>UPDATE: The one bug I had encountered was already fixed in their latest beta. Yeah!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mindfultechnology.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mindfultechnology.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mindfultechnology.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mindfultechnology.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mindfultechnology.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mindfultechnology.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mindfultechnology.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mindfultechnology.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mindfultechnology.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mindfultechnology.wordpress.com/57/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=57&subd=mindfultechnology&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mindfultechnology.wordpress.com/2009/02/11/debugging-adobe-air-applications-with-aptana-studio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8757731f313f53b0c15c812ddda213c1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TJ</media:title>
		</media:content>
	</item>
		<item>
		<title>HP ScanJet on Mac OS X (or any scanner, for that matter)</title>
		<link>http://mindfultechnology.wordpress.com/2008/12/30/hp-scanjet-scanner-on-mac-os-x/</link>
		<comments>http://mindfultechnology.wordpress.com/2008/12/30/hp-scanjet-scanner-on-mac-os-x/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 01:26:05 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
				<category><![CDATA[none]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[open-source]]></category>

		<guid isPermaLink="false">http://mindfultechnology.wordpress.com/?p=43</guid>
		<description><![CDATA[Using a USB legacy scanner for Mac OS X can be accomplished with this set of TWAIN/SANE tools based on the SANE implementation for *NIXes.
Since it took me a while to find what I needed to get my old HP ScanJet 5470c to work on Mac OS X (10.5), I wanted to post this link [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=43&subd=mindfultechnology&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="synopsis">Using a USB legacy <strong>scanner</strong> for Mac OS X can be accomplished with <a href="http://www.ellert.se/twain-sane/">this set of TWAIN/SANE tools</a> based on the <a href="http://www.sane-project.org/">SANE implementation</a> for *NIXes.</p>
<p>Since it took me a while to find what I needed to get my old <strong>HP ScanJet 5470c</strong> to work on <strong>Mac OS X (10.5)</strong>, I wanted to post this link accompanied by some of the keywords for scanners that others may use (so they&#8217;ll have an easier time finding it on search engines):</p>
<p><a href="http://www.ellert.se/twain-sane/">http://www.ellert.se/twain-sane/</a></p>
<p>This site lists several binary packages which should make your scanner work for you, too &#8230; after you installed them in the following order:</p>
<ol>
<li>gettext</li>
<li>libusb</li>
<li>SANE backends (installs all, even though you may only need the HP 54XX one)</li>
<li>SANE Preference Pane</li>
<li>TWAIN SANE Interface</li>
</ol>
<p>After installing all these, go to the SANE Preference Pane and disable all the backends you don&#8217;t need (at least that&#8217;s what I did; it works for me, but I don&#8217;t know if it&#8217;s necessary). Next I clicked on <strong>Configure</strong> and then <strong>OK</strong>; without this step, apparently, the SANE/TWAIN interface is not activated. After closing the preference pane and entering my password to store the settings, I opened Image Capture. A preview dialog popped up and my already connected scanner did a quick preview scan. From there I was able to scan the document on the flatbed.</p>
<p>If this does not happen for you, make sure your scanner is properly connected. By going to the Apple Menu &gt; <strong>About This Mac</strong> &gt; <strong>More Info</strong>, you get access to the <strong>System Profiler</strong>. One of the last entries in the left column under hardware should be <strong>USB</strong>. After selecting this entry, the right panel should show the <strong>USB Device Tree</strong>. Make sure your scanner shows up in that list.</p>
<p>If that still does not help, try restarting your <strong>Mac</strong>, although that should not be necessary.</p>
<p>I presume this works for pretty much any scanner listed in <a href="http://www.sane-project.org/sane-supported-devices.html">SANE&#8217;s Supported Devices List</a>, but it may be of particular interest for legacy devices such as:</p>
<p>Hewlett-Packard ScanJet 2100c, 2200c, 2300c, 3300c, 3400c, 3500c, 3530c, 3570c, 3800c, 3970c, 4070 Photosmart, 4100c, 4200c, 4200cse, 4200cxi, 4300c, 4300c Silitek, 4370c, 5200c, 5300c, 5370c, 5400c, 5470c, 5490c, 5550c, 5590c, 6200c, 6250c, 6300c, 6350c, 6390c, 7400c, 7450c, 7490c, 7650c, 8200c, 8250c, 8290c, G3010</p>
 Tagged: business, mac, open-source <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mindfultechnology.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mindfultechnology.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mindfultechnology.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mindfultechnology.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mindfultechnology.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mindfultechnology.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mindfultechnology.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mindfultechnology.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mindfultechnology.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mindfultechnology.wordpress.com/43/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=43&subd=mindfultechnology&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mindfultechnology.wordpress.com/2008/12/30/hp-scanjet-scanner-on-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8757731f313f53b0c15c812ddda213c1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TJ</media:title>
		</media:content>
	</item>
		<item>
		<title>From No Clue to 3 Websites with Django in 1 week</title>
		<link>http://mindfultechnology.wordpress.com/2008/07/18/three-websites-django-one-week/</link>
		<comments>http://mindfultechnology.wordpress.com/2008/07/18/three-websites-django-one-week/#comments</comments>
		<pubDate>Sat, 19 Jul 2008 07:59:19 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
				<category><![CDATA[none]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://mindfultechnology.wordpress.com/?p=15</guid>
		<description><![CDATA[I started &#8220;40 hours ago&#8221; without much knowledge of Python or Django (I had played with both for a couple hours a while back). Now I have three mini-sites using the Django framework live.
Thus, my first few experiences with Django on Python have been remarkable. First some
Story-telling
(The meat and potatoes are below &#8230;)
1) My wife [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=15&subd=mindfultechnology&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="synopsis">I started &#8220;40 hours ago&#8221; without much knowledge of Python or Django (I had <em>played</em> with both for a couple hours a while back). Now I have three mini-sites using the Django framework live.</p>
<p>Thus, my first few experiences with <a href="http://www.djangoproject.com/">Django</a> on <a href="http://www.python.org/">Python</a> have been remarkable.<span id="more-15"></span> First some</p>
<h1>Story-telling</h1>
<p>(<a href="#meat_potatos">The meat and potatoes are below &#8230;</a>)</p>
<p><a href="http://mindfultechnology.files.wordpress.com/2008/07/screenshot_day_care.jpg"><img class="alignright size-medium wp-image-21" src="http://mindfultechnology.files.wordpress.com/2008/07/screenshot_day_care.jpg?w=240&#038;h=168" alt="" width="240" height="168" /></a>1) My wife started a home-based <a href="http://www.day-care-tigard.com/">child care business for the Tigard (Oregon) area</a>. I put together a mini-website that lets her edit page content, add pages and manage an activity log that is accessible only to registered parents. More work is necessary, especially for content. I was focusing on high ranking in Google when doing keyword research, registering the domain name and putting content together, but I was a little surprised to see this site come up in the first position of the SERP for the query <a href="http://www.google.com/search?q=day+care+tigard">&#8220;day care tigard&#8221;</a> a few days after posting it. The challenge now is to make it first for <a href="http://www.google.com/search?q=child+care+tigard">&#8220;child care tigard&#8221;</a> &#8230; but I have a few ideas.</p>
<p><a href="http://mindfultechnology.files.wordpress.com/2008/07/screenshot_ecofarms.jpg"><img class="alignright size-medium wp-image-22" src="http://mindfultechnology.files.wordpress.com/2008/07/screenshot_ecofarms.jpg?w=240&#038;h=168" alt="" width="240" height="168" /></a>2) We updated the previous <em>splash</em> site for EcoFarms International, LLC, which specializes in <a href="http://www.ecofarmsintl.com/">growing organic produce year-round</a>. The business users can now post &#8220;newsletters&#8221; (similar to blog entries) either as a new page or as a PDF upload. The key functionality is the newsletter notification, which is sent to people who signed up for it. I am working on making this a little bit more robust along the lines of <a href="http://foreclosures-4-investors.com/">Foreclosures 4 Investors</a>, for which I implemented a system that sends on the order of 100,000 <strong>opt-in</strong> e-mails per month. The business users also get statistics regarding how often recipients click on links in the notifications.</p>
<p><a href="http://mindfultechnology.files.wordpress.com/2008/07/screenshot_wedding_website.jpg"><img class="size-medium wp-image-24 alignright" src="http://mindfultechnology.files.wordpress.com/2008/07/screenshot_wedding_website.jpg?w=240&#038;h=168" alt="" width="240" height="168" /></a>3) A good friend of mine <a href="http://www.candice-and-jesse.com/">is getting married</a>, so I put together a simple site with an RSVP form. I spent most of the time on the design (of the website and an invitation), which was based on work provided by <a href="http://www.bentabb.com/">Ben Tabb, a web designer here in Portland</a>.<br />
<a name="meat_potatos"></a></p>
<h1>The mythical man week</h1>
<p>All three sites together took less than 40 <em>weekend-only-early-morning-and-night</em> hours (the weekdays where slammed with my work at <a href="http://www.aisle7.net">Aisle7</a>). That includes (almost) all design work, all markup and styling work, all programming and framework configuration, all the time spent setting up the sites at the <a href="http://www.webfaction.com/">hosting provider</a> and all client communication.</p>
<h1>Stunned and humbled</h1>
<p>That&#8217;s not bad for three projects. Especially considering that when I started, <em><strong>I had very little&#8211;virtually no&#8211;experience either in programming Python or working with the Django Framework</strong></em>. The 40 hours also included me setting up an appropriate development environment after researching the options, learning &#8220;pythonic&#8221; programming, reading the relevant Django documentation and diving into the framework. I spent parts of this man week debugging mistakes like <code>('not a tuple')</code> instead of <code>('a tuple'<strong>,</strong>)</code> and learning about <a href="http://mail.python.org/pipermail/python-ideas/2007-January/000073.html">mutable function parameter defaults</a> (thanks to <a href="http://www.logilab.org/857">PyLint</a><a href="#pylint"><sup>[1]</sup></a>, and no, I don&#8217;t think it&#8217;s a <em>wart</em>) as well as the intricacies of the PYTHON_PATH. I fixed a bug locally in the Django framework that caused the <code>ConditionalGetMiddleware</code> not to function properly (a later update from trunk applied the exact same fix). And I found a <a href="http://www.hare.demon.co.uk/pysmtp.html">simple SMTP server</a> written in Python that I could use to test the notification function and the RSVP form locally. Having <a href="http://www.webfaction.com/">WebFaction</a> as a hosting provider enabled me, <em>within this time frame</em>, to also configure <a href="http://trac.edgewall.org/">trac</a> (including the Eclipse <a href="http://wiki.eclipse.org/Mylyn/SOC/2006/Trac_Connector">Mylyn-trac integration</a>) and SVN (including post-commit e-mail notifications for our loosely coupled team). I don&#8217;t know of any other platform/tool combination that would allow (me) this level of productivity.</p>
<p>BTW, I spent an estimated 4 of those 40 hours fixing CSS styling issues around IE 6 quirks, which shows how much this browsers really sucks. (Or how poor my CSS skills are? Nah, that can&#8217;t be it &#8230;)</p>
<h1>The right tool for the right job</h1>
<p>Django is great to work with, but it helped to have a certain development environment setup: I run <a href="http://pydev.sourceforge.net/">PyDev</a> on Eclipse (including the extensions). I have the Django SVN trunk checked out and configured as a project in Eclipse. Each new project gets the Django project as a dependency, which gives me code completion and automatic import statement generation. This configuration also enables me to click on any Django class or method and jump directly to the source, which is better than any documentation.</p>
<p>I am fairly new to Python, and I am already very excited about the language. What impresses me is the brevity of the code that is achieved without relying on hacky shortcuts&#8211;all the syntax clutter was simply left out.</p>
<hr /><a name="pylint">[1] </a>The number of steps needed getting PyLint to work justify a separate post.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mindfultechnology.wordpress.com/15/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mindfultechnology.wordpress.com/15/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mindfultechnology.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mindfultechnology.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mindfultechnology.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mindfultechnology.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mindfultechnology.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mindfultechnology.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mindfultechnology.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mindfultechnology.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mindfultechnology.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mindfultechnology.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=15&subd=mindfultechnology&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mindfultechnology.wordpress.com/2008/07/18/three-websites-django-one-week/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8757731f313f53b0c15c812ddda213c1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TJ</media:title>
		</media:content>

		<media:content url="http://mindfultechnology.files.wordpress.com/2008/07/screenshot_day_care.jpg?w=300" medium="image" />

		<media:content url="http://mindfultechnology.files.wordpress.com/2008/07/screenshot_ecofarms.jpg?w=300" medium="image" />

		<media:content url="http://mindfultechnology.files.wordpress.com/2008/07/screenshot_wedding_website.jpg?w=300" medium="image" />
	</item>
		<item>
		<title>Model Katja Jung</title>
		<link>http://mindfultechnology.wordpress.com/2008/02/11/model-katja-jung/</link>
		<comments>http://mindfultechnology.wordpress.com/2008/02/11/model-katja-jung/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 04:57:48 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
				<category><![CDATA[none]]></category>
		<category><![CDATA[other]]></category>

		<guid isPermaLink="false">http://mindfultechnology.wordpress.com/?p=13</guid>
		<description><![CDATA[This is a little off-topic: My sister just announced that she started a blog! She works a a model on the side while going to med school to become a pediatrician. I guess the blog&#8217;s purpose is to stay in touch with her fans. The blog is in German, so if you can read German, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=13&subd=mindfultechnology&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This is a little off-topic: My sister just announced that she started a blog! She works a a model on the side while going to med school to become a pediatrician. I guess the blog&#8217;s purpose is to stay in touch with her fans. The blog is in German, so if you can read German, check it out: <a href="http://www.katjajung.de/blog/">http://www.katjajung.de/blog/</a>.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mindfultechnology.wordpress.com/13/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mindfultechnology.wordpress.com/13/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mindfultechnology.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mindfultechnology.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mindfultechnology.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mindfultechnology.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mindfultechnology.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mindfultechnology.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mindfultechnology.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mindfultechnology.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mindfultechnology.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mindfultechnology.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=13&subd=mindfultechnology&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mindfultechnology.wordpress.com/2008/02/11/model-katja-jung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8757731f313f53b0c15c812ddda213c1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TJ</media:title>
		</media:content>
	</item>
		<item>
		<title>javascript img src</title>
		<link>http://mindfultechnology.wordpress.com/2008/02/11/javascript-img-src/</link>
		<comments>http://mindfultechnology.wordpress.com/2008/02/11/javascript-img-src/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 21:47:27 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
				<category><![CDATA[none]]></category>

		<guid isPermaLink="false">http://mindfultechnology.wordpress.com/?p=12</guid>
		<description><![CDATA[People keep searching for &#8220;javascript img src&#8221; &#8230; maybe this is what they&#8217;re looking for:
How to create an image DOM element dynamically and place it on the page
There are many ways of doing this, here&#8217;s one in a code snippet:
&#60;html&#62;
&#60;body onload=&#34;LoadImage();&#34;&#62;

&#60;div id=&#34;ImageContainer&#34;&#62;
An image will go here:&#60;br /&#62;
&#60;/div&#62;

&#60;script type="text/javascript"&#62;
//&#60;![CDATA[

function LoadImage() {
	// get a reference to the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=12&subd=mindfultechnology&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>People keep searching for &#8220;<i>javascript img src</i>&#8221; &#8230; maybe this is what they&#8217;re looking for:</p>
<p class="synopsis">How to create an image DOM element dynamically and place it on the page</p>
<p>There are many ways of doing this, here&#8217;s one in a code snippet:</p>
<pre><span style="color:#062873;font-weight:bold;">&lt;html&gt;</span><span style="color:#062873;font-weight:bold;">
&lt;body</span> <span style="color:#4070a0;">onload=&#34;LoadImage();&#34;</span><span style="color:#062873;font-weight:bold;">&gt;</span>

<span style="color:#062873;font-weight:bold;">&lt;div</span> <span style="color:#4070a0;">id=&#34;ImageContainer&#34;</span><span style="color:#062873;font-weight:bold;">&gt;</span>
An image will go here:<span style="color:#062873;font-weight:bold;">&lt;br</span> <span style="color:#062873;font-weight:bold;">/&gt;</span>
<span style="color:#062873;font-weight:bold;">&lt;/div&gt;</span>

<span style="color:#062873;font-weight:bold;">&lt;script </span><span style="color:#4070a0;">type="text/javascript"</span><span style="color:#062873;font-weight:bold;">&gt;</span>
<span style="color:#60a0b0;font-style:italic;">//&lt;![CDATA[</span>

<span style="color:#007020;font-weight:bold;">function</span> <span style="color:#666666;">L</span>oadImage() {
	<span style="color:#60a0b0;font-style:italic;">// get a reference to the DIV into which we want to put the image [1]</span>
<span style="color:#007020;font-weight:bold;">	var</span> container <span style="color:#666666;">=</span> <span style="color:#007020;">document</span>.getElementById(<span style="color:#4070a0;">&#34;ImageContainer&#34;</span>);

<span style="color:#60a0b0;font-style:italic;">	// create a new image element [2]</span>
	<span style="color:#007020;font-weight:bold;">var</span> anImage <span style="color:#666666;">=</span> <span style="color:#007020;">document</span>.createElement(<span style="color:#4070a0;">&#34;IMG&#34;</span>);

<span style="color:#60a0b0;font-style:italic;">	// when the image is loaded, attach this image element to the container DIV</span>
	<span style="color:#60a0b0;font-style:italic;">// (but not earlier) [3]</span>
	anImage.onload <span style="color:#666666;">=</span> <span style="color:#007020;font-weight:bold;">function</span>() {
	 	container.appendChild(<span style="color:#007020;font-weight:bold;">this</span>);
	}

<span style="color:#60a0b0;font-style:italic;">	// set the image to load [4]</span>
	anImage.src <span style="color:#666666;">=</span> <span style="color:#4070a0;">&#34;http://www.google.com/intl/en_ALL/images/logo.gif&#34;</span><span style="color:#666666;">;</span>
}

<span style="color:#60a0b0;font-style:italic;">//]]&gt;</span>
<span style="color:#60a0b0;font-style:italic;"></span><span style="color:#062873;font-weight:bold;">&lt;/script&gt;</span>

<span style="color:#062873;font-weight:bold;">&lt;body&gt;</span>
<span style="color:#062873;font-weight:bold;">&lt;/html&gt;</span></pre>
<p>What&#8217;s going on:</p>
<ul>
<li>When the page is done loading, a JavaScript function to load the image is called.</li>
<li>[1] This functions gets an object reference to the DOM node of the DIV container to hold the image when it&#8217;s loaded.</li>
<li>[2] It then creates a new Image element DOM node, that is not yet part of the page&#8217;s node tree (and therefore does not get displayed).</li>
<li>[3] The <i>onload</i> handler for that node is created as a function that simply attaches the loaded image to the container. Note that this is essentially asynchronous programming: This function does not get executed until the image has been completely loaded (which may be never!). This function also uses what is called a <i>closure</i> over the variable context as it was defined when the function was created, meaning that all the variables <i>outside</i> of it&#8217;s function body are available <i>inside</i>, for example container.</li>
<li>[4] (Almost) as soon as an image URL is assigned to the image, the browser begins loading it.</li>
</ul>
<p>The function defined in [3] will always execute <i>after</i> [4].</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mindfultechnology.wordpress.com/12/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mindfultechnology.wordpress.com/12/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mindfultechnology.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mindfultechnology.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mindfultechnology.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mindfultechnology.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mindfultechnology.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mindfultechnology.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mindfultechnology.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mindfultechnology.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mindfultechnology.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mindfultechnology.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=12&subd=mindfultechnology&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mindfultechnology.wordpress.com/2008/02/11/javascript-img-src/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8757731f313f53b0c15c812ddda213c1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TJ</media:title>
		</media:content>
	</item>
		<item>
		<title>Detect IE6</title>
		<link>http://mindfultechnology.wordpress.com/2008/02/11/detect-ie6/</link>
		<comments>http://mindfultechnology.wordpress.com/2008/02/11/detect-ie6/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 20:29:30 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
				<category><![CDATA[none]]></category>
		<category><![CDATA[ie6]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://mindfultechnology.wordpress.com/?p=11</guid>
		<description><![CDATA[Since people keep looking for this, here is how you can identify IE 6 (and IE 6 only):
&#60;script type="text/javascript"&#62;
//&#60;![CDATA[
var is_ie6 = (
	window.external &#38;&#38;
	typeof window.XMLHttpRequest == "undefined"
);
//]]&#62;
&#60;/script&#62;
This is reliable and even Opera is not pretending to be IE6 with this check. This is mostly useful to determine whether the PNG/Alpha Image Loader hack needs to be [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=11&subd=mindfultechnology&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Since people keep looking for this, here is how you can identify IE 6 (and IE 6 only):</p>
<pre><span style="color:#800000;">&lt;script type="text/javascript"&gt;</span>
<span style="color:#999999;">//&lt;![CDATA[</span>
<span style="font-weight:bold;color:#007020;">var</span> is_ie6 <span style="color:#666666;">=</span> (
	<span style="color:#007020;">window</span>.external <span style="color:#666666;">&amp;&amp;</span>
	<span style="font-weight:bold;color:#007020;">typeof</span> <span style="color:#007020;">window</span>.<span style="color:#666666;">XMLH</span>ttpRequest <span style="color:#666666;">==</span> <span style="color:#4070a0;">"undefined"</span>
);
<span style="color:#999999;">//]]&gt;</span>
<span style="color:#800000;">&lt;/script&gt;</span></pre>
<p>This is reliable and even Opera is not pretending to be IE6 with this check. This is mostly useful to determine whether the PNG/Alpha Image Loader hack needs to be applied.</p>
<p><strong>UPDATE:</strong></p>
<p>The code provided by <a href="http://leaverou.me/">Lea Verou</a> below performs up to 50% faster on all browsers except Firefox 2 and Google Chrome (where this test is really slow for some reason; maybe the <strong>in</strong> operator has not been optimized?)</p>
<pre style="font:normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace;"><span style="color:#800000;">&lt;script type="text/javascript"&gt;</span>
<span style="color:#999999;">//&lt;![CDATA[</span>
<span style="font-weight:bold;color:#007020;">var</span> is_ie6 <span style="color:#666666;">=</span> (<span style="color:#808080;">'ActiveXObject'</span> in <span style="color:#007020;">window </span>&amp;&amp; !(<span style="color:#808080;">'XMLHttpRequest'</span> in <span style="color:#007020;">window</span>));
<span style="color:#999999;">//]]&gt;</span>
<span style="color:#800000;">&lt;/script&gt;</span></pre>
<p>I cannot wait for the day when we do not have to deal with IE6 anymore. Considering how many intranet applications exist that specifically target this browser, this day may be in a distant future, unfortunately.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mindfultechnology.wordpress.com/11/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mindfultechnology.wordpress.com/11/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mindfultechnology.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mindfultechnology.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mindfultechnology.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mindfultechnology.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mindfultechnology.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mindfultechnology.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mindfultechnology.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mindfultechnology.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mindfultechnology.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mindfultechnology.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=11&subd=mindfultechnology&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mindfultechnology.wordpress.com/2008/02/11/detect-ie6/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8757731f313f53b0c15c812ddda213c1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TJ</media:title>
		</media:content>
	</item>
		<item>
		<title>Real Productivity &amp; How Not Having ReSharper Really Hurts</title>
		<link>http://mindfultechnology.wordpress.com/2008/02/08/real-productivity-how-not-having-resharper-really-hurts/</link>
		<comments>http://mindfultechnology.wordpress.com/2008/02/08/real-productivity-how-not-having-resharper-really-hurts/#comments</comments>
		<pubDate>Fri, 08 Feb 2008 16:53:24 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
				<category><![CDATA[none]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://mindfultechnology.wordpress.com/?p=9</guid>
		<description><![CDATA[Synopsis: ReSharper is a productivity-improving tool for Visual Studio. NOT having it really hurts after getting used to it.
As part of our team evaluation, I have been running ReSharper for the last month. Even though it improved my daily coding routine, I was not able to quantify whether it would be worth the money to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=9&subd=mindfultechnology&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="synopsis">Synopsis: <a href="http://www.jetbrains.com/resharper/">ReSharper</a> is a productivity-improving tool for Visual Studio. NOT having it really hurts after getting used to it.</p>
<p>As part of our team evaluation, I have been running <a href="http://www.jetbrains.com/resharper/">ReSharper</a> for the last month. Even though it improved my daily coding routine, I was not able to quantify whether it would be worth the money to buy a license to run it on Visual Studio for me and/or others in the team.</p>
<p>Then we decided to move to Visual Studio 2008 a few days ago. The migration worked fine for everyone except me. I was getting a really weird exception from ReSharper when trying to edit comments. There was also a problem with the key mappings. The only option for me to continue work properly was to uninstall ReSharper.</p>
<p>Now I know how much it really hurts my productivity to <b>not</b> to have this tool.</p>
<p>ReSharper isn&#8217;t perfect, by all means. Besides the bug described, it does not execute the NUnit 2.4-style GlobalSetup steps in unit tests, which means I cannot use their beautifully integrated unit testing tools. This has been a known shortcoming for over a year and the fact that JetBrains is not in a rush to fix this worries me. Sometimes I also get stuck in the parameter list popup, which hijacks my cursor keys and cannot be closed with ESC&#8211;but maybe that&#8217;s just a user error.</p>
<p>But there&#8217;s a lot to like: The code quality analyzer running on an open file is very helpful. I made it part of my coding quality process to only commit files that pass the analysis and have the green little square in the upper right corner. The refactoring support is decent (certainly better then what comes with Visual Studio).</p>
<p>I cannot wait for them to fix the comment bug so I can continue using it. There are not any real alternatives to Visual Studio when it comes to .Net and C# development. I would guesstimate that my productivity is down 20% without it (which does not include long-term effects from having lower-quality code because of my oversights that ReSharper&#8217;s analysis process would have caught).</p>
<h2>The Eclipse Difference</h2>
<p>I  should note that if I were developing in Java, I would not have any of these problems. <a href="http://www.eclipse.org">Eclipse</a> does most of what the Visual Studio/ReSharper combo does, some of it better. And it&#8217;s completely free. Alas, we&#8217;re not using Java for this project and&#8211;quite frankly&#8211;I am currently more fond of C#/.Net for various reasons &#8230;</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mindfultechnology.wordpress.com/9/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mindfultechnology.wordpress.com/9/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mindfultechnology.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mindfultechnology.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mindfultechnology.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mindfultechnology.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mindfultechnology.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mindfultechnology.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mindfultechnology.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mindfultechnology.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mindfultechnology.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mindfultechnology.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=9&subd=mindfultechnology&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mindfultechnology.wordpress.com/2008/02/08/real-productivity-how-not-having-resharper-really-hurts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8757731f313f53b0c15c812ddda213c1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TJ</media:title>
		</media:content>
	</item>
		<item>
		<title>Sooner or later, I will host this blog myself &#8230;</title>
		<link>http://mindfultechnology.wordpress.com/2008/02/05/sooner-or-later-i-will-host-this-blog-myself/</link>
		<comments>http://mindfultechnology.wordpress.com/2008/02/05/sooner-or-later-i-will-host-this-blog-myself/#comments</comments>
		<pubDate>Wed, 06 Feb 2008 04:24:03 +0000</pubDate>
		<dc:creator>TJ</dc:creator>
				<category><![CDATA[none]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[business]]></category>

		<guid isPermaLink="false">http://mindfultechnology.wordpress.com/2008/02/05/sooner-or-later-i-will-host-this-blog-myself/</guid>
		<description><![CDATA[&#8230; and am making this mental note here for my own purposes: WordPress Configuration
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=8&subd=mindfultechnology&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>&#8230; and am making this mental note here for my own purposes: <a href="http://www.elance.com/p/tips-for-wordpress-blogs">WordPress Configuration</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mindfultechnology.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mindfultechnology.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mindfultechnology.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mindfultechnology.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mindfultechnology.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mindfultechnology.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mindfultechnology.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mindfultechnology.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mindfultechnology.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mindfultechnology.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mindfultechnology.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mindfultechnology.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mindfultechnology.wordpress.com&blog=2695794&post=8&subd=mindfultechnology&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://mindfultechnology.wordpress.com/2008/02/05/sooner-or-later-i-will-host-this-blog-myself/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/8757731f313f53b0c15c812ddda213c1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">TJ</media:title>
		</media:content>
	</item>
	</channel>
</rss>