<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>An Innovatory Life</title>
	<atom:link href="http://innovatorylife.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://innovatorylife.com</link>
	<description></description>
	<lastBuildDate>Sat, 11 May 2013 00:10:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='innovatorylife.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>An Innovatory Life</title>
		<link>http://innovatorylife.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://innovatorylife.com/osd.xml" title="An Innovatory Life" />
	<atom:link rel='hub' href='http://innovatorylife.com/?pushpress=hub'/>
		<item>
		<title>What would you do with a blank canvas?</title>
		<link>http://innovatorylife.com/2013/03/04/what-would-you-do-with-a-blank-canvas/</link>
		<comments>http://innovatorylife.com/2013/03/04/what-would-you-do-with-a-blank-canvas/#comments</comments>
		<pubDate>Mon, 04 Mar 2013 02:10:50 +0000</pubDate>
		<dc:creator>Kianosh Pourian</dc:creator>
				<category><![CDATA[Backbone]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[MV*]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[NodeJS]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Front End Dev]]></category>
		<category><![CDATA[server side javascript]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://innovatorylife.com/?p=485</guid>
		<description><![CDATA[An artist starts with a blank canvas, a writer stares at one endlessly. As a developer, there are rare occasions when we are given a blank canvas, a beginning where no decisions have been made, no frameworks have been set and there are endless opportunities and decisions. For some, this may seem like a daunting [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=485&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>An artist starts with a blank canvas, a writer stares at one endlessly. As a developer, there are rare occasions when we are given a blank canvas, a beginning where no decisions have been made, no frameworks have been set and there are endless opportunities and decisions. For some, this may seem like a daunting experience, for me it is an utopian situation.</p>
<p>Most of the times when I start a project, the framework has been previously set and my job has been to inject some best practices where opportunity allows. On personal projects, I do get the opportunity to build from scratch, usually it is to satisfy my curiosity in a certain technology so I haven&#8217;t had the liberty (or the forethought) to include all the tools.</p>
<p>However, in recent projects where I have been able to include all the tools available to me and as a result have done most of my projects as such.</p>
<p>So what would you do with such a blank canvas? What tools and frameworks would you use? As a front end developer, this is my list (this list is an approach that considers enterprise development):</p>
<h3><b>NodeJS (as a Web server)</b></h3>
<p>Why use NodeJS and not Apache Tomcat? If you are not familiar with NodeJS, this is a quick description (from their home page):</p>
<blockquote><p>Node.js is a platform built on Chrome&#8217;s JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.</p></blockquote>
<p>Back to question of &#8220;Why NodeJS?&#8221;. The answer is why not. As a developer whose choice of language is JavaScript, this is ideal where as a developer I can modify the web server and can manage the session, cache, memory, etc… This is on top the evented server side JavaScript which is very light weight and has a good handling on lots of I/O by making the majority of I/O calls asynchronous.</p>
<p><b>Reference:</b></p>
<ul>
<li><a href="http://nodejs.org/">http://nodejs.org/</a></li>
</ul>
<h3><b>NodeJS (as a package manager)</b></h3>
<p>If you chose not to use NodeJS as a web server, it is still a great tool to install on your machine. Installing NodeJS will give you access to Node Packaged Modules (npm) which opens the door to a wealth of packaged modules that can easily be installed on a local machine, enabling the developer to start developing quickly. The other advantage of npm is also that it will allow developers to package up their modules easily to be shared with other developer. As you will see, most of the tools that I am using can be installed through npm.</p>
<p><b>Reference:</b></p>
<ul>
<li><a href="https://npmjs.org/">https://npmjs.org/</a></li>
</ul>
<h3><b>GruntJS</b></h3>
<p>GruntJS is a tack runner which will allow for automation on tasks that as developer we run (or should be running) repeatedly. Tasks like minification, compilation, unit testing, and linting are examples of tasks that can be run every time the developer makes a change. GruntJS is very easy to install and has a large community of developers creating plugins for it.</p>
<p><b>Reference:</b></p>
<ul>
<li><a href="http://gruntjs.com/">http://gruntjs.com/</a></li>
</ul>
<h3><b>Jasmine</b></h3>
<p>I have been a huge fan of Test Driven Development or Behavior Driven Development. This style of development has several advantages:</p>
<ol>
<li>Capturing the requirements in human readable form</li>
<li>Unit test is built from the beginning</li>
<li>Test output can be treated as a report</li>
<li>Failures are captured early and often</li>
</ol>
<p>In order to develop in this approach, Jasmine has been one of the tools that I have used. There are other tools like QUnit and Cucumber (I am exploring Cucumber further and may blog about my experience in the near future). Nevertheless, this approach allows me to think of every requirement in the following manner:</p>
<p style="text-align:center;"><b>Given</b> a context</p>
<p style="text-align:center;"><b>When</b> an event happens</p>
<p style="text-align:center;"><b>Then</b> an outcome should occur</p>
<p> <b>Reference:</b></p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Behavior-driven_development">http://en.wikipedia.org/wiki/Behavior-driven_development</a></li>
<li><a href="http://pivotal.github.com/jasmine/">http://pivotal.github.com/jasmine/</a></li>
</ul>
<h3><b>Asynchronous Module Definition (AMD)</b></h3>
<p>Asynchronous Module Definition allows for an approach where the developer thinks of their code as a modular functional area which can be used repeatedly in different areas if needed. Addy Osmani describes this best:</p>
<blockquote><p>The AMD module format itself is a proposal for defining modules where both the module and dependencies can be asynchronously loaded. It has a number of distinct advantages including being both asynchronous and highly flexible by nature which removes the tight coupling one might commonly find between code and module identity. Many developers enjoy using it and one could consider it a reliable stepping stone towards the module system proposed for ES Harmony.</p></blockquote>
<p>This approach coupled with a powerful script loader like RequireJS can help in building a highly modular systems or web applications.</p>
<p><b>Reference:</b></p>
<ul>
<li><a href="http://addyosmani.com/writing-modular-js/">http://addyosmani.com/writing-modular-js/</a></li>
<li><a href="http://requirejs.org/">http://requirejs.org/</a></li>
</ul>
<h3><b>MV* Framework</b></h3>
<p>MV* frameworks have several advantages like defined framework and pattern but one of the best advantages, in my humble opinion, is organization. These frameworks allow us to tame the beast that is spaghetti code. For the purposes of enterprise development, there are several options out there. I have had personal experience with a few but a list of top 4 frameworks (once again in my humble opinion), would be something like this:</p>
<ul>
<li>BackboneJS (for large applications, one should consider backbone layout manager)</li>
<li>KnockoutJS</li>
<li>AngularJS</li>
<li>EmberJS</li>
</ul>
<p>With these frameworks, a selection of a templating tool is necessary. With BackboneJS and its hard dependency on underscoreJS, Underscore&#8217;s templating can be used. For more advanced templating, HandleBar and Mustache should be considered.</p>
<p><b>Reference:</b></p>
<ul>
<li><a href="http://backbonejs.org/">http://backbonejs.org/</a></li>
<li><a href="http://documentup.com/tbranyen/backbone.layoutmanager/">http://documentup.com/tbranyen/backbone.layoutmanager/</a></li>
<li><a href="http://knockoutjs.com/">http://knockoutjs.com/</a></li>
<li><a href="http://angularjs.org/">http://angularjs.org/</a></li>
<li><a href="http://emberjs.com/">http://emberjs.com/</a></li>
<li><a href="http://underscorejs.org/">http://underscorejs.org/</a></li>
<li><a href="http://handlebarsjs.com/">http://handlebarsjs.com/</a></li>
<li><a href="http://mustache.github.com/">http://mustache.github.com/</a></li>
</ul>
<h3><b>Pre-processors</b></h3>
<p>There are several pre-processors available for different aspects of front end development.</p>
<h4><b>CSS</b></h4>
<p>For this aspect, on the top of the list are two main pre-processors, LESS and Sass CSS. A lot of people select LESS because of the adoption of Twitter bootstrap. I am bigger fan of Sass CSS, because it is being maintained more often. Sass CSS also is adding more necessary features.</p>
<h4><b>JavaScript</b></h4>
<p>CoffeeScript being the most popular in this area has a huge following. In the development community, the use of CoffeeScript is divisive, some people really love it and some really hate it.I have used CoffeeScript and see the advantages of using it but I do not have any strong feeling for or against it. Let&#8217;s not forget TypeScript for those fans of .NET.</p>
<h4><b>HTML</b></h4>
<p>In this area, HAML and Jade are in the forefront. These tools although help with easy HTML writing.</p>
<p><b>Reference:</b></p>
<ul>
<li><a href="http://lesscss.org/">http://lesscss.org/</a></li>
<li><a href="http://twitter.github.com/bootstrap/">http://twitter.github.com/bootstrap/</a></li>
<li><a href="http://sass-lang.com/">http://sass-lang.com/</a></li>
<li><a href="http://coffeescript.org/">http://coffeescript.org/</a></li>
<li><a href="http://www.typescriptlang.org/">http://www.typescriptlang.org/</a></li>
<li><a href="http://haml.info/">http://haml.info/</a></li>
<li><a href="http://jade-lang.com/">http://jade-lang.com/</a></li>
</ul>
<p>No matter the size of the project, a well structured and well written application along with its success may result in a  demand for expansion which is why every code should be written with scalability in mind. These technologies were considered with a scalable, maintainable and well-documented enterprise level architecture in mind.</p>
<p>As a result of this article, I have created a github repository with all these technologies (well most of them) incorporated. Please refer to <a href="https://github.com/kianoshp/node-boilerplate">https://github.com/kianoshp/node-boilerplate</a> for more installation.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/innovatorylife.wordpress.com/485/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/innovatorylife.wordpress.com/485/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=485&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://innovatorylife.com/2013/03/04/what-would-you-do-with-a-blank-canvas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/725a2db6f323225ccdb1aec5f6dc9202?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kianoshp</media:title>
		</media:content>
	</item>
		<item>
		<title>Why I chose Sass</title>
		<link>http://innovatorylife.com/2012/11/29/why-i-chose-sass/</link>
		<comments>http://innovatorylife.com/2012/11/29/why-i-chose-sass/#comments</comments>
		<pubDate>Thu, 29 Nov 2012 03:33:03 +0000</pubDate>
		<dc:creator>Kianosh Pourian</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Sass]]></category>
		<category><![CDATA[preprocessor]]></category>
		<category><![CDATA[SASS CSS]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://innovatorylife.com/?p=458</guid>
		<description><![CDATA[Learning to appreciate the advantages of using pre-processors like Sass CSS in my work flow was not very hard for me. At times the challenge has been convincing others of the advantages of Sass and at times it can be divisive. A pre-processor is a simple tool that will provide some of the following advantages: [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=458&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Learning to appreciate the advantages of using pre-processors like Sass CSS in my work flow was not very hard for me. At times the challenge has been convincing others of the advantages of Sass and at times it can be <a title="Why are preprocessors so divisive?" href="http://innovatorylife.com/2012/08/29/why-are-preprocessors-so-divisive/">divisive</a>. A pre-processor is a simple tool that will provide some of the following advantages:</p>
<ul>
<li>Smooth some of the harsh edges and create code frameworks  i.e. consistent code patterns</li>
<li>Extends the current process further by adding needed and missing features</li>
</ul>
<p>A pre-processor like Sass does both.</p>
<p>My introduction to Sass was in 2009 during an interview for a job. During this interview, the interviewer asked me if I knew of Sass. I did not. However after the interview, I googled it and was introduced to the world of <a href="http://sass-lang.com/">sass-lang.com</a>. After the 5 minutes that it took to install it on my Mac (Sorry PC users, it might take 10 minutes for you), I was up and running. I played around with all its features and before I knew it, I was hooked.</p>
<p>In future projects, I was introduced to other CSS specific pre-processors like LESS, Stylus, and Closure Stylesheets. There has been certain feature sets that have made me gravitate back to Sass. Here are some of those features (I have used some code example from a real project) :</p>
<h3><b>The Basics</b></h3>
<p>All CSS pre-processors are built on the DRY (<a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself">Don&#8217;t Repeat Yourself</a>) principle. On that basis they all have the following features:</p>
<ul>
<li>Variables</li>
<li>Import</li>
<li>Mixins</li>
<li>Functions</li>
<li>Selector Inheritance</li>
</ul>
<p>Variables, Import, and Mixins are basic features that were my first foray into Sass and all by themselves have added quite a punch in this application.</p>
<p>CSS is a great language allowing designers and developers to improve the presentation layer. But until the introduction of pre-processors like Sass it has been a static language that uses its cascading feature to dynamically override styles and apply them to the presentation. With the introduction of Sass, DRY principles were added to CSS and therefore extending its features.</p>
<p>So let&#8217;s dive into some code and learn about Sass. The following is an example of a simple CSS. On one of the projects that I have been working on, I needed to create a header for sections of the site. This header will have a linear gradient background and white colored text.</p>
<pre class="brush: css; title: ; notranslate">

/*This is a variable for the primary color of the side*/

$primary: #00096E;

/*primary grey color to be used throughout the site*/

$greyColor: #E0E0E0;

/*This is an example of a mixin that will create a linear gradient. The advantages of using this is

that we do not have to write the multiple vendor prefixed CSS repeatedly. And code maintenance is easier.*/

//this mixin will create a linear-gradient. The parameters passed here are:
//$pos: position of the gradient which defaults to top but can take bottom, left, or right
//$G1-G10: these allow for 10 color stops values, color and length/percentage
//$fallback: this is the fallback color that will be used for older browsers, if this parameter
//is not provided then the first color stop is used.
@mixin linear-gradient($pos, $G1, $G2: false,
 $G3: false, $G4: false,
 $G5: false, $G6: false,
 $G7: false, $G8: false,
 $G9: false, $G10: false,
 $fallback: false) {

 // Detect what type of value exists in $pos
 $pos-type: type-of(nth($pos, 1));

// If $pos is missing from mixin, reassign vars and add default position
 @if ($pos-type == color) or (nth($pos, 1) == &quot;transparent&quot;) {
     $G10: $G9; $G9: $G8; $G8: $G7; $G7: $G6; $G6: $G5;
     $G5: $G4; $G4: $G3; $G3: $G2; $G2: $G1; $G1: $pos;
     $pos: top; // Default position
 }

 $pos: unquote($pos);

$full: $G1;
 @each $g in $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10 {
     @if $g != false {
         $full: $full + ',' + $g;
     }
 }

$full: unquote($full);

 //If using COMPASS uncomment the line below and remove line 82 - 89
 //$full: compact($G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10);

 // Set $G1 as the default fallback color
 $fallback-color: nth($G1, 1);

// If $fallback is a color use that color as the fallback color
 @if type-of($fallback) == color {
     $fallback-color: $fallback;
 }

background: $fallback-color;
 background: webkit-gradient(linear, $full);
 background: -webkit-linear-gradient($pos, $full);
 background: -moz-linear-gradient($pos, $full);
 background: -ms-linear-gradient($pos, $full);
 background: -o-linear-gradient($full);
 background: unquote(&quot;linear-gradient(#{$full})&quot;);
}

</pre>
<p>The above mixin is courtesy of <a href="https://github.com/thoughtbot/bourbon">Thoughbot&#8217;s Bourbon mix</a> which has quite an extensive collection of Sass mixins and functions.</p>
<h3><b>Functions</b></h3>
<p>Sass comes with several built in functions. These are functions that are commonly used and they fall in the following categories:</p>
<ul>
<li>RGB functions</li>
<li>HSL function</li>
<li>Opacity functions</li>
<li>Other Color functions</li>
<li>String functions</li>
<li>Number functions</li>
<li>List functions</li>
<li>Introspection functions</li>
<li>Miscellaneous functions</li>
</ul>
<p>Aside from the built-in functions, custom functions can also be created.</p>
<pre class="brush: css; title: ; notranslate">

.main-header {

    @include linear-gradient(top, $primary, lighten($primary, 20%));
    color: white;
    display: inline-block;
    font-size: rfs(36);
    margin-left: 20px;

}

</pre>
<p>In this example, we are taking advantage of built-in color functions by passing the primary color and a 20% percent lighten primary color to our linear gradient mixin. We also are using a custom function that we have created to calculate the pixel font size in em, for a more responsive approach. Here is the detail of that function:</p>
<pre class="brush: css; title: ; notranslate">

// ==|===Responsive Font Size calculator====================
// Function that will calculate the responsive font size
// return the em value to be used.
// =========================================================*/
@function responsiveFontSize($fontSize: $defaultBrowserSize, $isIE: false) {
    @if $isIE {
        @return (($fontSize/$defaultBrowserSize) - 0.02) + em;
    } @else {
        @return ($fontSize/$defaultBrowserSize) + em;
    }
}
@function rfs($fontSize: $defaultBrowserSize, $isIE: false) {
    @return responsiveFontSize($fontSize, $isIE);
}

</pre>
<p>For more information on functions, refer to the <a href="http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html">Sass documentation</a>.</p>
<h3><b>Selector Inheritance</b></h3>
<p>This feature is one of the best features of Sass and one of the least used. This feature allows the user to think of the CSS and its features holistically and ensure the proper relationship among all the presentation elements.</p>
<p>For example there are times that one class will encompass most of the styles needed however there will an addition of other classes that will include not the styles of the more general class but also some of its own. For example, in our code above we have a &#8216;main-header&#8217; class. Now we want to create sub headers:</p>
<pre class="brush: css; title: ; notranslate">

.main-header {

    @include linear-gradient(top, $primary, lighten($primary, 20%));
    color: white;
    display: inline-block;
    font-size: rfs(36);
    margin-left: 20px;

}

.sub-header {
    @extend .main-header;
    @include linear-gradient(top, $secondary, lighten($secondary, 15%));
    font-size: rfs(24);
}
</pre>
<p>In this example, we inherited all the styles from &#8216;main-header&#8217; and over-wrote the linear gradient with a different color and reduced the size of our font. And the output will look something like this:</p>
<pre class="brush: css; title: ; notranslate">

.main-header, .sub-header {
    background: #00096e;
    background: webkit-gradient(linear, #00096e,#0011d4);
    background: -webkit-linear-gradient(top, #00096e,#0011d4);
    background: -moz-linear-gradient(top, #00096e,#0011d4);
    background: -ms-linear-gradient(top, #00096e,#0011d4);
    background: -o-linear-gradient(#00096e,#0011d4);
    background: linear-gradient(#00096e,#0011d4);
    color: white;
    display: inline-block;
    font-size: 2.25em;
    margin-left: 20px;

}

.sub-header {
    background: #cfc35d;
    background: webkit-gradient(linear, #cfc35d,#e0d998);
    background: -webkit-linear-gradient(top, #cfc35d,#e0d998);
    background: -moz-linear-gradient(top, #cfc35d,#e0d998);
    background: -ms-linear-gradient(top, #cfc35d,#e0d998);
    background: -o-linear-gradient(#cfc35d,#e0d998);
    background: linear-gradient(#cfc35d,#e0d998);
    font-size: 1.5em;
}

</pre>
<p>For a more comprehensive example of selector inheritance read <a href="http://awardwinningfjords.com/2010/07/27/sass-extend-introduction.html">this article</a> by <a href="https://twitter.com/tdreyno">Thomas Reynolds</a>.</p>
<h3><b>Placeholder Selectors</b></h3>
<p>Placeholder selectors follow the guideline of selector inheritance with one major improvement, they are silent until needed. A placeholder selector is a series of styles that are created for when there is situation where it is needed. If it is not extended, it will not be compiled to the final css output. If it is extended then the resulted styles will be in the output but the placeholder selector will not be in the compiled css. If we follow the example above, then the code will look like this:</p>
<pre class="brush: css; title: ; notranslate">

%header-setup{
 color: white;
 display: inline-block;
 margin-left: 20px;
}

.main-header {
 @extend %header-setup;
 @include linear-gradient(top, $primary, lighten($primary, 20%));
 font-size: rfs(36);
}

.sub-header {
 @extend %header-setup;
 @include linear-gradient(top, $secondary, lighten($secondary, 15%));
 font-size: rfs(24);
}

</pre>
<p>We placed the portion of the styles common to both classes in a placeholder selector and named it header-setup. The output of the code looks like this:</p>
<pre class="brush: css; title: ; notranslate">

.main-header, .sub-header {
 color: white;
 display: inline-block;
 margin-left: 20px;

}

.main-header {
 background: #00096e;
 background: webkit-gradient(linear, #00096e,#0011d4);
 background: -webkit-linear-gradient(top, #00096e,#0011d4);
 background: -moz-linear-gradient(top, #00096e,#0011d4);
 background: -ms-linear-gradient(top, #00096e,#0011d4);
 background: -o-linear-gradient(#00096e,#0011d4);
 background: linear-gradient(#00096e,#0011d4);
 font-size: 2.25em;

}

.sub-header {
 background: #cfc35d;
 background: webkit-gradient(linear, #cfc35d,#e0d998);
 background: -webkit-linear-gradient(top, #cfc35d,#e0d998);
 background: -moz-linear-gradient(top, #cfc35d,#e0d998);
 background: -ms-linear-gradient(top, #cfc35d,#e0d998);
 background: -o-linear-gradient(#cfc35d,#e0d998);
 background: linear-gradient(#cfc35d,#e0d998);
 font-size: 1.5em;

}

</pre>
<h3><b>Object Oriented CSS (OOCSS)</b></h3>
<p>Sass allows for a better framework for the implementation of OOCSS. If you are unfamiliar with OOCSS, <a href="http://www.stubbornella.org/content/">Nicole Sullivan</a>&#8216;s answer to writing a well structured, efficient and performant CSS; here are a few resources:</p>
<ul>
<li><a title="How to write a well structured CSS – Part I" href="http://innovatorylife.com/2012/04/30/how-to-write-a-well-structured-css-part-i/">How to write a well structured CSS</a></li>
<li><a href="http://oocss.org/">http://oocss.org/</a></li>
<li><a href="https://github.com/stubbornella/oocss/wiki">https://github.com/stubbornella/oocss/wiki</a></li>
<li><a href="http://coding.smashingmagazine.com/2011/12/12/an-introduction-to-object-oriented-css-oocss/">http://coding.smashingmagazine.com/2011/12/12/an-introduction-to-object-oriented-css-oocss/</a></li>
</ul>
<p>Combining Sass and OOCSS principles make for a great way to write CSS. Here are some great articles in this regard:</p>
<ul>
<li><a href="http://ianstormtaylor.com/oocss-plus-sass-is-the-best-way-to-css/">http://ianstormtaylor.com/oocss-plus-sass-is-the-best-way-to-css/</a></li>
<li><a href="http://takazudo.github.com/presentation-oocss-sass/#/">http://takazudo.github.com/presentation-oocss-sass/#/</a></li>
<li><a href="http://memerocket.com/2009/03/28/oocss-sass-fewer-classes-on-your-elements/">http://memerocket.com/2009/03/28/oocss-sass-fewer-classes-on-your-elements/</a></li>
</ul>
<h3><b>Conclusion</b></h3>
<p>Sass is a great that will enhance and improve upon CSS. If you have any reservations about using Sass, just experiment with it especially with the SCSS extension which allows you to use regular CSS in their along side with all the features of Sass. Cheers.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/innovatorylife.wordpress.com/458/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/innovatorylife.wordpress.com/458/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=458&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://innovatorylife.com/2012/11/29/why-i-chose-sass/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/725a2db6f323225ccdb1aec5f6dc9202?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kianoshp</media:title>
		</media:content>
	</item>
		<item>
		<title>Why are preprocessors so divisive?</title>
		<link>http://innovatorylife.com/2012/08/29/why-are-preprocessors-so-divisive/</link>
		<comments>http://innovatorylife.com/2012/08/29/why-are-preprocessors-so-divisive/#comments</comments>
		<pubDate>Wed, 29 Aug 2012 15:25:13 +0000</pubDate>
		<dc:creator>Kianosh Pourian</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web etiquette]]></category>
		<category><![CDATA[haml]]></category>
		<category><![CDATA[preprocessor]]></category>
		<category><![CDATA[sass]]></category>

		<guid isPermaLink="false">http://innovatorylife.com/?p=416</guid>
		<description><![CDATA[The genesis of this post is from a disagreement between me and a co-worker on the use of Sass CSS. This was during a project where as the UI Architect, I had decided on using Sass CSS. After a designer was brought on board, he did not want to use Sass. The discussion went something [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=416&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p style="text-align:left;">The genesis of this post is from a disagreement between me and a co-worker on the use of Sass CSS. This was during a project where as the UI Architect, I had decided on using Sass CSS. After a designer was brought on board, he did not want to use Sass. The discussion went something like this:</p>
<ul>
<li style="text-align:left;">Designer guy: I am not familiar with Sass CSS</li>
<li>Me: Here is some information on it.</li>
<li>Designer guy: Compile my CSS? I don&#8217;t want to compile my CSS.</li>
<li>Me: Just use the &#8216;watch&#8217; feature</li>
<li>Designer guy: I can&#8217;t debug my CSS in the browser.</li>
<li>Me: Use <a href="https://addons.mozilla.org/en-US/firefox/addon/firesass-for-firebug/" target="_blank">FireSass</a> (For Firefox only)</li>
<li>Designer guy: I don&#8217;t want to use Sass CSS</li>
<li>Me: WE ARE USING SASS</li>
<li>Designer guy: Sass is just a fad</li>
<li>Me: We are using Sass</li>
</ul>
<p>Multiple meetings were held that followed the same pattern as above. Looking back, I wish the discussions had gone a different way. Not in the sense that who was right or wrong but in the sense that it  could have been handled better. Introspectively, I could have done better.</p>
<p>Later on at the Backbone Conference in Boston, there were a couple of presenters that made statements like &#8220;CoffeeScript, you either love it or hate it&#8221;. This got me thinking, why should that be? Why are we in such polarized opinions when it comes to pre-processors in front end development? We are not the US Congress or the Senate for that matter. This got me thinking and started me on a path to find a peaceful solution to this issue.</p>
<h3><strong>Can you define pre-processors please?</strong></h3>
<p>In researching for this blog, I looked up the word pre-processors and found a lot of information. Wikipedia defines it as:</p>
<p>&#8220;In <a href="http://en.wikipedia.org/wiki/Computer_science">computer science</a>, a <strong>preprocessor</strong> is a <a href="http://en.wikipedia.org/wiki/Computer_program">program</a> that processes its input data to produce output that is used as input to another program. The output is said to be a <strong>preprocessed</strong>form of the input data, which is often used by some subsequent programs like <a href="http://en.wikipedia.org/wiki/Compiler">compilers</a>. The amount and kind of processing done depends on the nature of the preprocessor; some preprocessors are only capable of performing relatively simple textual substitutions and <a href="http://en.wikipedia.org/wiki/Macro_(computer_science)">macro</a> expansions, while others have the power of full-fledged <a href="http://en.wikipedia.org/wiki/Programming_language">programming languages</a>.&#8221;</p>
<p>By this definition, any work done on the code before compilation is the job of the preprocessor. There are two types of preprocessing:</p>
<ol>
<li><em><strong>Lexical</strong></em>: This is typically macro substitution, text inclusion, conditional compilation, etc…</li>
<li><em><strong>Syntactical</strong></em>: Syntactical preprocessing&#8217;s role is to transform syntax trees according to user defined rules.</li>
</ol>
<p>In the realm of front end development, most of the pre-processing tools are of the syntactical type. However stepping out of the computer science field, preprocessing exists in many areas of our lives. Couldn&#8217;t any encryption or decryption of code be considered as a preprocessor to gaining the underlying information. When a court stenographer types all the information in the court, wouldn&#8217;t that be considered a form pre-processing? How about short hand notes?</p>
<h3><strong>What tools are available?</strong></h3>
<p>In front end development, there has been an increase in the number of preprocessing tools thereby causing a bit of a polarized attitude towards them, not just whether to use any preprocessing tools but also which one. The tools that are available are as such:</p>
<ul>
<li><em><strong>HTML</strong></em>
<ul>
<li><a title="HAML" href="http://haml.info/" target="_blank">HAML</a>: (<a title="HTML" href="http://en.wikipedia.org/wiki/HTML">HTML</a> Abstraction Markup Language) is a <a title="Lightweight markup language" href="http://en.wikipedia.org/wiki/Lightweight_markup_language">lightweight markup language</a> that is used to describe the <a title="XHTML" href="http://en.wikipedia.org/wiki/XHTML">XHTML</a> of any <a title="Web document" href="http://en.wikipedia.org/wiki/Web_document">web document</a> without the use of traditional inline coding. It’s designed to address many of the flaws in traditional templating engines, as well as making markup as elegant as it can be.<a title="HAML" href="http://haml.info/" target="_blank"><br />
</a></li>
<li><a title="Jade" href="http://jade-lang.com/" target="_blank">Jade</a>: Jade is a high performance template engine heavily influenced by <a href="http://haml-lang.com/">Haml</a> and implemented with JavaScript for <a href="http://nodejs.org/">node</a>. <a title="Jade" href="http://jade-lang.com/" target="_blank">http://jade-lang.com/</a></li>
<li><a href="http://coding.smashingmagazine.com/2009/11/21/zen-coding-a-new-way-to-write-html-code/" target="_blank">Zen-coding</a>: In this post we present a new speedy way of writing HTML code using CSS-like selector syntax — a handy set of tools for high-speed HTML and CSS coding. It was developed by our author <a href="http://www.smashingmagazine.com/author/sergey-chikuyonok/">Sergey Chikuyonok</a>.</li>
</ul>
</li>
<li><em><strong>CSS</strong></em>
<ul>
<li><a href="http://sass-lang.com/" target="_blank">Sass</a>/<a href="http://compass-style.org/" target="_blank">Compass</a>: Sass is an extension of CSS3, adding <a href="http://sass-lang.com/#nesting">nested rules</a>, <a href="http://sass-lang.com/#variables">variables</a>, <a href="http://sass-lang.com/#mixins">mixins</a>,<a href="http://sass-lang.com/#extend">selector inheritance</a>, and <a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html">more</a>. It’s translated to well-formatted, standard CSS using the command line tool or a web-framework plugin. Compass is an open-source CSS Authoring Framework.</li>
<li><a href="http://lesscss.org/" target="_blank">LESS</a>: extends CSS with dynamic behavior such as variables, mixins, operations and functions. LESS runs on both the client-side (Chrome, Safari, Firefox) and server-side, with Node.js and Rhino.</li>
<li><a href="http://learnboost.github.com/stylus/" target="_blank">Stylus</a></li>
</ul>
</li>
<li><em><strong>JavaScript</strong></em>
<ul>
<li><a href="http://coffeescript.org/" target="_blank">CoffeeScript</a>: CoffeeScript is a little language that compiles into JavaScript. Underneath all those awkward braces and semicolons, JavaScript has always had a gorgeous object model at its heart. CoffeeScript is an attempt to expose the good parts of JavaScript in a simple way.</li>
<li><a href="http://maxtaco.github.com/coffee-script/" target="_blank">IcedCoffeeScript</a>: IcedCoffeeScript is a superset of CoffeeScript. The iced interpreter is a drop-in replacement for the standard coffee interpreter; it will interpret almost all existing CoffeeScript programs.</li>
<li><a href="http://code.google.com/p/dart/" target="_blank">Dart</a>: Dart is a new web programming language with libraries, a virtual machine, and tools. Dart helps developers build structured modern web apps. Dart compiles to JavaScript to run across the entire modern web.</li>
<li><a href="https://developers.google.com/web-toolkit/" target="_blank">GWT</a>: Google Web Toolkit (GWT) is a development toolkit for building and optimizing complex browser-based applications. GWT is used by many products at Google, including Google AdWords and Orkut. It&#8217;s open source, completely free, and used by thousands of developers around the world.</li>
</ul>
</li>
</ul>
<h3><strong>How to argue correctly about preprocessors</strong></h3>
<p>At the Boston Backbone Conference 2012, <a href="https://twitter.com/andrewdupont" target="_blank">Andrew Dupont</a> had a great <a href="http://www.slideshare.net/savetheclocktower/how-to-argue-about-javascript-13167253" target="_blank">presentation</a> about &#8220;How to argue about JavaScript&#8221;. This was a result of the famous discussion about semicolons &#8211; between Douglas Crockford and the world. Andrew outlined some great strategies and tactics to use when having a discussion (which I will shamelessly steal).</p>
<p>A lot of the times, we enter a discussion holding steadfast to our position and we feel that if we budge even a little bit then we have lost. This is unfortunately mirrored in our political environment and may give us a slight albeit wrong justification.</p>
<p>“<em>In science it often happens that scientists say, ‘You know that’s a really good argument; my position is mistaken,’ and then they actually change their minds and you never hear that old view from them again. They really do it. It doesn’t happen as often as it should, because scientists are human and change is sometimes painful. But it happens every day. I cannot recall the last time something like that happened in politics or religion.</em>”</p>
<p><span style="color:#99cc00;"><strong>Carl Sagan</strong></span></p>
<p>When entering a discussion, one should consider approaching it as a scientific discussion vs. a political debate. Here are some more tactics and guidelines.</p>
<h3><strong>Discussion goals and tactics</strong></h3>
<p>On August 20th 2012, after hearing <a href="http://www.nytimes.com/2012/08/20/us/politics/todd-akin-provokes-ire-with-legitimate-rape-comment.html" target="_blank">Representative Todd Akin&#8217;s comments regarding &#8216;Legitimate Rape&#8217;</a> saddened me as an American and human being. So I decided to post my thoughts on Facebook:</p>
<p><a href="http://innovatorylife.files.wordpress.com/2012/08/screen-shot-2012-08-28-at-9-45-04-pm.png"><img class="alignnone size-full wp-image-418" title="Facebook Post 8/20/2012" src="http://innovatorylife.files.wordpress.com/2012/08/screen-shot-2012-08-28-at-9-45-04-pm.png?w=490" alt="Facebook Post 8/20/2012"   /></a></p>
<p>What started as an attempt to be diplomatic while expressing myself, ballooned into a full fledged political discussion. What made it worst was a comment from a friend:</p>
<p><a href="http://innovatorylife.files.wordpress.com/2012/08/screen-shot-2012-08-28-at-9-52-24-pm.png"><img class="alignnone size-full wp-image-419" title="Facebook unnecessary response" src="http://innovatorylife.files.wordpress.com/2012/08/screen-shot-2012-08-28-at-9-52-24-pm.png?w=490" alt="Facebook unnecessary response"   /></a></p>
<p>The photo in question is this:</p>
<p><a href="http://innovatorylife.files.wordpress.com/2012/08/dsc_00591.jpg"><img class="alignnone size-medium wp-image-422" title="Family picture with statue of Lenin" src="http://innovatorylife.files.wordpress.com/2012/08/dsc_00591.jpg?w=198&#038;h=300" alt="Family picture with statue of Lenin" width="198" height="300" /></a></p>
<p>This was just a landmark in Seattle and being a proper tourist, we decided to take picture with it. That&#8217;s all. However this is an example of how discussions can get out of hand. In our community, the development community, we have plenty of vitriolic discussions. Let&#8217;s not forget the <a href="https://github.com/twitter/bootstrap/issues/3057" target="_blank">Semicolon war of 2012</a> or the <a href="http://ejohn.org/blog/selectors-that-people-actually-use/" target="_blank">selective tragedy of 2008</a>.</p>
<p>I try, everyday I try to better myself especially when it comes discussions like this. The following are some of the tactics that I use in order to improve (these are mostly excerpt from the book &#8220;<a href="http://www.amazon.com/Getting-Yes-Negotiating-Agreement-Without/dp/0140157352/ref=sr_1_2?ie=UTF8&amp;qid=1346253249&amp;sr=8-2&amp;keywords=getting+to+yes+negotiating" target="_blank">Getting to Yes negotiating agreement with giving in</a>&#8221; by Roger Fisher and William Ury).</p>
<h3><strong>Goals of an argument</strong></h3>
<p>An argument/discussion has three goals:</p>
<ul>
<li>It should produce a wise agreement, if possible</li>
<li>It should be efficient</li>
<li>It should not damage the relationship between the parties</li>
</ul>
<p>Looking back at my interaction with &#8220;Designer guy&#8221;, I should have outlined and presented the reasons behind the use of Sass better or tried to reach a compromise for example let&#8217;s try it out for a while (a week or two) and re-visit this discussion then.</p>
<h3><strong>Tactics for an argument</strong></h3>
<ul>
<li>Separate the people from the problem</li>
<li>Focus on interests, not positions</li>
<li>Invent options for mutual gain</li>
<li>Insist on objective criteria</li>
</ul>
<p>In my example, I should have outlined our goals e.g. better development methods which is also a common goal and common interest.</p>
<h3><strong>Discussion preparation</strong></h3>
<p>When entering a discussion prep yourself in the following manner:</p>
<ul>
<li>Retain the willingness to be convinced</li>
<li>Imagine where others are coming from</li>
<li>Account for your own taste</li>
<li>Account for your own emotions</li>
</ul>
<h3><strong>Take a deep breath</strong></h3>
<p>When in a discussion follow these rules:</p>
<ul>
<li>Be nice</li>
<li>Speak with surgical precision</li>
<li>Be honest in your characterizations</li>
<li>Don&#8217;t rise to the bait of others vitriol</li>
</ul>
<p>If you see me taking a deep breath and counting to 10 (in my head), don&#8217;t take it personally.</p>
<h3><strong>Conclusion</strong></h3>
<p>I consider myself a work in progress when it comes to civil disagreements. However there will be times that one will have to walk away from a discussion. Don&#8217;t be afraid to do that, time will sort out the right from the wrong.</p>
<h3>Further Reference</h3>
<ul>
<li><a href="http://www.youtube.com/watch?v=ulNSlES1Fds" target="_blank">Nicole Sullivan&#8217;s &#8220;Don&#8217;t feed the trolls&#8221;</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/innovatorylife.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/innovatorylife.wordpress.com/416/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=416&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://innovatorylife.com/2012/08/29/why-are-preprocessors-so-divisive/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/725a2db6f323225ccdb1aec5f6dc9202?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kianoshp</media:title>
		</media:content>

		<media:content url="http://innovatorylife.files.wordpress.com/2012/08/screen-shot-2012-08-28-at-9-45-04-pm.png" medium="image">
			<media:title type="html">Facebook Post 8/20/2012</media:title>
		</media:content>

		<media:content url="http://innovatorylife.files.wordpress.com/2012/08/screen-shot-2012-08-28-at-9-52-24-pm.png" medium="image">
			<media:title type="html">Facebook unnecessary response</media:title>
		</media:content>

		<media:content url="http://innovatorylife.files.wordpress.com/2012/08/dsc_00591.jpg?w=198" medium="image">
			<media:title type="html">Family picture with statue of Lenin</media:title>
		</media:content>
	</item>
		<item>
		<title>Journey Through MVC Architecture Using KnockoutJS</title>
		<link>http://innovatorylife.com/2012/08/11/journey-through-mvc-architecture-using-knockoutjs/</link>
		<comments>http://innovatorylife.com/2012/08/11/journey-through-mvc-architecture-using-knockoutjs/#comments</comments>
		<pubDate>Sat, 11 Aug 2012 17:36:07 +0000</pubDate>
		<dc:creator>Kianosh Pourian</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Front end development]]></category>
		<category><![CDATA[KnockoutJS]]></category>
		<category><![CDATA[MV*]]></category>

		<guid isPermaLink="false">http://innovatorylife.com/?p=323</guid>
		<description><![CDATA[Up until two years ago, I had not idea of any MVC framework; however I knew that my front end development needed organization and structure. My first introduction to an MVC framework was JavaScriptMVC. I played around with it and implemented some of its organizational structure in the project I was working on. My second [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=323&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Up until two years ago, I had not idea of any MVC framework; however I knew that my front end development needed organization and structure. My first introduction to an MVC framework was <a href="http://javascriptmvc.com/" target="_blank">JavaScriptMVC</a>. I played around with it and implemented some of its organizational structure in the project I was working on. My second dive into the <a href="http://coding.smashingmagazine.com/2012/07/27/journey-through-the-javascript-mvc-jungle/" target="_blank">JavaScript MVC jungle</a> was a 5 minute lightning presentation by <a href="https://twitter.com/tbranyen" target="_blank">Tim Branyen</a> on Backbone at a meetup (if you know Tim and know how fast he can talk, then you will understand when I say there was a vast amount of information in that 5 minute talk). Coming out of that meetup and walking back with a fellow developer, he told me about <a href="http://knockoutjs.com/" target="_blank">KnockoutJS</a>. I was eager to try out some of these frameworks on my next project.</p>
<p>The opportunity came up on my next project with MIT where I inherited a website in dire need of structure and organization. This is where my previous research paid off and I choose KnockoutJS to implement and this is what I learned in the process.</p>
<h3>What does MVC mean for Front End Development?</h3>
<p>When it comes to development, there are several design patterns and the MV* frameworks are examples of one design pattern. There is the all familiar MVC and there is also MVP and MVVM. Nevertheless, all these frameworks have similar baseline structures with minor differences. For simplicity sake, I will concentrate on MVC framework.</p>
<blockquote><p>&#8220;The idea behind [MVC] is to make a clear division between domain objects that model our perception of the real world and presentation objects that are the UI elements we see on the screen&#8230;Domain objects should be completely self contained and work without reference to the presentation, they should also be able to support multiple presentation, possibly simultaneously.&#8221;</p>
<p><span style="color:#808000;"><strong>Martin Fowler</strong></span></p></blockquote>
<ul>
<li><em><strong>Model</strong></em>: domain or structural objects representing the application&#8217;s state. If your application has data or logic, then you need a model. Your application can be broken down into different models for example users, photos, experiments, classrooms, etc&#8230; These models contain a state that will be displayed to the user  in the &#8220;View&#8221;.</li>
<li><em><strong>View</strong></em>: Observes the model&#8217;s state and generates output for the user. This is generally the part of the application the user sees and it is our way of displaying the model to the user through markup and templates.</li>
<li><em><strong>Controller</strong></em>: Translates the user input into operations on the model. As the user interacts in the &#8220;View&#8221;, the controller captures the interaction and updates the state of the &#8220;Model&#8221;. Subsequently the implementation of an observer pattern will update the &#8220;View&#8221; with the latest state of the &#8220;Model&#8221;.</li>
</ul>
<p>The frameworks that support the MV* structure are numerous, here are a few options:</p>
<ul>
<li><a href="http://documentcloud.github.com/backbone/" target="_blank">BackboneJS</a></li>
<li><a href="http://knockoutjs.com/" target="_blank">KnockoutJS</a></li>
<li><a href="http://emberjs.com/" target="_blank">EmberJS</a></li>
<li><a href="http://sproutcore.com/" target="_blank">SproutCore</a></li>
<li><a href="http://angularjs.org/" target="_blank">AngularJS</a></li>
<li><a href="http://batmanjs.org/" target="_blank">BatmanJS</a></li>
<li>Which ever one that has been written in the last hour&#8230;</li>
</ul>
<p>When should one choose one of these frameworks? Some people think that if your application reaches certain level of complexity, you should be using one these frameworks. I am of the humble opinion that, aside from informational websites that can be written with WordPress, Drupal, or simple HTML (and no backend or database interaction), should adopt an MV* framework. Many sites may start as simple applications but your simple application especially if successful will become complex and at that point it may be too late and more difficult to implement these frameworks.</p>
<p>One of the best tools to evaluate the different types of MVC frameworks is Addy Osmani&#8217;s <a href="http://addyosmani.github.com/todomvc/" target="_blank">TODO MVC site</a>. This site shows you how to implement a simple todo application using different frameworks.</p>
<h3>Benefits of Using a MV* Framework</h3>
<ul>
<li><em><strong>Separation of concerns</strong></em>: This is the main goal of an MVC framework, to be able to separate the different working areas of the site into Model, View, and Controller.</li>
<li><em><strong>Easier overall maintenance</strong></em></li>
<li><em><strong>Side by side development</strong></em>: This is a  benefactor of the separation of concerns which will allow developers to work side by side on different parts of the application with reduced over-stepping on each others work.</li>
<li><em><strong>Organization</strong></em>: If you have had to trudge through as much spaghetti code as I have, then this will be your favorite benefit of these frameworks.</li>
</ul>
<p>One thing to consider is that these frameworks are not a substitute for good JavaScript development. These frameworks will enhance your code, it could enhance good code or bad code; you pick.</p>
<h3>MVVM</h3>
<p>MVVM was originally defined by Microsoft for use with Windows Presentation Foundation (WPF) and Silverlight, having been officially announced in 2005 by John Grossman in a blog post about Avalon (the codename for WPF). It also found some popularity in the Adobe Flex community as an alternative to simply using MVC. In the MVVM framework, the &#8220;Model&#8221; and the &#8220;View&#8221; follow the definitions as stated above. The &#8220;ViewModel&#8221;, as the name suggests, is the go between the View and the Model. The ViewModel can be considered a specialized Controller that acts as a data converter. It changes Model information into View information, passing commands from the View to the Model. For example, the Model may contain a boolean value like isAvailable, it is up to the ViewModel to interpret that and display the correct information to the user.</p>
<h3>Benefits of KnockoutJS</h3>
<ul>
<li>Declarative bindings: Easily associate DOM elements with model data using a concise, readable syntax</li>
<li>Automatic UI refresh: When your data model&#8217;s state changes, your UI updates automatically</li>
<li>Dependency tracking: Implicitly set up chains of relationships between model data, to transform and combine it</li>
<li>Templating: Quickly generate sophisticated, nested UIs as a function of your model data</li>
</ul>
<h3>Next Steps</h3>
<p>In order to better understand KnockoutJS, I have created a tutorial creating a <a href="http://wp.me/p289NB-5N">Flickr app</a>. Creating this app will help in better understanding of the KnockoutJS.</p>
<h3>References</h3>
<ul>
<li><a href="http://knockoutjs.com/" target="_blank">KnockoutJS</a></li>
<li><a href="http://addyosmani.com/blog/understanding-mvvm-a-guide-for-javascript-developers/" target="_blank">Understanding MVVM – A Guide For JavaScript Developers</a> by Addy Osmani</li>
<li><a href="http://opensoul.org/blog/archives/2012/05/16/the-plight-of-pinocchio/" target="_blank">The Plight of Pinocchio</a> a presentation by Brandon Keepers</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/innovatorylife.wordpress.com/323/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/innovatorylife.wordpress.com/323/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=323&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://innovatorylife.com/2012/08/11/journey-through-mvc-architecture-using-knockoutjs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/725a2db6f323225ccdb1aec5f6dc9202?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kianoshp</media:title>
		</media:content>
	</item>
		<item>
		<title>KnockoutJS Flickr App Tutorial &#8211; Part I</title>
		<link>http://innovatorylife.com/2012/08/10/knockoutjs-flickr-app-tutorial-part-i/</link>
		<comments>http://innovatorylife.com/2012/08/10/knockoutjs-flickr-app-tutorial-part-i/#comments</comments>
		<pubDate>Fri, 10 Aug 2012 14:00:51 +0000</pubDate>
		<dc:creator>Kianosh Pourian</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[KnockoutJS]]></category>
		<category><![CDATA[MV*]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://innovatorylife.com/?p=359</guid>
		<description><![CDATA[To better understand how to implementation of KnockoutJS, I have created a tutorial which creates a Flickr application searching Flickr photos based on tag and displaying them. It also allows the user to view an enlarged version of the photo and add it to a favorites section. Here is Balsamiq mockup of the application: Model In this [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=359&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>To better understand how to implementation of KnockoutJS, I have created a tutorial which creates a Flickr application searching Flickr photos based on tag and displaying them. It also allows the user to view an enlarged version of the photo and add it to a favorites section. Here is Balsamiq mockup of the application: <a href="http://innovatorylife.files.wordpress.com/2012/08/knockoutexample.png"><img class="alignnone size-full wp-image-361" title="KnockoutJS Flickr Application Mockup" src="http://innovatorylife.files.wordpress.com/2012/08/knockoutexample.png?w=490&#038;h=306" alt="" width="490" height="306" /></a></p>
<h3>Model</h3>
<p>In this example the Model will contains the information/data for the application. In this case we have two types of data, Photo and Favorite. The Photo model will have the following structure:</p>
<pre class="brush: jscript; title: ; notranslate">
  Photo = function(id, owner, title, farmId, serverId, secret, ispublic, isfriend, isfamily) {
    this.id = id;
    this.owner = owner;
    this.title = title;
    this.farmId = farmId;
    this.serverId = serverId;
    this.secret = secret;
    this.ispublic = ispublic;
    this.isfriend = isfriend;
    this.isfamily = isfamily;
  };
</pre>
<p>The Favorite Model is simply a collection of Photo models:</p>
<pre class="brush: jscript; title: ; notranslate">
  Favorites = function(Photo) {
    return this.Photo = Photo;
  };
</pre>
<h3>ViewModel</h3>
<p>The ViewModel not contains the objects that will be used in the view but also the functions and interactions between the model and the view. The first step is to create observable objects. KnockoutJS has three types of observable objects:</p>
<ul>
<li>Simple object</li>
<li>Function</li>
<li>Array Object</li>
</ul>
<p>Here are some how the observables will be used in KnockoutJS:</p>
<pre class="brush: jscript; title: ; notranslate">
// Simple object
var myViewModel = {
    personName: ko.observable('Bob'),
    personAge: ko.observable(123)
};

//Function
function AppViewModel() {
    this.firstName = ko.observable('Bob');
    this.lastName = ko.observable('Smith');
    this.fullName = ko.computed(function() {
        return this.firstName() + &quot; &quot; + this.lastName();
    }, this);
};

//Array
var myObservableArray = ko.observableArray();    // Initially an empty array
myObservableArray.push('Some value');            // Adds the value and notifies observers
</pre>
<p>Keep in mind that some browser do not support getters and setters so all ko.observable objects are functions In order retrieve a set value, one will have to use the following code:</p>
<pre class="brush: jscript; title: ; notranslate">
myViewModel.personName(); //will display Bob
</pre>
<p>To change the value of a viewModel, you will implement in the following manner:</p>
<pre class="brush: jscript; title: ; notranslate">
myViewModel.personName('Roy');
myViewModel.personName(); //will display Roy
</pre>
<p>In order to create the proper structure, the first step is the create the objects of the viewModel. Some of the time, these objects will mirror the model data that has been returned from the server. However there will be times where we will need to create an object reflecting not only the information displayed to the user but also to record the interactions with the user. In our application, we have created a photos object which contains arrays of &#8216;image&#8217; objects. The &#8216;image&#8217; object has the following structure:</p>
<ul>
<li>Photo object: this is an instance of the Photo object created in model</li>
<li>Photo src: this is the source for our image to be retrieved from Flickr</li>
</ul>
<pre class="brush: jscript; title: ; notranslate">
  photoViewModel = {
    //Photos: will be an array of image objects which will contain
    //Photo object and photo src
    photos: ko.observableArray([]),
    //Favorites
    favorites: ko.observableArray([])
  }
</pre>
<p>As you can see, the &#8216;photos&#8217; and &#8216;favorites&#8217; objects are initialized as empty knockout observable arrays. This is all that is needed in order to initially render the page. Once the user searches for a certain tag i.e. cat, dog, table, etc.., we will fire off a request to Flickr to retrieve the images. In the viewModel, we also create functions</p>
<pre class="brush: jscript; title: ; notranslate">

photoViewModel = {
 ... //Photos and Favorites object are here //Function that will retrieve all the photos based on the search tag
 //and place them in the photos viewmodel
 getPhotos: function(formElement) {
   var searchTag, that;
   //reseting the previous search results
   photoViewModel.photos([]);
   //getting the search tag
   searchTag = $(formElement).find('#search').val();
   that = this;
   $.getJSON(flickrURL + searchTag)
   .done(function(photoData) {
     return _.each(photoData.photos.photo, function(photo) {
       var image;
       image = {
         photoObj: new Photo(photo.id,
                             photo.owner,
                             photo.title,
                             photo.farm,
                             photo.server,
                             photo.secret,
                             photo.ispublic,
                             photo.isfriend,
                             photo.isfamily),
         photoSrc: that.createSrc(photo.farm,
                                           photo.server,
                                           photo.id,
                                           photo.secret,
                                           'thumbnail')
       };
       return that.photos.push(image);
     });
   });
 }
}
</pre>
<p>We also need a function that will create the src URL for the images for us.</p>
<pre class="brush: jscript; title: ; notranslate">

//Function that will create a src URL to be retrieved from Flickr&lt;/pre&gt;
createSrc: function(farmId, serverId, id, secret, size) { return 'http://farm' + farmId + '.staticflickr.com/' + serverId + '/' + id + '_' + secret + (size === &quot;thumbnail&quot; ? &quot;_s.jpg&quot; : &quot;_n.jpg&quot;); } </pre>
<p>To add a photo to the favorites, we simply take the photo object that the user has selected and add it to the favorites array. By simply adding the object to the array combined with the fact that the favorites object is bound to the DOM element on the view, the photo will appear in the designated area.</p>
<pre class="brush: jscript; title: ; notranslate">
 //Function that will add the selected photo to the favorites viewmodel
 addToFavorites: function(id) {
   var currentPhotoObj, favoriteExists;
   //getting the photo object of the selected photo
   currentPhotoObj = _.find(photoViewModel.photos(), function(photo) {
     return photo.photoObj['id'] === id;
   });
   //Checking to see if the item exists in the favorites or not
   favoriteExists = _.find(photoViewModel.favorites(), function(favorite) {
     return favorite.photoObj['id'] === currentPhotoObj.photoObj.id;
   });
   //adding the photo object to the favorites list
   if (!favoriteExists) {
     photoViewModel.favorites.push(currentPhotoObj);
   }
 },
 </pre>
<p>The remaining code will perform the following functions:</p>
<ul>
<li>remove from favorites</li>
<li>Show larger image</li>
</ul>
<pre class="brush: jscript; title: ; notranslate">
//Function that will remove the selected photo from the favorites viewmodel
 removeFromFavorites: function(id) {
   return photoViewModel.favorites.splice(_.indexOf(photoViewModel.favorites(),
                _.find(photoViewModel.favorites(), function(favorite) {
                  return favorite.photoObj['id'] === id;
                })), 1);
 },
 //Function that will show the larger image in the a modal box
 showLargerImage: function(id) {
   var currentPhotoObj, imageSrc;
   currentPhotoObj = _.find(photoViewModel.photos(), function(photo) {
     return photo.photoObj['id'] === id;
   });
   imageSrc = photoViewModel.createSrc(currentPhotoObj.photoObj.farmId,
                                       currentPhotoObj.photoObj.serverId,
                                       currentPhotoObj.photoObj.id,
                                       currentPhotoObj.photoObj.secret,
                                       'large');
   $('body').modal({
     height: 'auto',
     width: 'auto',
     loaderImgSrc: 'img/loader.gif',
     showSpinner: false
   });
   $('body').modal('openModal');
     return $('body').modal('updateContent', $('&lt;/pre&gt;
&lt;img alt=&quot;&quot; /&gt;').attr('src', imageSrc)); } }; </pre>
<p>Note that in this process, we are using underscore.js and jquery.modal.js (a jquery plugin that I wrote myself).</p>
<h3>View</h3>
<p>The view being the center where we display the model at its current state to the user and also give the user the ability to modify/update the model. This is the markup for the search box:</p>
<pre class="brush: xml; title: ; notranslate">&lt;header&gt;
&lt;h1&gt;Photo Finder&lt;/h1&gt;
&lt;strong&gt;Search for photos in Flicker using tags&lt;/strong&gt;&lt;form data-bind=&quot;submit: getPhotos&quot;&gt;
 &lt;input id=&quot;search&quot; type=&quot;text&quot; /&gt;
 &lt;/form&gt;
&lt;/header&gt;
</pre>
<p>As you can see, we have bound the submit button to the &#8216;getPhotos&#8217; function in our view model. This binding (for the submit button binding ensure that the button is in a form) will prevent the default submit action but also will allow you to use the form as a handler for the view model and perform the specific function needed. In our case, we use it to retrieve the Flickr photos and place them in our view model. Once the photos are retrieved, we add them to the photos object in the view model. Because the view model is bound to the DOM, therefore consumed by the &#8216;photos-template&#8217;. At this point, any changes made to the photos object in the view model will be reflected in the UI automagically.</p>
<pre class="brush: xml; title: ; notranslate">&lt;/pre&gt;
&lt;div id=&quot;main&quot;&gt;
&lt;h4&gt;Search Results&lt;/h4&gt;

&lt;hr width=&quot;81%&quot; /&gt;

&lt;div id=&quot;results&quot; data-bind=&quot;template: 'photos-template'&quot;&gt;&lt;/div&gt;
...&lt;script id=&quot;photos-template&quot; type=&quot;text/html&quot;&gt;// &lt;![CDATA[
&lt;ul class=&quot;clearfix&quot;&gt;
 {{each photos}}
	&lt;li&gt;
&lt;div class=&quot;imgResult&quot;&gt;&lt;img src=&quot;${photoSrc}&quot; id=&quot;${photoObj.id}&quot; alt=&quot;${photoObj.title}-    ${photoObj.owner}&quot; title=&quot;${photoObj.title}&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;tabs&quot;&gt;&lt;img src=&quot;img/fav-icon-sketch.png&quot; width=&quot;40%&quot; alt=&quot;add to favorites&quot; data-bind=&quot;click: function() { addToFavorites(photoObj.id) }&quot;/&gt;
          &lt;img src=&quot;img/enlarge-sketch.png&quot; width=&quot;40%&quot; alt=&quot;show larger image&quot; data-bind=&quot;click: function() { showLargerImage(photoObj.id) }&quot;/&gt;&lt;/div&gt;&lt;/li&gt;
{{/each}}&lt;/ul&gt;
// ]]&gt;&lt;/script&gt;</pre>
<p>Also please notice that we have not only bound the photos object to this markup/template but we have also bound a couple of &#8216;click&#8217; events that will call the appropriate function, passing the the photo id. Similar treatment for the favorites section:</p>
<pre class="brush: xml; title: ; notranslate">&lt;/pre&gt;
&lt;div id=&quot;favs&quot;&gt;
&lt;div class=&quot;header&quot;&gt;Favorites&lt;img src=&quot;img/fav-icon-sketch.png&quot; alt=&quot;add to favorites&quot; width=&quot;15%&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;favorites&quot; data-bind=&quot;template: 'favorites-template'&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;...&lt;script id=&quot;favorites-template&quot; type=&quot;text/html&quot;&gt;// &lt;![CDATA[
&lt;ul class=&quot;clearfix&quot;&gt;
 {{each favorites}}
	&lt;li&gt;
&lt;div class=&quot;imgResult&quot;&gt;&lt;img src=&quot;${photoSrc}&quot; id=&quot;${photoObj.id}&quot; alt=&quot;${photoObj.title}-${photoObj.owner}&quot; title=&quot;${photoObj.title}&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;tabs&quot;&gt;&lt;img src=&quot;img/remove-sketch.png&quot; width=&quot;40%&quot; alt=&quot;add to favorites&quot; data-bind=&quot;click: function() { removeFromFavorites(photoObj.id) }&quot;/&gt;&lt;/div&gt;&lt;/li&gt;
{{/each}}&lt;/ul&gt;
// ]]&gt;&lt;/script&gt;</pre>
<p>Reference</p>
<ul>
<li><a href="https://github.com/kianoshp/KnockoutJS-Demo" target="_blank">https://github.com/kianoshp/KnockoutJS-Demo</a></li>
</ul>
<h3>Next Steps</h3>
<p>Common complaint of KnockoutJS is the what seems like the mixing of javascript, data-bind attributes, and markup. However KnockoutJS allows you to create custom bindings. One option to combat the overly tied application logic to the view is to create a custom binding similar to CSS classes. Ryan Niemeyer has suggested this procedure. In part II of this tutorial, we will tackle this option.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/innovatorylife.wordpress.com/359/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/innovatorylife.wordpress.com/359/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=359&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://innovatorylife.com/2012/08/10/knockoutjs-flickr-app-tutorial-part-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/725a2db6f323225ccdb1aec5f6dc9202?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kianoshp</media:title>
		</media:content>

		<media:content url="http://innovatorylife.files.wordpress.com/2012/08/knockoutexample.png" medium="image">
			<media:title type="html">KnockoutJS Flickr Application Mockup</media:title>
		</media:content>
	</item>
		<item>
		<title>What I learned at the Backbone conference 2012</title>
		<link>http://innovatorylife.com/2012/06/01/what-i-learned-at-the-backbone-conference-2012/</link>
		<comments>http://innovatorylife.com/2012/06/01/what-i-learned-at-the-backbone-conference-2012/#comments</comments>
		<pubDate>Fri, 01 Jun 2012 14:41:23 +0000</pubDate>
		<dc:creator>Kianosh Pourian</dc:creator>
				<category><![CDATA[Backbone]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[MV*]]></category>

		<guid isPermaLink="false">http://innovatorylife.com/?p=296</guid>
		<description><![CDATA[I attended the Backbone conference (pics by Bob Holt)on May 30th and 31st of 2012 in Boston Massachusetts. This was great event that shed light on numerous questions that I had regarding development with Backbone. In this blog, I will summarize all the topics that I learned from this event (if you attended this event [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=296&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I attended the <a href="http://backboneconf.com/">Backbone conference</a> (<a href="http://kiano.sh/MbyUio" target="_blank">pics</a> by <a href="http://twitter.com/bobholt" target="_blank">Bob Holt</a>)on May 30th and 31st of 2012 in Boston Massachusetts. This was great event that shed light on numerous questions that I had regarding development with Backbone. In this blog, I will summarize all the topics that I learned from this event (if you attended this event and think that I have missed anything, please either add it in the comments or shoot me an email and I will add it):</p>
<p>The event had the following lineup:</p>
<h2><a href="#day1">Day 1</a></h2>
<ul>
<li><a href="#keynote">Keynote</a> &#8211; <a href="https://twitter.com/#!/jashkenas" target="_blank"><strong>Jeremy Ashkenas</strong></a>, <em>New York Times, Backbone project</em></li>
<li><a href="#ember">Ember.js</a> &#8211; <a href="https://twitter.com/#!/wycats" target="_blank"><strong>Yehuda Katz</strong></a>, <em>Tilde</em></li>
<li><a href="#argue">How to argue about JavaScript</a> &#8211; <a href="https://twitter.com/#!/andrewdupont" target="_blank"><strong>Andrew Dupont</strong></a></li>
<li><a href="#mvcMagic">MVC Module Magic</a> &#8211; <a href="https://twitter.com/#!/SlexAxton" target="_blank"><strong>Alex Sexton</strong></a>, <em>Bazaarvoice</em></li>
<li><a href="#angular">AngularJS</a>, Testability in Mind &#8211; <a href="https://twitter.com/#!/vojtajina" target="_blank"><strong>Vojta Jina</strong></a>, <em>Google</em></li>
<li><a href="#newDogs">New Dogs, Old Tricks (or DOJO already did that)</a> &#8211; <a href="https://twitter.com/#!/rmurphey" target="_blank"><strong>Rebecca Murphey</strong></a>, <em>Bocoup</em></li>
</ul>
<h2><a href="#day2">Day 2</a></h2>
<ul>
<li><a href="#lumbar">Lumbar Support</a> &#8211; <a href="https://twitter.com/#!/braddunbar" target="_blank"><strong>Brad Dunbar</strong></a>, <em>Pathable</em></li>
<li><a href="#migrate">Migrating a Large Project to Backbone</a> &#8211; <a href="https://twitter.com/#!/samuelclay" target="_blank"><strong>Sam Clay</strong></a>, <em>NewBlur</em></li>
<li><a href="#realtime">Real-World with Realtime</a> &#8211; <a href="https://twitter.com/#!/HenrikJoreteg" target="_blank"><strong>Henrik Joreteg</strong></a>, <em>&amp;yet</em></li>
<li><a href="#airbnb">Building Robust Backbone Applications: AirBnb&#8217;s Journey Into Mobile Web</a> &#8211; <a href="https://twitter.com/#!/hshoff" target="_blank"><strong>Harrison Shoff</strong></a>, <em>AirBnb</em></li>
<li><a href="#yapp">Y.App: Coordinating URL Navigation, Routing, and Managing Views</a> - <a href="https://twitter.com/#!/ericf" target="_blank"><strong>Eric Ferraiuolo</strong></a>, <em>YUI, Yahoo!</em></li>
<li><a href="#pinocchio">The Plight of Pinocchio: JavaScript&#8217;s Quest to Become a Real Language</a> - <a href="https://twitter.com/#!/bkeepers" target="_blank"><strong>Brandon Keepers</strong></a>, <em>GitHub</em></li>
</ul>
<h3><a name="day1"></a>Day 1</h3>
<h4><a name="keynote"></a>Keynote address</h4>
<p>Jeremy&#8217;s introduction of Backbone was a great way to start the venue. Jeremy took the time to outline the reasons behind the Backbone project, the simplicity of it, its light weight advantage and its extensibility. Here is the presentation by Jeremy:<br />
<br />
<span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='560' height='315' src='http://www.youtube.com/embed/yDmRRJzTo38?version=3&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' frameborder='0'></iframe></span></p>
<p><em><strong>Further Reference</strong></em></p>
<p><a href="https://speakerdeck.com/u/jashkenas/p/state-of-the-backbone" target="_blank">https://speakerdeck.com/u/jashkenas/p/state-of-the-backbone</a></p>
<h4><a name="ember"></a>Ember.js</h4>
<p>It was interesting to witness the battle between EmberJS and BackboneJS. My limited experience in either prevents me from declaring a winner nor should one be declared.</p>
<p>I enjoyed the talk Yehuda gave on his project, Ember.js. I have been following Yehuda ever since he branched this project from Sproutcore and started developing Ember.js.</p>
<p>Being a fan of MV* development, I have used KnockoutJS in the past, will be using Backbone in my next project and will definitely be experimenting with EmberJS in the future.</p>
<p><em><strong>Further Reference</strong></em></p>
<p><a href="https://speakerdeck.com/u/wycats/p/backboneconf-emberjs">https://speakerdeck.com/u/wycats/p/backboneconf-emberjs</a></p>
<p><a href="http://emberjs.com/about/">http://emberjs.com/about/</a></p>
<h4><a name="argue"></a>How to argue about JavaScript</h4>
<p>I really enjoyed this topic and very much appreciate that Andrew decided to talk about this. Being in the development community, I have been disheartened about some of the immature and at times vitriolic discussions online which has resulted in discouraging me to express my opinion at certain times. Andrew pointed out the mistakes of our community quite vividly and took the time to give solutions. I do hope that his talk does not fall on deaf ears.</p>
<p><em><strong>Further Reference</strong></em></p>
<p><a href="http://www.slideshare.net/savetheclocktower/how-to-argue-about-javascript-13167253" target="_blank">http://www.slideshare.net/savetheclocktower/how-to-argue-about-javascript-13167253</a></p>
<h4><a name="mvcMagic"></a>MVC Module Magic</h4>
<p>Alex coining the term &#8216;MVWTF&#8217; was priceless. His outline of the app structure which I have been guilty of, was very informative. Making debugging and using require were some points that I will definitely be using in the future.</p>
<p><strong><em>Further Reference</em></strong></p>
<p><a href="http://alexsexton.com/talks/backboneconf2012/#/17">http://alexsexton.com/talks/backboneconf2012</a></p>
<h4><a name="angular"></a>AngularJS</h4>
<p>At this point it would have been quite easy to roll my eyes and wonder why do we need another MV* framework. However Vojta did a great job presenting and doing some live coding, which in my experience can go awry quite easily, that pointed it out all the aspects of framework. Being a fan of MVC frameworks, I may or may not try this framework in the future (must draw the line somewhere).</p>
<p><strong><em>Further Reference</em></strong></p>
<p><a href="http://vojtajina.github.com/html5la/2012-05-30-boston/index.html#/slides/">http://vojtajina.github.com/html5la/2012-05-30-boston/index.html#/slides/</a></p>
<p><a href="https://github.com/vojtajina/ng-todo">https://github.com/vojtajina/ng-todo</a></p>
<p><a href="http://angularjs.org/#/list">http://angularjs.org/#/list</a></p>
<h4><a name="newDogs"></a>New Dogs, Old Tricks (or DOJO already did that)</h4>
<p>I always enjoy Rebecca&#8217;s presentations. She has the right mix of information, humor and  getting off track (and getting back on track). I really liked the extension of the Backbone.View resulting in a SuperView. This is an approach that I will be implementing in the future.</p>
<p><strong><em>Further Reference</em></strong></p>
<p><a href="https://github.com/rmurphey/srchr-demo">https://github.com/rmurphey/srchr-demo</a></p>
<p><a href="http://pinboard.in/u:rmurphey/t:new-dogs-old-tricks/">http://pinboard.in/u:rmurphey/t:new-dogs-old-tricks/</a></p>
<p><a href="http://dl.dropbox.com/u/2916642/code/superview/base.html#section-8">http://dl.dropbox.com/u/2916642/code/superview/base.html#section-8</a></p>
<h3><a name="day2"></a>Day 2</h3>
<h4><a name="lumbar"></a>Lumbar Support</h4>
<p>Brad&#8217;s presentation was chock full of various gotchas that were very informative. I especially liked the SupermodelJS that he had created in order to track the model relationships. I have used <a href="https://github.com/PaulUithol/Backbone-relational" target="_blank">Backbone relational</a> in the past and will definitely be considering this extension.</p>
<p><strong><em>Further Reference</em></strong></p>
<p><a href="https://speakerdeck.com/u/braddunbar/p/lumbar-support">https://speakerdeck.com/u/braddunbar/p/lumbar-support</a></p>
<p><a href="http://pathable.github.com/supermodel/">http://pathable.github.com/supermodel/</a></p>
<h4><a name="largeProject"></a>Migrating a Large Project to Backbone</h4>
<p>Sam&#8217;s experience mirrors the current project that I am starting. I would have loved to sit down and talk further with Sam regarding his experience but alas time did not allow this (Sam if you are reading this, DM me on twitter if you have time to chat).</p>
<p><strong><em>Further Reference</em></strong></p>
<p><a href="http://lanyrd.com/2012/backboneconf/stpyh/">http://lanyrd.com/2012/backboneconf/stpyh/</a></p>
<p><a href="http://ricostacruz.com/backbone-patterns/#jst_templates">http://ricostacruz.com/backbone-patterns/</a></p>
<h4><a name="realtime"></a>Real-World with Realtime</h4>
<p>This was certainly the most entertaining presentation of the conference (the song in the middle was quite courageous). I have not had the privilege to work on a real-time app but hopefully in the near future I will have the chance and take advantage of the wisdom given in this presentation.</p>
<p><strong><em>Further Reference</em></strong></p>
<p><a href="https://speakerdeck.com/u/henrikjoreteg/p/real-world-realtime-with-backbone">https://speakerdeck.com/u/henrikjoreteg/p/real-world-realtime-with-backbone</a></p>
<p><a href="http://andyet.net/blog/tag/backbone/">http://andyet.net/blog/tag/backbone/</a></p>
<h4><a name="airbnb"></a>Building Robust Backbone Applications: AirBnb&#8217;s Journey Into Mobile Web</h4>
<p>I wanted to applaud Harrison&#8217;s bravery for tackling an endeavor like this and coming through with a great product. To start a mobile project, with such a close deadline and selecting Backbone and Coffeescript while not having experience in any of them was as Harrison mentioned &#8220;jumping off a cliff and try to build wings on the way down&#8221;. The amazing part is that they did build those wings!!</p>
<p><strong><em>Further Reference</em></strong></p>
<p><a href="https://speakerdeck.com/u/hshoff/p/airbnbs-journey-into-mobile-web" target="_blank">https://speakerdeck.com/u/hshoff/p/airbnbs-journey-into-mobile-web</a></p>
<p><a href="http://airbnb.com" target="_blank">http://airbnb.com</a></p>
<h4><a name="yapp"></a>Y.App: Coordinating URL Navigation, Routing, and Managing Views</h4>
<p>Eric did a great job outlining the difference in performance between full path URLs and hash tag event based URLs. However I don&#8217;t think I agree with the need to steer away from hash tag event based URLs. In the single page applications that I have created, this has been an essential  part of the process. His presentation is something that I will have read further on and mull it over.</p>
<p><strong><em>Further Reference</em></strong></p>
<p><a href="https://speakerdeck.com/u/ericf/p/yapp-coordinating-url-navigation-routing-and-managing-views">https://speakerdeck.com/u/ericf/p/yapp-coordinating-url-navigation-routing-and-managing-views</a></p>
<h4><a name="pinocchio"></a>The Plight of Pinocchio: JavaScript&#8217;s Quest to Become a Real Language</h4>
<p>TEST DRIVEN DEVELOPMENT, what a concept!! Implementing this approach is a great idea but at times getting your team members to follow this path has been a feat for the centuries. However it is great to hear that others are beating this drum.</p>
<p><strong><em>Further Reference</em></strong></p>
<p><a href="http://opensoul.org/blog/archives/2012/05/16/the-plight-of-pinocchio/">http://opensoul.org/blog/archives/2012/05/16/the-plight-of-pinocchio/</a></p>
<p>I had great time at this event and would like to thank <a href="http://bocoup.com" target="_blank">Bocoup</a> and all involved in organizing this.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/innovatorylife.wordpress.com/296/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/innovatorylife.wordpress.com/296/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=296&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://innovatorylife.com/2012/06/01/what-i-learned-at-the-backbone-conference-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/725a2db6f323225ccdb1aec5f6dc9202?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kianoshp</media:title>
		</media:content>
	</item>
		<item>
		<title>Intro to SASS CSS Presentation</title>
		<link>http://innovatorylife.com/2012/05/24/intro-to-sass-css-presentation/</link>
		<comments>http://innovatorylife.com/2012/05/24/intro-to-sass-css-presentation/#comments</comments>
		<pubDate>Thu, 24 May 2012 03:31:32 +0000</pubDate>
		<dc:creator>Kianosh Pourian</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[COMPASS]]></category>
		<category><![CDATA[SASS CSS]]></category>

		<guid isPermaLink="false">http://innovatorylife.com/?p=287</guid>
		<description><![CDATA[The following is a summary of the presentation that I gave at BrightCove headquarters in Boston, MA for the Front end developers meetup with the topic of &#8220;An all-Sass evening: Tips, Tricks and Best-practices on using Sass and Compass&#8221; on May 23rd 2012. Presentation slideshow: Intro to SASS CSS View more presentations from kianoshp Demo [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=287&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>The following is a summary of the presentation that I gave at <a title="BrightCove" href="http://www.brightcove.com/en/" target="_blank">BrightCove</a> headquarters in Boston, MA for the Front end developers meetup with the topic of &#8220;<a title="Front end developer meetup on SASS CSS" href="http://www.meetup.com/Boston-Frontend-Developers/events/64617572/" target="_blank">An all-Sass evening: Tips, Tricks and Best-practices on using Sass and Compass</a>&#8221; on May 23rd 2012.</p>
<h3>Presentation slideshow:</h3>
<div id="__ss_13051799" style="width:425px;"><strong><a title="Intro to SASS CSS" href="http://www.slideshare.net/kianoshp/intro-tosass" target="_blank">Intro to SASS CSS</a></strong><iframe src='http://www.slideshare.net/slideshow/embed_code/13051799' width='425' height='348' scrolling='no'></iframe></p>
<div style="padding:5px 0 12px;">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/kianoshp" target="_blank">kianoshp</a></div>
</div>
<h3 style="padding:5px 0 12px;">Demo files</h3>
<div style="padding:5px 0 12px;"><a title="Intro to SASS presentation files" href="http://kiano.sh/JoYG3t" target="_blank">Intro to SASS CSS Github repo</a></div>
<h3 style="padding:5px 0 12px;">Video</h3>
<div style="padding:5px 0 12px;">Coming soon</div>
<h3 style="padding:5px 0 12px;">Further Reading</h3>
<div style="padding:5px 0 12px;">
<ul>
<li>SASS CSS &#8211; <a href="http://www.sass-lang.com">www.sass-lang.com</a></li>
<li>COMPASS &#8211; <a href="http://compass-style.org/">http://compass-style.org/</a></li>
<li>SASS Cocktails &#8211; collections of SASS mixins and functions &#8211; <a href="http://kiano.sh/J89RI9">http://kiano.sh/J89RI9</a></li>
<li>SASS CSS Boilerplate &#8211; <a href="http://kiano.sh/IlZt2b">http://kiano.sh/IlZt2b</a></li>
<li>Thoughtbot/bourbon &#8211; Series of mixins and functions &#8211; <a href="http://kiano.sh/IQNOZ6">http://kiano.sh/IQNOZ6</a></li>
<li>How to write a well structured CSS &#8211; Part 1 <a href="http://kiano.sh/Inxxym">http://kiano.sh/Inxxym</a></li>
<li>How to write a well structured CSS - Part 2 <a title="How to write a well structured CSS - part 2" href="http://kiano.sh/LaVS65">http://kiano.sh/LaVS65</a></li>
</ul>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/innovatorylife.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/innovatorylife.wordpress.com/287/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=287&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://innovatorylife.com/2012/05/24/intro-to-sass-css-presentation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/725a2db6f323225ccdb1aec5f6dc9202?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kianoshp</media:title>
		</media:content>
	</item>
		<item>
		<title>How to write a well structured CSS &#8211; Part II</title>
		<link>http://innovatorylife.com/2012/05/21/how-to-write-a-well-structured-css-part-ii/</link>
		<comments>http://innovatorylife.com/2012/05/21/how-to-write-a-well-structured-css-part-ii/#comments</comments>
		<pubDate>Mon, 21 May 2012 15:54:15 +0000</pubDate>
		<dc:creator>Kianosh Pourian</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[UI Development]]></category>

		<guid isPermaLink="false">http://innovatorylife.com/?p=240</guid>
		<description><![CDATA[In this part 2 of &#8220;How to write a well structured CSS&#8221;, we will focus on the important yet sometimes forgotten aspects of writing CSS. The areas that I would like to outline are: Know the CSS Specificity and inheritance rules CSS Lint Commenting Beautification: ensuring that the CSS code that is written follows a [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=240&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>In this part 2 of &#8220;How to write a well structured CSS&#8221;, we will focus on the important yet sometimes forgotten aspects of writing CSS. The areas that I would like to outline are:</p>
<ul>
<li>Know the CSS Specificity and inheritance rules</li>
<li>CSS Lint</li>
<li>Commenting</li>
<li>Beautification: ensuring that the CSS code that is written follows a coding standard for example curly bracket placement or indentation</li>
<li>Use of pre-processors like SASS, COMPASS, LESS, and STYLUS</li>
</ul>
<p>To review the topics that were discussed in <a title="How to write a well structured CSS – Part I" href="http://innovatorylife.com/2012/04/30/how-to-write-a-well-structured-css-part-i/">part one</a> of this post,the rules were:</p>
<ul>
<li>DRY &#8211; Don&#8217;t Repeat Yourself. This means taking advantage of the cascading rules of the stylesheet and writing the minimal amount of CSS in order to apply the styling.</li>
<li>Performance &#8211; to keep the CSS file lightweight, the above rule (DRY) is very important. Consider the CSS specificity and inheritance for better performance (there is a great article on Smashing magazine regarding <a href="http://coding.smashingmagazine.com/2010/04/07/css-specificity-and-inheritance/">CSS Specificity</a>). Also minimizing and removing comments is also important, therefore running the CSS through a minification process can help in keeping it lightweight.</li>
<li>Know when to place all CSS styles in a single file and when to break up modular portions of the CSS into it own CSS file.</li>
<li>Follow front end development separation of concerns tightly which means that everything that concerns presentation styles should be in the CSS (and only in the CSS).</li>
</ul>
<p>We had also outlined a few guidelines:</p>
<ul>
<li>Start with a reset or normalize CSS</li>
<li>Set default values</li>
<li>Follow the DOM</li>
<li>Class begins</li>
</ul>
<p>Note: In regards to the &#8220;Class begins&#8221; guideline where we talked about creating classes as they are needed for styling. This concept follows the rule of single responsibility principle. Harry Roberts of csswizardry.com wrote a great article regarding the <a title="The single responsibility principle applied to CSS" href="http://kiano.sh/MnDuf4">single responsibility principle applied to CSS</a>.</p>
<p>Continuing with further CSS guidelines:</p>
<h3><strong>CSS Specificity and inheritance</strong></h3>
<p>I am not a big fan of using &#8220;!important&#8221; in a CSS file. I know that it exists, <a title="How to use '!important' in CSS " href="http://coding.smashingmagazine.com/2010/11/02/the-important-css-declaration-how-and-when-to-use-it/">what it is used for</a>, and I know that at times it is necessary. I believe that every CSS file should get a limit of 10 applications of &#8216;!important&#8217; in it (even less for small sites), and any overuse of this rule by a developer is to be considered heretical and may cause the revocation of their CSS badge.</p>
<p>CSS specificity and inheritance is what the &#8220;cascading&#8221; definition in CSS is all about. Used correctly and it will help not only facilitate better writing of CSS but it will also help in debugging an errant CSS style.</p>
<p>Although this is not a simple concept to grasp, however if there is any recommendation I can make is that &#8211; LEARN AND UNDERSTAND THIS CONCEPT!! Here are some really great reference material:</p>
<ul>
<li>CSS Specificity: Things you should know <a title="CSS Specificity: Things you should know" href="http://kiano.sh/MnDQm2">http://kiano.sh/MnDQm2</a></li>
<li>CSS Specificity and Inheritance <a title="CSS Specificity and Inheritance" href="http://kiano.sh/MnDVpX">http://kiano.sh/MnDVpX</a></li>
<li>Specifics on CSS Specificity <a title="Specifics on CSS Specificity" href="http://kiano.sh/MnE0K0">http://kiano.sh/MnE0K0</a></li>
<li>Specificity calculators:
<ul>
<li>Star Wars approach <a title="Specificity calculator - Star Wars approach" href="http://kiano.sh/MnE64m">http://kiano.sh/MnE64m</a></li>
<li>Poker game approach <a title="Specificity calculator - Poker player approach" href="http://kiano.sh/MnE8cL">http://kiano.sh/MnE8cL</a></li>
</ul>
</li>
</ul>
<h3><strong>CSS Lint</strong></h3>
<p><a title="CSS Lint" href="http://csslint.net/">CSS Lint</a>  a tool written by <a title="Nicole Sullivan" href="http://twitter.com/stubbornella">Nicole Sullivan</a> which validates CSS code. This is great tool to ensure that your CSS code is valid. I have used this in the past to consistently validate my CSS code. On the major benefits of this tool is that it can also be run from the command line  and incorporated into the build system (<a title="CSS Lint Command Line Interface" href="https://github.com/stubbornella/csslint/wiki/Command-line-interface">https://github.com/stubbornella/csslint/wiki/Command-line-interface</a>)</p>
<h3><strong>Comments</strong></h3>
<p>As deadlines approach, sometimes developers cut what may be considered non-essential processes, &#8220;comments&#8221; are one of them. I know this because I am guilty of it. As we know when the deadline passes and with further development, we touch and review old code; there are times when we ask out loud &#8220;Why did I write this code this way?&#8221; (this point is 1000 times exasperated when trying to read someone else&#8217;s code).</p>
<p>So make commenting in all aspects of coding an essential habit.The approach I take for commenting is as follows:</p>
<ul>
<li>Add comments to outline a section. To indicate the beginning and the ending of a certain section.</li>
</ul>
<pre class="brush: css; title: ; notranslate">
/* ==|== primary styles =====================================================
 All CSS pertaining to the site will go here. Also keep in mind that any mixins created
 will go in '_mixins.scss' file. All functions will go in the specific functions file labeled
 '_&lt;function_name&gt;.scss
 Author: Kianosh Pourian

Comment Legend
 prefix = tpl = Template Styles

================================================================== */
/* CSS code will go here */

/* ==|== end primary styles ========================================== */
</pre>
<ul>
<li>Also use comments to explain some of the classes, how, and even where they should be used</li>
</ul>
<pre class="brush: css; title: ; notranslate">
/* ==|== header classes ======================================
 These classes apply to the header. They are as follows:
 1. tpl-subBrand: sub-branding section of the site. Located on the top left.
 2. tpl-userInfo-linear-gradient: class to apply gradient to the element.
 3. tpl-userInfo-Cont: container showing logged in user's information.
   a. tpl-userInfo-photoCont: container showing the user's photo.
   b. tpl-userInfo-first &amp; tpl-userInfo-las: borders flanking the user
     information section.
 ============================================================== */
.tpl-subBrand {
   @include add-margin(all, 7px 0 0 10px);
}
.tpl-userInfo-linear-gradient {
   @include linear-gradient(top, #405979 0%, #334455 100%);
}

.tpl-userInfo-Cont {
   height: 55px;
   width: 315px;
   @include add-border(all, 1px, solid, #121212);
   @include add-border-radius(all, 5px);
   @include add-margin(all, 15px 15px 0 0);
   @include box-shadow(false, 0, 0, 6px, 1px, #121212);
   a {
     background: url(&quot;../img/sprites/coreSprite.png&quot;);
   }
.tpl-userInfo-photoCont {
     background: #333;
     height: 40px;
     width: 40px;
     @include add-border(all, 1px, solid, #2b2b2b);
     @include add-border-radius(all, 3px);
     @include add-margin(all, 7px 30px 0 0);
   }
   .tpl-userInfo-first {
     left: 0px;
     @include add-border-radius(top-left, 5px);
     @include add-border-radius(bottom-left, 5px);
     @include box-shadow(true, -4px, 0, 6px, -3px, #000);
     a {
       background-position: -0px -0px;
     }
   }
   .tpl-userInfo-last {
     right: 0px;
     @include add-border-radius(top-right, 5px);
     @include add-border-radius(bottom-right, 5px);
     @include box-shadow(true, 4px, 0, 6px, -3px, #000);
     a {
       background-position: -20px -0px;
     }
   }
}//end .tpl-userInfo-Cont
/* ==|== end header styles ================================== */
</pre>
<ul>
<li>Inline comments should be used sparingly and as needed.</li>
</ul>
<h3><strong>Beautification (coding standards)</strong></h3>
<p>Following a coding standard will not only make the code more readable but also help in finding issues faster. Proper indentation and syntax highlighting should be set and followed. There are several CSS beautifier tools that can be used for this effort or better yet, as you are coding ensure that you are following the coding standards that has been agreed upon. Here are some CSS beautifiers:</p>
<ul>
<li><a title="Code Beautifier" href="http://www.codebeautifier.com/">http://www.codebeautifier.com/</a></li>
<li><a title="CSS Beautify" href="http://cssbeautify.com/">http://cssbeautify.com/</a></li>
<li><a title="Format CSS" href="http://www.lonniebest.com/FormatCSS/">http://www.lonniebest.com/FormatCSS/</a></li>
</ul>
<h3><strong>To pre-process or not to pre-process, that is the question</strong></h3>
<p>There are different views about whether to use pre-processors like SASS, COMPASS, LESS, STYLUS, etc&#8230; This article is not about convincing you in one way or another (more talks about pre-processors coming up in other blog posts). Frankly in order to write a well structured CSS, the use of pre-processors is not necessary. However in regards to using pre-processors, I will give the following advice:</p>
<ul>
<li>Know your CSS: pre-processors are only tools that only help in writing CSS proficiently; what it will not do is write proper CSS. So know CSS well, whether you are using pre-processors or not.</li>
<li>Another tool in your arsenal: Pre-processor like SASS and LESS give writing CSS a new dimension of dynamic coding which did not exist. In my humble opinion, anything that can help in making writing CSS easier and more robust is aces in my book.</li>
<li>One last point: Use them! I have been using SASS for the past year and I really have enjoyed it. It has made the process of writing CSS very fluid and easy.</li>
</ul>
<h3><strong>Further reading</strong></h3>
<ul>
<li>Pre-processors:
<ul>
<li><a title="SASS CSS" href="http://sass-lang.com">SASS</a></li>
<li><a title="LESS CSS" href="http://lesscss.org/">LESS</a></li>
<li><a title="Stylus CSS framework" href="http://learnboost.github.com/stylus/">STYLUS</a></li>
<li><a title="COMPASS CSS" href="http://compass-style.org/">COMPASS</a></li>
</ul>
</li>
</ul>
<h3></h3>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/innovatorylife.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/innovatorylife.wordpress.com/240/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=240&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://innovatorylife.com/2012/05/21/how-to-write-a-well-structured-css-part-ii/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/725a2db6f323225ccdb1aec5f6dc9202?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kianoshp</media:title>
		</media:content>
	</item>
		<item>
		<title>How to write a well structured CSS &#8211; Part I</title>
		<link>http://innovatorylife.com/2012/04/30/how-to-write-a-well-structured-css-part-i/</link>
		<comments>http://innovatorylife.com/2012/04/30/how-to-write-a-well-structured-css-part-i/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 12:24:16 +0000</pubDate>
		<dc:creator>Kianosh Pourian</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://innovatorylife.com/?p=61</guid>
		<description><![CDATA[Special thanks to Nick Cooley for his help and advice. CSS patterns, is there such a thing? A pattern of writing proper and well-structured CSS? There are great articles by Jonathan Snook regarding Decoupling HTML and CSS and Nicole Sullivan regarding Object Oriented CSS, however they do not outline how to write a well structured [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=61&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p style="text-align:right;"><span style="color:#800000;">Special thanks to <a href="http://twitter.com/nickcooley">Nick Cooley</a> for his help and advice.</span></p>
<p>CSS patterns, is there such a thing? A pattern of writing proper and well-structured CSS? There are great articles by Jonathan Snook regarding <a href="http://coding.smashingmagazine.com/2012/04/20/decoupling-html-from-css/">Decoupling HTML and CSS</a> and Nicole Sullivan regarding <a href="https://github.com/stubbornella/oocss/wiki">Object Oriented CSS</a>, however they do not outline how to write a well structured CSS.</p>
<p>So the question is &#8220;is there a point of reference on the common standards for writing a well structured CSS?&#8221;. As I was trying to explain to a junior developer how to set up a well structured CSS, I was trying to find references on the internet to point them to it. There were a lot of issues I found with the results I got from a Google search:</p>
<ul>
<li>Most of the articles were 2 or more years old. Not that CSS has changed much since (other than the ever changing CSS3) however we have learned quite a bit on how to set up a well-structured CSS that does require revisiting.</li>
<li>Most of the articles were very light in examples and/or guidance.</li>
<li>There were plenty of aricles on the syntax of CSS but not much on proper structuring of the file</li>
</ul>
<p>As a result, I decided to outline the approach I take in writing the CSS for every project. I understand that there are different approaches to writing CSS and some may agree or disagree with my approach and I welcome that! I am always eager to discussing  a better approach, so feel free to write your agreement or disagreement in the comments section.</p>
<p>For every CSS project, I follow these general rules:</p>
<ul>
<li>DRY &#8211; Don&#8217;t Repeat Yourself. This means taking advantage of the cascading rules of the stylesheet and writing the minimal amount of CSS in order to apply the styling.</li>
<li>Performance &#8211; to keep the CSS file lightweight, the above rule (DRY) is very important. Consider the CSS specificity and inheritance for better performance (there is a great article on Smashing magazine regarding <a href="http://coding.smashingmagazine.com/2010/04/07/css-specificity-and-inheritance/">CSS Specificity</a>). Also minimizing and removing comments is also important, therefore running the CSS through a minification process can help in keeping it lightweight.</li>
<li>Know when to place all CSS styles in a single file and when to break up modular portions of the CSS into it own CSS file.</li>
<li>Follow front end development separation of concerns tightly which means that everything that concerns presentation styles should be in the CSS (and only in the CSS).</li>
</ul>
<p><strong>Side Note:</strong> The &#8216;DRY&#8217; concept of CSS can be better implemented by using tools like <a title="SASS CSS" href="http://sass-lang.com/">SASS</a>, <a title="LESS CSS" href="http://lesscss.org/">LESS</a>, and <a title="COMPASS CSS" href="http://compass-style.org/">COMPASS</a>. Consider looking into these tools and using them in your next project.</p>
<p>With the above rules in mind, here are some guidelines to follow:</p>
<h3><strong>Start with a reset or normalize CSS</strong></h3>
<p><a title="Reset CSS" href="http://meyerweb.com/eric/tools/css/reset/">Reset CSS</a> as Eric Meyers states &#8220;The goal of a reset stylesheet is to reduce browser inconsistencies in things like default line heights, margins and font sizes of headings, and so on.&#8221;</p>
<p><a title="Normalize CSS" href="http://necolas.github.com/normalize.css/">Normalize CSS</a>  a project started by <a href="http://twitter.com/necolas">Nicolas Gallagher</a> and <a href="https://twitter.com/jon_neal">Jonathan Neal</a> performs the following:</p>
<ul>
<li><strong>Preserves useful defaults</strong>, unlike many CSS resets.</li>
<li><strong>Normalizes styles</strong> for a wide range of HTML elements.</li>
<li><strong>Corrects bugs</strong> and common browser inconsistencies.</li>
<li><strong>Improves usability</strong> with subtle improvements.</li>
<li><strong>Explains what code does</strong> using detailed comments.</li>
</ul>
<p>The benefit of using either reset CSS or normalize CSS is that it will give the canvas (i.e. presentation layer) a <strong>consistent</strong> look in a world marred by inconsistent browser interpertation of the CSS styling. The difference between reset CSS and normalize CSS is that reset CSS will wipe the canvas clean regardless of which browser is being used while normalize CSS will preserve some defaults and updating the inconsistent ones. Regardless of which one is used, one of the above should be your starting point.</p>
<h3><strong>Set default values</strong></h3>
<p>Once the reset or normalize CSS has been set, set default values that will govern the entire site. At this point, the governing rule or global defaults like font-family, anchor tag settings, input settings, and etc… will be set. The following is an example of global defaults from Tim Wright&#8217;s site <a href="http://www.csskarma.com">www.csskarma.com</a>:</p>
<pre class="brush: css; title: ; notranslate">
	html {
		text-align:center;
		overflow-y:scroll;
		-webkit-font-smoothing:antialiased;
		-webkit-text-size-adjust:none;
		   -moz-text-size-adjust:none;
		    -ms-text-size-adjust:none;
		        text-size-adjust:none; }
	body {
		text-align:left;
		color:#333;
		position:relative;
		font: 0.75em/1.5 Sans-serif; }

	h1,h2,h3,h4,h5,h6 {
		margin-bottom:24px;
		font-weight:700; }

	h1 {
		font-size:1.5em;
		line-height:1em; }

	h2 {
		font-size:1.375em;
		line-height:1.0909em; }

	h3 {
		font-size:1.25em;
		line-height:1.2em; }

	h4 {
		font-size:1.125em;
		line-height:1.333em; }

	h5,h6 {
		font-size:1em;
		line-height:1.5em; }

	p,ul,ol,dl {
		font-size:1em;
		line-height:1.5;
		margin-bottom:24px; }

	ol ol,ul ul {
		margin:0 0 0 60px; }

	blockquote {
		margin: 0 60px 0 45px;
		border-left: 5px solid #ccc;
		padding-left: 10px;
		text-indent: -0.4em; }

	pre {
		white-space:pre;
		white-space:pre-wrap;
		white-space:pre-line;
		word-wrap:break-word; }

	/* Anchors */

	a {
		color:#1e80a0;
		overflow:hidden;
		border-bottom:1px solid #ddd;
		text-decoration:none; }

	a:hover {
		border-bottom-color:#bbb; }

</pre>
<h3><strong>Follow the DOM</strong></h3>
<p>What I mean is while reviewing the DOM setup of the HTML, your CSS default for each module/element section should follow the DOM structure and will be set at this point. For example if your DOM is setup as so:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;
	&lt;head&gt;&lt;/head&gt;
	&lt;body&gt;
	&lt;header&gt;
		&lt;section&gt; &lt;/section&gt;
	&lt;/header&gt;
	&lt;!-- side modules --&gt;
	&lt;aside&gt;
		&lt;!-- aside code will go here --&gt;
	&lt;/aside&gt;
	&lt;!-- navigation --&gt;
	&lt;nav&gt;
		&lt;ul&gt;
			&lt;li&gt;&lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;img1.png&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;img2.png&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;img3.png&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;img4.png&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/nav&gt;
	&lt;!-- side modules --&gt;
	&lt;article&gt;
		&lt;section&gt;
			&lt;!-- main header info will go here --&gt;
		&lt;/section&gt;
		&lt;section id=&quot;content&quot;&gt; &lt;/section&gt;
	&lt;/article&gt;
	&lt;footer&gt; &lt;/footer&gt;
	&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Then the CSS will follow the DOM structure and look like so:</p>
<pre class="brush: css; title: ; notranslate">
header {
	height: 88px;
}
header section  {
	position: relative;
	color: #fff;
}
aside  {
	float: right;
	width: 330px;
	color: #fff;
}
nav  {
	margin: 0 345px 20px 0;
	min-width: 800px;
}
nav ul  {
	height: 86px;
	width: 670px;
	margin: auto;
}
nav ul li  {
	float: left;
	height: 64px;
	width: 64px;
	background: #fc0;
	margin: 10px 0 10px 10px;
}
nav ul li img  {
	width: 64px;
	height: 64px;
}
article  {
	background: white url(&quot;../img1.png&quot;) repeat-y;
	border-left: none;
	min-height: 600px;
	margin: 0 345px 0 0;
	position: relative;
	min-height: 600px;
	border: 1px solid #9a9b9b;
	-moz-box-shadow: 1px 0 10px 1px black;
	-webkit-box-shadow: 1px 0 10px 1px black;
	box-shadow: 1px 0 10px 1px black;
}
</pre>
<p>This will allow the CSS to not only mimic the DOM but also you can implement the general style in each module/element section of the page &#8211; another level of cascade for the style that is to be applied to the page. Also consider decoupling the HTML from CSS further and according to an article by <a href="http://coding.smashingmagazine.com/2012/04/20/decoupling-html-from-css/">Jonathan Snook</a> take advantage of child selectors more frequently:</p>
<pre class="brush: css; title: ; notranslate">
nav &gt; ul {
	height: 86px;
	width: 670px;
	margin: auto;
}
nav &gt; ul &gt; li  {
	float: left;
	height: 64px;
	width: 64px;
	background: #fc0;
	margin: 10px 0 10px 10px;
}
</pre>
<h3><strong>Class begins</strong></h3>
<p><a href="http://twitter.com/chriscoyier">Chris Coyier</a> has written a great article regarding when to use IDs vs. when to use classes - <a href="http://css-tricks.com/the-difference-between-id-and-class/">http://css-tricks.com/the-difference-between-id-and-class/</a>. My personal approach is to create classes as needed for styling. There are two types of classes that can be created:</p>
<ul>
<li>specific class &#8211; these classes will be applied to particular area of the site and it is unique to that area. Now if you are thinking &#8220;if it is unique, then why not apply it to an ID&#8221;, you may be right, however then you will restrict yourself to that section of the application may be harder to abstract it later if needed. For example:</li>
</ul>
<pre class="brush: css; title: ; notranslate">
.arrow-up {
	width: 0;
	height: 0;
	border-left: 5px solid transparent;
	border-right: 5px solid transparent;
	border-bottom: 5px solid black;
}
.arrow-down  {
	width: 0;
	height: 0;
	border-left: 20px solid transparent;
	border-right: 20px solid transparent;
	border-top: 20px solid #f00;
}
.arrow-right  {
	width: 0;
	height: 0;
	border-top: 60px solid transparent;
	border-bottom: 60px solid transparent;
	border-left: 60px solid green;
}
.arrow-left  {
	width: 0;
	height: 0;
	border-top: 10px solid transparent;
	border-bottom: 10px solid transparent;
	border-right:10px solid blue;
}
</pre>
<ul>
<li>utility class &#8211; these are classes that will be used throughout the site in order to apply certain styles in different areas. These classes can be a style as simple as setting float left or right or it can be something like:</li>
</ul>
<pre class="brush: css; title: ; notranslate">
.flip-img {
    -moz-transform: scaleX(-1);
    -o-transform: scaleX(-1);
    -webkit-transform: scaleX(-1);
    transform: scaleX(-1);
    filter: FlipH;
    -ms-filter: &quot;FlipH&quot;;
}
.float-lft  {
    float: left;
}
</pre>
<p>A utility class can be applied to any element in the DOM as needed, as you know multiple classes can be added so multiple functional/utility classes can be added to the same element. For example:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;img src=&quot;img/img1.png&quot; class=&quot;flip-img float-lft&quot; alt=&quot;flipped image example&quot; /&gt;
</pre>
<p>Reserve class usage to areas where it cannot be applied to any of the above guidelines. Do not create classes to apply styles to all div elements, for example, and avoid creating a class like this:</p>
<pre class="brush: css; title: ; notranslate">
.div-style {
    background-color: #fff;
    margin: 0 10px 5px 0;
    height: 100%;
}
</pre>
<p>The correct approach is:</p>
<pre class="brush: css; title: ; notranslate">
div {
    height: 100%;
    background-color: #fff;
}
/* the margin setting can be set at the DOM level CSS or in a specific class */
</pre>
<p><strong>Note:</strong> The above examples have been borrowed from Chris Coyiers snippets section of the CSS-tricks site (<a href="http://css-tricks.com/snippets/">http://css-tricks.com/snippets/</a>).</p>
<h3><strong>Conclusion</strong></h3>
<p>These rules and guidelines are essential in building a CSS file that is lightweight and highly performant. In <a title="How to write a well structured CSS - part I" href="http://innovatorylife.com/2012/05/21/how-to-write-a…ed-css-part-ii/">part 2</a> of this post we will review further guidelines in building a well structured CSS file. Stay tuned.</p>
<h3><strong>Further Reading</strong></h3>
<ul>
<li><a href="http://www.css-tricks.com">CSS-tricks</a></li>
<li><a href="http://www.smashingmagazine.com/mastering-css-principles-comprehensive-reference-guide/">Comprehensive CSS Principles</a></li>
<li><a href="https://github.com/stubbornella/oocss/wiki">Nicole Sullivan &#8211; Object Oriented CSS</a></li>
<li><a href="http://smacss.com/">Jonathan Snook &#8211; SMACSS</a></li>
<li><a href="http://vimeo.com/15982903">Jina Bolton &#8211; CSS Workflow</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/innovatorylife.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/innovatorylife.wordpress.com/61/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=61&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://innovatorylife.com/2012/04/30/how-to-write-a-well-structured-css-part-i/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/725a2db6f323225ccdb1aec5f6dc9202?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kianoshp</media:title>
		</media:content>
	</item>
		<item>
		<title>Why large corporations are years behind in technology</title>
		<link>http://innovatorylife.com/2012/01/13/corporations-lagging-in-technology/</link>
		<comments>http://innovatorylife.com/2012/01/13/corporations-lagging-in-technology/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 15:19:17 +0000</pubDate>
		<dc:creator>Kianosh Pourian</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[enterprise-it]]></category>
		<category><![CDATA[leadership]]></category>
		<category><![CDATA[software-development]]></category>

		<guid isPermaLink="false">http://innovatorylife.wordpress.com/?p=1</guid>
		<description><![CDATA[In my career I have had the privilege of working for different size companies. I have worked for interactive agencies (a rather fast paced and fun environment), medium size companies, educational institutes, and large corporations (3000+ employees). I have worked in environments where I walk in with shorts and sandals and worked in an environment [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=1&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>In my career I have had the privilege of working for different size companies. I have worked for interactive agencies (a rather fast paced and fun environment), medium size companies, educational institutes, and large corporations (3000+ employees).</p>
<p>I have worked in environments where I walk in with shorts and sandals and worked in an environment where the same shorts and sandals got me a visit to the &#8216;principal&#8217;s&#8217; office. I have worked in an environment where my boss and I shared a beer on a Friday afternoon in his office and also worked in an environment where the boss was hesitant to buy the beer at the bar because he was concerned about him or his company being liable for other&#8217;s drinking.</p>
<p>These environment&#8217;s differ from each other tremendously but I could not tell you which is better than the other &#8211; I know which ones I preferred but I still can&#8217;t intelligently say which method of management is superior to another. And that is not what I am qualified to talk about &#8211; business management was never my forte &#8211; but what I feel qualified to discuss is technology.</p>
<p>And in my experience, large corporations are always behind in technology and hesitant in the adoption of new technology. Some of the reasons behind the lagging in this realm are reasonable and some are not. I am going to attempt to breakdown some of the issues that I have encountered and hopefully try to provide solutions. Here we go:</p>
<h3><strong>Inexperienced managers</strong></h3>
<p>Big corporations are stacked with Vice Presidents, directors, middle managers and the ever-lovingly titled individual contributors (really? shouldn&#8217;t it be &#8216;team&#8217; contributors, how many employees does one see working in a silo or &#8216;individually&#8217;?).</p>
<p>The Vice Presidents and the managers (henceforth referred to as the Witt brothers, Dim and Nit) have offices that are strewn with ink jet printed awards, &#8220;<a title="Good to Great" href="http://http://www.amazon.com/Good-Great-Companies-Leap-Others/dp/0066620996" target="_blank">Good to Great</a>&#8221; book (or similar bland management books), and one or two technology-based books that let&#8217;s be honest, look like they have never been opened or have not been creased passed the first chapter because they fell asleep after the first chapter.</p>
<p>To be fair, there are some managers that have been developers or programmers in the past and do have some technology experience and may be able to make sound decisions, however with the speed of technology advancement; 6 months or more away from hands-on development and that same developer-promoted-to-manager will become slowly out-dated and slowly lose their technical talent.</p>
<p>The flaw is that these managers, low to medium technically experienced ones, are in the forefront of making technology decisions and most of the times they will make the scared, conservative, and wrong decision. As a technology enthusiast, seeing that deer-in-the-headlights look is very discouraging or worst facing the I-know-what-is-best attitude from some managers is horrifying.</p>
<p><strong>Solution</strong>: One solution is to have a technical manager counterpart for every non-technical manager. Since in big corporations this means doubling the workforce and in reality would not be feasible, then a technical architecture group should be created. Now in order for this group to be affective, it needs to be a governing body that must go beyond architectural recommendations. Not a Jedi Knight &#8216;May the force be with you&#8217; type group but a Sith Lord dark side of the force &#8216;don&#8217;t fuck with us or I will force-choke you&#8217; governing body. What I mean is that this group should not just recommend an approach but ensure that the standards have been maintained throughout the project and even go as far as having periodic reviews to ensure the integrity of the standards that have been set are maintained.</p>
<h3><strong>Mediocrity breeds mediocrity</strong></h3>
<p>Some of the burden of promoting new technology does fall on the &#8216;individual contributors&#8217;. If my job description is to maintain a corporate website, well that is just boring. The problem is that the employees that are bored with this type of work, the ones that are always looking for a challenge to better themselves will not stay in order to maintain the same website day in and day out. Which means that the ones that remain are the ones that are looking for a stable position that will lull them into a comfort zone and will be happy to maintain the same product no matter how old and rusty it will become. I apologize for making such a blanket statement, of course not all employees of large corporations fit the above description but unfortunately most do.</p>
<p>This mediocrity is further perpetuated when busy employees don&#8217;t have the time to upgrade their skills and/or the inexperienced managers &#8211; remember the Witt brothers? &#8211; don&#8217;t give them the opportunity.</p>
<p><strong>Solution: </strong>Two words &#8211; Research &amp; Development. This is lacking in big corporations and it is amazing the results that it can produce. It is not a coincidence that companies like Google are so successful,  allowing the employees one day to work on personal projects is liberating for employees and rewarding for the employer (yes that&#8217;s right the EMPLOYER!!) and employees. Even if the project has nothing to do with the core business the fact that there is a &#8216;outside of the box&#8217; thinking (the paradigm most of those bland management books promote) is priceless. Maybe the architectural governing body can sponsor and encourage team exercises/conferences/seminars to promote this type of behavior.</p>
<h3><strong>Don&#8217;t take </strong><strong>away </strong><strong>the free coffee</strong></h3>
<p>In one the companies I worked, initially when I started we had free perks throughout the day, free coffee in the morning, fruit and soda throughout the day, pool table, and fooseball table area for relaxation. From my understanding, this was done to attract the employees to the company during the dot.com boom era of the mid 90s to early 00s.</p>
<p>After working there for six months, slowly the perks were taken away (at this point, we were beyond the boom era and we were in the decline phase). The sad part was that the company did not make the effort to notify the employees that these perks will be taken away, the approach was a much more cowardly one.</p>
<p>Everyday one of the perks were slowly taken away. One day it was the apples, the next it was the skittles, and on and on. I am not sure what the reasoning behind this approach was but did someone actually think that it will go unnoticed. I am not sure what is worst, that they thought it would go unnoticed or that even if it was noticed they did not care.</p>
<p>I agree that the spending of the dot-com era was frivolous however there were some good ideas that came out of that era. Some good ideas that companies like Google, Facebook, and countless other companies did decide to keep.</p>
<p>What is the cost of a free lunch or morning coffee compared to a happy and satisfied employee? It doesn&#8217;t take much to turn a frown upside down (sorry been watching too many kids shows).</p>
<p>I recall that after leaving one of my large corporate jobs, one where I had to dress business casual everyday; my next job was one with a more lax environment where shorts and sandals were welcome. It was amazing to me how much happier and more relaxed I was.</p>
<p><strong>Solution</strong>: dont&#8217; take away the free coffee!! A lot of companies spent most of their energy keeping the customer/client happy sometimes at the expense of their employees. I may be naive, but in my opinion there is only one group that needs to be satisfied and that group is the employees. Subsequently, a happy employee will do everything in their  power to promote the company that they love and eventually try to prove their loyalty by keeping the customer/client happy.</p>
<p>I understand that I may have taken a simplistic view to an over-arching problem; nevertheless sometimes the best answer is the simplest one. I don&#8217;t claim that my solutions will resolve the issues but maybe they are a step in the right direction.</p>
<p>Not sure if I have all the answers but here is my $0.02.</p>
<p>NO REFUNDS!!!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/innovatorylife.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/innovatorylife.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=innovatorylife.com&#038;blog=31496967&#038;post=1&#038;subd=innovatorylife&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://innovatorylife.com/2012/01/13/corporations-lagging-in-technology/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/725a2db6f323225ccdb1aec5f6dc9202?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kianoshp</media:title>
		</media:content>
	</item>
	</channel>
</rss>
