<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
   <channel>
      <title>Continuously Deployed Dan Mayer&apos;s Dev Blog</title>
      <link>http://www.mayerdan.com/</link>
      <description>Continuously Deployed is a dev blog focused mostly on startups, lean techniques, Ruby, Javascript, mobile dev and easing the development process.</description>
      <language>en</language>
      <copyright>Copyright 2010</copyright>
      <lastBuildDate>Sat, 10 Jul 2010 12:02:41 -0700</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

      
      <item>
         <title>Adding Custom JavaScript Handlers for PhoneGap Android</title>
         <description><![CDATA[One of the advantages I mentioned about PhoneGap, was being able to write custom native code, and interface with it via JavaScript. Their Aren't great example of how to do this out there, so I figured a quick blog post was in order.

I search around for how to do this when getting started with PhoneGap, and the best example I could find was, <a href="http://www.somms.net/2010/05/28/native-messages-for-android-phonegap/">Native messages for Android PhoneGap</a>. Following this example, I was able to get my own Javascript interface working.

Basically you create a class (using java for android example):

<script src="http://gist.github.com/470919.js?file=CustomJS.java"></script>
I 
create this private class in the main Java class which extends DroidGap (the class that boots up PhoneGap and creates the webview UI).

<script src="http://gist.github.com/470920.js?file=extendDroidGap.java"></script>

Then in your html you can call in javascript bridged Java functions like <code>var myData = CUSTOM.getData();</code> which will return the java data (in this case a string) to the javascript. I have used the JS bride to begin new Android Activities, Close the WebView and move entirely to Native code. Background the WebUI to do something native for awhile, then return the WebView back to the front, Etc.

<script src="http://gist.github.com/470922.js?file=customJSPhoneGap.js"></script>

This can be done similarly for the iPhone and Objective-C to Javascript with PhoneGap. This lets you leverage extra native flexibility while still building the majority of your app as JS, CSS, and HTML.]]></description>
         <link>http://www.mayerdan.com/2010/07/adding_custom_javascript_handl.php</link>
         <guid>http://www.mayerdan.com/2010/07/adding_custom_javascript_handl.php</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">Computer Science</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">Mobile</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">javascript</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">Android</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">iPhone</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Java</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">javascript</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Mobile</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">PhoneGap</category>
        
         <pubDate>Sat, 10 Jul 2010 12:02:41 -0700</pubDate>
      </item>
      
      <item>
         <title>Mobile Development and My Recommendation for PhoneGap</title>
         <description><![CDATA[In the last month or so I have been exploring mobile development. I wrote basic native Android and iPhone apps. I also build cross platform apps using Rhodes, Titanium, and PhoneGap. I thought it would be good to share my thoughts and experiences on the mobile dev space.

If you want full control and are doing a lot of local heavy processing (CPU bound) native is the way to go. I program to the web data without access I don't do much interesting. When the whole app basically relies on live data I feel javascript, HTML, and CSS is the way to go. Not only am I already familiar with it, but basically the app can share code with the mobile site. Also, using JS, HTML, and CSS gives the most flexibility in terms of supporting multiple devices. Since I wasn't using anything specific to a single mobile device or really pushing the hardware, I quickly moved away from fully native apps. It wasn't worth the time and extra effort to write nearly the same app in Java, Objective C, and whatever else. Game developers, and those doing a bunch with video, photos, etc are probably most interested in native apps and probably won't be as interested in other options.

This lead me to explore <a href="http://rhomobile.com/products/rhodes/">Rhodes</a>, <a href="http://www.appcelerator.com/">Titanium</a>, and <a href="http://phonegap.com">PhoneGap</a> as alternatives to purely native apps. All of which let you leverage HTML and CSS for building a UI.

Rhodes lets you write code in Ruby using a MVC framework. You leverage html (erb/haml) views using a Ruby back end to make remote requests, interact with a DB, and interact with native phone components. It is a cool framework, and obviously since it is Ruby, I enjoyed writing the code. However, it obscured the actual process of making an app for a device a bit much for my comfort. If something went wrong anywhere in the stack or if you wanted to break out of the Rhodes way to do something native on a platform it was difficult to do. It tries to manage the entire app development end to end hiding any per device customizations away from you. Since I wanted to be able to use some existing libraries for Android and iPhones, this limitation was a dealbreaker.

Titanium and PhoneGap use the same basic approach as each other providing a javascript library, which interfaces with native code for each device. You write an app in JS/HTML/CSS and make calls to the JS library to interact with native elements like the accelerometer, GPS, buttons, etc. I think it's a big win to be able to write most of the app in familiar web languages basically utilizing Ajax and local storage to give a nice mobile experience. Getting up and running on either Titanium or PhoneGap was painless. Again, in the end I wanted more control over some native components which caused me to choose PhoneGap over Titanium. While the concept is the same for both of these products, their approach is very different.

Titanium is a bit more all or nothing of an approach, you develop in Titanium's little world and it is best to not go out of
it. PhoneGap takes a extremely lightweight and minimalist approach to getting your project running on each device. It gives you basically the bare necessities and gets out of your way. PhoneGap doesn't try to configure the build environment and it doesn't manage simulators. To create a app with PhoneGap for any mobile platform you point to the same web directory (HTML, CSS, JS, and images), then generate a native app for the device. At that point you have the same native app project you would have if you were to start from scratch but you have a few nice libraries and code started for you. If you don't like the way PhoneGap does something, that is fine delete it, override it, extend it. You need to do something native PhoneGap doesn't support add your own JS handlers and interact with new or existing native code. I needed to allow for FaceBook connect login on Android, which PhoneGap doesn't support no problem. FaceBook maintains a Android SDK, which I imported into my PhoneGap project and added JS handlers which call to the FaceBook Android native code. There is a bug in Androids SSL cert verification for WebKit that was causing errors for HTTPS access, drop into java override the SSL Cert verification and fixed that. This would be difficult to do with Rhodes or Titanium because they don't allow you easily write and interact with your own native code. The project has to work only through the API provided to you to stay cross compatible. Which is great in some ways, but very limiting if you want to break out and just tweak a few little things.

I have been extremely happy working with PhoneGap, it rocks. It lets you build a native mobile app as a locally cached and privileged mobile website. You can leverage existing mobile site code for the native app. It will still be better than a pure website experience. It lets you piggyback on skill web developers already have. It is a great way to make use of HTML5  local DBs, local data, and HTML templates. It encourages you follow best practices for building a mobile site that works offline and requests only minimal JSON so it can fast over slow internet. 

Before building an app with PhoneGap I recommend building a mobile site. Learn about best practices for the mobile web. If you are new to developing sites for mobile, I highly recommend following the recommendations from <a href="http://www.engineyard.com/video/12678746">Yehuda Katz on building great mobile sites</a>. He discusses some things specific to Rails 3, but mostly just good JS practices.

In many ways when building a PhoneGap app you are just building a mobile website. You have access to utilizing some native things that you can't with pure HTML/CSS. Local storage is a good example, it is supported by HTML5, but the earlier Android webkit didn't support it. Using PhoneGap you have local storage on old devices and it can use standard HTML5 local storage on newer devices.

Last but not least, PhoneGap has a great <a href= "http://www.phonegap.com/community">active community</a>. Drop into #phonegap on freenode and people are always around to help out. The mailing list has a constant flow of questions and answers. While <a href="http://www.phonegap.com/docs">PhoneGap docs</a> are a little out of date, there are people actively working on improving them. There are many example applications and open code on github to check out how to use PhoneGap. Also, the code is small and simple enough it is a great project to get involved in and give back. After working with it awhile, you will start to understand the internals and could help contribute patches, features, and plugins to the community. ]]></description>
         <link>http://www.mayerdan.com/2010/07/mobile_development_and_my_reco.php</link>
         <guid>http://www.mayerdan.com/2010/07/mobile_development_and_my_reco.php</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">Computer Science</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">General</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">Mobile</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">Ruby</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">Android</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Development</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Mobile</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">PhoneGap</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Rhodes</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Ruby</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Titanium</category>
        
         <pubDate>Tue, 06 Jul 2010 21:24:03 -0700</pubDate>
      </item>
      
      <item>
         <title>The Ruby-fitbit API has been updated</title>
         <description><![CDATA[More about it can be found on here, <a href="http://github.com/danmayer/ruby-fitbit">Ruby-fitbit api on github</a>. Also, the original announcement can be found on <a href="http://www.mayerdan.com/2010/05/ruby_fitbit_api.php">my blog</a>.

Basically there is now detailed access to any of the data types for any given day. This can be used to backup your fitbit or gather the data for your own charting purposes. Which I will likely start taking advantage of soon for my fitbit blog widget.

Example:

~/projects/ruby-fitbit(master) > ruby bin/ruby-fitbit MYEMAIL MYPASS steps 06/22/2010
Calories Burned 1012
Steps Taken 0
Milkes Walked .00
Activity Levels Durations:
Sedentary 16hrs 7min
Lightly 0min
Fairly # => {fitbit.fairly_active}
Very 0min
steps data for data Tue Jun 22 00:00:00 -0400 2010
+--------------------------------+-------+
| 0                              | 1     |
+--------------------------------+-------+
| Tue Jun 22 21:50:00 -0400 2010 | 91.0  |
| Tue Jun 22 05:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 16:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 10:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 19:55:00 -0400 2010 | 69.0  |
| Tue Jun 22 14:20:00 -0400 2010 | 15.0  |
| Tue Jun 22 08:45:00 -0400 2010 | 1.0   |
| Tue Jun 22 03:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 23:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 01:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 18:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 12:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 06:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 21:40:00 -0400 2010 | 11.0  |
| Tue Jun 22 10:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 04:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 16:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 19:45:00 -0400 2010 | 543.0 |
| Tue Jun 22 14:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 08:35:00 -0400 2010 | 347.0 |
| Tue Jun 22 03:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 23:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 01:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 17:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 12:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 06:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 21:30:00 -0400 2010 | 25.0  |
| Tue Jun 22 10:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 04:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 15:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 19:35:00 -0400 2010 | 19.0  |
| Tue Jun 22 14:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 08:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 02:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 23:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 06:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 00:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 17:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 12:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 21:20:00 -0400 2010 | 23.0  |
| Tue Jun 22 15:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 10:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 04:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 19:25:00 -0400 2010 | 535.0 |
| Tue Jun 22 02:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 13:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 08:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 23:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 11:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 06:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 00:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 17:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 21:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 15:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 10:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 04:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 19:15:00 -0400 2010 | 595.0 |
| Tue Jun 22 08:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 02:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 13:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 22:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 17:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 11:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 06:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 00:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 21:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 04:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 15:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 09:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 19:05:00 -0400 2010 | 425.0 |
| Tue Jun 22 13:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 07:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 02:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 22:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 00:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 17:10:00 -0400 2010 | 22.0  |
| Tue Jun 22 11:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 06:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 20:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 09:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 04:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 15:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 18:55:00 -0400 2010 | 62.0  |
| Tue Jun 22 13:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 07:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 02:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 22:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 05:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 00:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 17:00:00 -0400 2010 | 35.0  |
| Tue Jun 22 11:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 20:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 15:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 09:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 03:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 18:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 02:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 13:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 07:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 22:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 11:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 05:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 00:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 16:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 20:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 14:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 09:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 03:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 18:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 07:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 01:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 13:00:00 -0400 2010 | 91.0  |
| Tue Jun 22 22:15:00 -0400 2010 | 445.0 |
| Tue Jun 22 16:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 11:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 05:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 20:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 14:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 09:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 03:35:00 -0400 2010 | 0.0   |
| Wed Jun 23 00:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 07:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 01:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 18:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 12:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 22:05:00 -0400 2010 | 80.0  |
| Tue Jun 22 16:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 10:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 05:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 20:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 03:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 14:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 09:00:00 -0400 2010 | 370.0 |
| Tue Jun 22 23:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 12:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 07:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 01:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 18:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 21:55:00 -0400 2010 | 69.0  |
| Tue Jun 22 16:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 10:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 05:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 20:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 08:50:00 -0400 2010 | 13.0  |
| Tue Jun 22 03:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 14:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 23:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 18:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 12:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 06:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 01:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 21:45:00 -0400 2010 | 17.0  |
| Tue Jun 22 05:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 16:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 10:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 19:50:00 -0400 2010 | 155.0 |
| Tue Jun 22 14:15:00 -0400 2010 | 40.0  |
| Tue Jun 22 08:40:00 -0400 2010 | 203.0 |
| Tue Jun 22 03:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 23:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 01:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 17:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 12:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 06:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 21:35:00 -0400 2010 | 53.0  |
| Tue Jun 22 10:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 04:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 16:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 19:40:00 -0400 2010 | 438.0 |
| Tue Jun 22 14:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 08:30:00 -0400 2010 | 12.0  |
| Tue Jun 22 02:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 23:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 06:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 01:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 17:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 12:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 21:25:00 -0400 2010 | 32.0  |
| Tue Jun 22 15:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 10:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 04:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 19:30:00 -0400 2010 | 499.0 |
| Tue Jun 22 02:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 13:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 08:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 23:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 12:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 06:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 00:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 17:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 21:15:00 -0400 2010 | 67.0  |
| Tue Jun 22 15:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 10:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 04:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 19:20:00 -0400 2010 | 604.0 |
| Tue Jun 22 08:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 02:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 13:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 23:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 17:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 11:50:00 -0400 2010 | 10.0  |
| Tue Jun 22 06:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 00:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 21:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 04:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 15:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 09:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 19:10:00 -0400 2010 | 291.0 |
| Tue Jun 22 13:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 08:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 02:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 22:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 17:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 11:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 06:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 00:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 20:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 04:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 15:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 09:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 19:00:00 -0400 2010 | 161.0 |
| Tue Jun 22 13:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 07:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 02:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 22:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 00:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 17:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 11:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 05:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 20:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 09:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 04:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 15:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 18:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 13:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 07:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 02:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 22:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 05:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 00:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 16:55:00 -0400 2010 | 37.0  |
| Tue Jun 22 11:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 20:35:00 -0400 2010 | 26.0  |
| Tue Jun 22 15:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 09:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 03:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 18:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 01:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 13:05:00 -0400 2010 | 75.0  |
| Tue Jun 22 07:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 22:20:00 -0400 2010 | 22.0  |
| Tue Jun 22 11:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 05:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 00:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 16:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 20:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 14:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 09:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 03:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 18:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 07:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 01:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 12:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 22:10:00 -0400 2010 | 268.0 |
| Tue Jun 22 16:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 11:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 05:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 20:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 03:30:00 -0400 2010 | 0.0   |
| Tue Jun 22 14:40:00 -0400 2010 | 0.0   |
| Tue Jun 22 09:05:00 -0400 2010 | 74.0  |
| Tue Jun 22 23:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 12:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 07:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 01:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 18:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 22:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 16:25:00 -0400 2010 | 0.0   |
| Tue Jun 22 10:50:00 -0400 2010 | 0.0   |
| Tue Jun 22 05:15:00 -0400 2010 | 0.0   |
| Tue Jun 22 20:05:00 -0400 2010 | 0.0   |
| Tue Jun 22 08:55:00 -0400 2010 | 0.0   |
| Tue Jun 22 03:20:00 -0400 2010 | 0.0   |
| Tue Jun 22 14:30:00 -0400 2010 | 16.0  |
| Tue Jun 22 23:45:00 -0400 2010 | 0.0   |
| Tue Jun 22 18:10:00 -0400 2010 | 0.0   |
| Tue Jun 22 12:35:00 -0400 2010 | 0.0   |
| Tue Jun 22 07:00:00 -0400 2010 | 0.0   |
| Tue Jun 22 01:25:00 -0400 2010 | 0.0   |
+--------------------------------+-------+
289 rows in set
done]]></description>
         <link>http://www.mayerdan.com/2010/07/the_ruby-fitbit_api_has_been_u.php</link>
         <guid>http://www.mayerdan.com/2010/07/the_ruby-fitbit_api_has_been_u.php</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">Computer Science</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">Ruby</category>
        
        
         <pubDate>Sat, 03 Jul 2010 14:04:24 -0700</pubDate>
      </item>
      
      <item>
         <title>Javascript document.addEventListener PhoneGap deviceready issues</title>
         <description><![CDATA[I had some issues with the deviceready callback. I had seen some similar posts, and figured I could save someone some time. Basically when using document.addEventListener order matters a lot. It all comes down to exactly when this line is loaded and what is already defined. 

[code:javascript]document.addEventListener("deviceready", deviceSetup, true);[/code]

We have custom JS, and originally it was loaded second, so the 
deviceready event was fired before, the listener was set. 

[code:plain]
        <script type="text/javascript" charset="utf-8" src="lscustom.js"></script> 
        <script type="text/javascript" charset="utf-8" src="phonegap.js"></script> 
[/code]

After that I was still having an issue and it turns out the method you 
define register as the callback needs to be defined before you add the 
listener. 
So having this in our lscustom.js works. 

[code:javascript]
var deviceSetup = function(){ 
  console.log("Device Setup"); 
}; 

document.addEventListener("deviceready", deviceSetup, true); 
While, the below fails. 
document.addEventListener("deviceready", deviceSetup, true); 
var deviceSetup = function(){ 
  console.log("Device Setup"); 
}; 
[/code]

Anyways since I ended up wasting a bit of time searching and debugging this issue, I figured I would share my debugging session. ]]></description>
         <link>http://www.mayerdan.com/2010/06/javascript_documentaddeventlis.php</link>
         <guid>http://www.mayerdan.com/2010/06/javascript_documentaddeventlis.php</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">Computer Science</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">Mobile</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">javascript</category>
        
        
         <pubDate>Sat, 26 Jun 2010 07:52:30 -0700</pubDate>
      </item>
      
      <item>
         <title>Code Highlighting on MovableType</title>
         <description><![CDATA[[code:ruby]
def code_highlighting
  puts "this is a highlight"
end
[/code]

I found a <a href="http://blogspot.makotokw.com/portfolio/movabletype/syntaxhighlighter/">syntaxhighlighter plugin</a>, which makes it simple to use <a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter">SyntaxHighlighter</a> on Movable Type. After downloading and unzipping the plugin in your MT directory. Just add the 
[code:ruby]<$MTSyntaxHighlighterInclude$>[/code] tag to your templates and then choose the SyntaxHighlighter format when making a post.]]></description>
         <link>http://www.mayerdan.com/2010/06/code_highlighting.php</link>
         <guid>http://www.mayerdan.com/2010/06/code_highlighting.php</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">General</category>
        
        
         <pubDate>Mon, 21 Jun 2010 21:52:12 -0700</pubDate>
      </item>
      
      <item>
         <title>Appcelerator Titanium older SDKs</title>
         <description><![CDATA[If you have a need to work with a app on a older SDK Titanium doesn't make it very easy for you. In fact they don't seem to have historical files available for download or any info on how to install older SDKs.

You can get a old version of the 0.8.x (in this case 0.8.2) SDK here:
<a href="http://share1t.com/dto0nv">Titanium 0.8.2 SDK download</a>

And after a bunch of searching I found that you should move the file on OSX to this location:
/Library/Application Support/Titanium/mobilesdk/osx/0.8.2

After that restart Titanium and the SDK should be available to you in the SDK dropdown when you create or import projects.]]></description>
         <link>http://www.mayerdan.com/2010/06/appcelerator_titanium_older_sd.php</link>
         <guid>http://www.mayerdan.com/2010/06/appcelerator_titanium_older_sd.php</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">Computer Science</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">Mobile</category>
        
        
         <pubDate>Wed, 16 Jun 2010 07:59:00 -0700</pubDate>
      </item>
      
      <item>
         <title>Ruby Dev Available for Contracting</title>
         <description><![CDATA[<a href="http://avdi.org/devblog">Avdi</a> a ex-Devver, developer, has just announced that <a href="http://avdi.org/devblog/2010/06/11/open-for-business/">ShipRise LLC</a> is open for business. He is looking to do freelancing/contracting for Ruby and other hard development problems.  I can attest to Avdi's skill in breaking down hard problems (like distributed test running) into elegant simple solutions. If you are looking for a great dev to work with you on a project, ping him.

Besides Ruby and general coding, Avdi is ready to help with "Dispersed team facilitation", which he has long term experience with. If you have a small distributed team of developers, he can help get everyone on the right path to work together, while being apart. He is gather a ton of information to help remote workers at his new blog <a href="http://wideteams.com/">Wide Teams</a>.]]></description>
         <link>http://www.mayerdan.com/2010/06/ruby_dev_available_for_contrac.php</link>
         <guid>http://www.mayerdan.com/2010/06/ruby_dev_available_for_contrac.php</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">Ruby</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">contractor</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">development</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">distributed</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">ruby</category>
        
         <pubDate>Sat, 12 Jun 2010 11:34:34 -0700</pubDate>
      </item>
      
      <item>
         <title>New gig at LivingSocial</title>
         <description><![CDATA[I just started my new gig at <a href="http://livingsocial.com">LivingSocial</a>. I had been a fan of their product ever since moving to DC. I had loved how it got groups of my friends to get together and plan something. I also really enjoyed how it gave me new ideas of cool things to do in my city. Especially since I just moved to DC and didn't really know what to do. We have bought deals to restaurants we wanted to try, restaurants we already knew and loved, kennedy center brunch with a group of friends, a wine tour with a group of 5 of us going. We have really enjoyed the savings, but even more so that it helps get us out there doing and trying new things.

Anyways I will be joining the development team, obviously doing Ruby stuff, since that is what I am focused on now. The team is already impressive and has accomplished a lot and scaled the site to request levels I have yet to deal with. I am excited to get to work and learn with the team, while bringing some of my skills from past experiences to help with the team. 

Yesterday, I pushed my first code live to production, which made me an official member of the team. Now to dig in and wrap my head around this code base. 

<div class="zemanta-pixie" style="margin-top:10px;height:15px"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/5df197a5-7f10-440c-bac4-5b6890b06322/" title="Reblog this post [with Zemanta]"><img class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=5df197a5-7f10-440c-bac4-5b6890b06322" alt="Reblog this post [with Zemanta]" style="border:none;float:right"></a><span class="zem-script more-related pretty-attribution"><script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"></script></span></div>]]></description>
         <link>http://www.mayerdan.com/2010/06/new_gig_at_livingsocial.php</link>
         <guid>http://www.mayerdan.com/2010/06/new_gig_at_livingsocial.php</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">General</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">LivingSocial</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Programming</category>
        
         <pubDate>Thu, 03 Jun 2010 10:43:57 -0700</pubDate>
      </item>
      
      <item>
         <title>Ruby Fitbit API</title>
         <description><![CDATA[<a href="http://fitbit.com">Fitbit</a> has been slow to release an official API, so I started work on a screen scraping version. It will become a nice gem interface to the real API when it is released. It is pretty limited at the moment, only able to pull the most basic current days info. 

You can check it out here <a href="http://github.com/danmayer/ruby-fitbit/">ruby-fitbit</a> on github.

Example output
<pre>~/projects/ruby-fitbit(master) &gt; ruby bin/ruby-fitbit my@email.com MYPASS
Calories Burned 834
Steps Taken 552
Milkes Walked .23
Activity Levels Durations:
Sedentary 11hrs 28min
Lightly 19min
Fairly 16min
Very 0min

done
</pre>

I also connected a quick sinatra app on <a href="http://heroku.com">Heroku</a> to it so that I could embed the data in my personal blog as a widget. I will clean that up and release the code for it soon. Here is the widget at the moment. I need to add good CSS that is customizable by the user. It would also be good to make it easy for others to host their own widgets opposed to just my own data. 

<iframe height="320px" frameborder="1" width="200px" scrolling="no" src="http://fitbit-widget.heroku.com/widget/60a4da84f6d1b0d92d8be565b9cffa8c0f0d24ccd6da0ddc1f021cc29ffbc92a" name="fitbit"></iframe>

<div class="zemanta-pixie" style="margin-top:10px;height:15px"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/7e9bcb50-5d30-472a-8b60-885abfa6e7af/" title="Reblog this post [with Zemanta]"><img class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=7e9bcb50-5d30-472a-8b60-885abfa6e7af" alt="Reblog this post [with Zemanta]" style="border:none;float:right"></a><span class="zem-script more-related pretty-attribution"><script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"></script></span></div>]]></description>
         <link>http://www.mayerdan.com/2010/05/ruby_fitbit_api.php</link>
         <guid>http://www.mayerdan.com/2010/05/ruby_fitbit_api.php</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">Computer Science</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">Ruby</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">API</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Fitbit</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">gem</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Heroku</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Programming</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Ruby</category>
        
         <pubDate>Wed, 26 May 2010 13:21:56 -0700</pubDate>
      </item>
      
      <item>
         <title>Converting Movable Type to Tumblr</title>
         <description><![CDATA[Continuing my work on converting this blog to be a dev blog, I moved over all non development and computer related posts to my personal blog. I just converted about 1,000 posts and 3,000 comments from MovableType to Tumblr and Disqus.

I decided I would host my personal blog on Tumblr, which has been interesting so far. Sucking the old posts and comments out of MovableType and pushing them to Tumblr wasn't as easy as I had hoped. Although it gave me a chance to enjoy on of my favorite parts of being a developer. If something doesn't exist and I want it, I can built it. So I set off to write a script that would take a Movable Type blog export and import all of the posts into Tumblr and push all of the comments to Disqus. While it wasn't the easiest thing to do, it wasn't that difficult either. I have slowly built up a collection of various utilities to help port from Movable Type to Wordpress, or from wordpress.org to wordpress.com. Things that help clean up formatting or remove javascript and replace it with something allowed on wordpress.org. I added my conversion script to the inconveniently named <a href="http://github.com/danmayer/MT_WP_Converter">MT_WP_Converter</a> git repo.

<a href="http://github.com/danmayer/MT_WP_Converter/blob/master/mt_tumblr_converter.rb">View MovableType to Tumblr Converter Script</a>

<script src="http://gist.github.com/412468.js?file=movabletyle_tumblr.rb"></script>

Quick Gotchas:
* There are lots of older or bad example code on how to use the disqus API out there, I had a problem posting comments because all of the POST endpoints must end with a '/', which I didn't know. This forum post helped me <a href="http://www.ruby-forum.com/topic/180723">fix an issue posting to disqus with rest client</a>.
* Remember to turn off the facebook publishing for tumblr, before doing the import or testing it. I didn't remember this and published the same test post on facebook about 40 times. Oops!]]></description>
         <link>http://www.mayerdan.com/2010/05/converting_movable_type_to_tum.php</link>
         <guid>http://www.mayerdan.com/2010/05/converting_movable_type_to_tum.php</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">Computer Science</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">Ruby</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">Blogging</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">MovableType</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Ruby</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Tumblr</category>
        
         <pubDate>Sun, 23 May 2010 10:26:52 -0700</pubDate>
      </item>
      
      <item>
         <title>Improving my Emacs Configurations</title>
         <description><![CDATA[I have been using Emacs as my default editor for awhile now. My emacs setup was a hodge podge of various plugins, code from friends, blogs, etc... It wasn't organized and was hard to maintain and fine tune. I decided it was time to get my emacs config under control, and under git so it was portable and easy to revert update etc.

I looked at a couple options for existing Emacs configuration setups for Ruby.

<a href="http://github.com/technomancy/emacs-starter-kit">Emacs Starter Kit</a>
<a href="http://github.com/topfunky/emacs-starter-kit">Topfunky's Emacs Starter Kit</a>
<a href="http://github.com/walter/aquamacs-emacs-starter-kit">Aquamacs Starter Kit</a>

In the end I ended up going with <a href="http://github.com/walter/aquamacs-emacs-starter-kit">Aquamacs Starter Kit</a>, namely because I have been a fan of Aquamacs for awhile, and already new my way around it's system pretty well. The original Starter kit, from Technomancy, doesn't play nicely with Aquamacs and leads to some issues. Some people have forks that are supposed to work better with Aquamacs, but it seems the kit built from the ground up for Aquamacs works best. Topfunky's project is based on the original emacs starter kit, but has been customized to work well with <a href="http://www.apple.com/downloads/macosx/unix_open_source/carbonemacspackage.html">Carbon Emacs</a>, which is more cross compatible than Aquamacs, so your emacs config is more likely to be portable to all unix systems as well as OS X with Carbon emacs. This looks like a really interesting option, but I decided I liked some of the nice extra sugar that Aquamacs provides. 

First install <a href="http://github.com/walter/aquamacs-emacs-starter-kit">Aquamacs starter kit</a>

There were a few things that I couldn't stand from the defaults in the Aquamacs Starter Kit and removed also some modifications that I added. 

<h3>Disabling/Removing some Starter Kit features</h3>

You likely installed your starter kit to a location like, '/Users/danmayer/Library/Preferences/Aquamacs Emacs/aquamacs-emacs-starter-kit', go there to find the files for modification. 

Disabling the emacs Twitter client, sorry I like my twitter to be entirely separate from my dev environment. 
Then edit 'init.el':
<code>
;;(autoload 'twitter-get-friends-timeline "twitter" nil t)	
;;(autoload 'twitter-status-edit "twitter" nil t)	
;;(global-set-key "\C-xt" 'twitter-get-friends-timeline)
;;(add-hook 'twitter-status-edit-mode-hook 'longlines-mode)
</code>


Disable Ruby-electric, which tries to complete various matched chars and statements as you type like ', {}. (), begin/end, if/end, etc... It drives me nuts and breaks my thought process. Edit 'misc-mode-tweaks.el':
<code>
;;(require 'ruby-electric)	
;;(add-hook 'ruby-mode-hook
;;          (lambda nil
;;            (require 'ruby-electric)	
;;            (ruby-electric-mode)
;;            (flymake-mode-on)))
</code>

<h3>Additions to Starter Kit</h3>
I saw a Emacs package to add flog score inline to ruby method scores and thought that sounded like a great addition to help keep my methods concise, so I added that, to my .emacs:

<code>
;; ruby-complexity flog scores for methods http://github.com/topfunky/emacs-starter-kit/tree/master/vendor/ruby-complexity/
(add-to-list 'load-path "~/.emacs.d/vendor/ruby-complexity/")

(require 'linum)
(require 'ruby-complexity)
(add-hook 'ruby-mode-hook
	  (function (lambda ()
		      (flymake-mode)
		      (linum-mode)
		      (ruby-complexity-mode))))
</code>

I also liked some of the options from <a href="http://github.com/defunkt/textmate.el">defunkt's Textmate minor mode</a>. First 'cd ~/.emacs.d/vendor; git clone git://github.com/defunkt/textmate.el.git' Again added to my .emacs file:

<code>
;; textmate bindings for some nicer key combos for common actions
(add-to-list 'load-path "~/.emacs.d/vendor/textmate.el")
(require 'textmate)
(textmate-mode)
</code>

I am just starting to get going with improving my Emacs setup, so I am sure I will likely be making additional changes. The current changes above are checked into <a href="http://github.com/danmayer/aquamacs-emacs-starter-kit">my fork</a> of the project, feel free to pull the above changes if you'd like. If you have any great Emacs tips, tricks, or plugins I should add let me know as I am sure it can just keep getting better, but I am pretty happy for now.

<a href="http://www.mayerdan.com/custom_aquamacs.jpg"><img src="http://www.mayerdan.com/custom_aquamacs_sm.jpg"></a>



<div class="zemanta-pixie" style="margin-top:10px;height:15px"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/e37199cb-1e97-43c9-82a8-909a8342131f/" title="Reblog this post [with Zemanta]"><img class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=e37199cb-1e97-43c9-82a8-909a8342131f" alt="Reblog this post [with Zemanta]" style="border:none;float:right"></a><span class="zem-script more-related pretty-attribution"><script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"></script></span></div>]]></description>
         <link>http://www.mayerdan.com/2010/05/improving_my_emacs_configurati.php</link>
         <guid>http://www.mayerdan.com/2010/05/improving_my_emacs_configurati.php</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">Computer Science</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">Ruby</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">Aquamacs</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Aquamacs Starter Kit</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Editors</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Emacs</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Open source</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">TextMate</category>
        
         <pubDate>Fri, 14 May 2010 08:13:02 -0700</pubDate>
      </item>
      
      <item>
         <title>Introducing Ruby Resume, a project to create and host your resume</title>
         <description><![CDATA[The <a href="http://github.com/danmayer/Resume">Ruby Resume project</a>, is a project I started to make it easier for Ruby developers to create, host, share their resume, and keep it up to date. It is an open source project, that anyone can use to help manage their resume online. It offers a variety of options and you can take or leave any part you wish. Basically, you fork the project, alter some things for your needs, and can contribute interesting additions back to the shared Ruby Resume project.

The project uses Sinatra, Markdown, and a collection of Rake tasks to get the job done. 

What does the Ruby Resume project do?
<ul>
<li>Supports deploying your resume to <a href="http://heroku.com">Heroku</a> in a variety of formats.</li>
<li>Easily deploy your app to any Sinatra compatible host</li>
<li>Allows simple publishing of your resume to your github personal page.</li>
<li>It makes it simple to publish your resume as a gem. I got the idea for a <a href="http://groups.google.com/group/rails-business/msg/68cf8a890c0d4fc8?pli=1">personal resume gem</a> from <a href="http://twitter.com/edavis10">Eric Davis</a>.</li>
<li>It uses Markdown, which integrates well with <a href="http://github.com/blog/553-looking-for-a-job-let-github-help">Github Jobs</a></li>
<li>It currently suppots HTML, LaTeX, and Markdown. Soon it will support PDF, RTF, etc...</li>
</ul>

I built this because I had to publish and start updating my resume again after not dealing with it for 3 years. I wanted something that would simplify the whole process. I wanted my resume under git, and I wanted to be able to quickly deploy any changes online and support a large number of formats.

Anyways check out the <a href="http://github.com/danmayer/Resume">source on Github</a> and the Readme which gives simple instructions on how to use the project. Or what the video below which demonstrates how to use this project for your own resume.

Live Examples:
<ul>
<li>My <a href="http://resume.mayerdan.com">resume on Heroku</a></li>
<li>My <a href="http://danmayer.github.com">Github personal page</a></li>
<li>My personal resume gem is, <a href="http://rubygems.org/gems/danmayer-resume">danmayer-resume</a>, which can be installed using <code>gem install danmayer-resume</code>, then execute danmayer-resume</li>
</ul>

<object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=11642402&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=11642402&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object><p><a href="http://vimeo.com/11642402">Ruby Resume Project</a> from <a href="http://vimeo.com/danmayer">dan mayer</a> on <a href="http://vimeo.com">Vimeo</a>.</p>

<div class="zemanta-pixie" style="margin-top:10px;height:15px"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/8c8aa943-8dd9-4306-a95c-2dbff0b07c08/" title="Reblog this post [with Zemanta]"><img class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=8c8aa943-8dd9-4306-a95c-2dbff0b07c08" alt="Reblog this post [with Zemanta]" style="border:none;float:right"></a><span class="zem-script more-related pretty-attribution"><script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"></script></span></div>]]></description>
         <link>http://www.mayerdan.com/2010/05/introducing_ruby_resume_a_proj.php</link>
         <guid>http://www.mayerdan.com/2010/05/introducing_ruby_resume_a_proj.php</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">Computer Science</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">Ruby</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">Github</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Heroku</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Markdown</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Open source</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Programming</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Resume</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Ruby</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Tools</category>
        
         <pubDate>Mon, 10 May 2010 20:54:06 -0700</pubDate>
      </item>
      
      <item>
         <title>This blog will be changing soon</title>
         <description><![CDATA[It will becoming my development blog. I am currently working on updating and reconfiguring the system, but you can look forward to many changes around here.

If you want to follow and read my more personal blog posts, head over to <a href="http://wastedbrains.com">WastedBrains</a>, which will host my non development blogging and thoughts.]]></description>
         <link>http://www.mayerdan.com/2010/05/this_blog_will_be_changing_soo.php</link>
         <guid>http://www.mayerdan.com/2010/05/this_blog_will_be_changing_soo.php</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">Computer Science</category>
        
        
         <pubDate>Tue, 04 May 2010 06:21:20 -0700</pubDate>
      </item>
      
      <item>
         <title>A archive of my last project</title>
         <description><![CDATA[Since Caliper is shutting down on April 30th, I made a little video to show what it did, and explain it's purpose. It isn't really promotional, but if people ever want a reference of something I worked on this should help.

<object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=11358149&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=11358149&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object><p><a href="http://vimeo.com/11358149">Caliper Screencast</a> from <a href="http://vimeo.com/user2008106">dan mayer</a> on <a href="http://vimeo.com">Vimeo</a>.</p>]]></description>
         <link>http://www.mayerdan.com/2010/05/a_archive_of_my_last_project.php</link>
         <guid>http://www.mayerdan.com/2010/05/a_archive_of_my_last_project.php</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">Computer Science</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">Ruby on Rails</category>
        
        
         <pubDate>Sat, 01 May 2010 09:41:26 -0700</pubDate>
      </item>
      
      <item>
         <title>Dan Mayer Resume</title>
         <description><![CDATA[<a href="http://www.mayerdan.com/Dan_Mayer_Resume.txt">Download file</a>

Daniel Mayer
dan@mayerdan.com
503-819-3246
821 Maryland Ave NE #305
Washington, DC 20002

http://github.com/danmayer
http://mayerdan.com

Devver
Founder / CTO / Ruby Software Developer
April 2008 - Present  (2 years 1 month)
Software startup to make the lives of developers easier. Originally, developed accelerated testing for Ruby developers. More recently, launched getcaliper.com, which builds code analytics for all Rubygems and builds metrics for public and private git-based Ruby projects.
 * Built accellerated testing tool, using distributed computing services to run developer tests
 * Developed a cloud-based continious integration server and notification services
 * Developed cloud-based code metrics and analytics project analyzer, which integrated with Rubygems to provide analytics on all public Rubygems and many OSS git-based projects (7000+ projects)
 * Member of a distributed agile team -- practiced daily standups, remote pair programming, and continious integration
 * Worked extensively with cloud based services and distributed computing techniques. (EC2, Beanstalkd queues, Schemaless SimpleDB, S3)
 * Developed and deployed EventMachine, Merb, Rails, and Sinatra in production environments.

Pretheory
Founder
May 2007 - April 2008 
Small Denver-based consumer web startup. Built Seekler.com to help people find the best of everything online by created social, community-based top 10 lists on consumer-driven topics or products.

Indigio
Java Lead Engineer
August 2006 - May 2007 
Developed web sites for Fortune 500 companies. Managed a small Java team with local and international remote employees. 

IST
Java Software Engineer
December 2005 - June 2006
Developed full lifecycle of a DOD distributed syncronous infrastructure in Java.

Education: 
University of Colorado
Boulder, CO
B.S., Computer Science
GPA: 3.185

Skills:
Ruby, Rails, Sinatra, EventMachine, DataMapper, Linux, OSX, Javascript (JQuery/Prototype), HTML, AWS, Distributed Computing, Apache, MySql, Postgres, Schemaless DBs (NoSql), Pair Programming, Test-Focused Development, Distributed Teams, Developer team management, Participating in Ruby OSS software, Active on Github, building custom protocal EventMachine-based protocals, building restful webservice API's]]></description>
         <link>http://www.mayerdan.com/2009/04/dan_mayer_resume.php</link>
         <guid>http://www.mayerdan.com/2009/04/dan_mayer_resume.php</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">Computer Science</category>
        
        
         <pubDate>Sat, 18 Apr 2009 20:59:29 -0700</pubDate>
      </item>
      
   </channel>
</rss>
