<?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>Blog &#124; Brilliant Software Inc.</title>
	<atom:link href="http://brilliantsoftware.ca/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://brilliantsoftware.ca/blog</link>
	<description>All of the goings-on at Brilliant Software</description>
	<lastBuildDate>Sun, 28 Apr 2013 12:21:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Releasing software when it&#8217;s ready!</title>
		<link>http://brilliantsoftware.ca/blog/2011-01-12-releasing-software-when-its-ready</link>
		<comments>http://brilliantsoftware.ca/blog/2011-01-12-releasing-software-when-its-ready#comments</comments>
		<pubDate>Wed, 12 Jan 2011 17:30:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[boxee]]></category>

		<guid isPermaLink="false">http://brilliantsoftware.ca/blog/2011-01-12-releasing-software-when-its-ready</guid>
		<description><![CDATA[So I&#8217;ve spent the last week or so playing with the new Boxee Box. I must admit even though the initial reviews I read were less than stellar, I was really excited to see the latest incarnation of one of &#8230; <a href="http://brilliantsoftware.ca/blog/2011-01-12-releasing-software-when-its-ready">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve spent the last week or so playing with the new Boxee Box. I must admit even though the initial reviews I read were less than stellar, I was really excited to see the latest incarnation of one of my favorite tech projects of the last decade.</p>
<p>I&#8217;ve been with XBMC and Boxee since the beginning first on an old Xbox, then an Apple TV and it seemed like the Boxee Box finally was going to make this homebrew magic into a mainstream star.</p>
<p>That&#8217;s a long preamble and I&#8217;m sure you can guess my experience wasn&#8217;t a positive one. </p>
<p>First let me say that the D-Link hardware looks amazing. The cube is small, quirky and makes for a big visual upgrade from an Xbox.</p>
<p>But due to some really premature software, this is where the love affair ended. The warning signals started right at boot with wifi troubles. That really was just the beginning. From a web browser that ignores any link to a new target window (you have no idea how many sites that breaks), to apps that don&#8217;t work&#8230; this project is nowhere near ready for primetime.</p>
<p>Ultimately, I had to rebox the Boxee and take it back because it doesn&#8217;t even replicate the functionality of my old Xbox with XBMC. You can&#8217;t play music without using your TV. That really was the final straw as I use XBMC to stream music all day using the web interface to control it.</p>
<p>So why am I posting all of this here. It all centers around the idea of when to release software. It seems like a big setback to a great project to rush something to market and ultimately disappoint consumers.</p>
<p>One of the first thing that comes to mind broken features. I know when we have new ideas, we think about packing them into our releases as soon as possible. I think it&#8217;s important to constantly temper those thoughts by making sure that we test, test, test and make sure features are solid.</p>
<p>In the case of the Boxee Box, it promises the moon and leaves a patchwork of unfinished or poorly implemented features. I can&#8217;t help but think it would be better adopted with a stable, smaller feature set and a clear roadmap available from management.</p>
<p>I think that&#8217;s an important lesson for all of us who release software.</p>
]]></content:encoded>
			<wfw:commentRss>http://brilliantsoftware.ca/blog/2011-01-12-releasing-software-when-its-ready/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Missing The Windows Tablet Point</title>
		<link>http://brilliantsoftware.ca/blog/2011-01-06-missing-the-windows-tablet-point</link>
		<comments>http://brilliantsoftware.ca/blog/2011-01-06-missing-the-windows-tablet-point#comments</comments>
		<pubDate>Thu, 06 Jan 2011 04:59:48 +0000</pubDate>
		<dc:creator>Dan Drew</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[tablet]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[wp7]]></category>

		<guid isPermaLink="false">http://brilliantsoftware.ca/blog/?p=100</guid>
		<description><![CDATA[So Asus just announced their new tablet based on Windows 7, and already the backlash against it has begun. But while it&#8217;s true that the Windows desktop experience is less than ideal for a touch-centric device, the naysayers who claim &#8230; <a href="http://brilliantsoftware.ca/blog/2011-01-06-missing-the-windows-tablet-point">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>So Asus just  announced their new tablet based on Windows 7, <a href="http://www.istartedsomething.com/20110105/asuss-windows-7-slate-deja-vu-of-pc-industrys-past-failures-tablets/" target="_blank">and already the backlash against it has begun</a>.  But while it&#8217;s true that the Windows desktop experience is less than ideal for a touch-centric device, the naysayers who claim Windows 7 is the wrong choice completely are missing the point.<span id="more-100"></span> Some point to Apple, and how they were much smarter and created iOS to run on iPod/iPhone/iPad and left OS X for the desktop hardware. Which would be true, if that&#8217;s what they actually did. Anyone who has written an iPhone app  knows that iOS is actually just a stripped down version of OS X with a more touch- and form-factor-friendly user interface slapped on top. Which brings me to my point: the operating system isn&#8217;t the issue, it&#8217;s how you interact with it.</p>
<p>The Windows operating system has been running on mobile devices much longer than iOS: the <a href="http://en.wikipedia.org/wiki/Pocketpc" target="_blank">PocketPC</a> (running <a href="http://en.wikipedia.org/wiki/Windows_ce" target="_blank">Windows CE</a>) I bought 10+ years ago had a 320&#215;200 LCD display, 24-bit colour, and allowed interaction by touch or stylus. There is also <a href="http://www.microsoft.com/windowsembedded/en-us/products/readyproducts/posready/default.mspx" target="_blank">Windows POS</a>, <a href="http://en.wikipedia.org/wiki/Ford_Sync" target="_blank">Microsoft Sync</a>, <a href="http://www.microsoft.com/surface" target="_blank">Microsoft Surface</a>, and of course PocketPC&#8217;s most recent successor: <a href="http://www.microsoft.com/windowsphone" target="_blank">Windows Phone 7</a>. The primary difference in all these variants is not the underlying operating system code, it&#8217;s how the user interacts with it.</p>
<p>The same is true for a Windows-based tablet. What&#8217;s missing isn&#8217;t a rewrite of the Windows operating system, it&#8217;s a touch-friendly interface. The Windows 7 operating system already supports multi-touch. In fact it did so in Vista, which was the foundation for the Microsoft Surface platform. The issue is that the current Windows shell, much like its Mac OS X competitor, is geared towards mouse-based interaction. The underlying OS is just fine and <a href="http://techflash.com/seattle/2011/01/windows-on-arm-more-details.html" target="_blank">is already slated to run on the mobile-friendly ARM processor</a>.</p>
<p>What we need to see, much like the Xbox has done with Kinect, is a new interface that is optimized for how the user is interacting with the device. Microsoft has already proven that they are well aware of this with the new Windows Phone 7 interface, which is a far cry from the Windows Mobile interface it replaced. I would have to agree that it was late to the party, but I can&#8217;t argue with the end result.</p>
<p>I know there&#8217;s a lot of people that love to hate Windows, but in this case I have to say your criticisms are misplaced. Operating systems are too complicated to re-write from the ground up for each and every device. It&#8217;s the reason Mac OS X is now built on Linux, as is Android. Similarly, any device that comes out of Redmond will be based on Windows in some form or another. Speculating about anything else is a waste of time, so let&#8217;s wait and see what kind of slick (or not so slick) UI they slap on top&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://brilliantsoftware.ca/blog/2011-01-06-missing-the-windows-tablet-point/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Finding Time to Innovate</title>
		<link>http://brilliantsoftware.ca/blog/2010-12-23-finding-time-to-innovate</link>
		<comments>http://brilliantsoftware.ca/blog/2010-12-23-finding-time-to-innovate#comments</comments>
		<pubDate>Thu, 23 Dec 2010 17:55:51 +0000</pubDate>
		<dc:creator>Dan Drew</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://brilliantsoftware.ca/blog/?p=95</guid>
		<description><![CDATA[As developers, we&#8217;ve all experienced the frustration of losing touch with the latest and greatest technologies that so captured our fascination in the first place. As we graduated from our parent&#8217;s basement to the corporate world, we found ourselves watching &#8230; <a href="http://brilliantsoftware.ca/blog/2010-12-23-finding-time-to-innovate">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As developers, we&#8217;ve all experienced the frustration of losing touch with the latest and greatest technologies that so captured our fascination in the first place. <span id="more-95"></span>As we graduated from our parent&#8217;s basement to the corporate world, we found ourselves watching years breeze by as we cobbled together minor feature improvements and slapped more band-aids on code someone else wrote 3 years ago. Sure, we got to build that key feature last year, but since the rest of the product is still mired in MFC, ColdFusion, or any number of archaic technologies of your choice, you didn&#8217;t really get that same satisfaction as when get to geek out on the latest and greatest. Innovation gets relegated to little apps you write in your spare time, or not at all if you attempt to lead a life outside work that doesn&#8217;t completely revolve around computers. Inevitably, we get fed up with the hand that feeds us for stifling us, and in a way not respecting us because we know we could make things so much better if they would just give us a some leeway.</p>
<h2>A Little Clarity</h2>
<p>The problem isn&#8217;t unique to software development, it&#8217;s the constant struggle between art and business. You see it in every industry, but in ours it usually results in products being released to market before they&#8217;re ready, developers burnt out trying to meet market-driven deadlines and &#8212; drum-roll, please &#8212; little time to truly experiment and innovate. I&#8217;ve worked on various sizes of projects at various sizes of companies, and I&#8217;ve come to the conclusion that it really comes down to the development team manager. I&#8217;ve seen that role have many titles, but basically we&#8217;re talking about the person sitting between the developers and marketing/business-y types. True, the developer has to take the initiative to make the case for the new technology and why it&#8217;s worth looking in to, but it&#8217;s the person making the scheduling and resource decisions who can really make the difference in whether it happens or not. Managers need to get better at allocating time for such investigations. They also need to get better at making risk vs. benefit decisions when deciding to invest time in a new approach that could have long-term benefits vs sticking to the status quo which may require less effort now but cause more complications down the road. Finally, they need to be able to effectively communicate up the chain why the work should happen, or down the chain why not.</p>
<h2>Sorry Ted, You&#8217;re One of Them Now</h2>
<p>Having said that, developers today also need to become more business-minded. At the end of the day, it&#8217;s the financial success of the product that trumps everything else. We don&#8217;t like to hear that, but the financial success of the business is what ensures you can keep working, pay your mortgage, and buy those shiny new phones and gadgets. That means a couple of things:</p>
<p>Firstly, that developers who really want to build a quality product need to focus on one golden rule: build it right the first time. Any time I hear someone say &#8220;we can re-write that later&#8221; I want to wash their mouth out with soap, slap them, give them a wedgie, and then berate them with &#8220;Yo&#8217; Mamma&#8221; jokes until they cry. Not gonna happen buddy. If a plumber said they want you to pay them to spend 3 months ripping apart your house to put in shiny new pipes with no real end benefit except the toilet will flush better, would you fork over the cash and delay having them put in the new jacuzzi, or tell them to piss off and put in the damn jacuzzi already? The same is true for developers expecting their companies to let them spend time re-writing a feature that already works because it will be &#8220;better&#8221; or &#8220;more stable&#8221;. There&#8217;s rarely a compelling business case for re-writing something that already works, so this is generally not going to be the answer for getting your techno-geek fix.</p>
<p>Secondly, the same is true for innovation: you need to make the business case. If you can&#8217;t do that then don&#8217;t expect your business to pay you to do it. If you truly believe that the new technology will help the product and business then work with your manager to make the case and schedule the time in.</p>
<h2>Culture Shock</h2>
<p>Let&#8217;s face it, some companies just don&#8217;t have or want leading edge innovation. It&#8217;s why many developers don&#8217;t want to work for financial institutions and other verticals where they&#8217;re as likely to be running DOS apps talking to a mainframe as anything else. Other times, it&#8217;s just lack of awareness. Either way, my own personal rule for unhappiness at work is: have a plan to make things better or have a plan to get out. It&#8217;s up to you which one you pick, but I&#8217;m a big fan of speaking up and taking initiative. From experience, a lot of other people are fans too. Don&#8217;t sit around complaining and expecting other people to make things better, be part of the solution.</p>
]]></content:encoded>
			<wfw:commentRss>http://brilliantsoftware.ca/blog/2010-12-23-finding-time-to-innovate/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>ParallelFX: Armed and Dangerous</title>
		<link>http://brilliantsoftware.ca/blog/2010-12-19-parallelfx-armed-and-dangerous</link>
		<comments>http://brilliantsoftware.ca/blog/2010-12-19-parallelfx-armed-and-dangerous#comments</comments>
		<pubDate>Mon, 20 Dec 2010 03:23:02 +0000</pubDate>
		<dc:creator>Dan Drew</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://brilliantsoftware.ca/blog/?p=91</guid>
		<description><![CDATA[Last Tuesday I attended a presentation by Rob Windsor of the TVBUG user group on the new parallel extensions in .Net 4. I had tried out some of the extensions back when ParallelFX was still an RC candidate, but the &#8230; <a href="http://brilliantsoftware.ca/blog/2010-12-19-parallelfx-armed-and-dangerous">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last Tuesday I  attended a presentation by <a title="Rob Windsor" href="http://blogs.objectsharp.com/cs/blogs/rwindsor/" target="_blank">Rob Windsor</a> of the <a title="TVBUG" href="http://tvbug.com" target="_blank">TVBUG user group</a> on the new <a href="http://msdn.microsoft.com/en-us/concurrency/default.aspx" target="_blank">parallel extensions in .Net 4</a>. I  had tried out some of the extensions back when ParallelFX was still an RC candidate, but the Task class and all its cool chaining features were all new  to me. While I&#8217;m excited to see threading made so much easier, I also have to  admit it frightens me. <span id="more-91"></span>Rob jokingly quoted someone suggesting that Visual Studio  should throw compile-time errors if you try to use threading without the  appropriate Microsoft certification, but it&#8217;d probably have my vote if it was technically feasible and didn&#8217;t do <a href="http://www.youtube.com/watch?v=gckkbEPLx8M" target="_blank">something stupid like choose Sarah Palin as a running mate</a>.</p>
<p>There&#8217;s a  fair chunk of developers who have little to no experience writing multi-threaded  applications.  Scarier still are the newcomers who skipped the c++ generation and think  the c# &#8220;lock&#8221; statement is the foundation for all resource synchronization in the windows  operating system &#8212; yes, I interviewed someone who quite boldly threw that gem out  while I did my best not to giggle&#8230; While technologies such as <a href="http://windowsclient.net/wpf/" target="_blank">WPF</a> make writing Windows programs so much easier in many ways, they also present new and interesting ways to shoot yourself in the foot with threads. I recently updated <a href="http://www.kidstarter.com" target="_blank">KidStarter</a> to load Start Menu icons in a background thread to improve the user experience. It seemed pretty straightforward for someone who&#8217;s been knee-deep in multi-threading for over a decade now, but I still managed to get tripped up by WPF&#8217;s various delay-loading performance optimizations and spent a couple of days debugging the problem.</p>
<p>I&#8217;m the last person to discourage people from diving in, getting burnt and learning from the experience. Those are the only people I would ever hire for a job. Just make sure you either do it on your own time or have enough time in your project schedule to absorb the inevitable mistakes and extra bugs <img src='http://brilliantsoftware.ca/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Having said that, ParallelFX is a well-designed framework that does a great job of alleviating a lot of the pain in using threads to increase your app&#8217;s performance, making better use of system resources, and ultimately providing a better user experience. I look forward to digging into it more (and possibly re-writing my Start Menu code&#8230;)</p>
]]></content:encoded>
			<wfw:commentRss>http://brilliantsoftware.ca/blog/2010-12-19-parallelfx-armed-and-dangerous/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WP7: Rendering Content to a Bitmap</title>
		<link>http://brilliantsoftware.ca/blog/2010-12-18-wp7-rendering-content-to-a-bitmap</link>
		<comments>http://brilliantsoftware.ca/blog/2010-12-18-wp7-rendering-content-to-a-bitmap#comments</comments>
		<pubDate>Sun, 19 Dec 2010 01:51:35 +0000</pubDate>
		<dc:creator>Dan Drew</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Windows Phone 7]]></category>

		<guid isPermaLink="false">http://brilliantsoftware.ca/blog/?p=85</guid>
		<description><![CDATA[Sometimes you need to render UI content, such as text, to a background bitmap. This can be handy for animation or saving on render time for static content. In Silverlight for Windows Phone 7, this is as easy as creating &#8230; <a href="http://brilliantsoftware.ca/blog/2010-12-18-wp7-rendering-content-to-a-bitmap">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Sometimes you need to render UI content, such as text, to a background bitmap. This can be handy for animation or saving on render time for static content. In Silverlight for Windows Phone 7, this is as easy as creating a WriteableBitmap.<span id="more-85"></span></p>
<p>First we&#8217;ll create some XAML to show the result:</p>
<pre>&lt;Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"&gt;
<span style="color: #ff0000;">  &lt;Image x:Name="theImage" Stretch="Uniform"/&gt;</span>
&lt;/Grid&gt;
</pre>
<p>Then we&#8217;ll create the bitmap and assign it to our Image element:</p>
<pre>TextBlock tb = new TextBlock();
tb.Text = "My TextBlock";
tb.FontSize = 12;
tb.Foreground = new SolidColorBrush(Colors.Red);
tb.Margin = new Thickness(10);

<span style="color: #ff0000;">WriteableBitmap bmp = new WriteableBitmap(tb, null);

</span>this.theImage.Source = bmp;<span style="color: #ff0000;">
</span></pre>
<p><span style="color: #ff0000;"><span style="color: #000000;">You should now see the rendered bitmap of the TextBlock on your page when you run your app.</span><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://brilliantsoftware.ca/blog/2010-12-18-wp7-rendering-content-to-a-bitmap/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Dude, Respect Other People&#8217;s Time</title>
		<link>http://brilliantsoftware.ca/blog/2010-12-17-dude-respect-other-peoples-time</link>
		<comments>http://brilliantsoftware.ca/blog/2010-12-17-dude-respect-other-peoples-time#comments</comments>
		<pubDate>Fri, 17 Dec 2010 17:58:09 +0000</pubDate>
		<dc:creator>Dan Drew</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://brilliantsoftware.ca/blog/?p=81</guid>
		<description><![CDATA[We&#8217;ve all experienced it. We&#8217;ve all put with it. We&#8217;ve all secretly wanted to punch the person that did it. We&#8217;ve all super-secretly wanted to follow up on the punch with an angry, guttural scream and kick. Okay, the last &#8230; <a href="http://brilliantsoftware.ca/blog/2010-12-17-dude-respect-other-peoples-time">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve all experienced it. We&#8217;ve all put with it. We&#8217;ve all secretly wanted to punch the person that did it. We&#8217;ve all super-secretly wanted to follow up on the punch with an angry, guttural scream and kick. Okay, the last one might just be me, but you have to admit that dealing with someone who doesn&#8217;t respect your time is not only unprofessional at a business level but infuriating at a personal level.<span id="more-81"></span></p>
<p>It can happen in many forms: That guy who arranges 5pm meetings because he doesn&#8217;t have kids to pick up from daycare; that engineer that derails a meeting for 20 minutes with technical suppositions no one else cares about or is qualified to understand; that friend of a friend who&#8217;s been bugging you for weeks to help them on their website then reschedules five times; that client who expects you to react to every request instantaneously, then takes 3 weeks to get back to you when you need info from them; that Chuck E. Cheese cashier who shamefully stands idly by while the prize counter girl takes a 15 minute bathroom break and wide-eyed, eager children stand waiting with hard-won tickets clutched tightly in their little hands, tears slowly welling in their eyes.</p>
<p>Years of experience have proved over and over that these issues cause inefficiencies and erode communication. People who are treated with a lack of respect become resentful of the source, which results in less communication and often unnecessary politics. So what&#8217;s the solution?</p>
<p>The first part is obvious: make sure that you are not the one being the douche-bag. If you need to meet with someone, make the effort to change your schedule to accommodate them if needed. Once you&#8217;ve agreed on a time, short of a medical emergency or unexpected deportation, keep it. If someone is doing work for you, make sure you respond to their requests in a timely fashion. Remember, their delays are your delays. And for the love of all that is good in the world, if you see a bunch of kids waiting to cash in tickets for candy and fake vampire teeth, walk the 2 feet down the counter and hand out a few toys.</p>
<p>The second part is: speak up. Most people I&#8217;ve met avoid confrontation like the plague. I personally avoid it like a plague coupled with really bad gingivitis. We also don&#8217;t like to stick our neck out and risk looking like an idiot, even though we&#8217;d be saying what everyone else wishes they had the nerve to say themselves. Don&#8217;t back down when your manager sends you that ridiculous meeting request, propose a new time that you think would work better. If a client is repeatedly slow in responding to your requests, be honest and say &#8220;Hey, this is affecting my ability to finish your project. Can we please discuss this?&#8221; If you&#8217;re in a meeting that&#8217;s taking a side trip to the Caribbean, I find the phrase &#8220;can you please take that offline?&#8221; cliched but effective. Unfortunately teenagers are immune to reason and angry glares, so you&#8217;ll just have to suck it up and wait for your 200 ticket Tootsie Roll.</p>
]]></content:encoded>
			<wfw:commentRss>http://brilliantsoftware.ca/blog/2010-12-17-dude-respect-other-peoples-time/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Tries to Chrome the Enterprise</title>
		<link>http://brilliantsoftware.ca/blog/2010-12-16-google-tries-to-chrome-the-enterprise</link>
		<comments>http://brilliantsoftware.ca/blog/2010-12-16-google-tries-to-chrome-the-enterprise#comments</comments>
		<pubDate>Thu, 16 Dec 2010 15:41:18 +0000</pubDate>
		<dc:creator>Dan Drew</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://brilliantsoftware.ca/blog/?p=72</guid>
		<description><![CDATA[While its possible Google knows something I don&#8217;t, as someone who&#8217;s spent a fair chunk of my career building software for the enterprise their latest attempt to ratchet themselves into that market seems somewhat naive. The premise is that 74% &#8230; <a href="http://brilliantsoftware.ca/blog/2010-12-16-google-tries-to-chrome-the-enterprise">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>While its possible  Google knows something I don&#8217;t, as someone who&#8217;s spent a fair chunk of my career  building software for the enterprise their <a title="Google targets Internet Explorer shops with Chrome admin controls" href="http://www.theregister.co.uk/2010/12/15/chrome_for_business_tools/" target="_blank">latest attempt to ratchet  themselves into that market</a> seems somewhat naive.</p>
<p><span id="more-72"></span>The premise is that 74% of all businesses still use Windows XP, which isn&#8217;t supported by the upcoming IE9. They see this as a prime market then for their <a href="http://code.google.com/chrome/chromeframe/" target="_blank">Chrome IE Plugin</a> to add HTML5 support.  While they&#8217;re absolutely correct  that XP is still dominant in that world, the reason for that is the same reason  that every web developer&#8217;s nightmare &#8212; IE6 &#8212; is still very much alive and kicking: the cost of  updating core software like the OS and browser is prohibitively high. In a large organization, even deploying patches is problematic. A big part of the reason why Microsoft  instituted &#8220;<a title="Patch Tuesday" href="http://en.wikipedia.org/wiki/Patch_tuesday" target="_blank">Patch Tuesday</a>&#8221; was to make it easier for corporate customers to plan and  schedule patch deployments to their possibly hundreds of thousands of client  machines. The potential amount of downtime for end-users (and corresponding IT costs) if an existing application breaks is huge, so any major and sometimes minor changes to users&#8217; computers need to be carefully tested and approved before they&#8217;re added to the standard environment. Tossing a browser-within-a-browser plugin into the mix doesn&#8217;t really seem like a real bang for my buck just to get a swanky new video tag.</p>
<p>I&#8217;m not saying it won&#8217;t get used &#8212; there&#8217;s always that uber-techie IT  guy that manages to sneak a few Linux file servers into the mix &#8212; but with <a title="Windows 7 will dominate corporate PC deployments, Forrester says" href="http://www.networkworld.com/news/2010/110210-windows-7-corporate-deployment.html" target="_blank">predictions that enterprises will be deploying Windows 7 on up to 83% of new machines by this time next year</a>, it seems like Google&#8217;s niche  is already making its way into the ether.</p>
]]></content:encoded>
			<wfw:commentRss>http://brilliantsoftware.ca/blog/2010-12-16-google-tries-to-chrome-the-enterprise/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Planning for Failure: The Problem With Working Overtime</title>
		<link>http://brilliantsoftware.ca/blog/2010-12-15-planning-for-failure-the-problem-with-working-overtime</link>
		<comments>http://brilliantsoftware.ca/blog/2010-12-15-planning-for-failure-the-problem-with-working-overtime#comments</comments>
		<pubDate>Wed, 15 Dec 2010 14:50:56 +0000</pubDate>
		<dc:creator>Dan Drew</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://brilliantsoftware.ca/blog/?p=15</guid>
		<description><![CDATA[There’s an old programmer quote that goes something like this,

Some people, when confronted with a problem, think 
“I know, I’ll use regular expressions.”   Now they have two problems.

I feel the same way about teams working overtime. <a href="http://brilliantsoftware.ca/blog/2010-12-15-planning-for-failure-the-problem-with-working-overtime">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Great article on <a href="http://www.planningforfailure.com" target="_blank">Planning for Failure</a>: <a href="http://www.planningforfailure.com/post/1461931855/the-problem-with-working-overtime" target="_blank">The Problem with Working Overtime</a></p>
]]></content:encoded>
			<wfw:commentRss>http://brilliantsoftware.ca/blog/2010-12-15-planning-for-failure-the-problem-with-working-overtime/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Phone 7: Cutting Transparency Down To Size</title>
		<link>http://brilliantsoftware.ca/blog/2010-12-14-wp7-cutting-transparency-down-to-size</link>
		<comments>http://brilliantsoftware.ca/blog/2010-12-14-wp7-cutting-transparency-down-to-size#comments</comments>
		<pubDate>Tue, 14 Dec 2010 23:53:57 +0000</pubDate>
		<dc:creator>Dan Drew</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://brilliantsoftware.ca/blog/?p=44</guid>
		<description><![CDATA[I know that few developers these days give a second thought to such trivialities as application footprint, but as someone who lived through the DOS era I still get queasy when I know I&#8217;m wasting space. Now with the spotlight &#8230; <a href="http://brilliantsoftware.ca/blog/2010-12-14-wp7-cutting-transparency-down-to-size">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I know that few developers these days give a second thought to such trivialities as application footprint, but as someone who lived through the DOS era I still get queasy when I know I&#8217;m wasting space. Now with the spotlight on mobile devices with (relatively) small drive and memory space, developers would once again be wise to watch their application weight. While even 8GB may seem like a lot for a smartphone device, with users using large music collections and high-definition video &#8212; not to mention hundreds of other apps &#8212; that space can quickly get eaten. Personally I chewed through half of my Samsung Focus&#8217; storage the first time I plugged it into my PC and synced it to my Zune music collection&#8230;</p>
<p>It should come as no surprise then that when I realized 75% of my near 700KB xap file was images, an 8-bit version of Jiminy Cricket materialized on my shoulder and started to sadly shake it&#8217;s head. The culprit? Transparent images.</p>
<h2><span id="more-44"></span>Image Format Primer</h2>
<p>There are two primary image formats that have emerged over the years as standard for web and client applications: <a title="Portable Network Graphic" href="http://en.wikipedia.org/wiki/Portable_Network_Graphics" target="_blank">PNG</a> and <a title="Jpeg" href="http://en.wikipedia.org/wiki/Jpeg" target="_blank">JPEG</a>. PNG uses a lossless run-length encoding which makes it ideal for images don&#8217;t have a lot of colour variation. JPEG uses a fuzzy algorithm that compresses complex images like photos extremely well, but it&#8217;s lossy and causes visible artifacts depending on the compression level and image content. It&#8217;s usually pretty straightforward which format you should pick based on the image content, except for one major differentiator: transparency support. PNG has it but JPEG does not.</p>
<h2>The Conundrum</h2>
<p>I wanted my app to be pretty (because I like apps that look good) so I picked photo-quality images. For example, one of my images was a piece of note paper. The problem arose when I needed the images to have transparency. It was absolutely essential that they have slick drop-shadows and realistic looking edges when displayed on my equally pretty background. The inescapable conclusion was that I&#8217;d have to save them as PNG images, which in the case of my note paper resulted in 250KB for the 400&#215;400 image&#8230; nearly half of my total application size!</p>
<p>It was at this point that Jiminy started threatening me with nipple clamps and wires connected to car batteries, so I hid in a closet and began to think of possible solutions. It turns out there&#8217;s a way to use both image formats for the things they&#8217;re good at: JPEG for image compression and PNG for transparency. By splitting the image into a separate content and transparency (alpha) images, I could actually reduce the images in total size by as much as 90%! The key is the <strong>UIElement.OpacityMask</strong> property.</p>
<h2>First Thing&#8217;s First</h2>
<p>Before we can do our XAML magic we first need to create our images. I like to use <a title="Adobe Photoshop" href="http://www.photoshop.com/" target="_blank">Adobe Photoshop</a>, but other drawing packages should provide similar functionality. With your transparent image open, let&#8217;s split it into two:</p>
<p>Since it probably doesn&#8217;t require any changes, first we&#8217;ll create our content JPEG image. The one thing that is important is that the colours in your semi-transparent areas are what you need them to be. The alpha layer image won&#8217;t contain any colour information, so you need to tweak the image for that. If you&#8217;re using a simple drop-shadow or other effect that all the same colour, the Photoshop &#8220;Save for Web and Devices&#8221; feature will let you choose a matting colour when you export it (black for a drop-shadow, etc).</p>
<p>Next we need to create a layer that we&#8217;ll use to export our PNG transparency image. Right-click on the content layer and choose &#8220;Select Pixels&#8221;. This will create a selection area that exactly matches the alpha channel for that layer. Remember that PNG compresses best with less colours, so let&#8217;s go nuts and create a layer that&#8217;s all white. Exciting, huh? Choose &#8220;New Layer &gt; Solid Color&#8221; and then choose white (or any colour you want) when the picker pops up. Since you had a selection, Photoshop will automatically add a layer mask for you which matches the content layer transparency. Make sure none of the content layers are showing and export the new layer to a PNG file.</p>
<p>You should now have two files which are hopefully smaller than the original PNG you started with. For my note paper graphic, the resulting JPEG image was a mere 20kb and the PNG mask a puny 10kb. That&#8217;s a total 220kb size reduction from the single PNG image&#8230; an 88% improvement!</p>
<h2>XAML Me, Baby</h2>
<p>Now on to Silverlight&#8230; Now somewhere in your code you should have a brush defined with your old image file:</p>
<pre>&lt;ImageBrush x:Key="MyBrush" Stretch="Fill"
    ImageSource="images/original.png"/&gt;</pre>
<p>Which we&#8217;re going to update and add a new brush to:</p>
<pre>&lt;ImageBrush x:Key="MyBrush" Stretch="Fill"
    ImageSource="<span style="color: #ff0000;">images/new.jpg</span>"/&gt;

&lt;ImageBrush x:Key="<span style="color: #ff0000;">MyOpacityBrush</span>" Stretch="Fill"
    ImageSource="<span style="color: #ff0000;">images/new_alpha.png</span>"/&gt;</pre>
<p>Now with our brushes added, we can update our UI elements. Here&#8217;s simple example using a Grid to simply display the masked image:</p>
<pre>&lt;Grid Background="{StaticResource MyBrush}"
  OpacityMask="{StaticResource MyOpacityBrush}"/&gt;</pre>
<h2>Summary</h2>
<p>If you&#8217;re using Silverlight for Windows Phone 7 and plan  to use a lot of rich graphics, creative use of <strong>OpacityMask</strong> is an easy way to lower your storage and memory footprint</p>
]]></content:encoded>
			<wfw:commentRss>http://brilliantsoftware.ca/blog/2010-12-14-wp7-cutting-transparency-down-to-size/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cliques Are For High School, Not Your Business</title>
		<link>http://brilliantsoftware.ca/blog/2010-12-14-cliques-are-for-high-school-not-your-business</link>
		<comments>http://brilliantsoftware.ca/blog/2010-12-14-cliques-are-for-high-school-not-your-business#comments</comments>
		<pubDate>Tue, 14 Dec 2010 16:29:52 +0000</pubDate>
		<dc:creator>Dan Drew</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://brilliantsoftware.ca/blog/?p=34</guid>
		<description><![CDATA[They say the secret to a successful marriage is good communication. I&#8217;m not entirely sure who &#8220;they&#8221; are, or even the current state of their plans for world domination via a complex scheme of pulleys and hamster wheels, but on &#8230; <a href="http://brilliantsoftware.ca/blog/2010-12-14-cliques-are-for-high-school-not-your-business">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>They say the secret to a successful marriage is good communication. I&#8217;m not entirely sure who &#8220;they&#8221; are, or even the current state of their plans for world domination via a complex scheme of pulleys and hamster wheels, but on this point I&#8217;m inclined to agree. The same is true of a successful software company.</p>
<h2><span id="more-34"></span>The Clique Effect</h2>
<p>If you&#8217;ve worked at a software company that&#8217;s bigger than a couple guys working in a garage, it probably won&#8217;t be news to you that the tendency for people to form &#8220;us&#8221; and &#8220;them&#8221; peer groups didn&#8217;t get beaten out of them in High School. Welcome to Human Nature 101. Whether it&#8217;s management vs. code monkeys, developers vs. testers, full-timers vs. interns, or even that smelly guy in the end cubicle vs. everyone else, the typical software company is filled with human division. While these groups may communicate very well within themselves, communication between groups tends to be overly protective and &#8220;need to know&#8221;. Sometimes there&#8217;s a genuine need to protect strategic information, but a lot of times this comes down a form of insecurity (&#8220;I&#8217;m more important than you because I&#8217;m privy to this information and you&#8217;re not&#8230;&#8221;) and just plain comfort level (&#8220;I don&#8217;t know you or understand your job, so I won&#8217;t go out of my way to talk to you&#8221;)</p>
<h2>Cliquenomics</h2>
<p>The thing is that the more information people have, the better they can plan. The better they can plan, the more likely the plan is to succeed. The more likely the plan is to succeed, the better it is for business. By stifling the flow of information, we inherently hobble the ability of the company to plan and therefore succeed. When I work as an architect, I always try to understand not only the immediate requirements of a component, but also what it might need to do in the future. I don&#8217;t necessarily intend to implement any of the future functional requirements, but knowing what they might be helps me come up with a design that will allow us to easily plug that stuff in later instead of spending unnecessary time re-writing a huge chunk of code. By knowing more sooner, I can reduce risk and overhead later. The same is true for project planning, and a successful project plan needs everyone&#8217;s input.</p>
<h2>How Do I Make This Better?</h2>
<p>What you&#8217;ve got to remember is that the company isn&#8217;t about <em>you</em> succeeding, it&#8217;s about <em>everyone</em> succeeding. There&#8217;s no down-side to stepping outside your comfort zone and making an effort to reach across the human divide. If you help others succeed at their jobs, there&#8217;s a pretty darn good chance they&#8217;ll a) think you&#8217;re awesome and b) go out of their way to help you succeed at yours.</p>
<p>The next time you have a choice between emailing someone or walking downstairs to talk to them, tell yourself you probably need the exercise anyway. Heck, if you work for a software company then the chances that you do are pretty high, and I&#8217;m sure your slowly atrophying muscles will thank you for it. Start inviting other groups for lunch and get to know people. Getting to know people socially will grease the communication wheels in the work environment. If you&#8217;re having a conference call with a customer about requirements for a feature that you know Developer Dave in Sector 7-G is working on, invite him to sit in. By all means tell him to keep his mouth shut if necessary&#8230; sorry, but it&#8217;s true that most developers are terrible at talking with customers&#8230; but listening to the customer directly will help him understand the requirements better than getting the info second-hand. Without launching on another topic completely, it will also increase their personal investment and feeling of ownership in the feature&#8230; which increases morale and productivity&#8230; which further reduces risk.</p>
<h2>Summary</h2>
<p>The key thing to remember is that no matter what role you play in your company, you&#8217;re all part of the same team and trying to get to the same finish line. Unless you&#8217;ve been led to believe that you&#8217;re in an 80&#8242;s movie starring Patrick Dempsey or a guy named &#8220;Booger&#8221;, leave the high school politics and cliques to the cheerleaders and jocks.</p>
]]></content:encoded>
			<wfw:commentRss>http://brilliantsoftware.ca/blog/2010-12-14-cliques-are-for-high-school-not-your-business/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
