<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>A Beautiful Blog</title>
	
	<link>http://www.abeautifulsite.net/blog</link>
	<description />
	<lastBuildDate>Fri, 27 Apr 2012 17:54:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/abeautifulsite" /><feedburner:info uri="abeautifulsite" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Why SaaS is Cheaper Than Installable Software</title>
		<link>http://feedproxy.google.com/~r/abeautifulsite/~3/OExXF9So8v0/</link>
		<comments>http://www.abeautifulsite.net/blog/2012/03/why-saas-is-cheaper-than-installable-software/#comments</comments>
		<pubDate>Wed, 14 Mar 2012 03:51:55 +0000</pubDate>
		<dc:creator>Cory LaViska</dc:creator>
				<category><![CDATA[Surreal CMS]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.abeautifulsite.net/blog/?p=1416</guid>
		<description><![CDATA[Overview As a software as a service (SaaS) provider, the question comes up all the time: &#8220;Is there an installable version of your software that I can put on my own server?&#8221; In all honesty, I cringe every time I &#8230; <a class="more-link" href="http://www.abeautifulsite.net/blog/2012/03/why-saas-is-cheaper-than-installable-software/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>Overview</h2>
<p>As a <a href="http://en.wikipedia.org/wiki/Software_as_a_service">software as a service</a> (SaaS) provider, the question comes up all the time: &#8220;Is there an installable version of your software that I can put on my own server?&#8221;</p>
<p>In all honesty, I cringe every time I hear this.  It&#8217;s not that I have a personal vendetta against installable software, it&#8217;s because I know what the asker is usually thinking:</p>
<ol>
<li>I can save money if I only have to pay for it once</li>
<li>It&#8217;s safer because it&#8217;s on my own server</li>
<li>I can tweak it to do what I need it to do</li>
</ol>
<p>The truth is, in almost every case, SaaS is a better solution that will save them more time and money than an installable system—they just don&#8217;t realize it yet.</p>
<p><span id="more-1416"></span></p>
<h2>I can save money if I only have to pay for it once</h2>
<p>It seems like a logical argument at first, but there are hidden costs with installable software that are often neglected.  For example, time.  Time is money, and as a designer, you probably get paid by the job.  This means that one-time costs are very appealing to you when quoting potential work.  If it&#8217;s free, that&#8217;s even better.  That&#8217;s why so many people use WordPress, right?</p>
<p>In cases like these, you become the systems administrator.  That means when something breaks, you&#8217;re the one clients are calling to fix it.  This may not seem like a big deal if you&#8217;re just getting started, but as you grow your business, that becomes a lot of overhead.  We have one customer who uses our service to manage over 1,500 websites.  Could you imagine having to update 1,500 WordPress sites?  As you grow, the overhead for each installed system becomes more obvious and the time it takes to maintain them becomes staggering.  Since time is money, your cost goes up with each new client you bring on board.</p>
<h2>It&#8217;s safer because it&#8217;s on my own server</h2>
<p>Alright, so you&#8217;re OK with eating that extra cost.  Let&#8217;s imagine that you chose to install WordPress to power a client&#8217;s new website.  You get everything setup, go through a few revision cycles, launch the site, and then you get paid.  All is well and everyone is happy.</p>
<p><a href="http://codex.wordpress.org/FAQ_My_site_was_hacked">And then this happens.</a></p>
<p>You get a frantic call one evening from your client who is panicking that their site has been hacked and they want it fixed immediately.  The culprit?  Some script kiddie took advantage of a known exploit because someone forgot to update to the latest version of WordPress last week.  No problem, you can just restore the site from a recent backup and update WordPress to patch the vulnerability.</p>
<p>Wait&#8230;you mean you haven&#8217;t been keeping backups?</p>
<p>Now you&#8217;re stuck wading through infected pages and database entries trying to repair all the damage.  Don&#8217;t forget to change all your users&#8217; passwords, the database password, your API keys, and for good measure, your FTP password.  Oh, and your client just emailed you saying that <a href="http://www.stopbadware.org/home/faq#why_flagged">Google blacklisted the site</a> for serving badware.  And they&#8217;re missing the story that they just posted a couple hours ago—and some other articles that were really important.  The entire cleanup process can take a long time, especially if the attacker was clever.  And this is just <em>one site</em>.</p>
<p>When the dust settles after hours of your time is wasted because of a simple oversight, you then seek compensation from your client for the time you spent restoring their site.  Of course, they&#8217;re going to be a bit sour that the site <em>you built</em> was hacked and, even though it&#8217;s not your fault, they think it is.  Your relationship with them gets a bit salty at this point, and they become less likely to recommend your services to others.  This can cost you a lot of money, too.</p>
<p>But how much is your time worth?  A conservative designer might say $40 an hour.  Add those hours up, and I guarantee you&#8217;ll find the overall cost of an equivalent SaaS product to be comparatively less—especially if multiple incidents happen throughout the year.</p>
<p>Granted, just about any site can harbor exploits and become a victim, but installable software makes it much easier for attackers to find vulnerabilities since the entire code base is exposed and living on your server.  That is a huge advantage of SaaS—it&#8217;s much harder to hack what you can&#8217;t see.</p>
<p>Another advantage of SaaS is that, if a service discovers a bug or an exploit in their system, it gets fixed automatically.  You don&#8217;t have to update multiple systems. You don&#8217;t have to reset all your passwords.  You don&#8217;t have to remove malicious code from your site.  In fact, since there are many other users, it&#8217;s likely that the problem will be noticed and fixed before you ever even realize it was there.</p>
<h2>I can tweak it to do what I need it to do</h2>
<p>Despite all of that, some folks still think that installable software is better because you can change the code when you need something to work in a way that it&#8217;s not intended to work.  This is usually a bad idea, especially if you don&#8217;t stick to the API.</p>
<p>Why?  Because most people that like to tinker with code don&#8217;t have a complete understanding of how everything works.  Software is complex, and without a solid understanding of the code base, you risk introducing bugs and vulnerabilities that didn&#8217;t exist in the original version.  It&#8217;s also very easy to make changes that hinder the application&#8217;s usability.</p>
<p>Aside from that, if you&#8217;re not coding off an API, you&#8217;ll probably need to make those changes each time an update comes out.  If your changes are significant, you will inevitably be reluctant to perform the update which will lead to what I just talked about in the previous section.</p>
<p>Again, this is usually a bad idea.</p>
<h2>I can just roll my own service</h2>
<p>And then there are the code rogues who would rather spend weeks working on a halfhearted equivalent just to avoid paying a nominal monthly fee, despite the value it would bring to them and their clients.</p>
<p>While I don&#8217;t doubt a talented developer&#8217;s ability to create an app, it will never be as cost effective as an already-available SaaS product.  You might be able to produce a quick-fix system that gets the job done, but it won&#8217;t be as maintainable or reusable as it should be, and it won&#8217;t be as polished as something that&#8217;s been around for awhile.  Even if you take the time to turn it into a service that all your clients can use, you&#8217;ll be spending more time developing features and fixing bugs than you will finding new clients.  You&#8217;ll have a new full time job that you don&#8217;t even get paid for.</p>
<p>Again, time is money, and while it may seem like an easy thing to do, building and maintaining your own system won&#8217;t be as cost efficient as going with an existing SaaS service.  It&#8217;s just not economical, and it will end up costing much more than what your clients are willing to pay you for.</p>
<h2>In the end&#8230;</h2>
<p>Being in the content management industry, I have the opportunity to interface with established web designers from all over the world.  Many of them have tried both installable and SaaS solutions and, while a handful will always prefer the former, the majority who try our service never look back.  They would rather spend their time doing what they love instead of being a systems administrator or developing their own applications.  The benefits outweigh the cost, and that&#8217;s the whole purpose of SaaS.</p>
<p>Ultimately, it&#8217;s up to you to decide what tools and services you&#8217;d like to use to power your business.  Many people find comfort using traditional software applications, but it&#8217;s important to consider their disadvantages as well.  If there&#8217;s a SaaS equivalent that does the job, you might consider taking another look at it for your next project.  You might just find that you&#8217;ll get more value than what you&#8217;re actually paying for.</p>
<img src="http://feeds.feedburner.com/~r/abeautifulsite/~4/OExXF9So8v0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.abeautifulsite.net/blog/2012/03/why-saas-is-cheaper-than-installable-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.abeautifulsite.net/blog/2012/03/why-saas-is-cheaper-than-installable-software/</feedburner:origLink></item>
		<item>
		<title>jQuery Bootstrap-style Dropdowns</title>
		<link>http://feedproxy.google.com/~r/abeautifulsite/~3/MJ7cy3cz2y8/</link>
		<comments>http://www.abeautifulsite.net/blog/2012/03/jquery-bootstrap-style-dropdowns/#comments</comments>
		<pubDate>Thu, 08 Mar 2012 08:37:11 +0000</pubDate>
		<dc:creator>Cory LaViska</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.abeautifulsite.net/blog/?p=1408</guid>
		<description><![CDATA[A really awesome framework called Bootstrap was recently released by a couple of guys at Twitter. You probably already heard of it by now. And you probably already fell in love with it.  Today I made a plugin that replicates &#8230; <a class="more-link" href="http://www.abeautifulsite.net/blog/2012/03/jquery-bootstrap-style-dropdowns/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A really awesome framework called <a href="http://twitter.github.com/bootstrap/">Bootstrap</a> was recently released by a couple of guys at Twitter. You probably already heard of it by now. And you probably already fell in love with it.  Today I made a plugin that replicates the features of Bootstrap’s dropdown to better suit my needs.</p>
<p><span id="more-1408"></span></p>
<h2>Backstory</h2>
<p>One of my favorite Boostrap plugins is <a href="http://twitter.github.com/bootstrap/javascript.html#dropdowns">dropdowns</a>, but I had a bit of difficulty getting started with them. The docs say you can apply a dropdown to <em>nearly any element</em>, but they really seem to work best with Bootstrap’s navbar, tab, and pill components. Since I was retrofitting an app that was around long before Bootstrap, this wasn’t going to work for me. That and I was hoping to get a scrollable dropdown (with tips!) and a few other features out of the deal. Thus, <a href="http://labs.abeautifulsite.net/jquery-dropdown/">this plugin</a> was born.</p>
<p>While the appearance of these dropdowns is almost identical to those of Bootstrap’s, it’s important to note that JavaScript for this plugin was developed entirely from scratch. Some CSS was borrowed, however, especially for generating those gorgeous tips.</p>
<p>Wanna see what they look like? <a href="http://labs.abeautifulsite.net/jquery-dropdown/">Try it!</a> Wanna contribute to this project? <a href="https://github.com/claviska/jquery-dropdown">It’s on GitHub</a></p>
<img src="http://feeds.feedburner.com/~r/abeautifulsite/~4/MJ7cy3cz2y8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.abeautifulsite.net/blog/2012/03/jquery-bootstrap-style-dropdowns/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.abeautifulsite.net/blog/2012/03/jquery-bootstrap-style-dropdowns/</feedburner:origLink></item>
		<item>
		<title>Access Pages Without the PHP Extension Using .htaccess</title>
		<link>http://feedproxy.google.com/~r/abeautifulsite/~3/ZEiXCAnaKnA/</link>
		<comments>http://www.abeautifulsite.net/blog/2012/02/access-pages-without-the-php-extension-using-htaccess/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 02:46:30 +0000</pubDate>
		<dc:creator>Cory LaViska</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Servers]]></category>

		<guid isPermaLink="false">http://www.abeautifulsite.net/blog/?p=1389</guid>
		<description><![CDATA[There are a number of ways to make &#8220;clean URLs&#8221; work on your site, but this one is pretty straight forward.  It allows you to access /any-page.php by simply going to /any-page.  Just place the following into your .htaccess file &#8230; <a class="more-link" href="http://www.abeautifulsite.net/blog/2012/02/access-pages-without-the-php-extension-using-htaccess/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>There are a number of ways to make &#8220;clean URLs&#8221; work on your site, but this one is pretty straight forward.  It allows you to access <strong>/any-page.php</strong> by simply going to <strong>/any-page</strong>.  Just place the following into your <strong>.htaccess</strong> file (and make sure that <strong>mod_rewrite</strong> is enabled):</p>
<p><span id="more-1389"></span></p>
<pre class="brush: plain; title: ; notranslate">
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]
</pre>
<p>The nice thing about this is that it doesn&#8217;t affect querystrings.  With this solution, both of these URLs are effectively the same:</p>
<pre class="brush: plain; title: ; notranslate">

http://example.com/page.php?id=123

http://example.com/page?id=123
</pre>
<p>Of course, the caveat is that you don&#8217;t have &#8220;clean querystrings&#8221;, but it&#8217;s a reasonable trade-off between &#8220;clean&#8221; and configuration.</p>
<img src="http://feeds.feedburner.com/~r/abeautifulsite/~4/ZEiXCAnaKnA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.abeautifulsite.net/blog/2012/02/access-pages-without-the-php-extension-using-htaccess/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.abeautifulsite.net/blog/2012/02/access-pages-without-the-php-extension-using-htaccess/</feedburner:origLink></item>
		<item>
		<title>Surreal CMS No Longer on UserVoice</title>
		<link>http://feedproxy.google.com/~r/abeautifulsite/~3/IppORBXAbdE/</link>
		<comments>http://www.abeautifulsite.net/blog/2011/12/surreal-cms-no-longer-on-uservoice/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 01:43:05 +0000</pubDate>
		<dc:creator>Cory LaViska</dc:creator>
				<category><![CDATA[News & Updates]]></category>
		<category><![CDATA[Surreal CMS]]></category>

		<guid isPermaLink="false">http://abeautifulsite.net/blog/?p=1384</guid>
		<description><![CDATA[We would like to inform the Surreal CMS community that as of today, December 13th 2011, we will no longer be accepting feedback through our UserVoice account.  This isn&#8217;t to say that we don&#8217;t want or value your opinions, it &#8230; <a class="more-link" href="http://www.abeautifulsite.net/blog/2011/12/surreal-cms-no-longer-on-uservoice/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We would like to inform the Surreal CMS community that as of today, December 13th 2011, we will no longer be accepting feedback through our <a href="http://uservoice.com/">UserVoice</a> account.  This isn&#8217;t to say that we don&#8217;t want or value your opinions, it just means that we want to hear them from you directly.  <span id="more-1384"></span></p>
<p>For a long time, we&#8217;ve been asking for your feedback and directing you to post them on our UserVoice page.  In theory, this was a good idea, as it allowed the community to suggest new features and vote on their priority.  This gave us a good insight into where you wanted us to take Surreal.  However, over time, we&#8217;ve come to realize that UserVoice isn&#8217;t the solution we were really looking for.</p>
<p>For one, you were thrown into an entirely new interface and required to register a separate username and password.  Many users simply stopped at this point, which means that if they didn&#8217;t contact us directly we never got the chance to hear their feedback.  You shouldn&#8217;t be forced to register with another site just to tell us what you think about our service.</p>
<p>We also felt that UserVoice&#8217;s interface doesn&#8217;t fit well with Surreal&#8217;s mantra.  Surreal is simple.  Providing feedback to us should be just as simple.  So from now on, we encourage you to send all your comments, suggestions, and all other feedback directly to us through Surreal&#8217;s Help &amp; Support section.</p>
<p>We want to hear from you directly, and we want to take back that personal touch that we lost when we started sending folks elsewhere to tell us how we were doing.</p>
<img src="http://feeds.feedburner.com/~r/abeautifulsite/~4/IppORBXAbdE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.abeautifulsite.net/blog/2011/12/surreal-cms-no-longer-on-uservoice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.abeautifulsite.net/blog/2011/12/surreal-cms-no-longer-on-uservoice/</feedburner:origLink></item>
		<item>
		<title>TinyMCE Table Dropdown Plugin</title>
		<link>http://feedproxy.google.com/~r/abeautifulsite/~3/mCn8imrFIMI/</link>
		<comments>http://www.abeautifulsite.net/blog/2011/12/tinymce-table-dropdown-plugin/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 21:42:30 +0000</pubDate>
		<dc:creator>Cory LaViska</dc:creator>
				<category><![CDATA[News & Updates]]></category>

		<guid isPermaLink="false">http://abeautifulsite.net/blog/?p=1372</guid>
		<description><![CDATA[If you&#8217;ve ever used TinyMCE for table editing, you&#8217;ll know that the experience isn&#8217;t usually a good one.  To prevent clutter, most developers configure the toolbar to have just the Insert/Edit Table button, which isn&#8217;t nearly enough to do anything &#8230; <a class="more-link" href="http://www.abeautifulsite.net/blog/2011/12/tinymce-table-dropdown-plugin/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve ever used TinyMCE for table editing, you&#8217;ll know that the experience isn&#8217;t usually a good one.  To prevent clutter, most developers configure the toolbar to have just the Insert/Edit Table button, which isn&#8217;t nearly enough to do anything useful with tabular data.  In fact, TinyMCE&#8217;s table plugin has 12 tools (i.e. buttons) available for working with tables.  The problem is they take up a lot of real estate.  They make an otherwise simple toolbar very intimidating and unintuitive for novice users.  The fact of the matter is, most people who use TinyMCE may not even need to work with tables, so those extra 12 buttons will just be in their way.<span id="more-1372"></span></p>
<p>In <a href="http://www.surrealcms.com/">Surreal CMS</a> version 3, we tried to solve this problem by using only the Insert/Edit Table button in the toolbar.  For other functions, the user just needed to right-click on the table to bring up a contextual menu with additional table options.  For the most part this worked, but we saw a lot of support requests from people who never even knew there was a context menu available.  In addition, the use of context menus in web applications is still a rather <a href="http://stackoverflow.com/questions/779689/right-mouse-click-in-web-applications-good-or-bad-idea">controversial matter</a>.</p>
<p>So with the development of Surreal CMS v4 underway, we needed a better solution to this dilemma.  Here are the facts that we faced:</p>
<ul>
<li>Most people won&#8217;t be working with tables in the CMS</li>
<li>At the same time, a lot of people still need this functionality</li>
<li>The built-in TinyMCE <em>tablecontrols</em> feature dumps 12 buttons into the toolbar—every option is essential when working with tables, but it clutters the toolbar and intimidates novice users</li>
</ul>
<p>Our solution was to create a <a href="http://www.tinymce.com/wiki.php/API3:class.tinymce.ui.SplitButton">SplitButton</a> control that combined all of the necessary options into a single dropdown.  When the button is clicked, the Insert/Edit Table dialog appears.  When the arrow is clicked, you get the rest of the table options neatly organized in a TinyMCE dropdown:</p>
<p style="text-align: center;"><img class="alignleft" title="TinyMCE Table Dropdown Screenshot" src="https://github.com/claviska/tinymce-table-dropdown/raw/master/screenshot.png" alt="" /></p>
<p>The plugin is very lightweight and contains only one small JavaScript file—no CSS, images, or language packs required.  The plugin is also theme-ready and localization-ready, as it uses standard TinyMCE classes and terms.</p>
<p>We think that this is a very elegant solution for a very much overlooked UI problem, so for the sake of better usability in apps that use TinyMCE, we have released the code under the MIT license for all to use and share.  If you&#8217;re interested in this plugin, you can <a href="https://github.com/claviska/tinymce-table-dropdown">download and contribute to it on GitHub</a>.</p>
<img src="http://feeds.feedburner.com/~r/abeautifulsite/~4/mCn8imrFIMI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.abeautifulsite.net/blog/2011/12/tinymce-table-dropdown-plugin/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.abeautifulsite.net/blog/2011/12/tinymce-table-dropdown-plugin/</feedburner:origLink></item>
		<item>
		<title>Detecting Mobile Devices with JavaScript</title>
		<link>http://feedproxy.google.com/~r/abeautifulsite/~3/pjgDhdrJ_mI/</link>
		<comments>http://www.abeautifulsite.net/blog/2011/11/detecting-mobile-devices-with-javascript/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 21:08:05 +0000</pubDate>
		<dc:creator>Cory LaViska</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://abeautifulsite.net/blog/?p=1359</guid>
		<description><![CDATA[While I understand and value the concept of feature detection over browser detection, sometimes the need for knowing whether or not we&#8217;re dealing with a mobile device arises.  For in-depth device checking, you can rely on a complex library such &#8230; <a class="more-link" href="http://www.abeautifulsite.net/blog/2011/11/detecting-mobile-devices-with-javascript/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>While I understand and value the concept of feature detection over browser detection, sometimes the need for knowing whether or not we&#8217;re dealing with a mobile device arises.  For in-depth device checking, you can rely on a complex library such as <a href="http://blog.mobileesp.com/">The MobileESP Project</a>.  But for simpler applications, the following snippet can be useful.<span id="more-1359"></span></p>
<pre class="brush: jscript; title: ; notranslate">
var isMobile = {
    Android: function() {
        return navigator.userAgent.match(/Android/i) ? true : false;
    },
    BlackBerry: function() {
        return navigator.userAgent.match(/BlackBerry/i) ? true : false;
    },
    iOS: function() {
        return navigator.userAgent.match(/iPhone|iPad|iPod/i) ? true : false;
    },
    Windows: function() {
        return navigator.userAgent.match(/IEMobile/i) ? true : false;
    },
    any: function() {
        return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Windows());
    }
};
</pre>
<p>While this doesn&#8217;t account for <em>all</em> mobile platforms, it will pick up the most popular ones out there.</p>
<h2>Examples</h2>
<p>To check to see if the user is on any of the supported mobile devices:</p>
<pre class="brush: jscript; title: ; notranslate">
if( isMobile.any() ) alert('Mobile');
</pre>
<p>To check to see if the user is on a specific mobile device:</p>
<pre class="brush: jscript; title: ; notranslate">
if( isMobile.iOS() ) alert('iOS');
</pre>
<img src="http://feeds.feedburner.com/~r/abeautifulsite/~4/pjgDhdrJ_mI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.abeautifulsite.net/blog/2011/11/detecting-mobile-devices-with-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.abeautifulsite.net/blog/2011/11/detecting-mobile-devices-with-javascript/</feedburner:origLink></item>
		<item>
		<title>Redirecting to and from the WWW Subdomain with HTACCESS</title>
		<link>http://feedproxy.google.com/~r/abeautifulsite/~3/DkB4FfAzo9A/</link>
		<comments>http://www.abeautifulsite.net/blog/2011/11/redirecting-to-and-from-the-www-subdomain-with-htaccess/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 03:16:48 +0000</pubDate>
		<dc:creator>Cory LaViska</dc:creator>
				<category><![CDATA[Web Servers]]></category>

		<guid isPermaLink="false">http://abeautifulsite.net/blog/?p=1354</guid>
		<description><![CDATA[Here are a few snippets that will come in handy if you ever need to redirect www.example.com to example.com or vice versa.  There are a number of similar methods out there, but I prefer these as you don&#8217;t need to &#8230; <a class="more-link" href="http://www.abeautifulsite.net/blog/2011/11/redirecting-to-and-from-the-www-subdomain-with-htaccess/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Here are a few snippets that will come in handy if you ever need to redirect www.example.com to example.com or vice versa.  There are a number of similar methods out there, but I prefer these as you don&#8217;t need to modify anything between development and production.<span id="more-1354"></span></p>
<pre class="brush: plain; title: ; notranslate">
 ##
 ## www.domain.com --&gt; domain.com
 ##
 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
 RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
 </pre>
<p>&nbsp;</p>
<pre class="brush: plain; title: ; notranslate">
 ##
 ## domain.com --&gt; www.domain.com
 ##
 RewriteEngine On
 RewriteCond %{HTTP_HOST} !^www\.
 RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
 </pre>
<p>If you plan on using these, you&#8217;ll need to make sure you have the <a href="http://httpd.apache.org/docs/current/mod/mod_rewrite.html">mod_rewrite module</a> enabled on your server.</p>
<img src="http://feeds.feedburner.com/~r/abeautifulsite/~4/DkB4FfAzo9A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.abeautifulsite.net/blog/2011/11/redirecting-to-and-from-the-www-subdomain-with-htaccess/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.abeautifulsite.net/blog/2011/11/redirecting-to-and-from-the-www-subdomain-with-htaccess/</feedburner:origLink></item>
		<item>
		<title>The Simple Image Class for PHP</title>
		<link>http://feedproxy.google.com/~r/abeautifulsite/~3/pk61fz29f74/</link>
		<comments>http://www.abeautifulsite.net/blog/2011/11/the-simple-image-class-for-php/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 02:41:24 +0000</pubDate>
		<dc:creator>Cory LaViska</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://abeautifulsite.net/blog/?p=1328</guid>
		<description><![CDATA[If you love working with PHP but hate the GD library, you&#8217;ll love the Simple Image PHP class we&#8217;re releasing today. This class takes the headache out of dealing with images and features over 20 useful methods. Here are just &#8230; <a class="more-link" href="http://www.abeautifulsite.net/blog/2011/11/the-simple-image-class-for-php/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you love working with PHP but hate the GD library, you&#8217;ll love the Simple Image PHP class we&#8217;re releasing today.  This class takes the headache out of dealing with images and features over 20 useful methods.</p>
<p><span id="more-1328"></span></p>
<p>Here are just a few:</p>
<ul>
<li><strong>convert()</strong> &#8211; converts an image from one format to another</li>
<li><strong>flip()</strong> &#8211; flips an image vertically or horizontally</li>
<li><strong>rotate()</strong> &#8211; rotates an image at the specified angle</li>
<li><strong>brightness()</strong> &#8211; adjust the image&#8217;s brightness</li>
<li><strong>contrast()</strong> &#8211; adjust the image&#8217;s contrast</li>
<li><strong>grayscale()</strong> &#8211; makes the image black and white</li>
<li><strong>blur()</strong> &#8211; blurs the image at the specified level</li>
<li><strong>watermark()</strong> &#8211; creates a watermark effect using another image</li>
<li><strong>text()</strong> &#8211; adds text to the image</li>
</ul>
<p>In addition, there are some special methods for resizing and cropping:</p>
<ul>
<li><strong>resize()</strong> &#8211; resizes an image to the specified values</li>
<li><strong>resize_to_width()</strong> &#8211; resizes an image to the specified width</li>
<li><strong>resize_to_height()</strong> &#8211; resizes an image to the specified height</li>
<li><strong>resize_to_fit()</strong> &#8211; resizes an image to fit within the specified dimensions</li>
<li><strong>crop()</strong> &#8211; crops an image</li>
<li><strong>square_crop()</strong> &#8211; crops the image into a square of the given size</li>
</ul>
<h2>Download</h2>
<p>This project is actively maintained on GitHub.  Please submit all issues and contributions to the project page.  Licensed under both the MIT and the GNU GPL licenses.</p>
<p><a href="https://github.com/claviska/simple-image">Download the latest version from GitHub</a></p>
<img src="http://feeds.feedburner.com/~r/abeautifulsite/~4/pk61fz29f74" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.abeautifulsite.net/blog/2011/11/the-simple-image-class-for-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.abeautifulsite.net/blog/2011/11/the-simple-image-class-for-php/</feedburner:origLink></item>
		<item>
		<title>The jQuery Notification Plugin</title>
		<link>http://feedproxy.google.com/~r/abeautifulsite/~3/heFFrfnTrBE/</link>
		<comments>http://www.abeautifulsite.net/blog/2011/11/the-jquery-notification-plugin/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 02:00:02 +0000</pubDate>
		<dc:creator>Cory LaViska</dc:creator>
				<category><![CDATA[News & Updates]]></category>

		<guid isPermaLink="false">http://abeautifulsite.net/blog/?p=1325</guid>
		<description><![CDATA[Today we&#8217;re releasing another jQuery plugin that was born of necessity.  It&#8217;s a small, but incredibly useful notification system inspired by both Growl and the volume/mute notifications that can be seen in iOS. The goal of this plugin is to &#8230; <a class="more-link" href="http://www.abeautifulsite.net/blog/2011/11/the-jquery-notification-plugin/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Today we&#8217;re releasing another jQuery plugin that was born of necessity.  It&#8217;s a small, but incredibly useful notification system inspired by both <a href="http://growl.info/">Growl</a> and the volume/mute notifications that can be seen in iOS.<span id="more-1325"></span></p>
<p>The goal of this plugin is to show passive notifications that can be easily dismissed with minimal distraction.  Rather than using a dialog or a distracting overlay, the notification appears on screen for a specified duration, and then fades out.  The user may also dismiss the notification simply by clicking on it.  At the present time, this plugin does not support multiple notifications.</p>
<h2>Screenshot</h2>
<p><img class="size-full wp-image-1326 aligncenter" title="jquery-notification" src="http://abeautifulsite.net/blog/wp-content/uploads/2011/11/jquery-notification.png" alt="" width="569" height="417" />If you&#8217;re interested in using this in your own projects, head on over to GitHub and download the source.</p>
<h2>Demo &amp; Download</h2>
<p>This project is actively maintained on GitHub.  Please submit all issues and contributions to the project page.  Licensed under both the MIT and the GNU GPL licenses.</p>
<p><a href="http://labs.abeautifulsite.net/jquery-notification/">Demo</a> | <a href="https://github.com/claviska/jQuery-notification">Download the latest version on GitHub</a></p>
<img src="http://feeds.feedburner.com/~r/abeautifulsite/~4/heFFrfnTrBE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.abeautifulsite.net/blog/2011/11/the-jquery-notification-plugin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.abeautifulsite.net/blog/2011/11/the-jquery-notification-plugin/</feedburner:origLink></item>
		<item>
		<title>How to Delete a Tag on GitHub</title>
		<link>http://feedproxy.google.com/~r/abeautifulsite/~3/Msq47s5coU0/</link>
		<comments>http://www.abeautifulsite.net/blog/2011/11/how-to-delete-a-tag-on-github/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 00:56:10 +0000</pubDate>
		<dc:creator>Cory LaViska</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>

		<guid isPermaLink="false">http://abeautifulsite.net/blog/?p=1321</guid>
		<description><![CDATA[In the world of Git, tags are very useful for keeping track of your project&#8217;s version history. A lot of folks will argue that you shouldn&#8217;t delete tags, but there are real-world examples in which tags need to be deleted.  &#8230; <a class="more-link" href="http://www.abeautifulsite.net/blog/2011/11/how-to-delete-a-tag-on-github/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In the world of Git, tags are very useful for keeping track of your project&#8217;s version history. A lot of folks will argue that you shouldn&#8217;t delete tags, but there are real-world examples in which tags need to be deleted.  That said, it&#8217;s both a good and a bad thing that <a href="http://github.com/">GitHub</a> hasn&#8217;t built the ability to delete tags into it&#8217;s web app.<span id="more-1321"></span></p>
<p>It can be frustrating, however, if you ever come across that need.  If you&#8217;re one of those individuals, open up a terminal window and navigate to your local Git repository.  Once there, simply run these commands, replacing <strong>[tag]</strong> with the tag name:</p>
<pre class="brush: plain; title: ; notranslate">
git tag -d [tag];
git push origin :[tag]
</pre>
<p>And if your tag has the same name as one of your branches, use this instead:</p>
<pre class="brush: plain; title: ; notranslate">
git tag -d [tag]
git push origin :refs/tags/[tag]
</pre>
<p>Of course, these steps assume that you have Git running on your local machine.</p>
<img src="http://feeds.feedburner.com/~r/abeautifulsite/~4/Msq47s5coU0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.abeautifulsite.net/blog/2011/11/how-to-delete-a-tag-on-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.abeautifulsite.net/blog/2011/11/how-to-delete-a-tag-on-github/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.695 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-04-27 13:54:51 -->

