<?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>MLNTN &#187; etc</title>
	<atom:link href="http://mlntn.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://mlntn.com</link>
	<description>Maniacal musings of a pixel perfectionist</description>
	<lastBuildDate>Wed, 19 Jan 2011 19:11:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>2009 recap</title>
		<link>http://mlntn.com/2010/01/01/2009-recap/</link>
		<comments>http://mlntn.com/2010/01/01/2009-recap/#comments</comments>
		<pubDate>Fri, 01 Jan 2010 16:25:28 +0000</pubDate>
		<dc:creator>Jared</dc:creator>
				<category><![CDATA[etc]]></category>

		<guid isPermaLink="false">http://mlntn.com/?p=138</guid>
		<description><![CDATA[Since 2009 has come to a close, I&#8217;d like to reflect on some of the cool stuff I&#8217;ve been able to work on over the past year.
In April and May, I spent some time working on database design for a complete rewrite of my company&#8217;s software.  The schema is very complex and presented lots [...]]]></description>
			<content:encoded><![CDATA[<p>Since 2009 has come to a close, I&#8217;d like to reflect on some of the cool stuff I&#8217;ve been able to work on over the past year.<span id="more-138"></span></p>
<p>In April and May, I spent some time working on database design for a complete rewrite of my company&#8217;s software.  The schema is very complex and presented lots of interesting challenges.</p>
<p>In May, I started building the system &#8211; with my coworkers &#8211; using the <a title="symfony framework" href="http://www.symfony-project.org/" target="_blank">symfony framework</a> and <a title="Doctrine ORM" href="http://www.doctrine-project.org/" target="_blank">Doctrine ORM</a>.  I tested out several other frameworks and ORM&#8217;s, but ultimately we decided on symfony and Doctrine.  The symfony framework is very mature and easily extensible.  Doctrine, on the other hand, is quirky and a little bloated.  It just so happens that symfony is built for Doctrine or Propel ORM and Doctrine seemed the lesser of two evils.</p>
<p>In October, I started building a ubiquitous chat component using XMPP for my company&#8217;s software.  The chat is based on <a title="Openfire XMPP server" href="http://www.igniterealtime.org/projects/openfire/" target="_blank">Openfire</a> and <a title="Strophe library" href="http://code.stanziq.com/strophe/" target="_blank">Strophe</a>.  The chat itself is similar to Facebook&#8217;s chat.</p>
<p>In November, I attended the first <a title="WordCamp Phoenix" href="http://phxwordcamp.com/" target="_blank">WordCamp Phoenix</a>.  Throughout the day, there were some good speakers (Jim Christian, John Hawkins, Brent Spore, Dave Moyer, Merlin Mann) and some that were awful (Lorelle VanFossen and Jayson Cote).  My friend&#8217;s sister-in-law (both attended WordCamp) knows Matt Mullenweg (the creator of WordPress), so we all had lunch together. It was a pretty cool experience overall.</p>
<p>Also in November, I put an online store together for a client using <a title="Magento e-Commerce Platform" href="http://www.magentocommerce.com/" target="_blank">Magento</a>.  I didn&#8217;t have much time to dive into it because the project had such a quick turnaround time, but I could do some pretty awesome things with it.  I&#8217;m looking for reasons to play around with it more.</p>
<p>I wrote a number of cool jQuery plugins in 2009:</p>
<ul>
<li><a href="/2009/03/09/javascript-jquery-undo-plugin/" title="Undoable: jQuery undo plugin">Undoable</a>: handles undo and redo</li>
<li>AJAXList: Create a very customizable autocomplete list via AJAX</li>
<li>Caret: Cursor selection getter and setter</li>
<li>FakeSelect: Creates a &lt;select&gt;-like dropdown menu from a &lt;ul&gt; element</li>
<li>Tristate: Creates a tri-state input (checked, unchecked, default) for forms</li>
<li><a href="/2009/12/30/jquery-ip-address-plugin/" title="jQuery IP address plugin">IP Address</a>: Creates an IP address input for forms</li>
</ul>
<p>I&#8217;m hoping 2010 is just as great as 2009 was.</p>
]]></content:encoded>
			<wfw:commentRss>http://mlntn.com/2010/01/01/2009-recap/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to build a Google Chrome extension in 15 minutes</title>
		<link>http://mlntn.com/2009/12/08/how-to-build-a-google-chrome-extension-in-15-minutes/</link>
		<comments>http://mlntn.com/2009/12/08/how-to-build-a-google-chrome-extension-in-15-minutes/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 05:32:53 +0000</pubDate>
		<dc:creator>Jared</dc:creator>
				<category><![CDATA[etc]]></category>

		<guid isPermaLink="false">http://mlntn.com/?p=105</guid>
		<description><![CDATA[Google Chrome&#8217;s extension gallery opened December 8th and the race to create extensions is on.
I browsed through the gallery, looking for anything that might be useful to me and my normal browsing experience.  I found a couple good ones: Google Alerter, RSS Subscription Extension and Docs PDF/PowerPoint Viewer (by Google).
I searched for a Facebook [...]]]></description>
			<content:encoded><![CDATA[<p>Google Chrome&#8217;s extension gallery opened December 8th and the race to create extensions is on.</p>
<p>I browsed through the gallery, looking for anything that might be useful to me and my normal browsing experience.  I found a couple good ones: <a title="Google Chrome Extensions: Google Alerter" href="https://chrome.google.com/extensions/detail/ikefielkhonlbnjjfhcjmepanaeajkbh">Google Alerter</a>, <a title="Google Chrome Extensions: RSS Subscription Extension" href="https://chrome.google.com/extensions/detail/nlbjncdgjeocebhnmkbbbdekmmmcbfjd">RSS Subscription Extension</a> and <a title="Google Chrome Extensions: Docs PDF/PowerPoint Viewer (by Google)" href="https://chrome.google.com/extensions/detail/nnbmlagghjjcbdhgmkedmbmedengocbn">Docs PDF/PowerPoint Viewer (by Google)</a>.</p>
<p>I searched for a Facebook ad blocker, but the <a title="Google Chrome Extensions: Facebook Adblock" href="https://chrome.google.com/extensions/detail/bpkinlipdioelcoagofcbcmpbgedfcdg">one I found</a> only blocked profile ads &#8211; not very useful.  So I tried writing my own and found that it was much simpler than I expected.<span id="more-105"></span></p>
<p>There were really only two files that I needed to create: manifest.json (a <a title="Formats: Manifest Files - Google Chrome Extensions" href="http://code.google.com/chrome/extensions/manifest.html">manifest file</a> that tells Google Chrome important info about your extension) and facebook.css (a <a title="Content Scripts - Google Chrome Extensions" href="http://code.google.com/chrome/extensions/content_scripts.html">content script</a> that hides the ads using CSS, obviously).</p>
<p>The manifest.json file looks like this:</p>
<div class="codecolorer-container javascript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #3366CC;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Hide Facebook Ads&quot;</span><span style="color: #339933;">,</span><br />
&nbsp; <span style="color: #3366CC;">&quot;version&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;1.0&quot;</span><span style="color: #339933;">,</span><br />
&nbsp; <span style="color: #3366CC;">&quot;description&quot;</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Hides Facebook ads&quot;</span><span style="color: #339933;">,</span><br />
&nbsp; <span style="color: #3366CC;">&quot;content_scripts&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">&quot;matches&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;http://www.facebook.com/*&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;http://apps.facebook.com/*&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #3366CC;">&quot;css&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;facebook.css&quot;</span><span style="color: #009900;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #009900;">&#93;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>I used Chrome&#8217;s Developer Tools (Ctrl-Shift-I or Page menu &gt; Developer &gt; Developer Tools) to find good CSS rules for blocking the sponsored ads on the homepage, profile page and app pages.  I also had to fix the profile page, which broke when I hid the ad sidebar there.  Here&#8217;s what facebook.css looks like:</p>
<div class="codecolorer-container css mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #cc00cc;">#home_sponsor_nile</span><span style="color: #00AA00;">,</span> <span style="color: #cc00cc;">#sidebar_ads</span><span style="color: #00AA00;">,</span> <span style="color: #6666ff;">.module_ad</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">none</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span><br />
<span style="color: #6666ff;">.profile_bottom_container</span> <span style="color: #6666ff;">.right_column</span> <span style="color: #00AA00;">&#123;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">margin-right</span><span style="color: #00AA00;">:</span> <span style="color: #933;">180px</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span></div></div>
<p>After saving the two files to an empty directory, I opened chrome://extensions in Chrome.  Under &#8220;Developer mode&#8221;, I hit the Load unpacked extension&#8230; button and navigated to that directory.  Chrome added the plugin and I could refresh it if I needed to make a change to the CSS or manifest.json file.</p>
<p>After everything was tested and working, I packed the extension and was done.  Overall, I think the whole process took about 15 minutes, but most of that was looking at documentation.</p>
<p>Here&#8217;s the <a href="http://mlntn.com/wp-content/blogs.dir/4/files/2009/12/fbads.crx">extension</a>, if you want to play around with it.</p>
]]></content:encoded>
			<wfw:commentRss>http://mlntn.com/2009/12/08/how-to-build-a-google-chrome-extension-in-15-minutes/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
