<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>A Ruby and iOS developer and designer living in Santa Monica, California.</description><title>Kevin Sylvestre</title><generator>Tumblr (3.0; @ksylvest)</generator><link>http://ksylvest.com/</link><item><title>Faster Testing in Rails with Guard for Zeus, RSpec, and Cucumber</title><description>&lt;p&gt;Two amazing tools that focus on improving how tests are run rather than written in Ruby on Rails are &lt;a href="https://github.com/burke/zeus"&gt;Zeus&lt;/a&gt; and &lt;a href="https://github.com/guard/guard"&gt;Guard&lt;/a&gt;. So what are they?&lt;/p&gt;

&lt;h2&gt;Zeus&lt;/h2&gt;

&lt;p&gt;Zeus will preload a Ruby on Rails application so that you don&amp;#8217;t have to whenever running rake, spec, or server commands.&lt;/p&gt;

&lt;h2&gt;Guard&lt;/h2&gt;

&lt;p&gt;Guard monitors the file system and executes tasks whenever files are change.&lt;/p&gt;

&lt;h2&gt;Integration&lt;/h2&gt;

&lt;h3&gt;Step 1. Setup Your Gems&lt;/h3&gt;

&lt;p&gt;Follow this example Gemfile configured to work with growl, guard, rspec, cucumber and capybara:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;group :development do
  gem 'growl'
  gem 'guard'
  gem 'guard-bundler'
  gem 'guard-cucumber'
  gem 'guard-rspec'
  gem 'guard-zeus'
  gem 'rb-inotify', require: false
  gem 'rb-fsevent', require: false
  gem 'rb-fchange', require: false
end

group :test do
  gem 'capybara'
  gem 'capybara-webkit'
  gem 'rspec-rails'
  gem 'cucumber-rails', require: false
end
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Step 2. Setup Your Guards&lt;/h3&gt;

&lt;p&gt;Follow this example Guardfile configured for cucumber and rspec:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;guard 'bundler' do
  watch('Gemfile')
end

guard 'cucumber', command_prefix: 'zeus', bundler: false do
  watch(%r{^features/.+\.feature$})
  watch(%r{^features/support/.+$}) { 'features' }
  watch(%r{^features/step.+/.+$})  { 'features' }
end

