<?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 Cocoa 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>Setting Up Mac OS X Lion Development Environment</title><description>&lt;p&gt;&lt;code&gt;curl -L goo.gl/8wiSB | bash -s stable&lt;/code&gt;&lt;/p&gt;</description><link>http://ksylvest.com/post/21767290577</link><guid>http://ksylvest.com/post/21767290577</guid><pubDate>Wed, 25 Apr 2012 00:26:47 -0400</pubDate></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 iPhone and Mac developer for a few years now and I love many aspects of Apple&amp;#8217;s platforms. The interface design software is incredible, programs run fast even on mobile devices, and the the code debugging tools are great.&lt;/p&gt;
&lt;p&gt;However, with experience comes bitterness. Perhaps my undoing is that I have also been writing Ruby (on Rails) code for about the same amount of time. 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 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 &amp;#8216;cooled off&amp;#8217; 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;Ruby:&lt;/p&gt;
&lt;script src="https://gist.github.com/813885.js?file=gistfile1.txt"&gt;&lt;/script&gt;&lt;p&gt;Objective-C:&lt;/p&gt;
&lt;script src="https://gist.github.com/813884.js?file=Sample.m"&gt;&lt;/script&gt;&lt;p&gt;I feel like the above code should explain where my frustration stems from. Having lots of code is a liability. It is difficult to read, difficult to troubleshoot, and easy to do  wrong. It seems impossible to practice Objective-C programming and follow the DRY (don&amp;#8217;t repeat yourself) paradigm.&lt;/p&gt;
&lt;p&gt;The second major problem with Apple development is that the framework designers went in with bad 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 incorrect. 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;Rails:&lt;/p&gt;
&lt;script src="https://gist.github.com/813883.js?file=Sample.rb"&gt;&lt;/script&gt;&lt;p&gt;Cocoa:&lt;/p&gt;
&lt;script src="https://gist.github.com/813882.js?file=Sample.m"&gt;&lt;/script&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 sanity. 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;Although you probably think that I 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 by consumers. I only hope that someone in Cupertino is still thinking about the developers.&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>cocoa</category><category>development</category><category>rails</category><category>ruby</category><category>apple</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 currently 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 number of flaws (this discussion targets the &lt;a href="http://960.gs/"&gt;960 Grid System&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New Markup&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Grid systems require the introduction of new markup into the HTML (adding &amp;#8216;grid-2&amp;#8217; to class variables, etc.). This is especially bad HTML to inject because it is non-semantic (adds no meaning). A possible 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;&lt;/p&gt;
&lt;p&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;a href="http://blueprintcss.org/"&gt;Blueprint CSS&lt;/a&gt; offers more granularity and fixes some of the gutter issues).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Commitment Issues&lt;/strong&gt;&lt;/p&gt;
&lt;p&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;&lt;/p&gt;
&lt;p&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:06 -0500</pubDate><category>css</category><category>html</category></item><item><title>A disabled plan for a new web application.</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_lbv9xkIMix1qawpwfo1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;A disabled plan for a new web application.&lt;/p&gt;</description><link>http://ksylvest.com/post/1570427099</link><guid>http://ksylvest.com/post/1570427099</guid><pubDate>Sun, 14 Nov 2010 03:51:19 -0500</pubDate></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>Updated a header and navigation bar for a site being worked on.</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_lba16jcwER1qawpwfo1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Updated a header and navigation bar for a site being worked on.&lt;/p&gt;</description><link>http://ksylvest.com/post/1464526517</link><guid>http://ksylvest.com/post/1464526517</guid><pubDate>Tue, 02 Nov 2010 17:32:43 -0400</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. For example, 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;I remember my youth. At the time, I managed to &amp;#8220;sign contracts&amp;#8221; for creating sites for the Yukon Information Technology Industry Society (&lt;a href="http://www.yitis.ca/"&gt;&lt;a href="http://www.yitis.ca/"&gt;http://www.yitis.ca/&lt;/a&gt;&lt;/a&gt;), the Yukon River Trail Marathon (&lt;a href="http://yukonmarathon.com/"&gt;&lt;a href="http://yukonmarathon.com/"&gt;http://yukonmarathon.com/&lt;/a&gt;&lt;/a&gt;), the Canada Winter Games and a small development company Sorrento Systems. I can&amp;#8217;t recall which of these contracts paid.&lt;/p&gt;
&lt;p&gt;My process was simple: I used Dreamweaver and Fireworks. Layouts involved complex tables and hundreds of spliced images. I didn&amp;#8217;t understand HTML and had no use for CSS.&lt;/p&gt;
&lt;p&gt;Flash forward to present day. I work as a software developer and code projects using modern web frameworks.&lt;/p&gt;
&lt;p&gt;I now write streamlined code. I fear using a table tag. My processes includes TextMate, CSSEdit, Photoshop, Illustrator, Transmit, Versions and Kaleidoscope. Code is well abstracted and maintainable.&lt;/p&gt;
&lt;p&gt;The question I ponder is if I am any faster today than I was in my youth.&lt;/p&gt;
&lt;p&gt;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. However, I can no longer find a one-stop tool to do everything.&lt;/p&gt;
&lt;p&gt;Web tools could use an equivalent to Apple Interface Builder that allows for a one-stop design place. &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:33 -0400</pubDate><category>web</category><category>rant</category></item><item><title>NSError Is NSAwful</title><description>&lt;p&gt;Is it just me, or is NSError 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 mobile users?&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:13 -0400</pubDate><category>cocoa</category><category>apple</category></item><item><title>Why Isn't Apple DRY?</title><description>&lt;p&gt;After looking through some of the sample applications and templates generated from XCode (specifically for Core Data), I am a bit confused why the Apple engineers insist on repeating themselves. For example:&lt;/p&gt;
&lt;script src="http://gist.github.com/618729.js?file=gistfile1.m"&gt;&lt;/script&gt;&lt;p&gt;Is better written as:&lt;/p&gt;
&lt;p&gt;Just a minor complaint.&lt;/p&gt;
&lt;script src="http://gist.github.com/618730.js?file=gistfile1.m"&gt;&lt;/script&gt;</description><link>http://ksylvest.com/post/1279247436</link><guid>http://ksylvest.com/post/1279247436</guid><pubDate>Sat, 09 Oct 2010 19:44:22 -0400</pubDate></item><item><title>Rogers is Terrible</title><description>&lt;p&gt;I am currently (but not for long) a customer of Rogers. They have provided my high speed cable for the past year, and in that time frame I have had 2 outages (for over a week), terrible performance and frequent disconnects. I often get speeds around 40&amp;#160;kbps when using their online speed test tool.&lt;/p&gt;
&lt;p&gt;Recently, I called in to a local store to have a modem replaced that was a few days out of warranty. The representative told me that the exchange wouldn&amp;#8217;t be a problem (I informed him of the warranty issue on the phone) and to come in the next day.&lt;/p&gt;
&lt;p&gt;After commuting for 20 minutes, I was forced to wait in line for over 30 minutes. When I finally spoke with a customer representative, they told me that the modem was out of warranty. Despite explaining my previous call, the representative insisted they could not help.&lt;/p&gt;
&lt;p&gt;I highly recommend avoiding Rogers. Although many of the staff members are friendly, the internal policy and limited support abilities make it an awful company. It appears to be a classic example of a company that refuses to empower its staff.&lt;/p&gt;</description><link>http://ksylvest.com/post/1000809525</link><guid>http://ksylvest.com/post/1000809525</guid><pubDate>Mon, 23 Aug 2010 21:07:00 -0400</pubDate><category>rant</category></item><item><title>Performance Differences in Rails 3 and Rails 2</title><description>&lt;p&gt;After upgrading an application to Rails 3 everything seemed slow. Requests were taking a few seconds - even when connected to the local development machine. To verify, I created identical demo Rails 2.3.8 and Rails 3.0.0 applications for benchmarking (found &lt;a href="http://github.com/ksylvest/performance"&gt;here&lt;/a&gt;). To run the tests, first install RVM by following the instructions found &lt;a href="http://rvm.beginrescueend.com/"&gt;here&lt;/a&gt;. Then feel free to experiment switching between Ruby 1.8.7 and 1.9.2 (or whatever Ruby version you have on hand).&lt;/p&gt;</description><link>http://ksylvest.com/post/737559220</link><guid>http://ksylvest.com/post/737559220</guid><pubDate>Sat, 26 Jun 2010 03:24:37 -0400</pubDate></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></channel></rss>

