<?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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>igorsales.ca</title>
	<atom:link href="http://igorsales.ca/feed/" rel="self" type="application/rss+xml" />
	<link>http://igorsales.ca</link>
	<description>spelled sales, pronounced like sah-les.</description>
	<lastBuildDate>Mon, 27 Jun 2011 19:05:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='igorsales.ca' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>igorsales.ca</title>
		<link>http://igorsales.ca</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://igorsales.ca/osd.xml" title="igorsales.ca" />
	<atom:link rel='hub' href='http://igorsales.ca/?pushpress=hub'/>
		<item>
		<title>On Software Project Estimation</title>
		<link>http://igorsales.ca/2010/08/22/on-software-project-estimation/</link>
		<comments>http://igorsales.ca/2010/08/22/on-software-project-estimation/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 20:39:15 +0000</pubDate>
		<dc:creator>igorsales</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://igorsales.ca/?p=299</guid>
		<description><![CDATA[Estimating a software project’s effort is a pebble in my shoe. Gladly, the same problem haunts all software developers. Somehow, we tend to be extremely optimistic before starting a project, and as the clock ticks, we get more and more realistic, and see the light at the end of the tunnel move much farther away, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=igorsales.ca&amp;blog=8048907&amp;post=299&amp;subd=igorsales&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h1><span style="font-weight:normal;font-size:13px;">Estimating a software project’s effort is a pebble in my shoe. Gladly, the same problem haunts all software developers. Somehow, we tend to be extremely optimistic before starting a project, and as the clock ticks, we get more and more realistic, and see the light at the end of the tunnel move much farther away, almost to infinity.</span></h1>
<p>Here’s my take on it.</p>
<p><strong>WARNING</strong>: The views expressed here are solely my opinion, based on personal experience and observations.</p>
<h1><strong>Software as Civil Engineering</strong></h1>
<p>I have heard software developers describing a feature to higher-ups by comparing it with building a house. That type of comparison for me is totally bogus. Here’s why:</p>
<h3><strong>Software developers never built a house. Ever.</strong></h3>
<p>I mean themselves, by hand. Ok, maybe some of us have, or finished a basement. But even when drawing that comparison <em>they’ll</em> have the mental schema of bricklaying. If you have ever seen a house being built, it takes hundreds of different trades, and skills, all at different times in the house-building process.</p>
<h3><strong>A civil construction (a building for the uninformed) is a tangible thing (you can touch it).</strong></h3>
<p>Building some concrete takes time to put it together, takes time to replicate it, takes time to clean it, and takes time to tear it down. Building software is merely giving instructions to a machine on how to do things. By how to <em>do things</em>, I mean telling a computer how to transform a file (or a set of them) into another file. If you want to be specific, how to transform a long sequence of 0s (zeroes) and 1s (ones) into another sequence.</p>
<p>A consequence is that to “build” software it becomes as simple as pressing a button and watching the computer do its <em>job</em>. And if you’re curious, to replicate, to clean or to tear it down, it’s also a matter of pressing another button. Ok, maybe calling “make clean” if you wanna geek-it-out.</p>
<p>If you still don’t follow or agree with me, here’s an example:</p>
<p>Imagine you’re building a software “house”. You don’t create each window by hand (technically you can, but it defeats the purpose of using a computer). Instead you define a model of a window, that is going to respond properly to you as you interact with it. Then you <em>instantiate </em>your window. You define things such as the size, number of panels, etc. Now, you have to make sure the window <em>interfaces</em> properly with the rest of the software. Now imagine that you want to change the colour of the window. In real life, you grab a pail of paint and you paint it. Don’t like the colour? You gotta wait until the previous paint dries, remove the old paint, and apply the new colour. In software? Well, if your <em>window</em> doesn’t define a way to specify a colour, you add support for that: If your <em>abstraction model</em> doesn’t define colour, well, you create the <em>colour</em> abstraction. You <em>write</em> this in some file (or files), and add these to your project. Then you <em>build</em> your software, and watch it <em>render</em> your window in the colour you specified.</p>
<p>Now, you can place windows everywhere you want in your software by re-using the same <em>code </em>you wrote for one <em>class </em>of windows. In a real house, you have to buy (or build) a new window each time you want to see through a wall.</p>
<h3>Debugging a building? Don’t try this at home.</h3>
<p>In your real-life window, if you don’t see through your window properly, you’ve gotta clean it, or turn on a light, or draw the blinds, etc. All that’s <em>built-in</em> for your. It’s <em>physics</em>.</p>
<p>Your software window doesn’t show through? Maybe you forgot to add another abstraction (or illusion) of what it was supposed to show. Or it’s interacting with other abstractions in a way you didn’t foresee. Or it’s not interacting with the <em>hardware</em> (the physical part of a computer) it’s not prepared to deal with. Or the other abstractions <em>written</em> by other people don’t interact with your window the way they’re supposed to. The list goes on. What’s worse? It’s very rarely the computer’s fault. It’s either your fault, or other person’s fault. The people that <em>programmed</em> those features didn’t do them the way were supposed to, or didn’t think of certain possibilities, or had another cascade of problems that led them to do things the way they did.</p>
<h3>And just like in real-life (tangible, touchable life), when you fix something, you can break another. A short intro into the so-called art of testing.</h3>
<p>Testing in real-life requires a person (or a number of them), to <em>physically</em> interact with each instance of an object (thing) to verify it behaves properly. In <em>artificial</em> life, you write even more lines of code that <em>creates</em> (or instantiates) objects. Then you write more lines to <em>push</em> buttons in these objects and see if they behave properly. You check the result by looking at strings of ones and zeroes. Or better yet, tell the machine to find certain patterns in the strings of ones and zeroes.</p>
<h3>Finally, where am I going with this?</h3>
<p>Once something physical is built, changing/replicating/updating it takes some considerable amount of time and resources. It’s easy to see and understand why.</p>
<p>Once a piece of software is written,</p>
<p style="padding-left:30px;"><em>Replicating</em> it is a matter of <em>copying</em> it. It’s like photocopying a document, except that it’s an exact replica of the original. You cannot tell the original and copy apart. The number of copies just depends on the amount of available hard drive space.</p>
<p style="padding-left:30px;"><em>Changing </em>or<em> Updating</em> it is a matter of editing a handful of files. Then you <em>build</em> it again. Let the computer <em>crunch</em> (transform the string of bits into another string of bits).</p>
<p>I’m sure a number of you will disagree with me here. I can hear the “It’s not quite that simple”. Actually, it is. If in <em>your case</em> it isn’t, you’re doing it wrong. You’re placing yourself in the middle of a process where a machine is perfectly capable of handling. If you don’t trust the machine to do something for you, that’s a different story.</p>
<p>So if building software is so much <em>faster</em> than building <em>real</em> things, how come we’re always wrong about the time it takes?</p>
<p>Because when we’re building real things, you are in direct contact with them. In software you are <em>at least one</em> level of abstraction away from the <em>thing</em>. You are defining a very specific set of instructions on how to build something. You are not grabbing a hammer and hitting on a nail. Rather you are telling a machine to grab a hammer, and nail, and giving it instructions on how to push the nail in. As an exercise for all the skeptics, try writing a system to do just that.</p>
<p>Now, try to imagine the effort required to tell a computer how to do all the hundreds of different tasks required to finish anything. The optimistic will say it’s not that much. The pessimistic will say it’ll take forever and a little more. The optimistic will be late. The pessimistic won’t even start.</p>
<p>We have been living in dwellings for as long as we can remember, so we had a lot of time to perfect the art of building them safe, sound and in time. Though, I hear in civil engineering and architecture, projects often end up late. If creating software is the equivalent to a meta process for building houses, for example, no wonder all projects are always running late.</p>
<h1><strong>Under the hood</strong></h1>
<p>Another comparison I hear often is to compare a code change (e.g. required by a new feature) with working on one’s car engine. Once the developer is in the middle of something, he will try to explain to his manager that nothing is building because the engine is out, and all the tubes, pipes, wires are disconnected, etc. The guts (pun intended). The manager gets it, because she has seen her car like that, and she knows she can’t go anywhere if the engine is not able to start. That’s a fallacy. It’s so obvious it’s hard to explain.</p>
<h3><strong>How do we estimate tasks?</strong></h3>
<p>It’s all guess work. No matter how we sugar coat it, and how many project management books on software engineering we have read, or fancy tools, it’s all guess work. The truth is that we don’t know how long it will take to build some software because we haven’t built it yet. As a matter of fact, the last sentence should read as follows.</p>
<p>“The truth is that we don’t know how long it will take to <em>write</em> a piece of software<em> </em>because we haven’t <em>written</em> it yet.”</p>
<p>If you want to know exactly how long it takes to <em>write</em> anything, you have to <em>write</em> it. Then it becomes paradoxical, because once you have written it, the estimate is no longer necessary.</p>
<p>Since we don’t have all the time in the world, we try to short-circuit that process by guessing. We estimate the effort of a task by basing it on other similar tasks we have done in the past. These are some of the factors that influence our guess work.</p>
<h3>Requirements (or how we interpret them)</h3>
<p>If we could transmit our exact thoughts from one human to another, we wouldn’t need requirements documents. So in a project that involves many different people, that thought synchronization is vital, but it only happens with experimentation. We <em>build</em> something, show it, and let the <em>user</em> try it. If what we wrote is what the <em>user</em> wanted or better, all is good. Otherwise, we have to “synchronize” <em>requirements</em> again, rinse and repeat.</p>
<h3>The APIs and tools we rely on</h3>
<p>Marketing does a great job of promoting how easy it is create software with a particular software library. The complexity of any software we write today has been greatly reduced by being able to re-use someone’s work through a software library. However, it doesn’t always behave as expected (or understood), and we tend to spend time learning the ins and outs of the diverse components and tools we use in our trade.</p>
<h3>Mood</h3>
<p>Ask any developer to estimate how long is something going to take when he’s on a roll. If he’s having a great day, squatting bugs, getting everything done perfectly and feeling great, he’ll underestimate the effort. Ask him again when he’s having one of those days that he couldn’t submit a single line of code because everything has been failing on him, and he may not even give you the time of day.</p>
<h3>Unconsciously relying on our <em>real-life</em> schemas</h3>
<p>When we think about features we wrote in the past, that are similar to what we’re trying to write now, we tend to remember only the time spent <em>coding</em>. By <em>coding</em>, I mean the time we spent <em>typing</em> the code. That’s a real tangible measurement of time. We were in front of a machine, typing. It’s easy to measure. Try to measure the amount of time you spend thinking about something, or finding a solution, and you’ll realize it’s a number of times more complicated, and you won’t remember it so easily. That’s because the amount of time spent typing code is what we find like brick layering. You’re placing one brick (compilable token) at a time, aligning it, making sure it’s the right one, etc. The estimate however, should be on all the effort taken to get to that point, plus the typing time, plus a margin for error.</p>
<p>As we’ve stablished before, that’s not a good comparison, hence the optimistic estimates.</p>
<h3>The due date</h3>
<p>We tend to think backwards from our goal. This is perfectly rational. We are given a goal, and an end-date. It’s natural to think that we are going to try to fit all the features we can in that amount of time. We don’t <em>know</em> how long it’s going to take to write it, because we haven’t written it yet. But we are usually optimistic we can do it in that amount of time. We are also afraid the task, which we really want to do, may be given to someone else, which will accept it for the same or less time and money.</p>
<h3>Technology and its pace</h3>
<p>The pace at which software and technology is currently evolving is remarkable. The common person has been living with software in our day-to-day lives for about 20 to 25 years. Software has come a long way in this time, and it seems that it has only scratched the surface of what’s possible to do with it. Software professionals have to keep up with this pace to remain competitive, and that means constantly staying to on the lookout for how to do things more efficiently, learn new technologies, and more.</p>
<p>However, users are not always at the latest and greatest, so software has to be written to accommodate shortcomings from the past and the future, different types of users, different legislation, and the list goes on forever. If we try to predict all these factors while estimating a software project, we run into another paradox: You can’t provide something for a user to try because you don’t have it yet. The user can’t tell you exactly what they think or want because they haven’t seen it yet.</p>
<h3>Interrupts</h3>
<p>We never take into account all the time required to perform other small tasks during a project’s lifetime. We help other people, answer questions, ask questions, provide builds, participate in meetings, read and write documentation, and a million other small things that eat up time. At the end of a year-long project, these seemingly small events amount to a sizeable amount of time. The problem is that every time an interruption occurs, getting back to the frame of mind we were requires some ramp-up time. That time is never taken into account (and it’s not easy to do so). That must be why many of us are night owls, when no one else is around.</p>
<h3>Research (or lack thereof)</h3>
<p>Often times we think something is straightforward to do, only to realize later that we need to research how to do it. Sometimes, that is a key part of the software we’re developing, but the entire project has to be put on hold, since a key assumption wasn’t valid: We didn’t know how to do something. That can throw a project’s estimate out to about infinite effort, if the problem is impossible to solve.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/igorsales.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/igorsales.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/igorsales.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/igorsales.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/igorsales.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/igorsales.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/igorsales.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/igorsales.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/igorsales.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/igorsales.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/igorsales.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/igorsales.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/igorsales.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/igorsales.wordpress.com/299/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=igorsales.ca&amp;blog=8048907&amp;post=299&amp;subd=igorsales&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://igorsales.ca/2010/08/22/on-software-project-estimation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bf2fa4aa190f1d669c7b929ba5468883?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">igorsales</media:title>
		</media:content>
	</item>
		<item>
		<title>Fast Gradient Vector Angle</title>
		<link>http://igorsales.ca/2010/04/10/fast-gradient-vector-angle/</link>
		<comments>http://igorsales.ca/2010/04/10/fast-gradient-vector-angle/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 16:25:44 +0000</pubDate>
		<dc:creator>igorsales</dc:creator>
				<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[Software dev]]></category>

		<guid isPermaLink="false">http://igorsales.ca/?p=256</guid>
		<description><![CDATA[Problem Many image processing algorithms require an image&#8217;s gradient vectors (for example, from the output of a Sobel operator). I came across this particular one which uses gradient vector angles to find symmetrically opposing vectors. It quickly became evident that it would be CPU intensive to use the atan2 function. Moreover, atan2&#8216;s output is an [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=igorsales.ca&amp;blog=8048907&amp;post=256&amp;subd=igorsales&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h1>Problem</h1>
<p>Many image processing algorithms require an image&#8217;s <a href="http://en.wikipedia.org/wiki/Gradient">gradient vectors</a> (for example, from the output of a <a href="http://en.wikipedia.org/wiki/Sobel_operator">Sobel operator</a>). I came across <a href="http://www.aprs.org.au/dicta2003/pdf/0879.pdf">this particular one</a> which uses gradient vector angles to find symmetrically opposing vectors. It quickly became evident that it would be CPU intensive to use the <em><a href="http://en.wikipedia.org/wiki/Atan2">atan2</a></em> function. Moreover, <em>atan2</em>&#8216;s output is an angle between -180˚ and 180˚ degrees. I needed an angle from 0˚ to 360˚.</p>
<p>For readability and portability purposes using <em>atan2</em> is not a problem, given that one might have a CPU with many really fast cores. But here&#8217;s the catch: implement it for a smartphone continuously analyzing images from the phone&#8217;s camera.</p>
<h1>Analysis</h1>
<p>First I looked at creating a cache of the <em>atan2</em> values, as they were computed (<a href="http://en.wikipedia.org/wiki/Lazy_evaluation">lazy evaluation</a>). I discarded the idea since it is complex, eats up memory quickly, and becomes slower as the data set grows.  I then analyzed the algorithm&#8217;s input domain, and realized it is really limited.</p>
<p>Smartphone cameras usually output images in the 32-bit RGBA or 24-bit RGB formats. These images are converted into grayscale 8-bit images for gradient vector computation. Thus, the input data for this problem is two 8-bit grayscale images, each representing the X and Y gradient vector components, where each vector component is 8 bits wide (between -128 and 127).</p>
<h2>vector angle using <em>atan2</em></h2>
<p>The traditional implementation calls for the following implementation.</p>
<p><code>unsigned short angle;<br />
angle = atan2(y,x);<br />
if(y&lt;0) angle += 360; /* adjust angle to [0,360]. */</code></p>
<div>I soon realized this can be solved with a classic <strong>to-make-it-faster-throw-memory-at-it</strong> approach.</div>
<h1>The solution</h1>
<h2>array lookup</h2>
<p>Pre-compute all the angle values! I created a script sweeping across all possible input values, outputting an array with 256 x 256 = 65536 entries as header file. Each entry in the array contains the angle given by <em>atan2(gy,gx)</em>. To store an angle with two digits of precision, we can use a 16-bit unsigned integer to conserve memory and take advantage of fast integer operations (as opposed to floating point). This array requires 128KB of memory (65536 entries with 2 bytes each). That&#8217;s not very much memory in a modern smartphone.</p>
<p>Finding a vector&#8217;s angle then becomes as simple as an array lookup:</p>
<p><code>angle = vector_angle[ (gy &lt;&lt; 8) | gx ];</code></p>
<p>Where <em>gx</em> and <em>gy</em> are the gradient vector X and Y components, and 8 bits wide.</p>
<h2><strong>Bonus side-effects</strong></h2>
<p>The curious reader will realize the input value range is asymmetric. There are 127 positive values and 128 negative values, and one zero (for a total of 256 values). If we&#8217;re trying to use these angles to find perfectly symmetric vectors, we need to be careful with the tolerance between the two opposing vectors. That requires extra CPU cycles.</p>
<p>However, pre-computing vector angles gives us a way to ensure the input is such that for any angle there&#8217;s an exact opposite angle (e.g. for 78.91º there will be 360º-78.91º = 281.09º). I did that by ensuring I had two values for zero (0 and -1). That way, -128 becomes opposite to 127, and so on as shown in the table below.</p>
<table border="1">
<tbody>
<tr>
<th>Negative</th>
<th>Positive</th>
</tr>
<tr>
<td>-128</td>
<td>127</td>
</tr>
<tr>
<td>-127</td>
<td>126</td>
</tr>
<tr>
<td>-126</td>
<td>125</td>
</tr>
<tr>
<td>&#8230;</td>
<td>&#8230;</td>
</tr>
<tr>
<td>-3</td>
<td>2</td>
</tr>
<tr>
<td>-2</td>
<td>1</td>
</tr>
<tr>
<td>-1</td>
<td>0</td>
</tr>
</tbody>
</table>
<h1>Experimental Results</h1>
<h2>Mean error</h2>
<p>I validated my approach by calculating the mean error between the &#8220;cached&#8221; angle and the value given by <em>atan2</em>. Each and every angle for vector (<em>g</em><em>x</em>,<em>g</em><em>y</em>) where <em>gx</em> and <em>gy</em> belong to [-<em>l</em>,<em>l</em>] is computed. As expected, the error for any <em>l≤</em>127 is 0.</p>
<p>Note: to be precise the range would have to be [-<em>l</em>,<em>l</em>-1] and <em>l</em>=128, but I use [-<em>l</em>,<em>l</em>] for simplicity.</p>
<p>For <em>l</em>&gt;127, it&#8217;s necessary to normalize any vector with |<em>gx|</em>&gt;127 or |<em>gy|</em>&gt;127 to the [-<em>l</em>,<em>l</em>] range, so we can perform the array lookup. I chose to bitwise right-shift both components 1 bit, until both <em>gx </em>and <em>gy</em> are within the [-<em>l</em>,<em>l</em>] range. We can see from the table below that it&#8217;s safe to use the array lookup approach for angles with up to 2 digits of precision,  when gradient vector component values are within the [-1000,1000] range.</p>
<table border="1">
<tbody>
<tr>
<th><em>l</em></th>
<th>Mean error</th>
</tr>
<tr>
<td>127</td>
<td>0.000000</td>
</tr>
<tr>
<td>255</td>
<td>0.001874</td>
</tr>
<tr>
<td>511</td>
<td>0.003105</td>
</tr>
<tr>
<td>1000</td>
<td>0.003806</td>
</tr>
<tr>
<td>10000</td>
<td>0.004907</td>
</tr>
</tbody>
</table>
<h2>Time results</h2>
<p>I compared the performance of the array lookup approach against the traditional <em>atan2</em> approach, by measuring the time that it takes to sweep the finite set of gradient vectors in the (<em>gx</em>,<em>gy</em>) domain, where  <em>gx</em> and <em>gy</em> belong to [-128,127]. I simulated the same experiment as if a number of images were analyzed (each image corresponds to 1 iteration). The table below shows the array lookup method is about 10 times faster than the traditional <em>atan2</em> approach.</p>
<table border="1">
<tbody>
<tr>
<th># of iterations</th>
<th><em>atan2</em> time</th>
<th>array lookup time</th>
</tr>
<tr>
<td>1</td>
<td>.010s</td>
<td>.007s</td>
</tr>
<tr>
<td>10</td>
<td>.035s</td>
<td>.011s</td>
</tr>
<tr>
<td>100</td>
<td>.267s</td>
<td>.033s</td>
</tr>
<tr>
<td>1000</td>
<td>2.597s</td>
<td>.239s</td>
</tr>
<tr>
<td>10000</td>
<td>25.836s</td>
<td>2.303s</td>
</tr>
</tbody>
</table>
<p>Moreover, as previously shown, some angles can be outside of the domain required by the array lookup approach. I have measured the performance of sweeping across the domain (<em>gx</em>,<em>gy</em>) where <em>gx</em> and <em>gy</em> belong to [-1000,1000]. In the case of <em>atan2</em> I have applied the values gx and gy directly, whereas in the case of the array lookup I have reduced each vector (<em>gx</em>,<em>gy</em>) to a known domain by shifting right both components 1 bit, as explained above. The table below shows that the array lookup approach still is 2 times faster than employing <em>atan2</em>.</p>
<table border="1">
<tbody>
<tr>
<th># of iterations</th>
<th><em>atan2</em> time</th>
<th>array lookup time</th>
</tr>
<tr>
<td>100</td>
<td>15.936s</td>
<td>6.681s</td>
</tr>
<tr>
<td>1000</td>
<td>159.320s</td>
<td>66.015s</td>
</tr>
<tr>
<td>10000</td>
<td>1591.944s</td>
<td>717.764s</td>
</tr>
</tbody>
</table>
<h2>Future work</h2>
<p>There&#8217;s room for improvement in the normalization of arbitrary vectors to the known array lookup input domain. My implementation is rather simple, and I believe one can improve it so the performance will be much closer to 10 times faster than the <em>atan2</em>, rather than twice as fast.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/igorsales.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/igorsales.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/igorsales.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/igorsales.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/igorsales.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/igorsales.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/igorsales.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/igorsales.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/igorsales.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/igorsales.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/igorsales.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/igorsales.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/igorsales.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/igorsales.wordpress.com/256/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=igorsales.ca&amp;blog=8048907&amp;post=256&amp;subd=igorsales&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://igorsales.ca/2010/04/10/fast-gradient-vector-angle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bf2fa4aa190f1d669c7b929ba5468883?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">igorsales</media:title>
		</media:content>
	</item>
		<item>
		<title>How to make Brazilian North-eastern Couscous in Ottawa</title>
		<link>http://igorsales.ca/2009/12/13/how-to-make-brazilian-north-eastern-couscous-in-ottawa/</link>
		<comments>http://igorsales.ca/2009/12/13/how-to-make-brazilian-north-eastern-couscous-in-ottawa/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 23:59:18 +0000</pubDate>
		<dc:creator>igorsales</dc:creator>
				<category><![CDATA[Food]]></category>

		<guid isPermaLink="false">http://igorsales.ca/?p=179</guid>
		<description><![CDATA[By popular request, here&#8217;s my recipe for North-eastern Brazilian Couscous. Ingredients and Implements This is what you&#8217;ll need: 1. A Couscous steamer, or a 2-stage vegetable steamer. Here&#8217;s mine (an Authentic Brazilian Couscous Steamer). It has three parts: the shell, the steamer grate, and the lid. 2.Pre-cooked polenta. My wife and I like Divella&#8216;s Polenta Instantanea, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=igorsales.ca&amp;blog=8048907&amp;post=179&amp;subd=igorsales&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>By popular request, here&#8217;s <strong>my</strong> recipe for North-eastern Brazilian Couscous.</p>
<h2>Ingredients and Implements</h2>
<p>This is what you&#8217;ll need:</p>
<p>1. A Couscous <strong>steamer</strong>, or a 2-stage vegetable steamer. Here&#8217;s mine (an Authentic Brazilian Couscous Steamer).</p>
<p style="text-align:center;"><a href="http://igorsales.files.wordpress.com/2009/11/img_63111.jpg"><img class="alignnone size-thumbnail wp-image-212" title="IMG_6311" src="http://igorsales.files.wordpress.com/2009/11/img_63111.jpg?w=112&#038;h=150" alt="" width="112" height="150" /></a> <a href="http://igorsales.files.wordpress.com/2009/11/img_6312.jpg"><img class="alignnone size-thumbnail wp-image-213" title="IMG_6312" src="http://igorsales.files.wordpress.com/2009/11/img_6312.jpg?w=150&#038;h=112" alt="" width="150" height="112" /></a> <a href="http://igorsales.files.wordpress.com/2009/11/img_6312.jpg"><img class="alignnone size-thumbnail wp-image-213" title="IMG_6312" src="http://igorsales.files.wordpress.com/2009/11/img_6313.jpg?w=150&#038;h=112" alt="" width="150" height="112" /></a></p>
<p>It has three parts: the shell, the steamer grate, and the lid.</p>
<p>2.Pre-cooked <strong>polenta</strong>. My wife and I like <a href="http://divella.it/">Divella</a>&#8216;s <em>Polenta Instantanea</em>, from <a href="http://www.labottega.ca/">La Bottega Nicastro</a>.</p>
<p><a href="http://igorsales.files.wordpress.com/2009/11/img_63102.jpg"><img class="size-thumbnail wp-image-222 aligncenter" title="IMG_6310" src="http://igorsales.files.wordpress.com/2009/11/img_63102.jpg?w=112&#038;h=150" alt="" width="112" height="150" /></a></p>
<p>3. Un-sweetened <strong>shredded coconut</strong>.</p>
<p>4. A <strong>soft cheese</strong>, like Havarti or Cheddar.</p>
<p>5. <strong>Salt</strong></p>
<p><strong>Preparation</strong></p>
<p>1. Fill <strong>half</strong> the <strong>bottom</strong> of the steamer with water (as shown above), replace the steamer grate.</p>
<p>2. Mix <strong>1 cup</strong> of the polenta with a <strong>1/4 cup</strong> of shredded coconut and about a <strong>1/2 tablespoon</strong> of salt (or to taste).</p>
<p style="text-align:center;"><a href="http://igorsales.files.wordpress.com/2009/11/img_63141.jpg"><img class="alignnone size-thumbnail wp-image-224" title="IMG_6314" src="http://igorsales.files.wordpress.com/2009/11/img_63141.jpg?w=150&#038;h=112" alt="" width="150" height="112" /></a> <a href="http://igorsales.files.wordpress.com/2009/11/img_63151.jpg"><img class="alignnone size-thumbnail wp-image-225" title="IMG_6315" src="http://igorsales.files.wordpress.com/2009/11/img_63151.jpg?w=150&#038;h=112" alt="" width="150" height="112" /></a> <a href="http://igorsales.files.wordpress.com/2009/11/img_6316.jpg"><img class="alignnone size-thumbnail wp-image-226" title="IMG_6316" src="http://igorsales.files.wordpress.com/2009/11/img_6316.jpg?w=150&#038;h=112" alt="" width="150" height="112" /></a></p>
<p>3. Mix well. Then add a <strong>3/4 cup</strong> of water, and mix until <strong>thoroughly</strong> <strong>moist</strong>.</p>
<p style="text-align:center;"><a href="http://igorsales.files.wordpress.com/2009/11/img_6317.jpg"><img class="alignnone size-thumbnail wp-image-228" title="IMG_6317" src="http://igorsales.files.wordpress.com/2009/11/img_6317.jpg?w=150&#038;h=112" alt="" width="150" height="112" /></a> <a href="http://igorsales.files.wordpress.com/2009/11/img_6318.jpg"><img class="alignnone size-thumbnail wp-image-229" title="IMG_6318" src="http://igorsales.files.wordpress.com/2009/11/img_6318.jpg?w=150&#038;h=112" alt="" width="150" height="112" /></a> <a href="http://igorsales.files.wordpress.com/2009/11/img_6319.jpg"><img class="alignnone size-thumbnail wp-image-230" title="IMG_6319" src="http://igorsales.files.wordpress.com/2009/11/img_6319.jpg?w=150&#038;h=112" alt="" width="150" height="112" /></a></p>
<p>4. <strong>Fluff</strong> with a fork or spoon until dry ingredients <strong>absorb all the water</strong>.</p>
<p>5. <strong>Transfer half</strong> the couscous to the steamer, and <strong>top it</strong> with thin slices of <strong>cheese</strong>. <strong>Push</strong> on it gently with the back of a spoon to <strong>pack</strong> the couscous a little.</p>
<p style="text-align:center;"><a href="http://igorsales.files.wordpress.com/2009/11/img_6320.jpg"><img class="alignnone size-thumbnail wp-image-232" title="IMG_6320" src="http://igorsales.files.wordpress.com/2009/11/img_6320.jpg?w=150&#038;h=112" alt="" width="150" height="112" /></a> <a href="http://igorsales.files.wordpress.com/2009/11/img_6321.jpg"><img class="alignnone size-thumbnail wp-image-233" title="IMG_6321" src="http://igorsales.files.wordpress.com/2009/11/img_6321.jpg?w=150&#038;h=112" alt="" width="150" height="112" /></a> <a href="http://igorsales.files.wordpress.com/2009/11/img_6322.jpg"><img class="alignnone size-thumbnail wp-image-234" title="IMG_6322" src="http://igorsales.files.wordpress.com/2009/11/img_6322.jpg?w=150&#038;h=112" alt="" width="150" height="112" /></a></p>
<p>6. <strong>Transfer</strong><strong> the rest</strong> of the couscous to the steamer. <strong>Pack</strong> the couscous a little..<strong> Top it</strong> with more <strong>cheese</strong>.</p>
<p>7. Close the steamer and cook it on medium-high (position 6 out of 10 in our stove)</p>
<p style="text-align:center;"><a href="http://igorsales.files.wordpress.com/2009/11/img_6323.jpg"><img class="alignnone size-thumbnail wp-image-235" title="IMG_6323" src="http://igorsales.files.wordpress.com/2009/11/img_6323.jpg?w=150&#038;h=112" alt="" width="150" height="112" /></a> <a href="http://igorsales.files.wordpress.com/2009/11/img_6324.jpg"><img class="alignnone size-thumbnail wp-image-236" title="IMG_6324" src="http://igorsales.files.wordpress.com/2009/11/img_6324.jpg?w=112&#038;h=150" alt="" width="112" height="150" /></a></p>
<p>7. Cook until the <strong>cheese is bubbling</strong> and the wonderful <strong>scent of cooked polenta</strong> comes out. Serve immediately.</p>
<p style="text-align:center;"><a href="http://igorsales.files.wordpress.com/2009/11/img_6325.jpg"><img class="alignnone size-thumbnail wp-image-237" title="IMG_6325" src="http://igorsales.files.wordpress.com/2009/11/img_6325.jpg?w=150&#038;h=112" alt="" width="150" height="112" /></a> <a href="http://igorsales.files.wordpress.com/2009/11/img_6326.jpg"><img class="alignnone size-thumbnail wp-image-238" title="IMG_6326" src="http://igorsales.files.wordpress.com/2009/11/img_6326.jpg?w=150&#038;h=112" alt="" width="150" height="112" /></a></p>
<p style="text-align:left;">Cut into quarters or eighths. <strong>S</strong><strong>pread </strong>some<strong> butter</strong> (which melts and adds a flavour), or <strong>top with cottage cheese</strong>, or just <strong>eat as is</strong>. It&#8217;s delicious any way!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/igorsales.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/igorsales.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/igorsales.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/igorsales.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/igorsales.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/igorsales.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/igorsales.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/igorsales.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/igorsales.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/igorsales.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/igorsales.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/igorsales.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/igorsales.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/igorsales.wordpress.com/179/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=igorsales.ca&amp;blog=8048907&amp;post=179&amp;subd=igorsales&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://igorsales.ca/2009/12/13/how-to-make-brazilian-north-eastern-couscous-in-ottawa/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bf2fa4aa190f1d669c7b929ba5468883?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">igorsales</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/11/img_63111.jpg?w=112" medium="image">
			<media:title type="html">IMG_6311</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/11/img_6312.jpg?w=150" medium="image">
			<media:title type="html">IMG_6312</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/11/img_6313.jpg?w=150" medium="image">
			<media:title type="html">IMG_6312</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/11/img_63102.jpg?w=112" medium="image">
			<media:title type="html">IMG_6310</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/11/img_63141.jpg?w=150" medium="image">
			<media:title type="html">IMG_6314</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/11/img_63151.jpg?w=150" medium="image">
			<media:title type="html">IMG_6315</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/11/img_6316.jpg?w=150" medium="image">
			<media:title type="html">IMG_6316</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/11/img_6317.jpg?w=150" medium="image">
			<media:title type="html">IMG_6317</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/11/img_6318.jpg?w=150" medium="image">
			<media:title type="html">IMG_6318</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/11/img_6319.jpg?w=150" medium="image">
			<media:title type="html">IMG_6319</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/11/img_6320.jpg?w=150" medium="image">
			<media:title type="html">IMG_6320</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/11/img_6321.jpg?w=150" medium="image">
			<media:title type="html">IMG_6321</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/11/img_6322.jpg?w=150" medium="image">
			<media:title type="html">IMG_6322</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/11/img_6323.jpg?w=150" medium="image">
			<media:title type="html">IMG_6323</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/11/img_6324.jpg?w=112" medium="image">
			<media:title type="html">IMG_6324</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/11/img_6325.jpg?w=150" medium="image">
			<media:title type="html">IMG_6325</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/11/img_6326.jpg?w=150" medium="image">
			<media:title type="html">IMG_6326</media:title>
		</media:content>
	</item>
		<item>
		<title>The Leader&#8217;s Lair</title>
		<link>http://igorsales.ca/2009/11/28/the-leaders-lair/</link>
		<comments>http://igorsales.ca/2009/11/28/the-leaders-lair/#comments</comments>
		<pubDate>Sat, 28 Nov 2009 05:27:31 +0000</pubDate>
		<dc:creator>igorsales</dc:creator>
				<category><![CDATA[Biz Observations]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://igorsales.ca/?p=176</guid>
		<description><![CDATA[The premise If you live in Canada, you&#8217;ve probably seen a TV show called Dragon&#8217;s Den. For those of you who never heard of it, it&#8217;s a show where a panel of 5 investors listen to business ideas from people seeking capital to take their idea or business to the next level. The format is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=igorsales.ca&amp;blog=8048907&amp;post=176&amp;subd=igorsales&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>The premise</h2>
<p>If you live in Canada, you&#8217;ve probably seen a TV show called <a href="http://www.cbc.ca/dragonsden/">Dragon&#8217;s Den</a>. For those of you who never heard of it, it&#8217;s a show where a panel of 5 investors listen to business ideas from people seeking capital to take their idea or business to the next level. The format is very straightforward: Candidates ask for a certain amount of money in exchange for a percentage of their business. These candidates would use the cash to grow the business, so both them and the investors share the risks and the profits.</p>
<p>As part of the <a href="http://www.startupottawa.com/">Ottawa Startup</a> community, I think it would be awesome if we had a &#8220;Dragon&#8217;s Den with <strong>Human Capital</strong>&#8221; show. I call it <strong>Leader&#8217;s Lair</strong>. We have lots of technology talent in this city (including myself), and many of us are trying to start our own thing. However, it&#8217;s hard to move a mountain by oneself, and many times, one just needs a hand, not employees.</p>
<h2>The Pitch</h2>
<p>Create a web-based show (<strong>Leader&#8217;s Lair</strong>) with a similar format to Dragon&#8217;s Den, where, instead of money, the currency is <strong>Human Capital!</strong></p>
<p>Let me explain: <strong>Money</strong> can <strong>buy</strong> <strong>things</strong> and <strong>pay</strong> for <strong>people&#8217;s time</strong>. That&#8217;s wonderful. However, I find (and I&#8217;m sure many of you do without even realizing it) that to get where you want to be, you need another type of capital: <strong>Human Capital</strong>.</p>
<p><strong>Human Capital</strong> can give you<strong> feedback</strong>, <strong>connect</strong> you to the right people, <strong>show</strong> you the ropes, and most importantly, <strong>care</strong>.</p>
<p>Most <strong>Leaders</strong> I have met through the Startup Ottawa community want to share their experiences. So much that they take the reigns of our very own &#8220;Ottawa Start-up Community&#8221; and keep it alive and kicking. It&#8217;s a lot of work, for really no compensation. It&#8217;s fantastic! They do it because they <strong>care</strong>. Unfortunately these people become really busy and sought after. Naturally, the amount of <strong>feedback</strong>, <strong>connecting</strong>, <strong>showing</strong>, and <strong>caring</strong> towards any of us tends to zero rapidly.</p>
<p>We can bridge this gap and have fun doing it. How? Read on.</p>
<h2>Leader&#8217;s Lair, the show</h2>
<p>An <strong>innovator</strong> presents her business idea, and offers a<strong> part</strong> of her start-up business in exchange for a <strong>Leader&#8217;s</strong> expertise, in front of a panel of 5 <strong>Leaders</strong>. Examples:</p>
<ul>
<li>I need <strong>Business</strong> expertise &#8211; Where is the money in my idea?</li>
<li>I need <strong>Marketing</strong> expertise &#8211; How to make my idea appealing?</li>
<li>I need <strong>Sales</strong> expertise &#8211; How to price and sell my product or service?</li>
<li>I need <strong>Execution</strong> expertise &#8211; What do I need to make this idea happen?</li>
</ul>
<p>Discussions between <strong>Leaders</strong> and the <strong>innovator</strong> is encouraged. If a <strong>Leader</strong> finds the idea is interesting, he can offer his expertise as a <strong>commitment</strong> (e.g. half a day of his marketing expertise every two months), and <strong>negotiate</strong> the terms (e.g. for 5% of the profits for the first year). If the idea is of no interest to him, the <strong>Leader</strong> should explain why to the <strong>innovator</strong>.</p>
<p>The <strong>commitment</strong> from a <strong>Leader</strong> to an <strong>innovator</strong> keeps the communication channel open (helping her succeed with expert advice). And the promise of something in return from an <strong>innovator</strong> to a <strong>Leader</strong> is an added incentive for him to <strong>care</strong>, which leads both to success!</p>
<h2><strong>Call to Action</strong></h2>
<p>The concept is pretty simple. A couple of <strong>cameras</strong>, a panel of <em>committed</em> <strong>Leaders</strong>, movie <strong>editing</strong> software, an <strong>internet</strong> connection, a handful of <em>wannabe</em><strong> innovators</strong>, perhaps even a <em>volunteer</em> <strong>M.C.</strong>, and we have a <a href="http://youtube.com">YouTube</a> show worth watching.</p>
<p>Are you in?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/igorsales.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/igorsales.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/igorsales.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/igorsales.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/igorsales.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/igorsales.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/igorsales.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/igorsales.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/igorsales.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/igorsales.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/igorsales.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/igorsales.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/igorsales.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/igorsales.wordpress.com/176/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=igorsales.ca&amp;blog=8048907&amp;post=176&amp;subd=igorsales&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://igorsales.ca/2009/11/28/the-leaders-lair/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bf2fa4aa190f1d669c7b929ba5468883?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">igorsales</media:title>
		</media:content>
	</item>
		<item>
		<title>TeamCamp &#8211; Year 1</title>
		<link>http://igorsales.ca/2009/10/10/teamcamp-year-1/</link>
		<comments>http://igorsales.ca/2009/10/10/teamcamp-year-1/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 00:08:22 +0000</pubDate>
		<dc:creator>igorsales</dc:creator>
				<category><![CDATA[Biz Goals]]></category>
		<category><![CDATA[Biz Observations]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Peopleware]]></category>
		<category><![CDATA[Software dev]]></category>

		<guid isPermaLink="false">http://igorsales.ca/?p=114</guid>
		<description><![CDATA[It&#8217;s been almost one full year of TeamCamp (led by our fearless leader Chris Schmitt) for me, and I have learned some invaluable lessons. Execution, execution, execution You can have a million dollar idea. If it doesn&#8217;t leave your head, it&#8217;s worth nothing. It&#8217;s that simple. Like many people, I had the misconception that they [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=igorsales.ca&amp;blog=8048907&amp;post=114&amp;subd=igorsales&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been almost one full year of <a href="http://teamcamp.ca">TeamCamp</a> (led by our fearless leader Chris Schmitt) for me, and I have learned some invaluable lessons.</p>
<h3>Execution, execution, execution</h3>
<p>You can have a million dollar idea. If it doesn&#8217;t leave your head, it&#8217;s worth nothing. It&#8217;s that simple. Like many people, I had the misconception that <em>they</em><em> are ought to get me</em>: Other people are out there to steal my ideas, screw me over, climb on my back, and then sue me. Ok, perhaps not quite as dramatically, but you get the point.</p>
<p>My advice: talk to people. If you have an idea, share it. There&#8217;s people out there willing to listen, to give you advice, to help you, and best of all: waiting for you to execute on it, so they can use it!</p>
<p>Most importantly, when you try to execute your idea you will realize why execution is so much more important (and difficult) than the idea itself. <a href="http://en.wikipedia.org/wiki/Thomas_Edison">Thomas Edison</a> had realized this way back (1% inspiration vs. 99% perspiration).</p>
<h3>Network</h3>
<p>Ok, so executing your idea sounds wonderful right about now. I learned that part of the execution is to share the idea and listen to feedback. Who is willing to listen to your idea?</p>
<p>Like-minded people.</p>
<p>Find working groups of interest to you. Join mailing lists, start a blog, get a twitter account, listen and be heard. Surround yourself with peers that want to achieve similar goals.</p>
<p>That became the one of the main reasons I kept going to TeamCamp. First I got to know the venue, <a href="http://thecodefactory.ca">The Code Factory</a>. Quickly I learned about all the birds-of-a-feather groups and meetings taking place in the region. Then lots of well connected people connected me with other well-connected people. Someday, I hope I&#8217;ll be as well connected, and pay back the favour.</p>
<h3>The power of examples</h3>
<p>Winter was starting to settle in. It was still one of my first TeamCamp meetings, and many new faces were present. We weren&#8217;t discussing any particularly interesting topic amongst techies, so there was almost a look of apathy on everyone&#8217;s face. We turned to the second half of the meeting, where <a href="http://www.nashinfo.com/">John Nash</a> wanted to talk about something he had built on his spare time. He didn&#8217;t have a fancy presentation. He just did a brief introduction, a demo, and suddenly it clicked. The look on our faces changed immediately. On <strong>all</strong> of us. On another meeting about how to present to customers, months later, <a href="http://isfanstartup.blogspot.com/">Allan Isfan</a> reiterated the same concept.</p>
<p>I have no scientific evidence of this, but it&#8217;s easy to observe the empirical evidence. It&#8217;s much easier to explain something when you see it working rather than to talk about it. A mock-up, a very simple implementation of a concept, that&#8217;s all it takes.</p>
<h3>MVP</h3>
<p>No, not Most Valuable Player, but rather <strong>Minimum Viable Product</strong>. Since you&#8217;re building a demo version of your idea, why not think about the absolute minimum you need to get it in front of customers? Fact is, MVP is so simple, it doesn&#8217;t need further explanation.</p>
<p>The MVP will allow you to get feedback quick, and show it to potential customers. It will also provide some insight into how difficult it&#8217;ll be to implement the full-featured product. It may also help you land the first customers, which can help fund the second round of implementation and so on.</p>
<p>It&#8217;s been a great ride, and I&#8217;m looking forward to the next year of TeamCamp.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/igorsales.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/igorsales.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/igorsales.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/igorsales.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/igorsales.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/igorsales.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/igorsales.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/igorsales.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/igorsales.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/igorsales.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/igorsales.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/igorsales.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/igorsales.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/igorsales.wordpress.com/114/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=igorsales.ca&amp;blog=8048907&amp;post=114&amp;subd=igorsales&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://igorsales.ca/2009/10/10/teamcamp-year-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bf2fa4aa190f1d669c7b929ba5468883?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">igorsales</media:title>
		</media:content>
	</item>
		<item>
		<title>Image Processing with Quartz Composer</title>
		<link>http://igorsales.ca/2009/09/13/image-processing-with-quartz-composer/</link>
		<comments>http://igorsales.ca/2009/09/13/image-processing-with-quartz-composer/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 17:37:51 +0000</pubDate>
		<dc:creator>igorsales</dc:creator>
				<category><![CDATA[Image Processing]]></category>
		<category><![CDATA[Software dev]]></category>

		<guid isPermaLink="false">http://igorsales.ca/?p=93</guid>
		<description><![CDATA[I was certain to find on the internet many people, and their respective blogs, performing image processing with Apple&#8216;s Quartz Composer. Quartz Composer is a great tool for creating stunning visual effects with Core Image, visually programming. One does not write code,but rather draws it by dragging and dropping boxes and connections between boxes. It&#8217;s [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=igorsales.ca&amp;blog=8048907&amp;post=93&amp;subd=igorsales&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I was certain to find on the internet many people, and their respective blogs, performing <a href="http://en.wikipedia.org/wiki/Image_processing">image processing</a> with <a href="http://apple.com">Apple</a>&#8216;s <a href="http://developer.apple.com/mac/articles/graphicsmedia/quartzcomposerinleopard.html">Quartz Composer</a>. Quartz Composer is a great tool for creating stunning visual effects with Core Image, <em><a href="http://en.wikipedia.org/wiki/Visual_programming_language">visually programming</a></em>. One does not write code,but rather draws it by dragging and dropping boxes and connections between boxes. It&#8217;s my favourite kind of programming: Focuses on the idea, the implementation is just an artifact, an afterthought.</p>
<p>Well, a few Google searches later, and guess what? I could find great sites on Q.C., such as <a href="http://www.samkass.com/blog/">Sam&#8217;s Quartz Composer blog</a>, but nobody processing images with Q.C.</p>
<p>What I needed was a Core Image Filter to calculate the <em><a href="http://en.wikipedia.org/wiki/Mean_squared_error">Mean Square Error</a></em> (MSE) between two images. Sure, Q.C. didn&#8217;t have one out of the box, but that was easily fixed by using a generic GPU-accellerated <em><a href="http://en.wikipedia.org/wiki/Core_Image">Core Image</a> Filter</em>. This <em>generic</em> Core Image Filter is based on the <a href="http://www.quartzcompositions.com/phpBB2/mediawiki/index.php/Core_Image_Kernels">CIKernel</a> language (a subset of the <a href="http://www.opengl.org/documentation/glsl/">OpenGL Shading Language</a>, OpenGLSL). That was all the <em>code</em> I had to write. About 10 lines of C-like code, and a tiny amount of javascript (mostly modified from the Core Image Filter template).<code><br />
</code><br />
Then I used an <em>averaging </em>filter, to compute the average of the square error. Tada! There I had my MSE calculator. Re-factoring was a bliss, by simply selecting the MSE boxes, and clicking on &#8220;Create Macro&#8221;. That selection became a box with its own inputs (<em>original</em> image, <em>estimated</em> image) and outputs (each component of the averaged pixel). Sweet, really sweet!</p>
<p><img class="aligncenter size-full wp-image-94" title="MSE patch" src="http://igorsales.files.wordpress.com/2009/09/mse-patch.png?w=570&#038;h=457" alt="MSE patch" width="570" height="457" />But, this still doesn&#8217;t close the gap to this post&#8217;s title. How do we use Quartz Composer as an Image Processing tool? Well, it can be employed quickly as an Image Processing lab. For example, I created a patch to compare two images, side by side, taken with the Mac&#8217;s built-in camera, where you would compute the MSE between the images.</p>
<p style="text-align:center;"><img class="aligncenter size-large wp-image-96" title="MSE between two shots" src="http://igorsales.files.wordpress.com/2009/09/mse-between-two-shots.png?w=600&#038;h=376" alt="MSE between two shots" width="600" height="376" /></p>
<p>The <em>original</em> image is stored on the left-hand side. Every time the user left-clicks on the Viewer window, the<em> original</em> image is updated. The <em>estimated</em> image (camera&#8217;s output image) is shown on the right-hand side, masked with the <em>original</em> image. At the middle bottom of the viewer there is the computed MSE. This <em>lab</em> allows you to develop your image processing algorithm, and see that it works before trying to code or optimize it.</p>
<p>To play with this small <em>lab</em>, download the <a href="http://www.blueprintsapp.com/igorsales.ca/MSE.qtz">Quartz Composer file</a>.</p>
<p>Please comment if it this helps, or if have other cool patches or filters in Quartz Composer to share.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/igorsales.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/igorsales.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/igorsales.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/igorsales.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/igorsales.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/igorsales.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/igorsales.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/igorsales.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/igorsales.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/igorsales.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/igorsales.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/igorsales.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/igorsales.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/igorsales.wordpress.com/93/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=igorsales.ca&amp;blog=8048907&amp;post=93&amp;subd=igorsales&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://igorsales.ca/2009/09/13/image-processing-with-quartz-composer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bf2fa4aa190f1d669c7b929ba5468883?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">igorsales</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/09/mse-patch.png" medium="image">
			<media:title type="html">MSE patch</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/09/mse-between-two-shots.png?w=300" medium="image">
			<media:title type="html">MSE between two shots</media:title>
		</media:content>
	</item>
		<item>
		<title>WordPress backup with Automator</title>
		<link>http://igorsales.ca/2009/09/08/wordpress-backup-with-automator/</link>
		<comments>http://igorsales.ca/2009/09/08/wordpress-backup-with-automator/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 00:46:29 +0000</pubDate>
		<dc:creator>igorsales</dc:creator>
				<category><![CDATA[Automator]]></category>

		<guid isPermaLink="false">http://igorsales.ca/?p=78</guid>
		<description><![CDATA[To all the WordPress bloggers out there that got hit by the worm: You should backup regularly, and here&#8217;s how: You can easily backup your WordPress blog with a simple Automator (sorry Windows users) workflow. What you will need A WordPress blog Apple&#8217;s Automator OttoMate &#8211; Web Test Automator Actions Be logged in to your [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=igorsales.ca&amp;blog=8048907&amp;post=78&amp;subd=igorsales&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>To all the <a href="http://wordpress.org/">WordPress</a> bloggers out there that got hit by the worm: You should backup regularly, and here&#8217;s how: You can easily backup your <a href="http://wordpress.org/">WordPress</a> blog with a simple Automator (sorry Windows users) workflow.</p>
<h3>What you will need</h3>
<ul>
<li>A WordPress blog</li>
<li>Apple&#8217;s <a href="http://www.apple.com/downloads/macosx/automator/">Automator</a></li>
<li><a href="http://www.ottomate.org/">OttoMate</a> &#8211; Web Test Automator Actions</li>
<li>Be logged in to your blog</li>
</ul>
<h3>The workflow</h3>
<p>The workflow to back up  your blog is pretty simple. Once it&#8217;s setup, all you need is to run it.</p>
<p><img class="aligncenter size-full wp-image-81" title="Picture 3" src="http://igorsales.files.wordpress.com/2009/09/picture-3.png?w=570&#038;h=522" alt="Picture 3" width="570" height="522" /></p>
<ol>
<li>Ensure you have the <a href="http://www.ottomate.org/">OttoMate</a> actions installed in your /Users/&lt;username&gt;/Library/Automator</li>
<li>Create a new Automator Workflow.</li>
<li>Add a variable called &#8220;Blog Export URL&#8221;, and set its value to http://&lt;mywordpressblogdomain&gt;/wp-admin/export.php</li>
<li>Add a &#8220;Get Value of Variable&#8221; action to the workflow, and select the &#8220;Blog Export URL&#8221; variable.</li>
<li>Add a &#8220;New Safari Documents&#8221; action. That will open a new Safari window pointing to the &#8220;Blog Export URL&#8221;</li>
<li>Add an <a href="http://www.ottomate.org/">OttoMate</a> &#8220;Click Link or Button in Current Page&#8221; action
<ol>
<li>Select &#8220;HTML button&#8221; and &#8220;text&#8221; in the drop down widgets.</li>
<li>Type &#8220;Download Export File&#8221; in the text field. Note: If your WordPress installation is in another language, enter the appropriate text for that button.</li>
</ol>
</li>
<li>Add a &#8220;Pause&#8221; action, to allow Safari enough time to download the blog XML file.</li>
<li>Add a &#8220;Find Finder Items&#8221; action to find the wordpress XML file in the Downloads folder.
<ol>
<li>Select the folder where downloads go (by the default they go into the &#8220;Downloads&#8221; folder).</li>
<li>Set the file filter. In my case, I wanted files that start with &#8220;wordpress&#8221; and end with &#8220;.xml&#8221;</li>
</ol>
</li>
<li>Finally, add a &#8220;Move Finder Items&#8221; action to copy the files selected by the previous action, to their destination location (&#8220;/Users/&lt;username&gt;/Documents/&#8230;/blog backups&#8221; in my case).</li>
<li>Run the workflow, and watch it back up your blog.</li>
</ol>
<p>Notes:</p>
<ul>
<li>WordPress export does not export media. Keep a copy of the media you push to your blogs.</li>
<li>You should program Automator to run your wordpress backup action periodically (say every day, or twice a day).</li>
<li>You still need to close the safari window after the backup, since there doesn&#8217;t seem to be an action to do that. If you know one, please comment.</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/igorsales.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/igorsales.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/igorsales.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/igorsales.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/igorsales.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/igorsales.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/igorsales.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/igorsales.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/igorsales.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/igorsales.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/igorsales.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/igorsales.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/igorsales.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/igorsales.wordpress.com/78/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=igorsales.ca&amp;blog=8048907&amp;post=78&amp;subd=igorsales&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://igorsales.ca/2009/09/08/wordpress-backup-with-automator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bf2fa4aa190f1d669c7b929ba5468883?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">igorsales</media:title>
		</media:content>

		<media:content url="http://igorsales.files.wordpress.com/2009/09/picture-3.png" medium="image">
			<media:title type="html">Picture 3</media:title>
		</media:content>
	</item>
		<item>
		<title>People I want to meet</title>
		<link>http://igorsales.ca/2009/09/07/people-i-want-to-meet/</link>
		<comments>http://igorsales.ca/2009/09/07/people-i-want-to-meet/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 19:34:41 +0000</pubDate>
		<dc:creator>igorsales</dc:creator>
				<category><![CDATA[High "Fan"-In]]></category>
		<category><![CDATA[Peopleware]]></category>

		<guid isPermaLink="false">http://igorsales.ca/?p=29</guid>
		<description><![CDATA[There&#8217;s a lot of people I would enjoy meeting in person. My list has been changing over time, and some of the ones I had some hope of meeting passed away. Here&#8217;s a list, in the hope that they&#8217;ll see it and at least get curious to meet me also ;-). May happen soon Amber [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=igorsales.ca&amp;blog=8048907&amp;post=29&amp;subd=igorsales&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s a lot of people I would enjoy meeting in person. My list has been changing over time, and some of the ones I had some hope of meeting passed away. Here&#8217;s a list, in the hope that they&#8217;ll see it and at least get curious to meet me also ;-).</p>
<h3><strong>May happen soon</strong></h3>
<ol>
<li><a href="http://ambermac.com/">Amber MacArthur</a>, from <a href="http://www.commandn.tv/">CommandN</a> and <a href="http://www.twit.tv/natn">net@night</a>. Her shows are awesome, and through her I became a fan of <a href="http://www.watchtheguild.com/">The Guild</a>, with <a href="http://feliciaday.com/">Felicia Day</a>.</li>
</ol>
<h3>May happen some day</h3>
<ol>
<li><a href="http://timharford.com/">Tim Harford</a>, author of <a href="http://timharford.com/undercovereconomist/">The Undercover Economist</a>, and <a href="http://timharford.com/logicoflife/">The Logic of Life</a>.</li>
<li><a href="http://www.twit.tv/">Leo Laporte</a>, the Tech guy. Big fan of his show.</li>
<li><a href="http://www.sarahlane.com/">Sarah Lane</a> (maybe <a href="http://martinsargent.com/">Martin Sargent</a>?) from <a href="http://twit.tv/twif">This Week in Fun</a>. At first she seemed to be like an extremely high maintenance chick. But now I enjoy the <a href="http://twit.tv/twif">TWIF</a> show in almost a masochistic way.</li>
<li><a href="http://ihnatko.com/">Andy Ihnatko</a>, just &#8217;cause he seems like a fun wacky guy.</li>
</ol>
<h3>Will probably never happen</h3>
<ol>
<li><a href="http://www.apple.com/pr/bios/jobs.html"><span style="text-decoration:line-through;">Steve Jobs</span></a><span style="text-decoration:line-through;">, CEO of </span><a href="http://www.apple.ca/"><span style="text-decoration:line-through;">Apple</span></a>. I wouldn&#8217;t know what to tell him, especially after what I heard on <a href="http://www.twit.tv/212">TWiT 212</a>. I give him money, he gives my great products. Let&#8217;s leave it at that.</li>
<li><a href="http://woz.org/">Steve Wozniak (the Woz)</a> (In fact I rubbed shoulders with him when I went to hear him speak on Aug 19 2009, at the <a href="http://www.brookstreet.ca/">Brookstreet</a> hotel in Kanata, Ontario, Canada).</li>
<li><a href="http://en.wikipedia.org/wiki/Eddie_Vedder">Eddie Vedder</a>, the voice behind <a title="Pearl Jam's Site" href="http://www.pearljam.com/" target="_blank">Pearl Jam</a>.</li>
<li><a href="http://www.stephenfry.com/">Stephen Fry</a>, Comedian, Author and active twitterer/blogger.</li>
</ol>
<h3>Famous People I could have met</h3>
<ol>
<li><a href="http://en.wikipedia.org/wiki/Donald_Sutherland">Donald Sutherland</a>. We shared a flight from Toronto to Washington, DC one time.</li>
<li><a href="http://www.bobrae.ca/">Bob Rae</a>. Got into an elevator with him at the Ottawa airport.</li>
</ol>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/igorsales.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/igorsales.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/igorsales.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/igorsales.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/igorsales.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/igorsales.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/igorsales.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/igorsales.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/igorsales.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/igorsales.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/igorsales.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/igorsales.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/igorsales.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/igorsales.wordpress.com/29/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=igorsales.ca&amp;blog=8048907&amp;post=29&amp;subd=igorsales&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://igorsales.ca/2009/09/07/people-i-want-to-meet/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bf2fa4aa190f1d669c7b929ba5468883?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">igorsales</media:title>
		</media:content>
	</item>
		<item>
		<title>Where vs. What</title>
		<link>http://igorsales.ca/2009/08/22/hello-world-2/</link>
		<comments>http://igorsales.ca/2009/08/22/hello-world-2/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 15:57:24 +0000</pubDate>
		<dc:creator>igorsales</dc:creator>
				<category><![CDATA[Biz Goals]]></category>
		<category><![CDATA[Business]]></category>

		<guid isPermaLink="false">http://igorsales.wordpress.com/2009/08/22/hello-world-2/</guid>
		<description><![CDATA[I know where I want to be. I can almost smell the air in my future office, the work environment, and the type of people I&#8217;d hire to work with me. I can picture the office layout and the location. It would have to be within cycling distance from my home, and it would have [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=igorsales.ca&amp;blog=8048907&amp;post=30&amp;subd=igorsales&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I know <strong>where</strong> I want to be. I can almost smell the air in my future office, the work environment, and the type of people I&#8217;d hire to work with me. I can picture the office layout and the location. It would have to be within cycling distance from my home, and it would have to have showers. I really want to be more environmentally responsible, while staying in shape.</p>
<p>I could go on and on, but there is a catch: the <strong>what</strong>.</p>
<p>Knowing <strong>where</strong> to be is the easy part to figure out. If it were the only step necessary, I think there would be many more happy people in the world. Unfortunately the <strong>what</strong>, and effectively the <strong>how</strong> are what&#8217;s keeping me from getting to <strong>where</strong>.</p>
<p>But there&#8217;s <strong>hope</strong>, and that&#8217;s why I&#8217;m starting <strong>this blog</strong>. This <strong>hope</strong> is what&#8217;s driving me towards finding a <strong>solution</strong>, or better, a <strong>problem</strong>, in which I really believe I (and those surrounding me), will find a profitable <strong>solution</strong> for customers and for myself (and my team). A kind of a win-win situation, where I can contribute and live off it.</p>
<p>Since I&#8217;m the CEO (<strong>C</strong>hief <strong>E</strong>verything <strong>O</strong>fficer) of my life, I took the executive decision to blog about my <strong>goal</strong>, in the hope that I can help the community as much as the community can contribute towards achieving my <strong>dream</strong>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/igorsales.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/igorsales.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/igorsales.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/igorsales.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/igorsales.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/igorsales.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/igorsales.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/igorsales.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/igorsales.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/igorsales.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/igorsales.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/igorsales.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/igorsales.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/igorsales.wordpress.com/30/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=igorsales.ca&amp;blog=8048907&amp;post=30&amp;subd=igorsales&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://igorsales.ca/2009/08/22/hello-world-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bf2fa4aa190f1d669c7b929ba5468883?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">igorsales</media:title>
		</media:content>
	</item>
	</channel>
</rss>