guard 'rspec', zeus: true, bundler: false do
  watch(%r{^spec/.+_spec\.rb$})
  watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch('spec/spec_helper.rb')  { "spec" }

  watch(%r{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^app/(.*)(\.erb|\.slim|\.haml)$})          { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
  watch(%r{^app/controllers/(.+)_(controller)\.rb$})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
  watch(%r{^spec/support/(.+)\.rb$})                  { "spec" }
  watch('config/routes.rb')                           { "spec/routing" }
  watch('app/controllers/application_controller.rb')  { "spec/controllers" }

  watch(%r{^app/views/(.+)/.*\.(erb|slim|haml)$})          { |m| "spec/features/#{m[1]}_spec.rb" }
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It is possible to&lt;/p&gt;

&lt;h3&gt;Step 3. Install Growl Notify&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://growl.info/downloads"&gt;Growl Notify&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Step 4. Bundle and Install Zeus&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;bundle install
gem install zeus
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Step 5. Start Zeus and Guard&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;zeus start
bundle exec guard
&lt;/code&gt;&lt;/pre&gt;</description><link>http://ksylvest.com/post/44968718393</link><guid>http://ksylvest.com/post/44968718393</guid><pubDate>Sat, 09 Mar 2013 16:44:00 -0500</pubDate><category>rspec</category><category>guard</category><category>zeus</category><category>cucumber</category><category>rails</category><category>ruby</category><category>testing</category></item><item><title>Progress in Developing iOS and Cocoa</title><description>&lt;p&gt;Over the past few iterations of iOS and Cocoa Apple has fundamentally changed the language and improved nearly every aspect. The removal of memory management (and replacement with ARC) has solved more than a few headaches. The addition of short form expressions and blocks means code can be refactored greatly. Here&amp;#8217;s a snippet to show what an improvement it has been:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Old:&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;- (void)userSignupSuccess:(User *)user
{
  ...
}

- (void)userSignupFailure:(NSError *)error
{
  ...
}

- (void)signup
{
  NSArray *objects = [NSArray arrayWithObjects:@"Kevin", [NSNumber numberWithInt:24], [NSDate date]];
  NSArray *keys = @"name", @"age", @"modified";
  NSDictionary *params = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

  UserProcessor *up = [[UserProcessor alloc] init];

  up.delegate = self;
  [up create:params];

  [up release];
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;New:&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;- (void)signup
{
  [User create:@{ @"name" : @"Kevin", @"age" : @24 } 
    withSuccess:^(User *user) { ... } 
    andFailure:^(NSError *error) { ... }];
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This isn&amp;#8217;t the best of it though. An amazing new package manager has taken off that follows a similar format to the Ruby and Python equivalents. It is called &lt;a href="http://cocoapods.org/"&gt;CocoaPods&lt;/a&gt; and it rocks! Special thanks to Apple for making developers lives that much better and a huge thanks to all the open source developers who work for free every day to improve the ecosystem!&lt;/p&gt;</description><link>http://ksylvest.com/post/44355350413</link><guid>http://ksylvest.com/post/44355350413</guid><pubDate>Sat, 02 Mar 2013 02:04:00 -0500</pubDate><category>ios</category><category>cocoa</category><category>apple</category></item><item><title>Deploying Rails with JRuby to Heroku</title><description>&lt;p&gt;&lt;strong&gt;Step 1: Modify Your Gemfile&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;#ruby=jruby-1.7.0
ruby '1.9.3', engine: 'jruby', engine_version: '1.7.0'

gem 'puma'
gem 'rails', '3.2.9'
gem 'puma'
gem 'jruby-openssl', platforms: :jruby
gem 'activerecord-jdbcpostgresql-adapter', platforms: :jruby
gem 'therubyrhino', platforms: :jruby
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Step 2: Modify Your Procfile&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;web: bundle exec rails server puma -p $PORT -e $RACK_ENV&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Step 3: Configure Your Application&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;heroku create
heroku config:set PATH=bin:/app/vendor/bundle/jruby/1.9/bin:/usr/local/bin:/usr/bin:/bin 
heroku config:set GEM_PATH=vendor/bundle/jruby/1.9
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Step 4: Deploy&lt;/strong&gt; &lt;/p&gt;
&lt;pre&gt;git push heroku master&lt;/pre&gt;</description><link>http://ksylvest.com/post/35829226480</link><guid>http://ksylvest.com/post/35829226480</guid><pubDate>Fri, 16 Nov 2012 01:44:00 -0500</pubDate></item><item><title>Setting Up Mac OS X For Development</title><description>&lt;p&gt;&lt;strong&gt;Step 1: Install Xcode&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Open the App Store (located in the dock)&lt;/li&gt;
&lt;li&gt;Search for &amp;#8216;Xcode&amp;#8217; and install&lt;/li&gt;
&lt;li&gt;Open &amp;#8216;Xcode&amp;#8217; and select Preferences (⌘,)&lt;/li&gt;
&lt;li&gt;On the &amp;#8216;Downloads&amp;#8217; tab install the &amp;#8216;Command Line Utilities&amp;#8217;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Step 2: Install XQuartz&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Browse to &lt;a href="http://xquartz.macosforge.org/landing/"&gt;&lt;a href="http://xquartz.macosforge.org/landing/"&gt;http://xquartz.macosforge.org/landing/&lt;/a&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Download the latest DMG (2.7.2 or newer) and run the XQuartz.pkg&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Step 3: Install Everything&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;From Terminal: curl -sL goo.gl/gfdqL | bash&lt;/li&gt;
&lt;/ol&gt;</description><link>http://ksylvest.com/post/28219200569</link><guid>http://ksylvest.com/post/28219200569</guid><pubDate>Sat, 28 Jul 2012 17:29:00 -0400</pubDate><category>brew</category><category>mac</category><category>mysql</category><category>postgres</category><category>ruby</category><category>setup</category></item><item><title>Finished version can be found here: http://gethearts.com/.</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_lzq3srjLLm1qawpwfo1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Finished version can be found here: &lt;a href="http://gethearts.com/"&gt;&lt;a href="http://gethearts.com/"&gt;http://gethearts.com/&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;</description><link>http://ksylvest.com/post/17989929788</link><guid>http://ksylvest.com/post/17989929788</guid><pubDate>Mon, 20 Feb 2012 22:17:15 -0500</pubDate></item><item><title>Lessons Apple Should Learn from Ruby and Rails</title><description>&lt;p&gt;I&amp;#8217;ve been a practicing iOS and Mac developer for a few years and I love many aspects of Apple&amp;#8217;s platforms. Apple&amp;#8217;s interface design software is incredible, programs run fast even on mobile devices, and the debugging tools are fantastic. However, with experience comes bitterness. My &amp;#8220;grass is always greener&amp;#8221; beliefs comes from having also been writing Ruby (on Rails) code as well. Rails has introduced me to a variety of conventions that I think should be in the Cocoa frameworks. So, I&amp;#8217;ve decided to compare and contrast a few snippets of Cocoa and Rails and list my two biggest issues.&lt;/p&gt;

&lt;p&gt;The first issue with Mac development is the language. Objective-C might have been the hottest thing in town in the 1980&amp;#8217;s but it has cooled off over the last 20 years. One of my biggest frustrations is with the amount of code required to get started. For example, compare these two class declarations:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ruby:&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;class Person
  attr_accessor :name&amp;amp;#13;
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Objective-C:&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#import "Foundation/Foundation.h"

@interface Person : NSObject 
{
    NSString *name;
}

@property (nonatomic, retain) NSString *name;

@end


#import "Person.h"

@implementation Person

@synthesize name;

- (void)dealloc
{
    [name release];
    name = nil;
    [super dealloc];
}

@end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The above code explains where my frustration stems from. Having lots of code is a pain. It is difficult to read, difficult to troubleshoot, and easy to do wrong. I often struggle with programming in Objective-C and follow DRY (don&amp;#8217;t repeat yourself) paradigm.&lt;/p&gt;

&lt;p&gt;The second problem with developing in Cocoa is that the framework designers went in with some questionable goals. I first learned Cocoa by watching presentations from Apple Engineers and can remember hearing &amp;#8220;Cocoa makes the easy things easy and the hard things possible&amp;#8221; as a mantra. As Robert Martin stated in his 2009 Rails Conference presentation in &amp;#8220;What Killed Smalltalk Could Kill Ruby Too&amp;#8221; this is insane. The real motto should be something along the lines of &amp;#8220;make the easy things trivial and the hard things easy&amp;#8221;.&lt;/p&gt;

&lt;p&gt;A great example of making hard things easy can be found in how Rails handles persistent storage. Active Record was integrated into Rails to make saving, storing and updating database records a breeze. Core Data was designed by Apple to torture developers. For example, see some of the steps required to make the previous example persistent:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rails:&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Person.all.each do |person|
  puts "Hi #{person.name}"
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Cocoa:&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:[NSURL fileURLWithPath:@"model.mod"]];
NSPersistentStoreCoordinator *persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] init];

[persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:@"data.sqlite"] options:nil error:NULL];
[managedObjectContext setPersistentStoreCoordinator:persistentStoreCoordinator];

