<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>One Lazy Programmer</title>
	<atom:link href="http://www.infusionsofgrandeur.com/assets/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.infusionsofgrandeur.com/assets/blog</link>
	<description>Ramblings from an Average Joe Software Developer</description>
	<lastBuildDate>Fri, 02 Sep 2011 10:26:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Building Better iPad Tables</title>
		<link>http://www.infusionsofgrandeur.com/assets/blog/?p=94</link>
		<comments>http://www.infusionsofgrandeur.com/assets/blog/?p=94#comments</comments>
		<pubDate>Fri, 02 Sep 2011 10:26:02 +0000</pubDate>
		<dc:creator>EricC</dc:creator>
				<category><![CDATA[Giftory]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Mac OS X]]></category>

		<guid isPermaLink="false">http://www.infusionsofgrandeur.com/assets/blog/?p=94</guid>
		<description><![CDATA[When Cocoa Touch first debuted, it only applied to tiny little handheld devices without much screen real estate to work with. As such, it made sense that the multi-column tableviews present in Mac OS X&#8217;s flavor of Cocoa were replaced in Cocoa Touch with a single column version. But then came the iPad. The iPad [...]]]></description>
			<content:encoded><![CDATA[<p>When Cocoa Touch first debuted, it only applied to tiny little handheld devices without much screen real estate to work with. As such, it made sense that the multi-column tableviews present in Mac OS X&#8217;s flavor of Cocoa were replaced in Cocoa Touch with a single column version.</p>
<p>But then came the iPad.</p>
<p>The iPad uses Cocoa Touch, but it has much more screen real estate to work with than an iPhone or iPod Touch. The iPad is fully capable of supporting a table UI that has multiple columns. And indeed the view-based architecture supports the ability to customize table cells to your heart&#8217;s content, even on an iPhone.</p>
<p>Nevertheless, it doesn&#8217;t seem particularly easy to approximate the UI of a data-driven desktop app on the iPad, as there doesn&#8217;t seem to be any method for more complex table layouts on the iPad.</p>
<p>But that&#8217;s exactly what I need in writing <em>Giftory for iPad</em>.</p>
<p>So I wrote it.</p>
<p>And now I&#8217;ve released it for anybody else to use.</p>
<p>The primary UI for Giftory on the desktop is a display of gifts, including, for each listed gift, its name, the store it was bought from, its price, the names of its giver and receiver, its hiding place, and a couple of other relevant bits of info:</p>
<div id="attachment_96" class="wp-caption aligncenter" style="width: 466px"><a href="http://www.infusionsofgrandeur.com/assets/blog/wp-content/uploads/2011/09/GiftoryTableView1.png"><img class="size-full wp-image-96                " src="http://www.infusionsofgrandeur.com/assets/blog/wp-content/uploads/2011/09/GiftoryTableView1.png" alt="Mac OS X Giftory Table View" width="456" height="50" /></a><p class="wp-caption-text">Table View for desktop version of Giftory</p></div>
<p>This UI utilizes text fields, popup boxes, combo boxes and check boxes to achieve its functionality.</p>
<p>Cocoa Touch table view cells are generally only fit to embed labels to customize the cell to display several pieces of information. Some table cells have been implemented with a label to provide the name of a data field, and an editable area where the user can enter a value for the field. But editing multiple data element values always requires utilizing another screen.</p>
<p>None of this is suitable for editing multiple data elements for a given data object displayed on a single table row.</p>
<p>I created &#8220;Reusable Dynamic Table Cell Classes&#8221; to solve this problem.</p>
<p>These classes provide a subclass of UITableViewCell that utilizes objects built to simulate the functionality of pop up boxes, combo boxes and check boxes, as well as standard text fields and buttons. Using these classes developers can programmatically define a row UI for their tables, associate the row with a data object, such as a dictionary or managed object, and manage the data through the generated interface:</p>
<div id="attachment_100" class="wp-caption aligncenter" style="width: 440px"><a href="http://www.infusionsofgrandeur.com/assets/blog/wp-content/uploads/2011/09/GiftoryiPadTableView1.png"><img class="size-full wp-image-100   " src="http://www.infusionsofgrandeur.com/assets/blog/wp-content/uploads/2011/09/GiftoryiPadTableView1.png" alt="iPad table view" width="430" height="77" /></a><p class="wp-caption-text">Customized iPad table row using Reusable Dynamic Table Cell Classes</p></div>
<p>The classes aren&#8217;t currently suitable for situations in which the row itself needs to be selected, but they are ideal for situations in which the table rows simply display various elements of a data object, and those elements are editable.</p>
<p>In the next post I will go into detail about the design of the data cell classes and how to use them in code.</p>
<p>The open source project can be found at: http://github.com/ecrichlow/iPad-Dynamic-Table-Cells</p>
]]></content:encoded>
			<wfw:commentRss>http://www.infusionsofgrandeur.com/assets/blog/?feed=rss2&#038;p=94</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>In Search Of: The Next Platform</title>
		<link>http://www.infusionsofgrandeur.com/assets/blog/?p=90</link>
		<comments>http://www.infusionsofgrandeur.com/assets/blog/?p=90#comments</comments>
		<pubDate>Fri, 05 Aug 2011 20:30:38 +0000</pubDate>
		<dc:creator>EricC</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://www.infusionsofgrandeur.com/assets/blog/?p=90</guid>
		<description><![CDATA[For many years I&#8217;ve thought that the surest route to fame and fortune in the modern world of indie software development was to get ahead of the curve and exploit a new, emerging market before it really caught fire enough to get the attention of the big boys with multi-million dollar R&#38;D budgets. That meant [...]]]></description>
			<content:encoded><![CDATA[<p>For many years I&#8217;ve thought that the surest route to fame and fortune in the modern world of indie software development was to get ahead of the curve and exploit a new, emerging market before it really caught fire enough to get the attention of the big boys with multi-million dollar R&amp;D budgets. That meant predicting what the next big unheralded  platform would be.</p>
<p>At one time I thought that platform was going to be <a title="An IFE system that I developed games for" href="http://www.allbusiness.com/technology/software-services-applications-internet/6420382-1.html" target="_blank">In-Flight Entertainment Systems</a>, those little screens in the backs of some airplane seats that allowed you to do everything from watch movies to play games to search for restaurants in your destination city. Unfortunately, that endeavor failed to take off, no pun intended, to any significant extent.</p>
<p>Next I thought that games, especially casual games, would be the big thing on Linux, which was supposed to take off as a mainstream desktop OS. But then <a title="The consistent failure of Linux to grab even 1% of the desktop OS market" href="http://royal.pingdom.com/2010/08/10/failure-of-linux-to-grab-1-percent-of-desktop-os-market/" target="_blank">Linux never managed to get that desktop foothold</a>. And regardless, <a title="Wikipedia Linux gaming history" href="http://en.wikipedia.org/wiki/Linux_gaming#History" target="_blank">others had started placing bets on that market</a> much sooner than I ever thought they would anyway.</p>
<p>I&#8217;m ashamed to admit that the two new platforms that really DID take off, and which I was perfectly positioned to take early advantage of as a long-time Mac developer, I completely missed the early adopter boat on. When the iPhone was opened up to third party development, I thought, &#8220;so what?&#8221; I never imagined that it would become the Next Big Thing and that simple <a title="iFart sales" href="http://www.residualsandroyalties.com/2010/05/31/how-ifart’s-earnings-set-the-bar-for-iphone-app-sales/" target="_blank">apps that you could write in a week could make a million dollars</a>. So you would think that I would have learned my lesson in betting against Appl&#8230; Steve Jobs. Yet, when the iPad was announced, my response was, &#8220;niche product that will never amount to much.&#8221; <a title="100,000 iPad Apps" href="http://www.associatedcontent.com/article/8248617/apple_ipad_goes_past_100000_apps_milestone.html" target="_blank">Oops</a>.</p>
<p>So now I know never to bet against Apple/Steve again. And this means that I&#8217;m now preparing for the possibility that the next big platform is on the horizon.</p>
<p>Rumors are again circulating that Apple is preparing to release <a title="Apple HDTV" href="http://www.usatoday.com/tech/news/2011-07-15-apple-hdtv-cable-customers_n.htm" target="_blank">its own line of HDTVs</a>. <strong>IF</strong> this happens and <strong>IF</strong> such a device can run third party apps like the iPod/iPhone and iPad can, then maybe this is the Next Big Thing that I&#8217;ve been waiting years for.</p>
<p>Guess it&#8217;s time to start figuring out what kind of television apps I can write.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.infusionsofgrandeur.com/assets/blog/?feed=rss2&#038;p=90</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apple Just Killed My Best Feature</title>
		<link>http://www.infusionsofgrandeur.com/assets/blog/?p=84</link>
		<comments>http://www.infusionsofgrandeur.com/assets/blog/?p=84#comments</comments>
		<pubDate>Sun, 26 Jun 2011 20:40:28 +0000</pubDate>
		<dc:creator>EricC</dc:creator>
				<category><![CDATA[Giftory]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iCloud]]></category>
		<category><![CDATA[iDisk]]></category>

		<guid isPermaLink="false">http://www.infusionsofgrandeur.com/assets/blog/?p=84</guid>
		<description><![CDATA[I don&#8217;t expect anyone to shed a tear for me. It happens all the time. Apple comes out with a new version of Max OS X or iOS, and they add something that copies (and often improves) a feature previously only available through 3rd party software. In my case, Apple isn&#8217;t copying anything, and they&#8217;re [...]]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t expect anyone to shed a tear for me. It happens all the time. Apple comes out with a new version of Max OS X or iOS, and they add something that copies (and often improves) a feature previously only available through 3rd party software.</p>
<p>In my case, Apple isn&#8217;t copying anything, and they&#8217;re not adding anything that hurts me. Nor are they making a change to either of their OSes that impacts me.</p>
<p>No, Apple is <a href="http://www.macworld.com/article/160728/2011/06/apple_mobile_me_transition_faq.html" target="_blank">discontinuing iDisk</a>. And with that, ends Giftory&#8217;s ability to let users post a Wish List to their iDisk Public Folder and let other Giftory and GiftoryWLR (iOS) users read it from anywhere else in the world.</p>
<p>Hopefully something in <a href="http://www.apple.com/icloud/" target="_blank">iCloud</a> will turn out to be a useful replacement. My fingers are crossed.</p>
<p>Maybe this will be the impetus for me to come up with a shared Wish List solution that will be compatible across the Mac AND Windows versions of Giftory, the iOS Giftory Wish List Reader, AND the upcoming iPad version of Giftory. Guess I&#8217;ll have to look at this as an &#8220;opportunity&#8221;. :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.infusionsofgrandeur.com/assets/blog/?feed=rss2&#038;p=84</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>If an Application is a painting, do you, as a programmer, want to paint a picture on a blank canvas, or assemble a picture from a jigsaw puzzle?</title>
		<link>http://www.infusionsofgrandeur.com/assets/blog/?p=77</link>
		<comments>http://www.infusionsofgrandeur.com/assets/blog/?p=77#comments</comments>
		<pubDate>Thu, 02 Jun 2011 08:39:42 +0000</pubDate>
		<dc:creator>EricC</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.infusionsofgrandeur.com/assets/blog/?p=77</guid>
		<description><![CDATA[As the years go by in this profession, more and more I see an expectation that professional software developers will utilize any and every framework or library available to accomplish various programming tasks. The truth is, there isn&#8217;t very much code to write that hasn&#8217;t already been written a hundred times over. Every general programming [...]]]></description>
			<content:encoded><![CDATA[<p>As the years go by in this profession, more and more I see an expectation that professional software developers will utilize any and every framework or library available to accomplish various programming tasks.</p>
<p>The truth is, there isn&#8217;t very much code to write that hasn&#8217;t already been written a hundred times over. Every general programming &#8220;problem&#8221; has been solved, and there&#8217;s often a generally accepted &#8220;best&#8221; method to solve any such problem.</p>
<p>However, if you&#8217;re in this business because you enjoy the &#8220;art&#8221; of developing software, then you probably enjoy developing your own solutions to programming problems, even if canned solutions to those problems already exist, and even if the solutions you come up with aren&#8217;t necessarily as elegant or optimized as the solutions that already exist.</p>
<p>In other words, lots of us <strong>like reinventing the wheel</strong>. It&#8217;s part of what we enjoy about what we do.</p>
<p>When we&#8217;re working on our own independent projects, this isn&#8217;t an issue. We&#8217;re free to do as we please.</p>
<p>But when we&#8217;re taking a paycheck from an employer or charging a client for our time, their ultimate goal is to get the desired finished product, as quickly and cheaply as possible. Our desire to spend extra time developing our own solutions to problems is usually incompatible with their goal.</p>
<p>But there has to be a balance.</p>
<p>Yes, it may be unreasonable to decide you want to write your own xml parser on your employer&#8217;s/client&#8217;s dime when so many other canned solutions already exist.</p>
<p>However, keeping you engaged, challenged and interested in the project and your work is also a very important factor, for <strong>both</strong> parties.</p>
<p>So if someone suggests that you use Framework X to make web service calls, library C to process the returned results and open source project N to display the results in a nice, pre-fabricated UI, if that&#8217;s the majority of the application&#8217;s functionality, then they&#8217;re asking you to become a puzzle assembler, a code monkey, a paint-by-numbers &#8220;resource&#8221; who likely won&#8217;t take any joy out of the work you&#8217;re doing.</p>
<p>Find the balance. Determine which wheels would be unreasonable for you to reinvent, which wheels you will learn the most from reinventing and which wheels you can bring something new to the table for.</p>
<p>Then have at it!</p>
<p>But most of all, don&#8217;t get trapped assembling coding jigsaw puzzles for the rest of your career, which likely won&#8217;t be very long if that&#8217;s all you&#8217;re stuck doing.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.infusionsofgrandeur.com/assets/blog/?feed=rss2&#038;p=77</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fending off Attacks on Average Joe Software Developers</title>
		<link>http://www.infusionsofgrandeur.com/assets/blog/?p=70</link>
		<comments>http://www.infusionsofgrandeur.com/assets/blog/?p=70#comments</comments>
		<pubDate>Thu, 14 Apr 2011 20:57:22 +0000</pubDate>
		<dc:creator>EricC</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.infusionsofgrandeur.com/assets/blog/?p=70</guid>
		<description><![CDATA[It was a year ago this week that I started this little venture. Coincidentally, just yesterday I took part in a debate that typified the whole reason I decided to start this blog in the first place. Be it specific to Cocoa development or more generally applied to the profession of software development, there&#8217;s a [...]]]></description>
			<content:encoded><![CDATA[<p>It was a year ago this week that I started this little venture.</p>
<p>Coincidentally, just yesterday I took part in a debate that typified the whole reason I decided to start this blog in the first place.</p>
<p>Be it specific to Cocoa development or more generally applied to the profession of software development, there&#8217;s a segment of our profession that only respects those with the utmost of programming skill, or at least those who strive to attain such.</p>
<p>In no field is <strong>EVERYONE</strong> &#8220;elite&#8221;. By definition that would be impossible. There will always be those who are &#8220;average&#8221;. In fact, by definition, the <strong>MAJORITY</strong> of people in any field will be &#8220;average&#8221;. But average doesn&#8217;t mean &#8220;mediocre&#8221;, (I just looked it up to be sure.)</p>
<p>A lot, if not most, of the software out there in the wild was developed and is maintained and extended by &#8220;average&#8221; programmers. These programmers are perfectly capable and competent. And they should be respected, even if they aren&#8217;t always striving to be elite, to learn all of the ins and outs of the SDK/platform/language that they&#8217;re using; even if they do things in non-standard ways; even if they buck platform conventions by trying to develop software on one platform using conventions and design patterns that they brought over from another platform.</p>
<p>The goal, for most programmers, is to produce a finished, working application.</p>
<p>Users of that application couldn&#8217;t care less how it was developed, if it &#8220;just works&#8221;.</p>
<p>There are programmers out there, hmmm… what did I refer to them as a year ago? Oh, yeah, &#8220;<a href="http://www.infusionsofgrandeur.com/assets/blog/?p=12" target="_blank">Hotshot Superstar Software Engineers</a>&#8220;… who desire to have the most pristine, optimized, streamlined code that always uses the most appropriate aspect/feature of the language/SDK in its implementation.</p>
<p>Good for them. More power to them. I don&#8217;t begrudge them anything.</p>
<p>But personally, I would <strong>MUCH</strong> rather release a program that does something unique and is adored by users, but was implemented with code that was ugly, unoptimized and inefficient, than to write the most beautiful, optimized, streamlined, efficient routine to implement a feature 20% faster than anyone else ever has, and have users go, &#8220;meh, there&#8217;s a dozen other apps out there that do the same thing.&#8221;</p>
<p>So while Hotshot Superstar Software Engineers continue to degrade and belittle &#8220;average&#8221; programmers, I&#8217;ll continue to stand up for them, and proudly declare myself as a member of that group.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.infusionsofgrandeur.com/assets/blog/?feed=rss2&#038;p=70</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>More sleeping with the enemy. Next up: Android</title>
		<link>http://www.infusionsofgrandeur.com/assets/blog/?p=63</link>
		<comments>http://www.infusionsofgrandeur.com/assets/blog/?p=63#comments</comments>
		<pubDate>Sat, 12 Mar 2011 08:02:12 +0000</pubDate>
		<dc:creator>EricC</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Interface Builder]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[XCode]]></category>

		<guid isPermaLink="false">http://www.infusionsofgrandeur.com/assets/blog/?p=63</guid>
		<description><![CDATA[As it&#8217;s now all about the money, it makes sense to look into developing for the only other viable modern smartphone OS, so I got an e-book on Android development and set out to port two of my simpler iPhone apps to it. Much like the iPhone originals, rewriting them for Android didn&#8217;t take long, [...]]]></description>
			<content:encoded><![CDATA[<p>As it&#8217;s now all about the money, it makes sense to look into developing for the only other viable modern smartphone OS, so I got an e-book on Android development and set out to port two of my simpler iPhone apps to it.</p>
<p>Much like the iPhone originals, rewriting them for Android didn&#8217;t take long, and gave me a good chance to assess Android development and compare it to the experience of iPhone development.</p>
<p>What did I find?</p>
<p>Well, first off, I almost hate to say this, because I know that one gets used to what they know, and something unfamiliar can often be perceived as frustrating, poorly designed, garbage, etc…</p>
<p>That said… I really, really am not a fan of Eclipse, which is the IDE that the official Android development pages tout as the de-fact Android development IDE.</p>
<p>When the T-Mobile G1 first came out, we dabbled a bit in Android development.</p>
<p>It was hard to get past the fact that there was no visual layout tool for Android that was even in the same ballpark as Interface Builder for iPhone.</p>
<p>It&#8217;s been a couple of years. I figured that they MUST have improved the layout tool by now.</p>
<p>Ummm. <strong>NO</strong>.</p>
<p>Sorry, but it&#8217;s absolutely terrible.</p>
<p>On top of that, I think the Android emulator leaves a lot to be desired compared to the iPhone/iPad simulator.</p>
<p>But I could live with those. I actually, at times, found myself enjoying Android development.</p>
<p>Except for one little thing.</p>
<p>Almost every time I wanted to figure out how to do something with my UI, and I searched online to find the answer, most, if not all of the answers started with something to the effect of: &#8220;in the layout xml, you…&#8221;</p>
<p>I&#8217;m not a fan of Java&#8217;s layouts. I&#8217;m also not a fan of performing tasks in xml. Lacking a good Interface Builder equivalent, I do most of my UI creation in code. Therefore I need answers for how to accomplish things <strong>IN CODE</strong>. I&#8217;m amazed at how hard it can be to find such answers for Android.</p>
<p>But the real problem is, it&#8217;s not just that the answers are hard to find, sometimes they don&#8217;t exist. Android is a very nice mobile OS, with some very nice features. However, the SDK seems kind of half-baked, because a lot of the features aren&#8217;t available programmatically, or at least are unnecessarily hard to get to programmatically.</p>
<p>Here&#8217;s one example:</p>
<p>I have a button. I have two graphics files for that button. One for the up state and one for the down state.</p>
<p>I expect that for any SDK for any OS that I&#8217;m using, I can find a call such that I can set those up and down images in a couple of lines of code like this:</p>
<p>&nbsp;</p>
<p>setImageForState (img, BUTTON_STATE_UP);</p>
<p>setImageForState (img, BUTTON_STATE_DOWN);</p>
<p>&nbsp;</p>
<p>Done.</p>
<p>And sure enough, on the iPhone, we have:</p>
<p>&nbsp;</p>
<p><em>[button setImage:upImage for State:UIControlStateNormal];</em></p>
<p><em>[button setImage:downImage for State:UIControlStateSelected];</em></p>
<p>&nbsp;</p>
<p>So how do we accomplish the same thing in an Android app?</p>
<p>Would you believe:</p>
<p>&nbsp;</p>
<p><em>button.setOnTouchListener(new View.OnTouchListener() {</em></p>
<p><em> public boolean onTouch(View v, MotionEvent event) {</em></p>
<p><em> if(event.getAction()==MotionEvent.ACTION_DOWN)</em></p>
<p><em> button.setImageResource(R.drawable.buttonpressed);</em></p>
<p><em> if(event.getAction()==MotionEvent.ACTION_UP)</em></p>
<p><em> button.setImageResource(R.drawable.buttonup);</em></p>
<p><em> return false;</em></p>
<p><em> }</em></p>
<p><em>});</em></p>
<p>&nbsp;</p>
<p>No, I&#8217;m not kidding, and it took a while to find this solution, most answers just said, &#8220;in the layout xml…&#8221;</p>
<p>Sorry, but that&#8217;s ridiculous.</p>
<p>So the bottom line is, Android is a perfectly fine mobile operating system, and it may one day be a pleasure to write for if they actually develop a decent layout design tool for it and give developers simple programmatic access to all of the functionality available through layout xml.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.infusionsofgrandeur.com/assets/blog/?feed=rss2&#038;p=63</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Giftory for Windows Version 1.0 Post-mortem</title>
		<link>http://www.infusionsofgrandeur.com/assets/blog/?p=51</link>
		<comments>http://www.infusionsofgrandeur.com/assets/blog/?p=51#comments</comments>
		<pubDate>Mon, 06 Dec 2010 00:12:54 +0000</pubDate>
		<dc:creator>EricC</dc:creator>
				<category><![CDATA[Giftory]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.infusionsofgrandeur.com/assets/blog/?p=51</guid>
		<description><![CDATA[Now that the Windows version of Giftory sits as a Release Candidate, with its official release imminent, I want to take a few minutes to look back on the last 12 months&#8217; development experience with Windows, C# and .net 3.5. Right to the point: C# is a very decent programming language and .net is a [...]]]></description>
			<content:encoded><![CDATA[<p>Now that the Windows version of Giftory sits as a Release Candidate, with its official release imminent, I want to take a few minutes to look back on the last 12 months&#8217; development experience with Windows, C# and .net 3.5.</p>
<p>Right to the point: C# is a very decent programming language and .net is a very decent framework to develop with.</p>
<p>Entity Framework turned out to mostly be a pleasure to work with and greatly contributed to my being able to get this project done this year.</p>
<p>I was greatly surprised at how much less code the Windows version has needed vs. what I had to write for  the Mac version.</p>
<p>Years ago I inherited a Visual Basic 6 project. After working on it for a while, I thought, &#8220;this visual development stuff is nice for small projects like this PowerPoint add-in that I&#8217;m working on, but I wouldn&#8217;t want to try to use it to develop a full-fledged application.&#8221;</p>
<p>I was wrong.</p>
<p>Visual development works quite well for full-fledged applications.</p>
<p>For a person, like me, who hates Microsoft and everything they have to do with with such a passion, it&#8217;s surprisingly easy to give them the credit that they&#8217;re due for all of this.</p>
<p>But it isn&#8217;t ALL rosy in Windows Development World. There are still some great(er) things about developing on the Mac, in Cocoa.</p>
<p>Now, let me lay out in more detail the pros and cons I found for each.</p>
<p>This isn&#8217;t going to be a REAL post-mortem. Maybe I&#8217;ll do one of those later on.</p>
<p>The things that are better in developing on/for Mac OS X:</p>
<ul>
<li>Core Data has built-in undo/redo support. Entity Framework doesn&#8217;t. I wasn&#8217;t even gonna think about trying to implement this support manually on .net, so the Windows version doesn&#8217;t &#8220;do&#8221; undo/redo.</li>
<li>Table Views: When I first started developing in Cocoa, I wasn&#8217;t a fan of Apple&#8217;s implementation of tables. &#8220;I want to put value &#8216;a&#8217; in the table at position x,y. Why can&#8217;t I just do that?!?&#8221; But after getting used to the hows and whys of Cocoa table views, I&#8217;ve really come to appreciate them. It gets a little more complicated when you want to do special things, like putting popup boxes or other UI controls in a table cell, but it&#8217;s still pretty well supported. And, most importantly, binding Core Data values to table views works pretty well. Windows also has a pretty decent implementation of table views. And they certainly offer more customizability in their tables by way of many more events on their tables that can be intercepted. But greater flexibility isn&#8217;t always better. Multiple times I found myself having to experiment with which event was more appropriate to put code into for the given situation. And sometimes it seemed like, despite ALL of those events, there was something about each one that was problematic for what I was trying to do, or none of them had my objects in the needed state when they fired. Especially when it came to Entity Framework&#8217;s integration with tables, I spent a lot of time, more time than I should have had to, trying to get things to work right, mostly when it came to putting popup boxes or other UI controls in a table cell.</li>
<li>Sheets: Well-designed Mac apps just look better than well-designed Windows apps. One reason: sheets. If you&#8217;re going to have a modal dialog anyway, it looks a lot better if the &#8220;window&#8221; is attached to its parent window and just slides down out of the title bar than putting a whole new, floating, movable modal dialog window on the screen.</li>
<li>One has never needed to know much about databases to set up a Core Data model. Model your entities and their relationships, and Xcode/Core Data handles most of the setup. This may be similar to Entity Framework in Visual Studio 2010, but not so with Entity Framework in Visual Studio 2008. I don&#8217;t DO databases. I shouldn&#8217;t <strong>have</strong> to know much, if anything, about databases or how to set them up. But, to get Entity Framework working, I had to divert my development efforts for a month or so to learn about the various types of databases available on Windows, which one was best for my purposes, how to set it up, how to modify it after integrating it with Entity Framework, etc&#8230; That sucked.</li>
<li>Built-in UI controls make apps easier to develop, better looking and easier/more pleasant to use. There&#8217;s no built-in UI element in .net to denote ongoing processing in which you can&#8217;t map it to a percentage complete? Really?!? My app is contacting a server, making a request and waiting for/receiving a response. There&#8217;s no built-in UI control to let the user know this is all going on so they can sit tight without wondering whether or not anything&#8217;s happening or if the app has locked up? Would seem like a no-brainer to have in your toolbox.</li>
<li>Exceptions: try/catch blocks are ugly. Honestly, I hate seeing them in my code. I only put them in when absolutely necessary. Frankly, they should almost <strong>NEVER</strong> be absolutely necessary. It is perfectly acceptable to have a call return an error code if it fails (or populate an error object) instead of throwing an exception. Giftory for OS X doesn&#8217;t have a single try/catch block in the code. Giftory for Windows has several.</li>
<li>Packaging apps in OS X is a thing of beauty. Many (most?) apps don&#8217;t need to be anything other than a single executable file. Okay, as developers we know OS X apps are actually folders, but to users they appear to be a single file. Windows would do well to copy this. Having to have a folder &#8211; a folder that can be seen as such by users &#8211; with files that, if they accidentally move/delete them could ruin the whole app, openly available on the user&#8217;s system is just plain bad. Open the &#8220;Applications&#8221; folder on a Mac. You see a bunch of pretty application icons that you can double-click to launch. Open up the &#8220;Program Files&#8221; folder on a Windows box. You see a bunch of folders. Ugly. Just. Plain. Ugly.</li>
<li>Core Data was introduced in OS X version 10.4. If I want to use Core Data, all I have to know is that the user is running OS X 10.4 or later. Apple does a wonderful job of integrating technologies into the operating system and making it easy for developers to utilize technologies with a minimum amount of effort. Microsoft could learn a <strong>HUGE </strong>lesson from this. I just spent the last week+ trying to figure out how to deploy an app to end users that is written in .net 3.5, uses Entity Framework, and uses SQL Server Compact Edition. Thankfully, LOTS of other developers have had the same problems I did, so there were always answers to my various questions available online. Unfortunately, often the &#8220;answers&#8221; were more like suggestions for things that worked for one person but not for another. Nevertheless, utilizing and deploying technologies that are provided by the OS vendor <strong>should not be this difficult</strong>.</li>
</ul>
<p>The things that are better in developing on/for Windows:</p>
<ul>
<li>Sometimes when developing for OS X, you want to know when a certain &#8220;event&#8221; happens so that you can base an action off of it. You then search the documentation to see if said &#8220;event&#8221; calls a method in a delegate, or triggers a notification. Often it does, but sometimes it doesn&#8217;t. In .net, however, you can almost guarantee that your event is already defined in the framework and you can write code against it. Often, there&#8217;s two or three similar events that you can use to accomplish the same task. Yes, that may seem to contradict something I said earlier, and it can be unnecessary to have too many events, but it&#8217;s still better to have too many than to have an occasion where you need an event but it isn&#8217;t there.</li>
<li>Data passing between objects: Cocoa has something called an application delegate that I use as sort of a repository for global variables, values that might be needed by disparate parts of my application. I didn&#8217;t find that .net had a similar methodology, but, surprisingly, I found that I didn&#8217;t need it. Data passing between objects somehow seemed to be either much easier, or mostly unnecessary. I&#8217;m still not sure how that worked out, but it did.</li>
<li>Creating custom views/controls is a much more pleasant experience in .net than in Cocoa. That&#8217;s possibly due to the integration of the form designer into the code editor, something which the next release of Xcode will also have, but it doesn&#8217;t yet. So, in .net, no dealing with xib files and no init&#8217;ing new controller objects with those xibs.</li>
<li>Even though I think Cocoa&#8217;s usage of sheets is much better than .net&#8217;s usage of dialogs, creating and using dialogs in .net is much easier than creating and using sheets or child windows in Cocoa. The integration of parent windows with their child windows is fantastic.</li>
<li>Customizability: This should come as no surprise. Apple is known for &#8220;forcing&#8221; adherence to their way of doing things. Microsoft is known for giving huge amounts of flexibility in the way things can be done. .net offers a lot more ways to do things the way you want them or to make controls work the way you want them to.</li>
<li> I don&#8217;t know much about databases, and I don&#8217;t want to have to. But I do know a little, and that little bit of knowledge went a long way in dealing with Entity Framework. Querying in Entity Framework turned out to be quite a bit easier than fetching results with Core Data. With Entity Framework you can write a simple query. With Core Data you have to build components that you use to construct a fetch request.</li>
<li>To this day I don&#8217;t know what most of the options for data bindings mean in the Interface Builder data bindings section. Data binding in .net, on the other hand, is much simpler. Maybe Cocoa&#8217;s implementation has more flexibility and more power, but for what I was doing I generally didn&#8217;t need it. I could bind controls to Entity Framework entities or query results with a couple of  lines of very simple code.</li>
<li>As stated above, Giftory for Windows version 1.0 has most of the same features as Giftory for Mac OS X version 3.5, yet there&#8217;s a lot less code in the .net project than there is in the Cocoa project.</li>
</ul>
<p>I would note that I still spent my fair share of time lamenting that &#8220;I hate Windows&#8221; because of some thing or another that didn&#8217;t work the way I thought it should, whereas, in Cocoa, things usually worked the way I thought they should, even if I had to write more code to get to the finished product.</p>
<p>I guess this may not turn out to be my only Windows product in the long run, but I still think I can safely say that I enjoy working in Cocoa enough that a Cocoa version will always come first and always be my favorite.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.infusionsofgrandeur.com/assets/blog/?feed=rss2&#038;p=51</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shhh!!! Don&#8217;t tell anybody!</title>
		<link>http://www.infusionsofgrandeur.com/assets/blog/?p=48</link>
		<comments>http://www.infusionsofgrandeur.com/assets/blog/?p=48#comments</comments>
		<pubDate>Sun, 05 Dec 2010 22:06:32 +0000</pubDate>
		<dc:creator>EricC</dc:creator>
				<category><![CDATA[Giftory]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Mac OS X]]></category>

		<guid isPermaLink="false">http://www.infusionsofgrandeur.com/assets/blog/?p=48</guid>
		<description><![CDATA[Giftory 3.5 is out! But nobody knows yet. I started working on Giftory version&#8230; 4.0&#8230; I think&#8230; a year and a half ago. Didn&#8217;t quite get it done in time for Christmas 2009, so I shelved it and started working on Giftory for Windows. As the year started winding down, I devoted some time back [...]]]></description>
			<content:encoded><![CDATA[<p>Giftory 3.5 is out! But nobody knows yet.</p>
<div>I started working on Giftory version&#8230; 4.0&#8230; I think&#8230; a year and a half ago. Didn&#8217;t quite get it done in time for Christmas 2009, so I shelved it and started working on Giftory for Windows.</div>
<p>As the year started winding down, I devoted some time back to the Mac version, trimmed down the new feature set, and came up with version 3.5.</p>
<p>Finally got that version done and tested a couple of weeks back.</p>
<p>Then I had to sidetrack things again to get a version built to put on Apple&#8217;s Mac App Store.</p>
<p>Finally, last week, I got it packaged up and put on the website.</p>
<p>So it&#8217;s been publicly available for a week now&#8230; but I haven&#8217;t &#8220;officially&#8221; announced it yet, because that&#8217;s waiting for the Windows version to be ready to be announced.</p>
<p>But if all goes well, everything will happen in the next couple of days.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.infusionsofgrandeur.com/assets/blog/?feed=rss2&#038;p=48</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wow, some people really, REALLY like Microsoft and Windows!</title>
		<link>http://www.infusionsofgrandeur.com/assets/blog/?p=38</link>
		<comments>http://www.infusionsofgrandeur.com/assets/blog/?p=38#comments</comments>
		<pubDate>Sun, 29 Aug 2010 05:33:29 +0000</pubDate>
		<dc:creator>EricC</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.infusionsofgrandeur.com/assets/blog/?p=38</guid>
		<description><![CDATA[So, over the last two months I changed jobs. Now I work for a shop that does consulting… primarily Windows-based consulting. I always knew that there were people out there who really did like Microsoft and their technologies. But W-O-W! Being here, I&#8217;m absolutely amazed at the degree of Microsoft adoration! I&#8217;ll admit that it [...]]]></description>
			<content:encoded><![CDATA[<p>So, over the last two months I changed jobs. Now I work for a shop that does consulting… primarily Windows-based consulting.</p>
<p>I always knew that there were people out there who really did like Microsoft and their technologies. But <strong>W-O-W!</strong> Being here, I&#8217;m absolutely amazed at the degree of Microsoft adoration! I&#8217;ll admit that it does turn my stomach just a bit, but I have come to find that, as JavaEE, Apple, Google, Open Office, Facebook and others have become more relevant, Microsoft has become less relevant, and thus I don&#8217;t thoroughly despise them as much as I used to.</p>
<p>Besides, this is a really good group of people that I&#8217;m working with now. And even better, I get to be an insurgent having a Macbook Pro on the company network and making iOS development contribute more and more to the company bottom line.</p>
<p>Perhaps my selling out is nearing a point of no return&#8230;</p>
<p>Nah.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.infusionsofgrandeur.com/assets/blog/?feed=rss2&#038;p=38</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developing applications rapidly: Cocoa vs. .net</title>
		<link>http://www.infusionsofgrandeur.com/assets/blog/?p=34</link>
		<comments>http://www.infusionsofgrandeur.com/assets/blog/?p=34#comments</comments>
		<pubDate>Sun, 29 Aug 2010 05:28:05 +0000</pubDate>
		<dc:creator>EricC</dc:creator>
				<category><![CDATA[Giftory]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.infusionsofgrandeur.com/assets/blog/?p=34</guid>
		<description><![CDATA[So I&#8217;ve spent some time now working on Giftory for Windows. Not nearly as much time as I should have… but some time nevertheless. I must admit, C# is a pretty nice language and .net is a pretty nice framework. It helps that I did some work in VB6 a few years back, so the [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve spent some time now working on Giftory for Windows. Not nearly as much time as I should have… but some time nevertheless.</p>
<p>I must admit, C# is a pretty nice language and .net is a pretty nice framework. It helps that I did some work in VB6 a few years back, so the whole visual development thing is familiar to me.</p>
<p>So the first big issue I dealt with in developing the Windows version was creating the data and linking it to UI elements.</p>
<p>On the Mac, we&#8217;ve had <a href="http://developer.apple.com/macosx/coredata.html" target="_blank">Core Data</a> and <a href="http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CocoaBindings/CocoaBindings.html" target="_blank">bindings</a> for years. I figured Windows MUST have something equivalent.</p>
<p>Spent some time looking… bindings was easy enough… but Core Data… not so much.</p>
<p>Eventually I came to understand that the closest thing Windows has to Core Data is the <a href="http://msdn.microsoft.com/en-us/library/bb399572.aspx" target="_blank">Entity Framework</a>. Now Entity Framework isn&#8217;t so bad… except that, unlike Core Data, Entity Framework is intimately tied into using a database. Core Data, on the other hand, is storage mechanism agnostic.</p>
<p>I don&#8217;t DO databases.</p>
<p>With Core Data, you design your data objects and their relationships, and Core Data handles the setup for you. While I read that <a href="http://www.microsoft.com/visualstudio/en-us" target="_blank">the 2010 version of Visual Studio</a> will do just that, 2010 was still in beta when I started this project. Honestly I can&#8217;t believe that Microsoft was that far behind Apple for an object-graph management and persistence framework. But apparently Steve Jobs was right when he described how revolutionary it was when he first unveiled it years ago.</p>
<p>Now that I&#8217;ve spent some time in Entity Framework, I would say it&#8217;s a pretty decent system. It was harder than Core Data to just pick up and run with without reading a ton of documentation first, primarily because it required way too much of an understanding of databases. But once your database is set up, it&#8217;s pretty usable, and integrates very well with data binding.</p>
<p>I remember with Core Data I just read a little bit, started experimenting, and even though I didn&#8217;t fully understand what I was dealing with, when things <strong>SEEMED</strong> to work, I banged on them a little more to be comfortable that I had it right… and ran with it. With Entity Framework I seem to have more confidence that things are going to work as expected and the data integrity is safe. Not sure why, though.</p>
<p>Too bad Visual Studio 2010 wasn&#8217;t available a year ago. Would have saved me a lot of time and trouble.</p>
<p>So now that I&#8217;m considerably behind schedule for getting the Windows version done well in time for this holiday season, we&#8217;ll see just how rapid this rapid application development system is.</p>
<p>I will say this, getting Giftory for Windows to the same state as Giftory for Mac version 1.0 has taken considerably less code in Windows than it did on the Mac. So maybe I&#8217;ll actually make this release afterall!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.infusionsofgrandeur.com/assets/blog/?feed=rss2&#038;p=34</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

