<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-13425130</id><updated>2011-04-21T13:05:53.294-05:00</updated><category term='Cocoa'/><category term='MagicBrush-Photo'/><title type='text'>GreenWave Software Weblog</title><subtitle type='html'>What's new and notable from GreenWave Software</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-13425130.post-4785230885003491158</id><published>2008-04-12T10:08:00.001-05:00</published><updated>2008-04-12T10:09:35.029-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MagicBrush-Photo'/><title type='text'>Image Uploading</title><content type='html'>One of the features that has always been planned for &lt;a href="http://www.greenwavesoftware.com/"&gt;MagicBrush-Photo&lt;/a&gt; has been the ability to upload or publish images to &lt;a href="http://picasa.google.com/"&gt;Picasa&lt;/a&gt; and &lt;a href="http://www.flickr.com/"&gt;Flickr&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Right now I'm in the midst of incorporating this feature into the release plan.  The &lt;a href="http://code.google.com/p/gdata-objectivec-client/"&gt;GData APIs&lt;/a&gt; for cocoa are making this straight forward enough, but the tricky part is making the experience fit in with the overall Mac user expectation.&lt;br /&gt;&lt;br /&gt;For instance, a user has a reasonable expectation of being able to store their account information for &lt;a href="http://picasa.google.com/"&gt;Picasa&lt;/a&gt; or &lt;a href="http://www.flickr.com/"&gt;Flickr&lt;/a&gt; in their keychain.&lt;br /&gt;&lt;br /&gt;Once you can authenticate to either site, you need to present the complex behavior of the web application in a simplified manner.  Should users be able to only upload?  Should they be able to view previously uploaded images (to ensure they're not duplicating things)?  Should they be able to edit tags and descriptions for images already uploaded, or just when they initially upload them?  Complexity grows quickly.&lt;br /&gt;&lt;br /&gt;Stay tuned to see how &lt;a href="http://www.greenwavesoftware.com/"&gt;MagicBrush-Photo&lt;/a&gt; handles these.  If you are interested in helping beta test these features, &lt;a href="mailto:feedback@greenwavesoftware.com"&gt;give me a shout&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-4785230885003491158?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/4785230885003491158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=4785230885003491158' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/4785230885003491158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/4785230885003491158'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2008/04/image-uploading.html' title='Image Uploading'/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-249829424373363244</id><published>2008-04-09T23:28:00.001-05:00</published><updated>2008-04-09T23:28:46.952-05:00</updated><title type='text'>Moving Toward 1.2</title><content type='html'>&lt;a href="http://www.greenwavesoftware.com/index.php"&gt;MagicBrush-Photo&lt;/a&gt; was stalled slightly at version 1.1.5.  I knew what I wanted to add by way of features, and had a development branch working, but unfortunately my "paying job" was consuming more of my time and energy than I planned.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;An Aside&lt;/h4&gt;&lt;br /&gt;I should probably caveat that I'm not your typical programmer (at least I like to think I'm not).  I've got a full-time non-programming management job at a fortune 500 company within the IT organization.  For the past year I've been loaned out on a special project team doing a bunch of neat things within a couple of our markets.  I've run the gamut from launching new products and services to implementing different business model pilots and a slew of other cool things.  &lt;br /&gt;&lt;br /&gt;It's been fun (mostly), and a lot of hard work.&lt;br /&gt;&lt;br /&gt;But it has seriously diminished my free time to program and enhance my software.  At the same time, Leopard has been released, and the niche I had targeted is beginning to transform into a very competitive landscape.  It would be easy to back off and let MagicBrush-Photo languish.&lt;br /&gt;&lt;br /&gt;But that's not what I want to do.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Why I Program&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;1. I like to solve interesting problems.&lt;br /&gt;2. I like to have control of how I work.&lt;br /&gt;3. I like the Macintosh platform.&lt;br /&gt;4. I like the idea of "not working for the man".&lt;br /&gt;5. I like being able to keep my coding skills fresh.&lt;br /&gt;&lt;br /&gt;While my morale regarding GreenWave Software was a little down early in the year, I've found it helps to remember why I enjoy programming in the first place.  I don't get to use this set of skills much at work (and frankly don't think I would enjoy it if I had to code in a corporate environment).  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When I stop and think about these reasons, I find I am more focused on moving the needle with MagicBrush-Photo and a few other projects I have in the hopper.  &lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Now, back to coding ;-)&lt;/h4&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-249829424373363244?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/249829424373363244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=249829424373363244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/249829424373363244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/249829424373363244'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2008/04/moving-toward-12.html' title='Moving Toward 1.2'/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-1133823815810418658</id><published>2008-01-23T21:49:00.001-06:00</published><updated>2008-01-23T21:49:44.919-06:00</updated><title type='text'>Software Concepts</title><content type='html'>I've been in a little rut lately, with insufficient time to make major changes to &lt;a href="http://www.greenwavesoftware.com/index.php"&gt;MagicBrush-Photo&lt;/a&gt;, though I believe that will change soon.  &lt;br /&gt;&lt;br /&gt;At the moment, driving to and from my paying job is about the only time I seem to have to think about the programming.  I've got a few new features to implement in &lt;a href="http://www.greenwavesoftware.com/index.php"&gt;MagicBrush-Photo&lt;/a&gt;, but I've also got a couple of simple project ideas I'm kicking around.  &lt;br /&gt;&lt;br /&gt;Here for posterity (and any comments) they are:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;A better syncing tool to keep my iTunes libraries in synch across multiple machines and user accounts.  On our home machine, my wife and son have their own iTunes accounts, we have a back-up of the library on another shared drive, and I use one (or two) laptops for most of my music purchasing.  Keeping everything in synch is a pain.  I've looked at various solutions from &lt;a href="http://www.macosxhints.com/article.php?story=20070225092702347"&gt;rsync&lt;/a&gt; to &lt;a href="http://www.cis.upenn.edu/~bcpierce/unison/"&gt;Unison&lt;/a&gt; to &lt;a href="http://www.martian.com/SlingShot.html"&gt;Slingshot&lt;/a&gt;, but not been really happy.  What I'd like is:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;	&lt;li&gt;an easy method to identify differences between directories (music or otherwise)  &lt;/li&gt;&lt;br /&gt;	&lt;li&gt;The ability to synch those two directories at a file level (I don't need file diff capability)&lt;/li&gt;&lt;br /&gt;	&lt;li&gt;A clean UI for managing these tasks&lt;/li&gt;&lt;br /&gt;	&lt;li&gt;The ability to set up synch rules and run the process via script or timed event&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;I think I know how to do this, so I might just whip one out as a coding refresher and to get fully up to speed with Objective-C 2.0&lt;br /&gt;&lt;/li&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;A tool to help create and maintain a &lt;a href="http://en.wikipedia.org/wiki/Swot_analysis"&gt;SWOT analysis&lt;/a&gt;.  This is definitely a niche need, but I think it could be pretty cool if done right.   God knows I'd love to have such a tool in my daily job.  My ideal solution would force the user to iterate over their Strengths, Weaknesses, Opportunities, and Threats to clarify their thinking as well as &lt;a href="http://telecollege.dcccd.edu/mgmt1374/book_contents/2planning/action_plans/action.htm"&gt;document the action plans&lt;/a&gt; that emerge from a true SWOT analysis.  Think of it as &lt;a href="http://www.davidco.com/what_is_gtd.php"&gt;GTD&lt;/a&gt; for business planning.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-1133823815810418658?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/1133823815810418658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=1133823815810418658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/1133823815810418658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/1133823815810418658'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2008/01/software-concepts.html' title='Software Concepts'/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-1889520959312944252</id><published>2007-10-30T20:17:00.001-05:00</published><updated>2007-12-10T21:08:27.165-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MagicBrush-Photo'/><title type='text'>MagicBrush-Photo Update</title><content type='html'>&lt;h1&gt;MagicBrush-Photo has been updated to Version 1.1&lt;/h1&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;u&gt;New features in this version:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Added ability to access image metaData via info toolbar item.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Added ability to back-up effects in application.&lt;/li&lt;br /&gt;&lt;li&gt;Added ability to restore effects from back-up in application.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Added ability to import and export custom effects for sharing.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The full changelog can be reviewed &lt;a href="http://www.greenwavesoftware.com/updates.php"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We also have introductory pricing.  Use coupon code &lt;strong&gt;CPN4050708079&lt;/strong&gt; when purchasing and receive 50% off the purchase price.&lt;br /&gt;&lt;br /&gt;In addition to new features in &lt;a href="http://www.greenwavesoftware.com/downloads.php"&gt;MagicBrush-Photo&lt;/a&gt;, I have just redone my &lt;a href="http://www.greenwavesoftware.com/index.php"&gt;website&lt;/a&gt;.  Check it out and post any feedback in the forums.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-1889520959312944252?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/1889520959312944252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=1889520959312944252' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/1889520959312944252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/1889520959312944252'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2007/10/magicbrush-photo-update.html' title='MagicBrush-Photo Update'/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-6157556859202627155</id><published>2007-08-20T21:35:00.001-05:00</published><updated>2007-08-20T21:35:15.784-05:00</updated><title type='text'>The Tao of Mac - Apple Shoots Self In Foot With iMovie'08</title><content type='html'>&lt;p&gt;&lt;a href="http://the.taoofmac.com/space/blog/2007/08/17/2108"&gt;The Tao of Mac - Apple Shoots Self In Foot With iMovie'08&lt;/a&gt;: "&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This newfound myopia in software design (let’s make it cooler, flashier and more fun, never mind substance or completeness) is why I think iPhoto will never be as remotely useful as Aperture, nor will we ever see a ‘middle-of-the-road” photography product from Apple.&lt;br /&gt;&lt;br /&gt;After all, they just torpedoed their video equivalent by competing with themselves and failing."&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;(Via &lt;a href="http://the.taoofmac.com/space/blog/2007/08/17/2108"&gt;&lt;/a&gt;.)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;I hope not.  I don't want Apple to compete with &lt;a href="http://www.greenwavesoftware.com/MagicBrush-Photo/"&gt;MagicBrush-Photo.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Try it now.&lt;/p&gt;  &lt;br /&gt;&lt;p&gt;If you are one of the first 100 people to purchase using coupon code:&lt;/p&gt; &lt;br /&gt;&lt;p&gt;CPN5059878658&lt;/p&gt;&lt;br /&gt;&lt;p&gt;you'll get introductory pricing at 50% off.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-6157556859202627155?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/6157556859202627155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=6157556859202627155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/6157556859202627155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/6157556859202627155'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2007/08/tao-of-mac-apple-shoots-self-in-foot.html' title='The Tao of Mac - Apple Shoots Self In Foot With iMovie&amp;#39;08'/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-4981385160258153334</id><published>2007-07-02T22:49:00.001-05:00</published><updated>2007-07-02T22:52:40.752-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MagicBrush-Photo'/><category scheme='http://www.blogger.com/atom/ns#' term='Cocoa'/><title type='text'>A more complex Undo/Redo example</title><content type='html'>&lt;p&gt;One of the issues I was having with &lt;a href="http://www.greenwavesoftware.com/magicbrush-photo/"&gt;MagicBrush-Photo&lt;/a&gt; concerned improper behavior of &lt;a href="http://developer.apple.com/documentation/Cocoa/Conceptual/UndoArchitecture/index.html#//apple_ref/doc/uid/10000010i"&gt;undo/redo functionality&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;Undo/Redo is fully described in the &lt;a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSUndoManager_Class/index.html?http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSUndoManager_Class/Reference/Reference.html"&gt;Apple documentation&lt;/a&gt; and there are lots of samples available, usually highlighting what developers "get for free" when they follow standard practices in Cocoa development. Of course, since these samples are "selling" Cocoa development, they are often not the most complex examples of behavior. For example, it will be a simple setting of a value/property on an object either directly or &lt;a href="http://homepage.mac.com/mmalc/CocoaExamples/controllers.html"&gt;using bindings&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;Naturally, it was one of these more complicated scenarios I was running up against.&lt;/p&gt;    &lt;p&gt;Within &lt;a href="http://www.greenwavesoftware.com/magicbrush-photo/"&gt;MagicBrush-Photo&lt;/a&gt;, the application of a brush effect to an image (or layer) is not as simple as setting a property. The edit/brush cycle begins with the mouseDown event, and ends with the mouseUp event. So the functionality to undo is any changes to the image or layer from mouseDown to mouseUp. Following the documentation, I got that working pretty easily. Here is some code to show how it works....&lt;/p&gt;    &lt;p&gt;The document's (IBAction)mouseDown:(id)sender method calls tailored methods based on the layer type being edited. Here is the method for an image layer:&lt;/p&gt;&lt;blockquote&gt;&lt;pre class="body"&gt;&lt;br /&gt;- (void)mouseDownImageLayer:(NSEvent*)theEvent;&lt;br /&gt;{&lt;br /&gt;NSDictionary *undoState = [NSDictionary dictionaryWithObjectsAndKeys:&lt;br /&gt;                           [self activeLayer], @"activeLayer",&lt;br /&gt;                           [[self activeLayer] getLayerImage], @"layerImage",&lt;br /&gt;                          nil];&lt;br /&gt;[[self undoManager] registerUndoWithTarget:self selector:@selector(undoDrag:) object:undoState];&lt;br /&gt;[[self undoManager] setActionName:NSLocalizedString(@"Brush Stroke", @"undo (brush stroke)")];&lt;br /&gt;[_mask setValue:[[GWBrushesController sharedBrushesController] imageForBrush] forKey:@"inputImage"];&lt;br /&gt;[self mouseDragged:theEvent];&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;This code takes the current layer image and "snaps" a copy to register with the NSUndoManager for the document. It also sets what selector to use to perform the undo operation when invoked.&lt;/p&gt;    &lt;p&gt;And here is the undoDrag method:&lt;/p&gt;    &lt;blockquote&gt;&lt;pre class="body"&gt;&lt;br /&gt;- (void)undoDrag:(id)undoState&lt;br /&gt;{&lt;br /&gt;id theLayer = [undoState valueForKey:@"activeLayer"];&lt;br /&gt;CIImage *theImage = [undoState valueForKey:@"layerImage"];&lt;br /&gt;[theLayer setLayerImage:theImage];&lt;br /&gt;[self refresh];&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;p&gt;This code is straight forward and works for undoing a brush stroke.&lt;/p&gt;    &lt;p&gt;My issue came with redo, which according to the &lt;a href="http://developer.apple.com/documentation/Cocoa/Conceptual/UndoArchitecture/index.html#//apple_ref/doc/uid/10000010i"&gt;documentation&lt;/a&gt; should "just happen:"&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;"&lt;a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSUndoManager_Class/index.html?http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSUndoManager_Class/Reference/Reference.html"&gt;NSUndoManager&lt;/a&gt; is a general-purpose recorder of operations for undo and redo. You register an undo operation by specifying the object that is changing (or the owner of that object), along with a method to invoke to revert its state, and the arguments for that method. NSUndoManager groups all operations within a single cycle of the run loop, so that performing an undo reverts all changes that occurred during the loop. Also, when performing undo an NSUndoManager saves the operations reverted so that you can redo the undos."&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Unfortunately, that was not the case. Instead, the "Redo" item in the edit menu would remain grayed out and unavailable after an Undo was performed.&lt;/p&gt;&lt;p&gt;So what was causing my strange behavior?  It took a discussion with an Apple Engineer at &lt;a href="http://developer.apple.com/wwdc/"&gt;WWDC&lt;/a&gt; to determine.  Of course, it only took them five minutes to identify the issue ;-)&lt;/p&gt;&lt;p&gt;Since I am directly invoking the undo manager and managing the undo stack for each document, I have to register the redo action from within the method referenced by the undo selector.  So, my undoDrag method needs to becomes:&lt;/p&gt;    &lt;blockquote&gt;&lt;pre class="body"&gt;&lt;br /&gt;- (void)undoDrag:(id)undoState&lt;br /&gt;{&lt;br /&gt;  id theLayer = [undoState valueForKey:@"activeLayer"];&lt;br /&gt;  CIImage *theImage = [undoState valueForKey:@"layerImage"];&lt;br /&gt;  NSDictionary *redoState = [NSDictionary dictionaryWithObjectsAndKeys:&lt;br /&gt;                             [self activeLayer], @"activeLayer",&lt;br /&gt;                             [[self activeLayer] getLayerImage], @"layerImage",&lt;br /&gt;                             nil];&lt;br /&gt;&lt;br /&gt;  [[self undoManager] registerUndoWithTarget:self&lt;br /&gt;                      selector:@selector(undoDrag:)&lt;br /&gt;                      object:redoState];&lt;br /&gt;                                    &lt;br /&gt;  [[self undoManager] setActionName:NSLocalizedString(@"Brush Stroke", @"redo (brush stroke)")];&lt;br /&gt;  [theLayer setLayerImage:theImage];&lt;br /&gt;  [self refresh];&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;In hindsight, the solution seems very obvious.  However, I know from pouring over the documents and second guessing myself to no end, it was not that simple.  That's why I'm posting it here, so some other poor coder might save themselves the anguish of beating their head against the wall.&lt;/p&gt;&lt;p&gt;I hope it helps someone.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-4981385160258153334?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/4981385160258153334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=4981385160258153334' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/4981385160258153334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/4981385160258153334'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2007/07/more-complex-undoredo-example.html' title='A more complex Undo/Redo example'/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-2788937087949925172</id><published>2007-05-19T10:58:00.001-05:00</published><updated>2007-05-19T10:58:11.575-05:00</updated><title type='text'>MagicBrush-Photo - Alpha Release</title><content type='html'>&lt;a href="http://www.greenwavesoftware.com/magicbrush-photo/"&gt;MagicBrush-Photo&lt;/a&gt; has made it to &lt;a href="http://www.greenwavesoftware.com/_Media/MagicBrush-Photo-alphaR1.zip"&gt;alpha status&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;While there are a few items opened still, I'm working with testers to get enough feedback to help me focus on the technical gaps to close at &lt;a href="http://developer.apple.com/wwdc/"&gt;WWDC&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'm still looking for testers, so if you want pinpoint editing or retouching for photos on your mac, &lt;a href="mailto:feedback@greenwavesoftware.com"&gt;contact me&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-2788937087949925172?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/2788937087949925172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=2788937087949925172' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/2788937087949925172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/2788937087949925172'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2007/05/magicbrush-photo-alpha-release.html' title='MagicBrush-Photo - Alpha Release'/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-4501338035922758337</id><published>2007-05-01T21:16:00.001-05:00</published><updated>2007-05-02T05:33:36.647-05:00</updated><title type='text'>MagicBrush-Photo is nearing release!</title><content type='html'>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;&lt;br /&gt;&lt;br /&gt;&lt;html&gt;&lt;head&gt;&lt;title&gt;&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;a href="http://www.greenwavesoftware.com/magicbrush-photo/"&gt;MagicBrush-Photo&lt;/a&gt; is nearing release with functionality complete as we move into beta testing.&lt;br&gt;&lt;br /&gt;    Just what functionality is this?&lt;br&gt;   &lt;ul&gt;&lt;li&gt;Advanced image editing capabilities based on Mac OS X 10.4 "Tiger" &lt;a href="http://www.greenwavesoftware.com/magicbrush-photo/become_a_tester.html"&gt;Core Image&lt;/a&gt; technology. Specifically you have the ability to:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Spot editing to retouch photos&lt;/li&gt;              &lt;li&gt;Compositing of multiple photo and editing layers&lt;/li&gt;&lt;li&gt;Cropping final output images&lt;/li&gt;&lt;li&gt;Adding text annotations such as copyright notices to your images&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;All of this is available through the power of &lt;a href="http://www.greenwavesoftware.com/magicbrush-photo/become_a_tester.html"&gt;Core Image&lt;/a&gt; which means you have access to all of the effects built into the operating system.&lt;/li&gt;&lt;li&gt;Additionally, you can create groupings of effects that are applied as a single operation, and&lt;/li&gt;&lt;li&gt;Save those effects groups and settings so they are always available to you.&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://www.greenwavesoftware.com/magicbrush-photo/"&gt;MagicBrush-Photo&lt;/a&gt; is able to read and write the most common image formats, as well as RAW camera formats supported by the operating system.&lt;br&gt;&lt;p&gt;Learn More about &lt;a href="http://www.greenwavesoftware.com/magicbrush-photo/"&gt;MagicBrush-Photo&lt;/a&gt; by visiting our &lt;a href="http://www.greenwavesoftware.com/magicbrush-photo/samples_tutorials/"&gt;Samples and Tutorials&lt;/a&gt; online.&lt;br&gt;&lt;br /&gt;    &lt;a href="http://www.greenwavesoftware.com/magicbrush-photo/become_a_tester.html"&gt;Contact us&lt;/a&gt; if you are interested in participating in the beta testing of &lt;a href="http://www.greenwavesoftware.com/magicbrush-photo/"&gt;MagicBrush-Photo&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;/body&gt;&lt;br /&gt;&lt;/html&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-4501338035922758337?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/4501338035922758337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=4501338035922758337' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/4501338035922758337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/4501338035922758337'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2007/05/magicbrush-photo-is-nearing-release.html' title='MagicBrush-Photo is nearing release!'/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-113695398227373551</id><published>2006-01-10T22:33:00.000-06:00</published><updated>2006-01-10T22:33:02.323-06:00</updated><title type='text'>The power of open source</title><content type='html'>Here's a little detour from theory into real life.  What do you do in a fortune 500 company when a major software deployment is getting ready to go spiraling down the drain?  Forget all of the issues around contingency planning, release management, and the other management buzz-words executive like to use.  &lt;b&gt;What do you do when the release is going nation wide in 24 hours and has to be installed and fully operational in 10,000 locations 48 hours after that?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Call on open source.&lt;br /&gt;&lt;br /&gt;I was tasked with planning and staffing a war-room / command center to go live in conjunction with the release.  Our requirements:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;	&lt;li&gt;Create infrastructure that could track issues to resolution&lt;/li&gt;&lt;br /&gt;	&lt;li&gt;Plan for communications that would enable a dispersed team to share timely information&lt;/li&gt;&lt;br /&gt;	&lt;li&gt;Be ready for round the clock operations in as little as twelve hours (worst case) or 18 hour operations in twenty-four hours (best case)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Now, I had seen this coming and laid some ground work, but I was able to install &lt;a href="http://projects.edgewall.com/trac/"&gt;Trac&lt;/a&gt; running on &lt;a href="http://httpd.apache.org/"&gt;Apache2&lt;/a&gt; using &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; and &lt;a href="http://www.modpython.org/"&gt;mod_python&lt;/a&gt; to have a web application up and running in &lt;b&gt; three hours.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This was with no IT or desktop support resources assigned; no contracts to be negotiated or signed, no bureaucratic red-tape or politics.  &lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Open Source...It just works.&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-113695398227373551?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/113695398227373551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=113695398227373551' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/113695398227373551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/113695398227373551'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2006/01/power-of-open-source.html' title='The power of open source'/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-113633968940308987</id><published>2006-01-03T19:54:00.000-06:00</published><updated>2006-01-09T21:52:08.286-06:00</updated><title type='text'></title><content type='html'>&lt;h1&gt;An Aside on Creative Thinking&lt;/h1&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;br /&gt;&lt;br /&gt;In my &lt;a href="http://greenwavesoftware.blogspot.com/2006/01/competing-capabilities-and-intentions.html"&gt;last post&lt;/a&gt;, I began describing a technique that is based on the military estimate or appreciation process for developing strategy and operational plans.&lt;br /&gt;&lt;br /&gt;In a nutshell, when faced with any series of alternative actions that you or the opposition may take, you should look at three key alternatives:  The worst thing that the opponent (or you) could do, the best thing that they could do, and the most probable thing they could do.&lt;br /&gt;&lt;br /&gt;This is a classic method of forcing people to "think outside the box".  How many business people really consider the worst thing that could happen while they are planning?  How many of them account for that eventuality in their plans?  I've been in many too many meetings where the dissenting voice is quickly pushed aside with a terse "that won't ever happen" when there are real possibilities lurking the act of just thinking "what if".&lt;br /&gt;&lt;br /&gt;So, when faced with alternative actions, force yourself to think of at least three alternatives, and make one of them the worst alternative for you.  If your plans protect against that, you can at least be assured you won't be defeated outright.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-113633968940308987?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/113633968940308987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=113633968940308987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/113633968940308987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/113633968940308987'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2006/01/aside-on-creative-thinking-in-my-last.html' title=''/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-113617774464931887</id><published>2006-01-01T22:55:00.000-06:00</published><updated>2006-06-25T09:11:30.916-05:00</updated><title type='text'>Competing - Capabilities and Intentions</title><content type='html'>&lt;br /&gt;&lt;a href="http://greenwavesoftware.blogspot.com/2005/11/identify-goal-ii-so-why-is-it.html"&gt;So strategy is hard&lt;/a&gt;.  Anything complex usually is.  And as the old adage about eating elephants goes, "we have to do it one bite at a time."&lt;br /&gt;&lt;br /&gt;So the first bite is understanding what your competitors are capable of and what they intend to do.  &lt;i&gt;(I'm assuming at this point you have at least a good idea about who your competition is.)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Capabilities should speak to a "perfect world" threat assessment.  You may not think that it is realistic for your competitor to corner the &lt;a href="http://www.finfacts.com/irelandbusinessnews/publish/article_10004216.shtml"&gt;market&lt;/a&gt; on &lt;a href="http://www.computerweekly.com/Articles/2005/12/06/213306/MicrosoftmakeschangestoIEafterpatentbattle.htm"&gt;software&lt;/a&gt; &lt;a href="http://www.playfuls.com/news_0375_Creative_To_Sue_Apple_Over_iPod_UI_Patent_Theft.html"&gt;patents&lt;/a&gt; but if they are pursuing expansion of their patent portfolio, they are capable of causing problems.&lt;br /&gt;&lt;br /&gt;So what capabilities to you focus on?  &lt;br /&gt;&lt;br /&gt;You have to assume your competitor is rationale, i.e. they are not going to suddenly start giving everything away to inconvenience you.  &lt;a href="http://www.infoworld.com/cgi-bin/displayStory.pl?981117.wcsoyring.htm"&gt;They might give things away for the short term to gain market share&lt;/a&gt;; &lt;a href="http://www.infoworld.com/cgi-bin/displayArchive.pl?/99/11/i02-11.53.htm"&gt;they might give things away that they can then charge for related services&lt;/a&gt;, but they will have a rational reason for their action.  &lt;br /&gt;&lt;br /&gt;This is where intentions come to the fore.  You have categorized what they have the technical capability to achieve, now you probe the likely actions they will take.&lt;br /&gt;&lt;br /&gt;This is the art of strategy.  You have to understand your competitors well enough to figure out which capabilities they will exploit to their advantage.  Obviously, there will be a range of these intentions.&lt;br /&gt;&lt;br /&gt;To help frame these capabilities and intentions, you should focus on three general scenarios:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;	&lt;li&gt;&lt;br /&gt;&lt;b&gt;Best Case&lt;/b&gt; - What would be the best case &lt;em&gt; for you&lt;/em&gt; that your competitor could pursue.  In other words, assume your competitor is incompetent and wanted to help you achive your strategic aims.&lt;/li&gt;&lt;br /&gt;	&lt;li&gt;&lt;br /&gt;&lt;b&gt;Worst Case&lt;/b&gt; - What would be the worst thing &lt;em&gt; for you&lt;/em&gt; that your competitor could do?  Assume they have perfect knowledge of what &lt;a href="http://greenwavesoftware.blogspot.com/2005/11/identify-goal-now-from-my-prior-post.html"&gt;your aim&lt;/a&gt; is, and they want nothing more than to thwart you.&lt;/li&gt;&lt;br /&gt;	&lt;li&gt;&lt;br /&gt;&lt;b&gt;Most Likely Case&lt;/b&gt; - Given everything you know, what is the most likely course your competitor is likely to pursue?  Assume they are rational.  What would you do in their shoes?  Obviously (I hope) you can't just look at one case in this situation.  You have to look at a whole spectrum of options and decide what &lt;em&gt; really&lt;/em&gt; is most likely.  Don't pull punches.  Your competitor won't.  &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Once you have these views into your opponents courses of action, your strategy work is greatly simplified.  But we'll get to that next...&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-113617774464931887?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/113617774464931887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=113617774464931887' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/113617774464931887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/113617774464931887'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2006/01/competing-capabilities-and-intentions.html' title='Competing - Capabilities and Intentions'/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-113168092674867911</id><published>2005-11-10T21:48:00.000-06:00</published><updated>2006-06-25T09:10:33.576-05:00</updated><title type='text'>Identify the Goal - II

 So why is it difficult fo...</title><content type='html'>&lt;h1&gt;Identify the Goal - II&lt;/h1&gt;&lt;br /&gt;&lt;br /&gt; &lt;a href="http://greenwavesoftware.blogspot.com/2005/11/identify-goal-now-from-my-prior-post.html"&gt;So why is it difficult&lt;/a&gt; for a company to decide on its objectives?&lt;br /&gt;&lt;br /&gt;It is not, I assert, because business leaders are lazy, or stupid.  I truly hope this is a true statement.  I propose that it is difficult to settle on firm objectives because of the infinite possibilities that present themselves for any given situation.  &lt;br /&gt;&lt;br /&gt;Let's take our example from my last entry....&lt;br /&gt;&lt;br /&gt;Hypothetically, we are developing a strategy for a software company that is established in a relatively mature market; i.e the desktop application market. For illustration purposes, they are the number three provider of their class/type of software. They have 20% market-share. The leader in the category has 50% share. The second largest provider commands a 30% share.&lt;br /&gt;&lt;br /&gt;So, what constitutes victory?&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Is it increasing market share above 25%?&lt;br /&gt;&lt;li&gt;Is it attaining the number two position in the market place?&lt;br /&gt;&lt;li&gt;Is it attaining the number one position in the market?&lt;br /&gt;&lt;li&gt;Is it establishing a monopoly in the market?&lt;br /&gt;&lt;br /&gt;We could continue listing options, but the fact that four come immediately to mind should suffice.&lt;br /&gt;&lt;br /&gt;So which should we pick?  I'll give you a hint; what we pick doesn't matter.  &lt;em&gt;Yet.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;First, we have to understand what our opponents can do, and what we think the are going to do.  In military parlance, we must understand their &lt;a href="http://www.eros-os.org/essays/capintro.html"&gt;capabilities&lt;/a&gt; and &lt;a href="http://www.answers.com/intentions&amp;amp;r=67"&gt;intentions&lt;/a&gt;.  Once we determine that, we can pick the most appropriate definition of victory.  &lt;br /&gt;&lt;br /&gt;And once we define victory, we can begin building a strategy to achieve it.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-113168092674867911?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/113168092674867911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=113168092674867911' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/113168092674867911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/113168092674867911'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2005/11/identify-goal-ii-so-why-is-it.html' title='Identify the Goal - II&#xA;&#xA; So why is it difficult fo...'/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-113159637180001342</id><published>2005-11-09T22:19:00.000-06:00</published><updated>2006-06-25T09:09:35.216-05:00</updated><title type='text'>Identify the goal

Now, from my prior post, it may...</title><content type='html'>&lt;h1&gt;Identify the goal&lt;/h1&gt;&lt;br /&gt;&lt;br /&gt;Now, from my &lt;a href="http://greenwavesoftware.blogspot.com/2005/11/strategy-development-its-amazing-what.html"&gt;prior post&lt;/a&gt;, it may appear that I don't find anything useful regarding strategy development on the web.  That's not true.  At least not totally true.&lt;br /&gt;&lt;br /&gt;I think there are &lt;a href="http://www.gametheory.net/"&gt;some corner's of the net&lt;/a&gt; that have very interesting work and links.  Of course, context is required.&lt;br /&gt;&lt;br /&gt;Before we dive into game theory and its relationship to strategy, let's make sure we are all operating in the same context.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Firstly&lt;/em&gt;,  strategy assumes you are in conflict with another entity.  This could be organized conflict, such as war or a direct competitive endeavor.  It could be more general conflict such as fighting market trends.  Regardless of the focus of the conflict, it is this opposing entity that you are developing stratagems against.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Secondly&lt;/em&gt;, strategy implies, that you are concerned about an overall plan, not a single tactic to achieve victory.    "Shoot first" is not a strategy for winning a war or battle or even a gun fight.  The plans and activities that ensure you will take the first effective shot in the fight would constitute a strategy.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Thirdly&lt;/em&gt;, you know what victory looks like.  It is impossible to plan if you don't know what the overall aim or objective is.  In the military, it might be the defeat of the opponent.  But it might also be creating a state in which the opponent can no longer inflict material damage against your forces.  Or it might be inflicting sufficient casualties on the enemy that they cannot entertain battle for the next generation.  Knowing what the ultimate objective is, in detail, is critical.&lt;br /&gt;&lt;br /&gt;So let's apply this thinking to a business.&lt;br /&gt;&lt;br /&gt;Hypothetically, we are developing a strategy for a software company that is established in a relatively mature market; i.e the desktop application market.  For illustration purposes, they are the number three provider of their class/type of software.  They have 20% market-share.  The leader in the category has 50% share.  The second largest provider commands a 30% share.&lt;br /&gt;&lt;br /&gt;So, what constitutes victory?&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Is it increasing market share above 25%?&lt;br /&gt;&lt;li&gt;Is it attaining the number two position in the market place?&lt;br /&gt;&lt;li&gt;Is it attaining the number one position in the market?&lt;br /&gt;&lt;li&gt;Is it establishing a monopoly in the market?&lt;br /&gt;&lt;br /&gt;Deciding what the desired outcome is, is the first step in developing a strategy.  Unfortunately, for many companies, it is not so simple.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-113159637180001342?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/113159637180001342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=113159637180001342' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/113159637180001342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/113159637180001342'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2005/11/identify-goal-now-from-my-prior-post.html' title='Identify the goal&#xA;&#xA;Now, from my prior post, it may...'/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-113107655890478200</id><published>2005-11-03T21:55:00.000-06:00</published><updated>2005-11-03T21:55:58.940-06:00</updated><title type='text'></title><content type='html'>&lt;h1&gt;Strategy Development&lt;/h1&gt;&lt;br /&gt;&lt;br /&gt;It's amazing what a quick Google Search of &lt;a href="http://www.google.com/search?q=business+strategy&amp;btnG=Search&amp;hl=en&amp;lr=&amp;client=safari&amp;rls=en"&gt;business strategy&lt;/a&gt; turns up.  Where are the deep thoughts and exchange of ideas that the internet is supposed to foster?  Behind a login prompt and request for payment, mostly.&lt;br /&gt;&lt;br /&gt;But developing strategy is not rocket science.  &lt;br /&gt;&lt;br /&gt;Is it difficult?  Yes.  But only because it requires hard thinking (which we typically don't want to do).&lt;br /&gt;&lt;br /&gt;What makes it hard?  The fact that the devil is in the details.  Creating and executing effective strategies cannot be done with superficial analysis or argument by analogy.  It requires real honest-to-god heavy lifting to be effective.  &lt;br /&gt;&lt;br /&gt;And maybe that is why people want to charge for advice and services on strategy development.&lt;br /&gt;&lt;br /&gt;Maybe it's just because they don't want people to truly understand.&lt;br /&gt;&lt;br /&gt;Over the next few posts, I'd like to collect may thoughts on strategy.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Let's start with the fundamentals.  From my trusty Mac's dictionary:&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;em&gt;strategy |&amp;#712;strat&amp;#601;j&amp;#275;| noun ( pl. -gies)&lt;/em&gt; &lt;br&gt;&amp;#149; a plan of action or policy designed to achieve a major or overall aim : time to develop a coherent economic strategy | shifts in marketing strategy. &lt;br&gt;&amp;#149; the art of planning and directing overall military operations and movements in a war or battle. Often contrasted with tactics (see tactic ). &lt;br&gt;&amp;#149; a plan for such military operations and movements : nonprovocative defense strategies. &lt;br&gt;&lt;em&gt;ORIGIN early 19th cent.: from French strat&amp;eacute;gie, from Greek strat&amp;#275;gia &amp;lsquo;generalship,&amp;rsquo; from strat&amp;#275;gos (see stratagem ).&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;"To achieve an major or overall aim"&lt;/em&gt;-- this is an important concept.  If you can't state what your objective is, you don't have a strategy to achieve it.  How often have you been in a business setting and asked yourself "why are we doing this?"  It might just be because you don't know what your true aim or objective is.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-113107655890478200?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/113107655890478200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=113107655890478200' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/113107655890478200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/113107655890478200'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2005/11/strategy-development-its-amazing-what.html' title=''/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-112016947871354043</id><published>2005-06-30T17:11:00.000-05:00</published><updated>2005-06-30T17:11:18.716-05:00</updated><title type='text'></title><content type='html'>&lt;h2&gt;Quality Time - part 2&lt;/h2&gt;&lt;br /&gt;So what do all these categories mean to me?&lt;br /&gt;&lt;br /&gt;Good question.&lt;br /&gt;&lt;br /&gt;One of the key areas of focus inside the &lt;a href="http://www.quality.nist.gov/Business_Criteria.htm"&gt;Baldrige Criteria&lt;/a&gt; is a focus on process.  Now it's easy to focus on results -- we all can measure widget sales -- but it is much harder to think about measuring processes.  Let's look at an example:&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;As software developers, our key value creation process is development of software.  Now, how do we measure how effective our software development processes are?  Cycle-time per feature? Resources per feature?  Unit or acceptance tests written and passed? Lines of Code &lt;em&gt;(groan)&lt;/em&gt;? How?&lt;br /&gt;&lt;br /&gt;Any of these could be "correct" answers within the criteria.  The criteria only asks if process performance &lt;i&gt;is&lt;/i&gt; measured and if those performance measures are used to evaluate improvements to the process.  &lt;br /&gt;&lt;br /&gt;So, suppose I use unit tests written and passed versus time as one of my software development process measure.  Another is features completed vs. features planned.  How does that help me?&lt;br /&gt;&lt;br /&gt;The second part (using measures to improve process performance) is where the value is created.  Continuing our example, suppose I have established that my development pace is 5 unit tests written per hour, and 98% unit tests passed.  I've also complete 2 features per week and have twelve out of sixty features completed.  &lt;br /&gt;&lt;br /&gt;Apple then release a new API such as Core Data.&lt;br /&gt;&lt;br /&gt;The next week my process measures may be  1 unit tests per hour but 100% pass rate.  Also, I've not added any features during the week.  Is this good or bad?&lt;br /&gt;&lt;br /&gt;Well, previously I was looking at 24 weeks remaining to being feature complete for the program ((60-12)/2).  Now a week later, I'm still at least 24 weeks from completion.  &lt;br /&gt;&lt;br /&gt;Another week passes, and now I'm back to 5 unit tests per programming hour with 99% pass rate, but I've got seventeen features complete.  It looks like my projected feature complete date is now 9 weeks away ((60-17)/5).&lt;br /&gt;&lt;br /&gt;It looks like the week spent learning Core Data was a valuable change to my process.  Additionally, if the trend on performance holds, I can move up plans for testing and ultimately delivery of my program.&lt;br /&gt;&lt;br /&gt;This is how process measures are used to assess and manage change.&lt;br /&gt;&lt;br /&gt;Of course, it is harder than my simple example in the real world ;-)&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;So what does it mean for a microISV?&lt;/h3&gt;&lt;br /&gt;The thing is, process measures don't happen by accident.  They can help you make choices and improve, but you have to consciously decide to create and use them.  When you use them effectively, they typically help cut through the inconsequential cruft that tends to distract us and focus.  &lt;em&gt;And that is the value to us.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;So, think about measures of process performance as you move into a new phase of effort for your microISV product.  How will you measure the effectiveness of your blog postings in marketing your product?  How will you determine how effective your overall marketing and communications strategy is?  How will you measure your effectiveness at identifying and addressing customer needs?  These are all important.&lt;br /&gt;&lt;br /&gt;And the right answers can help you stay ahead of the competition.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-112016947871354043?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/112016947871354043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=112016947871354043' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/112016947871354043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/112016947871354043'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2005/06/quality-time-part-2-so-what-do-all.html' title=''/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-112010635826723565</id><published>2005-06-29T23:39:00.000-05:00</published><updated>2005-06-30T17:08:43.673-05:00</updated><title type='text'></title><content type='html'>&lt;h2&gt;Quality Time&lt;/h2&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Well, it's been a while since posting.  While I'd like to say that I've been busy writing code, that would be a lie.  Instead, since returning from WWDC2005 I've been focusing on may day job, including I task I signed up for earlier in the year; being a Quality Examiner for the &lt;a href="http://www.mqa.org/default.asp"&gt;Missouri Quality Award program&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;This process uses the &lt;a href="http://www.quality.nist.gov/"&gt;Baldrige National Quality criteria&lt;/a&gt; to assess applicant organizations within Missouri.  It's a rigorous process, and takes a significant time commitment by the volunteer examiners.&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;What I'd like to do is spend a little time over the next few posts to discuss what I think a &lt;a href="http://www.microisv.com/"&gt;microISV&lt;/a&gt; (in general) and &lt;em&gt;my&lt;/em&gt; microISV specifically can learn from the criteria.&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Before those posts begin, however, I want to parrot a project management maxim:  &lt;em&gt;"Quality is something you plan, not something you test for at the end."  &lt;/em&gt;The Baldrige framework is general enough to be applied across industries and organizations of widely differing sizes.  Quality is something that you need to think about as you are planning your microISV, not something you should think about as you close out your testing phase.&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;h4&gt;The Baldrige Framework&lt;/h4&gt;&lt;h5&gt;Leadership - Category 1 &lt;/h5&gt;Examines how senior executives guide the organization and how the organization addresses its responsibilities to the public and practices good citizenship.&lt;br /&gt;&lt;h5&gt;Strategic Planning - Category 2 &lt;/h5&gt;&lt;br /&gt;Examines how the organization sets strategic directions and how it determines key action plans.&lt;br /&gt;&lt;h5&gt;Customer and Market Focus - Category 3 &lt;/h5&gt; Examines how the organization determines requirements and expectations of customers and markets; builds relationships with customers; and acquires, satisfies, and retains customers.&lt;br /&gt;&lt;h5&gt;Measurement, Analysis, and Knowledge Management - Category 4&lt;/h5&gt; Examines the management, effective use, analysis, and improvement of data and information to support key organization processes and the organization&amp;rsquo;s performance management system.&lt;br /&gt;&lt;h5&gt;Human Resources Focus - Category 5&lt;/h5&gt; Examines how the organization enables its workforce to develop its full potential and how the workforces is aligned with the organization&amp;rsquo;s objectives.&lt;br /&gt;&lt;h5&gt;Process Management - Category 6&lt;/h5&gt; Examines aspects of how key production/delivery and support processes are designed, managed, and improved.&lt;br /&gt;&lt;h5&gt;Business Results - Category 7&lt;/h5&gt; Examines the organization&amp;rsquo;s performance and improvement in its key business areas: customer satisfaction, financial and marketplace performance, human resources, supplier and partner performance, operational performance, and governance and social responsibility.  The category also examines how the organization performs relative to competitors. &lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;em&gt;Next post:&lt;/em&gt;  What it means to a MicroISV&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-112010635826723565?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/112010635826723565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=112010635826723565' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/112010635826723565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/112010635826723565'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2005/06/quality-time-well-its-been-while-since.html' title=''/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-111880510587630652</id><published>2005-06-14T22:11:00.000-05:00</published><updated>2005-06-14T22:11:45.883-05:00</updated><title type='text'></title><content type='html'>WWDC Decompression&lt;br /&gt;&lt;br /&gt;Following the close of WWDC, I headed off to Napa for a little rest and relaxation before heading back to the paying job and full-bore development on the side.  My wife and I stayed at &lt;a href="http://www.oldworldinn.com/"&gt;The Old World Inn&lt;/a&gt; in Napa and spent a couple of days sight-seeing and wine tasting.  It's been a nice interlude and given me a few minutes to place WWDC in perspective.&lt;br /&gt;&lt;br /&gt;Firstly, I think the switch to Intel will be good for the platform and still has some surprises for folks as the complete product roadmap and plan are revealed.  &lt;a href="http://www.macintouch.com/macintel03.html"&gt;Speculation on what things Intel has in store&lt;/a&gt; or the possibility of a multiple CPU product mix segregating the high end and mobile machines could provide interest.&lt;br /&gt;&lt;br /&gt;Second, &lt;a href="http://developer.apple.com/wwdc/"&gt;WWDC&lt;/a&gt; was a mixed bag this year.  The technical session were generally very good, but there were things that left me wondering about the overall value, as well as the commitment by Apple.&lt;br /&gt;&lt;LI&gt;Technical presentations.  It felt that the first two days were rehash of last years presentations and documentation reviews.  It did not seem to reach a real "meat" stage until Wednesday (and for some topics Thursday).&lt;/LI&gt;&lt;br&gt;&lt;br /&gt;&lt;LI&gt;Hands-On Sessions.  I liked most of these, but several seemed more like a code walk-through as opposed to an instructional session.  Granted, it's hard to cram as much detail as people might like into a 90 minutes session for 200+ developers, but then "Hands-on" implies a little more than a code review.&lt;/LI&gt;&lt;br&gt;&lt;br /&gt;&lt;LI&gt;Keynote.  Two hours scheduled, fifty-five minutes presented, and it was mostly confirming a rumor.  A keynote by Steve Jobs has certain expectations.  This did not live up to those expectations.  Enough said. &lt;/LI&gt;&lt;br&gt;&lt;br /&gt;&lt;LI&gt;Developer Systems.  I get to spend $500 for my membership and $999 to &lt;em&gt;lease&lt;/em&gt; a machine to make my code run on the next generation Mac, and a year from now, I get nothing?  I'm better off financially to purchase a PPC machine that I can continue to use and operate for through 2007.  Also, if you're going to announce this offer, have the details worked out so questions can be answered.&lt;/LI&gt;&lt;br&gt;&lt;br /&gt;&lt;LI&gt;Campus Bash.  The logistics stunk.  I don't know how else to say it and remain polite.  I spent just long enough in line for the Apple Company Store that I missed the music (The Wallflowers) and the food.  By the time I made it inside after purchasing a few souvenirs, two of the three hours had passed, the music was over and the food was gone.  I, like most shoppers, purchased Apple paraphernalia that could easily have been at a booth at the conference. &lt;/LI&gt;&lt;br&gt;&lt;br /&gt;&lt;LI&gt;General Care and Feeding.  It felt that wherever costs could be cut in terms of refreshments, conference materials, or attendee chachkis', they were. Many people I discussed this with had similar opinions.  Overall, price remained the same, but quality declined.  Personally, I expect more from Apple in the regard.&lt;/LI&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Finally, I do want to say that I'm glad I went to the conference, but I don't know if I'll attend next year.  I think there might be better places to spend my money.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-111880510587630652?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/111880510587630652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=111880510587630652' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/111880510587630652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/111880510587630652'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2005/06/wwdc-decompression-following-close-of.html' title=''/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-111828928473343847</id><published>2005-06-08T22:54:00.000-05:00</published><updated>2005-06-08T22:54:44.743-05:00</updated><title type='text'></title><content type='html'>As the dust settles on &lt;a href="http://www.apple.com/pr/library/2005/jun/06intel.html"&gt;Apple on Intel&lt;/a&gt; I can't help but think we don't have the complete picture.  What is missing is the fact that we don't know what the complete product roadmap looks like.  &lt;a href="http://www.publish.com/article2/0,1759,1825702,00.asp"&gt;Speculation&lt;/a&gt; on a multiple CPU strategy depending on the client makes sense given that developers are being told in no uncertain terms to migrate to XCode.  Only time will tell.&lt;br /&gt;&lt;br /&gt;In the mean time, I'll continue to plug away at creating some new software that will run on either architecture.  But more on that later. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-111828928473343847?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/111828928473343847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=111828928473343847' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/111828928473343847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/111828928473343847'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2005/06/as-dust-settles-on-apple-on-intel-i.html' title=''/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-111807548461967903</id><published>2005-06-06T11:31:00.000-05:00</published><updated>2005-06-06T11:31:24.626-05:00</updated><title type='text'></title><content type='html'>WWDC rumors and ramblings&lt;br /&gt;&lt;br /&gt;Okay, I guess I have to capture my thoughts on the &lt;a href="http://lowendmac.com/musings/05/0606.html"&gt;rumor de jour&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;What makes sense:&lt;br /&gt;&lt;br /&gt;1.  If &lt;a href="http://www.apple.com"&gt;Apple&lt;/a&gt; is really ready to take on &lt;a href="http://www.microsoft.com"&gt;MS&lt;/a&gt; with a x86 version of OS X, then this might make sense of the rumor.  As a shareholder, I would applaud the move so long as it happens today, not next year when Longhorn will be at least close to shipping.  Market data would indicate Apple has an opportunity to strike and take share of the desktop now, not in twelve or eighteen months.&lt;br /&gt;&lt;br /&gt;2.  If there is a fork in the product line where Intel gives better performance.  Since my focus is software, I can't really comment.  However, the fact that Apple has significant rights to AIM architecture and the ARM processor as well, it could be a production agreement, not an architecture shift.&lt;br /&gt;&lt;br /&gt;3.  Last year at WWDC, developers had strong interest in when cross-compilation would be a fact.  The limiting factor was not technical, but the need to port OS X frameworks to x86.  What if it's been done?  What if XCode2.5 is a cross complier?  What this would do if a subset of frameworks was enabled for x86, say for a home entertainment platform?  And it might still run windows software, but safely for ma &amp; pa?&lt;br /&gt;&lt;br /&gt;What doesn't make sense:&lt;br /&gt;&lt;br /&gt;4.  A shift in architecture as the platform is starting to take off.&lt;br /&gt;&lt;br /&gt;5.  Steve staying the course with all the "leaks" in the press.&lt;br /&gt;&lt;br /&gt;6.  Announcing this at the core of your development efforts.  Last year it was Tiger.  Now, something that will require additional effort for developers to support?  Not smart.&lt;br /&gt;&lt;br /&gt;Of course, we'll know in a couple of more hours.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-111807548461967903?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/111807548461967903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=111807548461967903' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/111807548461967903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/111807548461967903'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2005/06/wwdc-rumors-and-ramblings-okay-i-guess.html' title=''/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-111793298427470338</id><published>2005-06-04T19:56:00.000-05:00</published><updated>2005-06-04T19:56:24.276-05:00</updated><title type='text'></title><content type='html'>In the morning I'm off to &lt;a href="http://www.apple.com"&gt;Apple&lt;/a&gt;'s &lt;a href="http://developer.apple.com/wwdc/"&gt;World Wide Developer Conference&lt;/a&gt; for the second time.  Last year saw the announcement of Tiger.  This year the &lt;a href="http://news.com.com/Apple+to+ditch+IBM%2C+switch+to+Intel+chips/2100-1006_3-5731398.html"&gt;rumors&lt;/a&gt; did not start until two days before the keynote.  The anticipation is growing as I pack and prepare.  &lt;a href="https://developer.apple.com/wwdc2005/schedule/monday_am.php"&gt;Monday&lt;/a&gt; will be fun and exciting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-111793298427470338?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/111793298427470338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=111793298427470338' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/111793298427470338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/111793298427470338'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2005/06/in-morning-im-off-to-apples-world-wide.html' title=''/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13425130.post-111793179469051396</id><published>2005-06-04T19:34:00.000-05:00</published><updated>2005-06-04T19:36:34.690-05:00</updated><title type='text'>Starting the Blog</title><content type='html'>I've just started my blog, following in the vein of many other programmers trying to start a micro ISV.  After almost a year of part-time work on my software, I'm within sight (though months of work remain) of having a product to start talking about.  This blog will chronicle my journey....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13425130-111793179469051396?l=greenwavesoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://greenwavesoftware.blogspot.com/feeds/111793179469051396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13425130&amp;postID=111793179469051396' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/111793179469051396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13425130/posts/default/111793179469051396'/><link rel='alternate' type='text/html' href='http://greenwavesoftware.blogspot.com/2005/06/starting-blog.html' title='Starting the Blog'/><author><name>GreenWave Software</name><uri>http://www.blogger.com/profile/05512074982591319969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