NSFetchRequest *request;
NSEntityDescription *entity;

request = [[NSFetchRequest alloc] init];
entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context];

[request setEntity:entity];

NSArray *people = [context executeFetchRequest:request error:NULL];

for (Person person in people)
{
  NSLog(@"Hi %@", person);
}

[request release];
[managedObjectContext release];
[persistentStoreCoordinator release];
[managedObjectContext release];
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This isn&amp;#8217;t a language limitation, this is a framework problem. Core Data could have been designed to give developers the same one line access to data that Rails has, but good defaults were never selected. As such flexibility was created at the cost of many developers time. Apple should have set out with a set of goals for doing basic CRUD operations without ever having to look through copious amounts of documentation.&lt;/p&gt;

&lt;p&gt;I don&amp;#8217;t hate Apple; let me assure you that the opposite is true. I understand that the hardware and software shipped by the company over the past five years will be marked as some of the best ever created. I just hope that someone in Cupertino is thinking about the developers as the frameworks and languages continue to progress.&lt;/p&gt;</description><link>http://ksylvest.com/post/3154848181</link><guid>http://ksylvest.com/post/3154848181</guid><pubDate>Sun, 06 Feb 2011 20:10:00 -0500</pubDate><category>development</category><category>rails</category><category>ruby</category><category>apple</category><category>cocoa</category></item><item><title>Video</title><description>&lt;br/&gt;&lt;br/&gt;</description><link>http://ksylvest.com/post/2401336376</link><guid>http://ksylvest.com/post/2401336376</guid><pubDate>Tue, 21 Dec 2010 06:54:01 -0500</pubDate></item><item><title>Are Grid Systems Wrong?</title><description>&lt;p&gt;I am  finishing in the process of finishing up a project and have started to question the &amp;#8216;correctness&amp;#8217; of grid systems. Although they are extremely powerful I see a few things I wish were better:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New Markup&lt;/strong&gt;
Grid systems require the introduction of new markup into the HTML (adding &amp;#8216;grid-1&amp;#8217;, &amp;#8216;grid-2&amp;#8217;, &amp;#8216;grid-3&amp;#8217;, etc. to divs, etc.). This is
terrible HTML to inject because it is non-semantic (adds no meaning). A workaround is to switch to using smarter stylesheets with &lt;a href="http://sass-lang.com/"&gt;SASS&lt;/a&gt; and
&lt;a href="http://compass-style.org/"&gt;Compass&lt;/a&gt;, however for many projects this isn&amp;#8217;t an option.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Annoying Layouts&lt;/strong&gt;
Grid systems rely on having &amp;#8216;gutters&amp;#8217; between elements. Unfortunately this can make integrating with non grid system elements a pain. One solution is to switch to using a more precise grid system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Commitment Issues&lt;/strong&gt;
The last criticism of grid systems pertains more to design decisions. Once a designer (or developer) starts using grid systems they get hooked. Just because the grid system can format a beautiful about page, does not mean it should be used within the core of an application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;
Although the above issues are serious, life is much better with grid systems. Use them, but use them carefully.&lt;/p&gt;</description><link>http://ksylvest.com/post/1571238587</link><guid>http://ksylvest.com/post/1571238587</guid><pubDate>Sun, 14 Nov 2010 06:33:00 -0500</pubDate><category>css</category><category>html</category></item><item><title>Concept logo for online video portfolio site.</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_lblgtiknWU1qawpwfo1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Concept logo for online video portfolio site.&lt;/p&gt;</description><link>http://ksylvest.com/post/1520808775</link><guid>http://ksylvest.com/post/1520808775</guid><pubDate>Mon, 08 Nov 2010 20:44:06 -0500</pubDate></item><item><title>OptiPNG</title><description>&lt;p&gt;I recently needed a small project to test out &lt;a href="http://www.sveinbjorn.org/platypus"&gt;Platypus&lt;/a&gt;, a tool used to create simple native Mac applications. After only 30 minutes I managed to create a container for OptiPNG, a PNG compression library (download &lt;a href="http://storage.ksylvest.com/OptiPNG.dmg"&gt;DMG&lt;/a&gt; or &lt;a href="http://storage.ksylvest.com/OptiPNG.zip"&gt;Zip&lt;/a&gt;). The icon was found on &lt;a href="http://www.iconfinder.com/"&gt;Icon Finder&lt;/a&gt; and was designed by &lt;a href="http://graphicpeel.com/"&gt;Louise Harobe&lt;/a&gt;. The DMG was created using &lt;a href="http://www.araelium.com/dmgcanvas/"&gt;DMG Canvas&lt;/a&gt;.&lt;/p&gt;</description><link>http://ksylvest.com/post/1463612911</link><guid>http://ksylvest.com/post/1463612911</guid><pubDate>Tue, 02 Nov 2010 15:34:00 -0400</pubDate></item><item><title>New icon I’ve been playing around with.</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_lam47gnJKC1qawpwfo1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;New icon I’ve been playing around with.&lt;/p&gt;</description><link>http://ksylvest.com/post/1362043517</link><guid>http://ksylvest.com/post/1362043517</guid><pubDate>Wed, 20 Oct 2010 19:35:40 -0400</pubDate><category>icon</category><category>design</category></item><item><title>Best Idea Ever</title><description>&lt;p&gt;This morning I had an epiphany. Someone should design a sticker that will fade at a given rate. One could purchase a sticker that fades in two days to remember when to water the plants, two weeks to remember when the milk is bad, two months to remember when to replace a shaving razor head, etc. Once a product was replaced, a new sticker could be put on overtop. Better yet, the product could be licensed to companies that want customers to repurchase at given time intervals. Patent pending&amp;#8230;&lt;/p&gt;</description><link>http://ksylvest.com/post/1360434035</link><guid>http://ksylvest.com/post/1360434035</guid><pubDate>Wed, 20 Oct 2010 15:32:00 -0400</pubDate><category>idea</category></item><item><title>A skin for a JW Player.</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_laikm2OlSF1qawpwfo1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;A skin for a JW Player.&lt;/p&gt;</description><link>http://ksylvest.com/post/1347938450</link><guid>http://ksylvest.com/post/1347938450</guid><pubDate>Mon, 18 Oct 2010 21:39:38 -0400</pubDate></item><item><title>A sample ‘generic’ mac web site design for the...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_lafjkh371t1qawpwfo1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;A sample ‘generic’ mac web site design for the vector drawing application.&lt;/p&gt;</description><link>http://ksylvest.com/post/1334932997</link><guid>http://ksylvest.com/post/1334932997</guid><pubDate>Sun, 17 Oct 2010 06:24:16 -0400</pubDate></item><item><title>An icon in the works for yet another vector based drawing...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_lafjhgdXus1qawpwfo1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;An icon in the works for yet another vector based drawing application.&lt;/p&gt;</description><link>http://ksylvest.com/post/1334925672</link><guid>http://ksylvest.com/post/1334925672</guid><pubDate>Sun, 17 Oct 2010 06:22:28 -0400</pubDate></item><item><title>Visual Editors for Creating Web Content</title><description>&lt;p&gt;During my youth I fondly remember exploring the Internet and discovering how web sites were made. During the time I was happy to develop sites for both paying and free clients including: the  &lt;a href="http://www.yitis.ca/"&gt;Yukon Information Technology Industry Society&lt;/a&gt;, the  &lt;a href="http://yukonmarathon.com/"&gt;Yukon River Trail Marathon&lt;/a&gt;, the Canada Winter Games, and a small development company Sorrento Systems. My process was simple: I used Dreamweaver and Fireworks. Sure layouts often involved complex tables and hundreds of spliced images. At the time I didn&amp;#8217;t appreciate clean HTML and had no use for CSS.&lt;/p&gt;

&lt;p&gt;Flashing forward to present day I work as a software developer and code projects using modern what I consider modern web frameworks. I now write streamlined code. I fear using a table tag. My processes includes TextMate, Photoshop, Illustrator, Transmit, Versions and Kaleidoscope. Code is often tested, abstracted and maintainable.&lt;/p&gt;

&lt;p&gt;The question I ponder is if the process today is better than that which I stumbled on in my youth. Now I seem to spend countless hours designing in Photoshop or Illustrator, only to have to recreate the designs in HTML and CSS. I switch between tools for different steps of projects and will reiterate when required. I can no longer find a one-stop tool to do everything.&lt;/p&gt;

&lt;p&gt;Maybe web tools could use an equivalent to Apple Interface Builder that allows for a one-stop design place. Then again, maybe it is time I finally learn VIM and give up on all the tools.&lt;/p&gt;</description><link>http://ksylvest.com/post/1315668924</link><guid>http://ksylvest.com/post/1315668924</guid><pubDate>Thu, 14 Oct 2010 18:21:00 -0400</pubDate><category>web</category><category>rant</category></item><item><title>NSError Is NSAwful</title><description>&lt;p&gt;NSError is a contender for one of the worst features of the cocoa framework. Who thought these are these better than exceptions? Don&amp;#8217;t developers see that these are just fancy return codes? Here are some major problems:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Most developers don&amp;#8217;t handle errors. Exceptions add due pressure to not let things slip. With &amp;#8216;NSError&amp;#8217; it is so easy to pass NULL or never check the return.&lt;/li&gt;
&lt;li&gt;Mobile devices don&amp;#8217;t have any easy way to display errors. Sure desktop applications have &amp;#8216;NSApp&amp;#8217; that can present them, but what about iOS?&lt;/li&gt;
&lt;li&gt;Most documents don&amp;#8217;t detail what errors can occur. For example, the documentation for &amp;#8216;NSFetchedResultsController&amp;#8217; states &amp;#8216;contains an error object that describes the problem&amp;#8217;. Great.&lt;/li&gt;
&lt;/ol&gt;</description><link>http://ksylvest.com/post/1315623955</link><guid>http://ksylvest.com/post/1315623955</guid><pubDate>Thu, 14 Oct 2010 18:14:00 -0400</pubDate><category>cocoa</category><category>apple</category></item><item><title>The Switch to Rails 3</title><description>&lt;p&gt;Switching to Rails 3 for a recent project wasn&amp;#8217;t an easy decision. On an initial investigation, too many GEMS lacked support for the latest offerings of the community. However, the excellent new router and ability to integrate more easily with a variety of JavaScript frameworks made switching worth the costs (thus far). If you are interested in switching, be sure to &lt;a href="http://www.railsplugins.org/"&gt;&lt;a href="http://www.railsplugins.org/"&gt;http://www.railsplugins.org/&lt;/a&gt;&lt;/a&gt; and see if compatibility will be an issue for you. Otherwise, go for it!&lt;/p&gt;</description><link>http://ksylvest.com/post/703585545</link><guid>http://ksylvest.com/post/703585545</guid><pubDate>Wed, 16 Jun 2010 02:01:00 -0400</pubDate><category>ruby</category><category>rails</category></item><item><title>Why Can't I Switch into GIT?</title><description>&lt;p&gt;GIT out-trumps SVN in almost every way. The decentralize repository is better, the branching is better, and the social aspects (through &lt;a title="github" href="http://github.com/"&gt;github&lt;/a&gt;) are incredible. However, I can&amp;#8217;t make the transition because I am hooked on &lt;a href="http://versionsapp.com/"&gt;Versions&lt;/a&gt; and &lt;a href="http://www.kaleidoscopeapp.com/"&gt;Kaleidoscope&lt;/a&gt;. Having a great GUI to show changed files, and side by side comparisons is more important than having an amazing command line tool. Until someone writes a great GIT client (and no, none exist right now) I probably won&amp;#8217;t move my repositories. However, the ability to use SVN to commit to GIT Hub (&lt;a href="http://github.com/blog/626-announcing-svn-support"&gt;here&lt;/a&gt;) might sway me.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_l3pf01rWi21qaq4dn.png"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_l3pf0hIrl91qaq4dn.png"/&gt;&lt;/p&gt;</description><link>http://ksylvest.com/post/677021868</link><guid>http://ksylvest.com/post/677021868</guid><pubDate>Tue, 08 Jun 2010 12:30:00 -0400</pubDate><category>svn</category><category>git</category></item><item><title>Recurring Billing</title><description>&lt;p&gt;Most web app ideas fall under an advertisement model or a freemium model. In the later case, a great application to simplify recurring billing is &lt;a href="https://chargify.com/"&gt;Chargify&lt;/a&gt;. The software lets developers link to a payment form or integrate custom forms with the service through a RESTful API (or a &lt;a href="http://github.com/grasshopperlabs/chargify_api_ares"&gt;gem&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_l3jyc14H3W1qaq4dn.png"/&gt;&lt;/p&gt;
&lt;p&gt;Once integration is done, administrators can track and update subscribers through a gorgeous web interface.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_l3jyg8pO2r1qaq4dn.png"/&gt;&lt;/p&gt;
&lt;p&gt;Overall, the application is easy to use and offers many features over &lt;a href="http://www.activemerchant.org/"&gt;ActiveMerchant&lt;/a&gt;. The support team for the application is generally quick to respond and the pricing is reasonable. Looks like a big time saver.&lt;/p&gt;</description><link>http://ksylvest.com/post/667042901</link><guid>http://ksylvest.com/post/667042901</guid><pubDate>Sat, 05 Jun 2010 13:44:00 -0400</pubDate><category>ruby</category><category>rails</category></item></channel></rss>
