<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Thoughts</title>
    <description>Lots of articles</description>
    <link>/posts.rss</link>
    <item>
      <title>faux smtp server for development</title>
      <description>How did I not know about &lt;a href="http://www.mocksmtpapp.com/"&gt;this awesome smtp development tool&lt;/a&gt;? Check it out http://www.mocksmtpapp.com/. This helps when debugging mailing issues, no fake emails so you don't send testing emails to your users. Just a different config for the smtp server. Super easy to use. Check it out.</description>
      <pubDate>Tue, 12 Apr 2011 01:14:11 +0000</pubDate>
      <link>/posts/919-faux-smtp-server-for-development.rss</link>
      <guid>/posts/919-faux-smtp-server-for-development.rss</guid>
    </item>
    <item>
      <title>productivity helper : bash utility</title>
      <description>I found a handy utility &lt;a href="/wp-content/uploads/2011/03/bashhelper.txt"&gt;download here&lt;/a&gt; for bookmarking in the terminal. It basically lets you save bookmarks of your current location by name for easy retrieval.
&lt;h3&gt;Usage:&lt;/h3&gt;
&lt;em&gt;cd &amp;lt;directory_you_visit_a_lot&amp;gt;&lt;/em&gt;

&lt;em&gt;s &amp;lt;name&amp;gt;&lt;/em&gt;

This saves the working directory as a bookmark with the name you gave it.

List the current bookmarks by

&lt;em&gt;l&lt;/em&gt;

Jump to a current bookmark

g &amp;lt;name&amp;gt;

Paste to the bottom of your .bashrc file

&lt;code lang="bash"&gt;
function s {
cat ~/.sdirs | grep -v "export DIR_$1=" &amp;gt; ~/.sdirs1
mv ~/.sdirs1 ~/.sdirs
echo "export DIR_$1=$PWD" &amp;gt;&amp;gt; ~/.sdirs
}

function l {
source ~/.sdirs
env | grep "^DIR_" | cut -c5- | grep "^.*="
}

# enable custom tab completion
shopt -s progcomp

# jump to bookmark
function g {
source ~/.sdirs
cd $(eval $(echo echo $(echo \$DIR_$1)))
}

# list bookmarks without dirname
function _l {
source ~/.sdirs
env | grep "^DIR_" | cut -c5- | grep "^.*=" | cut -f1 -d "="
}

# completion command for g
function _gcomp {
local curw
COMPREPLY=()
curw=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=($(compgen -W '`_l`' -- $curw))
return 0
}

# bind completion command for g to _gcomp
complete -F _gcomp g



&amp;nbsp;

&amp;nbsp;

# Usage: g [TAB]
&lt;/code&gt;</description>
      <pubDate>Tue, 29 Mar 2011 16:41:22 +0000</pubDate>
      <link>/posts/920-productivity-helper-bash-utility.rss</link>
      <guid>/posts/920-productivity-helper-bash-utility.rss</guid>
    </item>
    <item>
      <title>Create a Winning iPhone / Android web app in 32 hours or Rapid App Development</title>
      <description>&lt;strong&gt;The task at hand. &lt;/strong&gt;

Rapidly build an app or tool in 2 days. Deploy said app.

We decided to that while the boss was out of town at a conference we would push out a new app. We were a team of two. We knew time was critical, so we knew we had to plan quickly. We didn't even have a product idea yet.
&lt;h3&gt;The first step&lt;/h3&gt;
was to break out the dry erase board. I gave us 5 minutes to shout out ideas. Dumb, too long, whatever. It didn't matter, we just needed to keep the ideas coming. This avoids us just sitting there getting bored without an idea. Don't shoot down ideas in this phase.
&lt;h3&gt;Next,&lt;/h3&gt;
we evaluated the ideas. 5 minutes. They ranged from a complete rewrite of the tracking tool to integrating with a new crm we're implementing. We threw out the ones that we couldn't complete in 2 days. We prioritized the rest based on what would be the most useful. We chose to create a mobile version of our tracking platform.
&lt;h3&gt;Step 3: Defining the feature set&lt;/h3&gt;
10-20 minutes. Erase the dry erase, and we broke down what it meant by to create a mobile version. We listed the features we would like to see in this mobile verison. After which we prioritized the feature set.
&lt;h3&gt;Step 4: Choosing the tools&lt;/h3&gt;
We thought about the toolsets to be used. We knew that we could leverage jquery mobile. Part of our decision was based on that. We both knew php, and I have been using ruby and rails since 2006, but not in an everyday basis. My colleague has shown interest in learning ruby anyways. I decided it was time for him to jump in. I generated the rails app and started to dig in.
&lt;h3&gt;Step 5: The Development&lt;/h3&gt;
We came up with the following feature list:
&lt;ul&gt;
	&lt;li&gt;View a listing of active campaigns&lt;/li&gt;
	&lt;li&gt;The ability to turn on or off offers within campaigns.&lt;/li&gt;
	&lt;li&gt;The ability to change the end url to any offer.&lt;/li&gt;
	&lt;li&gt;View reports for for various metrics&lt;/li&gt;
	&lt;li&gt;Create js (canvas) charts for the reports&lt;/li&gt;
	&lt;li&gt;create simple authentication system using [devise|authlogic]&lt;/li&gt;
&lt;/ul&gt;
We started with an existing database schema running on MySQL. It did not mesh with the conventions of rails. So we had no use for migrations.  We decided to break down the schema into the MVC objects rails wants. After generating the scaffold for the app I immediately committed it into git and then pushed it into a remote repo.

