<?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/"
	>

<channel>
	<title>Cognition &#187; best practices</title>
	<atom:link href="http://www.cognition.ca/tag/best-practices/feed" rel="self" type="application/rss+xml" />
	<link>http://www.cognition.ca</link>
	<description>Balls-in-the-air Entrepreneurship and Juggling.</description>
	<lastBuildDate>Tue, 14 Jun 2011 10:04:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>When to Pause, When to Push</title>
		<link>http://www.cognition.ca/2009/02/when-to-pause-when-to-push.html</link>
		<comments>http://www.cognition.ca/2009/02/when-to-pause-when-to-push.html#comments</comments>
		<pubDate>Thu, 12 Feb 2009 07:32:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[entrepreneurs]]></category>
		<category><![CDATA[ADD]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[deadlines]]></category>
		<category><![CDATA[genY]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[informationscience]]></category>
		<category><![CDATA[philosophy]]></category>
		<category><![CDATA[politics]]></category>
		<category><![CDATA[procrastination]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[web2.0]]></category>

		<guid isPermaLink="false">http://www.cognition.ca/?p=141</guid>
		<description><![CDATA[It&#8217;s now 11pm on Wednesday night. Tomorrow morning, at 10am, I will be presenting my Project Plan to execute $6M worth of custom software development over the next 36 months. That Project Plan doesn&#8217;t really exist yet. It&#8217;s been a busy week. LAST night, at 11pm (roughly), I filed a Notice Of Intent, to bid [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://farm4.static.flickr.com/3071/3061895133_40d9e05d72_d.jpg" alt="" width="250" height="166" /></p>
<p>It&#8217;s now 11pm on Wednesday night. Tomorrow morning, at 10am, I will be presenting my Project Plan to execute $6M worth of custom software development over the next 36 months.</p>
<p>That Project Plan doesn&#8217;t really exist yet.</p>
<p>It&#8217;s been a busy week. LAST night, at 11pm (roughly), I filed a Notice Of Intent, to bid on a DIFFERENT multi-million dollar, multi-year contract. Oh, yesterday was also my oldest daughter&#8217;s 6-year-old birthday.</p>
<p>There&#8217;s a point, in here, somewhere. We&#8217;ll wind our way towards it.</p>
<p>Technically, these days I&#8217;m an &#8220;Information Worker&#8221;. What I think that means, is that I get paid for thinking about things. At least, that&#8217;s how I choose to interpret it. My clients probably prefer to think I get paid for the OUTPUT of my thinking &#8211; but I&#8217;m all too keenly aware of how directly the quality of my output, is related to the quality of my thinking.<span id="more-141"></span></p>
<p><img class="alignright" title="Push for Free Cheese" src="http://farm1.static.flickr.com/12/69075298_d84059ca01_d.jpg" alt="" width="250" height="187" /></p>
<p>I drink a lot of coffee most days. It brings a certain crisp, painful clarity to my thoughts &#8211; great for coding, decent for hacking up a schedule, horrible for writing proposals.</p>
<p>Some days I drink beer, partly to fuzz those crisp, certain edges &#8211; partly to counteract the effects of the coffee. When I write strategy or policy, I usually combine the two. It produces documents with a certain bizarre, compelling lucidity &#8211; and leaves me useless afterwards.</p>
<p>Information workers, such as we are, can be noted for their ability to force their thoughts to follow a linear progression &#8211; to march through the gates of logic, as it were. This is, after all, what software is about &#8211; making rigidly explicit the implicit desires of the user.</p>
<p>And yet athletes often talk about being &#8220;In the Zone&#8221; &#8211; where every motion seems effortless, and the outcome so certain as to be written in time. Is there a place for such sentiments in the realm of informatica?</p>
<p><img class="alignright" style="margin-left: 10px; margin-right: 10px;" title="Coffee and Beer" src="http://farm3.static.flickr.com/2233/1495010165_2ba0de063d_d.jpg" alt="" width="250" height="373" /></p>
<p>I like to think so.</p>
<p>And this belief is what leads me to my daily routine:</p>
<ol>
<li>I never start (or finish) at the same time.</li>
<li>I rarely work in the same place. Anywhere with coffee and Wifi is a candidate &#8211; on writing days, the WiFi is optional.</li>
<li>My roles, while sweeping, are ill-defined &#8211; and I prefer it that way. When I&#8217;m in the mood to write, I write. When I&#8217;m in the mood to code, I code. If the phone calls, I dial it.</li>
</ol>
<p>Such freedom comes at a price, however &#8211; the day I fail to meet a deadline, is the day my freedom ends. (NASA, after all, can only overlook my eccentricities while I&#8217;m impeccable). So occasionally, I push. But I don&#8217;t push the <em>doing</em> &#8211; I push the <em>feeling</em>. If I need to write, I&#8217;ll push at feeling a writing mood. If I need to code, I&#8217;ll push at feeling the thrill of execution and interpretation.</p>
<p>What about you? Do you believe in multitasking? Do you drink the Kool-Aid, that the A.D.D. we suffered with as children, was actually the early manifestations of a better, more intuitive and transcendent way of thinking?</p>
<p>Or really, are we truly the over-indulged, lazy and self-centered Generation-Me that &#8220;Suits&#8221; would have us think?</p>
<span class="akst_link"><a href="http://www.cognition.ca/?p=141&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_141"  class="akst_share_link">Share This</a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.cognition.ca/2009/02/when-to-pause-when-to-push.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>&lt;N&gt; Reasons Why Open Standards, more than Open Source, Really Matter</title>
		<link>http://www.cognition.ca/2009/02/n-reasons-why-open-standards-more-than-open-source-really-matter.html</link>
		<comments>http://www.cognition.ca/2009/02/n-reasons-why-open-standards-more-than-open-source-really-matter.html#comments</comments>
		<pubDate>Wed, 11 Feb 2009 06:25:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[entrepreneurs]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[FLOSS]]></category>
		<category><![CDATA[informationscience]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[open standards]]></category>
		<category><![CDATA[philosophy]]></category>
		<category><![CDATA[politics]]></category>
		<category><![CDATA[trojan horse]]></category>

		<guid isPermaLink="false">http://www.cognition.ca/?p=128</guid>
		<description><![CDATA[There have been some great articles on the dangers of, either no standards, or closed standards. However, no one has really talked about how almost EVERYTHING we have accomplished as a race of people, has been to the credit of open standards of information exchange and interface. So let&#8217;s take a walk back through the [...]]]></description>
			<content:encoded><![CDATA[<p>There have been s<a href="http://www.groklaw.net/articlebasic.php?story=2005091305273070">ome great articles</a> on <a href="http://www.linux.com/articles/53407">the dangers</a> of, either no standards, or <a href="http://politics.slashdot.org/politics/06/04/10/0439242.shtml">closed standards</a>. However, no one has really talked about how almost EVERYTHING we have accomplished as a race of people, has been to the credit of <em>open</em> standards of information exchange and interface. So let&#8217;s take a walk back through the ages, and look at the wonderful things that open standards have brought us.</p>
<p>1. Numbers<img class="alignright" title="By the Numbers..." src="http://www.westga.edu/~distance/images/numbers.jpg" alt="" width="169" height="164" /></p>
<p>Regardless of the language they use, or even the character set they use for writing it, most countries on the planet now use the &#8220;<a href="http://en.wikipedia.org/wiki/Positional_notation">decimal positional notation</a>&#8221; for all numbers and mathematics. This public, open standard for notation has allowed the development of relatively friction-free international commerce, and was the successful basis for&#8230;<span id="more-128"></span></p>
<p>2. Weights and Measures</p>
<dl class="wp-caption alignright" style="width: 183px;">
<dt class="wp-caption-dt"><a href="http://www.cnn.com/TECH/space/9909/30/mars.metric.02/"><img title="Mars Climate Orbiter Launch" src="http://plus.maths.org/issue10/news/mars/launch.jpg" alt="Mars Climate Orbiter Launch" width="173" height="240" /></a></dt>
</dl>
<blockquote><p>What if, every time you bought a gallon of milk, a five-cent license fee was paid to the owner of the patent &#8211; on the Gallon?</p></blockquote>
<p>Aside from underpinning all advances in commerce, engineering, scientific research, cartography, medical sciences, etc&#8230; just look at a few of the many examples of <a title="Loss of Mars Climate Observer" href="http://www.cnn.com/TECH/space/9909/30/mars.metric.02/">what goes wrong</a> when we <em>don&#8217;t</em> follow established and open standards of weight and measure.</p>
<p>3. <a href="http://www.itu.int/rec/T-REC-Q.700-199303-I/en">The Telephone System (SS7)</a></p>
<p>Ubiquitous enough that most people don&#8217;t realize there&#8217;s a standard at work here, the details of the Signaling System Number Seven protocol are the magic glue that makes global and local telephony possible. It&#8217;s worth noting that individual countries are able to implement and revise this base standard in significant ways, and that they&#8217;ve done so without abandoning the SS7 system. (This would be a great example of an extensible standard).</p>
<p>When was the last time you plugged a telephone into a wall jack &#8211; anywhere in the world &#8211; and couldn&#8217;t get it to work?</p>
<p>Other non-technical, non-software standards:</p>
<ol>
<li>Shoe Sizes</li>
<li>The Dewey Decimal System</li>
<li>ISBN</li>
<li>Bullet Calibres</li>
<li>Screw sizes and screw heads, bolt, nut and nail sizes &#8211; (although not ALL screw heads)</li>
<li>Dimensional lumber</li>
<li>K-12 Grades</li>
<li>Zip Codes</li>
</ol>
<p>The most obvious technology standards are, of course, electrical power &#8211; of the 110V or 240V, 50 or 60Hz variety. Can you imagine what limits on the innovation of electrical equipment we would have suffered under if GE collected a license fee every time you used a wall jack?</p>
<p>Now here&#8217;s an interesting question &#8211; why has it taken so many years for &#8220;Hi-Def&#8221; television to become ubiquitous? The underlying standard (broadcast or cable television) wasn&#8217;t extensible and, in fact, (similar to the Y2K bug) had been designed with very short-sighted considerations.</p>
<p><img class="alignright" title="Trojan Horse" src="http://farm1.static.flickr.com/190/503425941_ba9e3c1f31_m_d.jpg" alt="" width="240" height="180" />In a level playing field, (such as the emergent technology market of Internet servers, databases, scripting languages, frameworks, etc) open source software is a sure contender. However, when dealing with vendor lock-in (which is ALWAYS based on closed and/or proprietary standards) it doesn&#8217;t have a hope. This is a simple (perhaps simplistic) explanation for the failure of Linux to make the gains in desktop market share that everyone has expected.</p>
<p>In the long run, adoption of the <em>right</em> open standards becomes the trojan horse within proprietary software. It levels the playing field &#8211; let the best app win.</p>
<span class="akst_link"><a href="http://www.cognition.ca/?p=128&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_128"  class="akst_share_link">Share This</a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.cognition.ca/2009/02/n-reasons-why-open-standards-more-than-open-source-really-matter.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Facebook Application Development How-to: 11 Tips You Don&#8217;t Want to Miss</title>
		<link>http://www.cognition.ca/2008/02/facebook-application-development-how-to-11-tips-you-dont-want-to-miss.html</link>
		<comments>http://www.cognition.ca/2008/02/facebook-application-development-how-to-11-tips-you-dont-want-to-miss.html#comments</comments>
		<pubDate>Thu, 28 Feb 2008 07:36:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[entrepreneurs]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[facebook api]]></category>
		<category><![CDATA[facebook application development]]></category>
		<category><![CDATA[facebook apps]]></category>
		<category><![CDATA[fbml]]></category>
		<category><![CDATA[fql]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://www.cognition.ca/2008/02/facebook-application-development-how-to-11-tips-you-dont-want-to-miss.html</guid>
		<description><![CDATA[I&#8217;ve built several facebook applications now, and although none of them are as successful as my friend Ben&#8217;s &#8220;Make A Baby&#8221; application, I&#8217;m very happy with how they run. Here are the tricks that I used &#8211; although you&#8217;ll find them mentioned elsewhere, and each of them is important by itself, if you&#8217;re just getting [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/jazzmasterson/3038597/"><img src="http://farm1.static.flickr.com/1/3038597_e5f95e2017_m.jpg" border="0" alt="" hspace="10" vspace="5" width="240" height="185" align="right" /></a>I&#8217;ve built several facebook applications now, and although none of them are as successful as my friend Ben&#8217;s &#8220;<a href="http://adonomics.com/about/6682280012&amp;range=max">Make A Baby</a>&#8221; application, I&#8217;m very happy with how they run. Here are the tricks that I used &#8211; although you&#8217;ll find them mentioned elsewhere, and each of them is important by itself, <strong>if you&#8217;re just getting started on your first facebook application, you need to know:</strong><span id="more-47"></span></p>
<ol>
<li>Facebook passes you the session key you want. Don&#8217;t try and use your typical, cookie or URL-based session &#8211; it <strong>won&#8217;t work.</strong> Instead (in php, for example,) start your session with:
<ol>
<li> $facebook = new Facebook($api_key, $secret);<br />
$session_key = md5($facebook-&gt;api_client-&gt;session_key);<br />
session_id($session_key);<br />
session_start();</li>
</ol>
</li>
<li>If your application is anything like mine, you&#8217;re going to have the same FBML content used all over the place &#8211; on several people&#8217;s profiles, and in the main application itself. Rather than update the contents of thousands of profiles, Facebook provides a handy <a title="FBRef Cacheing Architecture" href="http://wiki.developers.facebook.com/index.php/Fb:ref">fb:ref cacheing architecture</a>. USE IT.</li>
<li>If you&#8217;re using fb:ref (which you SHOULD be), you probably want to be using the &#8220;push&#8221; method, using <a href="http://wiki.developers.facebook.com/index.php/Fbml.setRefHandle">named handles</a>. Add the <a href="http://elliottback.com/wp/archives/2007/06/16/facebook-php-api-performance/">php curl_multi hack</a> for performance, and you&#8217;ll be off and running.</li>
<li>To take advantage of this (updating huge swaths of your application without any user interaction), you&#8217;ll probably want to run a cron job, using an <a href="http://wiki.developers.facebook.com/index.php/Infinite_session_keys">infinite session key</a>. Get yourself one.</li>
<li>The<strong> name</strong> of your application makes a huge difference when it comes to random users adding your application from the application directory. BUT, facebook doesn&#8217;t seem to mind if you change the name periodically, even after your application has been listed and you have piles of users. Go ahead and play around, and keep checking your facebook stats to see what works best.</li>
<li><a href="http://flickr.com/photos/thespeak/277904742/"><img src="http://farm1.static.flickr.com/118/277904742_39d0b61148_m.jpg" border="0" alt="" hspace="10" vspace="5" width="240" height="159" align="right" /></a>Obviously, you&#8217;ll want to run a test version. The best way is to have a second application, in developer mode, and mapped to a special port that forwards traffic <a href="http://www.cognition.ca/2007/11/using-ssh-tunnels-to-develop-facebook-applications.html">to your local development machine through an ssh tunnel</a>. Read my previous blog post on how to set this up.</li>
<li>In order to not go INSANE managing your test version, make sure you&#8217;ve abstracted out the full facebook app path, and keep it in some local config file. (Yes, I realize this should be obvious to any experienced developer). While you&#8217;re at it, you might want to check for the best possible facebook url you can get &#8211; these things are the new domain names.</li>
<li><a href="http://wiki.developers.facebook.com/index.php/Feed.publishTemplatizedAction">Facebook templatized actions</a> &#8211; <strong>you need to use these</strong>. Basically, it&#8217;s the only way to turn events within your application, into first-class citizens of the facebook news streams. They&#8217;re worthy of a full blog post on their own, as I found a whole series of gotchas when implementing them. For starters, remember to use the right fb:pronoun-s.</li>
<li><a href="http://wiki.developers.facebook.com/index.php/UsageNotes/DefaultFBML">Default FBML </a>- it&#8217;s way more important than it seems, since you can&#8217;t be sure where the user&#8217;s workflow will take them when playing with/installing your application. You&#8217;ll probably want to prototype this extensively, and then copy it from your editor into the tiny little form facebook provides.</li>
<li>It&#8217;s mentioned in all the facebook best practices, but it bears repeating &#8211; make sure you&#8217;re letting facebook users <strong>try out</strong> the functionality of your application before requiring them to install it. Not only will it lead to fewer unhappy users, but it maintains the reputation of facebook application developers as a group.</li>
<li>Post-remove &#8211; You&#8217;ll probably find, as most facebook apps do, that you have a HUGE amount of churn in your user base. If you don&#8217;t remember to remove local user data from your application database when a facebook user removes your application, it will quickly become cluttered with cruft. (A quick FQL query for whether or not each user has your application installed can be run as a one-time cleanup if necessary.)</li>
</ol>
<p>I hope you find these helpful &#8211; and if you&#8217;ve got further tips of your own, let me know!</p>
<p>UPDATE (Sept. 6th): My friend Nick wrote a book that makes this whole process easier:<br />
<iframe src="http://rcm.amazon.com/e/cm?t=cognition-20&#038;o=1&#038;p=8&#038;l=as1&#038;asins=0470246669&#038;md=10FE9736YVPPT7A0FBG2&#038;fc1=000000&#038;IS2=1&#038;lt1=_blank&#038;m=amazon&#038;lc1=0000FF&#038;bc1=000000&#038;bg1=FFFFFF&#038;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe><br/></p>
<p align="right"><script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script></p>
<span class="akst_link"><a href="http://www.cognition.ca/?p=47&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_47"  class="akst_share_link">Share This</a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.cognition.ca/2008/02/facebook-application-development-how-to-11-tips-you-dont-want-to-miss.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>How-To Change Your Life: 11 Steps to Carbon Neutral</title>
		<link>http://www.cognition.ca/2008/01/how-to-change-your-life-11-steps-to-carbon-neutral.html</link>
		<comments>http://www.cognition.ca/2008/01/how-to-change-your-life-11-steps-to-carbon-neutral.html#comments</comments>
		<pubDate>Mon, 28 Jan 2008 07:50:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[carbon]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[environment]]></category>
		<category><![CDATA[globalwarming]]></category>
		<category><![CDATA[inconvenience]]></category>

		<guid isPermaLink="false">http://www.cognition.ca/2008/01/how-to-change-your-life-11-steps-to-carbon-neutral.html</guid>
		<description><![CDATA[No, it&#8217;s not about your lightbulbs. It&#8217;s in your head. A lot of the emphasis in my childhood was on being responsible for yourself &#8211; not simply in the sense of providing for your own needs, but actually taking responsibility for who you are, and how you behave. The obvious corollary was learning how to [...]]]></description>
			<content:encoded><![CDATA[<p> No, it&#8217;s not about your lightbulbs. It&#8217;s in your head.</p>
<p><img src="http://farm1.static.flickr.com/53/128342869_a49dde3547_m.jpg" alt="Diaper Change" align="left" border="0" height="238" hspace="10" vspace="5" width="240" />A lot of the emphasis in my childhood was on being responsible for yourself &#8211; not simply in the sense of providing for your own needs, but actually taking responsibility for who you are, and how you behave. The obvious corollary was learning how to change. Contrary to popular belief, it&#8217;s not impossible. Nor is it magical, mysterious, or something involving $300 /hr therapists. But it does take work &#8211; and a bit of know-how.</p>
<p>My father explained it to me quite succinctly,  when I was around 17 and I decided that I needed to start putting my laundry away, rather than leaving it in a stack on the dresser (which quickly became a heap on the floor.)</p>
<ol>
<li>Build up some momentum by changing a few simple, easy things. This can get you into a habit of winning at change. (For instance, every time I wanted to do this I would switch to brushing my teeth with my left hand. It&#8217;s easy to remember, and a great daily sticking point).</li>
<li>Then WAIT to start on your change until you&#8217;re ready to WIN. It&#8217;s more important to do it right <em>once</em>, than it is to do it right now.</li>
<li>Find something that you can do every day, even if you&#8217;re changing how you react to an annual event (like thanksgiving with the inlaws). It will give you a chance to invest additional energy and attention on your decision.</li>
<li>If you get through the first week without missing a day, you&#8217;ve got a beachhead. Making it through the first month gets you most of the way there. After that, it&#8217;s all about the rest of your life.<span id="more-36"></span></li>
</ol>
<p>I&#8217;ve been struggling, every day for some years now, on trying to <em>plan</em> how I can change my entire life. I <em>have</em> to get to the point where I KNOW that my work, my lifestyle, and my household, have a net POSITIVE impact on the planet. And just to be difficult, I&#8217;ve challenged myself to do one better &#8211; I have to do it in a way that everyone I know can copy.</p>
<p>This means no hermitage, no fleeing to the remote wilderness, no proposals of massive population reduction (unless I can suggest a huge population that we could do without &#8211; other than lawyers and lobbyists, of course).</p>
<p>I don&#8217;t have a plan, yet. But I&#8217;ve started moving, anyway, and I think that&#8217;s helped me a lot. (At least, I feel more relaxed about it). Rather than attacking a huge project that I can fail at, here&#8217;s how I&#8217;m getting moving:</p>
<h3>1. Do one thing, right now, that you can do again every day.</h3>
<p>Bicycle to work. Bring your own coffee cup to Starbucks. Turn the thermostat down two degrees and put on a sweater. Say &#8220;Hi&#8221; to your neighbor on the way home.</p>
<h3>2. Read one book</h3>
<p>It doesn&#8217;t even matter which one &#8211; just making a tiny commitment to getting educated will, in the long run, help enormously. If you&#8217;ve got socially- or environmentally-aware friends, borrow a book from them. If not, hit your local library, and grab something that inspires you. As a last resort, you can browse my bookshelf.</p>
<h3>3. Tell one friend (what you&#8217;re doing)</h3>
<p>Military recruitment works on pride, nationalism, and shame. If you can embrace the planet as your country, and life on it as your kinsmen, then you&#8217;ve damn well got plenty to be embarrassed about. Once you&#8217;re moving, you owe it to your friends to embarrass them as well.</p>
<h3>4. Ask one question (in public, if you can)</h3>
<p>As has been oft-reported in the blogosphere lately, no one is asking the candidates anything about their platform, especially when it comes to global warming. Never be too embarrassed to ask a dumb question &#8211; that&#8217;s what got us into this mess in the first place. Now, here&#8217;s a dumb question for you: What happens to the smoke that comes out of the exhaust pipe?</p>
<h3>5. Skip one trip (in a car)</h3>
<p>Not only might you feel great about the pounds of CO2 you&#8217;ve kept out of the air, but spending those extra minutes with your children, wife, or dog will help you learn to value <em>slooooowing down.</em> (For added value, give your son or daughter a &#8220;<strong>get out of the car, free</strong>&#8221; card, and let <em>them</em> decide which trip you skip. No milk at breakfast time? Maybe it&#8217;s time to learn how to cook eggs.)</p>
<h3>6. Buy one less (gift, coffee, etc.)</h3>
<h3><img src="http://farm2.static.flickr.com/1055/664562164_563fc8abe8_m.jpg" alt="Starbucks Garbage" align="right" border="0" height="159" hspace="10" vspace="5" width="240" /></h3>
<p>From an early age, we&#8217;re taught to equate <em>success</em> with <em>acquisition</em> &#8211; of a beautiful woman, a nice car, a big house, a &#8220;good&#8221; job, etc.  It&#8217;s taken me years to admit that I often buy coffee, not for the rush of the caffeine, but for the safety-blanket feeling I get from <strong>spending money on something expensive that I don&#8217;t need</strong>. Try getting all the way up to the counter, and then simply <em>not buying it.</em> Not only will you be ahead by a few bucks, (and a few ounces of CO2), but you&#8217;ll have a beautiful moment to confront your addiction to consumption.</p>
<h3>7. Change one vote</h3>
<p>It&#8217;s not every election that gets me fired up &#8211; I often feel like I don&#8217;t even have anyone I <em>could</em>, in good conscience, vote for. But frankly, that&#8217;s a cop-out &#8211; there&#8217;s <em>always</em> some opportunity, usually at the local level, to make some thoughtful contribution to democracy. Try sitting in on a local City Council meeting, or even a School Board meeting. Did you realize that <a href="http://www.azdeq.gov/function/news/2008/jan.html#0118b">grade-schools in Arizona are planting trees to offset the Carbon Output of the SuperBowl</a>?</p>
<h3>8.  Pick a reason</h3>
<p>This is the &#8220;Vision Statement&#8221; part, the &#8220;Dream Changing&#8221;. For many of us, it&#8217;s as easy as the four-year-old asleep in the next room. For some of you, it will be your faith, or perhaps your sense of honor, duty, or even guilt. Whatever it is, try and find a personal vision of a future of the human race.</p>
<h3>9. Embrace inconvenience</h3>
<p>I&#8217;ve <a href="http://www.cognition.ca/2007/12/inconvenience-life-racing-to-zero-impact.html">blogged about inconvenience before</a>, but I&#8217;ll state it here again. (Credit goes to the Author of the &#8220;<a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2F0865715688%2F&amp;tag=boin-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325" title="Post Petroleum Survival Guide and Cookbook">Post Petroleum Survival Guide and Cookbook</a>&#8220;, Albert Bates). If you run out of gas and have to push your car to the side of the road, it&#8217;s a lot of hard work. Imagine pushing that car up and down hills, for a distance of 25-30 miles. That&#8217;s the equivalent of 6 weeks of hard labor &#8211; and when we&#8217;re debt-financing that on our carbon credit card, we&#8217;re making a down payment of just $3.00.</p>
<p>Walking to the store, cycling to work, carpooling across town, buying from local grocers instead of big-box stores, even taking the time to understand the issues &#8211; it&#8217;s all inconvenient. It takes time. Embrace it.</p>
<h3>10.  Measure yourself</h3>
<h3><img src="http://farm1.static.flickr.com/15/19941875_01cf42b9f6_m.jpg" align="right" border="0" height="240" hspace="10" vspace="5" width="208" /></h3>
<p>Fat people don&#8217;t look at scales. What you measure, you change. It&#8217;s not about setting goals explicitly; it&#8217;s about digging further and further into the truth, until the goals state themselves.</p>
<p>I haven&#8217;t found an online &#8220;Carbon  Output&#8221; estimation tool that I really like yet &#8211; when I do, I&#8217;ll let you know. In the meantime, try keeping track of how much you spend on gas, heating oil, water and electricity. (Those are easy to total up once a year). For the go-getters, you can compare the pounds of garbage you bag up every week, with the pounds of recycling and/or compost.</p>
<h3>11. Strive to do better</h3>
<p>Striving is a simple idea &#8211; that we&#8217;re not done, yet. That we&#8217;re responsible. In my family home when I was growing up, we had a big mirror in the front hall, with a sign under it. The sign said &#8220;The Buck Stops Here.&#8221;</p>
<span class="akst_link"><a href="http://www.cognition.ca/?p=36&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_36"  class="akst_share_link">Share This</a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.cognition.ca/2008/01/how-to-change-your-life-11-steps-to-carbon-neutral.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Managing deleted records in a mysql database &#8211; Design Patterns and Best Practices</title>
		<link>http://www.cognition.ca/2007/10/managing-deleted-records-in-a-mysql-database-design-patterns-and-best-practices.html</link>
		<comments>http://www.cognition.ca/2007/10/managing-deleted-records-in-a-mysql-database-design-patterns-and-best-practices.html#comments</comments>
		<pubDate>Wed, 31 Oct 2007 20:23:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[entrepreneurs]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://www.cognition.ca/?p=15</guid>
		<description><![CDATA[It&#8217;s a classic problem in application design &#8211; you&#8217;ve got a nicely normalized database, lots of tables with related records. You need to allow the user to delete a top-level object &#8211; which OUGHT to produce some cascading deletes through a bunch of tables. BUT! &#8211; you don&#8217;t trust the user. So you need to [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s a classic problem in application design &#8211; you&#8217;ve got a nicely normalized database, lots of tables with related records. You need to allow the user to delete a top-level object &#8211; which OUGHT to produce some cascading deletes through a bunch of tables. BUT! &#8211; you don&#8217;t trust the user. So you need to support some kind of undelete, some kind of audit trail. What to do?</p>
<p>1. Have another table for each table, and create &#8220;deleted&#8221; records in there.<br />2. Have a &#8220;deleted&#8221; column on each table.</p>
<p>Both have their challenges. When rapid prototyping, the first one is cumbersome because you need to remember to make data model changes in two places, ensuring data integrity between current and deleted data, etc. But the second one would seem to require an extra WHERE clause for every SELECT statement in the entire application.</p>
<p>MySQL 5.0 comes to the rescue with support for VIEWS. Simply define a mirrored view for each table, such that:</p>
<p>CREATE view bounties as SELECT * from bounty where deleted = 0;</p>
<p>Obviously CRUD needs to be executed against the underlying table, but now you can safely declare simple SELECT statements everywhere. </p>
<p>I&#8217;m considering a similar approach, using nested VIEWs, to address Adult Filters. I&#8217;ll let you know how that goes.<br /> 
<p style="text-align: right; font-size: 8px">Blogged with <a href="http://www.flock.com/blogged-with-flock" title="Flock" target="_new">Flock</a></p>
<span class="akst_link"><a href="http://www.cognition.ca/?p=15&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_15"  class="akst_share_link">Share This</a>
</span>]]></content:encoded>
			<wfw:commentRss>http://www.cognition.ca/2007/10/managing-deleted-records-in-a-mysql-database-design-patterns-and-best-practices.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

