<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Skookum Blog</title>
	
	<link>http://skookum.com</link>
	<description>We're a web development firm jumping into product development and sharing everything we learn about design, development, and marketing as we go.</description>
	<lastBuildDate>Thu, 09 May 2013 20:24:43 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/skookum/blog" /><feedburner:info uri="skookum/blog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>35.227192</geo:lat><geo:long>-80.844193</geo:long><item>
		<title>SDW + Forrester Research on “The Foundation of Mobile Trust”</title>
		<link>http://feedproxy.google.com/~r/skookum/blog/~3/lhgvEv4RTds/</link>
		<comments>http://skookum.com/blog/sdw-forrester-research-on-the-foundation-of-mobile-trust/#comments</comments>
		<pubDate>Thu, 09 May 2013 13:27:32 +0000</pubDate>
		<dc:creator>Pat Morrell</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[business technology]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[mobile application technology]]></category>
		<category><![CDATA[mobile business technology]]></category>
		<category><![CDATA[mobile development]]></category>
		<category><![CDATA[mobile development authentication]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[technology innovation]]></category>

		<guid isPermaLink="false">http://skookum.com/?p=4057</guid>
		<description><![CDATA[Hunter Loftis, SDW Director of Technology, is really smart. Randy Heffner, VP and Principal Analyst at Forrester Research, is also really smart. Put them together &#8212; along with other mobile business technology innovators &#8212; and you get Randy&#8217;s latest research study: &#8220;Mobile Solution Architecture: User Authentication Is The Foundation Of Mobile Trust&#8221; Abbreviated synopsis: &#8220;&#8230; [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://skookum.com/hunter-loftis-speaker-info/">Hunter Loftis</a>, SDW Director of Technology, is really smart.</p>
<p><a href="http://www.forrester.com/Randy-Heffner">Randy Heffner</a>, VP and Principal Analyst at Forrester Research, is also really smart.</p>
<p>Put them together &#8212; along with other mobile business technology innovators &#8212; and you get Randy&#8217;s latest research study:</p>
<h3><a href="http://www.forrester.com/Randy-Heffner#/Mobile+Solution+Architecture+User+Authentication+Is+The+Foundation+Of+Mobile+Trust/quickscan/-/E-RES87321">&#8220;Mobile Solution Architecture: User Authentication Is The Foundation Of Mobile Trust&#8221;</a></h3>
<p style="padding-left: 30px;">Abbreviated synopsis: <em>&#8220;&#8230; This report analyzes how key business issues and user scenarios factor into four major mobile authentication design questions, identifies product categories that can play a role in your mobile authentication architecture, and recommends a five-step process for establishing that architecture.&#8221;</em></p>
<p><strong>Who should read this report?</strong>  Business leaders who want to ensure that the mobile apps they deliver to customers and employees are trustworthy and secure.  So&#8230; pretty much everybody.</p>
<p>Major props to Randy Heffner and his team for their awesome work.</p>
<p><a href="http://www.forrester.com/Mobile+Solution+Architecture+User+Authentication+Is+The+Foundation+Of+Mobile+Trust/fulltext/-/E-RES87321">You can download the report in its entirety here</a> (free for Forrester clients).  If you need more help, give us a shout at 704.930.7444 or drop us a line at <a href="mailto:start@skookum.com">start@skookum.com</a>.</p>
<img src="http://feeds.feedburner.com/~r/skookum/blog/~4/lhgvEv4RTds" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://skookum.com/blog/sdw-forrester-research-on-the-foundation-of-mobile-trust/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://skookum.com/blog/sdw-forrester-research-on-the-foundation-of-mobile-trust/</feedburner:origLink></item>
		<item>
		<title>SDW .NET Series Part 3: Hero</title>
		<link>http://feedproxy.google.com/~r/skookum/blog/~3/yAZ7Weuh8cU/</link>
		<comments>http://skookum.com/blog/sdw-net-series-part-3-hero/#comments</comments>
		<pubDate>Mon, 06 May 2013 14:16:46 +0000</pubDate>
		<dc:creator>Keith LaForce</dc:creator>
				<category><![CDATA[Code Samples]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[authorization]]></category>
		<category><![CDATA[Hero]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://skookum.com/?p=3841</guid>
		<description><![CDATA[How A Progressive Software Development Studio Uses .NET Our New .NET Open Source Library: Hero Here at Skookum Digital Works, we love open source software. There are many advantages to utilizing code that is built by a community of people, and we would feel remiss if we did not give back to the community we [...]]]></description>
				<content:encoded><![CDATA[<h2>How A Progressive Software Development Studio Uses .NET</h2>
<p><img class="alignnone size-full wp-image-3981" alt=".net software development" src="http://skookum.com/wp-content/uploads/2013/04/netcool.jpg" /></p>
<h1>Our New .NET Open Source Library: Hero</h1>
<p>Here at Skookum Digital Works, we love open source software. There are many advantages to utilizing code that is built by a community of people, and we would feel remiss if we did not give back to the community we love so much.</p>
<p>SDW is proud to introduce a new open source product for the .NET community to handle user authorization. It&#8217;s called <a href="https://github.com/Skookum/Hero">Hero</a>, because who doesn&#8217;t want a big strong man&#8230;I mean code library&#8230;to save them?</p>
<h2>Hero&#8217;s Purpose</h2>
<p>Hero is an <em>ability based authorization library</em> for .NET MVC and WepAPI projects. It was inspired by the Rails project <a href="https://github.com/ryanb/cancan">CanCan</a> and by <a href="http://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/">Derick Bailey</a>.  Hero can be installed via NuGet.</p>
<p><a href="http://skookum.com/wp-content/uploads/2013/05/HeroInstall.png"><img class="alignnone size-full wp-image-4025" alt="HeroInstall" src="http://skookum.com/wp-content/uploads/2013/05/HeroInstall.png" width="881" height="558" /></a></p>
<p><span id="more-3841"></span></p>
<p>Ability (or activity) based authorization provides a more flexible and maintainable approach to the traditional .NET authorization technique. Hero decouples the permissions and the code. By associating a role to a method or action in .NET (through typical Authorization attribute), you are creating a tight coupling between a role and an action. However, what happens when your role name changes? What if new roles are added into the system? Now you are required to update all code that references that role name or go through and add the new role. Instead, if you assign ability names to an action or method you abstract the functionality and the permissions can be done programmatically. This allows for a loose coupling between functionality and roles/users.</p>
<p>When the user and roles requirements change, you only need to update one section of code rather than going through your entire project looking for those tight couplings. Permissions are effectively encapsulated within a single, refactorable file similar to the ability.rb in CanCan.</p>
<p>Hero additionally supports Razor views to support hiding or disabling page sections based on a users&#8217; effective permissions.</p>
<p>Finally, Hero also includes a Javascript component to more easily support Single Page Applications (SPA). The client side version of Hero allows the injection of security authorization into javascript functions through AOP techniques.</p>
<h2>Server Side Example</h2>
<p>For a full example of how to take advantage of ability based authorization in your MVC or WebApi project, you can view the Sample project <a href="https://github.com/Skookum/Hero/tree/master/Hero.Sample">here</a>.</p>
<p>In the sample, we are creating a vanilla todo list application. The initialization and configuration of Hero should occur in one location, for instance, in the Global.asax file. This makes it easy to quickly review the abilities, roles, and their combinations all in one spot. We have setup Hero such that it will create a HeroConfig.cs that lives in your App_Start folder when you install the Nuget package. You just need to add the following line to your Global.asax file to perform initialization of Hero:</p>
<script src="https://gist.github.com/5439741.js"></script><noscript><p>View the code on <a href="https://gist.github.com/5439741">Gist</a>.</p></noscript>
<p>A user can perform basic CRUD operations on a list and it&#8217;s items. Registering abilities to users is extremely simple in Hero.  The following code will will create a Delete ability and associate it to a role (AdminRole):</p>
<script src="https://gist.github.com/5439748.js"></script><noscript><p>View the code on <a href="https://gist.github.com/5439748">Gist</a>.</p></noscript>
<p>Once you have created an ability and registered it with a role (or user), you can then begin using our custom authorization attributes in your code. The following code will require a user to have the Delete role to perform the Delete action in this controller.  If you are working in a WebApi project, the attribute name is AbilityWebApiAuthorization instead of AbilityMvcAuthorization:</p>
<script src="https://gist.github.com/5374142.js"></script><noscript><p>View the code on <a href="https://gist.github.com/5374142">Gist</a>.</p></noscript>
<p>That is all the code you need to perform authorization on the server.  For an example of how to utilize the client side version of Hero, see our example below.</p>
<h2>Razor View Helpers</h2>
<p>In addition to performing authorization checks through the Attribute helpers, if you need, you can also access Hero directly from your views.  You can do this with the follow code snippet:</p>
<script src="https://gist.github.com/5448571.js"></script><noscript><p>View the code on <a href="https://gist.github.com/5448571">Gist</a>.</p></noscript>
<h2>Single Page App Example</h2>
<p>Hero has a corresponding client side library to help control visibility of functionality on the client. This makes single page apps easier to work with and control visibility based on a users effective permissions. For example, in the ToDo applicatio,n we do not want users to see the Delete button if they do not have access to that ability. Through a simple module to encapsulate the buttons available in the system, this can be performed on the client:</p>
<script src="https://gist.github.com/5448600.js"></script><noscript><p>View the code on <a href="https://gist.github.com/5448600">Gist</a>.</p></noscript>
<p>The previous code works by injecting a security check into the showDeleteButton function of the TestModule.  If the current user does not have the ability to Delete, the function will not be allowed to run (and thus the button will never be shown).</p>
<h2>Conclusion</h2>
<p>The new open-source, .NET library Hero allows you to quickly and easily integrate an authorization system into your .NET project. At SDW, we have worked hard to create a modular system that is both easy to configure and easy to maintain long term. Based on our previous two articles on <a href="http://skookum.com/blog/sdw-net-series-continuous-integration-with-teamcity/">continuous integration through Team City</a> and <a href="http://skookum.com/?p=3835">code reuse through NuGet</a>, we have developed a module that we can both integrate into our future projects and release to the .NET community as well.</p>
<p>Happy programming.</p>
<img src="http://feeds.feedburner.com/~r/skookum/blog/~4/yAZ7Weuh8cU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://skookum.com/blog/sdw-net-series-part-3-hero/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://skookum.com/blog/sdw-net-series-part-3-hero/</feedburner:origLink></item>
		<item>
		<title>Aaron Draplin at SDW: May 16th</title>
		<link>http://feedproxy.google.com/~r/skookum/blog/~3/E2NQHHtqyzM/</link>
		<comments>http://skookum.com/blog/aaron-draplin-at-sdw-may-16th/#comments</comments>
		<pubDate>Fri, 03 May 2013 19:33:16 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Culture]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Tech Talks]]></category>

		<guid isPermaLink="false">http://skookum.com/?p=4028</guid>
		<description><![CDATA[Put This Event on &#8216;Yer Calendar Aaron Draplin *one night only* draplin.com Skookum Digital Works World Headquarters skookum.com May 16th, 2013, 6:30-9:00 PM 201 S. Tryon Floor 2 Charlotte, North Carolina 28202 $15 ($25 at door) supports CLT&#8217;s AIGA Chapter Space is limited! This event is open to the public. The Talk Aaron swears a [...]]]></description>
				<content:encoded><![CDATA[<h2>Put This Event on &#8216;Yer Calendar</h2>
<p><img src="http://skookum.com/wp-content/uploads/2013/05/aaron.jpg" alt="aaron" class="alignnone size-full wp-image-4029" /></p>
<p><strong>Aaron Draplin</strong><br />
*one night only*<br />
<a href="http://draplin.com">draplin.com</a></p>
<p><strong>Skookum Digital Works World Headquarters</strong><br />
<a href="http://skookum.com">skookum.com</a></p>
<p><strong>May 16th, 2013, 6:30-9:00 PM</strong><br />
201 S. Tryon Floor 2<br />
Charlotte, North Carolina 28202<br />
$15 ($25 at door) supports <a href="http://www.aigacharlotte.org/events/detail/991">CLT&#8217;s AIGA Chapter</a></p>
<p><em>Space is limited!</em><br />
This event is open to the public.</p>
<p><span id="more-4028"></span></p>
<h2>The Talk</h2>
<p>Aaron swears a lot. We like that about him. He also grows a mean beard and has lots to say about being creative and earning a living. <strong>Get Cosmic.</strong></p>
<p><iframe src="http://player.vimeo.com/video/1465284?byline=0&amp;portrait=0&amp;color=ff9933" width="700" height="394" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<h2>Why The SDW?</h2>
<p>We&#8217;re a software company. Aaron did our logo, which we&#8217;re quite proud of. It will be nice to meet him in person. </p>
<p><img src="http://skookum.com/wp-content/uploads/2013/05/SDW_DraplinLogo.png" alt="SDW_DraplinLogo" class="alignnone size-full wp-image-4036" /></p>
<p>Plus we&#8217;re selfish and wanted him to finally make an NC poster. </p>
<h2>Where Have I Seen Him Before?</h2>
<p>If not from that bear wrestling league in the Pacific Northwest, you probably have seen his work everywhere. <a href="http://fieldnotesbrand.com/">Field Notes</a> for one.</p>
<p><iframe src="http://player.vimeo.com/video/40182652?title=0&amp;byline=0&amp;portrait=0&amp;color=ffffff" width="700" height="394" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p>Also, here&#8217;s a great interview with Aaron at <a href="http://thegreatdiscontent.com/aaron-draplin">The Great Discontent</a>.</p>
<h2>The Event</h2>
<p><a href="http://www.aigacharlotte.org/events/detail/991">Get your tickets, now</a>. In addition to being a unique, evening (and Thursday) version of our Tech Talks, this even will be a <strong>preview of the new SDW World HQ</strong> at 201 S. Tryon in Uptown Charlotte. </p>
<p>We are moving buildings this summer, and though we won&#8217;t be in our final space, attendees will get a preview of what&#8217;s to come with our new offices. </p>
<p>Room to grow. Room to dream.</p>
<p>Come hang out. </p>
<img src="http://feeds.feedburner.com/~r/skookum/blog/~4/E2NQHHtqyzM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://skookum.com/blog/aaron-draplin-at-sdw-may-16th/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://skookum.com/blog/aaron-draplin-at-sdw-may-16th/</feedburner:origLink></item>
		<item>
		<title>SDW .NET Series Part 2: Code Reuse</title>
		<link>http://feedproxy.google.com/~r/skookum/blog/~3/t-KCoq9rgDw/</link>
		<comments>http://skookum.com/blog/sdw-net-series-part-2-code-reuse/#comments</comments>
		<pubDate>Fri, 03 May 2013 13:24:12 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[modules]]></category>
		<category><![CDATA[teamcity]]></category>

		<guid isPermaLink="false">http://skookum.com/?p=3835</guid>
		<description><![CDATA[How A Progressive Software Development Studio Uses .NET The following is part two of a three part series describing our .NET application development infrastructure at Skookum Digital Works. (Part One is here.) Application Development Code Reuse Code reuse is one of the most talked about things in development circles. Unfortunately, a lot of developers like [...]]]></description>
				<content:encoded><![CDATA[<h2>How A Progressive Software Development Studio Uses .NET</h2>
<p><img class="alignnone size-full wp-image-3981" alt=".net software development" src="http://skookum.com/wp-content/uploads/2013/04/netcool.jpg" /></p>
<p><em>The following is <strong>part two</strong> of a three part series describing our .NET application development infrastructure at Skookum Digital Works. (<a href="http://skookum.com/?p=3895">Part One is here.</a>)</em></p>
<h2>Application Development Code Reuse</h2>
<p>Code reuse is one of the most talked about things in development circles. Unfortunately, a lot of developers <em>like the idea of</em> code reuse and are great at using existing open source libraries, but most don&#8217;t actually write code that is reusable. The reasons are wide and varied, but some of the common explanations (excuses) for writing one-off code are:</p>
<ul>
<li>lack of knowledge</li>
<li>difficulty in planning out thoughtful programming</li>
<li>confidence to create clean, concise code</li>
<li>time to get <em>this project done</em> vs. saving time on the next projects</li>
</ul>
<p><span id="more-3835"></span></p>
<p>All of these reasons are legitimate, but with a little knowledge and some discipline, code reuse is easier than you think. Over the past ten years developers have built better tools to package and reuse code.</p>
<p>Here at Skookum Digital Works, our node.js devs build <a href="https://npmjs.org/">modules</a>, our Rubes build <a href="http://rubygems.org/">gems</a>, and our .NET devs build <a href="http://nuget.org/">NuGet</a> packages.</p>
<p>These tools combined with foresight allow all developers to build and reuse code.</p>
<p><strong>So how do the software programmers at Skookum Digital works use Github, TeamCity, NuGet, and Visual Studio to build our module platform?</strong> Let&#8217;s examine our process and highlight some lessons learned.</p>
<h2>Source Control</h2>
<p>SDW uses <a href="https://github.com/Skookum" target="_blank">Github</a> for our source control system. Github is based off the wonderful source control product git. Github provides a lot of interesting features that make developing code, especially open source code, a pleasure.</p>
<p>The process starts off with identifying code that is reusable. This is where the knowledge barrier typically comes into play. It can be difficult to know when code is going to be reusable. A lot of different blogs have entire sections devoted to identifying the properties of reusable code based on languages and frameworks. Some great examples are:</p>
<ul>
<li><a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod"><span style="line-height: 13px">Uncle Bob Principles of OO Design</span></a></li>
<li><a href="https://learn.thoughtbot.com/purchases/48ea018229b2db355c19f77c034c30c8">Ruby Science</a></li>
<li><a href="http://addyosmani.com/resources/essentialjsdesignpatterns/book/">Javascript Design Patterns</a></li>
</ul>
<p>Most modern languages though provide some concept of breaking code into reusable blocks. In .NET, we focus a lot on OO principles, SOLID principles, and—depending on the complexity—Domain Driven Design principles.</p>
<p>At SDW, each time we identify code that can be broken into a module, we create a new Github repository to store that code. This isn&#8217;t strictly necessary, but it just makes configuration easier.</p>
<h2>NuGet</h2>
<p>NuGet is .NETs package management system and <a href="https://nuget.org/" target="_blank">nuget.org</a> provides an open platform to share modules across development teams. You can upload modules to nuget.org if you want to share with the world, or you can setup your own enterprise nuget.org server very easily.</p>
<p>Here at SDWm we are currently running our own NuGet server based off <a href="http://skookum.com/blog/sdw-net-series-continuous-integration-with-teamcity/">TeamCity</a>. No special setup required—you setup TeamCity you automatically have access to a private NuGet server. We plan on releasing any open source modules on nuget.org, but we also have closed source modules for specific clients that we cannot release to everyone.</p>
<p>It is important to setup roles on TeamCity so that you keep these two worlds separate. Getting setup on nuget.org is really easy;just register an account and use the API key from within TeamCity.</p>
<h2>TeamCity</h2>
<p>We have seen <a href="http://skookum.cloudapp.net/" target="_blank">TeamCity</a> in <a href="http://skookum.com/blog/sdw-net-series-continuous-integration-with-teamcity/">part one</a> of our .NET series and the power that it provides. As mentioned, TeamCity also supports a NuGet server out of the box.</p>
<div class="wp-caption aligncenter" style="width: 636px"><a href="http://snag.gy/Pdubn.jpg"><img class=" " alt="" src="http://snag.gy/Pdubn.jpg" width="626" height="427" /></a><p class="wp-caption-text">TeamCity NuGet modules</p></div>
<p>We currently have our modules setup such that if TeamCity can build, run unit tests, and verify the modules have enough test coverage, they are automatically built into NuGet packages. These NuGet packages are then stored on a internal NuGet server. We additionally have TeamCity setup such that when it builds the NuGet packages it does so using <a href="http://semver.org/">Semantic Versioning</a>. It is very important to version your modules and to follow specific guidelins so that other developers know when breaking changes, etc. are coming.</p>
<p>In Visual Studio, we just point to that NuGet server—and voila—we now have a system to maintain and update code modules. This makes it super easy to break out code and share it with other developers (and other projects as well). This is especially important to us as a custom development shop so that we do not rewrite the same code over and over again.</p>
<p>(In part three of our series you will read about a security module that we have built and successfully integrated into multiple projects.)</p>
<h2>Visual Studio</h2>
<p><a href="http://snag.gy/83kng.jpg"><img class="alignright" alt="" src="http://snag.gy/83kng.jpg" width="385" height="255" /></a><br />
We use Visual Studio 2012 as our development environment. It has excellent NuGet integration now.</p>
<p>It&#8217;s simply a matter of right-clicking a solution, viewing the packages, and then choosing to update a particular module as necessary.</p>
<h2>Conclusion</h2>
<p>Here at Skookum Digital Works, we have developed a system to encourage our .NET developers to think and build modules. Now when we recognize a module, we can quickly set it up for resuse in other projects (this takes about one hour to do the full setup).</p>
<p>We have made the code reuse process as automated as possible to ensure we are focusing on solving business technology problems and NOT focused on code infrastructure and deployment.</p>
<p>We look forward to continuing to leveraging this system and beginning to open source more of our .NET modules.</p>
<p>Next up, in part three, <a href="https://twitter.com/keithlaforce">Keith</a> is going to discuss the first .NET open source module we are releasing.</p>
<img src="http://feeds.feedburner.com/~r/skookum/blog/~4/t-KCoq9rgDw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://skookum.com/blog/sdw-net-series-part-2-code-reuse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://skookum.com/blog/sdw-net-series-part-2-code-reuse/</feedburner:origLink></item>
		<item>
		<title>SDW .NET Series Part 1: Continuous Integration with TeamCity</title>
		<link>http://feedproxy.google.com/~r/skookum/blog/~3/SYNTAjjAqHU/</link>
		<comments>http://skookum.com/blog/sdw-net-series-continuous-integration-with-teamcity/#comments</comments>
		<pubDate>Tue, 30 Apr 2013 13:12:01 +0000</pubDate>
		<dc:creator>Patrick Faulkner</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://skookum.com/?p=3895</guid>
		<description><![CDATA[How A Progressive Software Development Studio Uses .NET .NET kinda/sorta gets a bad wrap in the open source development world. That&#8217;s unfortunate because most estimates show two-thirds or more of Fortune 5000 businesses use .NET for some part of their infrastructure. SDW prides itself on mixing the open source with the enterprise. It&#8217;s advantageous for [...]]]></description>
				<content:encoded><![CDATA[<h2>How A Progressive Software Development Studio Uses .NET</h2>
<p><img src="http://skookum.com/wp-content/uploads/2013/04/netcool.jpg" alt=".net software development" class="alignnone size-full wp-image-3981" /></p>
<p><em><a href="http://www.microsoft.com/net/">.NET</a> kinda/sorta gets a bad wrap in the open source development world. That&#8217;s unfortunate because most estimates show two-thirds or more of Fortune 5000 businesses use .NET for some part of their infrastructure.</em></p>
<p><em>SDW prides itself on mixing the open source with the enterprise. It&#8217;s advantageous for progressive, open source, and experimental software builders to have the knowledge necessary to sew organizational change from the inside out. </em></p>
<p><em>To do that, we have to be able to meet a lot of clients where there at. And for large companies, that means we not only need to be HTML5, CSS, JavaScript, node.js, Ruby, Python, PHP, and iOS experts  but also .NET as well (among other languages).</em></p>
<p><em>The following is <strong>part one</strong> of a three part series describing our .NET application development infrastructure at Skookum Digital Works. We have an <a href="http://skookum.com/blog/sdw-quick-tech-software-engineer-eric-laforce-on-net/">amazing team of .NET developers</a> who also know how to slang up-and-coming open source code, so we wanted to specifically share our .NET workflow and the types of projects which benefit or require .NET</em></p>
<p><span id="more-3895"></span></p>
<h2>.NET &#038; TeamCity</h2>
<p><img src="http://skookum.com/wp-content/uploads/2013/04/Screen-Shot-2013-04-29-at-3.35.49-PM-300x76.png" alt="teamcity" width="150" height="38" class="alignright size-medium wp-image-3978" />In some of our recent .NET projects here at SDW we&#8217;ve been taking advantage of <a href="http://www.jetbrains.com/teamcity/">TeamCity</a>.  For those of you who don’t know, TeamCity provides us with a continuous integration platform. What the heck is a continuous integration platform? I&#8217;ll give you the deets and explain why it makes our lives easier.</p>
<h2>Continuous Builds</h2>
<p>The TeamCity platform monitors <a href="https://github.com/organizations/Skookum">SDW’s Git repositories</a> for new code commits.  Once something new is committed, TeamCity retrieves the latest code and attempts to perform a build.  The build runs locally on the<a href="http://skookum.cloudapp.net/"> TeamCity server</a> using a local install of the .NET framework (We are using .NET, but TeamCity can be used for some other platforms also). You can setup multiple build machines and Windows, Linux, and OSX all work as build agents. </p>
<p>The benefit of continuous integration is that within minutes of someone checking in some new code, you immediately know if you have a build-able code-base.  This is awesome, because it keeps developers in the know about what commit caused the build failure and who committed that code. This way developers can quickly get a failing build back on track, without having to spend time going through source control commits finding the broken code.</p>
<p><b id="docs-internal-guid-34a0a0bd-36c6-f365-1d56-3a16d283ecd5"><img alt="" src="https://lh6.googleusercontent.com/8gbknMMKtxKqRfQQ3APo8sEYCsxl6b4p-xOcRpjc2Oc9Ci_-aGSqiT_56CZY0EyJRB5_OxEoePJGqHmxWppwNKAM9ZiuaxOu29m2u_FrTwo-Ojw_L0OKMTcPLg" width="637px;" height="233px;" /></b></p>
<h2>Unit-Tests</h2>
<p>Continuous builds are great and all, but what if a developer commits some code that compiles just fine. Then that code changes some functionality that breaks logic the overall application is depending on? That’s where unit tests come in to save the day. In our .NET projects we implement unit tests that verify our application functionality, and with our handy dandy TeamCity installation we can verify that with every code commit. Like continuous builds that happen on each commit, TeamCity will also run the unit tests for the project on every code commit and provide great information about why a failure is happening.</p>
<p>Now, if a developer changes some functionally that is core to the application but forgets to run the unit tests on their machine, TeamCity will let us know if a unit test isn&#8217;t passing. Also if you want to see how much of your application is covered by your unit tests, you can add some code coverage statistics (through <a href="http://www.jetbrains.com/dotcover/">JetBrains dotCover</a>). This can be done for free by just leveraging the built in TeamCity version of dotCover without having to separately purchase a code coverage tool.</p>
<h2>Continuous Deployment</h2>
<p>So now we have a buildable code base, and we know stuff is stable because all our unit tests have passed. Who’s going to deploy the thing? TeamCity of course. TeamCity can be setup to deploy to a number of environments using various deployment scripts.</p>
<p>Our setup uses a PowerShell script to deploy our Development and QA git branches to our Windows Azure servers. With this power, we always have the latest stable code in an environment that is ready for testing. Also, developers don’t have to worry about taking the time to push code to the test environments to keep them up to date. If you&#8217;re interested to see how this deployment works, we got our guidance from a <a href="http://weblogs.asp.net/srkirkland/archive/2012/09/11/ci-deployment-of-azure-web-roles-using-teamcity.aspx">blog post</a> on Scott’s Blog.</p>
<p>In addition to deploying applications, TeamCity support publishing NuGet packages directly. More on this in part 2 of our .NET series.</p>
<h2>Code Quality and Consistency</h2>
<p>Finally TeamCity additionally supports FxCop and Resharper inspections out of the box. Now your team can work with the default best practices and whatever naming conventions you wish to support. You can setup the build to fail or just warn that the current code is not meeting your team’s coding standards.</p>
<h2>Notifications</h2>
<p>While it’s fun checking out the overview page TeamCity provides in its install, but who wants to keep that thing open all the time to go check for build failures? That’s where setting up TeamCity to send emails to certain users on build failures comes in handy.</p>
<p>There are a number of settings you can subscribe to, but I think the sweet spot is getting emails on the first failure and then the first success after that. This way you are not getting spammed with all kinds build success (or failure) emails, and you’ll always be in the know on whether or not the code base is in a good state.</p>
<p><b id="docs-internal-guid-34a0a0bd-36c7-3a15-14d1-36dfad859cb1"><img alt="" src="https://lh4.googleusercontent.com/p6YERtOd7tCf0vW_RKtdH3Hifkfkl6F6xhQgbxxQgKAl9p2sEQPC-RFoTuiKdemMrd-qfZLrd1G-M5LnW4mXphd0ZYqtx5C_M28ZgMrcq3W1b7Bo9vRbNAD7tw" width="661px;" height="159px;" /></b></p>
<h2>Conclusion</h2>
<p>Continuous Integration has great benefits that can help developers be confident about the status of their code base. It also provides software developers significant time savings while building, testing, and deploying new features.</p>
<img src="http://feeds.feedburner.com/~r/skookum/blog/~4/SYNTAjjAqHU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://skookum.com/blog/sdw-net-series-continuous-integration-with-teamcity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://skookum.com/blog/sdw-net-series-continuous-integration-with-teamcity/</feedburner:origLink></item>
		<item>
		<title>SDW Tech Talks: Data Visualization with Douglas Welton</title>
		<link>http://feedproxy.google.com/~r/skookum/blog/~3/yZ56buN9JKY/</link>
		<comments>http://skookum.com/blog/sdw-tech-talks-data-visualization-with-douglas-welton/#comments</comments>
		<pubDate>Mon, 29 Apr 2013 18:27:24 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Tech Talks]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://skookum.com/?p=3965</guid>
		<description><![CDATA[Video Tech Talks &#8220;You don&#8217;t make choices on data. You make choices on information.&#8221; In this SDW Free Friday Tech Talk, Douglas Welton, MAC OS developer (yes, a Unix programmer in the flesh!) and SDW Tech Talk regular, took us through myriad questions related to visualizing data over time. This presentation explored the design, creation [...]]]></description>
				<content:encoded><![CDATA[<h2>Video Tech Talks</h2>
<p><iframe width="853" height="480" src="http://www.youtube.com/embed/Wr8Jk_CK7P8?rel=0" frameborder="0" allowfullscreen></iframe></p>
<blockquote><p>&#8220;You don&#8217;t make choices on data. You make choices on information.&#8221;</p></blockquote>
<p>In this <a href="http://techtalk.skookum.com/events/109843192/">SDW Free Friday Tech Talk</a>, Douglas Welton, MAC OS developer (yes, a Unix programmer in the flesh!) and SDW Tech Talk regular, took us through myriad questions related to visualizing data over time.</p>
<p>This presentation explored the design, creation and use of Data Visualization in our current cultural environment. Douglas also discussed why people want to visualize data in the first place and broke down the value that can be derived from different types of visualizations.</p>
<p>In addition, we also learned about some of the programming and statistical tools that are available to anyone interested in creating interactive data viz.</p>
<p>Great talk!</p>
<h2>More Douglas Welton</h2>
<p><a href="http://www.einsteinslegacy.com">http://www.einsteinslegacy.com/</a></p>
<p>Twitter<br />
<a href="http://twitter.com/einsteinslegacy">@einsteinslegacy</a></p>
<img src="http://feeds.feedburner.com/~r/skookum/blog/~4/yZ56buN9JKY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://skookum.com/blog/sdw-tech-talks-data-visualization-with-douglas-welton/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://skookum.com/blog/sdw-tech-talks-data-visualization-with-douglas-welton/</feedburner:origLink></item>
		<item>
		<title>SDW’s Best-Fit Clients Have Different Titles but Similar Perspectives</title>
		<link>http://feedproxy.google.com/~r/skookum/blog/~3/Z-7-B7mUAKQ/</link>
		<comments>http://skookum.com/blog/sdws-best-fit-clients-have-different-titles-but-similar-perspectives/#comments</comments>
		<pubDate>Thu, 25 Apr 2013 15:20:20 +0000</pubDate>
		<dc:creator>Pat Morrell</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Culture]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[business technology]]></category>
		<category><![CDATA[custom software development]]></category>
		<category><![CDATA[web applications development]]></category>

		<guid isPermaLink="false">http://skookum.com/?p=3908</guid>
		<description><![CDATA[Here&#8217;s a question we often hear: “Who are your best-fit clients?&#8221; The answer is simple: “Anyone who has overseen a successful custom software project&#8230; or &#8230;an unsuccessful off-the-shelf integration.” The Ideal Client Profile We engage with personalities and innovative mindsets across all industries, job titles, departments or functions.  And that&#8217;s a good thing. Just as [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://skookum.com"><img class="size-full wp-image-3954" alt="skookum digital works" src="http://skookum.com/wp-content/uploads/2013/04/Office_ChadCorey_web.jpg" /></a></p>
<h2>Here&#8217;s a question we often hear:</h2>
<p>“Who are your best-fit clients?&#8221;</p>
<h2>The answer is simple:</h2>
<p>“Anyone who has overseen a successful custom software project&#8230;</p>
<p><span style="text-decoration: underline;"><em>or</em></span></p>
<p>&#8230;an unsuccessful off-the-shelf integration.”</p>
<p><span id="more-3908"></span></p>
<h2>The Ideal Client Profile</h2>
<p>We engage with personalities and innovative mindsets across all industries, job titles, departments or functions.  And that&#8217;s a good thing.</p>
<p>Just as our projects span the technology spectrum, we’re interested in a narrative-based client qualifier because it&#8217;s far more indicative of the client&#8217;s potential to be philosophically aligned with how we build custom software.</p>
<p><em><strong>Title is irrelevant. Perspective is paramount.</strong></em></p>
<h2>Past Experience</h2>
<p>Great-fit clients often experience one of two software development outcomes before working with us:</p>
<p><b>1)  Terrible, awful, no-good, &#8220;why did I buy something off-the-shelf?&#8221; outcome.</b></p>
<ul>
<li>Their offshore partner wouldn&#8217;t return calls.</li>
<li>Project went WAY over-time and over-budget.</li>
<li>Nobody wanted to use the software once built.</li>
<li>IT gave them hell over security issues; or if they’re IT, someone else is gave them hell over usability issues.</li>
<li>Every InformationWeek/Inc/WSJ article on technology innovation still makes them feel like a putz.</li>
<li>They failed, and are extremely worried to go down the pre-packed software route again.</li>
</ul>
<p><b>2)  Awesome, revenue-generating, time-saving, boss-thinks-I’m-smart, custom software outcome.</b></p>
<ul>
<li>They built a technology application that actually solves a unique business problem.</li>
<li>They worked with a business technology partner who employs innovation professionals to guide the project.</li>
<li>They incrementally reviewed app features during the Agile development process in order to stay on schedule.</li>
<li>They were under budget because unnecessary features were trimmed during preliminary user-testing.</li>
<li>IT (and/or marketing) is patting them on the back.</li>
<li>Every InformationWeek/Inc/WSJ article on  technology innovation validates their decisions.</li>
<li>They won and can&#8217;t wait to move on to the next project.</li>
</ul>
<p><img class="alignright  wp-image-3923" style="margin: 3px;" alt="client" src="http://skookum.com/wp-content/uploads/2013/04/Screen-Shot-2013-04-23-at-10.59.23-AM-219x300.png" width="219" height="300" />In either case, our ideal client has learned lessons that now enable them to make efficient decisions, set clear priorities, and avoid time-killing mistakes.  They know what it takes to build complex, user focused, custom business software.</p>
<h2>Business Technology Project Success Tips</h2>
<p>In our humble opinion, ideal clients do the following:</p>
<ul>
<li>Engage with the partner&#8217;s team and empower them to think creatively;<strong> they trust the innovation expertise and proven process.</strong></li>
<li>Never say <em>“Show me how you’ve done this before.&#8221;  </em>They know that they&#8217;ve hired a crew to build something that’s never been attempted before; <strong>there is no apples-to-apples comparison for disruptive innovation.</strong></li>
<li>Understand that<strong> they&#8217;re purchasing a process, not a defined and static deliverable.  </strong>Custom software ALWAYS evolves through development and keeps evolving based on marketplace feedback and usage data.</li>
<li>Seek out business technology innovation <strong>partners, not IT vendors.</strong></li>
</ul>
<p>Vendor is a dirty word. You need a partner.</p>
<p>Building custom business software is really, really hard but really, really worthwhile.</p>
<p>When clients understand that technology evolution is a journey and then hire us to transform their processes and culture, there&#8217;s no limit to where we can take their business.</p>
<img src="http://feeds.feedburner.com/~r/skookum/blog/~4/Z-7-B7mUAKQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://skookum.com/blog/sdws-best-fit-clients-have-different-titles-but-similar-perspectives/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://skookum.com/blog/sdws-best-fit-clients-have-different-titles-but-similar-perspectives/</feedburner:origLink></item>
		<item>
		<title>SDW Tech Talks: Startup Failure with OtherScreen CEO Chris Halligan</title>
		<link>http://feedproxy.google.com/~r/skookum/blog/~3/m97JBJe3CZU/</link>
		<comments>http://skookum.com/blog/sdw-tech-talks-startup-failure-with-otherscreen-ceo-chris-halligan/#comments</comments>
		<pubDate>Wed, 17 Apr 2013 17:42:11 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Tech Talks]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://skookum.com/?p=3887</guid>
		<description><![CDATA[Video Tech Talks In this SDW Free Friday Tech Talk, Chris Halligan, founder of the failed &#8220;companion TV content&#8221; startup OtherScreen, candidly walked us through what OtherScreen got wrong, how &#8220;the market fired them,&#8221; and the lessons learned from being another technology startup relegated to the dustbin of history. OtherScreen decided to shut down after [...]]]></description>
				<content:encoded><![CDATA[<h2>Video Tech Talks</h2>
<p><iframe width="853" height="480" src="http://www.youtube.com/embed/YmBSJy1mseo?rel=0" frameborder="0" allowfullscreen></iframe></p>
<p>In this <a href="http://techtalk.skookum.com/events/102546492/">SDW Free Friday Tech Talk</a>, Chris Halligan, founder of the failed &#8220;companion TV content&#8221; startup OtherScreen, candidly walked us through what OtherScreen got wrong, how &#8220;the market fired them,&#8221; and the lessons learned from being another technology startup relegated to the dustbin of history.</p>
<p>OtherScreen decided to shut down after several rounds of prototyping, beta testing, and early funding.</p>
<p>Chris was very forthcoming and candid in his assessment of his own startup&#8217;s failure. </p>
<p>This talk is funny.</p>
<h2>Chris Halligan&#8217;s Links</h2>
<p>OtherScreen:<br />
<a href="http://otherscreen.com">http://otherscreen.com</a></p>
<p>Twitter:<br />
<a href="https://twitter.com/chrishalligan">@chrishalligan</a></p>
<img src="http://feeds.feedburner.com/~r/skookum/blog/~4/m97JBJe3CZU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://skookum.com/blog/sdw-tech-talks-startup-failure-with-otherscreen-ceo-chris-halligan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://skookum.com/blog/sdw-tech-talks-startup-failure-with-otherscreen-ceo-chris-halligan/</feedburner:origLink></item>
		<item>
		<title>The Cost of $()</title>
		<link>http://feedproxy.google.com/~r/skookum/blog/~3/XXHFt4wVhFE/</link>
		<comments>http://skookum.com/blog/the-cost-of/#comments</comments>
		<pubDate>Thu, 04 Apr 2013 08:54:13 +0000</pubDate>
		<dc:creator>dustan</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://skookum.com/?p=3693</guid>
		<description><![CDATA[Don&#8217;t be DOM with your DOM Every developer who knows jQuery has written code like that looks like the following. Browsers are sophisticated creatures, and here we have tried valiantly to slow them down. Let&#8217;s examine what we have just asked them to do and how we can work with our friends, the Browsers, instead [...]]]></description>
				<content:encoded><![CDATA[<h2>Don&#8217;t be DOM with your DOM</h2>
<p>Every developer who knows jQuery has written code like that looks like the following.</p>
<script src="https://gist.github.com/b15d32c6780ef3170a1b.js"></script><noscript><p>View the code on <a href="https://gist.github.com/b15d32c6780ef3170a1b">Gist</a>.</p></noscript>
<p><span id="more-3693"></span></p>
<p>Browsers are sophisticated creatures, and here we have tried valiantly to slow them down. Let&rsquo;s examine what we have just asked them to do and how we can work with our friends, the Browsers, instead of against them.</p>
<h2>Problem No. 1: DOM Querying.</h2>
<p>The example code sets the expectation that you are handing jQuery a reference to a DOM node already. If this were true you could avoid the overhead of the selector engine (in the case of jQuery, this would be Sizzle) resolving your selector.</p>
<p>However, this code would be equally valid passing in a selector like <code>'#main #tableview .data-table:nth-child(2)'</code>. This would mean that each call to jQuery would need to perform that entire lookup again.</p>
<p>This is why caching your selectors is so valuable. The expense of selector matching would go from a minimum of three calls per scroll event in the above example to one.</p>
<h2>Problem No. 2: Unnecessary Object Creation.</h2>
<p>Everytime you call <code>jQuery(element)</code>, you are creating a new jQuery object. In many traditional websites, this overhead would hardly be noticable. It&rsquo;s very likely that no one will ever notice your lack of stewardship over memory management.</p>
<p>However, in a single page webapp, game, or other high performance scenario, these memory issues will compound. As noted in the solution to DOM Querying, you&rsquo;ve also just reduced the number of objects floating in memory from three or more per scroll event to one. Total.</p>
<p>The garbage collector thanks you one thousand thanks.</p>
<h2>Problem No. 3: Reflow. Repaint.</h2>
<p>Reflow and repaint are browser operations that handle calculating layout and drawing. The depth of this topic is far beyond the scope this article, so I highly recommend <a href="http://www.html5rocks.com/en/tutorials/internals/howbrowserswork/">&ldquo;How Browsers Work&rdquo;</a> by <a href="http://taligarsiel.com/">Tali Garsiel</a> on <a href="http://www.html5rocks.com/">html5rocks</a>. Also, Paul Irish has an <a href="http://updates.html5rocks.com/2012/04/Round-up-of-Web-Browser-Internals-Resources">amazing roundup of resources </a>.</p>
<p>But what does repaint and reflow have to do with grabbing some elements and listening for some scroll event?</p>
<p>You have the power to trigger or not to trigger these events. There are a number of attributes that simply getting them will cause the browser to reflow. Tony Gentilcore has been even kind enough to <a href="http://gent.ilcore.com/2011/03/how-not-to-trigger-layout-in-webkit.html">provide a list concerning webkit</a>. <code>offsetWidth/offsetHeight</code>, though, are two that will trigger reflow everytime. There is a reason jQuery neatly packages them both up nicely for us when we call <code>.offset()</code>.</p>
<p>We triggered reflow not once, but twice, when we only needed to do so once. The browser does not like us very much right now.</p>
<p>By batching all of your reflow methods together, and then drawing later, we can greatly improve the performance of our webapps.</p>
<h2>Wrapping up</h2>
<p>None of these issues are enough to break the horse&#8217;s back by their lonesome. Though, compounding these issues with the experience you are trying to build can quickly add up. (Who remembers the Twitter scrolling performance woes of yesteryear?)</p>
<p>I hope that by knowing a little bit more about what work you are asking the browsers powering your work to do, you are better equipped to make informed decisions.</p>
<img src="http://feeds.feedburner.com/~r/skookum/blog/~4/XXHFt4wVhFE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://skookum.com/blog/the-cost-of/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://skookum.com/blog/the-cost-of/</feedburner:origLink></item>
		<item>
		<title>SDW Tech Talks: GIS Programming &amp; Open Government Data</title>
		<link>http://feedproxy.google.com/~r/skookum/blog/~3/yYlBdLiUn48/</link>
		<comments>http://skookum.com/blog/sdw-tech-talks-gis-programming-open-government-data/#comments</comments>
		<pubDate>Tue, 02 Apr 2013 08:58:52 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Tech Talks]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://skookum.com/?p=3827</guid>
		<description><![CDATA[Video Tech Talks In this SDW Free Friday Tech Talk, Mecklenburg County (which is more or less made up by Charlotte, North Carolina) GIS Programmer Tobin Bradley talked to us about lots of fun stuff. Tobin is the creator of the the Strategic Planning and Support division&#8217;s open-source mapping tool, The Quality of Life Dashboard, [...]]]></description>
				<content:encoded><![CDATA[<h2>Video Tech Talks</h2>
<p><iframe width="853" height="480" src="http://www.youtube.com/embed/C4B1kkvpZdA?rel=0" frameborder="0" allowfullscreen></iframe></p>
<p>In this <a href="http://techtalk.skookum.com/events/100993952/">SDW Free Friday Tech Talk</a>, Mecklenburg County (which is more or less made up by Charlotte, North Carolina) GIS Programmer <a href="http://fuzzytolerance.info">Tobin Bradley</a> talked to us about lots of fun stuff.</p>
<p>Tobin is the creator of the the Strategic Planning and Support division&#8217;s open-source mapping tool, <a href="http://maps.co.mecklenburg.nc.us/qoldashboard">The Quality of Life Dashboard</a>, a responsive, interactive map that uses HTML5, jQuery, Leaflet, and Google Charts.</p>
<p>The <a href="http://techtalk.skookum.com/">largest technology meetup group in Charlotte, NC</a> got to hear about life inside a government GIS department, Tobin&#8217;s thoughts on open data, and current trends and tools for web mapping and where things are headed in the future. </p>
<h2>Mecklenburg County GIS Programmer Tobin Bradley&#8217;s Links</h2>
<p>Quality of Life Dashboard:<br />
<a href="http://maps.co.mecklenburg.nc.us/qoldashboard">http://maps.co.mecklenburg.nc.us/qoldashboard</a></p>
<p>Tobin on Github:<br />
<a href="https://github.com/tobinbradley">https://github.com/tobinbradley</a></p>
<p>Tobin&#8217;s Blog<br />
<a href="http://fuzzytolerance.info">http://fuzzytolerance.info</a></p>
<p>Twitter<br />
<a href="http://twitter.com/meckgis">@meckgis</a><br />
<a href="http://twitter.com/fuzzytolerance">@fuzzytolerance</a></p>
<img src="http://feeds.feedburner.com/~r/skookum/blog/~4/yYlBdLiUn48" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://skookum.com/blog/sdw-tech-talks-gis-programming-open-government-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://skookum.com/blog/sdw-tech-talks-gis-programming-open-government-data/</feedburner:origLink></item>
	</channel>
</rss>
