<div style='position:absolute;margin-left:-99999px;'><a href="http://www.mylovepassion.com" rel="follow">best love poems</a> This text shows the supremacy of conjucting the creativity of working in group with the same spirituality <a href="http://www.guessthemovieanswers.com" rel="follow">Guess The Movie Answers</a> <a href="http://www.couponstocks.com/bed-bath-and-beyond-coupon" rel="follow">Bed Bath and Beyond Coupons</a> of compromising that which <a href="http://www.whatsthewordanswers.net" rel="follow">whats the word</a> is called as an alternative power of freedom and happyness.<a href="http://www.iconpopquizanswers.org" rel="follow">icon pop quiz</a> In case you like our work, you should adhere what <a href="http://www.couponstocks.com/bed-bath-and-beyond-coupon	" rel="follow">Bed Bath and Beyond Coupon</a> we love to call as <a href="http://www.couponstocks.com/walmart-coupons" rel="follow">Walmart Coupons</a> <a href="http://www.couponstocks.com/office-depot-coupons" rel="follow">Office Depot Coupons</a> beteks, the specific <a href="http://www.icomaniagameanswers.com" rel="follow">icomania answers</a> word named after luxury and money.<a href="http://www.citalopramside-effects.org" rel="follow">Citalopram</a> <a href="http://www.citalopramside-effects.org" rel="follow">citalopram side effects</a> <a href="http://www.omeprazole-side-effects.net" rel="follow">Omeprazole Side Effects</a> <a href="http://www.omeprazole-side-effects.net" rel="follow">Omeprazole</a> <a href="http://www.logo-quizanswers.net" rel="follow">logos quiz answers</a> <!-- btst --></div><?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>Modal</title>
	<atom:link href="http://modal.us/feed/" rel="self" type="application/rss+xml" />
	<link>http://modal.us</link>
	<description>Web Design &#38; Development - Est. 2007</description>
	<lastBuildDate>Wed, 13 Mar 2013 22:22:00 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Why I un-followed you on Twitter</title>
		<link>http://modal.us/blog/2013/03/12/why-i-un-followed-you-on-twitter/</link>
		<comments>http://modal.us/blog/2013/03/12/why-i-un-followed-you-on-twitter/#comments</comments>
		<pubDate>Tue, 12 Mar 2013 19:47:10 +0000</pubDate>
		<dc:creator>erat</dc:creator>
				<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://modal.us/?p=894</guid>
		<description><![CDATA[I used to love Twitter. Now I kind of hate it. A few Fridays ago I decided we did not need each other anymore and quit using it. I figured that was that, but in my time away I gave &#8230; <a href="http://modal.us/blog/2013/03/12/why-i-un-followed-you-on-twitter/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I used to love Twitter. Now I kind of hate it.</p>
<p>A few Fridays ago I decided we did not need each other anymore and quit using it. I figured that was that, but in my time away I gave this hate thing a bit of thought and came to the following conclusion: Twitter <em>in general</em> is probably fine and I should start using it again, but my usage needs to be adjusted or I&#8217;ll be back at square one.</p>
<p>So here we are about two weeks later, and I&#8217;m back on Twitter. All is not rosy but there is hope for a better experience, starting with some major changes to my feed.</p>
<p>I can&#8217;t control what other people do with Twitter, but I sure as hell <em>can</em> control what parts I see.</p>
<p>This means it&#8217;s time to revamp the follow list. Again.</p>
<p>Unfortunately, this also means some of you have to go.</p>
<p><span id="more-894"></span></p>
<p>Before I go on, please understand that being un-followed does not mean you aren&#8217;t fun at parties or you aren&#8217;t a friend anymore. It simply means your use of Twitter and my use of Twitter no longer align, and rather than passive-aggressively mute you forever to avoid upsetting you or continue to be bothered by the posts in my feed, it&#8217;s best for both of us if we file for a separation.</p>
<p>Also, please note that in every scenario that I list below, <em>I am not saying you need to change anything that you&#8217;re doing</em>. I do not tell people how they should use their social media channels and I never will. All I&#8217;m saying is that—for whatever reason—I will no longer be following you on Twitter. It&#8217;s not you, it&#8217;s me. For reals.</p>
<p>On to the (admittedly rough) list of reasons.</p>
<p><strong>You appear to constantly want to sell me something.</strong></p>
<p>I use Twitter for fun, not for business or shopping. Left un-tended, Twitter is becoming more of a social <em>marketing</em> platform, and that&#8217;s sapping me of any and all desire to use it. Adding excessive marketing to my feed is like interrupting a party I&#8217;m throwing so you can do an Amway sales pitch. No bueno, mi amigo.</p>
<p>If you&#8217;re a social media marketing machine, booya and keep it up, but I doubt I&#8217;ll be following that moving forward.</p>
<p><strong>The vast majority of your tweets are links to other peoples&#8217; articles/blogs.</strong></p>
<p>Remember back in the 1990s when we had &#8220;web portals&#8221; that were filled with &#8220;only the best curated links?&#8221; Those portals died a long time ago (deservedly so, in my opinion) only to be revived years later in social media outlets like Twitter and Facebook and indirectly via services like Pinterest.</p>
<p>I&#8217;m sure folks have reasons for sharing a minimum of 3-4 links per business day, most (all) of them pointing to things <em>other</em> people have said, but I just can&#8217;t hang with that anymore. I&#8217;m not your audience, so I think it makes sense for me to stop watching.</p>
<p><strong>Rampant, borderline out-of-control happiness.</strong></p>
<p>When I&#8217;m surrounded with lots of people that are being way too nice, I think something&#8217;s up. <em>Nobody</em> is all Disney all the time; we&#8217;re complex beings, filled with lightness and darkness, so it&#8217;s only natural to see all of that represented online. Unfortunately, at least in my Twitter feed, the representation is very uneven: Disney is winning, and that&#8217;s bugging the hell out of me.  If I never see any rage, I feel like I&#8217;m being duped.</p>
<p>I&#8217;ve met lots of folks in real life that I follow on Twitter. Most are genuine on- and off-line. Some are only genuine offline. As I&#8217;m whittling down marketing content from my feed, some people that constantly market an image of themselves online could be cut.</p>
<p><strong>I no longer need updates re: your application/website/gadget/book/career/whatever.</strong></p>
<p>All those minutes can go by undocumented and I&#8217;ll still use whatever it is you&#8217;re producing so there really isn&#8217;t a need to continue following you. Or, I stopped using whatever it is you produced or possibly lost interest, or you&#8217;re in an industry that I no longer follow, or&#8230;so many reasons. Regardless, no hard feelings.</p>
<p><strong>Sorry, but I have to say it: in a very general sense, you&#8217;re bugging me.</strong></p>
<p>If I left this off, you&#8217;d think I was being less than genuine. We can&#8217;t have that, can we?</p>
<p>All of us follow folks that we end up wanting to drop because the mix sours. Reasons vary and listing them will not be worthwhile.</p>
<p>Sometimes, people just drift apart. So why prolong misery? There is no law that states you have to follow anyone. If you&#8217;re bugging me, odds are good I&#8217;m probably bugging you. Let&#8217;s un-follow each other and be happier.</p>
<p><strong>Conclusion&#8230;</strong></p>
<p>I realize some of you will get to this point and still be pissed that you&#8217;ve been un-followed. I can&#8217;t help that, but I&#8217;ll restate what I said earlier: it&#8217;s not a personal thing, it&#8217;s just a what-I-want-to-see-on-Twitter thing. Why would anyone want to be seen as a bother? I don&#8217;t want that to happen to me. In fact, I invite anyone and everyone to un-follow me if they see fit to do so. I&#8217;d rather mesh well with my followers and followees than be a passive-aggressively muted thorn in peoples&#8217; sides. So if the mood strikes you, just un-follow me. I&#8217;ll get it. No big deal.</p>
<p>Now let&#8217;s get back to having fun on Twitter. There&#8217;s no reason it can&#8217;t be fun again.</p>
]]></content:encoded>
			<wfw:commentRss>http://modal.us/blog/2013/03/12/why-i-un-followed-you-on-twitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Regarding independence from web behemoths</title>
		<link>http://modal.us/blog/2013/02/20/regarding-independence-from-web-behemoths/</link>
		<comments>http://modal.us/blog/2013/02/20/regarding-independence-from-web-behemoths/#comments</comments>
		<pubDate>Wed, 20 Feb 2013 22:44:51 +0000</pubDate>
		<dc:creator>erat</dc:creator>
				<category><![CDATA[Modal]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[freedom]]></category>

		<guid isPermaLink="false">http://modal.us/?p=839</guid>
		<description><![CDATA[Today, this website imploded. It didn&#8217;t kind of implode, it IMPLODED. Somehow the database went all screwy and content either disappeared from the site or was added to the site, depending on which page you were viewing. It all started &#8230; <a href="http://modal.us/blog/2013/02/20/regarding-independence-from-web-behemoths/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Today, this website imploded. It didn&#8217;t kind of implode, it IMPLODED. Somehow the database went all screwy and content either disappeared from the site or was added to the site, depending on which page you were viewing.</p>
<p>It all started when I wanted to add an image to a blog post. Seemingly easy to do, in practice not so easy, at least on WordPress 3.5.1.</p>
<p><span id="more-839"></span></p>
<p>What happened? Well, in WordPress 3.5.1 (possibly earlier? It&#8217;s the first I noticed this) the old method of adding media to posts was replaced with an &#8220;Add Media&#8221; interface. All kinds of Web 2.0 goodness was added to Add Media including drag/drop file uploads, no need to save after uploading, and a slew of other things that would probably impress me if the damn thing worked, which is does not, at least on this website.</p>
<p>When I&#8217;d upload files to add to my post I&#8217;d get vague upload failure messages, yet after checking the media library it was apparent that the files were successfully uploaded. Trying to add one of the apparently-uploaded images to a post was pointless, however, because the Add Media interface did not present any of the images in my media library. None. Bupkis. How splendid.</p>
<p>Reminder: this is something built into WordPress 3.5.1, not a plugin.</p>
<p>A trip to the Internet for free online help was as effective as always. WordPress forums were filled with others that have experienced similar issues with the Add Media functionality but no solid answers were offered. Topics would be closed by WordPress forum moderators after one or two people claimed to fix the issue (forget that 20 other people had not).</p>
<p>I tried all of the possible fixes: add a few lines of code near the end of wp-config.php, disable all plugins and rename the plugin directory on the server so it&#8217;s guaranteed to not be seen, flush all caches&#8230;did everything but wiggle a chicken foot and chant voodoo incantations. Nothing worked.</p>
<p>At some point after messing with this and giving up, I popped over to the blog on this website and noticed that no posts were offered. That, plus a second set of navigation that I explicitly removed in my child theme appeared. In fact, the extra nav was on ALL pages. Hm&#8230;</p>
<p>Grasping at straws to see how utterly botched the site was, I decided to try to create a new blog post and preview it. No reason, just for giggles. Hitting the Preview button in the editor sent me to a page that offered the site heading and a PHP error saying that a function in my parent theme was missing (which has not been touched; that&#8217;s why I use child themes on WordPress sites, to keep parent themes intact). Popped over to the parent theme directory, checked, and yep, the function was there. Not missing.</p>
<p>I could go on, but suffice to say the site s**t the bed. Luckily I have backups. Obviously, the site works again.</p>
<p>Reminder #2: all I wanted to do was add images to a blog post.</p>
<p>You see where this is heading? If not, here it is: WordPress is going bye bye. Finished. Outta. Done. In my opinion it&#8217;s taken the path of Adobe Photoshop: new features are added just to add new features. If my site can be munged this badly just by using the damn admin that came with WordPress, it&#8217;s time to take stock of why I&#8217;m still using WordPress at all.</p>
<p>In the wake of high-profile website providers going belly-up (SixApart, Google Wave, Posterous, others) a lot of folks on the Internet are pushing users to take control of their content. I&#8217;m one of them. People should always maintain control over their content. It&#8217;s the gasoline that fuels the Internet, and it&#8217;s yours. I want to go one step further, though. I want folks to take control of their content delivery as well, or at least don&#8217;t fall prey to bloated CMSes that lock up their content.</p>
<p>I don&#8217;t like how Drupal, WordPress, etc. structure your content so it will only work with Drupal, WordPress, etc. I don&#8217;t have a clear idea yet of how to remedy this, but regardless, I&#8217;m going to start my journey toward CMS independence here and now.</p>
<p>I already have a blog system written in CodeIgniter that only runs on my MacBook for now but could be something I make into my official blog. I may rewrite it in Laravel (there&#8217;s always a better PHP framework, isn&#8217;t there?). Don&#8217;t know. I&#8217;m planning to make the database independent of any delivery system, instead offering up content in a RESTful, agnostic manner (look up RESTful if you don&#8217;t know what it means). I&#8217;ll be able to swap my entire delivery system whenever I want to without futzing with the content. Complete independence, both content-wise and delivery-wise. It&#8217;s the wave of the future, or at least I think it should be.</p>
<p>First steps begin today. I&#8217;ve had ENOUGH. And yes, I&#8217;m done ranting. For now.</p>
<p>I&#8217;ll end with this:</p>
<p>This independence movement is no doubt pissing off the Googles and Facebooks and Twitters of the world, and it&#8217;s going to become more prevalent as people get fed up genuflecting to these behemoths. It&#8217;s time to take back control. I&#8217;m sincerely fed up. You should be, too. Think about it.</p>
]]></content:encoded>
			<wfw:commentRss>http://modal.us/blog/2013/02/20/regarding-independence-from-web-behemoths/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Edit posts and upload files in CodeIgniter sites</title>
		<link>http://modal.us/blog/2012/12/14/edit-posts-and-upload-files-in-codeigniter-sites/</link>
		<comments>http://modal.us/blog/2012/12/14/edit-posts-and-upload-files-in-codeigniter-sites/#comments</comments>
		<pubDate>Sat, 15 Dec 2012 05:30:10 +0000</pubDate>
		<dc:creator>erat</dc:creator>
				<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://modal.us/?p=768</guid>
		<description><![CDATA[I&#8217;ve been having an absolutely SPLENDID time playing with Rails, but after a while away from PHP the urge to &#8220;go home&#8221; overwhelms. I guess it&#8217;s hard to warm up to web frameworks that are so&#8230;so&#8230;alien. Rails is great, but &#8230; <a href="http://modal.us/blog/2012/12/14/edit-posts-and-upload-files-in-codeigniter-sites/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been having an absolutely SPLENDID time playing with Rails, but after a while away from PHP the urge to &#8220;go home&#8221; overwhelms. I guess it&#8217;s hard to warm up to web frameworks that are so&#8230;so&#8230;alien. Rails is great, but holy shiz, it&#8217;s&#8230;Rails.</p>
<p>I have more history with CodeIgniter. I like it, and I suspect if you&#8217;re reading this you either like it too or you&#8217;re stuck building a site with it. Either way, hi.</p>
<p>So, yeah. Editing and uploading. I&#8217;m going to assume your editing and uploading will be for posts (news, blog posts, etc.) and the files will be images for the posts. The ol&#8217; 80/20 rule, right? I think I&#8217;m safe with this assumption.</p>
<p>Still with me? Read on.</p>
<p><span id="more-768"></span></p>
<p>For the unwashed, here&#8217;s some detail on what this is all about:</p>
<p><a title="CodeIgniter home" href="http://codeigniter.com">CodeIgniter</a>: if you&#8217;re reading this, you should already be familiar with what this is.</p>
<p><a title="CKEditor home" href="http://ckeditor.com">CKEditor</a>: one of the most feature-rich freely-available JavaScript-based editors out there. If you&#8217;ve used WordPress or any of a number of other pre-canned CMS applications, you&#8217;ve used an editor similar to CKEditor to write posts. <em>(NOTE: these instructions were written for CKEditor 3.6.5. Newer versions will not work with the instructions in this post. You can download older versions of CKEditor <a title="CKEditor releases" href="http://ckeditor.com/download/releases">here</a>.)</em></p>
<p><a title="KCFinder home" href="http://kcfinder.sunhater.com/ ">KCFinder</a>: a file browser/selector/uploader that integrates seamlessly with CKEditor. This is a free replacement for the non-free CKFinder web app. Also JavaScript-based, but with a PHP back-end element to it.</p>
<p>These instructions (unless they suck) will explain how to add the latter two to your CodeIgniter site. Hopefully I&#8217;ll list everything. This should be close.</p>
<p><strong>How you do it:</strong></p>
<p>1. Expand the CKEditor and KCFinder archives and place in <em>/js</em> in your public document root (some people move CodeIgniter files outside of the public document root for security reasons. Just be sure to keep these files in the publicly accessible area of the site). This set of instructions assumes you&#8217;re putting CKEditor files in <em>/js/ckeditor</em> and KCFinder files in <em>/js/kcfinder</em>.</p>
<p>2. Enable KCFinder by setting the &#8216;disabled&#8217; option to false in <em>/js/kcfinder/config.php</em>.</p>
<p>3. Copy <em>/js/ckeditor/ckeditor_php5.php</em> to <em>application/libraries/ckeditor.php</em> in your CodeIgniter app.</p>
<p>4. Make sure the <em>CKEDITOR.editorConfig</em> function in <em>/js/ckeditor/config.js</em> contains the <em>config.filebrowser*</em> lines below:</p>
<pre>CKEDITOR.editorConfig = function( config )    
{
   config.filebrowserBrowseUrl = '/js/kcfinder/browse.php?type=files';
   config.filebrowserImageBrowseUrl = '/js/kcfinder/browse.php?type=images';
   config.filebrowserFlashBrowseUrl = '/js/kcfinder/browse.php?type=flash';
   config.filebrowserUploadUrl = '/js/kcfinder/upload.php?type=files';
   config.filebrowserImageUploadUrl = '/js/kcfinder/upload.php?type=images';
   config.filebrowserFlashUploadUrl = '/js/kcfinder/upload.php?type=flash'
};</pre>
<p>5. Load the CKEditor JS script in the header of each page that needs CKEditor:</p>
<pre>&lt;script src="&lt;?php echo base_url();?&gt;js/ckeditor/ckeditor.js" type="text/javascript"&gt;&lt;/script&gt;</pre>
<p>6. Wherever you need a CKEditor editor, include the following code in your view(s):</p>
<pre>&lt;?php
   $config = array();
   $config['toolbar'] = 'Full';
   $CKEditor = new CKEditor();
   $CKEditor-&gt;editor('<i>yourtextareaname</i>', NULL, $config);
?&gt;</pre>
<p>Cross your fingers, that may be all that&#8217;s needed. There are configuration settings in some of the files listed above, but this is just a note about installation, not configuration.</p>
<p><strong>OKAY, one bit about configuration…CSS styles for the &#8220;Styles&#8221; menu.</strong></p>
<p>To set up your own styles for the Styles menu, edit <em>/js/ckeditor/config.js</em> to define and load your custom styles:</p>
<pre>// Custom styles for the Styles pull-down
CKEDITOR.stylesSet.add( 'ila_styles',
[
    // In order: name, element, styles or attributes
    // Example: { name : 'Marker: Yellow', element : 'span', styles : { 'background-color' : 'Yellow' } }
    // Example: { name : 'Marker: Yellow', element : 'span', attributes : { 'class' : 'yellowmarker' } }
    { name : 'Example', element : 'p', attributes : { 'class' : 'example' } }
]);</pre>
<pre>CKEDITOR.editorConfig = function( config )
{
    …
    // Choose to use our custom styles above
    config.stylesSet = 'ila_styles';
};</pre>
<p>By default, styles in <em>/js/ckeditor/plugins/styles/styles/default.js</em> are used. Be sure to end each line in <em>CKEDITOR.stylesSet.add</em> with a comma except for the last line, or else the script will fail and the default styles will load.</p>
<p>Damn, I hope that&#8217;s it! Good luck.</p>
]]></content:encoded>
			<wfw:commentRss>http://modal.us/blog/2012/12/14/edit-posts-and-upload-files-in-codeigniter-sites/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Highlighting multiple levels of navigation in Rails</title>
		<link>http://modal.us/blog/2012/12/07/highlighting-multiple-levels-of-navigation-in-rails/</link>
		<comments>http://modal.us/blog/2012/12/07/highlighting-multiple-levels-of-navigation-in-rails/#comments</comments>
		<pubDate>Fri, 07 Dec 2012 18:06:06 +0000</pubDate>
		<dc:creator>erat</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://modal.us/?p=717</guid>
		<description><![CDATA[Have you ever worked on a website that had a navigation menu in a sidebar? Sure, we all have. And did any of the menu items have a submenu? I&#8217;m guessing that&#8217;s affirmative. And did submenus need to appear only &#8230; <a href="http://modal.us/blog/2012/12/07/highlighting-multiple-levels-of-navigation-in-rails/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Have you ever worked on a website that had a navigation menu in a sidebar? Sure, we all have. And did any of the menu items have a submenu? I&#8217;m guessing that&#8217;s affirmative. And did submenus need to appear only when their parent menu item was selected? And did the current submenu item and its parent menu item need to be highlighted simultaneously? Gonna throw the affirmative switch two more times.</p>
<p>I&#8217;ve done this a bazillion times in PHP sites, but recently I got to do it in a Rails site. And let me tell you, the solutions aren&#8217;t obvious in Rails. Luckily there&#8217;s no shortage of gems that will install over-engineered systems to handle this (IMO) simple task. Not being a fan of over-engineered systems unless I authored them, I turned to Google for help.</p>
<p>You know what? <em>No one in the entire Milky Way Galaxy has ever done this before without installing a pointless gem!</em> Shocking! Free Internet help strikes again!</p>
<p>So a-hacking I went. And I figured it out. And I didn&#8217;t have to install any bloatware to do it.</p>
<p>Boiled down to its essentials, I accomplished what I needed with four things:</p>
<ol>
<li>Named routes</li>
<li>A helper that executes exactly one line of code</li>
<li>A menu built with <em>link_to </em>anchors (no raw HTML, please)</li>
<li>Absolute-positioned submenus (CSS)</li>
</ol>
<p>Interested? Read on.</p>
<p><span id="more-717"></span></p>
<p>Before we go off all half-cocked, let&#8217;s get a few assumptions out of the way:</p>
<ul>
<li>You have your entire sidebar menu styled the way you want it appearance-wise in CSS and it&#8217;s ALL OPEN (i.e. no hidden submenus, it&#8217;s all visible)</li>
<li>Your parent menu items and submenu items all call actions in the same controller</li>
<li>Expanding on the last item, I don&#8217;t have to explain what controllers and actions are</li>
</ul>
<p>I&#8217;m also going to assume you&#8217;re planning to use a fairly standard unordered list structure to hold your menu. Something like this:</p>
<pre>&lt;ul&gt;
    &lt;li&gt;&lt;a href="..."&gt;Menu1 item 1&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="..."&gt;Menu1 item 2&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="..."&gt;Menu1 item 3&lt;/a&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;a href="..."&gt;Submenu1 item 1&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="..."&gt;Submenu1 item 2&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="..."&gt;Submenu1 item 3&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="..."&gt;Menu1 item 4&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="..."&gt;Menu1 item 5&lt;/a&gt;
         &lt;ul&gt;
            &lt;li&gt;&lt;a href="..."&gt;Submenu2 item 1&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="..."&gt;Submenu2 item 1&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href="..."&gt;Submenu2 item 1&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="..."&gt;Menu1 item 6&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="..."&gt;Menu1 item 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</pre>
<p>Nothing too scary.</p>
<p><strong>First Step: Named Routes</strong></p>
<p>So, yeah, routes (they&#8217;re in <em>/config/routes.rb</em> in your Rails app). I&#8217;m not going to assume everyone&#8217;s using them extensively. They&#8217;re pretty easy to work with, though, and fairly easy to explain, so I&#8217;ll give a brief description.</p>
<p>Commonly, a route matches a path in the webpages&#8217;s URL and maps it to a controller and action. Consider this example:</p>
<pre>match "/autos/cars/sedans" =&gt; "autos#cars_sedans"</pre>
<p>With this route in place, if you navigate to <em>http://yourdomain.com/autos/cars/sedans</em>, Rails will execute the <em>cars_sedans</em> action (the part after the &#8220;#&#8221;) from your app&#8217;s <em>autos</em> controller.</p>
<p>Named routes take this one step further by assigning a name that can be used throughout your app to refer to this route. Adding a name to the route is easy:</p>
<pre>match "/autos/cars/sedans" =&gt; "autos#cars_sedans"<strong>, :as =&gt; :autos_cars_sedans</strong></pre>
<p>See that? Adding a comma and an <strong>:as =&gt; &#8230;</strong> tidbit at the end gives your route a name.</p>
<p>But the name itself isn&#8217;t the only reason I&#8217;m suggesting named routes. You get a bonus when you name a route: two automagically-generated helpers that return the URL and the path for the route. These are referenced by taking away the colon at the beginning of the name and adding either <strong>_url</strong> or <strong>_path</strong> to the end like so:</p>
<p>autos_cars_sedans<strong>_url</strong> (returns the full URL: <em>http://yourdomain.com/autos/cars/sedans</em>)</p>
<p>autos_cars_sedans<strong>_path</strong> (returns only the path: <em>/autos/cars/sedans</em>)</p>
<p>We&#8217;re only interested in the <strong>_path</strong>. The helper code you&#8217;re about to write will need this, and hoo-boy, this is where pure, lame magic kicks in.</p>
<p>So go ahead and set up named routes for all of your pages and just kinda forget about them for a moment.</p>
<p><strong>Second Step: A helper that executes exactly one line of code</strong></p>
<p>What we&#8217;re going to do with the helper is this: for each menu item&#8217;s anchor, compare its named route&#8217;s <em>path</em> to the currently loading page&#8217;s <em>path</em>, and if the latter <em>starts with</em> the former, we&#8217;re going to add a &#8220;current&#8221; class to the anchor.</p>
<p>The &#8220;starts with<em>&#8220;</em> part is the magic, and it&#8217;s why I insisted earlier that you do not jump across controllers in your submenus. <em>The named route path for each submenu item should <strong>start with</strong> the named route path for its parent menu item</em>. That&#8217;s the only way this system will work.</p>
<p>Example: Let&#8217;s say you&#8217;re visiting the <em>http://yourdomain.com/cars/autos/sedans</em> page on your website. The path portion of this URL (the part after the domain name) is <em>/cars/autos/sedans</em>. If any menu or submenu items have paths that the URL&#8217;s path <strong><em>starts with</em></strong>, those menu items will test positive in the helper.</p>
<p>So, given a URL path of <em>/autos/cars/sedans</em>, what passes the test?</p>
<ul>
<li>Parent menu item path: <em>/autos/cars</em> (<strong>PASS</strong>, the URL path starts with this path)</li>
<li>Other parent menu item path: <em>/autos/trucks</em> (FAIL)</li>
<li>Submenu item path: <em>/autos/cars/sedans</em> (<strong>PASS</strong>, the URL path starts with this path)</li>
<li>Other submenu item path: <em>/autos/cars/coupes</em> (FAIL)</li>
</ul>
<p>I hope that makes sense because I don&#8217;t know how to explain it any other way.</p>
<p>Okay, here&#8217;s the helper. All it does is run the test and output the word &#8220;current&#8221; if the test passes. Put this in your <em>/app/helpers/application_helper.rb</em> file unless you have a good reason to put it elsewhere.</p>
<pre># Add a 'current' class for current nav item
 def iscurrent(route)
 'current' if request.path.try(:starts_with?, route) 
 end</pre>
<p>You&#8217;ll see how this is called in the next step, where you&#8217;ll build your menu with <em>link_to</em> statements. It&#8217;s coming together, don&#8217;t worry.</p>
<p><strong>Third Step: A menu built with link_to<em> </em>anchors</strong></p>
<p>Whether you&#8217;re using a partial for your navigation (I recommend this) or if you&#8217;re plugging it right into your .<em>haml</em> or .<em>erb</em> template, use Rails&#8217; <em>link_to</em> method to build your anchors.</p>
<p>The last argument passed to each <em>link_to</em> statement is the helper that either will or won&#8217;t add the &#8220;current&#8221; class. If you&#8217;re familiar with <em>link_to</em> (okay, another assumption, I assume you are), the extra code for the helper isn&#8217;t a big deal.</p>
<p>For each anchor in the menu, do something like this:</p>
<pre>= link_to 'Sedans', :autos_cars_sedans<strong>, class: iscurrent(autos_cars_sedans_path)</strong></pre>
<p>In order:</p>
<ul>
<li><em>Sedans</em> is the name of the anchor (what users see in the menu)</li>
<li><em>:autos_cars_sedans</em> is the named route for the anchor</li>
<li><em>class: iscurrent(autos_cars_sedans_path)</em> calls the helper with the named route&#8217;s path, and if there&#8217;s a <em>starts with</em> match, the anchor gets a &#8220;current&#8221; class</li>
</ul>
<p>An example in .haml:</p>
<pre>%ul
  %li
     = link_to 'Cars', :autos_cars, class: iscurrent(autos_cars_path)
     %ul
        %li
           = link_to 'Sedans', :autos_cars_sedans, class: iscurrent(autos_cars_sedans_path)
        %li
           = link_to 'Coupes', :autos_cars_coupes, class: iscurrent(autos_cars_coupes_path)
        %li
           = link_to 'Hybrids', :autos_cars_hybrids, class: iscurrent(autos_cars_hybrids_path)
  %li
     = link_to 'Trucks', :autos_trucks, class: iscurrent(autos_trucks_path)
     %ul
        %li
           = link_to 'Flatbeds', :autos_trucks_flatbeds, class: iscurrent(autos_trucks_flatbeds_path)
        %li
           = link_to 'Garbage', :autos_trucks_garbage, class: iscurrent(autos_trucks_garbage_path)</pre>
<p><strong>Fourth Step: Absolute-positioned Submenus</strong></p>
<p>Add the following attributes to the submenu UL selector in CSS:</p>
<pre>ul li ul {   /* submenu UL */
   position: absolute;
   top: -9999px;
   left: -9999px;
   /* ...the rest of your attributes... */
}</pre>
<p>Don&#8217;t ever set navigation to display: none. Ever. Bad. Don&#8217;t do it.</p>
<p>Now, set up a new selector that will get rid of the absolute positioning if the parent menu item&#8217;s anchor has a &#8220;current&#8221; class:</p>
<pre>ul li a.current + ul {
   position: static;
}</pre>
<p><span style="line-height: 18px;">That&#8217;s it. Now if a parent menu item&#8217;s anchor has a &#8220;current&#8221; class, your submenu will snap back into its place when your page loads like it was always there.</span></p>
<p>Of course, you&#8217;ll also want to set up CSS for highlighting the anchors themselves:</p>
<pre>ul li a.current {  /* parent menu item anchor */
   color: #000;
}

ul li ul li a.current {  /* submenu item anchor */
   color: #f00;
}</pre>
<p><strong>That&#8217;s a wrap&#8230;</strong></p>
<p>Unless I botched an explanation somewhere along the way, you&#8217;re done. Everything described in the first paragraph should be in place and functional, and all without complex menu building systems that deviate from stock Rails/HTML/CSS. And yeah, that was a lot of writing for what amounts to very little work. I just want folks to understand what&#8217;s happening. If you focus on functionality, not prescribed solutions, your problem solving skills improve. Yadda yadda yadda.</p>
<p>One last bit: why didn&#8217;t I just use JavaScript to highlight/hide/show the submenus? Two reasons:</p>
<p><strong> Reason #1: it&#8217;s sloppy.</strong> If JavaScript is being used to show a submenu, you&#8217;ll see the submenu appear a moment after the page loads. That flash of it&#8217;s-not-there-oh-nevermind-it&#8217;s-there-now looks amateur. Don&#8217;t settle for it.</p>
<p><strong>Reason #2:</strong> <strong>JavaScript is an unnecessary crutch</strong> that too many devs reach for whenever they need to do something &#8220;fancy.&#8221; As far as I&#8217;m concerned, the less JavaScript, the better. As you can see above, JavaScript is entirely unnecessary for this task.</p>
<p>Okay, go forth and multiply. If you see any errors in what I wrote above, please let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://modal.us/blog/2012/12/07/highlighting-multiple-levels-of-navigation-in-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HDMI audio volume control on Mac OS Lion</title>
		<link>http://modal.us/blog/2012/06/21/hdmi-audio-volume-control-on-mac-os-lion/</link>
		<comments>http://modal.us/blog/2012/06/21/hdmi-audio-volume-control-on-mac-os-lion/#comments</comments>
		<pubDate>Fri, 22 Jun 2012 01:06:58 +0000</pubDate>
		<dc:creator>erat</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[HDMI]]></category>
		<category><![CDATA[Soundflower]]></category>

		<guid isPermaLink="false">http://modal.us/?p=704</guid>
		<description><![CDATA[When I got my new MacBook Pro, I decided to make the switch to HDMI for audio and video. It&#8217;s great, but there&#8217;s one irritant: HDMI&#8217;s digital audio is &#8220;normalized&#8221; so the system&#8217;s built-in volume control won&#8217;t work. Apps like &#8230; <a href="http://modal.us/blog/2012/06/21/hdmi-audio-volume-control-on-mac-os-lion/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>When I got my new MacBook Pro, I decided to make the switch to HDMI for audio and video. It&#8217;s great, but there&#8217;s one irritant: HDMI&#8217;s digital audio is &#8220;normalized&#8221; so the system&#8217;s built-in volume control won&#8217;t work. Apps like iTunes offer their own volume controls but at a system level I was screwed.</p>
<p>That is, until I found <a title="Soundflower website" href="http://cycling74.com/products/soundflower/" target="_blank">Soundflower</a>.</p>
<p>Simply put, if you are in the same predicament, do the following:</p>
<ul>
<li>download and install <a title="Soundflower download page" href="http://code.google.com/p/soundflower/downloads/list" target="_blank">Soundflower</a></li>
<li>reboot</li>
<li>start System Preferences and set your Sound output to <em>Soundflower (2ch)</em></li>
<li>run <em>Applications/Soundflower/Soundflowerbed</em> and choose HDMI as your output</li>
</ul>
<p>Voila, the system volume control will control HDMI audio.</p>
<p>Note that this bypasses some inner-digital-audio shenanigans so your audio output won&#8217;t be like buttuh anymore, but if you&#8217;re an audio neanderthal like me you may not care (my external speakers are in my monitor. That shows how much I care about computer audio).</p>
<p>(You may need to set up <em>Applications/Soundflower/Soundflowerbed</em> to start when you log in. Maybe not. I set it up because I want the Soundflower menu item available in the menu bar. Experiment if you&#8217;re curious.)</p>
]]></content:encoded>
			<wfw:commentRss>http://modal.us/blog/2012/06/21/hdmi-audio-volume-control-on-mac-os-lion/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Ch-ch-ch-ch-chaaanges</title>
		<link>http://modal.us/blog/2012/06/04/ch-ch-ch-ch-chaaanges/</link>
		<comments>http://modal.us/blog/2012/06/04/ch-ch-ch-ch-chaaanges/#comments</comments>
		<pubDate>Tue, 05 Jun 2012 05:11:39 +0000</pubDate>
		<dc:creator>erat</dc:creator>
				<category><![CDATA[contracting]]></category>

		<guid isPermaLink="false">http://modal.us/?p=659</guid>
		<description><![CDATA[I&#8217;ll make this short and sweet: after a trial period in which I did lots of work on cool projects, a fair bit of soul searching, and a lot of priority assessment, I have decided to return to contracting. Yes, &#8230; <a href="http://modal.us/blog/2012/06/04/ch-ch-ch-ch-chaaanges/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ll make this short and sweet: after a trial period in which I did lots of work on cool projects, a fair bit of soul searching, and a lot of priority assessment, I have decided to return to contracting.</p>
<p>Yes, this means I have removed myself from full-time employment at tenfour agency.</p>
<p>My time at tenfour is valuable to me and will remain so as I return to contracting. And I&#8217;m going to miss the hell out of my former teammates, I really will. Regardless, I&#8217;m throwing myself back in the ocean to swim around a bit more before settling down with one company.</p>
<p>I wish everyone at tenfour all the best and I look forward to maintaining the friendships that developed over the months that I worked there. It&#8217;s a great company, and I&#8217;m sure in no time at all someone else will be found that will fill my (former) shoes.</p>
<p>The adventure continues. More details later.</p>
<p>(Side note: I do not intend to re-start my LLC at this time, so please understand when I request that people <strong><em>not</em></strong> refer clients to me or solicit freelance work directly. It&#8217;s nothing personal, just business.)</p>
]]></content:encoded>
			<wfw:commentRss>http://modal.us/blog/2012/06/04/ch-ch-ch-ch-chaaanges/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Time to brag about Tweet-a-Beer</title>
		<link>http://modal.us/blog/2012/05/04/time-to-brag-about-tweet-a-beer/</link>
		<comments>http://modal.us/blog/2012/05/04/time-to-brag-about-tweet-a-beer/#comments</comments>
		<pubDate>Fri, 04 May 2012 08:13:46 +0000</pubDate>
		<dc:creator>erat</dc:creator>
				<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://modal.us/?p=655</guid>
		<description><![CDATA[Today the 2012 SoMe awards ceremony took place at the Fez Ballroom here in Portland. My company, tenfour agency, won the SoMe Agency of the Year award, mostly (exclusively?) because of the Tweet-a-Beer website that we produced in February/March for &#8230; <a href="http://modal.us/blog/2012/05/04/time-to-brag-about-tweet-a-beer/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Today the 2012 SoMe awards ceremony took place at the Fez Ballroom here in Portland. My company, <a title="tenfour agency" href="http://tenfouragency.com">tenfour agency</a>, won the SoMe Agency of the Year award, mostly (exclusively?) because of the <a title="Tweet-a-Beer" href="http://tweet-a-beer.com">Tweet-a-Beer website</a> that we produced in February/March for SXSW.</p>
<p>Yeah, I built the front-end of that site. Lots of long hours. Lots of gray hair. And now, I get to brag about it.</p>
<p>Indulge me, I rarely get to do this.</p>
<p>&#8230;</p>
<p>Okay, I&#8217;m done. Time to move on.</p>
]]></content:encoded>
			<wfw:commentRss>http://modal.us/blog/2012/05/04/time-to-brag-about-tweet-a-beer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RVM, Ruby 1.9.3, XCode 4.3, hell</title>
		<link>http://modal.us/blog/2012/04/02/rvm-ruby-1-9-3-xcode-4-3-hell/</link>
		<comments>http://modal.us/blog/2012/04/02/rvm-ruby-1-9-3-xcode-4-3-hell/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 03:38:51 +0000</pubDate>
		<dc:creator>erat</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://modal.us/?p=642</guid>
		<description><![CDATA[Like many web devs, I need to know about Ruby on Rails even if I&#8217;m only a front-end guy. It&#8217;s a decent framework, actually, but versions can be a problem so I need to use RVM to manage my RoR &#8230; <a href="http://modal.us/blog/2012/04/02/rvm-ruby-1-9-3-xcode-4-3-hell/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Like many web devs, I need to know about Ruby on Rails even if I&#8217;m only a front-end guy. It&#8217;s a decent framework, actually, but versions can be a problem so I need to use RVM to manage my RoR work environments. So when I got a new MacBook last week, RVM and RoR were high on my list of things to install.</p>
<p><span id="more-642"></span></p>
<p>I downloaded XCode 4.3.2 (I think) from Apple and installed it, then I downloaded and installed RVM, then I tried to install Ruby 1.9.3 via RVM. That&#8217;s when things went south.</p>
<p>Hell began with errors about missing build tools. I checked, and&#8211;WHO KNEW&#8211;out of the 3+ GB of XCode that I downloaded, no command line utilities were included. Really? Okay, then WTF is in there, Steve&#8217;s junk email and browser cache files from the last 10 years?</p>
<p>Whatever, you can install command line tools from within XCode or download them separately through Apple&#8217;s developer website and install them without XCode. Installing the command line tools took care of the first set of OMG-missing-everything errors I was getting when building Ruby.</p>
<p>The second set of errors was harder to solve.</p>
<p>You&#8217;ll see this if you try to build Ruby 1.9.3 using RVM on a Mac: <em>openssl_missing.h</em> will throw all kinds of type conflicts during the build. Lots of websites out there say to move files around, get rid of MacPorts, get rid of Homebrew, etc. I have MacPorts installed, and OpenSSL was built/installed from it, so I removed OpenSSL from MacPorts (see MacPorts docs for that. You&#8217;ll have to remove lots of other packages that depend on OpenSSL before OpenSSL will leave) and then I reset the Ruby build within RVM so I&#8217;d start with fresh build configuration files:</p>
<pre>Eriks-MacBook-Pro:~ erat$ <strong>rvm remove 1.9.3</strong>
Eriks-MacBook-Pro:~ erat$ <strong>rvm install 1.9.3</strong></pre>
<p>That fixed it. For cryin&#8217; out loud&#8230;</p>
<p>Note: some folks say this is new to Ruby 1.9.3, so if you don&#8217;t need it, maybe sticking with Ruby 1.9.2 will work better for you. Your call.</p>
]]></content:encoded>
			<wfw:commentRss>http://modal.us/blog/2012/04/02/rvm-ruby-1-9-3-xcode-4-3-hell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>About those pesky -webkit- CSS prefixes&#8230;</title>
		<link>http://modal.us/blog/2012/03/24/about-those-pesky-webkit-css-prefixes/</link>
		<comments>http://modal.us/blog/2012/03/24/about-those-pesky-webkit-css-prefixes/#comments</comments>
		<pubDate>Sat, 24 Mar 2012 14:21:55 +0000</pubDate>
		<dc:creator>erat</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[webkit]]></category>

		<guid isPermaLink="false">http://modal.us/?p=629</guid>
		<description><![CDATA[First, some back-story When browser vendors want to support CSS attributes that are either proprietary or experimental, they frequently isolate their implementations by adding what&#8217;s called a vendor prefix to the attribute. This allows vendors to experiment, and it&#8217;s generally &#8230; <a href="http://modal.us/blog/2012/03/24/about-those-pesky-webkit-css-prefixes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><strong>First, some back-story</strong></p>
<p>When browser vendors want to support CSS attributes that are either proprietary or experimental, they frequently isolate their implementations by adding what&#8217;s called a <em>vendor prefix</em> to the attribute. This allows vendors to experiment, and it&#8217;s generally understood that if/when the attribute becomes fully cooked and part of a CSS standard, the vendor prefix will be dropped.</p>
<p><span id="more-629"></span></p>
<p>CSS3 is all the rage right now (if you hear folks buzzing about HTML5, I can almost guarantee they are actually referring to CSS3), but CSS3 is not a complete standard yet so pretty much all of it is experimental. An example of an experimental CSS3 attribute is <em>transition</em>, which &#8216;animates&#8217; the changing of numerical data such as margins and heights. Vendors that are still working out CSS3 transitions will offer support for it using prefixed attributes. Web developers that want to utilize transitions need to specify not only the standard name for the attribute but also all variations that use prefixes, like so (these examples transition all numerical attributes over a span of one second):</p>
<pre>-moz-transition: all 1s;
-webkit-transition: all 1s;
-ms-transition: all 1s;
-o-transition: all 1s;
transition: all 1s;</pre>
<p>In order, we have prefixed attributes for Mozilla/Gecko browsers like Firefox, Webkit browsers like Chrome and Safari, Microsoft&#8217;s Internet Explorer, and Opera. The last attribute is the standard attribute without prefixes. To future-proof the CSS, this should always be last in the list.</p>
<p>Okay, end of back-story.</p>
<p>On mobile devices, the king of browser tech is Webkit. It&#8217;s the basis of Mobile Safari which is used almost exclusively on iOS devices like iPhones and iPads; it&#8217;s also the basis for browsers that ship with Android-based phones and tablets. There are mobile versions of Firefox and Opera, and Windows phones use a mobile version of Internet Explorer, but web developers&#8217; love of Webkit is a force to be reckoned with. It&#8217;s completely understandable: Webkit is feature-rich and available almost everywhere on mobile and desktop devices. If your website works well on Webkit browsers, you&#8217;ll be covered on most mobile devices and a growing chunk of desktops.</p>
<p>However&#8230;</p>
<p>It turns out that the fore-mentioned affair between web developers and Webkit is becoming monogamous. Websites are popping up left and right that only offer support for Webkit, even to the point of sniffing browsers and turning non-Webkit users away. One of the main motivations for doing this: developers are tired of typing five lines of CSS code for every experimental attribute. Recall the chunk of CSS from above, the one that had a line for each vendor-prefixed attribute. Multiply that times the number of experimental attributes in a stylesheet and you&#8217;ll see why this is an irritant. I know it bugs the hell out of me. Still, I do it. Like many developers, I wish (almost daily) that there was only one web browser, that it worked on every O/S, that it wasn&#8217;t proprietary in any way, that it <em>rocked</em>, and it was free for anyone to use. That day may come. Until then, monogamy isn&#8217;t a viable option.</p>
<p><strong>Get to the point already</strong></p>
<p>So, yeah, you wanted to know what&#8217;s so pesky about -webkit- vendor prefixes. Here it is: Mozilla, Opera, and Microsoft&#8211;all the vendors that produce browsers that are <em>not</em> based on Webkit&#8211;are now planning to support -webkit- vendor prefixes.</p>
<p>Silly, yes? Not really. They all have mobile browsers that support most of the same experimental CSS as Webkit, but lazy web developers aren&#8217;t adding the full list of vendor-prefixed CSS attributes. If Mozilla, Microsoft, and Opera add support for the -webkit- prefix, websites that previously looked broken will suddenly work fine, or at least that&#8217;s what they hope will happen.</p>
<p>This is potentially bad.</p>
<p>To make matters worse, it seems that Apple (clearly basking in the dominance that Webkit&#8211;primarily an Apple product&#8211;enjoys) is planning to <em>never</em> drop the -webkit- prefixes. POOF! There goes the single most effective way to stop Webkit monogamy. If this happens and other browser vendors add -webkit- prefix support, kiss early access to experimental CSS goodbye. Essentially, we&#8217;ll find ourselves in a new only-works-in-IE6 era of web hell, only this time it&#8217;ll be an only-works-in-Webkit hell. Sorta.</p>
<p>Okay, maybe hell is too strong a word. It won&#8217;t be ideal.</p>
<p>Having said that, I do think it&#8217;s possible for a Webkit-dominated web to work. A few things would need to happen:</p>
<ul>
<li>Apple and Google need to share <em>all</em> of their extensions to Webkit so they can be shared as web standards,</li>
<li>Apple and the rest of the Webkit maintainers need to welcome participation from folks they perceive as competitors, and</li>
<li>Microsoft needs to make Internet Explorer render sites <em>exactly like Webkit</em></li>
</ul>
<p>Don&#8217;t hold your breath on that last item. You&#8217;ll turn blue.</p>
<p>Bottom line: if you&#8217;re a web developer, use all vendor prefixes, not just Webkit&#8217;s. If that chafes you, use SASS or some other CSS pre-processor to do the duplication work for you. One way or another, just do it. If you&#8217;re already doing it, thanks.</p>
<p>Peace out.</p>
]]></content:encoded>
			<wfw:commentRss>http://modal.us/blog/2012/03/24/about-those-pesky-webkit-css-prefixes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The {end,beginning} of an era</title>
		<link>http://modal.us/blog/2012/01/09/the-endbeginning-of-an-era/</link>
		<comments>http://modal.us/blog/2012/01/09/the-endbeginning-of-an-era/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 23:00:16 +0000</pubDate>
		<dc:creator>erat</dc:creator>
				<category><![CDATA[freelance]]></category>
		<category><![CDATA[Modal]]></category>

		<guid isPermaLink="false">http://modal.us/?p=617</guid>
		<description><![CDATA[It had to happen sooner or later, right? Change: it&#8217;s one of the constants in our lives, next to breathing and eating and fill-in-the-blank. I&#8217;ve been through lots of changes over the years, some good and some bad, but luckily &#8230; <a href="http://modal.us/blog/2012/01/09/the-endbeginning-of-an-era/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>It had to happen sooner or later, right? Change: it&#8217;s one of the constants in our lives, next to breathing and eating and fill-in-the-blank. I&#8217;ve been through lots of changes over the years, some good and some bad, but luckily most have been good. This latest change is definitely in the good column.</p>
<p>The change: I just accepted a full-time position at <a title="tenfour agency" href="http://tenfouragency.com">tenfour agency</a>. My title won&#8217;t fit easily on a business card, especially the tiny ones they use at tenfour: Senior Front-end Web Developer/Designer. Inhale.</p>
<p>The not-so-happy part of this deal: I need to put Modal to rest. My attention needs to be focused on my new role at tenfour, and working full-time and freelancing don&#8217;t mix well (I tried it. It doesn&#8217;t work), so one has to go. I&#8217;ll miss the loose schedule, the ability to meet people during the day, not having to request vacation time&#8230;but I&#8217;m trading it all for a rockin&#8217; job with an awesome crew, and for that I&#8217;m grateful. I&#8217;ve admired tenfour from a distance for some time now so it&#8217;s a real kick to be taken under their wing. Good times, totally.</p>
<p>To all my clients here in Oregon and beyond, thank you for helping me get to this point. I appreciate the work, and I appreciate the mix of folks that I&#8217;ve worked with. I wish you all the best, and I hope you find someone out there to take my place that&#8217;s almost as good as I am. Okay, as good if not better. But we all know &#8220;almost&#8221; is right, don&#8217;t we? Yes, we do.</p>
<p>I&#8217;m keeping this website around for a least a little while. Maybe I&#8217;ll keep it forever. My LLC is going to be killed within days, but the domain is mine so I may as well continue with it. At least two people read it and I don&#8217;t want to make them mad.</p>
<p>Happy new year, folks! It&#8217;s already a doozy.</p>
<p>E.</p>
]]></content:encoded>
			<wfw:commentRss>http://modal.us/blog/2012/01/09/the-endbeginning-of-an-era/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
