<?xml version="1.0" encoding="ISO-8859-1"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en-US">
	<title>Oatmeal &amp; Coffee by Philip Regan</title>
	<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php" />
	<modified>2009-01-07T11:54:46Z</modified>
	<author>
		<name>Philip Regan</name>
	</author>
	<copyright>Copyright 2009, Philip Regan</copyright>
	<generator url="http://www.sourceforge.net/projects/sphpblog" version="0.5.1">SPHPBLOG</generator>
	<entry>
		<title>REALbasic and Objective-C with Cocoa Comparison</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry090103-121218" />
		<content type="text/html" mode="escaped"><![CDATA[<i>This article is part of an occasional series.</i><br /><br />Working on Project Euler Problem 6 required the squaring of numbers. Take a look at Apple&#039;s really crummy documentation of the C function <tt>pow</tt>.<br /><br /><blockquote><br /><b>pow</b> <br /><tt>double_t pow (</tt><br /><tt>   double_t x,</tt><br /><tt>   double_t y</tt><br /><tt>);</tt><br /><br /><b>Parameters</b> <br />x<br />y<br /><br /><b>Return Value</b> <br /><br /><b>Availability</b> <br />Available in Mac OS X version 10.0 and later.<br /><br /><b>Related Sample Code</b> <br />Gamma Filter for FxPlug and AE<br />WhackedTV<br /><br /><b>Declared In</b> <br /><tt>fp.h</tt><br /></blockquote><br /><br />Now, look at REALbasic&#039;s...<br /><br /><blockquote><br /><b>Pow Function</b> <br />Returns the value specified raised to the power specified.<br /><br /><b>Syntax</b> <br /><tt>result = Pow( value, power )</tt><br /><br /><b>Parameters</b> <br /><tt>value	Double	The value you want to raised to power.</tt><br /><tt>power	Double	The power that value is raised to.</tt><br /><br /><b>Return Value</b> <br /><tt>Result	Double	Value raised to power.</tt><br /></blockquote><br /><br />Was that so hard? I used the search term &quot;power&quot; in both docs, and Xcode did not return <i>anything</i> related while REALbasic returned exactly what I needed amongst other things. Just know that walking into Objective-C and Cocoa from REALbasic, you need to know your C or at the very least have a good reference (in print or on the web) easily accessible.]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry090103-121218</id>
		<issued>2009-01-03T00:00:00Z</issued>
		<modified>2009-01-03T00:00:00Z</modified>
	</entry>
	<entry>
		<title>REALbasic and Objective-C with Cocoa Comparison</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry090102-173502" />
		<content type="text/html" mode="escaped"><![CDATA[<i>This is the first article of an occasional series.</i><br /><br />In my (very) recent post about programming for fun again, I had mentioned I would post about the differences between REALbasic and Objective-C with Cocoa. I just finished an exercise that I feel really shows off the differences between the two and also shows off just how fun these Project Euler questions are. The reason why I&#039;m doing this is because there are several people on the forums who are curious about Cocoa, and my working on the Project Euler questions presents a good opportunity to show off each language.<br /><br /><b>Disclaimers</b><br /><i>This (hopefully) series of articles assumes a basic knowledge of REALbasic or Objective-C with Cocoa. I will not dig into syntax or memory management in Cocoa because both topics have been discussed on other sites already.</i><br /><br /><i>I am only just beginnging to learn Cocoa, so I&#039;m sure the solutions I put forth are not the most efficient. However, based on what limited knowledge I have, I was able to solve the problem with reasonable effort. </i><br /><br /><i>These problems can all be solved in different ways; a user can make them as simple or as complex as thay would like. I chose to make them as simply as I could to figure them out. You may, and probably will, decide to do it differently. </i><br /><br /><i>Finally, this is not to start a langauge religious war. While I do editorialize in the articles a bit, I have no brand loyalty in the end and I am equal opportunity criticizer. If either REALbasic or Objective-C with Cocoa does something stupid, I&#039;ll point it out and laugh. If I do something stupid, I will have learned something from it.</i><br /><br /><b>Euler Project Problem 2</b> <br /><br /><blockquote>Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:<br /><br />1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...<br /><br />Find the sum of all the even-valued terms in the sequence which do not exceed four million.</blockquote><br /><br />I sorted out two ways to solve this problem, one with an array and one without. Let&#039;s go over the one without an array just to get familiar with the problem. In all cases, the solution runs within a function called RunProblem that returns an interger of the solution.<br /><br /><i>REALbasic</i> <br /><pre><br />Function RunProblem() As Integer<br />	dim theSolution as integer = 0<br />	dim valueNminus2 as integer = 1<br />	dim valueNminus1 as integer = 2<br />	dim valueN as integer = valueNminus1 + valueNminus2<br />	dim maxValue as integer = 4000000<br />	<br />	// initialize the solution<br />	theSolution = 2<br />	<br />	// iterate the sequence to start things off<br />	valueNminus2 = valueNminus1<br />	valueNminus1 = valueN<br />	<br />	// go through the rest of the sequence<br />	while valueN &lt; maxValue<br />		// do the math<br />		valueN = valueNminus1 + valueNminus2<br />		<br />		// apply the number to theSolution if it qualifies<br />		if valueN mod 2 = 0 then<br />			theSolution = theSolution + valueN<br />		end if<br />		<br />		// iterate the sequence<br />		valueNminus2 = valueNminus1<br />		valueNminus1 = valueN<br />	wend<br />	<br />	return theSolution<br />End Function<br /></pre><br /><br /><i>Objective-C</i> <br /><pre><br />- (int)RunProblem<br />{<br />	int theSolution = 0;<br />	int valueNminus2 = 1;<br />	int valueNminus1 = 2;<br />	int valueN = valueNminus1 + valueNminus2;<br />	int maxValue = 4000000;<br />	<br />	// initialize the solution<br />	theSolution = 2;<br />	<br />	// iterate the sequence to start things off<br />	valueNminus2 = valueNminus1;<br />	valueNminus1 = valueN;<br />	<br />	// go through the rest of the sequence<br />	while (valueN &lt; maxValue) {<br />		// do the math<br />		valueN = valueNminus1 + valueNminus2;<br />		<br />		// apply the number to theSolution if it qualifies<br />		if (valueN % 2 == 0) {<br />			theSolution += valueN;<br />		}<br />		<br />		// iterate the sequence<br />		valueNminus2 = valueNminus1;<br />		valueNminus1 = valueN;<br />		<br />	}<br />	<br />	return theSolution;<br />}<br /></pre><br /><br />Nothing too fancy here. Both are easily readable, though the Objective-C is really just C in this instance and I&#039;m reminded why I like REALbasic more: no brackets or semi-colons. I do understand <i>why</i> they exist, however, and live with them accordingly.<br /><br />However, I figured out the array method first and then rethought the non-array method after a quick session of playing the drums. Let&#039;s take a look at the array method...<br /><br /><i>REALbasic</i> (This is a line by line port of the Objective-C code below for comparison)<br /><pre><br />Function RunProblem() As Integer<br />	dim theSolution as integer = 0<br />	<br />	dim FibonacciSequence(-1) as integer<br />	<br />	dim FibonacciValue1 as integer = 1<br />	dim FibonacciValue2 as integer = 2<br />	<br />	FibonacciSequence.Append(FibonacciValue1)<br />	FibonacciSequence.Append(FibonacciValue2)<br />	<br />	dim maxValue as integer = 4000000<br />	dim theValue as integer = 0<br />	<br />	while theValue &lt; maxValue<br />		dim lastIndex as integer = UBound(FibonacciSequence)<br />		<br />		dim valueNminus1 as integer = FibonacciSequence(lastIndex)<br />		dim valueNminus2 as integer = FibonacciSequence(lastIndex - 1)<br />		<br />		theValue = valueNminus1 + valueNminus2<br />		<br />		FibonacciSequence.Append(theValue)<br />	wend<br />	<br />	for each mValue as integer in FibonacciSequence<br />		if mValue mod 2 = 0 then<br />			theSolution = theSolution + mValue<br />		end if<br />	next<br />	<br />	return theSolution<br />End Function<br /></pre><br /><br /><i>Objective-C with Cocoa</i> <br /><pre><br />- (int)RunProblem<br />{<br />	<br />	NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];<br />	<br />	int theSolution = 0;<br />	<br />	NSMutableArray *FibonacciSequence;<br />	FibonacciSequence = [[NSMutableArray alloc] init];<br />	<br />	NSNumber *FibonacciValue1;<br />	FibonacciValue1 = [[NSNumber alloc] initWithInt:1];<br />	<br />	NSNumber *FibonacciValue2;<br />	FibonacciValue2 = [[NSNumber alloc] initWithInt:2];<br />	<br />	[FibonacciSequence addObject:FibonacciValue1];<br />	[FibonacciSequence addObject:FibonacciValue2];<br />	<br />	int maxValue = 4000000;<br />	int theValue = 0;<br />	<br />	while (theValue &lt; maxValue) {<br />		NSNumber *lastIndex;<br />		lastIndex = [[NSNumber alloc] initWithInt:[FibonacciSequence count]];<br />		<br />		int valueNminus1;<br />		valueNminus1 = [[FibonacciSequence objectAtIndex:[lastIndex intValue] - 1] intValue];<br />		<br />		int valueNminus2;<br />		valueNminus2 = [[FibonacciSequence objectAtIndex:([lastIndex intValue] - 2)] intValue];<br />		<br />		theValue = valueNminus1 + valueNminus2;<br />				<br />		if (theValue &lt; maxValue) {<br />			<br />			NSNumber *FibonacciValueN;<br />			FibonacciValueN = [[NSNumber alloc] initWithInt:theValue];<br />			[FibonacciSequence addObject:FibonacciValueN];<br />			<br />			NSNumber *newLastIndex;<br />			newLastIndex = [[NSNumber alloc] initWithInt:[FibonacciSequence count]];<br />			<br />		}<br />	}<br />	<br />	for (NSNumber *valueToAdd in FibonacciSequence) {<br />		if ([valueToAdd intValue] % 2 == 0) {<br />			theSolution = theSolution + [valueToAdd intValue];<br />			NSLog(@&quot;%i&quot;, theSolution);<br />		}<br />	}<br />	<br />	[pool drain];<br />	<br />	return theSolution; <br />}<br /></pre><br /><br />Okay, it&#039;s a little messy but the difference is apparent nonetheless.<br /><br />Arrays in Cocoa, at least on the surface, are a hassle. If I want the same basic functionality in arrays that I&#039;m used to in REALbasic, then I have to use <tt>NSMutableArray</tt>, and that brings a whole lot of complexity to the table. Initializing <tt>NSMutableArray</tt> is like any other object, but it&#039;s the appending values to it where the hassles begin. In the REALbasic code, I declared an array of <tt>Integer</tt> type and appended two declared integers to the array, shown here:<br /><br /><pre><br />dim FibonacciSequence(-1) as integer<br />	<br />dim FibonacciValue1 as integer = 1<br />dim FibonacciValue2 as integer = 2<br />	<br />FibonacciSequence.Append(FibonacciValue1)<br />FibonacciSequence.Append(FibonacciValue2)<br /></pre><br /><br />In Objective-C, I can&#039;t just add on a couple of <tt>int</tt> to the array because <tt>NSMutableArray</tt> <i>only</i> takes objects. If I create an <tt>int</tt> and send the <tt>addObject</tt> message to the array, Xcode returns &quot;<tt>passing argument 1 of 'addObject:' makes pointer from integer without a cast</tt>&quot;. I&#039;m cool with that because an <tt>int</tt> isn&#039;t an object and I don&#039;t know how to cast (Yet). In looking up Integer in the documentation, I get back a number of results that <i>lead</i> me to <tt>NSNumber</tt>.<br /><br /><pre><br />NSMutableArray *FibonacciSequence;<br />FibonacciSequence = [[NSMutableArray alloc] init];<br />	<br />NSNumber *FibonacciValue1;<br />FibonacciValue1 = [[NSNumber alloc] initWithInt:1];<br />	<br />NSNumber *FibonacciValue2;<br />FibonacciValue2 = [[NSNumber alloc] initWithInt:2];<br />	<br />[FibonacciSequence addObject:FibonacciValue1];<br />[FibonacciSequence addObject:FibonacciValue2];<br /></pre><br /><br />On a side note, I tried <tt>NSInteger</tt>, but that returned a lovely &quot;<tt>error: 'NSInteger' is not an Objective-C class name or alias</tt>&quot;. I later learned that <tt>NSInteger</tt> isn&#039;t declared in the Cocoa or Foundation frameworks.<br /><br />The other hassle came with I went to get the last item in the array. In REALbasic, this was done by the following:<br /><br /><pre><br />dim lastIndex as integer = UBound(FibonacciSequence)<br />		<br />dim valueNminus1 as integer = FibonacciSequence(lastIndex)<br /></pre><br /><br />Straightforward stuff. <tt>Ubound</tt> returns a zero-based integer that I can then use to grab that item. Objective-C, on the other hand required the following:<br /><br /><pre><br />NSNumber *lastIndex;<br />lastIndex = [[NSNumber alloc] initWithInt:[FibonacciSequence count]];<br />		<br />int valueNminus1;<br />valueNminus1 = [[FibonacciSequence objectAtIndex:[lastIndex intValue] - 1] intValue];<br /></pre><br /><br />Right, well, it seems that the <tt>count</tt> message for <tt>NSMutableArray</tt> returns, if you can believe this, an <tt>NSUInteger</tt> according to the documentation. However, if I use <tt>NSUInteger</tt>, then I get the &quot;error: &#039;NSUInteger&#039; is not an Objective-C class name or alias&quot;. It seems <tt>NSUInteger</tt> is also not declared in the Cocoa or Foundation frameworks. (So, how the hell did it make it into <tt>NSMutableArray</tt>?) <br /><br />I forget how I got to using <tt>NSNumber</tt> as the datatype other than coming to the conclusion after reading the documenation that <tt>NSNumber</tt> is a sort of &quot;catch all&quot; datatype for numbers (and <tt>Boolean</tt>). What I feel is truly important here is notice how the <tt>count</tt> message&#039;s NSUInteger get&#039;s set to the <tt>NSNumber</tt> variable <i>without error</i> and without any obvious casting. I didn&#039;t realize I did that until after I clicked &quot;Build and Go&quot;.<br /><br />The other small problem that I ran across is that the <tt>count</tt> message returns a 1-based integer, but the indexes (indices?) require a 0-based integer. So, all of those folks (like me) who complain about a lack of 0- and 1-based inconsistency in REALbasic will quickly find the same thing in Objective-C. <br /><br />The books I&#039;ve been reading have all been saying that it&#039;s best to use the <tt>NSObject</tt>-based objects in as many cases as possible. I&#039;m sure there is someone out there saying that the Cocoa array way of doing this is better in the long run. I have yet to see how, but I&#039;m sure long-term compatibility comes into play here. Regardless of that, I would much rather read the REALBasic code.<br /><br />More problems will be written up if they offer up interesting language features.]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry090102-173502</id>
		<issued>2009-01-02T00:00:00Z</issued>
		<modified>2009-01-02T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Programming For Fun</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry090102-112326" />
		<content type="text/html" mode="escaped"><![CDATA[I&#039;m not sure if it is the same for me as it is with other programmers, but there are times when I become weary of my projects and the last thing I want to do is deal with them.<br /><br />Simple Cataloger has one more change to be made that I know I could blow through if I could just wrap my head around the feature change. It&#039;s not even a crucial one at that, but isn&#039;t easy and it could generate more sales.<br /><br />My MIDI editor was cruising along until I started writing the Undo engine. Writing an undo engine is hard, particularly so when you don&#039;t think about programming for it while creating the functions and features themselves. At this point I&#039;ve hit a fairly large wall, and it&#039;s one of those problems where I need a solid day of work to get through it. What I&#039;m doing now is absolutely crucial to the success of the application so the enormity of it is...well...overwhelming. Especially since I&#039;m going to take my third stab at my current problem and if I don&#039;t get it right this time, I have to seriously consider rewriting the app with an architecture that better supports Undo. <br /><br />In short, programming, even though it always has been work, has lately been not a lot of fun and more than a little frustrating. if anything, it&#039;s just become a hassle at this point. I think my conceptual honeymoon with programming is over, and now I have to actually <i>work</i> at my relationship with the craft. I really need to make programming fun again.<br /><br />Over the past several months, I&#039;ve been searching for and reading all the sites about <a href="http://en.wikipedia.org/wiki/Objective-C" target="_blank" >Objective-C</a> and <a href="http://en.wikipedia.org/wiki/Cocoa_(API)" target="_blank" >Cocoa</a> programming for Mac OS X. I grabbed a couple of books and after running through a couple chapters of each, I&#039;ve had The Moment of Clarity. It&#039;s making sense now. I&#039;m able to read more code and understand more about how Xcode, Interface Builder, the frameworks, and Objective-C all work. I&#039;ve even gone so far as to create <a href="http://www.oatmealandcoffee.com/external/RB_ObjC_Lxcn.htm" target="_blank" >a cheat sheet for myself</a> that shows the details of <a href="http://www.realsoftware.com/realbasic/" target="_blank" >REALbasic</a> with Objective-C, language feature by language feature. It&#039;s a work in progress and I will be constantly editing it as time goes on.<br /><br />After going through the beginning projects and getting my head around the syntax&lt; I wanted to try some stuff on my own. I could have gone through some of my older RB projects to see about porting something, but that wouldn&#039;t have been much fun, and I&#039;m not a fan of re-inventing wheels.<br /><br /><a href="http://www.codinghorror.com/blog/archives/000021.html" target="_blank" >Jeff Atwood</a> over at <a href="http://www.codinghorror.com/" target="_blank" >Coding Horror</a> had a great blog entry entitled <a href="http://www.codinghorror.com/blog/archives/001202.html" target="_blank" >&quot;Programming: Love It or Leave It&quot;</a>. The first comment linked to <a href="http://projecteuler.net/" target="_blank" >Project Euler (http://projecteuler.net/)</a>, which is a great set of math problems for computer programmers. What makes them especially great is that you don&#039;t need a hard core mathematical background but really just an interest in numbers in general. After reading some of the questions at varying degrees of difficulty, I decided this would be a great way to challenge myself in learning in Objective-C and Cocoa but also give me challenges as a programmer as well. It will force me to actually <i>think</i> in Objective-C and not just follow along with exercises.<br /><br />I&#039;ve done only a couple of the questions, but I&#039;m totally hooked. I edit my cheat sheet as I go and I&#039;m learning new Cocoa and Objective_C features doing this faster than I am through the books (though the books do go into a lot more than what Project Euler will require digging into). Besides, it&#039;s just fun to play with these numbers and see what comes out the other end. I highly recommend it to everyone who is looking for something fun to program, and who is either bored or overwhelmed and just need a fun diversion from the usual. The more important thing that I&#039;m regaining is that sense of confidence in overcoming programming problems. <br /><br />This does not mean, however, that I am walking away from <a href="http://www.realsoftware.com/realbasic/" target="_blank" >REALbasic</a>. In fact, as I delve further into the realm Apple Developers, I gain an increasing appreciation for all that is <a href="http://www.realsoftware.com/realbasic/" target="_blank" >REALbasic</a>. I honestly feel that there is no way I could dug into Apple&#039;s tools without the foundation of <a href="http://www.realsoftware.com/realbasic/" target="_blank" >REALbasic</a> to really get me going in the craft of programming. I will always have a need for a cross-platform tool at The Day Job, and I sure as hell can&#039;t do that in Xcode. Xcode is another tool in the toolbox at this point. I do have the idea, however of doing a series of blog posts showing my solutions to Project Euler questions in both <a href="http://www.realsoftware.com/realbasic/" target="_blank" >REALbasic</a> and ObjectiveC/Cocoa just to show the benefits of both (but, really, more <a href="http://www.realsoftware.com/realbasic/" target="_blank" >REALbasic</a>. The syntax is <i>SOOOO</i> much nicer). <br /><br />I&#039;ve long since learned from going from Applescript to <a href="http://www.realsoftware.com/realbasic/" target="_blank" >REALbasic</a> that learning new languages makes me a better programmer, and going from <a href="http://www.realsoftware.com/realbasic/" target="_blank" >REALbasic</a> to Objective-C just reaffirms that. Project Euler is making programming fun again, and I&#039;m happier about that than anything at the moment. I&#039;ll get back to those larger problems I mentioned earlier, but first I want to futz with <a href="http://en.wikipedia.org/wiki/Fibonacci_number" target="_blank" >Fibonacci numbers</a> just a little bit more. Fibonacci numbers are cool.]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry090102-112326</id>
		<issued>2009-01-02T00:00:00Z</issued>
		<modified>2009-01-02T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Frenzic Revisited</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry081129-072810" />
		<content type="text/html" mode="escaped"><![CDATA[What can I say? I&#039;m having fun...<br /><br /><b>Things I&#039;ve sorted out so far that have helped me so far</b>  <a href="http://frenzic.com/detail/?id=6870" target="_blank" >(I recently broke 2000, hit a peak of 2600, and am now averaging over 1000)</a>:<br /><ul>
	<li><a href="http://frenzic.com/strategy-guide/" target="_blank" >Read the strategy guide</a> as many times as necessary, but add concepts into your gameplay one at a time. If you think you've got it all, read it again.</li>
	<li>Use of your peripheral vision is a must. I actually hold the iPhone a little further away than normal so I don't have to mentally scan as wide an area.</li>
	<li>I consider the Nuke button to be the most useful. But since a high score is the goal, the x2 button is the most beneficial. I think the distinction is important, because you can't clear nasty mistakes with the x2 button. The Slow Timer button is just gravy.</li>
	<li>I'm not quick enough for Talos' x2-to-Nuke combo most times, but I find that Nuke-to-x2 is almost as good, and awesome with the Slow Timer if I can get in a couple single color pies.</li>
	<li>Pick a system and stick with it. I place green for Nuke, Orange for x2, and purple for Slow Timer. It was decided upon what I thought were the most useful power-ups and the brightness of the colors. From there, I just move clock-wise around the pies, keeping the number of colors in each pie as much  possible.</li>
	<li>I play better in the mornings right after coffee.</li>
	<li>Practice, practice, practice as the game slows down as you get better.</li>
	<li>Perseverance pays off, but pace yourself. I find my performance (and the iPhone's) is better if I play three or four games and then go take a break. If I hit a particularly high score, I put it down and not play again for a couple hours. (There's no reason to obsess and quickly get burnt out.)</li>
	<li>Don't discouraged by those in the Newbiw and Apprentice rank with scores of 3000+. I'm willing to bet those are Artisans or better creating new accounts to get themselves on the boards in as many places as possible. It's a cheap move.</li>
</ul><br /><b>You know you&#039;re addicted to Frenzic when...</b> <br /><ul>
	<li>...the anti-glare film on your iPhone has six distinct smooth, and thus not so anti-glare, finger-sized spots.</li>
	<li>...you see a piece of pizza on a plate and instinctively start looking clockwise around the table to see where it will fit.</li>
	<li>...you find yourself practicing doing things with your peripheral vision.</li>
	<li>...you weigh which is worse: Pausing the really good game you started in the morning over coffee or going in late to work.</li>
	<li>...you check your Frenzic score placement as often as your RSS feeds.</li>
	<li>...you write your own strategy guide.</li>
</ul>]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry081129-072810</id>
		<issued>2008-11-29T00:00:00Z</issued>
		<modified>2008-11-29T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Frenzic: I &quot;get it&quot; now.</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry081122-073308" />
		<content type="text/html" mode="escaped"><![CDATA[If you have and have an iPhone and haven&#039;t played <a href="http://frenzic.com/" target="_blank" >Frenzic</a>, you should. It&#039;s a really great iPhone experience. It doesn&#039;t use the fancy accelerometers or proximity sensors, because it doesn&#039;t need to. It just does one things really well, and that is the touch screen.<br /><br />I played the desktop version, and wasn&#039;t too keen on it. I think it was all of the fast-paced clicking. My aim is usually off enough times to be a hazard while playing any seriously timed click-centric game. <br /><br />However, Frenzic on the iPhone shows that it was meant to be a touch screen game all along. Game play improves dramatically, and is addictive. Like Tetris addictive. It makes sense now and I&#039;m finding myself sneaking in games whenever I can.<br /><br />I&#039;m a massive fan of <a href="http://iconfactory.com/home" target="_blank" >Iconfactory</a>, and I&#039;ve purchased all of the apps in their catalog (except Twitterific. I just don&#039;t have any interest in Twitter), but I was leery of them getting into games as I always considered their focus to be on graphics. Certainly, a game  is a great venue for them to show off their graphics skills, as Frenzic clearly shows, but still, there&#039;s a reason why graphics and game play are usually two separate jobs.<br /><br />Also, with the location services, posting scores both community-wide and locally (though I would like &quot;local&quot; quantified) adds a really great dimension with almost no fuss on my part. I have to admit that there was a satisfaction in making it to the boards the first time, even if it is only my immediate area. (<a href="http://frenzic.com/detail/?id=6870" target="_blank" >OatmealAndCoffee</a> is the account name in case you go looking)<br /><br />I am a little concerned about battery power when it comes to games on such a small device, and I&#039;m watching that closely as it would be keen to have a game this engrossing on the plane. My PSP holds up really well, but that was designed for games from the start whereas the iPhone wasn&#039;t. I&#039;m staying away from any of the 3D stuff because I know for a fact that kills the battery, but I have <a href="http://sillysoft.net/lux/touch/" target="_blank" >Lux</a> (computer Risk rules) and that does really well. So far, Frenzic looks to be holding up, too.<br /><br />All in all, Frenzic is well worth the $4.99 in the App Store.]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry081122-073308</id>
		<issued>2008-11-22T00:00:00Z</issued>
		<modified>2008-11-22T00:00:00Z</modified>
	</entry>
	<entry>
		<title>How To Build A Drum Riser</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry081109-093510" />
		<content type="text/html" mode="escaped"><![CDATA[Now that Fall is here, it&#039;s been a time for a lot of home projects and not a lot of time for programming. I caught up on a couple of things that needed to get done before Winter kicked making them all but impossible to do. One of those things was building a drum riser for the kit in the basement office. Since the web is surprisingly bare of reasonable instructions on how to do this, I thought I would share my plans. The link below goes to a static page because the content is far too in depth for this blog. Enjoy...<br /><br /><a href="http://personal.oatmealandcoffee.com/blog/static.php?page=HowToBuildADrumRiser" >How To Build A Drum Riser</a><br /><br />]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry081109-093510</id>
		<issued>2008-11-09T00:00:00Z</issued>
		<modified>2008-11-09T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Too Many Distractions</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry081029-205749" />
		<content type="text/html" mode="escaped"><![CDATA[It&#039;s been a busy, busy month here at O&amp;C, both at home and at The Day Job. <br /><br />Simple Cataloger is steadily selling still and I&#039;ve gotten some great feedback from customers and trial users. A lot of their feedback has been for features I had thought about doing already, but I wanted the application to be out there for a while and wait and see what users would ask for. An upgrade will be coming before the end of the year hopefully with those requests. At the very least, I need to make sure that the app works in Mac OS 10.5. Those .<i>x</i> really change the rules every time.<br /><br />People have been working furiously working on the new <a href="http://www.arbpmembers.org" target="_blank" >ARBP</a> members website. I contribute as best I can, but I feel I&#039;m more than a little out of my depth with the web work, though I&#039;m learning more than I&#039;m doing which is more important than anything (and one of the main reasons why I volunteered in the first place). So, it&#039;s all good.<br /><br />I&#039;ve noted earlier on this blog that I got an iPhone. I&#039;m not going to write yet another review, because that&#039;s been done a gazillion times already elsewhere by people who are much at doing such things. What I am going to write about is how an iPhone app led me to a quick but fun REALbasic project.<br /><br />I recently picked up the <a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=292792586&amp;mt=8" target="_blank" >Bloom application from the App store (links to iTunes)</a>. The application is an exercise in ambient, generative music. A user can interact with the app by clicking on different areas of the screen to play simple musical notes, or the app will take over after being idle for a period of time, all while playing over a well padded drone. <br /><br />It&#039;s all very Eno and a great app to show off the iPhone. Brian Eno is one of my favorite musicians, so even before I knew anything about the app, I picked it up. A risky move, I know, given all of the flotsam and jetsam in the App store already. <br /><br />It proved to be a fun investment, and as I played with it sorting out how it worked, options and all, I began to think about how I could write an application like that. The application is simple in concept but leaves open a good number of variations within itself. <br /><br />Over the weekend, I wrote up some pseudo-code, and coded the core of the app in REALbasic. It doesn&#039;t look or sound exactly the same because I&#039;m tying into the same frameworks as their code, but I created a reasonable fascimile of the core of the app. I realized after writing it that it answered some of the questions I more commonly see on the Forums and the NUG. It&#039;s a fun little app that is ripe for customization and expansion.<br /><br />Normally, I&#039;m not one to release any of my code. I mean, I usually only code for the Day Job and for my own commercial stuff, and besides someone might actually <i>look</i> at it and actually...yikes...<i>critique it</i>. But I decided that the ARBP would be a good place to start getting some of my work out there. So, I uploaded REALbloom&#039;s code the code repository on the soon to come members only site.<br /><br />REALbloom offers a simple structure for handling animated graphics with dynamic transparency. It also includes Joe Strout&#039;s YNotePlayer class, a currently Mac OS X-only replacement for the now de-emphasized NotePlayer.<br /><br />I also uploaded the code for a little helper app that I have for IDE scripts that mimics the clippings window in BBEdit that call RBClippings. It shows not only how helpful code generation can be, but also offers an easy to maintain user preferences module. It&#039;s another app ripe for customization and expansion.<br /><br />Share and enjoy! If you make any useful modifications to the code, please feel free to show me and upload to the code repository once it&#039;s up. You have to join (free, even) to get it, but I think the rest of the <a href="http://www.arbpmembers.org" target="_blank" >ARBP members site</a> will be worth your time even if my code isn&#039;t.]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry081029-205749</id>
		<issued>2008-10-30T00:00:00Z</issued>
		<modified>2008-10-30T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Helping to stimulate the economy</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry081010-235742" />
		<content type="text/html" mode="escaped"><![CDATA[Today I went from a four year old &quot;comes free with the account&quot; flip phone to an iPhone. The flip phone served me very well and easily had another year of life in it. I just got tired of coming across questions I just knew I could get the answers to if I only had an iPhone.<br /><br />It&#039;s worth every last penny.<br /><br />Sent from my iPhone ]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry081010-235742</id>
		<issued>2008-10-11T00:00:00Z</issued>
		<modified>2008-10-11T00:00:00Z</modified>
	</entry>
	<entry>
		<title>REALbasic: It&#039;s a floor wax and a dessert topping!</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry081007-192330" />
		<content type="text/html" mode="escaped"><![CDATA[Every so often I see comments in the REALbasic mailing lists and the forums from Mac users claiming that REALbasic is a Windows-centric tool because it doesn&#039;t offer certain (or enough) Mac-specific capabilities. But, then, I also see the same sentiment echoed from the Windows users claiming that it is a Mac-centric tool for the very same reasons (I don&#039;t read through the Linux forums so I have no idea what they&#039;re saying).<br /><br />The latest round of claims got me to thinking about why that must be, and I hit upon the answer in a rather roundabout way. I stumbled upon it while digging through some older emails looking for some information where an RB engineer (who shall remain nameless) basically said the reason why they weren&#039;t going to implement some control was because wasn&#039;t cross-platform. In other words, you couldn&#039;t use that control on all of the supported platforms. Huh. I never thought about it that way, but fair enough. REALbasic is a cross-platform tool so it only stands to reason why some controls are past a certain line.<br /><br />So, the truth is, as I see it, in the end REALbasic is neither a Windows-centric nor Mac-centric tool. In fact, it&#039;s neither <i>and</i> both all at the same time. What it is, really, is the Lowest Common Denominator. But I don&#039;t mean that in a bad way, in fact, I think that quality is one of its greatest strengths by far. Even though I program primarily on the Mac, I&#039;ve done the cross-platform bit. It&#039;s really cool. I&#039;ve literally written one set of code, compiled for Mac and Windows, I didn&#039;t have any platform-specific issues, and blasted it out to dozens of users who have used my app daily for two years running now without a single complaint. (Good luck with <i>that</i>, <a href="http://java.sun.com/" target="_blank" >Java</a>.) Now knowing that, I think it not only renders the Windows- and Mac-centric arguments null and void, but also shows really just how great REALbasic is at its core. There&#039;s nothing like it.<br /><br />However, I think a case could be made for more platform-specific features, particularly in the area of controls. REALbasic offers a wide variety of controls, enough to suit the vast majority of needs. I really can&#039;t complain. Controls like the Canvas and Listbox are so robust that I think one could do just about any kind of app they want with just those two <i>alone</i>.<br /><br />But, there are times when a Mac-only control would just do the trick to polish up an application into something that looks like a Mac application through and through. You know, something that users would expect. The Round and Help buttons come to mind, as do the Segmented Cell, Segmented Control, and the Circular Slider. These are relatively simple controls, but they are so decidedly Macintosh that there have been times when one of them would have been the <i>perfect</i> control to put into an interface. They are, as far as I&#039;m concerned, signature controls for the Mac; they help make the Mac the Mac. I&#039;m sure that if I dig around VB.NET long enough I would find some controls that have that &quot;Ooh! That&#039;s the one!&quot; factor to them as well.<br /><br />I&#039;ve always had the impression that being the lowest common denominator is a really tough job mainly because it is, in this context at least, trying to be all things to all people. It&#039;s a double-edged sword. I experience that now in my Day Job to a smattering of internal &quot;customers&quot; (other departments), and it is really hard to keep up sometimes. But, the book publishing landscape changes (albeit slowly) and there are times when I just gotta give in and do things that more or less go against my department&#039;s paradigm up until that point. Thanks, <a href="http://en.wikipedia.org/wiki/E-book" target="_blank" >e-books</a>.<br /><br />My naivety about how things work over at Real Software, which I feel is the same naivety that drives the complaints that are the topic of this article, wants to think that it shouldn&#039;t be too hard for them to sprinkle in a few more controls on each of the platforms. I mean, we already have Windows and Mac-specific features in the framework itself like FolderItem.MacCreator, FolderItem.MacType, and all of the Microsoft Office classes (which, BTW, were cross-platform at one point. Thanks, Microsoft). Controls are obviously much more complex than datatypes and values, but still, I think the case could be made for more platform-specific controls, and the extra work I think would be worth it.<br /><br />I can, as an alternative, use declares for getting Mac-specific controls into my applications. But, man...have you seen those things? I dig all the power and all that, but that&#039;s a whole lot more typing than the rest of my code for one object, and a whole lot of &quot;math&quot;, too. As clean as the REALbasic syntax is, declares are still a hassle. I could also use a funky combination of screenshots, masks, and a canvas to recreate these controls, and I&#039;m about to do just that, but doing so is...well...funky. I would much rather leave that to someone else to maintain.<br /><br />I can certainly understand the REALbasic engineer&#039;s point that they didn&#039;t support the given control because it couldn&#039;t be found on all platforms. However, I think that may be a bit of a hindrance to the framework, and it would be nice to see some of these deprecated objects replaced with items that speak to a renewed focus. REALbasic&#039;s inevitable move to Cocoa I&#039;m sure will open up many doors for the framework, as will Windows 7/Vista 2/Whatever. Exciting stuff is in the works from all directions. REALbasic has given me everything I need to get my work done while having fun at the same time, and I&#039;m hoping that I might get just a little bit more.]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry081007-192330</id>
		<issued>2008-10-07T00:00:00Z</issued>
		<modified>2008-10-07T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Bits and Bobs</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080929-212349" />
		<content type="text/html" mode="escaped"><![CDATA[From the recent <a href="http://www.bankofamerica.com/" target="_blank" >Bank of America</a> commercials featuring Keifer Sutherland voiceovers (money a bit tight, eh, mate?):<br /><blockquote>This is America. Do we let the sun just shine and the wind just blow? No. We put them to work.</blockquote><br />Well, actually, Bank of America, we don&#039;t put them to work. Why does energy policy exist only in absolutes?<br /><hr/><br />I abhore automotons and <a href="http://www.urbandictionary.com/define.php?term=ATNA" target="_blank" >ATNA</a> managers in any organization.<br /><hr/><br />I find it laughable that industries which absolutely abhore government regulation and fight any intervention at every turn are usually the first ones that cry for help from the government when they are the victims of largely their own devising.<br /><hr/><br />While driving up I-495 one day I came upon a gasoline tanker truck that was weaving through traffic moving faster than most cars would reasonably allow. I was appalled when at one point, the driver wove through two cars so quickly, he put his truck at a fairly jaunty angle while weaving between them to the point where I swore it was going to crash. At that point I sped up to get as much asphalt between me and him. Soon after I did that, I came across a septic disposal truck doing the exact same thing. Which immediately made me wonder that between a gasoline tanker truck and septic disposal truck crashing and potentianlly spilling its contents, which would be worse to deal with?<br /><hr/><br />You can&#039;t be against globalization and still get your coffee at <a href="http://www.starbucks.com/" target="_blank" >Starbucks</a>.]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080929-212349</id>
		<issued>2008-09-30T00:00:00Z</issued>
		<modified>2008-09-30T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Improving voter turnout</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080928-184524" />
		<content type="text/html" mode="escaped"><![CDATA[I have a strict personal rule about discussing political issues on this blog for all the obvious reasons, but also mainly I really don&#039;t care all that much what people&#039;s affiliations are just as long as they vote. Voter turnout here in America is appalling. Really, we, as a country, ought to be ashamed of ourselves. <br /><br />At the same time, I think the single largest problem facing the voter turnout issue is by far the easiest to fix: the complete and utter lack of convenience. Why are we still, after all this time, still voting on a weekday in the winter? If we can tweak the constitution to enact something as inane as <a href="http://en.wikipedia.org/wiki/Eighteenth_Amendment_to_the_United_States_Constitution" target="_blank" >Prohibition</a>, then we can move voting day to a freakin&#039; Saturday in April. Or even just April.<br /><br />On the last Presidential election day, the blizzard facing us was so big, I actually had to decide between voting and going to grocery store before the storm set in and dumped at least a foot. Vote or food? Hmmm...   It&#039;s a decision I should never have to be faced with again.<br /><br /><a href="http://www.whytuesday.org/" target="_blank" >Why Tuesday?</a><br /><br />To not change election day to a better time of year, if not a better day of the week is just foolish if we wish to keep the masses interested.]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080928-184524</id>
		<issued>2008-09-28T00:00:00Z</issued>
		<modified>2008-09-28T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Comments are back...for now</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080928-184118" />
		<content type="text/html" mode="escaped"><![CDATA[Whatever spam storm that flitted through here seems to have passed. So, I&#039;ve allowed comments, and even then, they have to be approved first. So, if there&#039;s a delay, it&#039;s because I haven&#039;t gotten to it yet. We&#039;ll see how it goes...]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080928-184118</id>
		<issued>2008-09-28T00:00:00Z</issued>
		<modified>2008-09-28T00:00:00Z</modified>
	</entry>
	<entry>
		<title>REALbasic 2008r4 is out and I love—<b>LOVE</b>—it.</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080927-084802" />
		<content type="text/html" mode="escaped"><![CDATA[My two favorite features...<br /><br /><b>Language Reference search results</b><br />The new search in the Language Reference is fantastic. I have other similar LR-like tools in other development apps, like <a href="http://www.panic.com/coda/" target="_blank" >Coda</a> and <a href="http://developer.apple.com/tools/xcode/" target="_blank" >Xcode</a>, but REALbasic&#039;s search results are the most useful by far.<br /><br /><b>Constants can be used in declarations</b><br />No more <a href="http://en.wikipedia.org/wiki/Magic_number_(programming)#Unnamed_numerical_constant" target="_blank" >Magic Numbers</a>! Now there&#039;s <b>no</b> excuse...<br /><br />]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080927-084802</id>
		<issued>2008-09-27T00:00:00Z</issued>
		<modified>2008-09-27T00:00:00Z</modified>
	</entry>
	<entry>
		<title>A Personal Programming Milestone</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080927-083919" />
		<content type="text/html" mode="escaped"><![CDATA[MusicSketch has hit a milestone: It has surpassed <b>10,000 lines of code</b>. I agree with Bill Gates when he says &quot;Measuring programming progress by lines of code is like measuring aircraft building progress by weight.&quot; I&#039;ve seen awesome apps made very economically, and total crap made with enough bloat and convulation to make a bureaucrat&#039;s head spin. Really, I was just curious about what it was and was greatly surprised at the number.<br /><br />The list of things to do is small but deep, and coding has been going really well lately. There&#039;s the Undo/Redo system, the Help system, a few multi-track editor specific features, and a myriad of small but necessary bug fixes and tweaks to ensure a quality experience. I&#039;ve found that even though the code is large and complex, it&#039;s totally maintainable. I&#039;m actually having <b>fun</b> working on the hard problems and seeing almost immediate positive results.<br /><br />In honor of this important-yet-not milestone, I&#039;ve compiled the following list of things I&#039;ve learned along the way, both the hard way and the easy way. This is all the stuff I wish someone told me at the very beginning even if I didn&#039;t understand it at the time...<br /><br /><ul>
	<li>Patient and careful program design at the beginning before you write one line of code pays off in dividends when you are writing code and even more when fixing bugs later.</li>
	<li>Bug tracking doesn't have to be complex, you just need to be diligent in finding (or creating) and using a system that works for you.</li>
	<li>Comments = overhead. A well thought out, and consistenly used, coding convention = self-documenting code = less comments = less overhead.</li>
	<li>Don't be afraid to put something aside and work on something else (in the application or out) if you've finally wrapped your head around one issue but are stumped by something else.</li>
	<li>Pseudocode is your friend. Brainstorms are good suggestions at best but are rarely followed to the letter.</li>
	<li>An Undo/Redo engine needs to be thought out before and during the development process and not after the fact.</li>
	<li>Don't be afraid to rewrite.</li>
	<li>Always be sure to end the programming session with a working build, even if it means you have to comment out not-quite-working-yet code, then spend a little time just futzing around with it. You look at the project from a different perspective (the user's) and it really helps with your morale.</li>
	<li>Encapsulate methods, functions, and properties first, and make public only when necessary.</li>
</ul>
<br /><br />A lot of this is simply echoing <a href="http://cc2e.com/" target="_blank" >Code Complete</a>. If you haven&#039;t read it, you should.]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080927-083919</id>
		<issued>2008-09-27T00:00:00Z</issued>
		<modified>2008-09-27T00:00:00Z</modified>
	</entry>
	<entry>
		<title>No more comments.</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080921-164032" />
		<content type="text/html" mode="escaped"><![CDATA[Comments have now been de-activated until further notice. I saw myself getting into a pitched battle with some wanker spammers, people (scum) whom I have absolutely no patience nor tolerance for, that were abusing the comments system here. So, I took it down. Now nobody wins. Idiot wanker scum.]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080921-164032</id>
		<issued>2008-09-21T00:00:00Z</issued>
		<modified>2008-09-21T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Companies I Want To Like But Can&#039;t</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080921-071341" />
		<content type="text/html" mode="escaped"><![CDATA[<a href="http://www.ikea.com/" target="_blank" >Ikea</a><br />Ikea has this great display in the Stoughton, MA location (and probably in others as well) that&#039;s called (roughly) &quot;Live in 598 SQuare Feet&quot;. If you haven&#039;t see it yet, it&#039;s a model 1 bed/1 bath apartment, presumeably much like the millions of microscopic ones that would be found in a major city around the globe, though New York stands out in particular. Despite the size of the place, the apartment looks much bigger than what it really is. It is filled from top to bottom with Ikea furniture and it looks absolutely amazing.<br /><br />But that&#039;s the problem. It&#039;s filled from top to bottom with Ikea furniture. I&#039;ve discovered a long time ago that unless one lives the &quot;Ikea lifestyle&quot; that Ikea really doesn&#039;t fit anywhere else. If I take any one of those elements out of their equation and place it amongst my stuff, it not only stands out but actually clashes with just about everything else.<br /><br />I think part of my problem is that I&#039;ve long since graduated from particle board and veneer for the main rooms of the house. I&#039;ll stick crappy Target furniture in the basement bathroom and game room. but in the dining room, I think I need a proper buffet made with reall wood even in the drawers; not some funky plastic/cardboard combination.<br /><br />I won&#039;t get into just how huge and overwhelming their stores are. It just sends my ADD into overdrive. My mom once said &quot;I have to go in there looking for a very specific item.&quot; Well, Renee and I did that recently and we still came out of there empty handed after an hour. It seems to me that most of the stuff they have can be found easier in Target and probably of better quality as well.<br /><br /><a href="http://www.wholefoodsmarket.com/" target="_blank" >Whole Foods</a><br />I&#039;ve heard it called &quot;Whole Wallet&quot;, and I have to agree with that nickname. I have a job and all that, but it&#039;s stunning (if not a little outrageous) how much a single grocery store run costs there. One would think that as they got bigger and were able to buy more stuff that the prices would come down. Or was I asleep during that part of my high school economics classes? Somehow, I don&#039;t feel I should have to pay a premium to safely shop for food items that <i>don&#039;t</i> have corn syrup in everything.<br /><br /><a href="http://www.phantomgourmet.com/" target="_blank" >Phantom Gourmet</a><br />I have a problem with a food critic of any sort that claims that Dunkin&#039; Donuts coffee is the best coffee in the area and then they immediately cut to their &quot;Phantom Gourmet is sponsered by...&quot; segment and the first sponser is...voila! Dunkin&#039; Donuts! Can anyone say &quot;blatant conflict of interest&quot;? Because Dunkin&#039;s Donuts is crap coffee. Crap, I say! And no, I don&#039;t want to like them. I&#039;ve had their coffee. So, I don&#039;t trust any food critic that says Dunkin&#039; Donuts coffee is good because obviously they have no idea what the hell they&#039;re talking about. Besides they have a penchant for any seafood and cheese, and the last few picks Renee and I went to really weren&#039;t all that good. They weren&#039;t bad, but certainly not deserving of the rating they were given. I think Phantom Gourmat has lost his way.<br /><br /><a href="http://www.zinio.com/" target="_blank" >Zinio</a><br />I used to get my MacWorld issues this way, and I really enjoyed the idea of being able to have the blibrary of that and other trade publications on my laptop. However, the Reader application looks to be a poor implementation of security and viewing gimmicks wrapped around a PDF. This thing ran my processor so hot, the fan would just continuously run and the battery would die. On the plane, the noise wasn&#039;t so bad, but the lost battery life while just viewing a page just wasn&#039;t worth it. In addition every time I updated my OS (not even a clean install) or the Reader application, I had to re-enter my account information. It was DRM run amuck.<br /><br /><a href="http://www.angieslist.com/" target="_blank" >Angie&#039;s List</a><br />I&#039;ll be going for a refund on this one. Not only is it expensive for what it is, I also got spanked for a $15 enrollment fee. Seeing as how access was instantaneous I&#039;m going to infer that enrollment is all done automatically, as in there wasn&#039;t a physical person who had to confirm my information, I&#039;m not entirely sure what it was I was paying for with that. Also, I got a call from them taking a survey trying to find out who are the most called vendors in their database. Finally, I did call a person I found in their databases, and in chatting with him, learned for all the nonsense I&#039;ve gone through, that he&#039;s gone through more by direct result of their mismanagement and hard sales tactics and has yet to see after a year a discernable increase in business as a result of enrolling. Angie&#039;s List could very well be called an elaborate scam. I will note that when I asked for a refund after two weeks since activating my account, they were really cool about it.<br /><br /><a href="http://www.cnn.com/" target="_blank" >CNN</a><br />I&#039;m fully cognizant of how popular Facebook is. I don&#039;t use it, but I don&#039;t live in a cave, either. I also understand it is important to encourage (and I can&#039;t believe I&#039;m actually going to use this term) young people in most anything they try. <b>However</b>, <a href="http://www.ireport.com/docs/DOC-90591" target="_blank" >1.something million people protesting the new look on Facebook</a> does <b>not</b> make for front page news anywhere except on blogs. As one commenter to the story put it &quot;For many years, CNN.com and CNN Headline News were my primary source for news. I could rely on the website and the cable channel for an unbiased and unopinoinated recap of the headlines each day. Over the past several months, this has gradually but dramatically changed. Both the cable channel and the website have gradually but completely transformed into &quot;infotainment&quot;. It is increasingly difficult to distinguish CNN from the likes of People magazine...&quot; Exactly. That&#039;s why I balance out my North American news intake with <a href="http://news.bbc.co.uk/" target="_blank" >BBC</a> and <a href="http://www.economist.com/" target="_blank" >The Economist</a>.<br /><br />And just so we&#039;re really clear on my opinion with this Facebook story, it really ought to read something along the lines of &quot;1.something million Facebook users are given an object lesson that unless you own your own server (not just domain, but a physical server), you&#039;re just playing in someone else&#039;s turf and they don&#039;t have to answer to you or anyone else.&quot; Here endeth the lesson.]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080921-071341</id>
		<issued>2008-09-21T00:00:00Z</issued>
		<modified>2008-09-21T00:00:00Z</modified>
	</entry>
	<entry>
		<title>The Rules of Thumb: A Coding Standard</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080829-182017" />
		<content type="text/html" mode="escaped"><![CDATA[A few weeks ago, lover of rambling <a href="http://ramblings.aaronballman.com/2008/08/our_coding_standards.html" target="_blank" >Aaron Ballman posted a blog entry</a> based on a question I had about Real Software&#039;s coding standards. He took the standard straight out of the company manual itself. It was a fascinating read because it was a glimpse into how the &quot;pros&quot; do it. Really, no one should be able to code better in REALbasic than those guys.<br /><br />I thought I would share my coding standard. There are loose Rules Of Thumb I go by, and then there&#039;s the hard and fast variable naming convention I&#039;ve sorted out for myself to self-document my code.<br /><br />Some of this is obvious, some of this you may not agree with, but I have been consistent with it, and the refinements are decreasing with frequency as time goes on.<br /><br /><b>Scrollbars don&#039;t do me any favors.</b> <br />All of my coding these days is done on my 15&quot; MacBook Pro. Vertical limitations that come with a widescreen monitor (great for movies, not so much for text) and scrolling down to read code can be a distracting act in complex code. They both make for a working ethic that avoids scrollbars whenever possible. The upshot to this is that methods are now simple, succinct, and easily readable. The downside is that there are a lot more of them. But that&#039;s balanced by it being easier to write test code because then everything is abstracted out to simpler tools. Therefore, I avoid scrollbars when I can.<br /><br /><b>Non verb/adjective + noun variable names are evil.</b> (a.k.a. Follow a proper variable-naming standard (see below for details)).<br />Not to point out the painfully obvious, but a large part of what programming is really about is doing actions with data. Doing calculations, manipulating from one format to another, moving from one location to another, etc. You&#039;re always doing an action to something. Those somethings have a name, and I can all but guarantee it&#039;s not <tt>x</tt>, <tt>y</tt>, <tt>z</tt>, <tt>n</tt>, or <tt>i</tt>. Some would argue that <tt>x</tt> and <tt>y</tt> could easily be coordinates. Cool. I get that. But, they&#039;re coordinates in what for what? Even in a loop, the loop counter variable is referencing whatever array of items you&#039;re working with. I&#039;ve learned that a couple extra characters can mean all the difference in readability, especially when the nested loops get a bit deep (anything more than three and I get lost and then that goes back to my Scrollbars rule). Single letters and highly abbreviated variables are fine in example, but has no business in active production in my shop.<br /><br /><b>If I have to ask what the limit of something is, I&#039;m doing it wrong.</b><br />I have a folder in my development folder called &quot;Meanderings&quot; that contains all sorts of odd little bits of code for ideas that I had that were to satisfy a particular curiosity, an epiphany to be saved for later development, and a significant portion to just test the upper bounds of a particular feature (but those really fall into the &quot;Satisfy a curiosity&quot; category). However, if I find myself asking these questions or being curious while working on production code, that triggers the instinct to find a better way.<br /><br /><b>There is no substitute for a genuine lack of planning.</b><br />I actually got this off of a fortune cookie. It&#039;s not stating anything that hasn&#039;t been said with other phrases like &quot;An ounce of prevention is worth a pound of cure&quot;. I always, always, always right out a quick outline of the workflow, hierarchy, and brainstorm pseudo-code (<b>not</b> RB code), before I write one line of RB code. Always. It&#039;s okay to change approach once I realize it&#039;s not going to work as originally planned, but at least got the general idea and guidelines down before I got muddled in the details of syntax and exceptions.<br /><br /><i><b>The Variable Naming Standard</b></i> <br /><b>Rule 1:  Every variable must contain a noun</b><br />This is born from my rule of thumb that Non-verb/noun variable names are evil.<br /><br /><b>Rule 2:  Methods and functions must contain a verb</b><br /><br /><b>Rule 3:  Variables should contain an adjective, an article, or another noun that ties it to the process or object it belongs to</b><br /><br /><b>Rule 4:  Intrinsic data types must never be used in variable names.</b><br />Using words like String, Integer, Boolean, and their common abbreviations is a big no-no in my shop. Because what happens when I refactor a Boolean value to be an Integer? Not only do I have to change all of the calculations, I also have to change all of the variable names, too. That&#039;s too many changes in logic to follow in what is already probably a major change as it is. Why potentially complicate things more?<br /><br /><b>Rule 5:</b>  Non-method specific variables (i.e. Window, Module, Class variables) must begin with a capital letter.<br />It&#039;s in this case that I wish REALBasic was case-sensitive because that would really enforce this rule. All class properties and methods are always have capital letters, and by using verbs and adjectives, I can generally sort out from there whether it&#039;s a property, method, or function that I&#039;m calling. It&#039;s all about the context.<br /><br />That&#039;s it. Really simple rules but ones that make code so much more readable that I&#039;ve found so far that it does away with the need for code-specific comments, and comments instead now discuss larger system and architecture issues. Also, properly naming variables makes for easier refactoring, faster typing, and quicker ramp up times when going back to old code. Since variables are everywhere these are little, simple rules that make an enormous difference in the long run. <br /><br />So, let&#039;s look at an application of these rules:<br /><br />For...Next Loops<br />I see a lot of this in example code everywhere:<br />dim i as integer<br />for i = 0 to Ubound(ObjectArray)<br />	//do something<br />next<br /><br />But, in looking at that, I&#039;ve learned the hard way that it has no practical application in working code. The obvious questions:<br />What is <tt>i</tt>? We know that it&#039;s the loop variable, but <tt>i</tt> is iterating through something, so what&#039;s that something?<br />Where are the values 0 and 10 coming from? They must represent the counting of something, so what are they?<br /><br />Here&#039;s how I do it:<br /><pre>
dim thisObject as integer = 0
dim firstObject as integer = 0
dim lastObject as integer = 0 to Ubound(ObjectArray)

for thisObject = firstObject to lastObject
	if ObjectArray(thisObject) <> nil then
		dim theObject as ExampleObject = ObjectArray(thisObject)
		//do something
	end if
next
</pre><br />Yes, it&#039;s more code; a lot more code, in fact. But is there any question what it is that I&#039;m doing or what I&#039;m working with? One read of this gives almost immediately the context in which we&#039;re looping through values. I&#039;ll even do the same thing in Applescript:<br /><pre>
set thisObject to 0
set firstObject to 0
set lastObject to (get count of objects in ObjectArray)

repeat with thisObject from firstObject to lastObject
	if (item thisObject of ObjectArray) is not nil then
		set theObject to item thisObject of ObjectArray
		--do something
	end if
end repeat
</pre><br /><br />Consistently following my Rules of Thumb I just know has helped avoid numerous architectural and common coding errors. I&#039;m definitely writing very different code than what I before, and that&#039;s in a good way. Since implementing them in my work ethic I find myself spending a lot more time <i>working</i> on the code rather than just reading the code. One lessons I&#039;ve learned early onread from almost all of the books I&#039;ve is to create a coding standard that works for me, refine it as I learn, and be consistent.<br /><br />I&#039;ve always thought that REALbasic ought to include information about good coding practices in with the tutorial. Mind you, I haven&#039;t read the tutorial in ages (since version 5.5.5 to be exact), but I think that even discussing good variable naming for even a few paragraphs would go a long way towards making a beginner&#039;s code much more maintainable in what is a very crucial stage in their work. Everyone over time settles on some kind of coding convention over the course of their work, even if some people will poo-poo coding standards as being too much work, but I would rather had known about this stuff when I was really just first starting out. I think it would have made learning this stuff a whole lot easier.]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080829-182017</id>
		<issued>2008-08-29T00:00:00Z</issued>
		<modified>2008-08-29T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Options.</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080829-174357" />
		<content type="text/html" mode="escaped"><![CDATA[Little over four years ago, I picked up my first copy of REALbasic. I was in this weird transition in my job going from full-time graphic designer to digital asset manager, a thoroughly technical position.<br /><br />Since I&#039;ve started with that version, I&#039;ve made... <br /><ul>
	<li>interface mock-ups.</li>
	<li>a moderately successful file cataloger that I've nurtured through multiple versions.</li>
	<li>an enterprise-wide tool to assist in my digital asset management duties.</li>
	<li>an XML/XSLT parser-transformer that has saved my company thousands in license fees for a product that was way more than what was needed at the time.</li>
	<li>countless little widgets that have not only made my Day Job easier but has pulled my behind out of the fire more than once.</li>
</ul><br /><br />...and I&#039;m currently developing what I think is a rather innovative music editor that, while it won&#039;t change the music world, I&#039;d like to think will get some attention and fill what I see is a gaping hole in similar products. I now have enough code in my personal library, not including the innumerable examples I&#039;ve downloaded, that I have a number of options for approaches to similar problems.<br /><br />I&#039;ve read numerous books and websites about all levels and aspects of software development. I get it, I&#039;m good at it, and I really enjoy it. I find the work to be very satisfying (in the long run, mostly). I have enough books in my library and links in my personal wiki that if I have a question about most any topic, I have a fair number of options to choose from before I even think about posting to the mailing lists or the forums.<br /><br />I&#039;ve been to Real World and got the confirmation and validation that I was seeking for my work after four years of both serious production code and tinkering. I now know that not only will my not blow up in my face anytime soon, but I&#039;m actually following best practices. I don&#039;t necessarilly follow ALL of them (I don&#039;t think it&#039;s possible), but I follow enough of them that I have a solid, comprehensive foundation. The conference was a blast, and I&#039;m already planning a couple family trips around the next conference in May.<br /><br />I&#039;ve since worked with PHP, Javascript, and I work a ton with Applescript at The Day Job. I&#039;ve explored other language options like C#, Objective-C, and Java. But as with most things, these are never as good as the first. They&#039;re cool, but they&#039;re not nearly as fun. I&#039;ve explored enough options in programming languages that I know I will probably never pick up Python or Ruby, on Rails or otherwise. I find myself keep coming back to REALbasic to itch the programming &quot;Ooh, wouldn&#039;t it be cool do [insert clever function here]&quot; bug.<br /><br />I&#039;ve enjoyed working with REALbasic so much that I want to increase the amount of time I get to work with it and I&#039;ve gotten the freelance bug again. I&#039;ve freelanced before but doing graphic design and book building, and that was years ago. I enjoyed the variety of work, though I found the hustle a bit tough but this was before the Internet was a developed enough tool to make finding jobs easier. Now, though, there are options, and there still way more options for developers than there are graphic designers, and I&#039;ve already begin sniffing around.<br /><br />Even though there are monetarily free options out there for finding work, I&#039;ve been working up the courage to drop the coin on Real Software&#039;s Developer Program. I know I&#039;ve spent a lot of money on licenses over the years, but a software license a solid purchase. I know for a fact I get what I pay for, and all success and failure is attributed solely to me. The developer program, on the other hand, is a gamble, and I don&#039;t even buy so much as a lottery ticket. I&#039;m just not the gambling type, and that was part of the reason why I decided to move away from freelancing and get myself a permanent gig so many years ago. <br /><br />If it takes me a lot of effort to spend one dollar on a silly lottery ticket, then $500+ is whole other issue. But, it would make sense, wouldn&#039;t it, that the best source for REALbasic work would be from Real Software? Right? Sure, and, as with anything, I&#039;ve heard both good and bad things about the program, and all of it pretty much evens out in the end, so it seems a safe bet. I wasn&#039;t too terribly keen on there being support mixed in there, as I would prefer to purchase that <i>a la carte</i>, but I could live with it. In fact, I asked for a developer program <i>sans</i> support at Real World during the feedback session hoping I could score it at a cheaper price.<br /><br />However, Real Software has decided to remove the support options but at the same time double the price as well. Huh. I&#039;m sure there was sound business logic behind the decision. However, in looking at it now, joining the developer program isn&#039;t so appealing anymore.<br /><br />I guess it&#039;s a good thing I&#039;ve got options.]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080829-174357</id>
		<issued>2008-08-29T00:00:00Z</issued>
		<modified>2008-08-29T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Knowledge is free, but getting published costs money, revisited: RB Developer</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080718-063033" />
		<content type="text/html" mode="escaped"><![CDATA[There&#039;s no way I could let Marc Zeeder&#039;s recent decision to go electronic only and the resulting debate go without comment, simply because I&#039;m amazed that there&#039;s even a serious debate about this. I understand that not everyone is going to like the same things I do, but come on, man. All of this fuss isn&#039;t worth it, but at the same time I feel that there are larger issues at play here.<br /><br /><a href="http://www.rbdeveloper.com/" target="_blank" >RB Developer</a> is one of the few consistently high quality sources of <a href="http://www.realsoftware.com/products/realbasic/index.php" target="_blank" >REALbasic</a>-specific (and otherwise) information out there. To pass on the magazine just because you won&#039;t get a print and bound version <b>and</b> a refusal to print it out yourself, I feel, is more than a little short-sighted towards a valued community resource.<br /><br />RB Developer is a flagship product of the REALbasic eco-system, and is a valuable resource for anyone getting into REALbasic for the first time, veterans and beginners alike. I&#039;m sure it has had content at one time or another that has pulled every reader&#039;s hide out of the fire on at least one occaision. To dismiss it so swiftly and/or casually is to ignore the contributions it has made to the community as a whole.<br /><br />Without knowing his circulation numbers and what percentage that a few dozen print subscribers represents, though it is easy to infer that it&#039;s not very large, I feel that the survivability of the publication grossly outweighs the need for readers to have something in their hands. It is really about the content and not the medium in this case. From my work at The Day Job*, I&#039;m very well aware of the risks that Marc is taking by going to PDF only and I appluad him for thinking of the survival of the magazine over all else. <br /><br /><a href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry060730-082015" target="_blank" >Knowledge is free, but getting published costs money.</a> It&#039;s as simple as that. So, do us all a favor and keep your subscription, and take one for the team, will ya, fellas?<br /><br /><hr/><br /><br /><b>*</b> <a href="http://www.arbp.org/blog/topic/?t=6" target="_blank" >Now that The Day Job has been &quot;outed&quot; for me</a>, Manager of Media Services at <a href="http://www.jbpub.com/" target="_blank" >Jones &amp; Bartlett Publishers</a>, I feel that I should explain something about the job because the term &quot;Media&quot; can mean a lot of things. <br /><br />One of the core functions of my position is managing the company&#039;s digital assets, meaning all of the files used to create our books. Because of the advent of desktop publishing and the purely digital workflow just little over 20 years ago and the evolution to computer to plate technologies, we make PDFs for everything. Printers, as a rule, won&#039;t accept anything else, and when we have to send them page layout files (Quark or InDesign), they charge us out the nose and convert all of it to PDF anyway. So, we have <b>a lot</b> of PDFs. <br /><br />Because PDFs are now so ubiquitous (albeit rather quickly), we get a lot of people knocking on our door trying to get a hold of them and the discussions that new requests generate are surprisingly dynamic for what appears on the surface to be such a simple thing. What was originally a job stashing CDs in a reasonable semblance of order in cardboard boxes and cabinets has evolved over the past almost eight years into managing six terabytes of data on a massive server and even more physical media in locked cabinets where I have been charged with policing who gets our content thus causing me to read up on as much as I can about copyright law and the specifications of PDFs themselves.<br /><br />Basically, I have to ensure that people don&#039;t get a hold of the PDFs of our titles so that people don&#039;t go off and print unauthorized copies of our titles to sell for profit, and ensure that we&#039;re not redistributing content that we don&#039;t have permission to do so with. Again, knowledge is free but getting published costs money.]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080718-063033</id>
		<issued>2008-07-18T00:00:00Z</issued>
		<modified>2008-07-18T00:00:00Z</modified>
	</entry>
	<entry>
		<title><a href="http://www.realsoftware.com/products/realbasic/" target="_blank" >REALBasic 2008 Release 3</a>: A new addition to the Dock.</title>
		<link rel="alternate" type="text/html" href="http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080711-162001" />
		<content type="text/html" mode="escaped"><![CDATA[Sometimes I get to a release of <a href="http://www.realsoftware.com/products/realbasic/" target="_blank" >REALbasic</a> that satisfies a particular balance of features, usability, and stability for myself. I&#039;ve tried out just about every single release of <a href="http://www.realsoftware.com/products/realbasic/" target="_blank" >REALbasic</a> since version 5.5.5. (I think I let one year&#039;s subscription lapse because of a lack of funds, but I&#039;ll never let that happen again). <br /><br />For a real long time, I was using 2007r4. At the time, I was doing a lot of work automating Office v.X and 2004. But then Microsoft announced they weren&#039;t going to support VB in the new version of Office for that Mac (and now they are in the next version. I really despise profiteering via obscelence like that.) But, I stuck with 2007r4 because of the newly implemented code folding feature and while other new features were added, there really weren&#039;t any that were all compelling for my needs, and some were a bit overwhelming and I didn&#039;t want to deal with the distraction. (I know that doesn&#039;t make much sense, but it does to me. Just bear with me here). But with 2007r4, I went on to code all sorts of applications for myself and at The Day Job that resulted in good successes.<br /><br />Now 2008r3 has come out and I have a new favorite release for only two but very big reasons. <br /><br /><b>Profiler</b> <br />I&#039;m a big fan of the book <a href="http://www.cc2e.com/" target="_blank" >Code Complete, 2e by Steve McConnell</a>. Even when I was still less than half way through the book, my code improved dramatically. One of my favorite features of the book are the margin quotes from a variety of computer science, developers, and the like because they make me realize that the issues I face in doing my work are the very same as theirs (sometimes on a different plane of programming reality and sometimes just as niggling as mine). One of my favorites that I&#039;ve recently come across is this by <a href="http://www.flounder.com/" target="_blank" >Joseph Newcomer</a>:<br /><br /><blockquote>No programmer has <i>ever</i> been able to predict or analyze where performance bottlenecks are <i>without data</i>. No matter where you think it&#039;s going, you will be surprised to discover that it is going somewhere else.</blockquote><br /><br />This is particularly relevant because The Widget (that music app I&#039;ve been grousing about for the past two years) is finally getting close to v1.0 and I&#039;ve begun testing and optimizing as necessary (but only as necessary). <br /><br />I&#039;ve only used Profiler a couple of times, and already it&#039;s been a real eye-opener. I could have sworn the most amount of time would have been spent in the drawing routines. There are some redundencies in there (some purposefully, some not) and I was ready to dig in and sort out ways to make them faster. Not only was I right but, much to my surprise, in a dead simple test (open the app, add the test data, perform standard functions, and quit) there was this one simple drawing-related function with a big ol&#039; <code>Select...Case</code> statement that actually got called over 7000 times. I must have looked like a cartoon character when my eyes bugged out of my head. As soon as I saw that, I realized that perhaps that&#039;s why scrolling and mouse drags were a bit choppy.<br /><br />But what&#039;s really nice about Profiler is that I don&#039;t need to enter all sorts of degbugging code to get to some very fundamental information about how the application works. I was trying to sort out a way to automagically place code into each method, function, and event to get information I need to properly assess the application. I still have a need because I have questions that Profiler can&#039;t answer (yet), but now I know I can get what I need with a lot less code. Profiler alone is worth the upgrade, and I think the current implementation it is an excellent start to this feature.<br /><br /><b>Structs and Enums In Classes</b> <br />From <a href="http://www.cc2e.com/" target="_blank" >Code Complete, 2e</a>, page 304: <br /><blockquote><b><i>Use enumerated types as an alternative to boolean values.</i></b>  Often a boolean a variable isn&#039;t rich enough to express the meanings it needs to. For example, suppose you have a routine return <i>true</i> if it has successfully performed its task and <i>False</i> otherwise. Later you might find that you really have two kinds of <i>False</i>. The first kind means that the task failed and the effects are limited to the routine itself; the second kind means that the task failed and caused a fatal error that will need to be propogated to the rest of the program. In this case, an enumerated type with the values <i>Status_Success</i>, <i>Status_Warning</i>, and <i>Status_FatalError</i> would be more useful than a boolean with the values <i>true</i> and <i>false</i>. This scheme can easily be expanded to handle additional distinctions in the kinds of success and failure.</blockquote><br /><br />I put in the feature request less than a month ago for allowing structs and enums in classes  specifically to have this ability. While working on the widget, I came across a situation where a simple boolean wasn&#039;t going to be enough. Certainly, I could have used an integer value, constants, a couple of methods in a class to act as the enumeration, but why re-invent the wheel and try to remember just what the heck <code>0x0A</code> meant? Give me the &quot;visual&quot; confirmation any day.<br /><br />Finally, allowing structs and enums in classes allows for easier porting of C- and Java-based code over to <a href="http://www.realsoftware.com/products/realbasic/" target="_blank" >REALbasic</a> and promotes their encapsulation. Becaue, somehow, I don&#039;t think the chord generation engine is really going to care about the success values of file opening and saving.<br /><br /><b>In Conclusion</b> <br />I tend to upgrade everything with wild abandon, and get bitten occaisionally as a result, but I rarely stick with those upgrades, either because there isn&#039;t enough to keep me interested or just bugs in general. I&#039;m finicky. But not this time. Now there is a year&#039;s worth of bug fixes, two new bug reporting systems (one internal, one on their site) where I&#039;ve gotten quick responses resulting in positive outcomes, a built-in profiling engine, and more freedom to do what I want when I want with minimal hassle. <a href="http://www.realsoftware.com/products/realbasic/" target="_blank" >REALbasic 2008r3</a> has earned a hard-earned spot on my Dock and they have a genuine win with this latest version. If you haven&#039;t looked at it, you should.]]></content>
		<id>http://personal.oatmealandcoffee.com/blog/index.php?entry=entry080711-162001</id>
		<issued>2008-07-11T00:00:00Z</issued>
		<modified>2008-07-11T00:00:00Z</modified>
	</entry>
</feed>