James wired up the jquery mobile into the layouts. We decided that I would handle the backend since I was familiar with ruby and rails. James had built a mobile interface for his apartment search using jQuery mobile, so we decided that he would be best pulling together the frontend. This combo proved to work well for us.

Rails helped greatly with the rapid production. I had models and a few controllers created with the associations needed within minutes. My friend was astonished how nice the activerecord associations just worked, and how quickly everything came together. After working with Zend Framework and Doctrine, the setup was minimal.

The ui was expedited by using jquery mobile, which is shaping up nicely. We just used the default styles that came with it. They're good enough for now. I must say it's pretty slick. This was my first run in with jquery mobile. I'm a huge fan of jquery and jquery-ui, so this was an easy choice for a mobile framework. It handled a lot of nice features like transitions and ui widgets through simple css classes and a standard structure. A lot like iui in the old days, only with modern css3 and html5 enhancements.
&lt;h3&gt;The End Result:&lt;/h3&gt;
We ended up dropping a few features. We never broke down the reports any more granularly. We also skipped creating js based charts. We relegated authentication to a simple .htaccess file as well. We conceived, planned, developed, and deployed the app within 2 days. It felt clean and finished.

The stakeholder is thrilled, and is already coming up with new reports to implement. Winning!

I'll need to fake some data and then I can show some screenshots of the app, til then I'm going to hide our numbers even if they'll be old soon.</description>
      <pubDate>Tue, 29 Mar 2011 00:06:39 +0000</pubDate>
      <link>/posts/921-create-a-winning-iphone-android-web-app-in-32-hours-or-rapid-app-development.rss</link>
      <guid>/posts/921-create-a-winning-iphone-android-web-app-in-32-hours-or-rapid-app-development.rss</guid>
    </item>
    <item>
      <title>37 Signals does it right with mobile</title>
      <description>A perfect example of what should be done. It doesn't take a company with the power of Google to create a proper web app. A small team can recreate a good app too. The need for a native app is just not there.

The team at 37 signals have opted to not have 4+ versions of a basecamp mobile (ala 1990's) and instead take advantage of the technology available right now. This is why web apps are where it's at. As a regular basecamp user, I can say this app is good. I'm only missing the ability to reorder the todo lists at the moment. I'm sure that'll make it's way in there in a later release.

The best part, Apple doesn't regulate web apps. There isn't a wait to get the release out there. cap deploy. done! I'm sure the thought of apple possibly being able to take 30% of revenue from signups or subscriptions in app at some point in the future is another good reason to establish a precedent that the web app is the way to go. Most apps can turn into a web app (as I pointed out in a &lt;a title="native app recreated with html5" href="/code/bbc-ios-app-recreated-with-html5/" target="_self"&gt;previous post&lt;/a&gt;). Who's next?

I would like to see access to the camera through the browser. Do you hear me apple and google android teams? Flash can do it. Just sayin'!

&lt;a href="http://37signals.com/svn/posts/2761-launch-basecamp-mobile"&gt;http://37signals.com/svn/posts/2761-launch-basecamp-mobile&lt;/a&gt;</description>
      <pubDate>Thu, 17 Feb 2011 02:16:44 +0000</pubDate>
      <link>/posts/922-37-signals-does-it-right-with-mobile.rss</link>
      <guid>/posts/922-37-signals-does-it-right-with-mobile.rss</guid>
    </item>
    <item>
      <title>Good bye Facebook</title>
      <description>I finally &lt;strong&gt;deleted my facebook&lt;/strong&gt; account last night. I did this because I found myself being completely anti-social. The worst of it was because of the mobile app. But that is only part of it.

&lt;strong&gt;Sharing too much is not a good thing.&lt;/strong&gt; While facebook would have you believe otherwise, it's ok to have private parts of your life. It is an addictive world where you feel like you should share more than we have ever shared with a bunch of people that we can't communicate with unless we're shouting and it's super convenient. Like popping up on their "wall". It certainly isn't any good for dating anyone that's more than a piece of ass. Too many comments, posts, pictures that can be taken out of context and cause problems where there weren't any.

When I'm out, I look around and I see people on dates or out with friends that can't go without checking on their phone while sitting with that person. It really has destroyed our attention spans. &lt;strong&gt;It's fucking rude! &lt;/strong&gt;Either you want to be there with your friends or you don't. Quit looking for something better to do or another shiny object to look at! I found myself being a victim to this addictiveness.

&lt;strong&gt;Good bye facebook&lt;/strong&gt;. You will be missed in some ways. But I'm sure I'll be better without you. You know, like the 26 years I was alive before I created my account. &lt;strong&gt;I live in &lt;a title="Siesta Key" href="http://www.google.com/images?q=siesta+key&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;source=univ&amp;amp;ei=UixQTaCTKoH78AaVouCKDw&amp;amp;sa=X&amp;amp;oi=image_result_group&amp;amp;ct=title&amp;amp;resnum=1&amp;amp;ved=0CDwQsAQwAA&amp;amp;biw=1120&amp;amp;bih=1080" target="_blank"&gt;paradise&lt;/a&gt;&lt;/strong&gt;, and yet I was buried in my phone. Screw that! The only thing I'll have is a business account for advertising and development. But my personal info is gone.</description>
      <pubDate>Mon, 07 Feb 2011 17:36:34 +0000</pubDate>
      <link>/posts/923-good-bye-facebook.rss</link>
      <guid>/posts/923-good-bye-facebook.rss</guid>
    </item>
  </channel>
</rss>
