<?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>Monolith Development</title>
	<atom:link href="http://monolithdev.us/feed/" rel="self" type="application/rss+xml" />
	<link>http://monolithdev.us</link>
	<description>&#60;&#63; &#47;&#47; I build stuff. &#63;&#62;</description>
	<lastBuildDate>Mon, 22 Feb 2010 16:37:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Good Form To Increase Conversions</title>
		<link>http://monolithdev.us/good-form-to-increase-conversions/</link>
		<comments>http://monolithdev.us/good-form-to-increase-conversions/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 15:21:34 +0000</pubDate>
		<dc:creator>darren</dc:creator>
				<category><![CDATA[For The Client]]></category>
		<category><![CDATA[government]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://monolithdev.us/?p=255</guid>
		<description><![CDATA[
Entrance Barriers

If you had to guess at the largest entrance barrier for a website what would guess? Maybe there is a cost involved and its too high? The website design is bad? Its a complicated website and not enough instructions?
Sure the cost might be more than the market will bear. More than likely your just [...]]]></description>
			<content:encoded><![CDATA[<p><strong><br />
<h3>Entrance Barriers</h3>
<p></strong></p>
<p>If you had to guess at the largest entrance barrier for a website what would guess? Maybe there is a cost involved and its too high? The website design is bad? Its a complicated website and not enough instructions?</p>
<p>Sure the cost might be more than the market will bear. More than likely your just trying to get that initial contact, an email, newsletter sign-up, anything to get more information to a potential customer. Cost to the user, $0.00 and your still only getting a small percentage of visitors to take the next step, whatever that may be. </p>
<p>Is your site ugly? Maybe, an ugly site to one person is artwork to another. Do ugly sites get less use? Unless your making the visitors eyes bleed and not distracting them with flashing or scrolling text this is more than likely not the cause. Some would say <a href="http://amazon.com" target="_blank">Amazon</a> is ugly or <a href="http://gmail.com" target="_blank">Gmail</a>, certainly <a href="http://craigslist.com" target="_blank">Craiglist</a> isn&#8217;t the pinnacle of design. As long as the user can get around easily without getting a migraine this probably isn&#8217;t what is holding you back. </p>
<p>Maybe you just need more instructions because they get confused? Here is the truth, <strong>nobody is going to read your directions if its more than a couple sentences</strong>. You can use all caps bold flashing text to tell a user what to do and they will not read it if its too long. If you already have instructions and you think you need more detail your only making it worse. </p>
<p><strong><br />
<h3>Its all in the forms.</h3>
<p></strong></p>
<p>Well designed forms aren&#8217;t the end all metric of usability however I would argue its a majority. Its all in the little details. Here are some of the basics. </p>
<ul class="prepend-1">
<li>Are required fields clearly marked?</li>
<li>Are those fields really required? The longer the form the less likely it will get submitted</li>
<li>If a user puts in the wrong input is it immediately obvious what went wrong?</li>
<li>Did you erase the whole form on failure causing the user to start over?</li>
<li>Can a user easily fill out the form by just typing and tabbing to the next field?</li>
</ul>
<p><strong><br />
<h3>An example of bad form.</h3>
<p></strong></p>
<p>The federal government uses a site called <a href="http://mypay.dfas.mil" target="_blank">My Pay</a>. This is by far the craziest process I have ever seen to fill out a form. Recently they asked all their user&#8217;s to change log in credentials and what a nightmare. </p>
<p><img src="http://monolithdev.us/wp-content/uploads/2010/02/myPay-Login-ID-and-Password-Creation_1264615726626-273x300.png" alt="My Pay Log In" title="My Pay Log In" width="273" height="300" class="aligncenter size-medium wp-image-256" /></p>
<p>The first thing that happens when you try to login is it opens up a new window in full screen. So if you have a large monitor your now staring at 23&#8243; of login form. Annoying, but not the end of the world. </p>
<p>The complete insanity is you can&#8217;t use the keyboard. You have to actually click on each character with a <em>Virtual Keyboard</em>. But lets take it one step further down the crazy path. The letters an numbers are generated in random locations with each attempt. </p>
<p>This is for <em>&#8220;security&#8221;</em> purposes. I wonder why banks don&#8217;t use this practice? There is a notice message up now. They&#8217;ve disabled right click function as well &#8230; nice. </p>
<blockquote><p>
To all myPay Customers</p>
<p>Although most users have established their new login credentials with no trouble, some users are calling the Central Customer Support Unit for assistance. As a result, customer support is experiencing high call volume, and many customers are waiting on hold longer than usual.</p>
<p>We apologize for any inconvenience this may cause. We are doing everything possible to remedy this situation.
</p></blockquote>
<p><strong><br />
<h3>Good Form</h3>
<p></strong></p>
<p><a href="http://mint.com" target="_blank">Mint</a> has an example of a great sign-up form. As soon as the page loads the the cursor is focused on the first field so you can start typing right away. You can tab to the next field and you&#8217;ll notice the current field is clearly highlighted. Furthermore by clicking on the label it brings the field in focus. You can click anywhere after the check-box field and it will toggle the check-box. You can actually fill out the whole form without even touching your mouse. </p>
<p>Usability is increased by validating on the fly. Each time you go to the next field the form will check if you have a valid entry and display the error if there is one or simply <em>OK</em> if there isn&#8217;t. </p>
]]></content:encoded>
			<wfw:commentRss>http://monolithdev.us/good-form-to-increase-conversions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Logging Emails Sent Through Wordpress</title>
		<link>http://monolithdev.us/logging-emails-sent-through-wordpress/</link>
		<comments>http://monolithdev.us/logging-emails-sent-through-wordpress/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 17:49:05 +0000</pubDate>
		<dc:creator>darren</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://monolithdev.us/?p=227</guid>
		<description><![CDATA[Ever have the need to log emails from a contact form inside of of wordpress? Here&#8217;s my solution.
The Problem
The client uses the Contact Form 7 wordpress plugin for events, registrations and subscriptions. Up until this point all the emails needed to be cut and pasted manually into a master list for marketing or other action [...]]]></description>
			<content:encoded><![CDATA[<p>Ever have the need to log emails from a contact form inside of of <a href="http://wordpress.org/" target="_blank">wordpress</a>? Here&#8217;s my solution.</p>
<h3 class="bold"><strong>The Problem</strong></h3>
<p>The client uses the <a href="http://wordpress.org/extend/plugins/contact-form-7/" target="_blank">Contact Form 7</a> wordpress plugin for events, registrations and subscriptions. Up until this point all the emails needed to be cut and pasted manually into a master list for marketing or other action items.</p>
<p>Specific actions are taken with each contact form. Some are simply added to a master email list while others are used to send content through snail mail. The need for more forms over the next few months will be increasing. These forms are very time sensitive so the solution must be dynamic enough to preclude more than a few hours in turnaround.</p>
<h3 class="bold"><strong>The Solution</strong></h3>
<p>If resources were unlimited (time and budget) this would be a great place to implement pre-built CRM (customer relations mangment) system. There are plenty of open source and commercial applications that would work well.</p>
<p>The biggest limiting resource here is time. The client knows how use wordpress and the current site is already well established with content. So we&#8217;ll hack it.</p>
<h3 class="bold"><strong>Logging Emails</strong></h3>
<p>Logging outgoing emails from any type of contact form is essential. This could be as simple as storing them in a database or even writing to a flat file. Logging emails will help you pick up security issues as well as troubleshooting.</p>
<p>The solution is pretty simple. Every email sent out through wordpress uses the <a href="http://codex.wordpress.org/Function_Reference/wp_mail" target="_blank"><strong>wp_mail()</strong></a> function, including forms through Contact 7. All we need to do is capture the $_POST variables when a call is made to wp_mail().</p>
<p>We can use the <a href="http://codex.wordpress.org/Function_Reference/add_action" target="_blank"><strong>add_action()</strong></a> hook from wordpress to accomplish this.</p>
<h3 class="bold"><strong>A simple example</strong></h3>
<p>We&#8217;ll insert our hook in the functions.php page for the theme. For this example I&#8217;ll use a theme called <em>custom</em>.</p>
<pre>wp-content/themes/custom/functions.php</pre>
<p>We&#8217;ll create a function to capture the posts. This function won&#8217;t really do anything but you&#8217;ll get the point. Then we&#8217;ll hook the function into wp_mail().</p>
<pre>function saveContact() {
    // all of our post variables are in the $contact array
    $contact = $_POST;

    // now would be a good time to clean and filter
    foreach( $contact as $key =&gt; $value ) {
        // trim it, escape ... it you know the drill
    }

    // insert into the database or save a flat file

}

// hook it
add_action( 'wp_mail', 'saveContact' );</pre>
<p>Now anytime wordpress sends an email it will call our saveContact() function. This is fine to just capture the data but we want to do something with it. Keep in mind Contact 7 adds in some of its own post variables so you may want to pop those off before processing the data.</p>
<p>If you want to echo anything back to test this turn off your javascript otherwise Contact 7 will send an ajax call behind the scenes.</p>
<h3 class="bold"><strong>An advanced example (go cURL yourself)</strong></h3>
<p>Wordpress is great but I want to use a MVC framework to handle all of the the different actions. I want to know what form was sent and use the information to populate various tables. I use Kohana but any of the popular frameworks can handle this in the same way. The benefit here is I can use the framework&#8217;s built in cleaning and database helpers. We&#8217;ll use cURL to send the post variables to our controller.</p>
<p>I&#8217;ll send the data to a controller in public_html/example. So the domain www.mydomain.com has a standard wordpress install but we have a <a href="http://kohanaphp.com/" target="_blank">kohana</a> controller living in www.mydomain.com/example. I&#8217;ll also send along the URI where the form originated. We&#8217;ll take care of all the data inside the framework. Clear as mud?</p>
<p>Wordpress by the way does not like putting this source code inside the post. You can check it out <a href="http://monolithdev.us/dev/demo/curl-yourself.phps" target="_blank">here</a>.</p>
<p>For security you can make sure the cURL posts are only sent from your domain.</p>
<p>With permalinks enabled you can differentiate between forms posted from something like www.mydomain.com/contact and www.mydomain.com/contact/subscribe.</p>
]]></content:encoded>
			<wfw:commentRss>http://monolithdev.us/logging-emails-sent-through-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kohana &#8211; My New Framework Of Choice</title>
		<link>http://monolithdev.us/kohana-my-new-framework-of-choice/</link>
		<comments>http://monolithdev.us/kohana-my-new-framework-of-choice/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 14:14:49 +0000</pubDate>
		<dc:creator>darren</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[framework]]></category>

		<guid isPermaLink="false">http://monolithdev.us/?p=220</guid>
		<description><![CDATA[
I&#8217;ve been trying to come to a conclusion of what php framework to use on new projects. I finally took the plunge into Kohana and I&#8217;m loving it. Some of the other frameworks that made the short list. 

Zoop &#8211; I like the command line, smarty, and PEAR integration.
CodeIgniter &#8211; Great documentation, huge community and [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://monolithdev.us/wp-content/uploads/2010/02/kohana-300x116.png" alt="kohana" title="kohana" width="300" height="116" class="aligncenter size-medium wp-image-219" /></p>
<p>I&#8217;ve been trying to come to a conclusion of what php framework to use on new projects. I finally took the plunge into <a href="http://kohanaphp.com/" target="_blank">Kohana</a> and I&#8217;m loving it. Some of the other frameworks that made the short list. </p>
<ul>
<li><a href="http://zoopframework.com/" target="_blank">Zoop</a> &#8211; I like the command line, smarty, and PEAR integration.</li>
<li><a href="http://codeignitor.com/" target="_blank">CodeIgniter</a> &#8211; Great documentation, huge community and heavily used.</li>
<li><a href="http://www.tinymvc.com/" target="_blank">TinyMVC</a> &#8211; Stripped down version of CodeIgniter. Easy integration into smarty.</li>
<li><a href="http://framework.zend.com/" target="_blank">Zend</a> &#8211; All the cool kids are doing it.</li>
</ul>
<p>Like most developers I fought the extreme urge to do everything myself and reinvent the wheel. Although I could of expedited that decision. In the end choosing a well documented and community driven framework makes any application more valuable. It helps when other developers get involved and don&#8217;t have to guess what it is your doing. It sets the standard and hundreds or thousands of developers have contributed to that standard. In short it reduces the <strong>&#8220;WTF?&#8221;</strong> moments.</p>
<p>If I need a hand on a project or turn it over to someone else the next developer can pick up where I left off. Some of the features that sealed the deal for me. </p>
<ul>
<li>Security &#8211; filters XSS by default. No configuration needed.</li>
<li>Large module/plugin library</li>
<li>Ajax integration and seperation is easy to work with.
<li>
<li>Strict OOP</li>
</ul>
<p>Development is very fast with Kohana. The more I dig into the more I&#8217;m enjoying it. </p>
]]></content:encoded>
			<wfw:commentRss>http://monolithdev.us/kohana-my-new-framework-of-choice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Remove your IP from a blocked firewall</title>
		<link>http://monolithdev.us/remove-your-ip-from-a-blocked-firewall/</link>
		<comments>http://monolithdev.us/remove-your-ip-from-a-blocked-firewall/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 13:18:33 +0000</pubDate>
		<dc:creator>darren</dc:creator>
				<category><![CDATA[Command Line]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[email]]></category>

		<guid isPermaLink="false">http://monolithdev.us/?p=215</guid>
		<description><![CDATA[I only have to do this a couple times a year. This is so I don&#8217;t have to look it up.
Open up the file.

pico /etc/apf/deny_hosts

Find your IP and delete the entry. Then restart APF

/etc/init.d/apf restart

There, I wrote it down this time. 
]]></description>
			<content:encoded><![CDATA[<p>I only have to do this a couple times a year. This is so I don&#8217;t have to look it up.</p>
<p>Open up the file.</p>
<pre>
pico /etc/apf/deny_hosts
</pre>
<p>Find your IP and delete the entry. Then restart APF</p>
<pre>
/etc/init.d/apf restart
</pre>
<p>There, I wrote it down this time. </p>
]]></content:encoded>
			<wfw:commentRss>http://monolithdev.us/remove-your-ip-from-a-blocked-firewall/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Suckage To Usage Ratio &#8211; The Ultimate Formula</title>
		<link>http://monolithdev.us/suckage-to-usage-ratio-the-ultimate-formula/</link>
		<comments>http://monolithdev.us/suckage-to-usage-ratio-the-ultimate-formula/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 13:29:44 +0000</pubDate>
		<dc:creator>darren</dc:creator>
				<category><![CDATA[For The Client]]></category>
		<category><![CDATA[Random Thoughts]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://monolithdev.us/?p=211</guid>
		<description><![CDATA[I have tried to explain the idea behind this many times with varying levels of success. Well, the guys at 37 Signals hit the nail on the head with a formula in their post, &#8220;What&#8217;s the suckage to usage ratio?&#8221;
Suckage to usage ratio 101
The 37 signals post uses the Amazon Kindle as an example of [...]]]></description>
			<content:encoded><![CDATA[<p>I have tried to explain the idea behind this many times with varying levels of success. Well, the guys at <a href="http://37signals.com/" target="_blank">37 Signals</a> hit the nail on the head with a formula in their post, <a href="http://37signals.com/svn/posts/2076-whats-the-suckage-to-usage-ratio" target="_blank">&#8220;What&#8217;s the suckage to usage ratio?&#8221;</a></p>
<h3>Suckage to usage ratio 101</h3>
<p>The 37 signals post uses the Amazon Kindle as an example of how a single feature can have massive suckage but still produce a great product. It sucks to type on a kindle but how often do you actually type on your Kindle? Not often, the kindle is for reading not typing. I only type to search for a book which is probably less than 5% of my use. </p>
<h3>Suckage to usage ratio and you</h3>
<p>As your building your website there will always be features and pages that need love. Maybe its a bad layout, maybe its bad programming or maybe its a bad idea. If its rarely used how much time should you spend making it perfect? Websites have finite resources (time, budget and manpower), choose their allocation carefully.</p>
<h3>Consequences of Suckage</h3>
<p>At best failure to understand this principal will lead to late milestones and blow your budget. Worst case scenario it will blow your whole project. Developers can only do so much to keep you on track but in the end we will usually write it the way you want it. </p>
<h3>Applying the suckage to usage ratio</h3>
<p>Come to think of it you can apply this formula to everything. People, places, things, anything that takes up time and money. </p>
<ul>
<li>Purchase of a home or car</li>
<li>A book or movie</li>
<li>Where to go for vacation</li>
<li>Who your going to vote for</li>
<li>Your Relatives</li>
<li>Your dog</li>
</ul>
<p><strong>The key to a full life may very well be in the suckage to usage ratio. Certainly worth applying to your website. </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://monolithdev.us/suckage-to-usage-ratio-the-ultimate-formula/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Form Usability: Returning Users Invalid Input</title>
		<link>http://monolithdev.us/form-usablity-returning-users-invalid-input/</link>
		<comments>http://monolithdev.us/form-usablity-returning-users-invalid-input/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 21:06:06 +0000</pubDate>
		<dc:creator>darren</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://monolithdev.us/?p=201</guid>
		<description><![CDATA[I spend allot of time creating forms. Lots and lots of forms. Most of the development time is spent to validating and cleaning the data of these forms. Normally I do light validation client side with jQuery and then strong validation on the server side with php. Only after the data passes do I actually [...]]]></description>
			<content:encoded><![CDATA[<p>I spend allot of time creating forms. Lots and lots of forms. Most of the development time is spent to validating and cleaning the data of these forms. Normally I do light validation client side with jQuery and then strong validation on the server side with php. Only after the data passes do I actually do something with it, which usually includes cleaning or filtering first. </p>
<h3>The Problem</h3>
<p>If the submitted form doesn&#8217;t pass validation I want to return the data so the user doesn&#8217;t have to re-enter all the information. I don&#8217;t want to rely on javascript, although I will add it for user convenience as a final step. I also don&#8217;t want the form re-submitted if the user refreshes. </p>
<h3>The Solution</h3>
<p>There are quite a few ways to solve these problems. My standard approach is to post the form to a processing page and store the POST variables in a session. If the data fails the validation I redirect to the original form, pull the submitted data out of the session variables and re-populate the form with an error message. </p>
<p>Pretty straight forward for small contact forms. Once you get to a gigantic form that makes your eyes bleed this becomes cumbersome. <em>On a side not I try to push my clients to the smallest possible forms they can get away with.</em>. </p>
<p>I use a <em>postToSession</em> class to make this go a little quicker. </p>
<h3>Example Usage</h3>
<p>I&#8217;ll use three files for my example. Comments are in the source files. </p>
<ul>
<li><a href="http://monolithdev.us/dev/demo/post-to-session/index.phps" target="_blank">index.php</a></li>
<li><a href="http://monolithdev.us/dev/demo/post-to-session/process.phps" target="_blank">process.php</a></li>
<li><a href="http://monolithdev.us/dev/demo/post-to-session/postToSession.phps" target="_blank">postToSession.php</a></li>
</ul>
<p>You can see a working demo of these files in action <a href="http://monolithdev.us/dev/demo/post-to-session/index.php" target="_blank">here</a>. </p>
<p>Basically by using this class I can automatically serialize the form value and stuff it into a session variable. Once I unpack it, it cleans itself up. </p>
<p>Lets start with process.php. The form has been submitted. We  instantiate the postToSession class and pass a parameter of <em>_formValues</em> to the constructor. This is the name of the session variable we&#8217;ll use. </p>
<pre>
$session = new postToSession( '_formValues' );
</pre>
<p>Next we&#8217;ll serialize the post values and store them in the session variable. </p>
<pre>
$session->serializePost();
</pre>
<p>Now that you&#8217;ve saved the posted values you can work validation to your hearts content and set any error messages according. If no error messages are sent the data is ready to go. In this example I simply set a status message and pass them back to the original page. If an error message is set I&#8217;ll send them back with <em>failed</em> in the query string.</p>
<p>Either way they are going back to the index page. On index.php I&#8217;ll look for the failed variable in the query string. If its set I can pull all the values back out and re-populate the form. I&#8217;ll put the values in a local array called $formValues.</p>
<pre>
$formValues = $session->unserializePost();
</pre>
<p>Now I&#8217;ll assign the form values to print out to the user. If it $_GET['failed'] isn&#8217;t set I know we either passed form validation or its a fresh start. I&#8217;ll also check to see if there is a status message set in the $_SESSION variables. If it is I&#8217;ll assign it to a local variable for display and clear it. </p>
<h3>The End</h3>
<p>This is just one of those little tricks I wish someone had shown me when I started. By using a separate page to process and redirecting after processing we can keep the user from submitting multiple times by pressing the refresh button. You could just as easily use the query string to repopulate the form but it looks horrible. I also use this method because many times the form is pre-populated with information like the users profile or other account information. I can use the same template for adding new records as well as editing existing records. </p>
]]></content:encoded>
			<wfw:commentRss>http://monolithdev.us/form-usablity-returning-users-invalid-input/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>House Bill Requires ISP&#8217;s To Block Fraudulent Sites</title>
		<link>http://monolithdev.us/house-bill-requires-isps-to-block-fraudulent-sites/</link>
		<comments>http://monolithdev.us/house-bill-requires-isps-to-block-fraudulent-sites/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 16:11:52 +0000</pubDate>
		<dc:creator>darren</dc:creator>
				<category><![CDATA[privacy]]></category>
		<category><![CDATA[government]]></category>

		<guid isPermaLink="false">http://monolithdev.us/?p=198</guid>
		<description><![CDATA[Here&#8217;s an article that outlines a new bill to protect us against scam artists. Washington is hard at work to protect us. Sounds good right?
This would block not only website access but emails as well. Good deal, everyone hates spam. Say good buy from all those Nigerian emails!
There are a couple details they missed on [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s an <a href="http://news.cnet.com/8301-13578_3-10390779-38.html" target="_blank">article</a> that outlines a new bill to protect us against scam artists. Washington is hard at work to protect us. Sounds good right?</p>
<p>This would block not only website access but emails as well. Good deal, everyone hates spam. Say good buy from all those Nigerian emails!</p>
<p>There are a couple details they missed on this. </p>
<h3>Its almost entirely unenforceable.</h3>
<p>Most fraudulent sites aren&#8217;t even hosted in the US. Alright, block the IP address. They&#8217;ll get another IP adress. It would take massive resources keep up with the changes if its even possible. Maybe the feds can outsource it to the same company that is taking care of the 18 million dollar recovery.org website? Its probably a good use of our money.</p>
<h3>Who decides what is fraudulent?</h3>
<p>Maybe I&#8217;m wrong here but the federal government has never had a great track record when it comes to keeping up with fraud. And of course there is never an agenda.</p>
<p>Last year congress discovered twitter, they know all about those interwebs. Maybe they were updating twitter when someone was advising them of the technical details of accomplishing this.  </p>
]]></content:encoded>
			<wfw:commentRss>http://monolithdev.us/house-bill-requires-isps-to-block-fraudulent-sites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recent Work &#8211; Denali Training Group</title>
		<link>http://monolithdev.us/recent-work-denaili-training-group/</link>
		<comments>http://monolithdev.us/recent-work-denaili-training-group/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 18:46:31 +0000</pubDate>
		<dc:creator>darren</dc:creator>
				<category><![CDATA[Recent Work]]></category>

		<guid isPermaLink="false">http://monolithdev.us/?p=188</guid>
		<description><![CDATA[Working on a project that has cool subject matter is always fun. For most guys it doesn&#8217;t get any better than things that go boom! For a bonus round working with a company who&#8217;s sole purpose is to keep law enforcement and military personnel safe. A few weeks back the Denali Training Group website went [...]]]></description>
			<content:encoded><![CDATA[<p>Working on a project that has cool subject matter is always fun. For most guys it doesn&#8217;t get any better than things that go boom! For a bonus round working with a company who&#8217;s sole purpose is to keep law enforcement and military personnel safe. A few weeks back the <a href="http://denalitraininggroup.com" target="_blank">Denali Training Group</a> website went live. </p>
<p><a href="http://denalitraininggroup.com"><img src="http://monolithdev.us/wp-content/uploads/2009/10/Denali-Training-Group_1256061199952-238x300.png" alt="Denali Training Group" title="Denali Training Group" width="238" height="300" class="aligncenter size-medium wp-image-189" /></a></p>
<p>These guys have done multiple tours in Iraq doing the worlds most dangerous job, explosive ordinance disposal (EOD). As a navy guy I might be biased but I&#8217;m sure most would agree, U.S. Navy EOD operators are the best in the world at what they do. The guys at Denali are passionate about passing their knowledge to other military and law enforcement personnel. They also run various mountaineering and risk mitigation courses. </p>
<h3>The Process</h3>
<p>We worked out what the site needed from scratch starting only with, &#8220;It should be cool&#8221;. Not only did we need to figure out how to make it &#8220;cool&#8221; we needed to figure out what they needed. </p>
<p>My goals are to get the essentials first, automate as much as possible, create something that is manageable by the client. Of course always being mindful of how things will change as additions are added. This always involves taking a hard look at their business model so I can anticipate needs and break down the essentials features and the &#8220;cool features&#8221;. </p>
<p>Obviously their business model revolves around their courses. Some courses are available to all, others have a specific target audience. </p>
<h3>The Results</h3>
<p>We ended up with a custom built CMS (content management system) that allows them to manage their courses and who they offer them to. The guys at Denali will be able to easily add new course offerings, new courses and modify their own content without the need to call up their web developer. </p>
<h3>Dork Stuff</h3>
<ul>
<li><a href="http://en.wikipedia.org/wiki/LAMP_(software_bundle)" target="_blank">LAMP</a> Environment</li>
<li>Fresh copy of <a href="http://www.blueprintcss.org/" target="_blank">Blueprint</a> for the layout</li>
<li><a href="http://jquery.com/" target="_blank">jQuery</a> and various plugins for the &#8220;cool&#8221; factor.</li>
<li>Google map integration</li>
</ul>
<h3>Looking Ahead</h3>
<p>The guys at Denali are already looking into expanding their site and I&#8217;m looking forward to helping them out. Especially the video additions, video of things blowing up is even better than pictures.</p>
]]></content:encoded>
			<wfw:commentRss>http://monolithdev.us/recent-work-denaili-training-group/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Batch image conversions with the command line.</title>
		<link>http://monolithdev.us/batch-image-conversions-with-the-command-line/</link>
		<comments>http://monolithdev.us/batch-image-conversions-with-the-command-line/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 23:04:12 +0000</pubDate>
		<dc:creator>darren</dc:creator>
				<category><![CDATA[Command Line]]></category>
		<category><![CDATA[bash]]></category>

		<guid isPermaLink="false">http://monolithdev.us/?p=181</guid>
		<description><![CDATA[For the occasions you have a couple dozen or more images to resize. 
I&#8217;m sure there is a more elegant approach to this. If I had the occasion to do it more often it would be worth a bash script. 
The Problem
I have 20 images that are the right size but the file size needs [...]]]></description>
			<content:encoded><![CDATA[<p>For the occasions you have a couple dozen or more images to resize. </p>
<p>I&#8217;m sure there is a more elegant approach to this. If I had the occasion to do it more often it would be worth a bash script. </p>
<p><strong>The Problem</strong></p>
<p>I have 20 images that are the right size but the file size needs to be reduced from about 150k to 40k. They need to be renamed from <em>DSC-999999.JPG</em> to <em>0.jpg</em>, <em>1.jpg</em> etc. </p>
<p><strong>The Solution</strong></p>
<p>First you need to install ImageMagick</p>
<pre>
$ sudo apt-get install ImageMagick
</pre>
<p>I create some working directories on the desktop.</p>
<p>From /Desktop</p>
<pre>
$ mkdir new
$ mkdir new/resized
</pre>
<p>Put the images to be converted in /new</p>
<p>Now we&#8217;ll change the name so they are all .jpg instead of .JPG</p>
<p>From /new</p>
<pre>
$ rename 'y/A-Z/a-z/' *
</pre>
<p>Now we&#8217;ll make a copy at a lower quality in /new</p>
<pre>
$ convert *.jpg -quality 60 resized/new.jpg
</pre>
<p>You can play with -quality to get the size you want.</p>
<p>Now we&#8217;ll rename them to the new filenames.</p>
<pre>
$ rename 's/new-//' *
</pre>
<p>That&#8217;s it. You now have reasonable file sizes to work with on a website. There isn&#8217;t anything you can&#8217;t do <a href="http://www.imagemagick.org/script/index.php" target="_blank">ImageMagick</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://monolithdev.us/batch-image-conversions-with-the-command-line/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing and updating wordpress through the command line</title>
		<link>http://monolithdev.us/installing-and-updating-wordpress-through-the-command-line/</link>
		<comments>http://monolithdev.us/installing-and-updating-wordpress-through-the-command-line/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 14:56:40 +0000</pubDate>
		<dc:creator>darren</dc:creator>
				<category><![CDATA[Command Line]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://monolithdev.us/?p=168</guid>
		<description><![CDATA[
The typical wordpress install is downloading the .zip or .tar file. Unpack the archive file and then upload it to your server. If don&#8217;t have a decent connection it involves a coffee break while you upload. 
The easy way is to use the command line and move the files directly from the wordpress server to [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://monolithdev.us/wp-content/uploads/2009/09/wordpress-com-300x300.png" alt="wordpress-com" title="wordpress-com" width="300" height="300" class="aligncenter size-medium wp-image-176" /></p>
<p>The typical wordpress install is downloading the .zip or .tar file. Unpack the archive file and then upload it to your server. If don&#8217;t have a decent connection it involves a coffee break while you upload. </p>
<p>The easy way is to use the command line and move the files directly from the wordpress server to your server. Run the command, count to five and its in place. There are a few different ways we can handle this. I&#8217;ll cover installation with subversion and without. </p>
<p>First, our site structure. We&#8217;re going to install wordpress in the blog directory of the public documents. Ideally you want to install wordpress in the root directory and place wp-config.php one directory up for security. We can&#8217;t always do this. instead use .htaccess to deny wp-config.php. </p>
<h3 class="strong center">Without Subversion</h3>
<p>SSH into your server and navigate to /blog</p>
<pre>
~$ cd public_html/blog
</pre>
<p>Download the latest .tar file</p>
<pre>
~$ wget http://wordpress.org/latest.tar.gz
</pre>
<p>Now unpack the file. </p>
<pre>
~$ tar -zxvf latest.tar.gz
</pre>
<p>You&#8217;ll see the /wordpress dir with all the goodies. Now lets clean up our mess.</p>
<pre>
~$ unlink latest.tar.gz
</pre>
<p>Alright that took less than a minute. But we want the wordpress install in the /blog dir not /blog/wordpress. Lets move the install. </p>
<pre>
~$ mv wordpress/* .
</pre>
<div class="notice">
Don&#8217;t forget that period. Its there for a reason. Its pretty easy to screw things up from here. Like moving every single file in your public directory to your blog directory. Yes I&#8217;ve done that.
</div>
<p>Clean up your mess. </p>
<pre>
~$ rmdir wordpress
</pre>
<p>Now you can continue with your install as normal. </p>
<h3 class="center bold">With Subversion </h3>
<p>If your using <a href="http://subversion.tigris.org/">subversion</a> you have even more options. </p>
<p>Use svn import to checkout a clean copy without the .svn files. </p>
<pre>
~$ svn export http://core.svn.wordpress.org/trunk/
</pre>
<p>Now you can follow the steps above to move the files from /trunk to /blog. </p>
<p>But your using subversion so lets think ahead for updating your theme, plugins and wordpress install. This is the easy button for maintaining wordpress. </p>
<p>Assuming your working from a development environment on your local machine, install wordpress as you normally would for development but this time check in your install to your repository. Once you&#8217;ve committed it to the repository updates come easy. Simply download the update to your local machine. Complete the update and do a commit. Now you can ssh back into your server and type &#8230;.</p>
<pre>
~$ svn update
</pre>
]]></content:encoded>
			<wfw:commentRss>http://monolithdev.us/installing-and-updating-wordpress-through-the-command-line/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
