<?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>Implovator</title>
	<atom:link href="http://www.implovator.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.implovator.com</link>
	<description>Sometimes innovating gets your hands dirty</description>
	<lastBuildDate>Thu, 10 May 2012 02:25:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>The Brammo Empulse Arrives&#8230;Finally</title>
		<link>http://www.implovator.com/2012/05/the-brammo-empulse-arrives-finally/</link>
		<comments>http://www.implovator.com/2012/05/the-brammo-empulse-arrives-finally/#comments</comments>
		<pubDate>Thu, 10 May 2012 02:25:17 +0000</pubDate>
		<dc:creator>implovator</dc:creator>
				<category><![CDATA[EV]]></category>
		<category><![CDATA[Not Geek]]></category>

		<guid isPermaLink="false">http://www.implovator.com/?p=688</guid>
		<description><![CDATA[If you've read any of my posts on my Enertia, you know I love the bike. Of the few electric motorcycles out there, it was the absolute best bike for me. However, I knew it was far from my dream electric motorcycle. Brammo had to compromise too much in their quest to make it reasonably [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.implovator.com/wp-content/uploads/2012/05/1.jpg"><img src="http://www.implovator.com/wp-content/uploads/2012/05/1-300x200.jpg" alt="" title="2012 Brammo Empulse R" width="300" height="200" class="aligncenter size-medium wp-image-689" /></a></p>
<p>If you've read any of my posts on my Enertia, you know I love the bike. Of the few electric motorcycles out there, it was the absolute best bike for me. However, I knew it was far from my dream electric motorcycle. Brammo had to compromise too much in their quest to make it reasonably affordable and viable for urban transportation. To that end, it was a great success. But for the enthusiast that wants to carve some corners on their commute, there were a few shortcomings.</p>
<p>Specifically, the Enertia didn't meet my needs as a rider because:</p>
<ul>
<li>Cannot maintain highway speeds due to overheating.</li>
<li>40 mile range means I can't make extra stops on the commute.</li>
<li>Non-adjustable and over-sprung suspension.</li>
<li>Body position is poor for aggressive riding.</li>
</ul>
<p>Some of those shortcomings could have been mitigated through some inspired modding, but deep down I knew I wouldn't be on the bike forever. Consequently, mine's still bone stock.</p>
<p><strong>An [almost] No Compromises Electric Motorcycle</strong></p>
<p>Brammo has touted the Empulse as a no-compromises electric motorcycle for the enthusiast. They're absolutely right...almost. You have to compromise somewhere, and in this case it was price. But that couldn't be avoided. Bicyclists have a truism that sums this up perfectly.</p>
<blockquote><p>"Cheap, light, and strong. Pick two." - Wise Bicyclist</p></blockquote>
<p>With the Empulse, Brammo went all in. They addressed all of the shortcomings with the Enertia and delivered a very serious motorcycle. Sure it's not going to out-handle or out-perform an ICE motorcycle that costs less than 50% of the Empulse, but that's not really the point of riding an electric motorcycle is it? The point is: It's an electric motorcycle that should be about as fun as an SV 650 with the brakes and suspension of a serious middleweight sportbike.</p>
<p><strong>Liquid-Cooled Motor</strong></p>
<p>Even though there are no little explosions going off inside the motor, it still gets hot. This one surprised me when I got my Enertia, because I thought it was a low-friction, brushless motor. Well electric drivetrains are still lossy systems and that loss manifests itself through heat. The Enertia has an electric fan that helps, but it's no match for highways speeds. The Enertia goes into a thermal cutback mode well before its battery is depleted when driven at a sustained 70 mph.</p>
<p>The Empulse tackles this problem by water-cooling the motor. There are plenty of high-end EV motors doing this now, but I never suspected to see one on a production electric motorcycle any time soon. They put a pretty large radiator on there too.</p>
<p><a href="http://www.implovator.com/wp-content/uploads/2012/05/2.jpg"><img src="http://www.implovator.com/wp-content/uploads/2012/05/2-300x200.jpg" alt="" title="Large Radiator" width="300" height="200" class="aligncenter size-medium wp-image-699" /></a></p>
<p>Notice the coolant lines running into and out of the motor? I wonder if there's a separate electric water pump or if they somehow use the power from the motor?</p>
<p><a href="http://www.implovator.com/wp-content/uploads/2012/05/7.jpg"><img src="http://www.implovator.com/wp-content/uploads/2012/05/7-300x200.jpg" alt="" title="Water Cooled with a 6-Speed" width="300" height="200" class="aligncenter size-medium wp-image-697" /></a></p>
<p><strong>A Proper Transmission</strong></p>
<p>If you look at the motor in the picture above, you can also see another great feature: there's a shifter! When Brammo delayed the launch of the Empulse, they stated that they wanted to include some critical new technology. They were already working with a 6-speed transmission with the Engage, and so the folks over at <a href="http://brammoforum.com">http://brammoforum.com</a> knew straightaway that the new IET (integrated electronic transmission) was going into the Empulse. The transmission is a multiplate transmission complete with oil just like a standard motorcycle transmission. I'm sure the similarities stop there.</p>
<p>I, for one, applaud Brammo on this move. Stunning. As Brian Wismann so perfectly stated in this <a href="http://www.latimes.com/business/la-fi-motorcycles-brammo-20120509,0,3789718.story">video</a>, Brammo has put a critical tool back into the hands of the rider. While I'm no expert on electric drivetrains, I think this will be critical for efficiency. It's common knowledge that 100% of the torque of an electric motor is available at 0 RPM and that it drops off a cliff at the top end. Going to a two or three speed transmission would have solved the top-end problem, and so I was a little perplexed. I now suspect that they went a 6-speed to help the bottom end without relying solely on battery-destroying torque. Sure that torque's available, but using it in an inefficient gear means that the motor is going to draw a tremendous amount of current. But like I said, I'm no electrical/automotive engineer.</p>
<p>And in a dramatic turn of events, they offer regenerative braking! Well, sort off. On a motorcycle, a huge percentage of your braking power comes from the front wheel. On a v-twin race bike, I don't even use the rear brake because the engine braking alone is about all the rear end can handle without losing traction. Realizing this, Brammo has added a sort of regen-engine braking. I can only speculate about their motor control algorithm, but conceivable it might be sophisticated enough to deliver just the proper amount of regenerative resistance based on wheel speed, gear, and throttle position.</p>
<p><strong>Level 2 Charging: 3.5 hrs from Zero to Full</strong></p>
<p>Craig Bramscher and Brian Wismann have both explained several times thats they abandoned the lower-capacity battery packs and decided on one single option due to overwhelming pre-order demand for the 10 kWH packs. They settled in on a 9.3 kWH pack in the final configuration of the Empulse. It's what happened next that really surprised me. They included support for level two charging, and not with some supplementary part that you keep at home. They put the Level 2 charger on the bike.</p>
<p><a href="http://www.implovator.com/wp-content/uploads/2012/05/5.jpg"><img src="http://www.implovator.com/wp-content/uploads/2012/05/5-300x200.jpg" alt="" title="Level 2 Charger" width="300" height="200" class="aligncenter size-medium wp-image-701" /></a></p>
<p>Now the only downside of this is that they don't have a Level 1 cord on the bike. If this is anything like the Volt, then a Level 1 charge will likely be done with a separate adapter. That's going to be a bit of a problem for me. I plan to steal 120 V power while at school and charge at home overnight on 120 V. Where to I keep the adapter? I'll probably be fine at work since we have five Level 2 chargers...but I have to beat three out of the seven Nissan Leafs into the office. Great. There's gonna be a geek slap fight in the parking lot.</p>
<p><strong>They Added Proper Motorcycle Parts</strong></p>
<p>The Empulse R comes with fully adjustable suspension via a Marzocchi fork and a Sachs shock. While I doubt that fully adjustable includes all four "knobs" for high/low-speed compression/rebound dampening, I'm sure that it's got at least preload, compression, and rebound adjustments. And that's plenty good for the most agressive street riding. Heck, most expert amateur racers and a lot of privateers can get away with a simple Penke 3-way on the rear and a re-valved stock fork.</p>
<p><a href="http://www.implovator.com/wp-content/uploads/2012/05/10.jpg"><img src="http://www.implovator.com/wp-content/uploads/2012/05/10-300x200.jpg" alt="" title="Proper Suspension" width="300" height="200" class="aligncenter size-medium wp-image-700" /></a></p>
<p>They've also included some proper sportbike wheels on the Empulse R. The Enertia has really narrow, custom wheels with a direct mount sprocket in the rear. The Empulse R has a 17" wheelset from Marchesini with a very respectable 5.5" rear wheel. And, I'm not certain, but that rear hub looks pretty large. I suspect they've moved to a cush drive which will really help smooth out some of the drivetrain noise and vibration that you get on the Enertia.</p>
<p>You can really tell that they've been doing some racing too. They've included mounts for rearstand spools on the swingarm as well as perfectly placed threads for frame sliders on the frame. Even the big Japanese manufacturers tend to screw up mounting points for frame sliders. And the poor street riders end up getting kits that relocate the frame sliders awkwardly so that they fit through vents on the bodywork without cutting. There's also plenty of room around the tank to put clip-ons under the top triple clamp, which was pretty much impossible on the Enertia. They also have proper foldable footpegs that I plan to promptly replace with some rearsets. I hope I can fab something to work out easily. Maybe they have some Empulse RR parts to spare. O_o</p>
<p><strong>Anyone for a Two-Up Ride?</strong></p>
<p>Finally, you can offer friends the experience of riding an electric motorcycle without having to trust your bike in their grubby little hands. I've already offered a ride to a buddy at work, and he promptly rejected me. I don't know what his problem was. Two of my fastest laps around Jennings GP were on the back of Jason Pridmore's GSXR. It was definitely special...and not that way.</p>
<p><a href="http://www.implovator.com/wp-content/uploads/2012/05/12.jpg"><img src="http://www.implovator.com/wp-content/uploads/2012/05/12-300x200.jpg" alt="" title="Two-Ups" width="300" height="200" class="aligncenter size-medium wp-image-703" /></a></p>
<p>In all seriousness though, this is one really nice looking tail section. The subframe is so thin and minimal. Razor edge tails have been trendy with sportbikes lately, but they tend too come out looking like sectioned serrated knives. The Empulse's tail looks like a katana (the sword, not your grandma's Suzuki). The original Empulse prototype had a misplaced tail that didn't fit in too well. Plus it still had that long, flat design found in the Enertia. That seat style is perfect for the Enertia, because it helps to accommodate differently sized riders. The Empulse has a proper, low seat at an angle that is going to feel much better when the bike is slung over in a corner. I can't wait!</p>
<p>The only thing I'm a little apprehensive about is the swingarm. It's hard to tell from the photos, but it looks a little flimsy. Part of that is probably an optical illusion since it's tubular. However, the pivot looks a little narrow and might suffer from some twisting. It's also interesting that the shock is direct mount and doesn't use a dogbone linkage to control the rate. At least the pivot seems to be pretty close to the chainline which should help with squat coming out of corners. The lower arm in the swingarm looks like it will probably be close to flat when under power too, which is apparently critical for traction when driving out of a corner. Not sure that traction's going to be a big issues with the R though. Maybe the RR. Anyhow, the comments on the swingarm are really pretty superfluous and shouldn't affect street riding in the least.</p>
<p><strong>About that Compromise</strong></p>
<p>Similar to the Enertia's release, they're producing the first thousand or so Empulses as the R model only. I get the impression that it's a limited edition model, but I'm not 100% certain.</p>
<p><em>Empulse Base Model - $17k</em><br />
<em>Empulse R Model - $19k</em></p>
<p>The Empulse R has the following advantages over the regular Empulse:</p>
<ul>
<li>Marchessini wheels</li>
<li>Fully Adjustable Suspension</li>
<li>Carbon fiber bodywork parts</li>
<li>And a 2012 delivery date</li>
</ul>
<p>Personally I'm excited about all of the above R extras, save for the pretty carbon fiber parts. Hopefully the wheels are nice and light, since losing unsprung weight it critical for handling, acceleration, and braking.</p>
<p>Overall the R package seems like a good deal. High-end sportbikes like Aprilia, Ducati, and MV Augusta do the same thing with their racier models and often charge way more. However, you have to consider that those other manufacturers also tend to offer better brakes, exhausts, racing ECUs, etc. Personally, I like the Japanese model of just offering one version and making it as nice as possible. The Japanese can get away with that due to their economy of scale.</p>
<p>$19k was a bit of a shocker for me, but the way I look at it, I've been saving for this motorcycle since October 2010 when I pre-ordered mine. The only sad part is that I plan on owning it until it depreciates to near zero. I typically buy used bikes and only lose about 20% of their value to depreciation when I sell them. Who know what the secondhand market for electric motorcycles is going to look like. <em>Anyone interested in a well-kept Brammo Enertia?</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.implovator.com/2012/05/the-brammo-empulse-arrives-finally/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Software is Art</title>
		<link>http://www.implovator.com/2011/03/software-is-art/</link>
		<comments>http://www.implovator.com/2011/03/software-is-art/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 18:00:34 +0000</pubDate>
		<dc:creator>implovator</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[engineering]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[outsourcing]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.implovator.com/?p=674</guid>
		<description><![CDATA[I watched Jack Dorsey's "Golden Gate Speech" today. I was seriously impressed with him, and in particular his view of software products as the output of designers. Software is Art. I'm not just talking about designing pretty web pages either. I'm talking about code, whether it's MC68HC11 Assembly, Dylan, Java, or even C#. I've struggled [...]]]></description>
			<content:encoded><![CDATA[<p>I watched Jack Dorsey's "Golden Gate Speech" today. I was seriously impressed with him, and in particular his view of software products as the output of designers.</p>
<p><script src="http://player.ooyala.com/player.js?height=354&#038;embedCode=hjeXhiMjrdXbCmqSmIAw2XXJvLi2U6oh&#038;deepLinkEmbedCode=hjeXhiMjrdXbCmqSmIAw2XXJvLi2U6oh&#038;width=630"></script></p>
<p>Software is Art. I'm not just talking about designing pretty web pages either. I'm talking about code, whether it's MC68HC11 Assembly, Dylan, Java, or even C#. I've struggled my entire life with the frustration of being traditionally uncreative. While I can draw a little, I'm pretty poor at just about every other traditionally creative outlet. The cards are kind of stack against me. I'm red-green color blind. I'm tone def. I can't seem to keep a beat. I do have good balance on two wheels, but when's the last time you heard someone say, "that was an inspired way to get down that singletrack today!"</p>
<p>I have a huge appreciation for human creativity and a tremendous amount of respect for artists. I don't always like their art, but I'm always inspired by their bravery. Actually, envious would describe it better. I'm envious by their ability to think beyond what they observe and to find beauty beneath the obvious. Moreover, I'm envious of their ability to deeply understand that beauty and to materialize it through their pieces in a way that helps others understand it as well.</p>
<p><b>Macs Make Anyone Feel Creative</b></p>
<p>I switched to Macs about six years ago. I had a really talented and inspirational designer friend, Lea, who "showed me the way". I was the typical PC guy that loved to tinker and solve problems. I didn't realize that I wasn't really <em>using</em> my computers as much as I was constantly <em>fixing</em> them. I finally decided to rid myself of the Microsoft plaque at home; a boycott prompted by the premature release of the Xbox 360. At that point, I had not decided if I was going to go the Linux or the OS X route.</p>
<p>Lea and I discussed the merits of Macs several times. She couldn't really break through to me. Largely because of the language barrier. We were both geeks, but very different kinds of geeks. She ended the discussion one day with a seemingly absurd yet wonderfully insightful comment. </p>
<blockquote><p><em>"Dave, sometimes you just need to be surrounded by beautiful things." - Lea</em></p></blockquote>
<p>Using a Mac made me feel more traditionally creative, but in all actuality I'm still not a very good photographer or videographer. However, my Mac did open me up to the wonderful world of design. Apple products are both wonderful examples of design as well as super conductors for creativity.</p>
<p><b>Software Design as Art</b></p>
<p>Early on in my career, I started to use really abstract terms in code reviews. I sounded more like an art critic to my peers than a software engineer. I would typically describe code as elegant, balanced, structured, aesthetically pleasing, and inspired. These intangible descriptions usually fell on def ears, and often lead me to think I was another wanker with a crappy computer science vocabulary. What I didn't realize, was that I was solidifying my early intuition that software design is a highly creative pursuit, especially if you pursue software design with as much passion as I did.</p>
<p>Computer Science is an amazing field since it's largely a made up affair. The realm in which our minds play is rarely observable (blinky LEDs maybe) and is always built upon previously invented constructs that are themselves recondite. They're always inspired by natural occurrences, but then they're distilled in order to be made useful. I mean, has anyone ever seen a B-Tree in nature. Fractals maybe, but not a fully-balanced B-Tree. And why would a dining philosophers needs so many forks to eat? Besides, who share's forks anyhow?</p>
<p><b>Why Software Design Is Important</b></p>
<p>I mentored an intern five years ago. I really liked the guy, but I was worried for him. Our company was in the middle of a heavy period of outsourcing. All of the typical entry level engineering jobs like testing, bug fixing, and even implementation was being sent overseas. What kind of work was I going to find for this guy if he accepted a position with us?</p>
<p>I spent a lot of time thinking about the perils of outsourcing. It was primarily a result of our labor-intensive waterfall software development process. We had too few efficient tools, and so we spent lots of engineering hours writing and rewriting documents in Microsoft Word and even Framemaker. We couldn't get anything done, but our army of overnight elves were making quick time of everything, albeit with a reduction in quality. I was even worrying about my own job to some degree.</p>
<p>I quickly realized though, that my domestic colleagues and I were still vital. We were far more creative and our innovation was unmatched. America's frontier mentality and self-reliance makes us extremely good entrepreneurs and very good software designers. This intern was no exception. I took him out for coffee one day, away from the cubicles and and fluorescent lights. We sat down in comfy chairs with other presumptuously creative types around us and discussed the merits of software design. I gave him case after case of poorly designed code leading to bugs, misunderstandings, and creating maintenance nightmares. We talked about software design working hand-in-hand with wonderful ui design.</p>
<p>Hopefully he took it to heart. I hope he's not hitting a roadblock in his current job and thinking of jumping off for an MBA with the hopes of landing a biz-dev job like so many of my other friends.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.implovator.com/2011/03/software-is-art/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best Buy iFails with Customers</title>
		<link>http://www.implovator.com/2011/03/best-buy-ifails-with-customers/</link>
		<comments>http://www.implovator.com/2011/03/best-buy-ifails-with-customers/#comments</comments>
		<pubDate>Sat, 12 Mar 2011 17:01:16 +0000</pubDate>
		<dc:creator>implovator</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[ipad2]]></category>

		<guid isPermaLink="false">http://www.implovator.com/2011/03/best-buy-ifails-with-customers/</guid>
		<description><![CDATA[I was still on the fence about replacing my iPad with an iPad 2. I was honestly holding out for an Android tablet with a Qualcomm MSM8660 chip. When the iPad 2 was announced, I realized that the competition was once again set back by 9-12 months. At 4:15 pm I headed to the Best [...]]]></description>
			<content:encoded><![CDATA[<p>I was still on the fence about replacing my iPad with an iPad 2. I was honestly holding out for an Android tablet with a Qualcomm MSM8660 chip. When the iPad 2 was announced, I realized that the competition was once again set back by 9-12 months. At 4:15 pm I headed to the Best Buy in the Brier Creek area of North Raleigh, NC.</p>
<p><b>Best Buy Fail</b></p>
<p>This particular Best Buy is somewhat tucked away, so I figured the line wouldn't be horrible. When I walked in, there was a group of people off the the right and then a line through the center of the store. I figured the line was in two parts due to its length. I joined the line at about 15 deep, with another 20 or so in the first group ahead of us.</p>
<p>I guess I was mildly embarrassed to be in line for an iPad 2, so I didn't ask any blue-shirts for the status. Neither did anyone else. They just filed behind be, eventually growing  in total number to around 60-70.</p>
<p>Blue-shirts came through the line exactly twice. The first time was to offer everyone a Best Buy credit card. The second time was at 5:15 pm. The forward line had been mulling about, but our line had not moved. The blue-shirt was letting us know that he "did not know how many iPads they had in stock", but that we could reserve one for $100 in the event that they ran out.</p>
<p>I decline the offer, but before he could walk away, I asked him what was taking so long. He said their procedure had some kinks, but things were moving now. They had "tickets" to pass out and... "Tickets?" I asked? We were not offered tickets. We had no idea what was going on. "So if we didn't get a ticket we are likely not getting an iPad?" I asked. He regretfully confirmed.</p>
<p><b>Apple Wouldn't Pull That</b></p>
<p>We walked out, shocked that Best Buy would keep us there in line without offering an explanation, only a credit card application. This is a dramatically different experience from my friends in the line at the Apple Store at South Point. We were exchanging tweets the whole time. When I told them that we were screwed, they took my order and picked one up for me. So yes I waited in line for an iPad 2, I just received it later that night at their place. Thank you, Jessica and Roger.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.implovator.com/2011/03/best-buy-ifails-with-customers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Murdoch Might Just Break Into My Daily Routine</title>
		<link>http://www.implovator.com/2011/02/murdoch-might-just-break-into-my-daily-routine/</link>
		<comments>http://www.implovator.com/2011/02/murdoch-might-just-break-into-my-daily-routine/#comments</comments>
		<pubDate>Fri, 04 Feb 2011 15:28:48 +0000</pubDate>
		<dc:creator>implovator</dc:creator>
				<category><![CDATA[Not Geek]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[egypt]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://www.implovator.com/?p=660</guid>
		<description><![CDATA[I'm a typical Gen X geek when it comes to news consumption. I get my news through online outlets only. Easily 3/4 of that news is through what I refer to as semi-pro blogs and the rest is through sites of traditional media companies. I don't read local newspapers, at all. I don't watch the [...]]]></description>
			<content:encoded><![CDATA[<p>I'm a typical Gen X geek when it comes to news consumption. I get my news through online outlets only. Easily 3/4 of that news is through what I refer to as <em>semi-pro blogs</em> and the rest is through sites of traditional media companies. I don't read local newspapers, at all. I don't watch the news on television. I even eschew local radio for satellite radio (save for our local NPR affiliate on occasion). I subscribe to one magazine (<a href="http://roadracingworld.com/">Roadracing World</a>)...and I'm riddled with guilt over the paper it's printed on.</p>
<p><a href="http://www.implovator.com/wp-content/uploads/2011/02/20110204-113225.jpg"><img src="http://www.implovator.com/wp-content/uploads/2011/02/20110204-113225.jpg" alt="" title="20110204-113225.jpg" width="480" height="360" class="aligncenter size-full wp-image-667" /></a></p>
<p><b>Longing for the Old Days?</b></p>
<p>However, like many other Gen X'ers, I still fondly remember getting the comic section from my parents' Sunday paper and hiding away with it. I've spend many mornings sharing coffee and a doughnut with my grandmother over the morning paper. I'm pretty sure she still watches the local news too, and then promptly switches back to Fox News. <img src='http://www.implovator.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>I have a morning routine myself, it just involves flying through my myriad RSS feeds and trying to consume as much as I can. I feel I have to stay on top of them to make sure I'm staying relevant amongst my geek cohorts. And even though these articles are merely <em>byte</em>-sized, I can't even seem to retain them. I'm constantly half quoting articles, that themselves only half cite their sources. How many times have you read an article that is effectively a layperson's weak attempt at drawing a popular conclusion from a scientific study that the scientists themselves refuse to reach conclusions about? It's sloppy, pseudo-journalism.</p>
<p><b>Micro-Attention Spans</b></p>
<p><a href="http://www.implovator.com/wp-content/uploads/2011/02/20110204-112811.jpg"><img src="http://www.implovator.com/wp-content/uploads/2011/02/20110204-112811-225x300.jpg" alt="" title="20110204-112811.jpg" width="225" height="300" class="alignright size-medium wp-image-665" /></a></p>
<p>The Internet and mobile computing have made us more plugged-in than ever. This leads to a barrage of interruptions that has wrecked our attention spans; though you might argue that MTV started it. Or was it the remote control that allowed us to channel surf during commercials?</p>
<p>The constant connection and micro-attention spans ultimately mean one thing to publishers: There is no time that's more important than this very instant. They have to deliver their content quickly, and make that content just as quickly consumable.</p>
<p>Semi-pro blogs have mastered this. They publish numerous articles every hour of every day. They are short and often devoid of much human interpretation. A screenshot and a short quip is often all that's needed...oh and of course there's the requisite "[via JoesBlog via TechMunchismo via SomeGuysAss]".</p>
<p><b>I'm Not Saying Blogs Are Evil</b></p>
<p>In the defense of semi-pro blogs, the larger players are often staffed by journalists with traditional publishing experience. This has led to a great improvement in their practices and credibility. These blogs provide an undeniably great service too. Their light-weight style of journalism is efficient and somewhat reckless, but they're breaking stories and scooping the old guard. I think it's pretty amazing every time I see an article on a traditional news outlet that is reporting on stories that broke in blogs, and they're citing the blogs.</p>
<p>While I am being critical of semi-pro blogs, I'm not trying to paint them as some sort of scourge on civilization. What I am saying, is that I'm looking for deeper, slower, and slightly more responsible news reporting. I don't need to stay up-to-the-minute. Sometimes, I want a few more details, maybe some backstory. And I don't mean I want to search myself for all of the past blog posts on a topic. This is where I'm starting to miss a daily newspaper. They publish daily, and spend days, even weeks on articles. They go out and hit the streets, not just the tubes.</p>
<p><b>Enter <strong>The Daily</strong></b></p>
<p><a href="http://www.implovator.com/wp-content/uploads/2011/02/20110204-112746.jpg"><img src="http://www.implovator.com/wp-content/uploads/2011/02/20110204-112746-225x300.jpg" alt="" title="20110204-112746.jpg" width="225" height="300" class="alignleft size-medium wp-image-664" /></a></p>
<p><em>The Daily</em> could be just the crutch that helps keep traditional, quality journalism alive. I read RSS feeds on my iPad every morning. I've tried a fews news apps, but none held my attention. So far, The Daily has good, deep writing, while still being a little brief to ensure that the issues holds your attention. The longer articles still hold your attention, because they mix in enough distractions such as slide-shows, in-page video, animated panoramic photos, and audio clips.</p>
<p>Their mixed-media approach works well to provide those said breaks, but they also enrich the experience. For instance, Friday's (Feb. 4, 2011) edition had an article on Egypt that talked about the surprising organization of the protesters. It talked about the how they maintained a central office, patrolled looking for Mubarak supporters ("thugs"), and were seemingly humanely interrogating them to gain intelligence on their movements. They even have a doctor on site to take care of their detainees. I'm sure that their interrogation practices are far from simple Q&#038;A, but I was surprised at how well the protesters are focused on the public relations aspect of their efforts. They're quire careful to ensure that they're viewed as the good guys, not falling back on the harsh tactics that the secret police have reportedly used to subjugate suck unrest previously.</p>
<p><a href="http://www.implovator.com/wp-content/uploads/2011/02/20110204-114120.jpg"><img src="http://www.implovator.com/wp-content/uploads/2011/02/20110204-114120-225x300.jpg" alt="" title="20110204-114120.jpg" width="225" height="300" class="alignright size-medium wp-image-671" /></a></p>
<p>While that level of reporting was certainly deep, the thing that set this article apart was the embedded audio commentary from the reporter himself. The tone of his voice was enough to instantly discern the tone of his article and to remove any chance of misinterpreting the article. Furthermore, it provided an insight to the emotion of the situation and to the humanity of the protesters that was then reinforced through details in the article, such as their practice of protecting the detainees in the central office by using a human chain to shield against less civilized elements of the protests.</p>
<p><B>But Will I Subscribe</b></p>
<p>The first two weeks are free. I think I'll subscribe for another month or two after that, but the verdict is out whether or not I'll make the $40 yearly commitment. As much as I'm pulling for professional newspaper journalism to survive and morph into something more current, I'm a little worried about getting so much of my news from one source. I mean, Rupert's the same guy that owns Fox News after all. <img src='http://www.implovator.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>What I really hope, is that The Daily's format is duplicated by other news outlets. Actually, I'd love to have a single, standards-based, newspaper reader app which can download issues from a variety of papers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.implovator.com/2011/02/murdoch-might-just-break-into-my-daily-routine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Office Charging Stations: They&#8217;re Live</title>
		<link>http://www.implovator.com/2011/01/office-charging-stations-theyre-live/</link>
		<comments>http://www.implovator.com/2011/01/office-charging-stations-theyre-live/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 19:39:17 +0000</pubDate>
		<dc:creator>implovator</dc:creator>
				<category><![CDATA[EV]]></category>
		<category><![CDATA[Green]]></category>
		<category><![CDATA[Not Geek]]></category>
		<category><![CDATA[chargepoint]]></category>
		<category><![CDATA[coulomb]]></category>
		<category><![CDATA[motorcycle]]></category>

		<guid isPermaLink="false">http://www.implovator.com/?p=656</guid>
		<description><![CDATA[The roads have been nasty and it's been pretty cold. I'm tempted to ride into the office anyhow, because the charging stations are live!]]></description>
			<content:encoded><![CDATA[<p>The roads have been nasty and it's been pretty cold. I'm tempted to ride into the office anyhow, because the charging stations are live!</p>
<div id="attachment_657" class="wp-caption aligncenter" style="width: 560px"><a href="http://www.implovator.com/wp-content/uploads/2011/01/IMG_20110107_174619.jpg"><img src="http://www.implovator.com/wp-content/uploads/2011/01/IMG_20110107_174619-1024x768.jpg" alt="" title="Glowing ChargePoint" width="550" height="412" class="size-large wp-image-657" /></a><p class="wp-caption-text">Glowing ChargePoint</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.implovator.com/2011/01/office-charging-stations-theyre-live/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Office Charging Stations: Winter Update Edition</title>
		<link>http://www.implovator.com/2010/12/office-charging-stations-winter-update-edition/</link>
		<comments>http://www.implovator.com/2010/12/office-charging-stations-winter-update-edition/#comments</comments>
		<pubDate>Mon, 27 Dec 2010 20:57:03 +0000</pubDate>
		<dc:creator>implovator</dc:creator>
				<category><![CDATA[EV]]></category>
		<category><![CDATA[Green]]></category>
		<category><![CDATA[coulomb]]></category>

		<guid isPermaLink="false">http://www.implovator.com/?p=651</guid>
		<description><![CDATA[While I was on vacation last week, they finished the physical installation of the charging stations. Looks like the contractors let a little snow get in their way, because they're still not wired up and operational. Hopefully we'll have some clear weather in the weeks to come. I can't wait to use them.]]></description>
			<content:encoded><![CDATA[<p>While I was on vacation last week, they finished the physical installation of the charging stations. Looks like the contractors let a little snow get in their way, because they're still not wired up and operational. Hopefully we'll have some clear weather in the weeks to come. I can't wait to use them.</p>
<div id="attachment_652" class="wp-caption aligncenter" style="width: 560px"><a href="http://www.implovator.com/wp-content/uploads/2010/12/IMG_20101227_104859.jpg"><img src="http://www.implovator.com/wp-content/uploads/2010/12/IMG_20101227_104859-1024x768.jpg" alt="" title="Snow Delay" width="550" height="412" class="size-large wp-image-652" /></a><p class="wp-caption-text">Snow Delay</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.implovator.com/2010/12/office-charging-stations-winter-update-edition/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Office Charging Stations: Breaking Ground</title>
		<link>http://www.implovator.com/2010/12/office-charging-stations-breaking-ground/</link>
		<comments>http://www.implovator.com/2010/12/office-charging-stations-breaking-ground/#comments</comments>
		<pubDate>Sat, 11 Dec 2010 05:06:20 +0000</pubDate>
		<dc:creator>implovator</dc:creator>
				<category><![CDATA[EV]]></category>
		<category><![CDATA[Green]]></category>
		<category><![CDATA[Not Geek]]></category>
		<category><![CDATA[coulomb]]></category>
		<category><![CDATA[enertia]]></category>

		<guid isPermaLink="false">http://www.implovator.com/?p=642</guid>
		<description><![CDATA[I've mentioned before that the facilities manager at my office is a true-blue believer in EVs. He's had a long career working with industrial electric motors, and understands them to their very core. He's really supported me and the Enertia from day one. He even putting up with its charging fans blowing right outside of [...]]]></description>
			<content:encoded><![CDATA[<p>I've mentioned before that the facilities manager at my office is a true-blue believer in EVs. He's had a long career working with industrial electric motors, and understands them to their very core. He's really supported me and the Enertia from day one. He even putting up with its charging fans blowing right outside of his office inside of our shipping and receiving area. He's dead set on getting a Nissan Leaf too, because its got the range to suit his commuting needs.</p>
<p><strong>They're Here</strong></p>
<p>He's been giving me progress reports on the company's initiative to install <a href="http://www.coulombtech.com/">Coulomb Charging Stations</a> at work. There have been some delays with the contractors, but I'm happy to say that they've broken ground this week. From the looks of it, we should have five posts serving ten spots with Level 1 and Level 2 charging.</p>
<div id="attachment_643" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.implovator.com/wp-content/uploads/2010/12/IMG_20101210_132426.jpg"><img src="http://www.implovator.com/wp-content/uploads/2010/12/IMG_20101210_132426-300x225.jpg" alt="" title="Day 1" width="300" height="225" class="size-medium wp-image-643" /></a><p class="wp-caption-text">Progress for Day 1</p></div>
<p>They made a little more progress on day two. There are trenches behind the ledges and some electrical utility boxes installed.The boxes are kind of ugly, so I hope they do something to disguise them. The last thing that I want to hear is people condemning them because they're ugly. As it is, the location is already taking up exterior spaces where the car worshiping d-bags double park their cars like it's some sort of Grease era car show.</p>
<div id="attachment_644" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.implovator.com/wp-content/uploads/2010/12/IMG_20101210_101327.jpg"><img src="http://www.implovator.com/wp-content/uploads/2010/12/IMG_20101210_101327-300x225.jpg" alt="" title="Day 2" width="300" height="225" class="size-medium wp-image-644" /></a><p class="wp-caption-text">Progress from day 2</p></div>
<p>I can't wait to see them operation. From what I've been told, they'll be open to the public too. So anyone with a <a href="http://www.mychargepoint.net/charge-pass.php">ChargePass Card</a> (like me) can use them. I'm not sure if that policy will be permanent, but I can't imagine that there will be too many non-employees using them. When they go online, hopefully they'll show up on Coulomb's <a href="http://www.mychargepoint.net/find-stations.php">Awesome Webapp</a>.</p>
<p>Of course, when they do go online, it means the end of my indoor parking. Oh well. <img src='http://www.implovator.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.implovator.com/2010/12/office-charging-stations-breaking-ground/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>COMP 770 Program 4: 3D Rasterizer</title>
		<link>http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/</link>
		<comments>http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/#comments</comments>
		<pubDate>Thu, 18 Nov 2010 05:01:03 +0000</pubDate>
		<dc:creator>implovator</dc:creator>
				<category><![CDATA[Computer Graphics]]></category>
		<category><![CDATA[School]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[graphics]]></category>
		<category><![CDATA[opengl]]></category>

		<guid isPermaLink="false">http://www.implovator.com/?p=591</guid>
		<description><![CDATA[Download the source (c++ w/ XCode project): Program4.tar.gz Download the binary (Intel Mac OS X): rasterizer.gz I know this is a naive thing to say type, but after finishing this program I kind of feel like I just implemented OpenGL minus shaders. My approach was to get the scene parsing implemented first and then to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.implovator.com/wp-content/uploads/2010/11/Banner.png"><img src="http://www.implovator.com/wp-content/uploads/2010/11/Banner.png" alt="" title="Banner" width="555" height="94" class="aligncenter size-full wp-image-640" /></a>Download the source (c++ w/ XCode project): <a href='http://www.implovator.com/wp-content/uploads/2010/11/Program4.tar.gz'>Program4.tar.gz</a><br />
Download the binary (Intel Mac OS X): <a href='http://www.implovator.com/wp-content/uploads/2010/11/rasterizer.gz'>rasterizer.gz</a></p>
<p>I know this is a naive thing to <del datetime="2010-11-18T03:07:03+00:00">say</del> type, but after finishing this program I kind of feel like I just implemented OpenGL minus shaders. <img src='http://www.implovator.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  My approach was to get the scene parsing implemented first and then to get the GL Preview feature working. This allowed me to very quickly setup my light and camera and then to see my goal. Then I started in on my raster pipeline.</p>
<p><strong>Features</strong></p>
<p>Here's a quick list of the features for my Raster Pipeline:</p>
<ul>
<li>Moveable camera</li>
<li>Moveable light</li>
<li>Orthographic Projection</li>
<li>Perspective Projection</li>
<li>Per-Vertex Color</li>
<li>Wireframe</li>
<li>Flat Shading</li>
<li>Gouraud Shading</li>
<li>Phong Shading</li>
<li>Use full Phong lighting with light intensity falloff</li>
<li>Configurable (on/off) backface culling</li>
<li>Configurable (on/off) cheap clipping</li>
<li>Efficient span-based triangle fill</li>
<li>z-buffer with epsilon for z-fighing resolution</li>
<li>Timing instrumentation</li>
<li>PNG output</li>
</ul>
<p>And here are the features support in the OpenGL Preview mode:</p>
<ul>
<li>Moveable camera</li>
<li>Moveable light</li>
<li>Orthographic Projection</li>
<li>Perspective Projection</li>
<li>Per-Vertex Color</li>
<li>Wireframe</li>
<li>Flat Shading</li>
<li>Smooth (Gouraud?) Shading</li>
</ul>
<p><strong>Shading</strong></p>
<p>After doing two raytracing assignments, I really doubted that rasterizing would hold a candle in terms of aesthetics. I was stunned when I saw how good the OpenGL preview looked, so I really wanted to dive into shading. I ended up implementing wireframes, flat shading, Gouraud shading and Phong shading.</p>

<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/teapot_wire/' title='Teapot Wireframe'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/teapot_wire-150x150.png" class="attachment-thumbnail" alt="Teapot Wireframe" title="Teapot Wireframe" /></a>
<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/teapot_flat/' title='Teapot Flat'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/teapot_flat-150x150.png" class="attachment-thumbnail" alt="Teapot Flat Shading" title="Teapot Flat" /></a>
<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/teapot_gouraud/' title='Teapot Gouraud'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/teapot_gouraud-150x150.png" class="attachment-thumbnail" alt="Teapot Gouraud Shading" title="Teapot Gouraud" /></a>
<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/teapot/' title='Teapot Phong'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/teapot-150x150.png" class="attachment-thumbnail" alt="Teapot Phong Shading" title="Teapot Phong" /></a>

<p><strong>Challenges</strong></p>
<p>I then started in on my own raster pipeline. As I stumbled through a myriad of problems with my transformations. In particular, the projection transformations were troublesome. I tried to implement them in a way similar to the class notes, but I was getting the results that I was looking for...or any results. I kept segfaulting. I turned to the text, and found that they did a great job explaining both orthographic and projection transformations.</p>

<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/biplane_ortho/' title='Biplane Ortrhographic'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/biplane_ortho-150x150.png" class="attachment-thumbnail" alt="Biplane Orthographic" title="Biplane Ortrhographic" /></a>
<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/biplane/' title='Biplane Perspective'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/biplane-150x150.png" class="attachment-thumbnail" alt="Biplane Perspective" title="Biplane Perspective" /></a>

<p>Clamping and normals were also a problem for me. Interestingly enough, once you fix one clamping or normal bug, you tend to clamp and normalize everything. The clamping problem was worst with my color calculations. Specular highlights produce some very illuminated pixels. I ended up bleeding past 1.0 on several of the channels which caused several rainbow effects. Additionally, when I was calculating barycentric coordinate, floating pointer errors led to scenarios where the coordinates were being returned beyond [0.0,1.0]. Normally this would mean that the point was off of the triangle, but I was attempting to calculate for pixels that were known to be on the triangle.</p>
<p>Normals were by far the most difficult problem. At least it was the toughest one I had to solve. My specular highlights were causing a grid pattern along the edges of triangles. I fought it for two days. My problem resulted from normals interpolated between to vertices on the edges. The were not unit length, and so they increased the effect of the specular highlights when I calculated the dot product with the half viewing vector. Normalizing these fixed the problem.</p>

<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/teapot_wo_highlight/' title='Teapot No Highlight'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/teapot_wo_highlight-150x150.png" class="attachment-thumbnail" alt="Teapot with Un-Normals and Specular Highlights Off" title="Teapot No Highlight" /></a>
<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/teapot_before/' title='Teapot un-Normals'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/teapot_before-150x150.png" class="attachment-thumbnail" alt="Teapot With Un-Normalized Normals" title="Teapot un-Normals" /></a>
<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/teapot/' title='Teapot Phong'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/teapot-150x150.png" class="attachment-thumbnail" alt="Teapot Phong Shading" title="Teapot Phong" /></a>

<p><strong>Optimizations</strong></p>
<p>Backface culling was a really straight-forward optimization to make. To implement it, I added a check right before the viewing and projection transformations. The check involved computing the dot product of each of the normals with the viewing vector. If none of those normals were visible, then the entire triangle is back facing and was culled. It yielded a significant speedup on Andrew's dragon model.</p>
<blockquote><p>rasterizer --projection persp -0.1 0.1 -0.0 0.2 3.0 7.0 --camera 0 0 5 0 1 0 --light 0.1 0.1 0.1 --nocull scenes/dragon.txt<br />
Render scene: 1287.702000 ms</p></blockquote>
<p>versus</p>
<blockquote><p>rasterizer --projection persp -0.1 0.1 -0.0 0.2 3.0 7.0 --camera 0 0 5 0 1 0 --light 0.1 0.1 0.1 scenes/dragon.txt<br />
Render scene: 708.403000 ms</p></blockquote>
<p>I really wanted to implement full clipping, but I found out that "cheap clipping" is pretty effective by itself. The first step is to add a check if a pixel is in the viewport before calculating the color for it. Calculating color is pretty expensive, so this eliminated a lot of cost. Then next step was to use Cohen-Sutherland clipping to determine when a line or triangle was completely outside of the viewport. I didn't do a thorough test either. I did the simple bit-wise and operation on the bit codes for each point and rejected the triangle if it was not zero. This means that some of the corner cases were missed.</p>
<p>By cheating like this, I was able to avoid a lot of triangles without having to implement the clipping of individual triangles into separate polygons. This meant that I was still rasterizing parts of triangle that were outside of the viewport, but at least with my check above I wasn't calculating the color for them. The results were rather satisfactory, especially compared to the cost of implementing it.</p>
<blockquote><p>rasterizer --camera 0 0 5 0 1 0 --projection persp -0.1 0.1 -0.1 0.1 3.0 7.0 //zoom_in --noclip scenes/beethoven.txt<br />
Render scene: 414.369000 ms</p></blockquote>
<p>was reduced to</p>
<blockquote><p>rasterizer --camera 0 0 5 0 1 0 --projection persp -0.1 0.1 -0.1 0.1 3.0 7.0 //zoom_in --output img/beethven_clipped.png scenes/beethoven.txt<br />
Render scene: 310.444000 ms</p></blockquote>

<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/beethven_clipped/' title='Beethoven Clipped'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/beethven_clipped-150x150.png" class="attachment-thumbnail" alt="Beethoven Clipped" title="Beethoven Clipped" /></a>

<p>Although a span-based triangle fill was pointed out as an opportunity for extra credit, it was really the most straightforward way to implement this for triangles, since they're convex. At one point in my career, I did a lot of 2D raster graphics work for J2ME cellphones. Most of our displays were optimized to send data to the display in rows. So I attacked this problem the same way. I found the top most pixel. I then started drawing each leg using the midpoint line algorithm. Each time I placed a pixel which changed y, I added it to an edge list. When I reached the end of a leg, I switched to the third segment...unless that leg was already horizontal. I then went back and drew horizontal lines from one edge map to the other. Since this was the only triangle fill algorithm I used, I didn't get any timing numbers for comparison.</p>
<p>The use of a Z-Buffer to determine the rendering order is so genius in its simplicity, that I didn't even consider any other ways to implement it. So this is another scenario where I didn't try to implement another method for comparison. However, I was able to throw in a small improvement that resolve the z-fighting example that I threw at it. When determining when to paint over another pixel, I checked that the new pixel was closer to the camera by a margin, epsilon. I set epsilon to 0.000001. It resolve my test model without causing any visible changes to the other models. My testing certainly wasn't extensive, and so I'm sure that it would fail on scenarios where a camera with a very narrow FOV caused massive magnification. Perhaps in that situation, I could use a dynamic epsilon that is calculated based on the camera's FOV.</p>

<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/zfight_lose/' title='Z-Fight Lose'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/zfight_lose-150x150.png" class="attachment-thumbnail" alt="Z-FIght without Epsilon" title="Z-Fight Lose" /></a>
<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/zfight_win/' title='Z-Fight Win'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/zfight_win-150x150.png" class="attachment-thumbnail" alt="Z-Fight with Epsilon" title="Z-Fight Win" /></a>

<p><strong>Remaining Images</strong></p>
<p>Here are the remaining rendering of the models provided, including Andrew's dragon model from the <a href="http://www.graphics.stanford.edu/data/3Dscanrep/">Stanford 3D Scan Repository</a>.<br />

<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/example1/' title='example1'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/example1-150x150.png" class="attachment-thumbnail" alt="2D Example1" title="example1" /></a>
<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/example2/' title='example2'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/example2-150x150.png" class="attachment-thumbnail" alt="2D Example2" title="example2" /></a>
<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/apple/' title='Apple'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/apple-150x150.png" class="attachment-thumbnail" alt="Apple Phong Shading" title="Apple" /></a>
<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/beethoven/' title='Beethoven'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/beethoven-150x150.png" class="attachment-thumbnail" alt="Beethoven Phong Shading" title="Beethoven" /></a>
<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/monster/' title='Monster'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/monster-150x150.png" class="attachment-thumbnail" alt="Monster Phong Shading" title="Monster" /></a>
<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/pear/' title='Pear'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/pear-150x150.png" class="attachment-thumbnail" alt="Pear Phong Shading" title="Pear" /></a>
<a href='http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/dragon/' title='Dragon'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/11/dragon-150x150.png" class="attachment-thumbnail" alt="Andrew&#039;s Dragon Phong Shading" title="Dragon" /></a>
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.implovator.com/2010/11/comp-770-program-4-3d-rasterizer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mental Focus: An Argument for Modal UIs</title>
		<link>http://www.implovator.com/2010/10/mental-focus-an-argument-for-modal-uis/</link>
		<comments>http://www.implovator.com/2010/10/mental-focus-an-argument-for-modal-uis/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 21:12:22 +0000</pubDate>
		<dc:creator>implovator</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[focus]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[modal]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://www.implovator.com/?p=579</guid>
		<description><![CDATA[For an Operating System / Window Manager Engineer, focus usually means the application in the foreground. The application with focus is receiving keyboard and mouse events. On some systems, only the application with focus can make sounds. Furthermore, the applications without focus may be running at a lower priority, thus receiving less compute time. Modal [...]]]></description>
			<content:encoded><![CDATA[<p>For an Operating System / Window Manager Engineer, focus usually means the application in the foreground. The application with focus is receiving keyboard and mouse events. On some systems, only the application with focus can make sounds. Furthermore, the applications without focus may be running at a lower priority, thus receiving less compute time.</p>
<p><strong>Modal / Full Screen UI</strong></p>
<p>In the mobile space, this question of focus is rather straight forward. Displays are so small, that the window manager will display the application with focus on the entire screen. Although I think it's a bit of a misnomer, more and more people are refer to such as scheme as a modal UI. These modal, or full-screen, UIs have been getting a lot of news lately. Steve Jobs announced that full-screen apps are going to play a more serious role in Mac OS X Lion.</p>
<div id="attachment_580" class="wp-caption aligncenter" style="width: 550px"><a href="http://www.implovator.com/wp-content/uploads/2010/10/1_Aperture_3_full-screen_edit_540x338.jpg"><img src="http://www.implovator.com/wp-content/uploads/2010/10/1_Aperture_3_full-screen_edit_540x338.jpg" alt="" title="Aperture Full-Screen" width="540" height="338" class="size-full wp-image-580" /></a><p class="wp-caption-text">Apple Aperture for Mac in Full Screen</p></div>
<p>I was a little apprehensive with fear that he was going to dumb down my Mac desktop user experience. I gained more confidence in the idea when I thought about all of the [semi]-pro apps that I use on my Mac that already had full screen modes. I always figured that those apps were full screen to give creative professionals the maximum amount of real estate. Now, I actually think it has more to do with minimizing distraction and allowing for better mental focus.</p>
<p><strong>Full Screen Equals Full <em>Mental</em> Focus</strong></p>
<p>This point hit me late last night. I bought an iPad yesterday. I bought it primarily for leisure computing. I found that my MacBook Pro was constantly in the middle of 2-3 school/geek projects. I tend to just leave things open when I'm in the middle of them. I feel it encourages me to pick back up more easily. What it actually does is stress me out and distract me. I couldn't even enjoy a cup of coffee and read RSS feeds without wanting to touch up some OpenCL. My idea for the iPad was to get away from a desk and relax a little. I could ignore all of those open projects and relax for a few minutes. </p>
<div id="attachment_582" class="wp-caption alignright" style="width: 310px"><a href="http://www.implovator.com/wp-content/uploads/2010/10/ipad_1.png"><img src="http://www.implovator.com/wp-content/uploads/2010/10/ipad_1-300x184.png" alt="" title="Papers for iPad" width="300" height="184" class="size-medium wp-image-582" /></a><p class="wp-caption-text">Papers for iPad</p></div>
<p>That lasted about an hour last night before I found myself downloading class notes and sitting at the kitchen table with a beer for some late night studying. It was really effective too. When you're working in a modal UI, all you can do is what's in focus. And if you turn off status updates, you won't even be bothered by incoming emails, tweets, calendar notifications, etc. I was easily able to stay on task, only briefly popping over to another browser window to look things up.</p>
<p><strong>Apple Might Be On To Something</strong></p>
<p>I'm definitely going to dwell on this some more and make some personal observations about my usage, but I think Steve might be on to something. We've long known that multi-tasking hits a point of diminishing returns after two or three tasks. I personally struggle with the constant context switching. Having a modal UI might help me focus on the task at hand, whether it's studying, coding, or relaxing.</p>
<p>BTW, <a href="http://www.google.com/reader/play/">Google Reader Play</a> is an absolute joy on the iPad. Too bad it doesn't use my feeds. <img src='http://www.implovator.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /><br />
<a href="http://www.implovator.com/wp-content/uploads/2010/10/GoogleReaderPlay.png"><img src="http://www.implovator.com/wp-content/uploads/2010/10/GoogleReaderPlay-300x186.png" alt="" title="Google Reader Play" width="300" height="186" class="aligncenter size-medium wp-image-584" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.implovator.com/2010/10/mental-focus-an-argument-for-modal-uis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>COMP 770 Program 3: Ray Tracing Part 2</title>
		<link>http://www.implovator.com/2010/10/comp-770-program-3-ray-tracing-part-2/</link>
		<comments>http://www.implovator.com/2010/10/comp-770-program-3-ray-tracing-part-2/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 03:50:54 +0000</pubDate>
		<dc:creator>implovator</dc:creator>
				<category><![CDATA[Computer Graphics]]></category>
		<category><![CDATA[School]]></category>
		<category><![CDATA[kdtree]]></category>
		<category><![CDATA[raytracing]]></category>
		<category><![CDATA[sah]]></category>

		<guid isPermaLink="false">http://www.implovator.com/?p=553</guid>
		<description><![CDATA[Download Project Source/Scenes/Mac-Binaries: Program3.tar.gz Overview For the first part of the Ray Tracing project, I added a quite a few extra features. One of those extra features was the recursive calculations of Specular Reflection, Dielectric Reflection, and Dielectric Transmission. I considered myself pretty lucky, considering that this feature is one of the two features that [...]]]></description>
			<content:encoded><![CDATA[<p>Download Project Source/Scenes/Mac-Binaries: <a href='http://www.implovator.com/wp-content/uploads/2010/10/Program3.tar.gz'>Program3.tar.gz</a></p>
<p><strong>Overview</strong></p>
<p>For the first part of the Ray Tracing project, I added a quite a few extra features. One of those extra features was the recursive calculations of Specular Reflection, Dielectric Reflection, and Dielectric Transmission. I considered myself pretty lucky, considering that this feature is one of the two features that we were required to add for this second part. However, I wasn't quite in the clear. Lets just say that I had a looser understanding of ray tracing than I thought.</p>
<p><strong>New Features</strong></p>
<p>Many of the features of my Ray Tracer were implemented in the first part. That list can be seen on that <a href="http://www.implovator.com/2010/09/comp-770-program-2-ray-tracing-part-1/">project post</a>. The following are new features:</p>
<p>KD Tree</p>
<ul>
<li>Mid-Axis Partitioning</li>
<li>SAH Partitioning</li>
<li>Cost-Based Termination of leaf nodes for both</li>
<li>Recursive KD Tree Traversal</li>
<li>KD Tree Printing in Debug Builds</li>
</ul>
<p>Miscellaneous</p>
<ul>
<li>Fixed Ray Tracing bugs</li>
<li>Dramatically Improved Ray Tracing Performance</li>
<li>Interactive Ray Shooting in Debug Builds</li>
</ul>
<p><strong>Default Configuration</strong></p>
<p>When you launch my Ray Tracer, the following are the defaults that are used unless you specify otherwise.</p>
<ul>
<li><strong>Dimensions:</strong> 500x500</li>
<li><strong>Sampling:</strong> 4 x 4 Adaptive Jittered Supersampling</li>
<li><strong>Ray Casting:</strong> Blinn-Phong Lighting with an Ambient Factor</li>
<li><strong>Ray Tracing:</strong> Specular Reflections, Dielectric Reflections, and Dielectric Transmission supported through recursion terminated based on a contribution threshold</li>
<li><strong>Multi-Processing:</strong> Uses multiple CPU cores through OpenMP</li>
<li><strong>KD Tree:</strong> Built using SAH cost analysis to determine best split and when to terminate branches</li>
</ul>
<p><strong>Ray Tracing</strong></p>
<p>The optics involved with refraction are not very intuitive to me. Initially, I thought that an image seen through a glass sphere would be reduced, but instead it's actually magnified. I had a rather serious bug when calculating refraction. I was refracting my rays with a dot product of the ray and surface normal with the wrong sign. Correcting that made a tremendous difference.</p>
<p>Once I started rendering the scene with 16 spheres, I started to realize that I had some serious additive errors on calculations of the transmissive component. There were two reasons for this. Firstly, I was calculating the reflective and transmissive components inside of the loop that calculated the phong shading for each light source. Fixing this corrected several of the bright spots, and it led to a signficant speed improvement.</p>
<p>Secondly, I was calculating the phong shading and reflective components for for illumination points inside of a sphere. This scenario arose whenever I was calculating the color for a refracted ray transmitted through a sphere. The refracted ray would intersect the other side of the sphere on the inside, and at that point I should have only been calculating the transmissive component. Making this change also led to a dramatic speedup.</p>
<p><strong>KD Tree</strong></p>
<p>My KD Tree was actually a deceleration structure for much of the project. I had several issues when creating the tree, as well as the traversal. I started by creating a KD Tree that simply divided the space at the midpoint of the split axis.</p>
<p>The first issue that I had, was that I was creating a new bounding box around the primitives in each of the newly split subspaces. This is very problematic, because it created overlapping spaces whenever I had the occurrence of a single primitive shared between both spaces. Once drew a clear delineation between space partitioning and bounding volume hierarchies, I was able to clean up my KD Tree and I saw fewer artifacts.</p>
<p>My next hurdle was understanding how to traverse the tree correctly and to fix the remaining artifacts. Initially, while I was trying to learn how KD Trees work, I was only considering an algorithm where the ray always intersected the outermost bounding box. This was fundamentally flawed for several reasons. First off, the ground sphere made the bounding box really large, but it didn't create to many artifacts for me. The second major instance of rays originating inside of the outermost bounding box where theway used when calculating shadows, reflections, and transmissions. Through some digging, I found a <a href="http://stackoverflow.com/questions/1852391/kd-tree-traversal-raytracing-am-i-missing-a-case">very helpful post</a> that illustrated the different cases that have to be handled when traversing a KD Tree. </p>
<p>His diagrams were very helpful. They were so implanted in my brain that I ended up adopting his algorithm completely from the code that he posted. He still missed two cases, that I initially had some trouble finding. I ended up implementing a special, interactive debug feature that would allow me to use the mouse to point at a pixel in the viewing window and result in the rendering of that single view ray. I would use it by rendering the entire scene, setting a breakpoint, then clicking on the pixel that I needed to test. This was invaluable in finding the remaining artifacts as well as some ray tracing issues.</p>
<p>At this point, my KD Tree still proved to be more of a deceleration structure. I fired up a profiler, and found a number of slowdowns related to mallocs when operating on C++ vectors. I reduced my use of vectors and passed them by reference throughout the KD Tree traversal. This brought significant gains, but my KD Tree was still slower.</p>
<p>The next step was to implement a smarter space partitioning scheme based on comparing the Surface Area Heuristic of each new subspace. This cost calculation was also critical to determining when to make a leaf node. I had a few bugs that led to excessive node duplication. Once I sorted those out, I finally got the gains I was hoping for. My resulting tree for the more complicated scene was 11 nodes deep, and contained several empty leaf nodes.</p>
<p>16 Sphere Scene Without a KD Tree</p>
<blockquote><pre>Size: 500x500
Total Primitive Intersection Checks: 223084940
Total Node Traversals: 0
Total Render: 29.763917 seconds</pre>
</blockquote>
<p>16 Sphere Scene With KD Tree</p>
<blockquote><pre>Size: 500x500
Build KD Tree: 0.000580 seconds
Total Primitive Intersection Checks: 55731412
Total Node Traversals: 161224507
Total Render: 24.878577 seconds</pre>
</blockquote>
<p>I reduced the number of sphere intersections from 225m to 161m while only adding 55m node traversals. The time savings wasn't as dramatic as I had hoped, likely because my algorithm still used functional recursion instead of maintaining a smaller stack inside of a loop. For my final project, I'm likely going to go stackless altogether since I'll be using the GPU too.</p>
<p>However, I really started to notice gains when I upped the complexity of the scene. I created a model of 140 reflective spheres arranged into a tightly-packed pyramid.</p>
<p>140 Sphere Scene Without KD Tree</p>
<blockquote><pre>Size: 500x500
Total Primitive Intersection Checks: 1016735174
Total Node Traversals: 0
Total Render: 103.413575 seconds</pre>
</blockquote>
<p>140 Sphere Scene With KD Tree</p>
<blockquote><pre>Size: 500x500
Build KD Tree: 0.091852 seconds
Total Primitive Intersection Checks: 230486448
Total Node Traversals: 161218665
Total Render: 38.800175 seconds</pre>
</blockquote>
<p><strong>Sample Images</strong></p>

<a href='http://www.implovator.com/2010/10/comp-770-program-3-ray-tracing-part-2/spheres1/' title='spheres1'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/10/spheres1-150x150.png" class="attachment-thumbnail" alt="spheres1" title="spheres1" /></a>
<a href='http://www.implovator.com/2010/10/comp-770-program-3-ray-tracing-part-2/spheres2/' title='spheres2'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/10/spheres2-150x150.png" class="attachment-thumbnail" alt="spheres2" title="spheres2" /></a>
<a href='http://www.implovator.com/2010/10/comp-770-program-3-ray-tracing-part-2/spheres3/' title='spheres3'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/10/spheres3-150x150.png" class="attachment-thumbnail" alt="spheres3" title="spheres3" /></a>
<a href='http://www.implovator.com/2010/10/comp-770-program-3-ray-tracing-part-2/spheres4/' title='spheres4'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/10/spheres4-150x150.png" class="attachment-thumbnail" alt="spheres4" title="spheres4" /></a>
<a href='http://www.implovator.com/2010/10/comp-770-program-3-ray-tracing-part-2/spheres5/' title='spheres5'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/10/spheres5-150x150.png" class="attachment-thumbnail" alt="spheres5" title="spheres5" /></a>
<a href='http://www.implovator.com/2010/10/comp-770-program-3-ray-tracing-part-2/pyramid/' title='pyramid'><img width="150" height="150" src="http://www.implovator.com/wp-content/uploads/2010/10/pyramid-150x150.png" class="attachment-thumbnail" alt="pyramid" title="pyramid" /></a>

]]></content:encoded>
			<wfw:commentRss>http://www.implovator.com/2010/10/comp-770-program-3-ray-tracing-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

