<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Adam Koch &#187; Professional</title>
	<atom:link href="http://www.adamkoch.com/category/professional/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.adamkoch.com</link>
	<description>Front-end Software Developer</description>
	<lastBuildDate>Tue, 24 Jan 2012 02:25:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Toastmasters Officer Training</title>
		<link>http://www.adamkoch.com/2011/01/20/toastmasters-officer-training/</link>
		<comments>http://www.adamkoch.com/2011/01/20/toastmasters-officer-training/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 04:07:34 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Professional]]></category>
		<category><![CDATA[toastmasters]]></category>

		<guid isPermaLink="false">http://www.adamkoch.com/?p=1889</guid>
		<description><![CDATA[I&#8217;m feeling very energized after tonight&#8217;s Toastmasters officer training. Props to LuAnn Anglo and Sheri Wells-Chesley for putting on a good show. There were 4 officers, including myself, from my club in attendance. Our club is called the Railtalkers or Rail Talkers. I&#8217;m still not sure if it is one word or two. We meet [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m feeling very energized after tonight&#8217;s Toastmasters officer training. Props to LuAnn Anglo and Sheri Wells-Chesley for putting on a good show. </p>
<p>There were 4 officers, including myself, from my club in attendance. Our club is called the Railtalkers or Rail Talkers. I&#8217;m still not sure if it is one word or two. We meet every week at the Union Pacific Center in room 1001 from 12-1. I invite all of my co-workers to check us out! http://j.mp/railtalkers (internal link)</p>
<p>Link to our district&#8217;s site: <a href="http://www.d24tm.org/index.html">District 24 Toastmasters</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamkoch.com/2011/01/20/toastmasters-officer-training/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LastPass Uninstall Survey</title>
		<link>http://www.adamkoch.com/2010/12/14/lastpass-uninstall-survey/</link>
		<comments>http://www.adamkoch.com/2010/12/14/lastpass-uninstall-survey/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 13:50:01 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Professional]]></category>

		<guid isPermaLink="false">http://www.adamkoch.com/?p=1886</guid>
		<description><![CDATA[I really just wanted a password manager that would sync to my different computers. I didn&#8217;t need the autologin, but tried it. It rarely worked the way I expected. I didn&#8217;t like that logins for different subdomains brought up the passwords for all of the subdomains on my domain. I tried to change my Google [...]]]></description>
			<content:encoded><![CDATA[<p>I really just wanted a password manager that would sync to my different computers. I didn&#8217;t need the autologin, but tried it. It rarely worked the way I expected. I didn&#8217;t like that logins for different subdomains brought up the passwords for all of the subdomains on my domain. I tried to change my Google password to a more secure one and almost locked myself out of the account because LastPass didn&#8217;t do something (I believe it should have prompted me at some point). The sites I tested, LastPass didn&#8217;t prompt me to autocomplete nor to save a changed password. I tried to import my logins from Password Safe and somehow there were many duplicate entries. LastPass doesn&#8217;t allow a way to merge the duplicates.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamkoch.com/2010/12/14/lastpass-uninstall-survey/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript Optimizations</title>
		<link>http://www.adamkoch.com/2010/11/24/javascript-optimizations/</link>
		<comments>http://www.adamkoch.com/2010/11/24/javascript-optimizations/#comments</comments>
		<pubDate>Wed, 24 Nov 2010 15:05:07 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Professional]]></category>
		<category><![CDATA[closure]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[uglifyjs]]></category>

		<guid isPermaLink="false">http://www.adamkoch.com/?p=1881</guid>
		<description><![CDATA[I was looking at kangax&#8216;s suggestions for Google Closure compression techniques and I wanted to know how UglifyJS handled it. Input: var i = 10000, j = 0.1, k = /[\w]/, m = new Array(1, 2, 3); throw 0.1; Closure: var i=1E4,j=0.1,k=/[\w]/,m=[1,2,3];throw 0.1; UglifyJS: var i=1e4,j=.1,k=/[\w]/,m=new Array(1,2,3);throw.1 Interesting that UglifyJS doesn&#8217;t compress the Array declaration, [...]]]></description>
			<content:encoded><![CDATA[<p>I was looking at <a href="http://twitter.com/kangax">kangax</a>&#8216;s <a href="http://code.google.com/p/closure-compiler/issues/detail?id=36&amp;can=1&amp;q=increment&amp;colspec=ID%20Type%20Status%20Priority%20Component%20Owner%20Summary">suggestions</a> for <a href="http://code.google.com/closure/compiler/">Google Closure</a> compression techniques and I wanted to know how <a href="http://github.com/mishoo/UglifyJS/">UglifyJS</a> handled it.</p>
<p>Input:<code><br />
var i = 10000,<br />
j = 0.1,<br />
k = /[\w]/,<br />
m = new Array(1, 2, 3);<br />
throw 0.1;</code></p>
<p><a href="http://closure-compiler.appspot.com/home">Closure</a>:<br />
<code>var i=1E4,j=0.1,k=/[\w]/,m=[1,2,3];throw 0.1;</code></p>
<p><a href="http://marijnhaverbeke.nl/uglifyjs">UglifyJS</a>:<br />
<code>var i=1e4,j=.1,k=/[\w]/,m=new Array(1,2,3);throw.1</code></p>
<p>Interesting that <a href="http://github.com/mishoo/UglifyJS/">UglifyJS</a> doesn&#8217;t compress the Array declaration, but does compress 2 other statements that <a href="http://code.google.com/closure/compiler/">Google Closure</a> doesn&#8217;t/won&#8217;t.</p>
<p>In UglifyJS&#8217;s <a href="https://github.com/mishoo/UglifyJS/#readme">README</a> it states that Google Closure &#8220;runs terribly slow&#8221;. Why is this an issue? Won&#8217;t you only compress when pushing to prod?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamkoch.com/2010/11/24/javascript-optimizations/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Adam!</title>
		<link>http://www.adamkoch.com/2010/10/23/adam/</link>
		<comments>http://www.adamkoch.com/2010/10/23/adam/#comments</comments>
		<pubDate>Sat, 23 Oct 2010 17:50:03 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Professional]]></category>

		<guid isPermaLink="false">http://www.adamkoch.com/?p=1879</guid>
		<description><![CDATA[Hear what people are saying about Adam! Dedicated and fights for what is right. Focuses on quality in his work. I like his listening skills. Adam is always ready to help others. Always provides excellent out of the box thinking for technical problems. Excellent and well rounded technical skills. Amazing code documentation. Very good at [...]]]></description>
			<content:encoded><![CDATA[<p><em>Hear what people are saying about Adam!</em></p>
<p>Dedicated and fights for what is right.</p>
<p>Focuses on quality in his work.</p>
<p>I like his listening skills. Adam is always ready to help others.</p>
<p>Always provides excellent out of the box thinking for technical problems.</p>
<p>Excellent and well rounded technical skills. Amazing code documentation. Very good at trying out new technologies and integrating them into your projects. I learn things from him! I can tell he has a passion for this stuff, which is a rare commodity.</p>
<p>If I ever have any tech questions Adam is the first person I would ask. I appreciate how he gets things done without complaining.</p>
<p>Adam seems to always have a positive, happy attitude. Sometimes things at work can burden us, but Adam will say something funny and everyone will laugh even early on a Monday. Thanks!</p>
<p>Great sense of detail and ability to find things that others overlook. Passion for the job, quality, and the people is evident in everything he does.</p>
<p>A patient collaborator that values your input.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamkoch.com/2010/10/23/adam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Command Prompt Shortcut</title>
		<link>http://www.adamkoch.com/2010/02/22/command-prompt-shortcut/</link>
		<comments>http://www.adamkoch.com/2010/02/22/command-prompt-shortcut/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 20:07:20 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Professional]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[command prompt]]></category>
		<category><![CDATA[DOS]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[shortcut]]></category>

		<guid isPermaLink="false">http://www.adamkoch.com/?p=1852</guid>
		<description><![CDATA[I found this to work pretty well as a command prompt shortcut. You can copy the file to any directory and it will open the command prompt in that directory while also running a script to set the environment. Target: %COMSPEC% /K [script name] Start in: %CD%]]></description>
			<content:encoded><![CDATA[<p>I found this to work pretty well as a command prompt shortcut. You can copy the file to any directory and it will open the command prompt in that directory while also running a script to set the environment.</p>
<p>Target: %COMSPEC% /K [script name]<br />
Start in: %CD%</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamkoch.com/2010/02/22/command-prompt-shortcut/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>navigator.appVersion</title>
		<link>http://www.adamkoch.com/2010/02/05/navigator-appversion/</link>
		<comments>http://www.adamkoch.com/2010/02/05/navigator-appversion/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 20:24:53 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Professional]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.adamkoch.com/?p=1844</guid>
		<description><![CDATA[Wow. This is messed up. Here is a table of the browsers I have at my disposal and the returned value from the JavaScript variable &#8220;navigator.appVersion&#8221;. Browser navigator.appVersion Chrome 5.0 5.0 Opera 10.00 9.80 IE 8.0 4.0 IE 7.0 4.0 IE 6.0 4.0 Safari 4.0 5.0 Safari 3.2 5.0 Firefox 3.6 5.0 Firefox 3.5 5.0 [...]]]></description>
			<content:encoded><![CDATA[<p>Wow. This is messed up. Here is a table of the browsers I have at my disposal and the returned value from the JavaScript variable &#8220;navigator.appVersion&#8221;.</p>
<table>
<tr>
<th>Browser</th>
<th>navigator.appVersion</th>
</tr>
<tr>
<td>Chrome 5.0</td>
<td>5.0</td>
</tr>
<tr>
<td>Opera 10.00</td>
<td>9.80</td>
</tr>
<tr>
<td>IE 8.0</td>
<td>4.0</td>
</tr>
<tr>
<td>IE 7.0</td>
<td>4.0</td>
</tr>
<tr>
<td>IE 6.0</td>
<td>4.0</td>
</tr>
<tr>
<td>Safari 4.0</td>
<td>5.0</td>
</tr>
<tr>
<td>Safari 3.2</td>
<td>5.0</td>
</tr>
<tr>
<td>Firefox 3.6</td>
<td>5.0</td>
</tr>
<tr>
<td>Firefox 3.5</td>
<td>5.0</td>
</tr>
<tr>
<td>Firefox 2.0</td>
<td>5.0</td>
</tr>
</table>
<p>Ok browser makers. Let&#8217;s start over. I don&#8217;t think any site is using the navigator.appVersion anymore so now is as good of time as ever to start fresh. What do you say?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamkoch.com/2010/02/05/navigator-appversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comparison of 10 CSS Compressors</title>
		<link>http://www.adamkoch.com/2010/01/28/comparison-of-10-css-compressors/</link>
		<comments>http://www.adamkoch.com/2010/01/28/comparison-of-10-css-compressors/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 02:05:00 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Professional]]></category>
		<category><![CDATA[compressor]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.adamkoch.com/?p=1730</guid>
		<description><![CDATA[I decided to evaluate different CSS compressors to see which one was &#34;the best&#34;. I really didn&#8217;t expect it to take a week to put this together. Along the way I discovered more ways of compression: some from the tools I evaluated and some I thought of along the way. I began my research by [...]]]></description>
			<content:encoded><![CDATA[<p><!--start_raw--></p>
<style type="text/css">
h2 {
    margin-top: 20px;
}
h2:first-child {
    margin-top: 0px;
}
h3 {
    margin-top: 25px;
    margin-bottom: -10px;
}
.fail {
    background-color: red;
}
.some {
    background-color: #ff0;
}
.pass {
    background-color: green;
}
.almost {
    background-color: #990;
}
.fail, .some, .pass, .almost {
    color: black;
}
th {
    vertical-align: bottom;
}
#a td, #a th {
    border: solid #000 1px;
    border-width: 1px 0;
}
#a tr:first-child td, #a tr:first-child th {
    border: none;
    border-right: solid #000 1px;
}
#a tr:first-child td {
    border: none;
    border-left: solid #000 1px;
}
</style>
<p>I decided to evaluate different CSS compressors to see which one was &quot;the best&quot;. I really didn&#8217;t expect it to take a week to put this together. Along the way I discovered more ways of compression: some from the tools I evaluated and some I thought of along the way.</p>
<p>I began my research by taking the list of 10 compressors from <a href="http://designshack.co.uk/">Design Shack&#8217;s</a> <a href="http://designshack.co.uk/articles/css/18-css-compression-tools-and-techniques">18 CSS Compression Tools and Techniques article</a> by <a title="Posts by Joshua Johnson" href="http://designshack.co.uk/author/joshuajohnson/">Joshua Johnson</a>. I replaced one with the tool I currently use, <a href="http://developer.yahoo.com/yui/compressor/">YUI compressor</a>. <a href="http://developer.yahoo.com/yui/compressor/">YUI compressor</a> is the only tool that can be downloaded and added to the build process. I also consulted the wonderful resource found at <a href="http://www.lotterypost.com/css-compress.aspx">Lottery Post</a>. The next step was to create a <a href="/10csscompressors/simple.css">CSS file</a>, feed it to each of the compressors and compared them. I was going to use the color name &#8220;ForestGreen&#8221; but because it wouldn&#8217;t pass <a href="http://jigsaw.w3.org/css-validator/">CSS validation</a> I used the CSS-compliant color name &#8220;fuchsia&#8221;. The original file has a size of 4.01KB. Keeping the CSS file simple was difficult. Compressors were thrown off I placed comments in strange places, but in the end I left those fringe cases out.</p>
<h2>Compressors</h2>
<p>Here are the compressors, listed alphabetically.</p>
<ul>
<li><a href="#arantius">Arantius CSS Compressor</a></li>
<li><a href="#cleancss">CleanCSS</a></li>
<li><a href="#csscompressor">CSS Compressor</a></li>
<li><a href="#cssdrive">CSS Drive</a></li>
<li><a href="#cssoptimiser">CSS Optimiser</a></li>
<li><a href="#lotterypost">Lottery Post</a></li>
<li><a href="#phpinsider">PHP Insider</a></li>
<li><a href="#pingates">Pingates</a></li>
<li><a href="#sevenforty">Seven-forty</a></li>
<li><a href="#yui">YUI compressor</a></li>
</ul>
<h2>Compression Techniques</h2>
<p>The compression techniques that I was looking for spanned from &quot;simple and expected&quot; to &quot;difficult and potentially behavior-changing&quot;. <a href="http://www.lotterypost.com/css-compress.aspx">Lottery Post</a> does a good job explaining some advanced compression techniques and why they are dangerous. I decided to break up the compression techniques into categories.</p>
<ol>
<li>Safe</li>
<li>Unconventional</li>
<li>Dangerous</li>
</ol>
<h3>Safe</h3>
<ol>
<li>Removes comments</li>
<li>Removes whitespace</li>
<li>Removes empty blocks</li>
<li>Removes decimals</li>
<li>Removes units from zero values&#038;sup1</li>
<li>Removes quotes from URIs</li>
<li>Reduces margin, padding, border-width</li>
<li>Compresses hex colors</li>
<li>Compresses colors by hex or name, whichever is shorter</li>
<li>Converts RGB to hex</li>
</ol>
<p>The &quot;safe&quot; techniques I expected to see from most compressors, although some did surprise me. These should have no ill effects, such as removing quotes around URIs&sup2;.</p>
<h3>Unconventional</h3>
<ol>
<li>Removes duplicate rules</li>
<li>Removes overwritten rules</li>
<li>Compresses font weight</li>
<li>Changes color names to lowercase</li>
<li>Changes color hex values to lowercase</li>
</ol>
<p>These techniques shouldn&#8217;t affect the behavior of the page and were either not very common or I hadn&#8217;t seen them before &#8212; especially compressing the font weight. Only two compressors did this &#8212; <a href="http://www.csscompressor.com/">CSS Compressor</a> and <a href="http://www.cleancss.com/">CleanCSS</a>. You might wonder why changing the colors to lowercase would help. Well, using lowercase letters helps when you GZIP your files&sup3;. In a simple test, using lowercase RBG hex values saved me two bytes after GZIP compression.</p>
<h3>Dangerous</h3>
<ol>
<li>Converts tag names to lowercase</li>
<li>Combines styles for the same element</li>
<li>Combines font styles</li>
<li>Combines margins, paddings, borders</li>
<li>Combines same styles from different elements</li>
</ol>
<p>Techniques 2-5 match up to the ones <a href="http://www.lotterypost.com/css-compress.aspx">Lottery Post</a> won&#8217;t perform because of the possibility of changing the behavior. I often don&#8217;t use the &quot;Cascading&quot; part of &quot;Cascading Style Sheets&quot; so I don&#8217;t think it would affect any of my CSS. Again, changing the case where you can will help GZIP compression. Beware, though. This is safe for HTML, but not safe for XML<sup>4</sup>. In a simple test, changing &quot;DIV&quot; to &quot;div&quot; did save one byte after GZIP compression. (I know, &quot;1 byte&quot;. But we&#8217;re talking about <a href="http://twitter.com/zachleat/status/6902476988">micro-optimizations</a>.) Since none of the compressors changed the tags&#8217; case, I didn&#8217;t include it in the summary table.</p>
<h2>Commonalities</h2>
<p>All compressors removed some comments and most whitespace. Most compressors tried to compress hex color values. But besides this, there were very little that all compressors shared.</p>
<h2>Compressor Results</h2>
<h3><a name="arantius" id="arantius" href="http://tools.arantius.com/css-compressor">Arantius CSS Compressor</a></h3>
<p>I wasn&#8217;t too impressed with the Arantius compressor. It removed spaces and single line comments, but not multi-line ones. The compressor removed all possible semicolons, minus the extra one in the &#8220;removesExtraSemicolons&#8221; class.  Everything else was unchanged.<br />
<a href="/10csscompressors/arantius.css">Output CSS</a> &#8211; 1.95KB</p>
<h3><a name="cleancss" id="cleancss" href="http://www.cleancss.com/">CleanCSS</a></h3>
<p>CleanCSS applied most techniques, but did miss 2 &quot;safe&quot; ones (removing the decimals and removing quotes around URLs) and one &quot;dangerous&quot; technique of combining font styles. Otherwise, it was one of the better compressors. It was one of only two that compressed the font-weight and was smart enough to remove overwritten and duplicate rules. It combined individual margins and paddings when all four sides were present and grouped classes with the same style. It tied for second place in smallest file size.<br/><br />
<a href="/10csscompressors/cleancss.css">Output CSS</a> &#8211; 1.51KB</p>
<h3><a name="csscompressor" id="csscompressor" href="http://www.csscompressor.com/">CSS Compressor</a></h3>
<p>CSS Compressor had some options and I tried to use the most aggresive ones. Here is the setup I used: &quot;Highest&quot; compression mode, checked &quot;Remove last ;&quot; and unchecked &quot;Only safe optimisations&quot;<br />
This compressor was the best. It removed all possible spaces and semicolons. CSS compressor also compressed the font-weight and did a remarkable job of combining rules, even combining the &#8220;removesURLSingleQuotes&#8221; and &#8220;removesURLDoubleQuotes&#8221; which some other compressors missed. CSS Compressor had the smallest compressed file size.<br />
<br/><a href="/10csscompressors/csscompressor.css">Output CSS</a> &#8211; 1.50KB</p>
<h3><a name="cssdrive" id="cssdrive" href="http://www.cssdrive.com/index.php/main/csscompressor/">CSS Drive</a></h3>
<p>CSS drive didn&#8217;t do a very good job. It did a mediocre job removing spaces. It didn&#8217;t remove any empty blocks or change RGB colors. It had the second to largest file size.<br/><br />
<a href="/10csscompressors/cssdrive.css">Output CSS</a> &#8211; 1.94KB</p>
<h3><a name="cssoptimiser" id="cssoptimiser" href="http://www.cssoptimiser.com/index.php">CSS Optimiser</a></h3>
<p>This compressor did an adequate job compressing styles. Some quirks though: it took my one class of &quot;removesDuplicateRules&quot; and declared it twice. <br/><br />
<code style="display:inline">.removesDuplicateRules,.removesDuplicateRules{width:4%}</code><br />
<br/><br />
It removed zero value pixel units, but not percentages or <code style="display:inline">em</code>s. It did simple hex color compression, but didn&#8217;t touch the RGB colors. It was one of two that compressed my font styles into one font declaration. It tried to reduce the size of the margin classes, but because of the length of the class name, actually increased the size of the file. (&#8220;.combineIndividualMargins3&#8243; is larger than &#8220;margin-left:2px&#8221;.)<br />
<br/><br />
<a href="/10csscompressors/cssoptimiser.css">Output CSS</a> &#8211; 1.57KB</p>
<h3><a name="lotterypost" id="lotterypost" href="http://www.lotterypost.com/css-compress.aspx">Lottery Post</a></h3>
<p>Lottery Post is a very good CSS compressor for what it says it will do. <del datetime="2010-01-29T19:01:00-06:00">Except for removing decimals</del> it used all the <del datetime="2010-01-29T19:01:00-06:00">other</del> &quot;easy&quot; techniques. It doesn&#8217;t try the &quot;unconventional&quot; or &quot;dangerous&quot; techniques and gives good reason not to. Lottery Post also boasts that it is the only compressor to fix a CSS bug in IE6 pertaining to &quot;:first-line&quot; and &quot;:first-letter&quot;.<br />
I was disappointed to see my decimal RGB colors incorrectly converted. &quot;rgb(250, 150, 50)&quot; should have changed to &quot;#fa9632&quot; but instead was &quot;#FAFAFA&quot;. And both RGB percentages were converted to &quot;#FFF&quot; If those two issues were fixed I would confidentally call this one a very good &quot;safe&quot; compressor.<br/><br />
<a href="/10csscompressors/lotterypost.css">Output CSS</a> &#8211; 1.75KB</p>
<h3><a name="phpinsider" id="phpinsider" href="http://www.phpinsider.com/compress_css.php">PHP Insider</a></h3>
<p>This compressor removed new lines, tabs and comments. And that&#8217;s it. It had the largest compressed file size.<br/><br />
<a href="/10csscompressors/phpinsider.css">Output CSS</a> &#8211; 2.00KB</p>
<h3><a name="pingates" id="pingates" href="http://tools.pingates.com/">Pingates</a></h3>
<p>The good: Pingates did a good job of removing spaces and combining styles. It removed duplicate and overwritten rules. It was one of only two to compress the font styles and the only one to change color values to lowercase.<br/><br />
The bad: RGB colors were incorrectly changed. URL quotes values were escaped instead of removed.<br/><br />
The ugly: It replaced my class name &quot;removesAllWhiteSpace&quot; to &quot;removesAll#ffffffSpace&quot;.<br/><br />
<a href="/10csscompressors/pingates.css">Output CSS</a> &#8211; 1.51KB</p>
<h3><a name="sevenforty" id="sevenforty" href="http://www.sevenforty.com/tools/csscompressor">Seven-forty</a></h3>
<p>A light compressor, it only tried the &quot;easy&quot; compression techniques and then, not real well. Whitespace was removed, but it didn&#8217;t remove trailing semicolons, something I&#8217;ve come to expect. It incorrectly changed my &quot;background-color: rgb(255, 0, 0)&quot; to &quot;#ff00&quot;.<br/><br />
<a href="/10csscompressors/sevenforty.css">Output CSS</a> &#8211; 1.86KB</p>
<h3><a name="yui" id="yui" href="http://developer.yahoo.com/yui/compressor/">YUI compressor</a></h3>
<p>&quot;Ah. Saving the best for last,&quot; I thought. I thought wrong. I was surprised when the YUI compressor didn&#8217;t even remove trailing semicolons! Yikes! Because it is open-source, you can download it and change what you want to. And because it is packaged as a jar file, it can be easily integrated into an Ant build process. But as far as removing bits, it lacked, settling only on trying the &quot;safe&quot; techniques.<br/><br />
<a href="/10csscompressors/yui.css">Output CSS</a> &#8211; 1.84KB</p>
<h2>Conclusion</h2>
<p>The conclusion I came to is no compressor does it all. And as for my development, I should probably look for something other than YUI compressor. I might have to develop my own compressor that I can plug into my build process.</p>
<table cellspacing="2" cellpadding="2" id="a" style="border-spacing: 2px;">
<tbody>
<tr>
<th></th>
<td><a href="http://tools.arantius.com/css-compressor">Arantius CSS Compressor</a></td>
<td><a href="http://www.cleancss.com/">CleanCSS</a></td>
<td><a href="http://www.csscompressor.com/">CSS Compressor</a></td>
<td><a href="http://www.cssdrive.com/index.php/main/csscompressor/">CSS Drive</a></td>
<td><a href="http://www.cssoptimiser.com/index.php">CSS Optimizer/ Optimiser</a></td>
<td><a href="http://www.lotterypost.com/css-compress.aspx">Lottery Post</a></td>
<td><a href="http://www.phpinsider.com/compress_css.php">PHP Insider</a></td>
<td><a href="http://tools.pingates.com/css_compress.php">Pingates <!-- broke the css by adding a colon in one spot and escaping quotes and backslashes --></a></td>
<td><a href="http://www.sevenforty.com/tools/csscompressor">Seven- forty</a></td>
<td><a href="http://developer.yahoo.com/yui/compressor/">YUI compressor</a></td>
</tr>
<tr>
<th>Removes trailing semi-colons</th>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="some">Some</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
</tr>
<tr>
<th>Removes empty blocks</th>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="some">Some</td>
<td class="pass">Yes</td>
</tr>
<tr>
<th>Removes decimals</th>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
</tr>
<tr>
<th>Removes units on zero lengths/widths/size</th>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="some">Only for &quot;px&quot;</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
</tr>
<tr>
<th>Removes quotes from url() values</th>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">Escapes them instead</td>
<td class="fail">No</td>
<td class="fail">No</td>
</tr>
<tr>
<th>Reduces the number of sides specified for margin, padding, and border-width</th>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="some">Not border-width</td>
<td class="fail">No</td>
<td class="fail">No</td>
</tr>
<tr>
<th>Compresses 6-digit hex colors to 3-digits</th>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
</tr>
<tr>
<th>Reduces colors by color name or hex</th>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="fail">No</td>
</tr>
<tr>
<th>Changes rgb() values</th>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="fail">Error</td>
<td class="some">Not %<!--percentages--></td>
</tr>
<tr>
<th>Removes duplicate rules</th>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
</tr>
<tr>
<th>Removes overwritten styles</th>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
</tr>
<tr>
<th>Uses lowercase color names/hex values</th>
<td class="fail">No</td>
<td class="pass">Yes<!--but won't change hex values, only when making it's own replacements--></td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
</tr>
<tr>
<th>Combines styles for the same element<!-- that are specified in different style blocks--></th>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="pass">Yes<!--but reordered--></td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
</tr>
<tr>
<th>Combines individual font styles</th>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
</tr>
<tr>
<th>Combines individual margin, padding, or border styles</th>
<td class="fail">No</td>
<td class="some">One case<!--Only on all four--></td>
<td class="some">One case<!--Only on all four--></td>
<td class="fail">No</td>
<td class="fail">Error<!--Incorrectly combined elements--></td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="some">Once case<!--Only on all four--></td>
<td class="fail">No</td>
<td class="fail">No</td>
</tr>
<tr>
<th>Combines styles for multiple elements<!-- that share the same style definition--></th>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
<td class="pass">Yes</td>
<td class="fail">No</td>
<td class="fail">No</td>
</tr>
</tbody>
</table>
<h2>References:</h2>
<p><a name="one" id="one">&sup1;</a> &quot;After a zero length, the unit identifier is optional.&quot; &#8211; <cite>http://www.w3.org/TR/CSS2/syndata.html#length-units</cite><br />
</p>
<p><a name="two" id="two">&sup2;</a> &quot;The format of a URI value is &#8216;url(&#8216; followed by optional white space followed by an optional single quote (&#8216;) or double quote (&quot;) character followed by the URI itself, followed by an optional single quote (&#8216;) or double quote (&quot;) character followed by optional white space followed by &#8216;)&#8217;. The two quote characters must be the same.&quot; &#8211; <cite>http://www.w3.org/TR/CSS2/syndata.html#uri</cite><br />
<br/></p>
<p><a name="three" id="three">&sup3;</a> <cite>http://www.julienlecomte.net/yuicompressor/CHANGELOG</cite><br />
<br/></p>
<p><a name="four" id="four"><sup>4</sup></a> &quot;The case-sensitivity of document language element names in selectors depends on the document language. For example, in HTML, element names are case-insensitive, but in XML they are case-sensitive.&quot; &#8211; <cite>http://www.w3.org/TR/CSS2/selector.html</cite></p>
<p><ins datetime="2010-01-29T19:09:00-06:00"><strong>Friday, January 29 at 7:09 PM: Updated</strong> table to reflect that <a name="lotterypost" id="lotterypost" href="http://www.lotterypost.com/css-compress.aspx">Lottery Post&#8217;s compressor</a> does remove decimals and therefore uses <em>all</em> &#8220;safe&#8221; compressions (including two I forgot!). Thanks to <a href="http://www.lotterypost.com/">Todd</a> for pointing that out.</ins></p>
<p><!--end_raw--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamkoch.com/2010/01/28/comparison-of-10-css-compressors/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>JavaScript Won&#8217;t Assign Null</title>
		<link>http://www.adamkoch.com/2010/01/25/javascript-wont-assign-null/</link>
		<comments>http://www.adamkoch.com/2010/01/25/javascript-wont-assign-null/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 02:54:06 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Professional]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tidbit]]></category>

		<guid isPermaLink="false">http://www.adamkoch.com/?p=1799</guid>
		<description><![CDATA[I didn&#8217;t know this! &#8220;The null value &#8230; can only be assigned by your code.&#8221; From Object-Oriented JavaScript by Stoyan Stefanov]]></description>
			<content:encoded><![CDATA[<p>I didn&#8217;t know this!</p>
<p>&#8220;The <code>null</code> value &#8230; can only be assigned by your code.&#8221;<br />
From <a href="http://www.packtpub.com/object-oriented-javascript-applications-libraries/book">Object-Oriented JavaScript by Stoyan Stefanov</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamkoch.com/2010/01/25/javascript-wont-assign-null/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript Gotcha</title>
		<link>http://www.adamkoch.com/2010/01/24/javascript-gotcha/</link>
		<comments>http://www.adamkoch.com/2010/01/24/javascript-gotcha/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 02:48:18 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Professional]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tidbit]]></category>

		<guid isPermaLink="false">http://www.adamkoch.com/?p=1795</guid>
		<description><![CDATA[This will alert &#8220;10&#8243;: var num = num &#124;&#124; 10; alert(num); But so will this: num = 0; var num = num &#124;&#124; 10; alert(num); Watch out for the cases where num is &#8220;falsey&#8220;.]]></description>
			<content:encoded><![CDATA[<p>This will alert &#8220;10&#8243;:<br />
<code>var num = num || 10;<br />
alert(num);</code></p>
<p>But so will this:<br />
<code>num = 0;<br />
var num = num || 10;<br />
alert(num);</code></p>
<p>Watch out for the cases where <code>num</code> is &#8220;<a href="http://www.adamkoch.com/2010/01/23/falsy-javascript/">falsey</a>&#8220;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamkoch.com/2010/01/24/javascript-gotcha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Falsey (Falsy?) JavaScript</title>
		<link>http://www.adamkoch.com/2010/01/23/falsy-javascript/</link>
		<comments>http://www.adamkoch.com/2010/01/23/falsy-javascript/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 02:45:41 +0000</pubDate>
		<dc:creator>Adam</dc:creator>
				<category><![CDATA[Professional]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tidbit]]></category>

		<guid isPermaLink="false">http://www.adamkoch.com/?p=1793</guid>
		<description><![CDATA[The following convert to false when applied to a double negation in JavaScript: "" null undefined 0 NaN]]></description>
			<content:encoded><![CDATA[<p>The following convert to false when applied to a double negation in JavaScript:<br />
<code>""<br />
null<br />
undefined<br />
0<br />
NaN</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamkoch.com/2010/01/23/falsy-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

