<?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>Scott Blaine</title>
	<atom:link href="http://scottblaine.com/feed" rel="self" type="application/rss+xml" />
	<link>http://scottblaine.com</link>
	<description>Omaha web developer</description>
	<lastBuildDate>Wed, 12 Oct 2011 01:00:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>The best todo app I&#8217;ve found</title>
		<link>http://scottblaine.com/the-best-todo-app-ive-found</link>
		<comments>http://scottblaine.com/the-best-todo-app-ive-found#comments</comments>
		<pubDate>Wed, 12 Oct 2011 01:00:22 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[tools]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[tasks]]></category>
		<category><![CDATA[todo]]></category>

		<guid isPermaLink="false">http://scottblaine.com/?p=538</guid>
		<description><![CDATA[I have trouble remembering things. I can recall four phone numbers. One of them is my own. When I pass people in the halls at work I have trouble saying &#8220;Hi [name]&#8221; because I can&#8217;t remember the [name] part of that sentence. I&#8217;ve hidden a gift for my wife and been unable to remember where [...]]]></description>
			<content:encoded><![CDATA[<p>I have trouble remembering things. I can recall four phone numbers. One of them is my own. When I pass people in the halls at work I have trouble saying &#8220;Hi [name]&#8221; because I can&#8217;t remember the [name] part of that sentence. I&#8217;ve hidden a gift for my wife and been unable to remember where I put it two minutes later.</p>
<p>Over time I&#8217;ve started to put together systems to help myself. When I need to drop off one of the kids and send some items with them, I place into memory not only the items themselves but also the number of items. The number acts as a checksum to make sure that I don&#8217;t forget something. I&#8217;ve also made great use of calendars and contact lists so that I no longer need to remember dates and phone numbers. I add it to my trusted system and stop worrying.</p>
<p>And I use todo lists. Extensively. At this point my wife knows that if she wants me to do something I either need to do it immediately or add it to a list. Otherwise it won&#8217;t get done. Not because I don&#8217;t want to do it, but because in 15 minutes I won&#8217;t remember that she even asked me to do something.</p>
<p>I manage my todo list using a combination of <a title="Google Tasks" href="https://mail.google.com/tasks/canvas">Google Tasks</a> and a physical notepad. I use the notepad for instances where I&#8217;m not at a computer, and everything in the notepad gets completed or transferred into Google Tasks.</p>
<p>I like Google Tasks because it&#8217;s simple. I don&#8217;t have many requirements, but it nails them all:</p>
<ul>
<li>Works between computers</li>
<li>Works on my phone</li>
<li>As easy (or easier) to use than Notepad (e.g. I can use it without a mouse)</li>
<li>Ability to have sub-tasks (with indenting that works using Tab/Shift+Tab)</li>
</ul>
<p>That&#8217;s it. The only place where Google Tasks has some trouble is on the phone. Google hasn&#8217;t made an Android app for Tasks yet, so you have to use their website or a third-party app. I haven&#8217;t found a third-party app that I like and getting to their website takes too long. So I write the task down on my notepad and transfer it to Google Tasks later.</p>
<p>Once or twice a year I&#8217;ll search the tubes to see if I can find a better app, but I&#8217;ve never been successful. I continue to use Tasks and hope that Google releases an Android app or someone builds a really stellar app in their stead.</p>
]]></content:encoded>
			<wfw:commentRss>http://scottblaine.com/the-best-todo-app-ive-found/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>&#8220;We are checking MX records for your domain&#8221; for more than 48 hours</title>
		<link>http://scottblaine.com/google-checking-mx-records-for-more-than-48-hours</link>
		<comments>http://scottblaine.com/google-checking-mx-records-for-more-than-48-hours#comments</comments>
		<pubDate>Wed, 05 Oct 2011 01:00:41 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[tools]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[mx records]]></category>

		<guid isPermaLink="false">http://scottblaine.com/?p=488</guid>
		<description><![CDATA[Are you setting up Google Apps&#8217; email and seeing the message stating &#8220;We are checking MX records for your domain. This may take 48 hours to complete&#8221; for more than 48 hours? If so, this post should help you to fix it. I ran into this problem setting up a site recently. I set up [...]]]></description>
			<content:encoded><![CDATA[<p>Are you setting up Google Apps&#8217; email and seeing the message stating &#8220;We are checking MX records for your domain. This may take 48 hours to complete&#8221; for more than 48 hours? If so, this post should help you to fix it.</p>
<p>I ran into this problem setting up a site recently. I set up my MX records, asked Google to check them, and waited for them to accept the records. But it didn&#8217;t happen, and the message on Google Apps never changed.</p>
<p>I can&#8217;t tell you why Google isn&#8217;t accepting your MX records, but what I can tell you is that it&#8217;s likely that there&#8217;s an error lurking somewhere in them. My issue was that I had an extra MX record set with a priority of 0. So the first piece of advice is to look at your MX records and verify that they are, indeed, correct.</p>
<p>Here&#8217;s how to do that. First, review Google&#8217;s instructions for setting up your MX records. You can do that at a URL like the following:</p>
<p>https://www.google.com/a/cpanel/<strong><em>scottblaine.com</em></strong>/SetupMXInstructions &#8212; replace scottblaine.com with your own domain name</p>
<p>Second, review how your MX records are actually set up as viewed by the outside world. You can do that via the following URL:</p>
<p>http://network-tools.com/default.asp?prog=dnsrec&amp;host=<strong><em>www.scottblaine.com</em></strong> &#8212; again, replace www.scottblaine.com with your own domain name</p>
<p>That second URL is how I noticed there was an extra MX record in there. For whatever reason I didn&#8217;t catch it during the setup phase.</p>
<p>Alright, so you checked that your MX records are now set up correctly, right? Good. Next you want to tell Google to check your MX records again. You can do that by logging into your Google Apps dashboard (at a url like https://www.google.com/a/cpanel/<strong><em>scottblaine.com</em></strong> &#8212; replace the domain name). Once you&#8217;re on, go to the Service Settings menu at the top and choose Email. Scroll down and click on the link that says: Instructions on how to activate Email. Then click on the Change MX records link. Scroll down again and click the button that says: I have completed these steps.</p>
<p>If you do all of that it should drop you back on the Google Apps dashboard and tell you that Google will be done setting up your email in about an hour. That&#8217;s what worked for me and hopefully it helps you too (if it did help leave a comment and let me know).</p>
]]></content:encoded>
			<wfw:commentRss>http://scottblaine.com/google-checking-mx-records-for-more-than-48-hours/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Notes from Amy Hoy&#8217;s Stacking the Bricks presentation</title>
		<link>http://scottblaine.com/notes-from-amy-hoys-stacking-the-bricks-presentation</link>
		<comments>http://scottblaine.com/notes-from-amy-hoys-stacking-the-bricks-presentation#comments</comments>
		<pubDate>Thu, 29 Sep 2011 01:00:43 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[strategy]]></category>
		<category><![CDATA[37signals]]></category>
		<category><![CDATA[amy hoy]]></category>
		<category><![CDATA[success]]></category>

		<guid isPermaLink="false">http://scottblaine.com/?p=550</guid>
		<description><![CDATA[I watched Amy Hoy&#8217;s Stacking the Bricks presentation today and found it useful, and so I&#8217;m sharing the notes I took while watching it. Amy starts by talking about 37signals, a company that makes a variety of simple, useful webapps for small businesses/teams. Products like Basecamp, for project management. 37signals built a successful company on [...]]]></description>
			<content:encoded><![CDATA[<p>I watched Amy Hoy&#8217;s <a title="Stacking the Bricks" href="http://unicornfree.com/stacking-the-bricks/">Stacking the Bricks</a> presentation today and found it useful, and so I&#8217;m sharing the notes I took while watching it.</p>
<p>Amy starts by talking about <a title="37signals" href="http://37signals.com/">37signals</a>, a company that makes a variety of simple, useful webapps for small businesses/teams. Products like Basecamp, for project management. 37signals built a successful company on these products and became famous for it. But how did they get there?</p>
<p>Eight years ago 37signals didn&#8217;t have any products. They were a consultancy. They started to gain fame by doing <a title="The 37Better Project" href="http://37signals.com/better">a series of redesigns of popular websites</a>. Their first paid product wasn&#8217;t a webapp, it was a whitepaper on search results for retailers. In short, they had a number of small successes before they struck gold with Basecamp.</p>
<p>Amy goes on to give many other examples of freelancers and consultants that became famous through small successes. They started by writing great content on their blogs or contributing open source software, and then went on to sell products like ebooks or screencasts. And then they leveraged those successes to sell paid courses, launch web apps, or create new products.</p>
<p>The point of all of this is to show that no one makes it from &#8220;Lowly Peon&#8221; to &#8220;Rich and Famous&#8221; in one shot. You have to start with a single success (a brick, as she calls it). Then you work to get a pile of bricks. Once you have that, you can start putting those bricks together into a cohesive thing (a wall). When you see successful people you&#8217;re looking at the wall they&#8217;ve built; you&#8217;re not thinking about how they got the bricks to build that wall.</p>
<p>What I got from the presentation is that you&#8217;d be foolish to look at a company like 37signals and imagine that you&#8217;re going to build a successful web app on your first try. You won&#8217;t. The people you see that are massively successful had many earlier smaller successes. They leveraged those to get to where they are now.</p>
<p>Start small. Build your empire a brick at a time.</p>
]]></content:encoded>
			<wfw:commentRss>http://scottblaine.com/notes-from-amy-hoys-stacking-the-bricks-presentation/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The HTML and CSS Behind Google&#8217;s Search Bar</title>
		<link>http://scottblaine.com/the-html-and-css-behind-googles-search-bar</link>
		<comments>http://scottblaine.com/the-html-and-css-behind-googles-search-bar#comments</comments>
		<pubDate>Wed, 28 Sep 2011 01:00:15 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[bar]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://scottblaine.com/?p=479</guid>
		<description><![CDATA[Earlier this year I was working on a project that had a text entry box similar to Google&#8217;s. It was a long bar in which you entered a line of text with a button at the end to &#8220;Add&#8221; it (instead of &#8220;Search&#8221;). I really liked Google&#8217;s styling for their search bar and figured I [...]]]></description>
			<content:encoded><![CDATA[<p>Earlier this year I was working on a project that had a text entry box similar to Google&#8217;s. It was a long bar in which you entered a line of text with a button at the end to &#8220;Add&#8221; it (instead of &#8220;Search&#8221;). I really liked Google&#8217;s styling for their search bar and figured I would simply &#8220;lift&#8221; the HTML and CSS for it. However Google&#8217;s HTML source code, if you&#8217;ve ever looked at it, is heavily minimized. Everything is on one line with short, obscure CSS class names like &#8220;gac_v2.&#8221; Great for serving up webpages quickly, not so fun for trying to figure out how they&#8217;re styling their pages. I tried to find a simple &#8220;how to&#8221; for styling something in a similar way, but alas, there was none to be found.</p>
<p>Not to be deterred, I dug into their code, copied the portion I was interested in, removed all of the useless cruft, gave the CSS classes slightly more useful names, and came up with a working version that looked like this:</p>
<p><a href="http://scottblaine.com/blog/wp-content/uploads/2011/04/example-search-bar.png"><img class="alignnone size-full wp-image-481" title="example-search-bar" src="http://scottblaine.com/blog/wp-content/uploads/2011/04/example-search-bar.png" alt="" width="396" height="54" /></a></p>
<p>That should look rather familiar to you.</p>
<p>Seeing as I couldn&#8217;t find anything on the Intertubes for this (and I&#8217;m probably not the only one) I thought it might be helpful to share the HTML and CSS code for this &#8212; there&#8217;s also one image which is used as a gradient background for the search button (entirely optional; it just makes it look nice). If you find this useful leave a comment and let me know.</p>
<p>Right click and Save as:</p>
<ul>
<li><a href="http://scottblaine.com/blog/wp-content/uploads/2011/04/google-search-bar-example.html">HTML with embedded CSS</a></li>
<li><a href="http://scottblaine.com/blog/wp-content/uploads/2011/04/btn-bg.png">Image file (background image for button)</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://scottblaine.com/the-html-and-css-behind-googles-search-bar/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I won the Zappos developer contest</title>
		<link>http://scottblaine.com/i-won-the-zappos-developer-contest</link>
		<comments>http://scottblaine.com/i-won-the-zappos-developer-contest#comments</comments>
		<pubDate>Tue, 03 May 2011 02:37:05 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[contest]]></category>
		<category><![CDATA[luck]]></category>
		<category><![CDATA[winning]]></category>
		<category><![CDATA[zappos]]></category>

		<guid isPermaLink="false">http://scottblaine.com/?p=507</guid>
		<description><![CDATA[Recently I had the good fortune of winning $1000 and being featured in the local news. Here&#8217;s how it happened. In the middle of March I was doing some research for a blog post and I came across a contest that Zappos was running. I had recently decided that I was spending too much time [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I had the good fortune of winning $1000 and being featured in the local news. Here&#8217;s how it happened.</p>
<p>In the middle of March I was doing some research for a blog post and I came across <a title="First Zappos Developer Contest" href="http://developer.zappos.com/blog/first-zappos-developer-contest">a contest that Zappos was running</a>. I had recently decided that I was spending too much time building web apps for $0/hour, so I almost didn&#8217;t enter, but I had an idea that I thought I could pull off without investing too much time. My intent was to build something that was fairly simple but very polished.</p>
<p>I spent a couple weeks (about 40 hours total) throwing together <a title="Outfit Her" href="http://outfither.antifantastic.com/">an app</a> in my spare time. I thought my app was good, but I&#8217;ve entered contests like this before where the entrants pour lots of time into it and produce something really stellar. So it was much to my surprise that I ended up <a title="Zappos Developer Contest Winners" href="http://developer.zappos.com/blog/first-developer-contest-winners">winning the top prize</a> in the contest (a cool $500 cash plus a $500 gift certificate to Zappos). That alone was enough to make building the app worth my while, but what happened next was even better.</p>
<p>Shortly after I won I posted a quick <a title="My &quot;I won the Zappos contest&quot; tweet" href="http://twitter.com/#!/blaisco/status/59639026063392768">tweet</a> about it. I have some folks from the Silicon Prairie News as followers and my tweet led to me getting an interview request. I wrote up some answers (reviewed by my wife, thanks!) and <a title="Omaha Developer Wins Zappos API Challenge" href="http://www.siliconprairienews.com/2011/04/omaha-developer-wins-zappos-api-challenge">they posted an article about it</a> the following day. That article was then mentioned in the weekly <a title="PrairieCast with Ben Milne and Drew Larson" href="http://www.siliconprairienews.com/2011/04/prairiecast-with-ben-milne-and-drew-larson-video">PrairieCast postcast</a> (starting at 21:00). I was also contacted by several people who read the article about projects that they wanted my help on.</p>
<p>When I decided to enter the contest in never crossed my mind that it would lead to me being featured on SPN and being offered work. That goes to show though, it is definitely possible to <a title="How to Get a Real Education" href="http://online.wsj.com/article/SB10001424052748704101604576247143383496656.html?mod=WeekendHeader_Right">attract</a> <a title="How To Make Your Own Luck" href="http://www.fastcompany.com/magazine/72/realitycheck.html">luck</a>. You don&#8217;t know how that luck will manifest itself, but it will. Do cool stuff, be social, and luck will find you.</p>
<blockquote><p>Regarding &#8220;Attracting Luck&#8221;: it sounds like a value-free bromide, but it really does work. I&#8217;m not a social butterfly by nature, but I force myself to go out and network. It blows my mind how effective that is, because there exists someone with the ability to give you what you want just by saying &#8220;Yeah, sure&#8221; and that is 1000000000x more likely to happen after you have asked him for it in person versus happening spontaneously. (Ditto hearing, e.g., &#8220;You do SEO consulting? What a coincidence, we need that. Send us a proposal.&#8221;, &#8220;You made what? That&#8217;s interesting. I have someone you should get a coffee with.&#8221;, etc)<br />
-<a title="MicroISV on a Shoestring" href="http://www.kalzumeus.com/">Patrick McKenzie </a></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://scottblaine.com/i-won-the-zappos-developer-contest/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Foolproof way to dial out on Google Voice with your non-smart phone</title>
		<link>http://scottblaine.com/foolproof-way-to-dial-out-on-google-voice-with-your-non-smart-phone</link>
		<comments>http://scottblaine.com/foolproof-way-to-dial-out-on-google-voice-with-your-non-smart-phone#comments</comments>
		<pubDate>Sun, 03 Apr 2011 16:43:51 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[tools]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[voice]]></category>

		<guid isPermaLink="false">http://scottblaine.com/?p=472</guid>
		<description><![CDATA[If you&#8217;re one of those dredges who doesn&#8217;t have a smart phone yet (like me), and you want to use Google Voice to make outbound calls, this post is for you. You may know that you can dial your Google Voice number, push 2, and dial an outbound call. But have you memorized the phone [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re one of those dredges who doesn&#8217;t have a smart phone yet (like me), and you want to use Google Voice to make outbound calls, this post is for you. You may know that you can dial your Google Voice number, push 2, and dial an outbound call. But have you memorized the phone numbers of everyone in your contact list? Because I haven&#8217;t, and there&#8217;s no way I&#8217;d be able to enter anyone&#8217;s number from memory &#8212; except for my wife and parents (&#8230;maybe).</p>
<p>With a little ingenuity though, you can program your phone to dial out on your Google Voice number and enter all of the necessary button presses for you. We&#8217;re going to make use of a feature of most every phone: the ability to enter a 2-second pause when dialing a number. You may have to go to a special menu when editing the number to find it, but it should let you enter a two-second pause and have it appear as a &#8220;P&#8221; in your phone number.</p>
<p><strong>Let&#8217;s say your Google Voice number is: 1-222-333-4444</strong></p>
<p><strong>And the number you&#8217;re trying to call is: 1-777-888-9999</strong></p>
<p><strong>The phone number you&#8217;d want to dial is this: 12223334444 <span style="text-decoration: underline;">P</span> <span style="text-decoration: underline;">P</span> <span style="text-decoration: underline;">P</span> <span style="text-decoration: underline;">*</span> <span style="text-decoration: underline;">P</span> <span style="text-decoration: underline;">*</span> <span style="text-decoration: underline;">P</span> <span style="text-decoration: underline;">2</span> 17778889999 <span style="text-decoration: underline;">#</span></strong></p>
<p>All of those underlined characters are the additional stuff you need to add to dial out on Google Voice.</p>
<p>You might ask why I called this a foolproof method. And, to be fair, it works 95% of the time; occasionally it will fail and you&#8217;ll have to redial. All those pauses and hitting * twice though are meant to get around problems such as:</p>
<ul>
<li>Google Voice not answering your call fast enough</li>
<li>You have voicemail and Google Voice tries to start playing your voicemail instead of making your call</li>
<li>Google Voice not realizing you pressed the star key (it almost always recognizes it if you press it twice)</li>
</ul>
<p>I converted all of my phone numbers over to the above system and I&#8217;ve had very few problems with it. One thing you&#8217;ll need to make sure of is that the method above assumes you&#8217;ve disabled the PIN to access your voicemail. [1]</p>
<p>Hopefully that helps you enjoy the awesomeness that is Google Voice on your non-smart (dumb) phone!</p>
<p>&nbsp;</p>
<p>[1] If you want to keep the PIN, you&#8217;d need to do something like this: 12223334444 <span style="text-decoration: underline;">P</span> <span style="text-decoration: underline;">P</span> <span style="text-decoration: underline;">P</span> 1234 <span style="text-decoration: underline;">P</span> <span style="text-decoration: underline;">*</span> <span style="text-decoration: underline;">P</span> <span style="text-decoration: underline;">*</span> <span style="text-decoration: underline;">P</span> <span style="text-decoration: underline;">2</span> 17778889999 <span style="text-decoration: underline;">#</span> (assuming 1234 is your PIN). Note: I haven&#8217;t tried this and I&#8217;m not sure it&#8217;d work out of the box like that.</p>
]]></content:encoded>
			<wfw:commentRss>http://scottblaine.com/foolproof-way-to-dial-out-on-google-voice-with-your-non-smart-phone/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unable to drag images with jQuery on IE? I found a fix.</title>
		<link>http://scottblaine.com/unable-to-drag-images-with-jquery-on-ie-i-found-a-fix</link>
		<comments>http://scottblaine.com/unable-to-drag-images-with-jquery-on-ie-i-found-a-fix#comments</comments>
		<pubDate>Sat, 02 Apr 2011 00:37:36 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[draggable]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://scottblaine.com/?p=468</guid>
		<description><![CDATA[I&#8217;ve been working on an app where you drag div&#8217;s from one location to another (using jQuery for draggable/droppable). Inside of said div is some text and an image. I was running into a big problem with IE (Internet Explorer): when clicking on the image to try and drag the div it would not work. [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on an app where you drag div&#8217;s from one location to another (using jQuery for draggable/droppable). Inside of said div is some text and an image. I was running into a big problem with IE (Internet Explorer): when clicking on the image to try and drag the div it would not work. It might as well have not been draggable at all. And dragging using the text in the div caused IE to start trying to select text (but at least it would drag). Not optimal behavior.</p>
<p>It took me a long time to find an answer on Google, but here it is:</p>
<p><strong>Don&#8217;t use the &#8220;distance&#8221; and &#8220;delay&#8221; options for draggables; they are currently incompatible with IE.</strong> As soon as I removed them the draggable functionality worked perfectly. I&#8217;m hopeful that the jQuery team will fix this in future versions, but for now, just don&#8217;t use those options.</p>
<p>This was with jQuery 1.5.1, jQuery UI 1.8.11 and IE8. Hopefully I&#8217;ve loaded this post with enough search terms that others will find it quickly before beating their heads against the wall :)</p>
]]></content:encoded>
			<wfw:commentRss>http://scottblaine.com/unable-to-drag-images-with-jquery-on-ie-i-found-a-fix/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Installing MongoDB on Windows 7</title>
		<link>http://scottblaine.com/installing-mongodb-on-windows-7</link>
		<comments>http://scottblaine.com/installing-mongodb-on-windows-7#comments</comments>
		<pubDate>Sat, 27 Mar 2010 15:03:12 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[windows 7]]></category>

		<guid isPermaLink="false">http://scottblaine.com/?p=386</guid>
		<description><![CDATA[I was trying to install MongoDB on Windows 7 recently and was having some trouble getting it to work. It doesn&#8217;t help that the installer fails silently, not telling you why it won&#8217;t install. All you know is that you ran the install command and there&#8217;s no MongoDB service installed. Anyway, here are the two [...]]]></description>
			<content:encoded><![CDATA[<p>I was trying to install MongoDB on Windows 7 recently and was having some trouble getting it to work. It doesn&#8217;t help that the installer fails silently, not telling you why it won&#8217;t install. All you know is that you ran the install command and there&#8217;s no MongoDB service installed. Anyway, here are the two gotcha&#8217;s I ran into:</p>
<ol>
<li>You need to run the command prompt as administrator.</li>
<li>You need to have the full path to the exe when you run the install command, e.g.:<br />
c:\mongodb-1.4.0\bin\mongod.exe &#8211;install</li>
</ol>
<p>Runs like a champ after that.</p>
]]></content:encoded>
			<wfw:commentRss>http://scottblaine.com/installing-mongodb-on-windows-7/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Image-free tabs with clean CSS</title>
		<link>http://scottblaine.com/image-free-tabs-with-clean-css</link>
		<comments>http://scottblaine.com/image-free-tabs-with-clean-css#comments</comments>
		<pubDate>Sun, 30 Aug 2009 01:00:17 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[tabs]]></category>

		<guid isPermaLink="false">http://scottblaine.com/?p=370</guid>
		<description><![CDATA[It&#8217;s slightly amazing to me how hard it is to find someone that has image-free tabs that have clean CSS. I found a lot of articles on sliding-door tabs (requiring images) and a few articles that required CSS for each individual tab (yuck!). And what I wanted wasn&#8217;t even complex: Simple, right? I sure wasn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s slightly amazing to me how hard it is to find someone that has image-free tabs that have clean CSS. I found a lot of articles on sliding-door tabs (requiring images) and a few articles that required CSS for each individual tab (yuck!). And what I wanted wasn&#8217;t even complex:</p>
<p><a href="http://scottblaine.com/blog/wp-content/uploads/2009/08/tabs.png"><img class="alignnone size-full wp-image-371" title="tabs" src="http://scottblaine.com/blog/wp-content/uploads/2009/08/tabs.png" alt="tabs" width="260" height="52" /></a></p>
<p>Simple, right? I sure wasn&#8217;t going to go reinvent the wheel by writing my own CSS for them though. Thankfully after searching for a bit I came across <a title="CSS Mini Tabs (the UN-tab, tab)" href="http://www.simplebits.com/bits/minitabs.html">SimpleBits&#8217; Mini Tabs</a>. I didn&#8217;t want mini-tabs, but the HTML and CSS was remarkably clean. Only 4 CSS declarations on a simple HTML list with a class=&#8221;active&#8221; for the current tab. With some modification to the CSS I was able to come up with tabs that looked like the above (even looks good in IE7, amazingly).</p>
<p>So, if you want some decent looking/functioning tabs go yank the HTML/CSS from the above link.</p>
]]></content:encoded>
			<wfw:commentRss>http://scottblaine.com/image-free-tabs-with-clean-css/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to use additional one-to-one models with restful_authentication</title>
		<link>http://scottblaine.com/how-to-use-additional-one-to-one-models-with-restful_authentication</link>
		<comments>http://scottblaine.com/how-to-use-additional-one-to-one-models-with-restful_authentication#comments</comments>
		<pubDate>Sun, 09 Aug 2009 01:00:03 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[models]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[restful_authentication]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://scottblaine.com/?p=345</guid>
		<description><![CDATA[Restful_authentication collects some basic information to get an account set up, like a username, email address, and password, which all gets stored in a User model. What if you have some additional information that you&#8217;d like to collect upon registration, and you don&#8217;t want to store it in the User model (addresses, for example)? Rails [...]]]></description>
			<content:encoded><![CDATA[<p>Restful_authentication collects some basic information to get an account set up, like a username, email address, and password, which all gets stored in a User model. What if you have some additional information that you&#8217;d like to collect upon registration, and you don&#8217;t want to store it in the User model (addresses, for example)? Rails 2.3 makes this easy.</p>
<p>Let&#8217;s get an example registration app set up:</p>
<pre>
rails registration
ruby script/plugin install http://svn.techno-weenie.net/projects/plugins/restful_authentication
ruby script/generate authenticated user sessions
</pre>
<p>Cool, now you have your registration app set up with a Users model, controller, and view. If you start up your server and head to http://localhost:3000/users/new/ you should see a very basic registration form. Let&#8217;s add our Address model. For the sake of brevity, I&#8217;m just going to create a field that references the User model and one field for a zip code, but you get the idea.</p>
<pre>
ruby script/generate model Address user:references zipcode:string
rake db:migrate
</pre>
<p>With our Address model in place, we need to let the User model know that it is linked to the Address model. Here&#8217;s what the User model looks like (\app\models\user.rb):</p>
<pre>
require 'digest/sha1'
class User &lt; ActiveRecord::Base
  # Virtual attribute for the unencrypted password
  attr_accessor :password

  validates_presence_of     :login, :email
  # lots more stuff that we're not going to worry about...
</pre>
<p>We&#8217;re going to add three things:</p>
<pre>
require 'digest/sha1'
class User &lt; ActiveRecord::Base
  has_one :address
  accepts_nested_attributes_for :address
  attr_accessible :address_attributes

  # Virtual attribute for the unencrypted password
  attr_accessor :password

  validates_presence_of     :login, :email
  # lots more stuff that we're not going to worry about...
</pre>
<p>We&#8217;ve told the User model that (1) it has one Address model, (2) that it should save data for Address automagically, and (3) that the address_attributes fields are permitted fields to receive data for (if you read through the code a bit further you&#8217;ll see another attr_accessible line, you could add address_attributes there too).</p>
<p>We need to make one change to the User controller (\controllers\users_controller.rb) to prevent an &#8220;Called id for nil&#8221; error later on. At line 6 you should have an empty new method. We&#8217;re going to create an instance variable for User:</p>
<pre>
  # render new.rhtml
  def new
    @user = User.new
  end
</pre>
<p>Let&#8217;s now take a look at the one User view that restful_auth created (\app\views\users\new.html.erb):</p>
<pre>
&lt;%= error_messages_for :user %&gt;
&lt;% form_for :user, :url =&gt; users_path do |f| -%&gt;
&lt;p&gt;&lt;label for=&quot;login&quot;&gt;Login&lt;/label&gt;&lt;br/&gt;
&lt;%= f.text_field :login %&gt;&lt;/p&gt;

&lt;p&gt;&lt;label for=&quot;email&quot;&gt;Email&lt;/label&gt;&lt;br/&gt;
&lt;%= f.text_field :email %&gt;&lt;/p&gt;

&lt;p&gt;&lt;label for=&quot;password&quot;&gt;Password&lt;/label&gt;&lt;br/&gt;
&lt;%= f.password_field :password %&gt;&lt;/p&gt;

&lt;p&gt;&lt;label for=&quot;password_confirmation&quot;&gt;Confirm Password&lt;/label&gt;&lt;br/&gt;
&lt;%= f.password_field :password_confirmation %&gt;&lt;/p&gt;

&lt;p&gt;&lt;%= submit_tag &#039;Sign up&#039; %&gt;&lt;/p&gt;
&lt;% end -%&gt;
</pre>
<p>First of all, we need to change the form_for :user to be form_for @user. Second, we get to add in our zipcode field:</p>
<pre>
&lt;%= error_messages_for :user %&gt;
&lt;% form_for @user, :url =&gt; users_path do |f| -%&gt;
&lt;p&gt;&lt;label for=&quot;login&quot;&gt;Login&lt;/label&gt;&lt;br/&gt;
&lt;%= f.text_field :login %&gt;&lt;/p&gt;

&lt;p&gt;&lt;label for=&quot;email&quot;&gt;Email&lt;/label&gt;&lt;br/&gt;
&lt;%= f.text_field :email %&gt;&lt;/p&gt;

&lt;p&gt;&lt;label for=&quot;password&quot;&gt;Password&lt;/label&gt;&lt;br/&gt;
&lt;%= f.password_field :password %&gt;&lt;/p&gt;

&lt;p&gt;&lt;label for=&quot;password_confirmation&quot;&gt;Confirm Password&lt;/label&gt;&lt;br/&gt;
&lt;%= f.password_field :password_confirmation %&gt;&lt;/p&gt;

&lt;% @user.build_address unless @user.address %&gt;
&lt;% f.fields_for :address do |a| %&gt;
  &lt;p&gt;
    &lt;%= a.label :zipcode %&gt;
    &lt;%= a.text_field :zipcode %&gt;
  &lt;/p&gt;
&lt;% end %&gt;

&lt;p&gt;&lt;%= submit_tag &#039;Sign up&#039; %&gt;&lt;/p&gt;
&lt;% end -%&gt;
</pre>
<p>Here&#8217;s where I ran into the two gotcha&#8217;s. If you don&#8217;t switch form_for :user to form_for @user when you submit the form you&#8217;ll get a very unpleasant error that looks like this:</p>
<pre>
ActiveRecord::AssociationTypeMismatch in UsersController#create
Address(#46729050) expected, got HashWithIndifferentAccess(#23561230)
</pre>
<p>Second, if you don&#8217;t add in line 15, @user.build_address unless @user.address, you&#8217;ll get the following error when you try to view the form:</p>
<pre>You have a nil object when you didn't expect it!</pre>
<p><a href="http://www.pixellatedvisions.com/2009/03/18/rails-2-3-nested-model-forms-and-nil-new-record">More info on why that error occurs here</a>.</p>
<p>Anyway, with the above steps you should now have a registration form that creates records for both User and Address. If you found this helpful, leave a comment and let me know!</p>
]]></content:encoded>
			<wfw:commentRss>http://scottblaine.com/how-to-use-additional-one-to-one-models-with-restful_authentication/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

