<?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-12068616</id><updated>2011-10-13T18:48:34.459-04:00</updated><category term='market share'/><category term='bugs'/><category term='google tech talks'/><category term='DIY'/><category term='development'/><category term='predictions'/><category term='USB Microscope'/><category term='printing'/><category term='Apple TV'/><category term='Windows'/><category term='freedom'/><category term='iTunes Plus'/><category term='speculation'/><category term='comparisons'/><category term='video server'/><category term='Safari'/><category term='Quicktime'/><category term='dvr'/><category term='hdhomerun'/><category term='Quartz'/><category term='backup'/><category term='ext3'/><category term='energy efficiency'/><category term='iPhone SDK'/><category term='advice'/><category term='sVideo'/><category term='space heaters'/><category term='64-bit'/><category term='PDF'/><category term='refactoring'/><category term='menus'/><category term='Netscape plugins'/><category term='Alton Brown'/><category term='PICT'/><category term='battery'/><category term='commerce'/><category term='iPhone Development'/><category term='XCode'/><category term='Apple Store'/><category term='Office 2008'/><category term='technological promise'/><category term='SATA'/><category term='iPhone'/><category term='iTunes'/><category term='drivers'/><category term='Mac Programming'/><category term='reviewing'/><category term='RTF'/><category term='remote desktop'/><category term='EVDO'/><category term='model railroads'/><category term='architecture'/><category term='consumer reports'/><category term='Styled Text'/><category term='Star Trek'/><category term='interface design'/><category term='.NET'/><category term='porting'/><category term='direcTV'/><category term='MacBook'/><category term='mythfrontend'/><category term='antennas'/><category term='AirTunes'/><category term='OTA'/><category term='Programming'/><category term='OS X'/><category term='GUI'/><category term='InCDius'/><category term='sleep'/><category term='eyetv'/><category term='Personal Growth'/><category term='Software'/><category term='DVD'/><category term='guesses'/><category term='leaks'/><category term='iPod Touch'/><category term='car'/><category term='Amazon Vine'/><category term='children'/><category term='TrainPlayer'/><category term='Postscript'/><category term='UPNP'/><category term='wii'/><category term='music'/><category term='mythtv'/><category term='pchdtv'/><category term='hints'/><category term='idiocy'/><category term='Feature Size'/><category term='rotation'/><category term='bluetooth'/><category term='Carbon'/><category term='MacBU'/><category term='chargers'/><category term='mythbuntu'/><category term='remote controls'/><category term='Cocoa'/><category term='clipboard'/><category term='mono'/><title type='text'>A Sprinkle of Cocoa</title><subtitle type='html'>A blog about Macs, programming in Cocoa, iPhones, being a working coder, gadgets and tech.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.sprinkleofcocoa.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default?start-index=101&amp;max-results=100'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>176</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-12068616.post-1688859494817083523</id><published>2011-10-13T18:45:00.002-04:00</published><updated>2011-10-13T18:48:34.488-04:00</updated><title type='text'>iOS 5 Killed (Temporarily) my AT&amp;T Tethering</title><content type='html'>It came back when AT&amp;amp;T tech support told me to go to Settings : General : Rest and hit the Reset Network Settings button. Which dropped my call to AT&amp;amp;T and caused my phone to sort of reboot, but when it came back up, there was my tethering option in the Settings : General : Network pane.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-1688859494817083523?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/1688859494817083523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/1688859494817083523'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2011/10/ios-5-killed-temporarily-my-at.html' title='iOS 5 Killed (Temporarily) my AT&amp;T Tethering'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-1637632161248734697</id><published>2011-07-31T13:00:00.003-04:00</published><updated>2011-07-31T13:26:09.121-04:00</updated><title type='text'>Why Some Internet Plugins Stopped Working With Safari 5.1</title><content type='html'>When I was a junior developer working his first pro job in 1995, we didn't have Safari we had Netscape, and if we wanted to make the browser do something it couldn't do, like play a video or render a PDF,  we wrote Netscape plugins against the NPAPI. I wouldn't say we were happy because the API was complex and fragile, but it was what we had. Come forward 16 years, and I'm dealing with NPAPI plugins again. It's only been in the last few years that interested parties have been actively improving to move the API to something that fits in better with a modern OS X browser environment. &lt;br /&gt;&lt;br /&gt;Step one was a couple years ago, and involved removing the classic QuickDraw based drawing flavored plugin, replacing it with rendering into a browser provided Quartz context.  This also tightened up the rules of when a plugin could draw--in response to a drawing event only--no more drawing while in a mouse tracking loop. &lt;br /&gt;&lt;br /&gt;Second step was changing the event model, from one loosely modeled around the pre-Carbon event loop to one loosely modeled around the messages received by a Cocoa view.  When Safari dropped support for the old event model between 5.0.1 and 5.1, a bunch of Internet Plugins just stopped loading. &lt;br /&gt;&lt;br /&gt;Third step involves the use of Core Animation layers as a drawing environment instead of the Quartz context. Currently an optional drawing mode, the CALayer based model is much more powerful and convenient then the alternative, and I suspect will become the primary flavor of NPAPI plugins on "OS X". They might even allow for the sharing of code between iPhone apps, Mac applications and browser plugins if developers are careful to wrap them carefully&amp;mdash;CALayers are the underlying drawing environment of both UIViews (iOS) and NSViews (OS X). &lt;br /&gt;&lt;br /&gt;As Safari 5.1 is the default browser on 10.7, and it was recently pushed out to 10.6 users, there are probably a fair number of users searching for updates and tardy developers getting their mouse tracking code finalized. Including me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-1637632161248734697?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://wiki.mozilla.org/NPAPI:CocoaEventModel' title='Why Some Internet Plugins Stopped Working With Safari 5.1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/1637632161248734697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/1637632161248734697'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2011/07/why-some-internet-plugins-stopped.html' title='Why Some Internet Plugins Stopped Working With Safari 5.1'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-2263769365260475942</id><published>2011-06-15T06:36:00.003-04:00</published><updated>2011-07-31T13:34:15.914-04:00</updated><title type='text'>Neato xv-11 Robot Vacuum</title><content type='html'>I have never been a regular vacuumer. I have a moderately priced vacuum I bought 20 years ago while in graduate school, and I've probably gone through all of 8 bags. However, I'm a home owner now, with kids, kids who bring in bits of sand, drop crumbs everywhere, methodically chop bits of paper into confetti, and generally make a mess. And a wife who's busy starting her own business. My floors need vacuuming. &lt;br /&gt;&lt;br /&gt; I perked up my ears on hearing the new editor of &lt;A HREF="http://engadget.com"&gt;Engadget&lt;/A&gt; say his favorite product review of all time was the &lt;A HREF="http://www.amazon.com/Neato-XV-11-Robotic-Vacuum-System/dp/B003UBPB6E/ref=sr_1_1?ie=UTF8&amp;qid=1308134210&amp;sr=8-1"&gt;Neato xv-11 robot vacuum cleaner&lt;/A&gt;. I had, of course, heard of the iRobot Roomba&amp;mdash;and drive by the iRobot headquarters in Bedford, Massachusetts 5 days a week&amp;mdash;but had never heard of the Neato. Reading through the Amazon reviews gave me a picture of a more robust product than the Roomba, with more cleaning per charge and a square face capable of doing corners. So I bought one.&lt;br /&gt;&lt;br /&gt;I like it quite a bit, but it cannot operate in the chaotic child-infested environment of my home without supervision. The kids are likely to drop a brush fouling yoyo string or a pile of clothes right in front of its charging station so if I set it to operate on a schedule, I'm likely come home and find it stopped after half a room with something jammed in its brush or it stuck behind a moved space heater. Scheduled cleanings are for people who's houses are always neat. &lt;br /&gt;&lt;br /&gt;I've found that the robot and I work best as a team. I'll take it down in the basement, start it going in one end and I'll start picking up in front of it, quickly getting much farther in front of it so that I can clean up the basement in 10 minutes while it takes 45 minutes to vacuum. I'll still have to come rescue it a few times as it will sometimes wedge itself under a piece of furniture or get its drive wheels lifted up, but this takes a few seconds and barely cuts into the labor savings of me vacuuming as thoroughly.  It will leave a few things on the floor, it isn't a human that will go back and forth and back and forth over a clingy bit of paper until it finally does get sucked in, but frequent vacuuming quickly leads to pretty floors.  I just wish it could climb stairs.&lt;br /&gt;&lt;br /&gt;Noise is like a distant jet turbine, not as loud as my old traditional vacuum but enough to distract you from any productive work.&lt;br /&gt;&lt;br /&gt;One major problem is that for whatever reason, the Neato does not keep its clock time, like a blinking VCR it can't be relied upon to keep a schedule.  &lt;br /&gt;&lt;br /&gt;The Neato differs from the Roomba in its approach. The Roomba uses a random walk algorithm to achieve coverage in a room. The Neato finds a path around the circumference of a room and then vacuums it in a grid; I believe this is more efficient and allows it to cover more area on a charge. The Roomba also has beacon lights you are supposed to setup to aid in navigation, the Neato uses an internal laser range finder to map rooms. Whatever it is doing, it almost always knows how to find its way back to where it started, and it has an amazing ability to follow curved surfaces, like the circular base of my recliner. &lt;br /&gt;&lt;br /&gt;My wife is most happy with the fact it will clean under beds, picking up years of dust bunnies the first time and keeping it tidy going forward. I'm most happy emptying it's reservoir, seeing all that dust and dirt that was messing up my floors, getting my feet dirty, and potentially getting into my lungs, and sending it along to the landfill.&lt;br /&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Neato_XV11.png" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-2263769365260475942?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.amazon.com/Neato-XV-11-Robotic-Vacuum-System/dp/B003UBPB6E/ref=sr_1_1?ie=UTF8&amp;qid=1308134210&amp;sr=8-1' title='Neato xv-11 Robot Vacuum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2263769365260475942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2263769365260475942'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2011/06/neato-xv-11-robot-vacuum.html' title='Neato xv-11 Robot Vacuum'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-3404318465567239916</id><published>2011-06-04T17:46:00.004-04:00</published><updated>2011-06-06T18:19:49.399-04:00</updated><title type='text'>Fear, Uncertainty and .Net</title><content type='html'>[Update: &lt;A HREF="http://www.zdnet.com/blog/microsoft/microsoft-needs-to-tell-windows-8-developers-now-about-jupiter-and-silverlight/9608"&gt;Mary Jo Foley&lt;/A&gt; has posted a blog entry saying that her sources are saying that .Net will be available for immersive Windows 8 development. If true, it'd be nice if Microsoft would actually come out and say that.]&lt;br /&gt;&lt;br /&gt;Microsoft demoed the tablet application framework for Windows 8 development Thursday. Going forward,  traditional apps written in C++, .Net and other legacy technologies will be available to tablet users but utterly painful to use while away from one's keyboard and mouse. You could see a bit of that in the &lt;A HREF="http://allthingsd.com/20110601/microsofts-windows-8-demo-from-d9-video/?refcat=d9"&gt;conference video&lt;/A&gt; where the presenter fumbles several times trying to snap Excel's document window into place. Old apps are going to be dreaded while in tablet mode. People will need new applications, and combined with the new application store, some developer is going to make a bundle on a touchable version of Notepad.&lt;br /&gt;&lt;br /&gt;Flashy new apps were presented written in HTML 5 and Javascript. The interface might look like the Window's Phone 7 Metro UI, but this is not the Silverlight based technology beloved by C# coders. Pure web technologies with no plugins have been embraced by Microsoft, and this is strange and unexpected to me as an observer. &lt;br /&gt;&lt;br /&gt;Why is this strange?&lt;br /&gt;&lt;br /&gt;One. Microsoft developers are going to go through &lt;A HREF="http://en.wikipedia.org/wiki/Kübler-Ross_model"&gt;Denial, Anger, Bargaining, Depression and Acceptance&lt;/A&gt;, but mainly anger if this is true. .Net programmers believe they have the best tools, language and framework&amp;mdash;as odd as Cocoa programmers might find that belief&amp;mdash;they really do. They also tend to have a distain for dynamic languages like Javascript, especially Javascript with it's odd object model, and not quite C syntax. And they've spent the last years mastering the C# language and the massively large .Net frameworks. Any platform company gets its strength from its developer community and this just seems gratuitously hurtful.  Finally, they expected to be part of a gold rush to fill both a new Microsoft Windows application store, and custom development orders for the new platform. &lt;br /&gt;&lt;br /&gt;Two. It is my impression that Javascript is not an appropriate language for large app design&amp;mdash;although I could be convinced otherwise. It's possible that the Javascript part was what was working, and it would be appropriate for lightweight widget like applications like weather apps, twitter feeds, etc. At a later date, Microsoft could add support for other frameworks. This would be the same path as Apple took with the iPhone&amp;mdash;web development first followed by native development. &lt;br /&gt;&lt;br /&gt;Three. It is conversely and perversely possible that is .Net itself that doesn't scale well in performance at least, and wasn't up to the task of being scaled up from a little phone screen to 30 inch monitors, at least in how Microsoft's OS team would have used it. Presumably, if Microsoft could have released a version of Office built off the .Net framework, they would have. I've had some tangential experience with .Net and complicated renderings, and it hasn't been good, but I'd always assumed things would work out given time to optimize. &lt;br /&gt;&lt;br /&gt;Fourth. It is unlike Microsoft, to want their developers to use easily portable technologies. To the extent Windows 8 Javascript and HTML5 isn't littered with calls to Microsoft extensions and framework, will be an indication of a surprising lack of strength on Microsoft's part to convince developers to make unhedged bets on Windows.&lt;br /&gt;&lt;br /&gt;As I said perplexing. &lt;br /&gt;&lt;br /&gt;And frustrating for anyone seeking to use a base of code across a range of platforms. At one time, a story was building up that you could write a chunk of code in C#, and execute it on the Mac and Linux via Mono, on Java platforms via a code translator, on Android via either &lt;A HREF="http://www.xamarin.com/"&gt;Xamarin&lt;/A&gt;'s .Net framework or a Java translator, on iOS via Xamarin, on Windows Phone 7 via Silverlight, and Windows 8 tablet via either SIlverlight or extensions to .Net. Maybe it wouldn't run well, and wouldn't compete with natively developed apps, but the story was there for project managers to believe. And now that story is sounding iffy. &lt;br /&gt;&lt;br /&gt;This might just be a miscommunication. It seems insane for Microsoft to take such an odd route. Maybe when the whole story comes out, JavaScript+HTML5 is just a presentation layer and the bulk of an app will be written in .Net., maybe they just don't have the .Net code ready to demo. But whatever it is, Microsoft owes it to its developers to let them know now, because they can't afford to wait to choose technologies.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-3404318465567239916?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://allthingsd.com/20110601/microsofts-windows-8-demo-from-d9-video/?refcat=d9' title='Fear, Uncertainty and .Net'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3404318465567239916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3404318465567239916'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2011/06/fear-uncertainty-and-net.html' title='Fear, Uncertainty and .Net'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-2837470185090791696</id><published>2011-05-19T13:28:00.002-04:00</published><updated>2011-05-19T13:42:40.320-04:00</updated><title type='text'>Hint, You Want Your App to be Hard To Program</title><content type='html'>I come up with many ideas for iPad apps. I have almost zero time to write them, but I do come up with ideas every couple weeks.  And when I take my vacation time, I'll write one. How to choose. &lt;br /&gt;&lt;br /&gt;Well here's an idea. Choose the hardest one you can write in the time allowed, assuming you think it will sell. Hard means people will be agreeable to paying $5 for an app. Hard means you won't have cut rate competition the next week. Hard means you can be proud of showing what you are capable of. &lt;br /&gt;&lt;br /&gt;iOS is filled with programming tasks that should be hard but aren't. Want to play a H.264 MP4 movie, it's like 5 lines of code. Want to play streaming broadcast MPEG2 off your HDHomerun, well that's hard (and probably involves getting an expensive license from Dolby for the sound amongst other IP fees) to do without hardware decoding. Nobody will pay you for the former, there are people who will pay for the latter. Then again, the latter might also be impossible on even an A5.&lt;br /&gt;&lt;br /&gt;So I have my own hard idea, which I'm not sharing, and I'll be spending the summer writing it. I'll let you know how it turns out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-2837470185090791696?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2837470185090791696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2837470185090791696'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2011/05/hint-you-want-your-app-to-be-hard-to.html' title='Hint, You Want Your App to be Hard To Program'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-1331239890900685536</id><published>2011-03-09T14:11:00.003-05:00</published><updated>2011-03-09T14:40:30.734-05:00</updated><title type='text'>Setup of iPhone 4 Hotspot</title><content type='html'>I called AT&amp;T as soon as I saw that iOS 4.3 had gone live. When I called, they had no information about setting it up and didn't seem to be ready for any influx of setup requests. But, eventually I was handed off to a technician and that person was able to find out the setup information. &lt;br /&gt;&lt;br /&gt;So over the phone, they were able to convert me from my legacy unlimited plan to the monthly 4 gigabyte plan with hotspot. I received a text message saying the data plan had changed, and the hotspot button in the network section of the general settings pane allowed me to access the hotspot settings. I turned it on, changed the password, and saw that it worked fine with my MacBook Pro. I'm using it right now. &lt;br /&gt;&lt;br /&gt;Pretty cool. &lt;br /&gt;&lt;br /&gt;When I plugged the syncing cable into my MacBook Pro's USB port, I got a notification of a new network connection. For whatever reason, I had to restart the Mac System Preferences application to get the "iPhone USB" connection in the Network settings panel to connect. I will delete this connection, as I wouldn't want to accidentally spend data when WiFi is available. &lt;br /&gt;&lt;br /&gt;The CNET Online Speed Test gave me 1288 kbps which is about what you'd expect for mid-day in Cambridge on AT&amp;T.&lt;br /&gt;&lt;br /&gt;A Facetime chat over the Internet to my iPod Touch from my MacBook Pro was surprisingly good. My wife in Nashua only looked a little pixelated and the audio was as good as it ever is. &lt;br /&gt;&lt;br /&gt;I'm looking forward to dropping my iPad service, which will save me $15 a month off my old $30+$30 plans, and also allow my kids to use their iPod Touch in the car, and occasional use of my MacBook.  I've never come close to using 2GB on either my phone or my iPad, so there is no real downside in terms of cost. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; So a great service to finally have on iPhone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-1331239890900685536?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/1331239890900685536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/1331239890900685536'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2011/03/setup-of-iphone-4-hotspot.html' title='Setup of iPhone 4 Hotspot'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-3670824206926709948</id><published>2010-12-29T00:44:00.002-05:00</published><updated>2010-12-29T01:43:36.413-05:00</updated><title type='text'>On Keeping Politics Out of Non-Political Blogs</title><content type='html'>This is a blog about technology and programming, that is its mission, and why readers find it*. They do not come for my political opinions. As far as my readers are concerned, I don't have them. It would be betrayal of the trust between me, and whomever visits my blog to insert snarky little bits of politics. I certainly feel betrayed and imposed upon when an otherwise fine blog or podcast feels the need to sneak in something political; do it too often and that podcast is out of my iPhone, i.e., Grammar Girl.  Same with blogs, i.e., Roughly Drafted. &lt;br /&gt;&lt;br /&gt;This comes up because of the last several minutes of the Engadget Podcast of Christmas 2010. Now the Engadget Podcast is my favorite podcast, I will actually re-listen to some episodes. It can be very funny, although the Engadget Bingo thing is lame, and it's about gadgets, so what's not to love? Well, when Joshua Topolsky and Nilay Patel decide that doing their actual job of putting on a gadget podcast and making amusing pop culture references is too unimportant and start verbally abusing Paul Miller, who disagrees with them, but more to the point, would rather talk about gadgets.&lt;br /&gt;&lt;br /&gt;If Joshua or Nilay would like to build up an audience for a political podcast, that would be swell**. But taking their pre-existing audience, who's only shared interest is the love of devices, and subjecting them to their views is a breach of the compact that comes from their podcast being listed in the Gadgets section of iTunes. &lt;br /&gt;&lt;br /&gt;Is this post an imposition on my readers? Well a bit. In it's defense, it is a meta-post about political content, not that content itself. And I have few frequent readers to offend. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* I'm not claiming I have regular readers, or many readers. I have people Googling specific technical problems and never coming back. If I'm lucky, this post will be read by a couple friends of mine, as it serves no practical purpose other than me venting. &lt;br /&gt;&lt;br /&gt;** I wouldn't actually listen to such a podcast, because for whatever reason I have no interest in podcasts or TV shows about politics, although I read a large number of political blogs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-3670824206926709948?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3670824206926709948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3670824206926709948'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2010/12/on-keeping-politics-out-of-non.html' title='On Keeping Politics Out of Non-Political Blogs'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-8891885932255498147</id><published>2010-12-21T13:57:00.005-05:00</published><updated>2011-02-09T13:58:04.045-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><title type='text'>On The Need for MonoMac</title><content type='html'>I continue to listen to the &lt;A HREF="http://www.dotnetrocks.com/default.aspx?showNum=621"&gt;Dot Net Rocks&lt;/A&gt; podcast even though I've yet to write a line of C#. It is a well done and even handed podcast, and one of these days I shall write a post about how the hosts demonstrate weekly how one can advocate a technology while maintaining credibility. But this post is about MonoMac, which I haven't used but someone at my company is, and I go to the meetings. If this means I'm writing without enough facts, then this might be a blog. &lt;br /&gt;&lt;br /&gt;[Update: I've been informed that what I've written below is not possible in MonoMac. Apparently, the MonoMac developer community cannot imagine the concept that C# isn't the solution for every programming situation. I am not a publicly profane person, but I'm tempted here. But please keep on reading about an alternate universe where programmers don't fall in love with a language at the expense of reason.]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tireless advocate for all things Mono,  Miguel de Icaza was on the show this week and he got me thinking about why anyone would use MonoMac. And I do think many people will use MonoMac, but (I hope) not for the reasons Mr. de Icaza gave on the podcast.  &lt;br /&gt;&lt;br /&gt;To summarize de Icaza's pitch for using MonoMac. If you love C# and managed code, then you can use your favorite language to write Mac applications. You'll have to do at least some work outside your beloved Visual Studio, and you'll have to use completely unfamiliar APIs but at least it'll be in C#.  And you'll get to use the whole Cocoa API, plus various other OS X technologies like Core Audio, Core Animation, etc., but they'll be wrapped in C# shims.  Oh, and you'll get a strongly typed language instead of the horrors of dealing with the chaos of loose typing. &lt;br /&gt;&lt;br /&gt;As someone who's spent his professional life writing cross-platform code, this is a really bad and limiting sales pitch. It is pitched at people who just don't want to learn another language for whatever reason, but would be willing to learn the entire OS X API, except trapped in a language for which it's calling syntax becomes cumbersome. &lt;br /&gt;&lt;br /&gt;First, of all, you have to realize that the Objective-C language is small. It is not C++, which even a professional coder might never learn in its entirety. It is a elegant little language which adds object oriented extensions to C. The fact that you spend most of your time using those extensions doesn't make them any more verbose.  It has had some further extensions in recent years, but it is still reasonably compact.&lt;br /&gt;&lt;br /&gt; Also realize that the OS X APIs are huge, composed of literally thousands of messages, methods, structures, enumerations and constants in dozens of frameworks. I've been programming on OS X for a decade, and Apple adds APIs at a rate faster than I can learn them. &lt;br /&gt;&lt;br /&gt;So, MonoMac saves you the trouble of learning a small language, while expecting you to master a large API which has been transmogrified to make sense to C# programmers. And the vast majority of the documentation and forum postings for that API assume it is in another language.  That's not much of a pitch. &lt;br /&gt;&lt;br /&gt;I used to work on a karyotyping application when I was living in suburban Chicago. It was Mac/PC and was written in C++. 90% of our code was shared between the platforms. We used standard application frameworks, at the time PowerPlant and MFC which relieved us of maintaing code every application uses, and gave us a lightweight entry into native appearances and behaviors. Almost all the document data structure and rendering code was cross-platform. So 10% of the code was dealing with the user facing part of the application or calling into native operating system services and the rest was vanilla C++ dealing with an abstract environment.  &lt;br /&gt;&lt;br /&gt;Consider a typical Model-View-Controller design. If one has a shared language like C# running in Mono, then we can factor our code such that all or almost all of the Model code is in shared vanilla C#, some or even most of the Controller code can be written in C#, although I'd prefer that Objective-C be used for Controllers on the Mac, and the bulk of the View code is no code at all, but what you get from the framework by using standard widgets, windows and other classes using the provided GUI tools. Basically, you want the framework to handle everything outside your document frame in your window. Depending on the application, you can have very high code reuse, or less if you need high performance access to operating system services, such as the example de Icaza gave of using the Audio Units API for sound processing. Regardless, this should be abstracted away and created with factories to make it callable from vanilla code. &lt;br /&gt;&lt;br /&gt;So you'd end up with 4 kinds of code:&lt;br /&gt;Vanilla C# that doesn't do much beyond manipulate vanilla objects and simple types, and implement various abstract interfaces or protocols.&lt;br /&gt;Windows specific C# that makes use of Windows frameworks&lt;br /&gt;MonoMac specific C# that makes use of native Mac services&lt;br /&gt;Objective-C for Mac specific GUI code and isn't as awkward as C# would be. &lt;br /&gt;&lt;br /&gt;For a lot of applications the first kind can be the bulk of code.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This takes discipline but it results in a more maintainable, focused code base.&lt;br /&gt;&lt;br /&gt;I think that's a better pitch. &lt;br /&gt;&lt;br /&gt;Not that I'm advocating it, I haven't tried to see if my decade old experiences with cross-platform design are transferable to the Mono runtime environment. Nor do I think Mono has proven itself enough for risking a project on it. I was floored that such a well known project only has 200 or so active users. &lt;br /&gt;&lt;br /&gt;And I like Objective-C, it's a lot of fun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-8891885932255498147?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.dotnetrocks.com/default.aspx?showNum=621' title='On The Need for MonoMac'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8891885932255498147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8891885932255498147'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2010/12/on-need-for-monomac.html' title='On The Need for MonoMac'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-6377624814481813421</id><published>2010-11-09T14:11:00.001-05:00</published><updated>2010-11-09T14:13:25.242-05:00</updated><title type='text'>Good thing I Still have Unlimited iPhone Data</title><content type='html'>&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/ATT_Netflix_Usage.png"/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-6377624814481813421?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6377624814481813421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6377624814481813421'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2010/11/good-thing-i-still-have-unlimited.html' title='Good thing I Still have Unlimited iPhone Data'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-215986570188919066</id><published>2010-11-03T18:00:00.002-04:00</published><updated>2010-11-03T18:13:48.342-04:00</updated><title type='text'>Logitech Still Sells the Z-5500</title><content type='html'>I just yesterday replaced the decade old Logitech Z-5500 Digital speaker system in my TV room. It had spent several years on my desk when I had an apartment, and then spent the last 5 years giving surround sound to my house.  It gave me reliability and a nice set of inputs. As a gadget guy, I'm just shocked that something as archaic is still being actively sold. Go look at its specification page and it touts its &amp;#8220;Analog stereo-mini (on side panel of control center) for portable CD, MP3,or MiniDisc® players&amp;#8221;. Now that's a blast from the past, the MiniDisc and portable CD player. &lt;br /&gt;&lt;br /&gt;I replaced the Z-5500 with a &lt;A HREF="http://www.amazon.com/gp/product/B003H04Q8C/ref=oss_product"&gt;Denon AVR 591&lt;/A&gt; which is a real receiver with modern HDMI ports, modern audio codecs and an auto calibration system. Still, I am going to miss the conveniently small control module of the Z-5500.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-215986570188919066?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.logitech.com/en-us/speakers-audio/home-pc-speakers/devices/224' title='Logitech Still Sells the Z-5500'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/215986570188919066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/215986570188919066'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2010/11/logitech-still-sells-z-5500.html' title='Logitech Still Sells the Z-5500'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-3394480378640000609</id><published>2010-09-30T03:52:00.002-04:00</published><updated>2010-09-30T04:18:56.101-04:00</updated><title type='text'>New version of Signal GH</title><content type='html'>Just got a note from Apple saying that a new version of my &lt;A HREF="http://itunes.apple.com/us/app/signal-gh/id289580769?mt=8"&gt;Signal GH&lt;/A&gt; iOS app to monitor over the air TV signal quality with &lt;A HREF="http://www.silicondust.com/products/hdhomerun/atsc/"&gt;HDHomeruns&lt;/A&gt; was approved. Which is good. I make little money on the product, but I like tweaking it. &lt;BR&gt;&lt;br /&gt;It has two major features: an iPad layout and a map of broadcast towers in the United States (sorry Canada).&lt;br /&gt;Both of these features were a lot of fun. The size of an iPad screen is luxurious and freeing. In this case, I just scaled everything up, as I think the tabbed interface works for this particular application. It might have been more iPadish if I'd put the settings in a popup control, but I felt people would be spending a good amount of time in setup, and would get nervous spending too much time in a spring loaded widget. Other iPad apps I've written have gone whole hog for using popups for accessing functionality.&lt;BR&gt;&lt;br /&gt;The map was a joy to create. MapKit is a great example of a framework that Apple just gets right. Getting my TV towers from a Core Data database to the screen could not have been easier due to the flexible use of protocols and categories. However, the standard drop pin wouldn't work because TV stations tend to share a single tower. So I went with a custom flower petal annotation giving me room for 7 major networks and a generic logo. &lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/LocalTVMap.png"&gt;&lt;br /&gt;Compass support was nearly as easy, although I did have to use my own custom annotation for that, when it would be nice just to set a flag and have it added. On the other hand, I felt the standard radar wave animation for the user's current location was too distracting and brought attention to the wrong detail, so I replaced it with a more static graphic merged with the compass. &lt;BR&gt;&lt;br /&gt;Thanks to my sister, Sarah Howes, for doing the research needed for populating my TV station database.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-3394480378640000609?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3394480378640000609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3394480378640000609'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2010/09/new-version-of-signal-gh.html' title='New version of Signal GH'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-2172625731802866966</id><published>2010-09-15T16:36:00.008-04:00</published><updated>2010-09-30T05:10:10.798-04:00</updated><title type='text'>Finally! Apple Embraces A Standard for Metadata in PDFs</title><content type='html'>I draw your attention to the header file &lt;i&gt;CGPDFContext.h&lt;/i&gt; in the iOS 4 SDK:&lt;BR&gt;&lt;br /&gt;&lt;CODE&gt;&lt;h5&gt;void CGPDFContextAddDocumentMetadata &lt;BR&gt;(CGContextRef context, CFDataRef metadata) CG_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_0);&lt;/h5&gt;&lt;/CODE&gt;&lt;br /&gt;&lt;br /&gt;The iOS 4 SDK has been out for several months but I hadn't noticed this change until today. Not that I have any use for it today on iOS, it's on the Mac where it is crucially needed. &lt;br /&gt;&lt;br /&gt;Starting with Mac OS X 10.7, developers will be able to embed arbitrary XML data in the PDFs they can generate with Apple's APIs. [Update: I guess there is no actual requirement of XML based on just the API. I'd recommend standardizing on XML though.] They have decided to use the method &lt;A HREF="http://partners.adobe.com/public/developer/en/xmp/sdk/XMPEmbedding.pdf"&gt;advocated by Adobe&lt;/A&gt; in which a metadata stream object with a compressed XML  payload is inserted into a PDF (Apple does the compression for you, you just have to provide a block of XML data). This is a good way of doing it, but more importantly, it is a simple and standard way of doing it. I would have preferred having an additional vendor tag where I could mark the metadata with a "com.genhelp.mydrawingapp" identifier, but that is not crucial; I can get that data from the XML.&lt;BR&gt;&lt;br /&gt;&lt;h3&gt;Why is this Important?&lt;/h3&gt;As I've explained &lt;A HREF="http://sprinkleofcocoa.blogspot.com/2008/02/we-need-pdf-replacement-for-piccomment.html"&gt;several times before&lt;/A&gt;, on the Mac we used to have this feature which I will call Round Trip Editing, wherein a user could make a drawing in one application, copy and paste the drawing into another application, and then later copy and paste back into the original application, and still be able to edit the drawing. Generations of Mac users relied on this feature to go from applications like ChemDraw into PowerPoint and back again. &lt;BR&gt;&lt;br /&gt;This feature has been lost as applications transition from using the archaic PICT clipboard flavor to the modern and beautiful PDF clipboard flavor. There was no direct way to embed large data in Apple generated PDFs, and thus developers were left on their own to munge the format if they dared. And, with no standard or expectation of data embedding, applications did not bother to preserve the original PDF resulting in data loss.&lt;BR&gt;&lt;br /&gt;Getting round trip editing working again has required 3 steps. Apple has had to provide an API for data embedding. Content generating applications have to be modified to use that API. Office applications have to be modified to return original PDFs to the clipboard when selecting a single image. With Mac OS X 10.7, step one will be here; about 4 OS versions tardy.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;BTW Here is how to call it:&lt;br /&gt;&lt;br /&gt;CFDataRef MakeAPDF(CFDataRef someXML)&lt;br /&gt;{ &lt;br /&gt;&lt;BLOCKQUOTE&gt;&lt;br /&gt; CGRect mediaRect = CGRectMake(0, 0, 400, 600); &lt;br /&gt;// use your own rect instead&lt;br /&gt;&lt;br /&gt; CFMutableDataRef result = CFDataCreateMutable(kCFAllocatorDefault, 0);&lt;br /&gt; CGDataConsumerRef PDFDataConsumer = CGDataConsumerCreateWithCFData(result);&lt;br /&gt;&lt;br /&gt;// mark the PDF as coming from your program&lt;br /&gt; CFMutableDictionaryRef auxInfo = CFDictionaryCreateMutable(kCFAllocatorDefault, 1, NULL, NULL);&lt;br /&gt; CFDictionaryAddValue(auxInfo, kCGPDFContextCreator, CFSTR("Your Programs Name"));&lt;br /&gt; CFDictionaryRef auxillaryInformation = CFDictionaryCreateCopy(kCFAllocatorDefault, auxInfo);&lt;br /&gt; CFRelease(auxInfo); &lt;br /&gt; &lt;br /&gt;// create a context to draw into&lt;br /&gt; CGContextRef graphicContext = CGPDFContextCreate(PDFDataConsumer, &amp;mediaRect, auxillaryInformation);&lt;br /&gt; CFRelease(auxillaryInformation);&lt;br /&gt; CGDataConsumerRelease(PDFDataConsumer);&lt;br /&gt;&lt;br /&gt;// actually make the call to embed your XML &lt;br /&gt; CGPDFContextAddDocumentMetadata(graphicContext, metaData);&lt;br /&gt; &lt;br /&gt; CGContextBeginPage(graphicContext, &amp;mediaRect);&lt;br /&gt;// do your drawing, like this grey rectangle&lt;br /&gt; CGContextSetGrayFillColor(graphicContext, 0.5, 0.5);&lt;br /&gt; CGContextAddRect(graphicContext, mediaRect);&lt;br /&gt; CGContextFillPath(graphicContext);&lt;br /&gt;// end your drawing&lt;br /&gt; &lt;br /&gt; CGContextEndPage(graphicContext);&lt;br /&gt; CGContextFlush(graphicContext);&lt;br /&gt; CGPDFContextClose(graphicContext);&lt;br /&gt; return result;&lt;br /&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;And here's how to get the data back. Check that the XML is yours instead of some other program's.&lt;br /&gt;CFDataRef ExtractMetaDataFromPDFData(CFDataRef pdf)&lt;br /&gt;{&lt;br /&gt;&lt;BLOCKQUOTE&gt;&lt;br /&gt; CFDataRef result = 0;&lt;br /&gt;&lt;br /&gt; CFRetain(pdf);&lt;br /&gt; const UInt8 * pdfData = CFDataGetBytePtr(pdf);&lt;br /&gt; CFIndex  pdfDataLength =  CFDataGetLength(pdf);&lt;br /&gt; CGDataProviderRef dataProvider = CGDataProviderCreateWithData(kCFAllocatorDefault, pdfData, pdfDataLength, NULL);&lt;br /&gt; CGPDFDocumentRef pdfDocument = CGPDFDocumentCreateWithProvider(dataProvider);&lt;br /&gt; CGDataProviderRelease(dataProvider);&lt;br /&gt; &lt;br /&gt; if(pdfDocument)&lt;br /&gt; {&lt;br /&gt;  CGPDFDictionaryRef docDict = CGPDFDocumentGetCatalog(pdfDocument);&lt;br /&gt;  CGPDFStreamRef metastream = 0;&lt;br /&gt;  if(CGPDFDictionaryGetStream(docDict,"Metadata", &amp;metastream))&lt;br /&gt;  {&lt;br /&gt;   CGPDFDataFormat format = CGPDFDataFormatRaw;&lt;br /&gt;   CFDataRef streamData = CGPDFStreamCopyData(metastream, &amp;format);&lt;br /&gt;   if(streamData)&lt;br /&gt;   {&lt;br /&gt;    if(format == CGPDFDataFormatRaw)&lt;br /&gt;    {&lt;br /&gt;     result = streamData;&lt;br /&gt;     CFRetain(result);&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  CGPDFDocumentRelease(pdfDocument);&lt;br /&gt; }&lt;br /&gt; CFRelease(pdf);&lt;br /&gt;  &lt;br /&gt; return result; // check to see if this is your XML&lt;br /&gt;//remember to release result when done&lt;br /&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-2172625731802866966?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2172625731802866966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2172625731802866966'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2010/09/finally-apple-embraces-standard-for.html' title='Finally! Apple Embraces A Standard for Metadata in PDFs'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-3705726933765632759</id><published>2010-08-23T17:48:00.002-04:00</published><updated>2010-08-23T18:04:23.271-04:00</updated><title type='text'>The Three Numbers in Computer Programming</title><content type='html'>When I was working at a small company in Illinois, Vysis, my team had an architect named Ian Poole who taught me many things, and one of them was the simple fact that there are only three numbers in software design: zero, one and every. By this he meant, you can support the case where there are zero copies of an entity, one copy of an entity or an arbitrary number. &lt;br /&gt;&lt;br /&gt;I ran into this problem when revamping my iPhone app to monitor antenna signal strength from an HDHomerun. I had mistakenly written it to handle two tuners in a single device. The code was littered to references to the "yellow" tuner and the "cyan" tuner, as that was the colors of their graphs.  Well, Silicon Dust came out with a version with a single tuner, which sort of shot me in the foot. And then I bought that device which gave me three tuners on my network. I had a painful time backing out my bad design choice in favor of a more arbitrary number (I did limit it to keeping track of 8 tuners, but that number is kept in only one place and could be changed in a few minutes.) &lt;br /&gt;&lt;br /&gt;The new version will be out shortly, fighting off one last bug.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-3705726933765632759?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3705726933765632759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3705726933765632759'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2010/08/three-numbers-in-computer-programming.html' title='The Three Numbers in Computer Programming'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-7333518253301272903</id><published>2010-07-08T01:08:00.002-04:00</published><updated>2010-07-08T01:12:47.268-04:00</updated><title type='text'>Maybe I Have Too Many Apple Products</title><content type='html'>&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Fanboy.png" /&gt;&lt;br /&gt;Taken with my wife's iPhone 3G S, posted with my unibody MacBook.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-7333518253301272903?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7333518253301272903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7333518253301272903'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2010/07/maybe-i-have-too-many-apple-products.html' title='Maybe I Have Too Many Apple Products'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-8439387192597721694</id><published>2010-07-07T18:44:00.002-04:00</published><updated>2010-07-07T18:50:48.697-04:00</updated><title type='text'>iPhone 4 improves on audio output isolation</title><content type='html'>I often hook up my iPhone to my car stereo and listen to podcasts while driving. I tend to drive with one earphone in place so I can click to pause or answer phone calls. In the past, whenever I turned off my car's stereo, I could still hear a indistinct and annoying noise coming through my headphones even though the sound was supposed to be going out the line level output in the phone's dock connector. Now, with the iPhone 4, it's quiet. Just another little improvement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-8439387192597721694?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8439387192597721694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8439387192597721694'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2010/07/iphone-4-improves-on-audio-output.html' title='iPhone 4 improves on audio output isolation'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-6977210129058025587</id><published>2010-06-01T00:32:00.002-04:00</published><updated>2010-06-01T01:23:34.472-04:00</updated><title type='text'>On Fixing the Personal Computer's Original Sin</title><content type='html'>A conversation with an old friend the other day brought up the limited file handling ability of the iPad. Apple really doesn't want you to deal with files as such on the iPad. When the original iPod came out, there was a lot of criticism about not allowing the user to maintain their own MP3 file trees and drag and drop onto the device as competing products allowed; and Apple kept it that way. These are two examples of rectifying one of the original sins of the computer: forcing users to deal in an ad hoc manner with individual documents as files. &lt;BR&gt;&lt;br /&gt;Oh, you might say that it is freedom itself to be responsible for filing away today's expense report as a spreadsheet inside of a folder with 500 not quite identical others, or knowing where each of 10 versions of Margaritaville is located, and which is your favorite. To the contrary, it is just another example of the user being trapped by a lack of imagination on the software architect's part into doing something the computer should be much better at doing.&lt;BR&gt;&lt;br /&gt;Or you might say that the individual file is a natural unit of information, like the Boolean bit; and that is not true, the computer file was invented by a man (unless it was invented by Grace Hopper, which I doubt); and computers could have evolved with some other mechanism; perhaps mimicking the human brain which I don't believe uses files. &lt;BR&gt;&lt;br /&gt;If I were a bench chemist, and every day I drew some new variant of a steroid, where would I want my drawings, in individual proprietary documents, or in a database giving my work structure and context? Pretty obviously in a database. It creeps up on us, the slow flood of documents; the more organized among us can keep it together through ever deepening trees of folders and files, but eventually individual files in folders becomes unmanageable. I've been using a computer for 25 years, I look forward to at least another 40 years of use. There is no way I will be able to productively keep track of all my creations over that time in a tree structure. As it is, anything older than 5 years might as well be non-existent. &lt;BR&gt;&lt;br /&gt;So the operating system vendors introduce search, and we get by like our computers are mini-Googles; as long as we can remember some key phrase we can find it; except when words fail us, or the document can't be parsed by the indexer. &lt;BR&gt;&lt;br /&gt;And the cloud beckons. Anyone who thinks the cloud is just a well sorted FTP site, doesn't understand. The iPad is right now at one of those points where Apple can see but cannot provide, or even enunciate the ultimate solution, but does not want users to get into the habit of using individual files for their document needs; so we get the hacky solutions that will be cast aside the moment anything remotely elegant is provided. And I don't know what this solution is either. People have been trying to improve upon the file based system for years; the Newton didn't have files, BeOS had some sort of database file system. OpenDoc tried to get all documents to live together in harmony, etc. And none of these were a market success. Files will not die easily; and you will still have to export to a file for a good long time. &lt;BR&gt;&lt;br /&gt;Baring a solution, the point of this entry was just to ask people to keep an open mind about files or the lack of them. Files are not the thing you want; you want to create, edit and view media and documents, and how they are stored in secondary to how quickly you get to them, and how safely they are stored.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-6977210129058025587?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6977210129058025587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6977210129058025587'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2010/06/on-fixing-personal-computers-original.html' title='On Fixing the Personal Computer&apos;s Original Sin'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-5215440759427965358</id><published>2010-05-24T07:49:00.003-04:00</published><updated>2010-05-24T08:36:49.914-04:00</updated><title type='text'>Flash's History of Neglect on the Mac - An Example</title><content type='html'>I turn your attention to this apparently genuine June 18, 2008 &lt;A HREF="http://www.craftymind.com/guimark/#comment-1032"&gt;forum comment&lt;/A&gt; by &lt;A HREF="http://blog.kaourantin.net/"&gt;Tinic Uro&lt;/A&gt;, which I will quote:&lt;br /&gt;&lt;BLOCKQUOTE&gt;We have identified the bottleneck in the Flash Player for OSX. Like in the other plugins the culprit is text rendering, in this case rendering using device text. This benchmark spends &gt;50% in a single OSX function: ATSUGetUnjustifiedBounds. You can verify this yourself using Shark. I am working on a change which will cache the results returned by that API to where this call should completely disappear from the performance profile.&lt;br /&gt;&lt;br /&gt;If everything turns out well I hope to see that change in future release. Some new numbers on my Mac Pro (note that these represent numbers which can change at any time if we decide to do things differently):&lt;br /&gt;&lt;br /&gt;Before the change: ~8.5fps&lt;br /&gt;After the change: ~28fps in Safari (~26fps in Firefox)&lt;/BLOCKQUOTE&gt;&lt;br /&gt;This speaks volumes about how little platform specific TLC Adobe historically put into the Mac plugin. A performance bottleneck as glaringly obvious as this should never have been seen by a user, much less bedeviled users and Flash developers for years before someone bothered to run Shark, or now days the CPU Sampler Instrument. Adobe must never have tried to optimize on the Mac at all; if I found a common use case where I was spending half my time measuring the same block of text over and over again, I'd joyously jump on the opportunity to make my user's lives easier because I could fix that in an hour. Apparently, Adobe couldn't be bothered to do the right thing until years later, and countless hours were lost by Flash developers trying to coax the Plugin into looking just as smooth on the Mac as it did on Windows. &lt;br /&gt;&lt;br /&gt;And now that Apple is the big dog in the mobile application space, it's payback time for all the years of neglect and shoddiness. And with the eyes of the world upon it, Adobe is having to do the actual heavy lifting of getting decent performance and battery life out of a handful of Android phones just to prove Apple wrong. At least something good might come of this.&lt;br /&gt;&lt;br /&gt;In the meantime, I've installed &lt;A HREF="http://clicktoflash.com/"&gt;Click to Flash&lt;/A&gt; on my Mac and gotten iPad like silky smooth performance out of Safari. it is amazing what all those little ads cluttering up the dozens of open pages I tend to accumulate were doing to my poor MacBook.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-5215440759427965358?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.craftymind.com/guimark/#comment-1032' title='Flash&apos;s History of Neglect on the Mac - An Example'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5215440759427965358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5215440759427965358'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2010/05/flashs-history-of-neglect-on-mac.html' title='Flash&apos;s History of Neglect on the Mac - An Example'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-5517585875251109654</id><published>2010-05-07T13:50:00.004-04:00</published><updated>2010-05-07T14:01:45.211-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='speculation'/><title type='text'>Will the Next 13" MacBook Pro have an Optical Drive?</title><content type='html'>I've been following the news about the new MacBook 13" still having a Core 2 Duo when its bigger brothers have i5 and i7s. Apparently this was because there was not room to fit the added NVidia chipset needed to allow GPU switching. If this chipset problem persists, I'm going to bet that Apple removes the optical drive from the 13" MacBook Pro, giving room for the chipset and a bigger battery, and further I'll speculate that they begin selling a little NAS computer that includes: a shareable optical drive, a centralized iTunes server, a Time Machine server, and AppleTV functionality. This mashup of 4 separate products: Time Capsule, AppleTV, MacBook Air optical drive, and the iTunes library functionality makes a lot of sense, and would be billed as an energy efficient and environmentally friendly way to reduce redundancy.  And somehow, this will tie into their cloud strategy which will be coming online shortly. And it would probably have enough GPU powered oomph  for on the fly re-compression of video for use on iPhones and iPads.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-5517585875251109654?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5517585875251109654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5517585875251109654'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2010/05/will-next-13-macbook-pro-have-optical.html' title='Will the Next 13&quot; MacBook Pro have an Optical Drive?'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-4226309549404172969</id><published>2010-03-24T13:30:00.006-04:00</published><updated>2010-03-30T18:03:27.783-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='energy efficiency'/><title type='text'>Bye Bye Pentium 4 Server</title><content type='html'>No sooner had I assembled a mini home theater PC for the TV room, but &lt;A HREF="http://en.wikipedia.org/wiki/Amazon_Vine"&gt;Amazon Vine&lt;/A&gt; offered me a &lt;A HREF="http://www.amazon.com/Zotac-MAG-Intel-NVIDIA-HD-ND01-U/dp/B0030UH2J4/qid=1269451960"&gt;Zotac MAG HD-ND01-U&lt;/A&gt; which is basically the same thing in a more appliance oriented packaging. &lt;br /&gt;&lt;br /&gt;The guts of my original HTPC will now be moving into the house's new Linux/MythTV server: add a large hard drive, a cheap DVD drive and a larger case. This is going to save me a lot of electricity. A Pentium 4 is a pretty poor choice for a lightweight server, and is now draining over $10 of power a month; the new Atom based server should draw less than a third as much energy and maybe less, as I'm hoping the more modern design will have better idle characteristics. I'll save quite a bit of money in the long run in mothballing my old Dell. And the new Atom/Ion motherboard should be fine for serving the occasional file and recording TV shows. &lt;br /&gt;&lt;br /&gt;2.0 GHz Pentium 4 + hard drive + external hard drive = 110 W (or so) at idle&lt;br /&gt;Atom N330 + laptop drive + sleeping hard drive = 25 W idle &lt;br /&gt;&lt;br /&gt;If I pay a dollar for ever 10W per month then I'm saving around $8 a month or $96 a year, so the added $180 I'm spending will be paid for in 2 years (or in 4 years if I had had to buy a motherboard and RAM). And I'll have a quiet server that isn't annoying me constantly with its fan.&lt;br /&gt;&lt;br /&gt;[Update: It's so pleasantly quiet in my laundry room today. Just have to migrate the svn server on the little NAS to the new server and it's going to be so peaceful in the basement.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-4226309549404172969?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/4226309549404172969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/4226309549404172969'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2010/03/bye-bye-pentium-4-server.html' title='Bye Bye Pentium 4 Server'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-8365741419685210793</id><published>2010-03-09T06:31:00.004-05:00</published><updated>2010-03-09T12:46:33.435-05:00</updated><title type='text'>Holding onto Legacy PCI Cards is Limiting</title><content type='html'>After the happiness of putting together an NVidia Ion HTPC for the TV room, I've been looking at replacing the Linux server in the laundry room. It's a typical noisy, energy hog of a Pentium 4 Dell, non-gigabit ethernet, with multiple hard drives either inside it or in an external case. I'd like to replace it with a low power, quiet, modern model. I could collapse my MythTV backend, SVN server, and file server, into one box and save on the order of $15/month in electricity. So, I'd like to move to something like: &lt;br /&gt;&lt;UL&gt;&lt;LI&gt;Dual core Intel Atom N300 processor&lt;/LI&gt;&lt;LI&gt;Ion chipset&lt;/LI&gt;&lt;LI&gt;Small SSD boot drive&lt;/LI&gt;&lt;LI&gt;Large (1.5 or 2.0TB) Green Drive&lt;/LI&gt;&lt;LI&gt;2 GB RAM&lt;/LI&gt;&lt;LI&gt;mini-ITX form factor&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;The fly in this ointment is that I have a ATSC tuner on a PCI card in the current box (a very reliable &lt;A HREF="http://www.pchdtv.com/hd_3000_right_down.html"&gt;PCHDTV 3000&lt;/A&gt;), and getting a mini-ITX Ion with a PCI slot is limiting. As far as I can tell, it is limited to one motherboard: the &lt;A HREF="http://www.newegg.com/Product/Product.aspx?Item=N82E16813131408"&gt;ASUS AT3N7A-I&lt;/A&gt;. And anytime I see customer reviews that include such tidbits as "noisy fan" or "uses more energy than other Ion motherboards" I start wishing for other options. &lt;BR&gt;&lt;br /&gt;And the other option is to go with another network tuner. I already have one &lt;A HREF="http://www.silicondust.com/products/hdhomerun_home_atsc"&gt;HDHomerun&lt;/A&gt; which along with my PCI tuner gives me the capacity to record three simultaneous shows on the rare days when that's a good thing. Replacing the PCI version with another HDHomerun would open up a larger world of Ion or Atom motherboards with more modern card slots. I even see that Silicon Dust has recently released an economy single tuner model which can be had from newegg for $81.97 shipped. And this will keep the new server cooler and quieter, as well as having another tuner Windows Media Center on my wife's computer can access.  Win, win, win.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-8365741419685210793?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8365741419685210793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8365741419685210793'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2010/03/holding-onto-legacy-pci-cards-is.html' title='Holding onto Legacy PCI Cards is Limiting'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-2303085765758634505</id><published>2010-02-23T15:30:00.003-05:00</published><updated>2010-02-23T16:07:16.245-05:00</updated><title type='text'>Could Apple Transition to Using iPhone Apps as Safari Plugins?</title><content type='html'>I've been knee deep in trying to keep an old style NPAPI (Netscape) plugin working under Snow Leopard, and believe me it is not easy. And one of the reasons it is not easy is that Apple has used the 64-bit transition to lock down what an NPAPI plugin can do and when it can do it. No longer are we allowed to do things like bring up our own windows, draw whenever we feel like it, create our own timers, track our own mice and generally do things the easy way; we have to live in the browser and follow the browser's rules. &lt;BR&gt;I refer you to the &lt;A HREF="http://developer.apple.com/mac/library/documentation/InternetWeb/Conceptual/WebKit_PluginProgTopic/Tasks/NetscapePlugins.html"&gt;Web Plugin Programming Topics Guide&lt;/A&gt;&lt;br /&gt;&lt;BLOCKQUOTE&gt;Beginning in Mac OS X v10.6, on 64-bit-capable computers, Netscape-style plug-ins execute in an out-of-process fashion. This means that each Netscape-style plug-in gets its own process separate from the application process. This design applies to all Netscape-style plug-ins. It does not apply to WebKit plug-ins, nor at present to WebKit-based applications when running in 32-bit mode.)&lt;/BLOCKQUOTE&gt; &lt;BR&gt;&lt;br /&gt;It goes on to enumerate a large number of new restrictions on how plugins are supposed to operate in their new out of process home. At this point, it becomes pretty hard to justify using a NPAPI style plugin for any but the simplest plugin for Safari; it is just too strangling. So the mind turns to WebKit plugins which are basically Cocoa NSViews with a few limitations and added message handlers. As the quote above says they are not (at present) limited in such a way as Netscape plugins; in this way Apple is nudging people to use WebKit plugins if for no other reason that they allow you to do things that the NPAPI plugin do not. &lt;BR&gt; &lt;br /&gt;And here we come to the idea for this posting, it seems as though Apple is interested in locking down and rationalizing Safari plugins. It is also reasonable that at sometime in the future, they will allow plugins for Safari on the iPad. It is also almost a given that those plugins will not be NPAPI style plugins, but will instead be UIView or UIViewController derivatives. And at that point, the question becomes, wouldn't the UIView style plugin with its simpler and more modern object design make a cleaner foundation for plugins for Safari on the Mac? Apple already has an iPhone simulator on the Mac. Of course, there would have to be some extension allowing mouse hovering events. &lt;BR&gt;&lt;br /&gt;&lt;UL&gt;Advantages&lt;LI&gt;Code sharing between Mac and iPad&lt;/LI&gt;&lt;LI&gt;Plugins are closer in scope to iPhone Apps then full blown Mac apps.&lt;/LI&gt;&lt;LI&gt;At this point most Objective-C programmers are iPhone developers so developer pool would be larger&lt;/LI&gt;&lt;LI&gt;Expand iPhone apps to the Mac&lt;/LI&gt;&lt;LI&gt;iPhone Apps are used to being sandboxed&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;Anyway, just a thought.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-2303085765758634505?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2303085765758634505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2303085765758634505'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2010/02/could-apple-transition-to-using-iphone.html' title='Could Apple Transition to Using iPhone Apps as Safari Plugins?'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-2111786428580942666</id><published>2010-02-18T09:26:00.010-05:00</published><updated>2010-03-01T12:06:40.284-05:00</updated><title type='text'>Inexpensive Ion HTPC</title><content type='html'>As I want to improve my free MythTV remote, and I needed to "eat my own dog food", I decided to build a HTPC box for the TV room to run the MythTV frontend. I'd been interested for a while in a small, low power PC based around the Nvidia Ion chipset. A little research indicated the board to get was the &lt;A HREF="http://www.amazon.com/review/R34R1XAVM56PF0/ref=cm_cr_rdp_perm"&gt;Zotac IONITX-A-U&lt;/A&gt; as it:&lt;UL&gt;&lt;LI&gt;Came in a compact, mini-ITX form.&lt;/LI&gt;&lt;LI&gt;Has the 64-bit capable dual core Atom 330N processor&lt;/LI&gt;&lt;LI&gt;Has multiple output ports including VGA, HDMI for video and SPDIF coax and TOSLink optical for audio, amongst others.&lt;/LI&gt;&lt;LI&gt;Gigabit Ethernet&lt;/LI&gt;&lt;LI&gt;External power supply to keep the heat out of the case.&lt;/LI&gt;&lt;/UL&gt;&lt;BR&gt;The most important feature was quiet, with the related property of energy efficiency. There are many cheap PCs out there, but few can play 1080i MPEG2 videos while draining 31 Watts. &lt;BR&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Zotac_Ionitx.png"/&gt;&lt;BR&gt;&lt;br /&gt;I put in &lt;A HREF="http://www.amazon.com/gp/product/B000PVNQLE/ref=oss_product"&gt;2GB of RAM&lt;/A&gt; which allowed me to configure the BIOS to set aside half a gig for video memory. I removed the included wireless card, as I have Gigabit ethernet in my TV cabinet, and there's no reason to waste whatever minimal energy would be used by the card. Threw in a 60 GB laptop drive I had from a few MacBooks ago, and put it in a &lt;A HREF="http://www.mini-box.com/M350-universal-mini-itx-enclosure"&gt;small case&lt;/A&gt;. The hardest part of installing MythBuntu 9.1 64-bit, was scrounging up an external optical drive. So, all in all a very easy thing to put together. &lt;BR&gt;&lt;br /&gt;It works fairly well. I've put my children's DVD collection on a network share and use MythVideo to watch that and recorded TV shows. Since this was my first real standalone MythTV frontend, I had to rejigger my video setup such that both the backend and frontend used both the same relative paths to videos and movie posters (both Linux boxes have paths of the form /mnt/MyNAS/MyVideos and /mnt/MyNAS/MyPosters). Once this was all setup, it's extremely convenient having a kid's movie a few touches away. I had read complaints about the fan needing to be run at a lower speed, but I really can't hear it from the couch.&lt;BR&gt;&lt;br /&gt;&lt;UL&gt;Energy usage measured via Kill-A-Watt&lt;LI&gt;Idle Running MythTV Frontend: 25W&lt;/LI&gt;&lt;LI&gt;Playing DVD Image: 26W&lt;/LI&gt;&lt;LI&gt;Playing 720p MPEG2 (recording of &lt;i&gt;24&lt;/i&gt; on Fox): 28W&lt;/LI&gt;&lt;LI&gt;Playing 1080i MPEG2 (&lt;i&gt;Big Bang Theory&lt;/i&gt; on CBS): 31W&lt;/LI&gt;&lt;/UL&gt;I have got to figure out how to get the box to put itself to sleep when I'm not using it. &lt;BR&gt;&lt;br /&gt;My old LCD TV is impossible to get the VGA just right (no surprise that) so I have a two inch black bar on the right of the display, but I'll be moving to use the DVI port as soon as Monoprice gets me an HDMI switch. &lt;BR&gt;&lt;br /&gt;It's interesting as a Mac guy seeing this little DIY assembly. On the one hand, it's pretty inexpensive and I wouldn't want to waste a Mac on single purpose computing. On the other hand, it's pretty darn cheap. Here's a photo comparing a older generation Mac Mini with my system.&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Zotac_Vs_MacMini.png"/&gt;&lt;BR&gt;&lt;br /&gt;The Mini is definitely a superior computer in terms of build quality. The M350 case is nice enough, but it is still ill fitting sheet metal, and the ports still wiggle and flex when you try to push a connector in. In comparison, the Mini is just rock solid, and smaller while still having a faster processor and an optical drive.  And it's a darn sight more attractive. On the other hand, the Zotac has a ton of extra ports, including a variety of internal SATA and USB connectors.  Different needs.&lt;BR&gt;&lt;br /&gt;Cost:&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;Motherboard: $185&lt;/LI&gt;&lt;LI&gt;RAM: $45&lt;/LI&gt;&lt;LI&gt;Case (with Shipping): $50&lt;/LI&gt;&lt;LI&gt;Hard Drive: Free&lt;/LI&gt;&lt;LI&gt;--------------&lt;/LI&gt;&lt;LI&gt;Total: $280&lt;/LI&gt;&lt;/UL&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-2111786428580942666?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2111786428580942666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2111786428580942666'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2010/02/inexpensive-ion-htpc.html' title='Inexpensive Ion HTPC'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-429044885385182584</id><published>2010-02-01T16:08:00.002-05:00</published><updated>2010-02-01T16:12:40.599-05:00</updated><title type='text'>A Cell Phone Game for Children</title><content type='html'>I was playing hide and seek with my 2 and 3 year olds, and came up with this variation. &lt;br /&gt;&lt;br /&gt;&lt;H5&gt;Requirements&lt;/H5&gt;2 Cell phones, one of which with a speaker phone mode.&lt;br /&gt;&lt;H5&gt;Instructions&lt;/H5&gt;1) Call the phone with the speaker phone mode, answer and put it in speaker mode.&lt;BR&gt;2)Have someone hide the phone in another room.&lt;BR&gt;3)Let the child try and find it by yelling into his phone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-429044885385182584?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/429044885385182584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/429044885385182584'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2010/02/cell-phone-game-for-children.html' title='A Cell Phone Game for Children'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-8864704335228916411</id><published>2009-12-22T16:24:00.002-05:00</published><updated>2009-12-22T16:52:06.261-05:00</updated><title type='text'>Get the PSD Files From Your Graphic Artists</title><content type='html'>If you hired a coder to write an iPhone app, you would expect the source code along with a delivered binary. Similarly, if you hire a graphic artist, you want their source files along with a finished bitmap file. In my experience, most graphic artists use Photoshop, which means they do their editing with PSD (Photo Shop Document) files, and will export out a TIFF, PNG or JPEG as needed. You never want to edit and re-compress a PNG or JPEG and you rarely want to edit a TIFF. Which means, if you want to re-use a graphic for another purpose, you need those PSD files, or whatever file formats are native to their editing software. &lt;BR&gt;&lt;br /&gt;&lt;H5&gt;An Example:&lt;/H5&gt;&lt;BR&gt; Let's say I had contracted with a third party to design my beautiful company logo.&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/genhelp_logo.png" /&gt;&lt;br /&gt; Great.&lt;BR&gt;&lt;br /&gt;Now two years later I need a version without the fake glassy front. If I have the original, this takes the time it takes for me to launch PhotoShop Elements, uncheck a box next to the "glassy button" layer, and export the result to web.&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/genhelp_logo_noglass.png" /&gt;&lt;br /&gt; If I only have the PNG file, I'm basically out of luck if I can't get ahold of the artist and will have to have someone else redraw the logo from scratch.&lt;BR&gt;&lt;br /&gt;And not only should the PSD files be in your possession, they should be in your source control system, along with all the other critical changeable items you've spent so much time and money creating. &lt;BR&gt;&lt;br /&gt;I've been in a situation where I have literally 100 toolbar icons in PNG form and I have no easy way to make a bigger size because the outsource artist has consistently neglected to deliver the original files. Frustrating.&lt;BR&gt;&lt;br /&gt;Also, once you have the PSD files, have a look and see if they are well organized with ample use of layers, and layer naming. Maybe, there is no way to turn off the glass button by hitting the hide layer checkbox, maybe there is only one layer, and the artist is incompetent. Maybe that's why you had to ask.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-8864704335228916411?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8864704335228916411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8864704335228916411'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/12/get-psd-files-from-your-graphic-artists.html' title='Get the PSD Files From Your Graphic Artists'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-680292017312580203</id><published>2009-12-15T12:32:00.005-05:00</published><updated>2009-12-15T12:45:37.074-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mythbuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='pchdtv'/><category scheme='http://www.blogger.com/atom/ns#' term='mythtv'/><title type='text'>MythBuntu 9.10 Quickly Dying Due to missing PCHDTV firmware</title><content type='html'>So, I have been pretty unhappy with my MythTV for the last week, as something was seriously wrong with it. It would work for a while and then performance would collapse to the point I couldn't even SSH into it. Apparently, there was a massive memory leak, and the swap became exhausted resulting in the kernel doing nothing but try to find a few extra bytes.&lt;BR&gt;&lt;br /&gt;  This was after I pushed the button to upgrade to 9.10. And if there is anything I less want to do is spend more time tweaking Linux. &lt;br /&gt;&lt;br /&gt;Anyway,  I took a few minutes this morning to look through /var/log/messages and found it was jam packed with:&lt;br /&gt;&lt;BLOCKQUOTE&gt;...&lt;br /&gt;Dec 14 06:53:40 MythTV kernel: [25073.152929] or51132: No firmware uploaded(timeout or file not found?)&lt;br /&gt;Dec 14 06:53:40 MythTV kernel: [25073.653032] or51132: Waiting for firmware upload(dvb-fe-or51132-vsb.fw)...&lt;br /&gt;Dec 14 06:53:40 MythTV kernel: [25073.653042] cx8800 0000:02:0c.0: firmware: requesting dvb-fe-or51132-vsb.fw&lt;br /&gt;Dec 14 06:53:41 MythTV kernel: [25073.902202] or51132: No firmware uploaded(timeout or file not found?)&lt;br /&gt;Dec 14 06:53:41 MythTV firmware.sh[23812]: Cannot find  firmware file 'dvb-fe-or51132-vsb.fw'&lt;br /&gt;Dec 14 06:53:41 MythTV kernel: [25074.401098] or51132: Waiting for firmware upload(dvb-fe-or51132-vsb.fw)...&lt;br /&gt;Dec 14 06:53:41 MythTV kernel: [25074.401109] cx8800 0000:02:0c.0: firmware: requesting dvb-fe-or51132-vsb.fw&lt;br /&gt;Dec 14 06:53:41 MythTV firmware.sh[23823]: Cannot find  firmware file 'dvb-fe-or51132-vsb.fw'&lt;br /&gt;Dec 14 06:53:41 MythTV kernel: [25074.780264] or51132: No firmware uploaded(timeout or file not found?)&lt;br /&gt;Dec 14 06:53:42 MythTV kernel: [25075.281031] or51132: Waiting for firmware upload(dvb-fe-or51132-vsb.fw)...&lt;br /&gt;Dec 14 06:53:42 MythTV kernel: [25075.281042] cx8800 0000:02:0c.0: firmware: requesting dvb-fe-or51132-vsb.fw&lt;br /&gt;Dec 14 06:53:42 MythTV firmware.sh[23839]: Cannot find  firmware file 'dvb-fe-or51132-vsb.fw'&lt;br /&gt;Dec 14 06:53:42 MythTV kernel: [25075.503654] or51132: No firmware uploaded(timeout or file not found?)&lt;br /&gt;Dec 14 06:53:43 MythTV kernel: [25076.001099] or51132: Waiting for firmware upload(dvb-fe-or51132-vsb.fw)...&lt;br /&gt;Dec 14 06:53:43 MythTV kernel: [25076.001110] cx8800 0000:02:0c.0: firmware: requesting dvb-fe-or51132-vsb.fw&lt;br /&gt;Dec 14 06:53:43 MythTV kernel: [25076.266695] or51132: No firmware uploaded(timeout or file not found?)&lt;br /&gt;Dec 14 06:53:43 MythTV firmware.sh[23850]: Cannot find  firmware file 'dvb-fe-or51132-vsb.fw'&lt;br /&gt;...&lt;br /&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;Googling "Cannot find firmware file" dvb gave me this &lt;A HREF="http://ubuntuforums.org/showthread.php?t=1310821"&gt;forum post&lt;/A&gt; which very helpfully gave the proper command line solution:&lt;BLOCKQUOTE&gt;sudo apt-get install linux-firmware-nonfree&lt;/BLOCKQUOTE&gt; Now my MythTV can go 20 minutes without grinding to a halt. &lt;br /&gt;&lt;br /&gt;Now, as to whether a missing firmware to a tuner card should bring a linux distribution to a halt is another thing entirely.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-680292017312580203?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://ubuntuforums.org/showthread.php?t=1310821' title='MythBuntu 9.10 Quickly Dying Due to missing PCHDTV firmware'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/680292017312580203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/680292017312580203'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/12/mythbuntu-910-quickly-dying-due-to.html' title='MythBuntu 9.10 Quickly Dying Due to missing PCHDTV firmware'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-8570471996829243077</id><published>2009-12-05T22:51:00.002-05:00</published><updated>2009-12-05T22:55:17.212-05:00</updated><title type='text'>MythBuntu upgrade and mythcommflag killing my MythTV</title><content type='html'>So, I pushed the button and upgraded the MythBuntu box in the basement, and bad things happened. Oh, the new MythTV interface is lovely. But the box became utterly non-responsive. Turns out that the server had spun up 4 instances of the commercial flagging process and each was taking one quarter of the CPU. And I don't even care if my commercials get flagged or not. Anyway, went into mythtv-setup and turned off commercial flagging, and things got a whole lot better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-8570471996829243077?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://mythtv.org' title='MythBuntu upgrade and mythcommflag killing my MythTV'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8570471996829243077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8570471996829243077'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/12/mythbuntu-upgrade-and-mythcommflag.html' title='MythBuntu upgrade and mythcommflag killing my MythTV'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-1246142788394009774</id><published>2009-12-05T05:33:00.002-05:00</published><updated>2009-12-05T05:56:56.105-05:00</updated><title type='text'>How Not to Ask For A Feature</title><content type='html'>"best RDP" reviews my Signal GH iPhone app for HDHomerun&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Title: "piece of junk" &lt;br /&gt;Body:"This thing is worthless until they add QAM cable scanning capabilities."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;First of all, the "they" is me, Glenn Howes&amp;mdash;father of two, husband, software engineer, PhD Chemist, and occasional iPhone developer. I have made a grand total of $392.05 on this app, yet still found the time to release 2 updates to it when it made absolutely no monetary sense to do so. My work is not junk, it is of the highest engineering quality I could make it. I've spent hours tracking down bugs, ran static analysis of the code, put the executable through performance instruments for memory allocations and performance, and optimized the launch time. I did this when I had other paying projects waiting my time because I like this little app and I want it to be as perfect as I can make it.&lt;br /&gt;&lt;br /&gt;It just lacks a feature you desire, a feature which is neither promised nor implied by the product description in iTunes. If you had e-mailed me requesting this feature, I would have seriously considered including it even though an app, who's primary function is monitoring antenna signal quality is not going to be very interesting looking at digital cable traffic.  Now, I'm not inclined to add this feature, and you have only your bad social skills to blame.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-1246142788394009774?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewArtist?id=286015711' title='How Not to Ask For A Feature'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/1246142788394009774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/1246142788394009774'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/12/how-not-to-ask-for-feature.html' title='How Not to Ask For A Feature'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-5318844330930996065</id><published>2009-11-18T02:13:00.003-05:00</published><updated>2009-11-18T02:28:58.659-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MacBook'/><title type='text'>My Unibody MacBook had Been Grinding to a Halt</title><content type='html'>I'm used to my Macs being reliable; of going months between forced restarts. And yet, two weeks ago, I found myself restarting my unibody MacBook a couple times an hour. Apps would just lock up with the spinning disk cursor, and I'd go to another app and it would soon lock up to. I associated this with something fairly disk intensive, like doing a Spotlight search, and I found that if I avoided Spotlight things would be OK most days. I tried rebuilding the Spotlight database, reinstalling 10.6.0, upgrading to 10.6.2, etc., with no help. &lt;br /&gt;&lt;br /&gt;Finally, under the working theory something was wrong with my 500 GB Western Digital Scorpio Blue drive, I ordered and installed a new 640 GB Western Digital Scorpio Blue drive. And this worked. I don't know if it was the hardware or the completely clean install or the act of reinserting the drive, but it worked and my Mac is back to its normal reliable self. And I've got more disk space than I know what to do with.  I learned my lesson a few years back about waiting for a hard drive to fail; I no longer give them a second chance at catastrophe.&lt;br /&gt;&lt;br /&gt;This might be the last mechanical hard drive I ever buy for a laptop. SSD capacities are overtaking mechanical, and I would certainly pay $300 for a 512 GB SSD of reasonable read and write throughput. Maybe this time next year.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-5318844330930996065?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5318844330930996065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5318844330930996065'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/11/my-unibody-macbook-had-been-grinding-to.html' title='My Unibody MacBook had Been Grinding to a Halt'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-2632941003404896723</id><published>2009-11-16T11:16:00.004-05:00</published><updated>2009-11-16T14:32:01.803-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reviewing'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon Vine'/><title type='text'>When the Books are Free - Amazon Vine</title><content type='html'>&lt;p&gt;A few months ago, I noticed an invitation to join Amazon Vine program on my Amazon front page. I clicked on it, realized it wasn't a scam and signed up. And now I get 4 free things a month; from a limited catalog of newly released products. Mostly books are available, but I've also received software and iPod accessories.  All I have to do is review three fourths of what I get and I stay in good standing. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;It is awesome getting free stuff. The Phillips iPod dock/CD Player/Radio in the kitchen is sweet. But that is the exception, only the quickest get gadgets, and most of the time I have a choice between books and nothing. And getting a free book is hardly a bargain: It takes hundreds of dollars of my time to read, and I don't have the universe of books to pick from, I have whatever is in the newsletter, so I have to be picky and choose only titles which are  of use&amp;mdash;a book on business law for my wife's business&amp;mdash;or of interest&amp;mdash;a book on how to draw dinosaurs and aliens.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;One nice thing is the motivation to read; to keep up my 75% review rate. It isn't often I read 3 books in 2 months. I just wish they offered more books about software engineering and fewer about adolescent vampires (or whatever constitutes juvenile fiction).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Amazon gets value from me. Under the theory I'll get offered items similar to things I buy or review, I bought a laptop hard drive from Amazon rather than Newegg; and I've been making sure to &lt;A HREF="http://www.amazon.com/gp/cdp/member-reviews/ATS2855497V0I/ref=cm_cr_auth/002-2000087-1214410"&gt;review&lt;/A&gt; anything that moves to push up my ranking. Just passed into the top 3000 woo hoo.. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;As to whether I'm unbiased about products I'm given to hold on to (I can't resell them), I think I'm OK. I certainly have a happy feeling about being given something nice, but on the other hand, a mediocre book is such a pain to trudge through, and a junky alarm clock just takes up space.  So far, I've given out a variety of star ratings, pretty much in line with things I've purchased with my own dimes; maybe a bit lower as at least when I buy something on my own I have some expectation it will be of high quality.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Anyway, when you see the "Vine Voice" badge on a review on Amazon, you'll know it's somebody like me; just an ordinary consumer who likes to write reviews and lucked into getting free stuff.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-2632941003404896723?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2632941003404896723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2632941003404896723'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/11/when-books-are-free-amazon-vine.html' title='When the Books are Free - Amazon Vine'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-1763229632104760897</id><published>2009-11-10T03:07:00.002-05:00</published><updated>2009-11-10T03:41:59.732-05:00</updated><title type='text'>When Apple Doesn't Follow It's Patterns: UIScrollView</title><content type='html'>A comment in UIScrollView.h&lt;br /&gt;&lt;FONT COLOR="#226666"&gt;&lt;BLOCKQUOTE&gt;// override points. default is to call touch methods on the content subview. if -touchesShouldCancelInContentView: returns NO in order to start dragging after we have started tracking the content view, we don't drag and continue to feed events to the content subview. if -touchesShouldBegin:withEvent:inContentView: returns NO, we don't send events even if we don't drag&lt;br /&gt;&lt;/BLOCKQUOTE &gt;&lt;/FONT&gt;&lt;br /&gt;&lt;p&gt;So basically, if you want to modify the behavior of how a UIScrollView drags, you need to create a subclass. Fine, that's basic polymorphism, but it isn't the way most UI behaviors are changed in Cocoa on the iPhone. Typically, behaviors are changed by the use of delegate objects, and there already is a UIScrollViewDelegate interface defined. It's not clear to me why touchesShouldBegin:withEvent:inContentView and touchesShouldCancelInContentView were not just added to the delegate. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Why is this important? Well first of all, one of the joys of Cocoa programming on the iPhone is that the object model tends to be more consistent then desktop Cocoa. Everything fits together, and you know where to look for the hook which allows you to customize your app's behavior. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Secondly, I think Apple was right to choose the delegate model over object subclassing. It's less fragile, in that you are less likely to rely on the original object's behavior being constant. And some Cocoa objects are basically impossible to subclass; for instance UIButton cannot be subclassed because it isn't a "real" object. And from a coding point of view, the delegate solves both the problem of changing behavior and intercommunicating between objects.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So, when you see a comment like the above, it sticks out like a sore thumb in what is normally a disciplined and consistent API.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-1763229632104760897?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/1763229632104760897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/1763229632104760897'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/11/when-apple-doesnt-follow-its-patterns.html' title='When Apple Doesn&apos;t Follow It&apos;s Patterns: UIScrollView'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-6083730265759912561</id><published>2009-11-02T16:27:00.002-05:00</published><updated>2009-11-02T16:34:40.629-05:00</updated><title type='text'>New Version of Signal GH</title><content type='html'>Apple has sent me a notice that version 1.1.3 of Signal GH&amp;mdash;my iPhone app to get the signal quality of OTA TV broadcasts with an HDHomerun&amp;mdash;is available for download. There's nothing flashy about this release, just a variety of bug fixes, including some pretty vexing ones.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-6083730265759912561?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=289580769&amp;mt=8' title='New Version of Signal GH'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6083730265759912561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6083730265759912561'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/11/new-version-of-signal-gh.html' title='New Version of Signal GH'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-4043664573305925892</id><published>2009-10-05T00:34:00.003-04:00</published><updated>2009-10-05T01:17:02.601-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='children'/><title type='text'>iPhone as Baby's First Computer</title><content type='html'>&lt;p&gt;My son, Wil, wanted to paint on my unibody Macbook this evening. He turned four in September and this was the first time he'd wanted to drive Dad's computer. In the past, "we've" painted by him telling me to "draw an alien fighting a dinosaur." So, I setup &lt;A HREF="http://www.pixelmator.com/"&gt;Pixelmator&lt;/A&gt; in full screen mode, started him up with a blue brush, and let him go to town while I watched The Amazing Race next to him on the couch. And he basically figured it out, with occasional hints from me. He figured out how to switch tools without input from me, and was playing with radial gradients with an arbitrary selection mask in no time. I did notice he was drawing everything with his tiny thumb, which allowed him to put his weight behind mouse clicks on the MacBook's zero button trackpad; I think he would master a traditional trackpad, but the MacBook's trackpad allowed him to better transfer skills he learned from his first computer: my iPod Touch.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;He's been using the iPhone interface since he was still 2, and I can still remember my astonishment that he'd mastered the drag to unlock maneuver without any help from me. One of many things, he figured out himself. Thankfully, he has yet to pick up typing my password so he has not been buying apps, although he will make daily trips to the app store looking for new games and will ask me to read the user reviews. He watches YouTube videos and my own collection of videos, plays games, paints, and looks through photos, and has been doing so this entire time. His 2 year old sister does the same, except she has no interest yet in all but the simplest children's games. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;In the few times they've ventured to touch my MacBook, they expect that something will happen when they touch the screen. Direct manipulation is so obvious and engrained in how they deal with computers. I've worried if I could even teach them to use a mouse, which seems so foreign and backwards as an input device. But after today's session, I'm not worried. Wil can figure things out; the MacBook trackpad is close enough to what he knows. And he enjoyed learning. I could see how happy he was to learn that pressing the command and z keys would undo drawings.&lt;/p&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Wil_Drew_This_Art.png"/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-4043664573305925892?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/4043664573305925892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/4043664573305925892'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/10/iphone-as-babys-first-computer.html' title='iPhone as Baby&apos;s First Computer'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-2158287224884920969</id><published>2009-09-04T17:56:00.005-04:00</published><updated>2009-09-23T09:06:39.339-04:00</updated><title type='text'>Garbled Fonts in Xcode 3.2 Console with Snow Leopard</title><content type='html'>When I upgraded to Xcode 3.2 along with Snow Leopard, the output to the console was filled with apparently random garbage, and lots of white space. This also happened in Safari when a page used a fixed space font. I don't know exactly what was going on, but I think that at some point I had set both of these font sets to some version of either Monoco or Courier, and when I installed Snow Leopard, the particular font I had used went away which confused the applications in question. &lt;BR&gt;&lt;br /&gt;Anyway, I went to the Debugger preference tab in Xcode (not the Fonts &amp;amp; Colors tab) and changed all the various console fonts to be some variant of Menlo. Similarly, in Safari, I set the Fixed Width Font to Menlo-13, and all was right with my world.&lt;br /&gt;&lt;br /&gt;[Update: this also affected the AppleScript Editor, and the font was Courier]&lt;br /&gt;&lt;br /&gt;{Update 2: Further investigation using the Font Book application  found two conflicting copies of Courier /System/Library/Fonts/Courier.dfont with a modification date of July 2009  and /Library/Fonts/Courier TU with a modification date in June 1996. Removing the older font and restarting my apps has fixed the problem.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-2158287224884920969?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2158287224884920969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2158287224884920969'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/09/garbled-fonts-in-xcode-32-console-with.html' title='Garbled Fonts in Xcode 3.2 Console with Snow Leopard'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-2362488254674370679</id><published>2009-07-30T13:48:00.001-04:00</published><updated>2009-07-30T13:50:07.507-04:00</updated><title type='text'>DotNetRocks podcast I was on is up</title><content type='html'>I just noticed that the &lt;A HREF="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?i=57416440&amp;id=130068596"&gt;episode&lt;/A&gt; of &lt;A HREF="http://dotnetrocks.com"&gt;DotNetRocks&lt;/A&gt; is up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-2362488254674370679?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?i=57416440&amp;id=130068596' title='DotNetRocks podcast I was on is up'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2362488254674370679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2362488254674370679'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/07/dotnetrocks-podcast-i-was-on-is-up.html' title='DotNetRocks podcast I was on is up'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-8065233881189153892</id><published>2009-07-25T02:08:00.006-04:00</published><updated>2009-08-07T16:35:20.577-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='idiocy'/><title type='text'>The Truthiness of Things I Said on DotNetRocks</title><content type='html'>When I recorded a recent episode of &lt;A HREF="http://dotnetrocks.com"&gt;DotNetRocks&lt;/A&gt; I recorded my side of the conversation so that the sound engineers would have a cleaner copy of what I said then what went through the phone lines. And I've listened to what I said several times, and every time I do, I find a mistake I made; things I should and did know but in the course of talking quickly for an hour off the cuff didn't get quite get right. &lt;br /&gt;&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;Said that Adobe had taken over development of Java for OS X when I should have said they took over the Java SWT.&lt;/LI&gt;&lt;LI&gt;Should have kept my opinion of Java GUIs to myself since I haven't used SWT&lt;/LI&gt;&lt;LI&gt;Confused NSSortDescriptor with NSPredicate when it came to extracting Core Data&lt;/LI&gt;&lt;LI&gt;I strongly implied that Cocoa was for GUI work when of course, it's great for most aspects of application development including threading and networking&lt;/LI&gt;&lt;LI&gt;Completely garbled the relationship properties of Core Data objects&lt;/LI&gt;&lt;LI&gt;Turns out that the C++ paths dialog in Visual Studio is actually resizable. It's just really easy to miss the drag target.&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;br /&gt;Also, I say "You Know", "Like", and "Uh" way too often; and I was completely unaware that I did so.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-8065233881189153892?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?i=57416440&amp;id=130068596' title='The Truthiness of Things I Said on DotNetRocks'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8065233881189153892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8065233881189153892'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/07/truthiness-of-things-i-said-on.html' title='The Truthiness of Things I Said on DotNetRocks'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-8736556118051954362</id><published>2009-07-21T07:52:00.004-04:00</published><updated>2009-07-21T08:17:48.039-04:00</updated><title type='text'>"I'm A Mac Programmer; and a Mac User. And We are Arrogant People"</title><content type='html'>&lt;blockquote&gt;&amp;#8220;I&amp;#8217;m a Mac programmer, and a Mac user, and we are arrogant people. And we love beauty.&amp;#8221;&lt;/blockquote&gt;&lt;br /&gt;I've never been a guest on a podcast before, so my hour talking to the guys on &lt;A HREF="http://dotnetrocks.com"&gt;DotNetRocks&lt;/A&gt; was one of the more interesting things I've done all year. And it is amazing what came out of my mouth, including the above quote. &lt;BR&gt;&lt;br /&gt;This was in context of my describing the cloudy future of cross-platform development and how I was uninterested in any development strategy that didn't involve using Cocoa for the GUI on the Mac. I don't know that I've ever used the word arrogant to describe something positive before, perhaps a better word would have been demanding, but then again maybe it was the right word. &lt;BR&gt;&lt;br /&gt;I'll put up a note when they post the show in the coming weeks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-8736556118051954362?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://dotnetrocks.com' title='&quot;I&apos;m A Mac Programmer; and a Mac User. And We are Arrogant People&quot;'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8736556118051954362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8736556118051954362'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/07/im-mac-programmer-and-mac-user-and-we.html' title='&quot;I&apos;m A Mac Programmer; and a Mac User. And We are Arrogant People&quot;'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-3602299020905669423</id><published>2009-07-18T07:36:00.014-04:00</published><updated>2009-08-09T22:59:32.818-04:00</updated><title type='text'>On Xcode 3.1 versus Visual Studio 2008</title><content type='html'>Recently, the &lt;A HREF="http://dotnetrocks.com"&gt;DotNetRocks Podcast&lt;/A&gt; had an episode where the guest spent an hour slamming Xcode, Objective-C, and the Cocoa frameworks, and how awful iPhone development was in comparison to Visual Studio, C# and .Net. The guest went so far as to diagnose anyone enjoying the iPhone toolchain with &lt;A href="http://en.wikipedia.org/wiki/Stockholm_syndrome"&gt;Stockholm syndrome&lt;/A&gt;. &lt;BR&gt;&lt;br /&gt;I wrote the hosts a scathing e-mail, pointing out that I had used a lot of frameworks, and a lot of IDEs&amp;mdash;including regular use of Visual Studio for the last 7 years&amp;mdash;and that the iPhone coding experience, with the exception of the annoyance of code signing, was second to none in fun. Apparently, the folks at dotnetrocks have a policy for dealing with over the top ranters, they invite them on the show.  I'll be recording an episode Monday. &lt;BR&gt;&lt;br /&gt;This blog post is part of the process of organizing my thoughts for that show. If I go on and say I like Xcode 3.1 better than Visual Studio 2008, the question will immediately become why. And the reasons behind that are either absolute i.e., that some aspect of Xcode allows me to do a better job than Visual Studio just by having a better thought out design, or personal in that Xcode is embedded in a Mac, and I love my Mac. This  post cannot hope to be inclusive and I'll focus on things I don't like about Visual Studio that are done well on Xcode 3.1. &lt;BR&gt;&lt;br /&gt;&lt;H4&gt;Project Properties&lt;/H4&gt;I recently needed to turn off the "/GL" flag in the release build of a C++ project on Windows (because a google of an arcane linker error code said that flag was involved.) So, I had to find that flag in the project properties. And, of course, in Visual Studio, if you don't know where a property is kept, you have to click through all the categories and subcategories until you find it. In this case, despite being about linking it was under Configuration Properties:C/C++:Optimization:Whole Program Optimization&lt;BR&gt;&lt;i&gt;BTW, all these web ready PNGs are just the way OS X takes screen shots. If only I knew how to make Windows XP take partial screen shots directly into PNG.&lt;/i&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://homepage.mac.com/grhowes/Blog/VisualStudio_Properties.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 374px; height: 261px;" src="http://homepage.mac.com/grhowes/Blog/VisualStudio_Properties.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;BR&gt;&lt;br /&gt;On Xcode on the other hand, all the properties are visible at once:&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/XCode_Properties.png"/&gt;And what's that at the top of the page? A search field, you mean I can just paste in the parameter and it will find it? Yes, yes I can.&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/XCode_Properties_Search.png"/&gt;&lt;br /&gt;And what's this thing in the corner "Based on", you mean if I have a project (a solution in Visual Studio speak) with a bunch of sub-projects (a project in Visual Studio speak) that I can create a set of configuration files that are shared amongst some of them and overrided as needed and not have to go to every single project and change its settings when I want to add a path?&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/XCode_Based_On.png"/&gt;&lt;BR&gt;And speaking of paths, doesn't this include path dialog dialog look a bit small? Oh, you can resize it like nearly every other window in Xcode &lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/XCode_Includes.png"/&gt; Why? Because Xcode was written in Cocoa where resizing views and windows is easy.&lt;BR&gt; &lt;STRIKE&gt;Hey it looks like the Visual Studio include path dialog is resizable too. But only horizontally not vertically, I guess people only need two paths.&lt;/STRIKE&gt; [Update: turns out it was just really hard to resize, at least for me. The traction corner was not the proper target.]&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Visual_Studio_Includes.png"/&gt;&lt;BR&gt;&lt;br /&gt;&lt;H4&gt;Profiling&lt;/H4&gt;As anyone who's ever coded with me knows, I believe in the power of profiling. It is something I do as part of my personal development process. Both Xcode and Visual Studio have profiling tools. Xcode's tools go by the name of Instruments and they are prominently available in the Run menu.&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Instrumentation_Menu.png"/&gt;Here is the Object Allocations Instrument where I can ferret out performance problems indicated by too many object allocations or having objects hang around too long. For instance, earlier in the year, I ran into a problem where I was adding a timer to my run loop every tenth of a second, this was not technically a leak and would not have been solved via garbage collection but did show up in the allocations instrument as a worrisome growing number of CFTimerRefs. Notice that you can analyze and experiment on a running copy; you do not have to deal with after the fact reports.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://homepage.mac.com/grhowes/Blog/Instrumentation_Object_Allocation.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 450px; height: 328px;" src="http://homepage.mac.com/grhowes/Blog/Instrumentation_Object_Allocation.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;And you can find the stack trace of every allocation.&lt;BR&gt;&lt;br /&gt;As for Visual Studios profiling tools, well I know they are there, as I have used them in the past to find some performance problems and leaks in C++, but I can't even find them right now; that's how ill layed out Visual Studio is that something as critical to the development process as profiling is hard to find. Regardless, as I recall, the tools included were of the old fashioned variety where you ran the app, quit and the profiler would crank away for a minute or two and give you a report which you could browse through and dig into call sequences to find out for instance what fraction of the time was spent in a given method and its children. Useful, but really bare bones. And this &lt;A HREF="http://msdn.microsoft.com/en-us/magazine/cc337887.aspx"&gt;article&lt;/A&gt; on Microsoft's site indicates the situation is similar when doing .Net development.&lt;BR&gt;&lt;br /&gt;&lt;H4&gt;Static Analysis&lt;/H4&gt;It is a good idea to run your code through a static analyzer every now and again to pick up the little bits of idiocy we all suffer through. In .Net, the popular analyzer is &lt;A HREF="http://msdn.microsoft.com/en-us/library/bb429476(VS.80).aspx"&gt;FxCop&lt;/A&gt; and while I haven't personally used it, I have had our outsource team run analysises and the results have been quite useful especially when dealing with the code of junior engineers. You can get a free static analyzer for Mac and iPhone development too: &lt;A HREF="http://clang.llvm.org/"&gt;Clang&lt;/A&gt; and I have used it and it's great at making sure your code is following the rules. Please run it before every release.&lt;br /&gt;&lt;H4&gt;Layout&lt;/H4&gt;It probably is redundant, that I, a Mac user since high school, prefer the appearance and layout of Xcode to Visual Studio. It's also pretty much a given that where I see large mouse targets and esthetically pleasing use of space, a Visual Studio aficionado will see wasted space and a lack of important buttons. (BTW, if you are a PC user new to the Mac, use your left thumb to hold down the command key not your pinkie like you would if it were the CTRL key. Yes habits are hard to break, that does not mean the Mac's primary meta key is in a stupid place, far from it.)&lt;BR&gt;&lt;br /&gt;My biggest peeve about Visual Studio is how easy is to undock an embedded subwindow while doing something else. Honestly how often does one rearrange their project panes? And then I have to figure out where to drag the window back to given this onscreen display: &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://homepage.mac.com/grhowes/Blog/Visual_Studio_Docking.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 311px; height: 152px;" src="http://homepage.mac.com/grhowes/Blog/Visual_Studio_Docking.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My second peeve would be the amazingly small tool icons. Monitors are large and getting higher resolution. Icons 4x as big as these would be more appropriate for today. &lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/VisualStudioToolbars.png"/&gt;&lt;br /&gt;&lt;H4&gt;Number 1 Favorite Features I'd Like to Find in Visual Studio&lt;/H4&gt;The open quickly dialog  (command-shift-D) in Xcode used to be functional, but a bit lame compared to the one that had been in Metrowerks CodeWarrior, now it's one of the greatest things ever. Just open it up and start typing and as like as not, you will find the file you are looking for in a dynamically filled search list. And it is amazingly fast. &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://homepage.mac.com/grhowes/Blog/XCode_Open_Quickly.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 422px; height: 461px;" src="http://homepage.mac.com/grhowes/Blog/XCode_Open_Quickly.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt; I say like to find, because Visual Studio is so filled with impossible to discover features, it might just have it already. &lt;BR&gt;[Update: Philippe writes to say &lt;blockquote&gt;Also, a neat trick in Visual Studio that mimics "Open Quickly" is this:&lt;BR&gt;&lt;br /&gt;1. Set the focus to the Search field in the toolbar&lt;BR&gt;&lt;br /&gt;2. Type "&gt;of " followed by the filename (e.g. "&gt;of MyF")&lt;/blockquote&gt;] &lt;BR&gt;&lt;br /&gt;&lt;H4&gt;Getting Better All The Time&lt;/H4&gt;Long time Mac coders will recall that when Xcode first came out it was much worse (at the very least as a C++ IDE) than the product it killed: Metrowerks CodeWarrior which was a refined, lightning fast IDE beloved by most. But over the years, Xcode has gotten better by fits and starts. And since the iPhone took off, it's been getting better by leaps and bounds. Code completion, which used to be useless is now indispensable. The linker has gotten much faster and memory savy. The new llvm compiler which replaces gcc is fast, stable, and thankfully even tougher on iffy code. I've actually started using in-editor debugging to look up variable values, and like I said before the Open Quickly dialog is fantastic.&lt;br /&gt;&lt;H4&gt;To Sum Up&lt;/H4&gt;I like Xcode. It is an Apple product, with all the good that entails: esthetics, selective choice of features, performance, ease of use. From a base of high quality, it continues to improve. I suspect it will soon integrate such technologies as Clang or openCL and become even better. PC programmers moving over to iPhone development should give it a chance and try to grok how and why it is the way it is. &lt;br /&gt;[Update: content updated since first post]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-3602299020905669423?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://dotnetrocks.com' title='On Xcode 3.1 versus Visual Studio 2008'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3602299020905669423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3602299020905669423'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/07/on-xcode-31-versus-visual-studio-2008.html' title='On Xcode 3.1 versus Visual Studio 2008'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-5908848757028533423</id><published>2009-06-27T16:56:00.002-04:00</published><updated>2009-06-27T17:33:02.159-04:00</updated><title type='text'>The lagging edge</title><content type='html'>I was taking my daily glance through &lt;A HREF="http://macsurfer.com"&gt;MacSurfer&lt;/A&gt; when I was struck by a press release from &lt;A HREF="http://wavemetrics.com"&gt;WaveMetrics&lt;/A&gt; announcing a new version of Igor, the data graphing program. That brought back memories, Igor was my absolute favorite graphing program back when I was in Chemistry grad school in the early 1990s and it could always be depended upon to make the slickest output of the myriad Mac or Windows programs used at what was then called the Center for X-Ray Lithography. I have not seen it since graduating in 1995, and it is good to see it is still alive. &lt;BR&gt;&lt;br /&gt;But what really caught my eye, that it is now in 2009 that Igor has moved to Quartz rendering from QuickDraw. According to &lt;A HREF="http://en.wikipedia.org/wiki/Quartz_2D"&gt;Wikipedia&lt;/A&gt; Quartz was first demonstrated at the 1999 WWDC and has been the recommended mode of rendering on OS X since its introduction. Such is the inertia in the software business that an application as graphically intensive as Igor, a program which would benefit hugely from the modern features one gets for little effort with Quartz, takes 10 years to make the transition. &lt;BR&gt;&lt;br /&gt;I wonder if the proximal cause of this laggard transition is the impending doom of Snow Leopard, where QuickDraw using 32-bit apps are distinct second class citizens. A "Pro" graphing app, might well benefit from 64-bit status, and to do that every single QuickDraw call must be expunged. Apple had spent enough time on carrots in making Quartz a beautifully clean API generally superior to QuickDraw in every way, and is now bringing down the stick of enforced obsolescence to bring the last stragglers into the fold.&lt;BR&gt;&lt;br /&gt;I will be doing this transition over the course of the summer, myself. I'm down to 800 or so deprecated symbol warnings, so I've a ways to go before the day job application sees 64-bit nirvana.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-5908848757028533423?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.macupdate.com/info.php/id/7580' title='The lagging edge'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5908848757028533423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5908848757028533423'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/06/lagging-edge.html' title='The lagging edge'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-7760304865771423210</id><published>2009-06-09T05:57:00.005-04:00</published><updated>2009-06-09T06:44:34.536-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Safari'/><category scheme='http://www.blogger.com/atom/ns#' term='Star Trek'/><title type='text'>Star Trek Lessons for Safari</title><content type='html'>A little noted part of Monday's WWDC keynote was the final feature set for Safari 4. Safari now has searching of browsing history. This reminds me of this exchange in the first season of  &lt;i&gt;Star Trek: The Next Generation&lt;/i&gt;:&lt;blockquote&gt;&lt;br /&gt;&lt;b&gt;Cmdr Riker:&lt;/b&gt; "Data, I need help in locating some library-computer information. All I have is a vague memory of reading somewhere about someone taking a shower in his or her clothing."&lt;br /&gt;&lt;b&gt;Lt. Cmdr Data:&lt;/b&gt; "Ah. The body Geordi discovered."&lt;br /&gt;&lt;b&gt;Cmdr Riker:&lt;/b&gt; "And I believe it may have happened before."&lt;br /&gt;&lt;b&gt;Lt. Cmdr Data:&lt;/b&gt; "To 'someone,' 'somewhere.'"&lt;br /&gt;&lt;b&gt;Cmdr Riker:&lt;/b&gt; "Should be easy for someone written up in biomechanical texts."&lt;br /&gt;&lt;b&gt;Lt. Cmdr Data:&lt;/b&gt; "About that... did the doctor believe I was boasting?"&lt;br /&gt;&lt;b&gt;Cmdr Riker:&lt;/b&gt; "Probably. This may take some time?"&lt;br /&gt;&lt;b&gt;Lt. Cmdr Data:&lt;/b&gt;  "At least several hours. But what I said was a statement of fact."&lt;br /&gt;&lt;/blockquote &gt;&lt;br /&gt;&lt;br /&gt;It would take Data several hours to search all of Star Fleets records for instances of people showering in their clothes. Such records are quite voluminous. Searching for "shower clothes" gets 23,200,000 hits on Google now, it must be many times more in Data's day.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;However, the proper data set to search is every bit of text that Riker had ever read, a much smaller set. As every viewer knows, Star Fleet personnel rarely read paper books, those tend to be kept in glass display cases; they read Kindles.  And it wouldn't take much programming to keep track of every page that was ever displayed on a Kindle, or displayed in the browser on your computer. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;If I remember seeing a bit of information I now need, like the name of the product manager for Keynote (yes I happen to want to know this), it would be quicker looking in web pages I've seen than it would be googling against all of man's knowledge. I doubt I read as many as 100 pages a day. My browser history says I visited 120 URLs on Monday, and that was a heavy day.  Humankind as a whole must be writing 10s of millions of English text pages a day, and has been doing so for quite some time. &lt;BR&gt; &lt;br /&gt;&lt;br /&gt;But to be truly useful, this data set has to be maintained over one's entire life, and include computers, smart phones, Kindles,  and every other gadget that tells us something. So, history search is in Safari, but that's only a start.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-7760304865771423210?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7760304865771423210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7760304865771423210'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/06/star-trek-lessons-for-safari.html' title='Star Trek Lessons for Safari'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-590163617076784425</id><published>2009-05-26T04:09:00.003-04:00</published><updated>2009-05-26T04:50:12.642-04:00</updated><title type='text'>The Wonders of the iPhone Star Rating</title><content type='html'>So, I have my free MythTV remote in the iPhone App Store and it only has a 2 star average rating. &lt;BR&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/RRgh_Ratings.png"/&gt; &lt;BR&gt;&lt;br /&gt;Not exactly a Gaussian distribution. &lt;BR&gt;&lt;br /&gt;I think that there are a class of iPhone users who download every free app they can get their hands on, whatever it's description of use, and then later tidy up, delete the app and give it a 1 star rating. For free apps, you should only go by the ratings of people who bothered to write a review. &lt;BR&gt;&lt;br /&gt;Of course, reviewers can be pretty picky. Here are some nearly representative &lt;B&gt;1 star reviews&lt;/B&gt; for RRgh:&lt;BR&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;#8220;Trop compliqué, pas ergonomique, trop cher.. bref! tout faux. A déconseiller fortement." (Google translates this as "Too complicated, not ergonomic, too expensive .. short! all wrong. A highly recommended.&amp;#8221; 1 Star &lt;/blockquote&gt;&lt;BR&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;#8220;I love this because of it's ease of use. All who done know time consuming getting myth to work the way you it is so this application come is a fresh breath of air. I use myth on my 64bit Suse 11.0 box an it took me less than 3 minutes to set up my box to work with the app. I want to note that mymote has not worked for me yet which is disappointing because I think the interface looks better. Just remember that your default port is 6546  and your ip of your myth box. After that just enable it in the setup/utilities -- setup -- general option.&amp;#8221; 1 Star&lt;/blockquote&gt;&lt;BR&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;#8220;A virtually flawless app I use it all the time, no more looking for the remote, it's always in my pocket! My only suggestion is to add the ability to schedule recordings if possible&lt;br /&gt;Thank you&lt;br /&gt;Dave&amp;#8221; 1 Star&lt;/blockquote&gt;&lt;BR&gt;&lt;br /&gt;I will freely admit that out of 10 reviewed 1 star ratings, 7 didn't like the app, mainly because they didn't know MythTV. Fair enough, MythTV is not for the casual computer user, or someone who gets paid by the hour. My major point, if I had a point, is you should read the reviews of free apps, their star rating is not generally helpful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-590163617076784425?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/590163617076784425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/590163617076784425'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/05/wonders-of-iphone-star-rating.html' title='The Wonders of the iPhone Star Rating'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-570849074972451221</id><published>2009-04-27T21:23:00.001-04:00</published><updated>2009-04-28T05:31:06.497-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone Development'/><category scheme='http://www.blogger.com/atom/ns#' term='mythtv'/><title type='text'>On the Motivation for Updating a Free iPhone App</title><content type='html'>When I sat down to learn iPhone development, I settled on writing a remote control for &lt;A HREF="http://mythtv.org"&gt;MythTV&lt;/A&gt; as a first product. And thus &lt;A HREF="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=286015708&amp;mt=8"&gt;Remote Remote GH for MythTV&lt;/A&gt; or RRgh came into existence. As MythTV users are pretty adamant about not paying for software, I decided not to charge for it, and considered it only a teaching exercise. And that worked out pretty well. I learned a lot and other people have paid me a good hourly wage for writing custom apps with the experience thus gained.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;But now I have an app with 76,307 downloads and no revenue. What do I owe the users? Most of them, I'm pretty sure, just downloaded it because it was free, and promptly deleted it&amp;mdash;and typically gave me a one star rating, ugh&amp;mdash;when it didn't do anything useful without a MythTV frontend. But there are people out there who use it, and I'd like to give them a little goodwill. How to justify it?&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;1) Advertising for other products. &lt;br /&gt;I can put a splash screen that announces my paying apps. Right now that would be mainly &lt;A HREF="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=289580769&amp;mt=8"&gt;Signal GH&lt;/A&gt;, which a great number of MythTV users will find useful, and which I sold a grand total of $10.50 of product just this last week.  But I've ideas for other products in the pipeline.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;2) Further Learning.&lt;br /&gt;After reading &lt;i&gt;Clean Code&lt;/i&gt; I've been scouring my code for ways to improve its readability. The code for RRgh was written when I was just getting a handle on using Objective C 2.0's properties extension, and is a good target for cleaning. And cleaning code is sort of fun in a mechanical washing the dishes sort of way. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;3) Just to be Nice.&lt;br /&gt;Hey, I like having users, and it makes me happy thinking they are happy. There were some rough edges around RRgh and I think my users would be happy for me to sand them down. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;So I sat down and started cleaning. As I said, my major problem was with inexperienced usage of properties. I went through and made sure I was creating, accessing and disposing all the properties in the app properly. &lt;br /&gt;&lt;br /&gt;And then I went after the interface. I had had this idea of having a defiantly plain interface using just standard OS widgets. Turns out people didn't appreciate what I was going for. So, following popular demand, I opened up Photoshop Elements and started drawing a black on black interface for my remote controls. The idea being something that wouldn't be too distracting in a darkened home theatre room, and which would look reasonably tasteful.  I used a variety of button shapes to keep things consistently themed, but not oppressively so.  Plus I took the opportunity to improve the spacing and sizing of the various controls, in particular, I felt it important to make the &lt;i&gt;Play/Pause&lt;/i&gt; button easier to hit by making it a double size. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;I also went through the reviews people had submitted. Someone had wanted a record button on the LiveTV remote, etc. Perfectly reasonable and easily done.&lt;br /&gt;&lt;br /&gt;&lt;H4&gt;Before and After:&lt;/H4&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/RRgh_before_after.png" NAME="RRgh"/&gt;&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Then I took the Object Allocation Instrument to the running code in the hopes of finding code that was leaking. Turns out the system image picker (UIImagePickerController) is hard to dispose, so I ended up just reusing one. Result: the app doesn't crash after setting the logo for a dozen or so networks. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;In total, I gave my users about 10 hours of my time sanding down rough edges, and made RRgh a noticeably nicer product. I hope they find it useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-570849074972451221?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=286015708&amp;mt=8' title='On the Motivation for Updating a Free iPhone App'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/570849074972451221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/570849074972451221'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/04/on-motivation-for-updating-free-iphone.html' title='On the Motivation for Updating a Free iPhone App'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-5430284947006956739</id><published>2009-04-12T10:08:00.003-04:00</published><updated>2009-04-12T10:32:44.776-04:00</updated><title type='text'>On the cost of USB versus Analog Headsets</title><content type='html'>I have children. Children love to destroy audio headsets, whether it be tearing out the ear padding, chewing up the wind guard, or taking a scissors to the cord, they will get the job done. And headsets can be expensive, especially if they have a USB connection. Searching for Logitech headsets on newegg.com, in 3.5 mm and USB varieties (and tossing out the most and least expensive in both categories) we can clearly see that analog headsets cost about $16 while USB headsets cost about $36 on average. This USB premium is something that has to be paid every time a headset is replaced. &lt;BR&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Plantronics_USB.jpg"/&gt;&lt;br /&gt;However, there are USB devices with 3.5 mm headphone and microphone jacks which allow the user to use analog headsets. They cost about $20 (no surprise). As children are unlikely to destroy those, you just have to buy the one, and afterwards just buy a cheaper analog set to replace the one Junior split in two.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-5430284947006956739?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5430284947006956739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5430284947006956739'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/04/on-cost-of-usb-versus-analog-headsets.html' title='On the cost of USB versus Analog Headsets'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-6814418257081741417</id><published>2009-04-06T13:33:00.003-04:00</published><updated>2009-04-06T14:17:14.407-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal Growth'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>The Kindle iPhone App and the Return of Reading</title><content type='html'>Here is a picture of good intentions.&lt;br /&gt;&lt;IMG src="http://homepage.mac.com/grhowes/Blog/Bookshelf.png"/&gt;&lt;br /&gt;It's my little bookshelf of mainly technical books, right next to the big desk in the basement. And I regret to say, I haven't gone through even a few chapters of most of these books.  Some of them are just odd choices, what was I thinking buying &lt;i&gt;Linux Device Drivers&lt;/i&gt;? But, most are in domains either interesting, or profitable to know and yet they sit unread.  The fact of the matter is that books are inconvenient and they require concentration. I'm a busy guy, and what free time I have ends up in some combination of web surfing or watching TV, usually both at once.  &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;But like everyone, I find myself in the odd 10-20 minutes here or there. Lying in bed after the babies finally nodded off, waiting for the dentist, in a meeting starting late, etc. where I could be reading if I had a book at hand all bookmarked and ready to go. And here is where the &lt;A HREF="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=302584613&amp;mt=8"&gt;Kindle App&lt;/A&gt; for the iPhone comes into play. It's always available (pockets in my PJs), no worries about lighting, always on the right page. If I activate my iPhone looking for something to do, the icon is right there on the main page. Basically, a low impedance situation to encourage me to read, and I do. I read the inspiring &lt;A HREF="http://www.amazon.com/Clean-Code/dp/B001GSTOAM/ref=kinw_dp_ke"&gt;Clean Code&lt;/A&gt; cover to cover in the first week, and am halfway through &lt;A HREF="http://www.amazon.com/Working-Effectively-with-Legacy-Code/dp/B0017DQ8KU/ref=pd_sim_kinc_1"&gt;Working Effectively with Legacy Code&lt;/A&gt;. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Not that reading a book on the iPhone is perfect. Code listings tend to be littered with confusing hyphens, and are generally hard to read. I'm sure a real Kindle is a better pure reading experience. But the thing is, I am not going to be carrying another device bigger than an iPhone on my person, ever. I'm certainly not keeping it in my pajamas. The iPhone is a good enough reader, and it's there. I could see buying a Kindle for my bedside, and relying on the automatic syncing with my iPhone, but that is way down on my spending list. What is important is that I am reading and getting the personal and professional growth which comes from reading.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Give a person a book and you change their lives.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-6814418257081741417?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=302584613&amp;mt=8' title='The Kindle iPhone App and the Return of Reading'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6814418257081741417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6814418257081741417'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/04/kindle-iphone-app-and-return-of-reading.html' title='The Kindle iPhone App and the Return of Reading'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-3364481599066553571</id><published>2009-03-09T18:19:00.002-04:00</published><updated>2009-03-09T18:32:38.280-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Apple TV'/><category scheme='http://www.blogger.com/atom/ns#' term='AirTunes'/><title type='text'>AppleTV + iPhone Better than Mac for AirTunes</title><content type='html'>As I described in &lt;A HREF="http://sprinkleofcocoa.blogspot.com/2009/02/itunes-to-shower-speakers.html"&gt;my last post&lt;/A&gt;, I've setup an Airport Express and a ceiling speaker to deliver music to my bathroom. This is cool technology, but after a week of it, it had the feeling of technology which was not going to become part of my daily routine. The major problem being that I had to remember to start the music playing from my MacBook before heading to the shower, and remember to shut it off afterwards. Several times, my wife made a special trip downstairs just to close the lid of my MacBook. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Then I realized this is just the sort of thing the Apple Remote app for iPhone is supposed to make easy, as I can control the music from wherever I might be in the house. And I further realized that I didn't have to leave my MacBook running all the time. The AppleTV in the living room is always on, contains my complete music collection, can be controlled by the Apple Remote app, and it can be told to send music to any AirTunes speakers on the network, including the Airport Express hooked to my bathroom speakers.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;This has the major benefit of giving my wife equal control over the speakers as her iPhone can control the music as well as mine, and in a simple form her technological indifference won't mind.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;So yeah, this seems right.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-3364481599066553571?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3364481599066553571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3364481599066553571'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/03/appletv-iphone-better-than-mac-for.html' title='AppleTV + iPhone Better than Mac for AirTunes'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-8872002448626210522</id><published>2009-02-26T00:55:00.011-05:00</published><updated>2010-01-10T09:24:52.609-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DIY'/><category scheme='http://www.blogger.com/atom/ns#' term='iTunes'/><category scheme='http://www.blogger.com/atom/ns#' term='Apple TV'/><category scheme='http://www.blogger.com/atom/ns#' term='AirTunes'/><title type='text'>iTunes to Shower Speakers</title><content type='html'>[Update: I've posted a video about installing a bathroom speaker using an Airport Express as part of &lt;A HREF="http://www.amazon.com/review/RWW6D5TYZ1Y6Q/ref=cm_cr_rdp_perm"&gt;an Amazon review of a   &lt;br /&gt;SpeakerCraft CRS6 One in ceiling speaker&lt;/A&gt;. If you like it, I'd appreciate helpful votes.]&lt;br /&gt;&lt;br /&gt;As I&amp;rsquo;ve mentioned before, the big new thing at the house the last year was a much improved moderately large shower in the basement. It&amp;rsquo;s become a locus of activity, as the babies have taken to bathing there making ad hoc bath basins out of plastic toy bins. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;One thing missing would be a source of music. It occurred to me that if I could get an &lt;A HREF="http://store.apple.com/us/product/MB321LL/A" NAME="Airport Express"&gt;Airport Express&lt;/A&gt; mounted near the ceiling over the shower, I could use its AirTunes capability to stream music while I bathed. This would have the advantage of also allowing my wife to stream music or radio programming from her computer as well. Refurbished Airport Expresses go for $79 at the Apple online store with free shipping. Plus, I&amp;rsquo;d have another wireless N source. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;[Update: Did you know that if you have an iPod Touch or iPhone, and an Apple TV, and an Airport Express, you can configure the Apple Remote for iPhone to tell the Apple TV to send its music to the Airport Express. And yes, I have all those things, and yes, Apple makes more money off me than the State of New Hampshire.]&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;According to the &lt;A HREF="http://avsforum.com"&gt;AVS Forum&amp;rsquo;s&lt;/A&gt; speaker section, a good in-ceiling speaker for the high humidity environment of a shower's ceiling is the &lt;A HREF="http://jamo.com/Default.aspx?ID=5929&amp;M=Shop&amp;PID=17178&amp;ProductID=17925"&gt;Jamo 6.52DVCA2&lt;/A&gt;. I have done no comparing, so  I cannot personally attest to how it sounds versus other in-ceiling products. It sounds fine to me, and it turns out is easy to install due to its well thought out mounting hardware. This speaker integrates both a left and right channel, so I only needed the one, and made do without much separation.   This was found online for $78 shipped. [Update: Be sure to point both tweeters at where your head will be. I made the mistake of pointing one at the tiled wall, resulting in a muffled, echoey sound. Also, you might want to put some silicon sealer between the dry wall and the plastic bevel of the speaker.]&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Finally, I needed a small amplifier to bridge the unamplified  output of the Express with the 8&amp;#937; inputs of the speaker. Again, I am not an audio person, but I found a small 2&amp;times;15 W stereo amplifier on Amazon, a &lt;A HREF="http://www.amazon.com/gp/product/B0012KZNP4"&gt; Pyle Pro PCA1 Mini 2&amp;times;15W Stereo Power Amplifier&lt;/A&gt; for $36 shipped. I didn&amp;rsquo;t suppose the small enclosed space of the shower would need any more power than that.  And I was right. The system is plenty loud with the volume knob set at one quarter maximum. The amp's inputs are male RCA jacks, requiring a female RCA to mini jack adaptor. I wrote a &lt;A HREF="http://www.amazon.com/review/RCB5ZUD2DQWZ4/ref=cm_cr_rdp_perm"&gt;short Amazon review&lt;/A&gt; on this amp, and I'd appreciate any helpful votes.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Remember, the Airport Express is not a "line out" analog device. The loudness of the output can be controlled via the volume slider in iTunes or the Apple iPhone Remote app depending on the setup. While this results in somewhat less than optimal sound, it is extremely convenient.&lt;BR&gt; &lt;br /&gt;&lt;br /&gt;My original thought had been to install an electrical socket in the space above the shower and plug both the amplifier and the Airport Express there. But the only advantages to that plan would be to marginally improve my home&amp;rsquo;s WiFi coverage, and to limit any noise caused by runs of analog signals in stereo wire. Neither reason was compelling enough to justify the added expense and hassle of dealing with household current and possible building code problems. As it happened, I had a wall socket in my laundry room which was 20 feet of stereo cable from my shower's ceiling, and there is where I placed the amp and WiFi hub. &lt;BR&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Pyle_Pro_PCA1.png"/&gt;&lt;br /&gt;&lt;br /&gt;So the total required hardware:&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;&lt;A HREF="http://store.apple.com/us/browse/home/specialdeals/mac/mac_accessories"&gt;1 Airport Express $79&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;&lt;A HREF="http://jamo.com/Default.aspx?ID=5929&amp;M=Shop&amp;PID=17178&amp;ProductID=17925"&gt;1 Jamo 6.52DVCA2 In-Ceiling Speaker&lt;/A&gt; $78&lt;/LI&gt;&lt;LI&gt;&lt;A HREF="http://www.amazon.com/Pyle-PCA1-2x15W-Stereo-Amplifier/dp/B0012KZNP4/ref=pd_bbs_sr_3?ie=UTF8&amp;s=electronics&amp;qid=1235305194&amp;sr=8-3"&gt;1 Pyl Pro PCA1 Amplifier&lt;/A&gt; $36 &lt;/LI&gt;&lt;LI&gt;1 30 foot Cat 6 Ethernet cable $5.40&lt;/LI&gt;&lt;LI&gt;&lt;A HREF="http://www.monoprice.com/products/product.asp?c_id=104&amp;cp_id=10401&amp;cs_id=1040107&amp;p_id=2120"&gt;1 Mini Jack to RCA Adaptor&lt;/A&gt; $0.65&lt;/LI&gt;&lt;LI&gt;50 feet 16 gauge stereo wire 8.80&lt;/LI&gt;&lt;LI&gt;&lt;u&gt;Shipping on cables $8.92&lt;/u&gt;&lt;/LI&gt;&lt;LI&gt;Total Hardware $216.77&lt;/LI&gt;&lt;/UL&gt;&lt;BR&gt;That does tend to add up quickly, doesn&amp;rsquo;t it? Well, maybe you needed a new 802.11n wireless hub anyway. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;In retrospect, I should have gotten 4 conductor in wall stereo cable instead of 2 conductor. The added complexity of dragging two cables had no benefit. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;I went to Lowe's and purchased a drywall saw, safety goggles, and a dust mask; all of which made the task of cutting out the speaker mounting hole painless. It is amazing how easily a hand drywall saw cuts through drywall.  The hardest part was finding a place to cut the hole where there was plenty of space in the void above the ceiling. I'd have preferred  a more symmetrical arrangement with the ceiling light, but the geometry of the joists was such that my options were limited. I used gluestick to temporarily stick the provided paper template so I could very precisely mark out the hole in pencil then started cutting with the saw; very easy. The JAMO speaker easily screws into place with a hidden mount.&lt;br /&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/JAMO_6_52DVCA2.png"/&gt;&lt;BR&gt;&lt;br /&gt;And now I have my shower music. Time will tell if it was worth the expense.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;[Update: Energy usage. I attached everything to my Kill-A-Watt, and while playing the Airport Express and the amplifier together draw 7 W, while not playing they draw 5 W, and with the amplifier turned off the Airport Express by itself draws 3 W.  So, at 5W idle, it costs much less than a dollar a month to power the system.  Also, while playing my unibody MacBook draws around 17 W with its screen asleep, so a system which played music 24/7 would cost on the order of $3/month of electricity.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-8872002448626210522?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://store.apple.com/us/product/MB321LL/A' title='iTunes to Shower Speakers'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8872002448626210522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8872002448626210522'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/02/itunes-to-shower-speakers.html' title='iTunes to Shower Speakers'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-7091769826161945795</id><published>2009-02-25T08:10:00.005-05:00</published><updated>2009-02-25T11:48:30.837-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mythtv'/><category scheme='http://www.blogger.com/atom/ns#' term='hdhomerun'/><title type='text'>Mythtv + HDHomerun + SheevaPlug :  Connecting the Dots</title><content type='html'>&lt;A HREF="http://www.marvell.com"&gt;Marvell&lt;/A&gt; just announced a 5 W Linux box with a USB 2.0 port and Gigabit ethernet, the &lt;A HREF="http://www.marvell.com/products/embedded_processors/developer/kirkwood/sheevaplug.jsp"&gt;SheevaPlug&lt;/A&gt;. This is a full Linux server with a 1.2 GHz processor in a box the size of a large wall wart power supply for a price of $79 US.  Presumably any geeky person reading this has a dozen things they could do with such a product, and here is one: MythTV backend. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;One of my problems with MythTV has been the old Pentium 4 Dell desktop I use as a backend. The monster draws upwards of  100 W. 24/7. Just to record 5 hours of TV a week and serve out videos. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Well look at what we can build now:&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;SheevaPlug 5W ($79)&lt;/LI&gt;&lt;LI&gt;HDHomerun 5W ($159) Dual HD TV Tuner&lt;/LI&gt;&lt;LI&gt;&lt;u&gt;1.5TB USB Hard Drive 10 W ($110)&lt;/u&gt;&lt;/LI&gt;&lt;LI&gt;20 W for $348&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;br /&gt;The hard drive cost and the dual tuner are constants when building a MythTV system. I'm not counting the cost of an ethernet switch, as I assume most of us would have an extra port regardless. The major point is using a SheevaPlug for a MythTV backend would be much cheaper even then using a NetBook  $250, and would very rapidly be cheaper than even re-using an old desktop $10/month electricity versus $0.50/month for just the SheevaPlug.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;And it should be quiet. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;On the down side, it would be useless as a frontend, and probably not up to the task of re-encoding videos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-7091769826161945795?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.marvell.com/products/embedded_processors/developer/kirkwood/sheevaplug.jsp' title='Mythtv + HDHomerun + SheevaPlug :  Connecting the Dots'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7091769826161945795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7091769826161945795'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/02/mythtv-hdhomerun-sheevaplug-connecting.html' title='Mythtv + HDHomerun + SheevaPlug :  Connecting the Dots'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-810504532792232083</id><published>2009-02-17T09:49:00.008-05:00</published><updated>2009-02-23T11:50:24.554-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone Development'/><title type='text'>When An App Rejection Improves An iPhone App</title><content type='html'>[Update: &lt;A HREF="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=304213541&amp;mt=8"&gt;Lullabies&lt;/A&gt; is now in the app store. Check it out.]&lt;br /&gt;&lt;br /&gt;I recently submitted &lt;A HREF="http://web.mac.com/grhowes/Generally_Helpful_Software/Lullabies.html"&gt;Lullabies&lt;/A&gt; an iPhone App to Apple. They reviewed it for a few days and rejected it. The basic design had been that a user would choose a soothing animation/song and that animation would play to completion, and only at that point the user could choose to replay the song, or go back to pick another.  Apple didn't like that. The reviewer wanted a mechanism to go directly back to the root view without waiting.  Otherwise I was in violation of interface guidelines. &lt;BR&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Lullabies_Main.png"/&gt;&lt;br /&gt;&lt;br /&gt;I did not argue. I gave them what they wanted. Touching the screen brings up a small button which will return to the animation picker. &lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Lullabies_Return.png"/&gt;&lt;BR&gt;&lt;br /&gt;I had been thinking that if the parent handed a child the iPhone, the child would navigate around like my own children do and not settle into being relaxed. However, it's true that they will probably hit the main button to kill the app if they are inclined, and I don't want the app to be thought of as children only.  I find the app relaxing too; my brother has a great voice, and it's calming watching bubbles bounce around. And adults don't need or like boundaries in their iPhone apps. So Apple was right. It improved the app. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;The second improvement came from the added time for testing the rejection gave me. Now that it was easier to go back to the root view, I actually tried it and found severe resource management problems. First, I found my animation views were not releasing. Then  I was leaking animation objects every time a bubble disappeared. Then I found that animations in the root view were taking a huge amount of time while hidden, to the point where touches became non-responsive.  A whole long series of problems when I just wanted to get the app out the door. But, you never get a second chance at a first impression. iPhone apps which are branded as junk rarely get their reputations back. If I put my name on a piece of software, it means I think it is a quality piece of software.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;I spent most of  my debugging time in the Object Allocations and CPU Sampler Instruments figuring out why my little app was misbehaving. Developers, remember that the Leaks Instrument will not find a Leak if an object is attached to the run loop, as an animation is likely to be, instead look for classes of allocations that keep having net growth over time.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;That one little button Apple requested blossomed into a series of improvements, cleanups, and learning experiences.  And in the end, I have a much more responsive app, and code which I'll be able to reuse in future projects. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;So, thank you anonymous Apple reviewer. You did me a huge favor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-810504532792232083?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://web.mac.com/grhowes/Generally_Helpful_Software/Lullabies.html' title='When An App Rejection Improves An iPhone App'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/810504532792232083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/810504532792232083'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/02/when-app-rejection-improves-iphone-app.html' title='When An App Rejection Improves An iPhone App'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-6726010733743906443</id><published>2009-02-05T14:33:00.011-05:00</published><updated>2009-02-27T11:50:28.899-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone Development'/><category scheme='http://www.blogger.com/atom/ns#' term='children'/><title type='text'>Writing a Lullaby App for the iPhone</title><content type='html'>[Update: &lt;A HREF="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=304213541&amp;mt=8"&gt;Lullabies&lt;/A&gt; is now in the app store. Check it out.]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I have 2 young children, and the familiarity and dexterity they show in using their parent's iPhones continues to amaze me. They can unlock the phone, find the YouTube app, and press on a video to play. And they are only 3 and 2 years old. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;I have a brother, James Howes, who is an amazing singer, trying to make a name for himself singing opera in the Midwest. I would love to do something to advance his career. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;One night, I came up with the idea of an app to help make babies sleepy, a lullaby app. Restful animations would play while Jim sang something sleep inducing.  Originally, a friend of mine was going to do the animations, but he was too busy and I ended up doing the animations using CALayers and Core Animation, which was a first for me. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;So here are some ideas about using CALayers on the iPhone. The first thing I did was open up Photoshop Elements and create a 320x480 document. I like Elements because it has simple vectored tools, its Save For Web... function creates excellent PNG files, and most importantly it is a layered editing program. Thus I can mock up my animation before I ever write a line of code to see what parts I need. So for a toy clock, I can combine, a background, a pendulum, a spinning moon dial, a spinning sun, and some foreground artwork. These are all exported from Elements as PNG files. PNG is the proper choice as it has decent compression while still having a transparency, and full color.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://homepage.mac.com/grhowes/Blog/Lullabies/Clock_Back.png"&gt;&lt;img style="float:left; margin:0 0px 0px 0;cursor:pointer; cursor:hand;width: 80px; height: 120px;" src="http://homepage.mac.com/grhowes/Blog/Lullabies/Clock_Back.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://homepage.mac.com/grhowes/Blog/Lullabies/Pendulum.png"&gt;&lt;img style="float:left; margin:0 0px 0px 0;cursor:pointer; cursor:hand;width: 80px; height: 120px;" src="http://homepage.mac.com/grhowes/Blog/Lullabies/Pendulum.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://homepage.mac.com/grhowes/Blog/Lullabies/Moons.png"&gt;&lt;img style="float:left; margin:0 0px 0px 0;cursor:pointer; cursor:hand;width: 80px; height: 120px;" src="http://homepage.mac.com/grhowes/Blog/Lullabies/Moons.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://homepage.mac.com/grhowes/Blog/Lullabies/Sun.png"&gt;&lt;img style="float:left; margin:0 0px 0px 0;cursor:pointer; cursor:hand;width: 80px; height: 120px;" src="http://homepage.mac.com/grhowes/Blog/Lullabies/Sun.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://homepage.mac.com/grhowes/Blog/Lullabies/Baby.png"&gt;&lt;img style="float:left; margin:0 0 px 0px 0;cursor:pointer; cursor:hand;width: 80px; height: 120px;" src="http://homepage.mac.com/grhowes/Blog/Lullabies/Baby.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;BR&gt;&lt;br /&gt;&lt;P&gt;&lt;BR&gt;&lt;P&gt;&lt;br /&gt;&lt;br /&gt;To form a toy clock of the kind one might see strapped to a crib.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://homepage.mac.com/grhowes/Blog/Lullabies/Whole_Clock.png"&gt;&lt;img style="float:left; margin:0 0px 0px 0;cursor:pointer; cursor:hand;width: 80px; height: 120px;" src="http://homepage.mac.com/grhowes/Blog/Lullabies/Whole_Clock.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;P&gt;&lt;BR&gt;&lt;P&gt;&lt;br /&gt;&lt;br /&gt;If I add a layer of shadow&amp;mdash;easily created with Element's color to transparent gradient tool&amp;mdash;I am able to animate its opacity over the course of the animation ending with a night time scene. I like this gloaming effect better than simply making the whole scene uniformly dim.&lt;BR&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://homepage.mac.com/grhowes/Blog/Lullabies/Gloaming.png"&gt;&lt;img style="float:left; margin:0 10px 0px 0;cursor:pointer; cursor:hand;width: 80px; height: 120px;" src="http://homepage.mac.com/grhowes/Blog/Lullabies/Gloaming.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://homepage.mac.com/grhowes/Blog/Lullabies/Whole_Clock_Gloamed.png"&gt;&lt;img style="float:left; margin:0 10px 0px 0;cursor:pointer; cursor:hand;width: 80px; height: 120px;" src="http://homepage.mac.com/grhowes/Blog/Lullabies/Whole_Clock_Gloamed.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;P&gt;&lt;BR&gt;&lt;P&gt;&lt;br /&gt;Now that I had my parts together, I loaded each into a CALayer as so:&lt;br /&gt;&lt;CODE&gt;&lt;br /&gt;UIImage* moonsImage = [UIImage imageNamed:kMoonsName];&lt;br /&gt;self.moonsLayer = [CALayer layer];&lt;br /&gt;self.moonsLayer.contents = (id)moonsImage.CGImage;&lt;br /&gt;self.moonsLayer.name = kMoonsName;&lt;br /&gt;self.moonsLayer.opaque = NO;&lt;br /&gt;[self addSublayer:moonsLayer];&lt;br /&gt;self.moonsLayer.zPosition = 2;&lt;br /&gt;self.moonsLayer.contentsGravity = kCAGravityResizeAspectFill;&lt;br /&gt;[self.moonsLayer addAnimation:[self spinningAnimation] forKey:@"transform"]; &lt;br /&gt;&lt;/CODE&gt;&lt;br /&gt;Note, I made use of the zPosition to make sure my parts are drawn in the right order, and that I have a method that creates a CABasicAnimation spinningAnimation.  I made a variety of CABasicAnimations to rotate the moon layer, spin the sun and swing the pendulum. You might have noticed that the center of the sun is the center of the moon dial is the center of the clock as a whole is the rotation point of the pendulum. This is not a coincidence; it makes figuring things out a whole lot easier. The pendulum graphic I used extends from the rotation point to the tip of the pendulum, although most of it is transparent. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;I also made animations of snow falling, and bubbles bouncing. The hard part was simulating a bubble's iridescence (rainbow effect) in the Core Animation on the iPhone, believe me it would have been easier if Apple provided support for a proper masking layer as they do on the desktop. &lt;br /&gt;&lt;br /&gt;It was darn hard getting my brother's audio tracks. Singing lullabies is not part of his normal repertoire&amp;mdash;Rossini is more his speed&amp;mdash;and he had no easily available recording facilities. The first tracks he sent me sounded like they were sung in an oak closet (better known as my cousin's kitchen).  But after a very long time, he delivered  the tracks I wanted, and I think they sound pretty good:&lt;br /&gt;&lt;A HREF="http://web.mac.com/grhowes/Generally_Helpful_Software/Lullabies_files/DownInTheValley.m4a"&gt;Down in the Valley&lt;/A&gt;. Note that any imperfections are caused by my amateurish editing skills; Jim is a singing machine. &lt;BR&gt; &lt;br /&gt;&lt;br /&gt;Thankfully, Apple brought out the AVAudioPlayer class in the 2.2 SDK. It makes playing music much easier than the previous method of messing with AudioQueues. So actually playing the music was falling off a log easy. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;So that's that. It was great learning about Core Animation, and I've ended up making good use of the skills in a per hour job this last month. And I hope to make more children apps in the future. I just hope this one makes a little money along the way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-6726010733743906443?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=304213541&amp;mt=8' title='Writing a Lullaby App for the iPhone'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6726010733743906443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6726010733743906443'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2009/02/writing-lullaby-app-for-iphone.html' title='Writing a Lullaby App for the iPhone'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-6977848136471530265</id><published>2008-12-14T08:42:00.003-05:00</published><updated>2008-12-14T09:11:31.872-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='hints'/><title type='text'>How I Drive Around With My iPhone</title><content type='html'>If you insert your iPhone's headset into your iPhone, and then plug an iPhone to USB connector into the bottom connector, the phone has a very useful set of behaviors. Regular audio such as music or podcasts will go out the bottom connector&amp;mdash;which in my case ends up coming out my car's speakers&amp;mdash;while phone conversations will go through the headsets. Also, the click button on the microphone works to pause (single click), answer (single click), hang up (single click) and skip to next track (double click). &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Therefore, when  I get into the car for my commute home, I plug my headset into the phone, put the right&amp;mdash;microphone&amp;mdash;ear bud into my ear, and then plug the phone into my car's stereo system. The order this is done is important. Then, as I'm driving around, if someone calls me, I can answer the phone, hang up, and skip tracks all without looking. Be warned, might be illegal in your locality.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-6977848136471530265?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6977848136471530265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6977848136471530265'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/12/how-i-drive-around-with-my-iphone.html' title='How I Drive Around With My iPhone'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-960216114352974202</id><published>2008-11-27T02:57:00.002-05:00</published><updated>2008-11-27T03:06:15.131-05:00</updated><title type='text'>A Tech Support Mystery</title><content type='html'>Last week, my co-worker Gerald came to my cube saying his PowerMac G5 was consistently locking up after starting up and bringing up Entourage. He had come to me as I am the Mac programmer on staff, and therefore considered to know all things Macintosh. &lt;BR&gt;&lt;br /&gt;I went down to his cube to find the G5 unresponsive to mouse clicks; locked up just has he had said. Very odd. After a few seconds of futzing around I realized that the machine did respond to right clicks. And a few seconds later, Gerald mentioned in passing that every time he restarted, the optical drive ejected. I immediately knew what the problem was. Can you solve this mystery? Answer below. &lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;The left mouse button of his Logitech mouse was stuck in the clicked state. Thus the machine was non-responsive to mouse clicks, and as everyone should know, holding down the mouse button while restarting will eject the optical drive of a Mac. I went and got a Mighty Mouse, plugged it in and the machine worked perfectly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-960216114352974202?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/960216114352974202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/960216114352974202'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/11/tech-support-mystery.html' title='A Tech Support Mystery'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-4549066387238602080</id><published>2008-11-14T07:06:00.002-05:00</published><updated>2008-11-14T07:21:56.987-05:00</updated><title type='text'>Patience Needed for Switching .mpg Application</title><content type='html'>My MythTV records over the air broadcasts as .mpg (MPEG) files of several gigabytes each. My preferred mode of viewing them these days is to open up a SMB share on the MythTV box, copy the file over to my MacBook while I'm working and then view it later. Amongst the many annoying things about this process&amp;mdash;inefficient SMB transfers, avoiding having Time Machine back up the show, OS X not letting me watch a partially transferred file&amp;mdash;a small one is that Quicktime owns the .mpg extension, when it'd be nice if VLC did. But every time I would open a Get Info window on a .mpg file the whole Finder would lockup, apparently generating the preview. And then I'd relaunch the Finder after a minute or so. So I never was able to click the &lt;i&gt;Change All...&lt;/i&gt; button. &lt;BR&gt;&lt;br /&gt;Turns out that the Finder will eventually, after several minutes, give up with creating a preview, and you can change the &lt;i&gt;Open With&lt;/i&gt; application to &lt;A HREF="http://videolan.org" NAME="VLC"&gt;VLC&lt;/A&gt; and then click the &lt;i&gt;Change All...&lt;/I&gt; button.  So be patient.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-4549066387238602080?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.videolan.org/' title='Patience Needed for Switching .mpg Application'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/4549066387238602080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/4549066387238602080'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/11/patience-needed-for-switching-mpg.html' title='Patience Needed for Switching .mpg Application'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-8191110155919928031</id><published>2008-11-07T08:37:00.004-05:00</published><updated>2008-11-07T13:14:23.962-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sleep'/><category scheme='http://www.blogger.com/atom/ns#' term='advice'/><category scheme='http://www.blogger.com/atom/ns#' term='google tech talks'/><title type='text'>Sleep Advice for Geeky Fathers</title><content type='html'>As a father of young children, I have some advice for my fellow software engineers in similar boats who want time for their side projects. At some point, if you are lucky, your children will be sleeping from their bedtime of say 9:00 PM to maybe 7:00 AM depending on their natural needs. My advice is to work within this framework when it comes to your own sleep schedule. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Every day, come home from work, play with your children till their bedtime, fall asleep as they do and wake up naturally. For me, falling asleep at 9:00 PM will mean waking up in a quiet, empty house at 4:30 AM with 2&amp;#xBD; hours of time to work on my software projects and catch up on my TV watching before the children awake. I will spend the rest of the day fully rested, and at my peak performance. Compare with the alternative strategy of staying up after the babies' bedtime which if I "get on a roll" might keep me up till 12:30 AM, with no margin for error. What if the babies wake up at 6:00 AM as they sometimes do? I'll spend the rest of the day under a sleep debt: low performing and grumpy. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Also, my recommended strategy allows you to pay off your sleep debt. If you do this and wake up later than expected the first few days, you had an accumulated sleep debt you needed to pay off before reaching peak efficiency.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;I'm basing this advice on this Google Tech Talk which I highly recommend watching:&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/8hAw1z8GdE8&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/8hAw1z8GdE8&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-8191110155919928031?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.youtube.com/watch?v=8hAw1z8GdE8' title='Sleep Advice for Geeky Fathers'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8191110155919928031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8191110155919928031'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/11/sleep-advice-for-geeky-fathers.html' title='Sleep Advice for Geeky Fathers'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-5207538554358421462</id><published>2008-11-06T10:42:00.003-05:00</published><updated>2008-11-06T10:54:38.850-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='leaks'/><category scheme='http://www.blogger.com/atom/ns#' term='idiocy'/><title type='text'>When Is A Leak Not A Leak</title><content type='html'>I was sent a bug report on some software I had written a while back wherein it would become less and less responsive over time till it just sort of died. Sounds like a leak. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;But when I hooked it up to the Leaks Instrument, I saw no leaks. No red peaks at all.  Must not be a leak then.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;But one more look. The net objects allocated were going up and up and up. This should not happen, the application should have reached an equilibrium point of net objects allocated, and oscillated around it. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;So, I let it run for a while in the Objects Allocated instrument, and then examined the blocks which were being allocated and not deallocated. Turns out I had an object, an audio player, which had a scheduled NSTimer associated with it. When I released the player, it was still being referred to by the NSTimer, so it did not get deallocated. And in this case, I was creating one of these every second or so (probably not a good idea), which meant that not only was the memory leaking, but all those timers were adding overhead to the event loop. No wonder it crawled to a halt.  So remember to invalidate unwanted timers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-5207538554358421462?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5207538554358421462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5207538554358421462'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/11/when-is-leak-not-leak.html' title='When Is A Leak Not A Leak'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-25763841708953348</id><published>2008-10-29T15:53:00.003-04:00</published><updated>2008-10-30T17:40:29.743-04:00</updated><title type='text'>Debugging a Shower</title><content type='html'>The big extravagance at the house this year is replacing the cheapest looking vinyl shower you ever saw with a very nice tile and glass block version. A friend of my wife's built it over the course of a month; it's beautiful. The babies have been learning the joys of showers over baths, and I've been spending much of my time pondering development problems from the built in granite seat.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately, it's started leaking and in tracking down the leak, I've realized how broadly applicable the skills we pick up debugging software can be applied to the physical world. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;&lt;H5&gt;Initial Bug Report. &lt;/H5&gt;After a lengthy bout of baby cleaning, my wife noticed a wet spot growing from the hallway wall shared by the new shower. She reported the bug to me as a high priority. &lt;br /&gt;&lt;H5&gt;Observation of Bug's Behavior&lt;/H5&gt;The bug only manifested itself after a shower. And a shower of the babies.&lt;br /&gt;&lt;H5&gt;Initial Conclusions&lt;/H5&gt;If the copper pipes inside the shower were leaking, then using the shower would be irrelevant; it would leak regardless of use. The only exception to this would be a leak in the pipe from the valve to the shower head. So no need to rip out the walls to get to the water pipes.&lt;br /&gt;&lt;H5&gt;Experimentation&lt;/H5&gt;Working on the assumption that if the shower was leaking, it was doing so near the wet spot, and most likely at the most complicated part of the shower: the granite seat. So, I took my morning shower with the spray pointed away from the seat. Result: No wet spot.  Conclusion, the seat was not properly sealed. There was a seam through which water could get through and into the outside world. This meshed well with the initial bug report, as the babies would tend to stand on the seat and have the spray directed at them there for long periods. &lt;br /&gt;&lt;H5&gt;Rejected Alternative Hypothesis&lt;/H5&gt;Someone suggested that perhaps the flow was overwhelming the drain and a path to the outside was being reached from the bottom. This seems unlikely as the flow into the drain should be the same or less when the spray was pointed towards the seat. And 15 minutes of water directed directly at the drain disproved it. &lt;br /&gt;&lt;br /&gt;&lt;H5&gt;Final Conclusions&lt;/H5&gt;Have to reseal all the joints, and re-grout the tile beneath the seat till we find the bad seam.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-25763841708953348?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/25763841708953348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/25763841708953348'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/10/debugging-shower.html' title='Debugging a Shower'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-823996257502763715</id><published>2008-10-25T00:52:00.006-04:00</published><updated>2008-10-31T09:11:51.774-04:00</updated><title type='text'>Visual Studio 2005 C++ and the ? : operator</title><content type='html'>One thing you want in C++ compilers is consistency with other C++ compilers. Especially if you are doing cross-platform development work. I want the VS C++ compiler to interpret what I tell it to do exactly the same way that gcc interprets it. That way, I don't have to special case my compilations, and I don't create a bunch of platform specific bugs in my platform neutral code. And usually, the two compilers do agree.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;However, I discovered today (Friday) that if you compile something like:&lt;br /&gt;double x = (false) ? 0 : 1.4;&lt;br /&gt;that x will  not equal 1.4 as most people (and the gcc compiler) would think, but rather it will equal 1.0. Why? Because it sees 0, interprets it as an integer and decides that if both halves of the : have to have the same type, then that type will be integer. The fact that this is in the middle of an assignment to double means nothing. &lt;br /&gt;&lt;br /&gt;In order for x to equal the expected 1.4, you have to write: &lt;br /&gt;double x = (false) ? 0.0 : 1.4;&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;I'm not even saying that Visual Studio is wrong. It's different from gcc which leads to platform specific bugs, and it's unexpected so the unaware coder will type in the unwanted form and not know something could possibly go wrong.&lt;br /&gt;&lt;br /&gt;[Update: &lt;A HREF="http://www.sprucehill.com/rsf/blog/2008/10/26/visual-studio-2005-not-ready-to-lead"&gt;Russell Finn&lt;/A&gt; goes into more language lawyer parsing of this, and believes VS C++ is wrong. (I don't know Mr. Finn, I just like to read my Site Meter page to see how people get to my blog.)]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[Update 2: And don't let me get started about how VS C++ allows you to put the closing angle brackets of a nested template declaration without a space, as in: &lt;br /&gt;  vector&amp;lt;pair&amp;lt;string, int&lt;b&gt;&amp;gt;&amp;gt;&lt;/b&gt;   myVectorOfPairs; &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/12068616-823996257502763715?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/823996257502763715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/823996257502763715'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/10/visual-studio-2005-c-and-operator.html' title='Visual Studio 2005 C++ and the ? : operator'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-1112616161629893998</id><published>2008-10-23T12:00:00.003-04:00</published><updated>2008-10-23T12:23:51.772-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='commerce'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>News of the Not News: People Like Free iPhone Apps</title><content type='html'>This is one of those blog posts where the author has two data points and has to write an entire entry about those points. Here is the data: My iPhone app to help HDHomerun users align their antennas, Signal GH, went 5 days without a sale. This despite getting a favorable mention on a well known podcast on Friday. So I temporarily started giving it away to boost exposure and reviews. A day later, I had 205 downloads from the U.S.. &lt;br /&gt;&lt;br /&gt;So $2.99 equals 0 unit sales per day  == $0.00 profit&lt;br /&gt;And $0.00 equals 205 unit sales per day == $0.00 profit&lt;br /&gt;&lt;br /&gt;At least I'm breaking even.&lt;br /&gt;&lt;br /&gt;I believe a large number of these downloads are pointless, as you have to have an &lt;A HREF="http://silicondust.com"&gt;HDHomerun&lt;/A&gt; to do anything at all with Signal GH. There are people who troll the back pages of the utilities section of the App Store, downloading everything free. I just hope these people don't write reviews.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-1112616161629893998?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://web.mac.com/grhowes/Generally_Helpful_Software/Signal_GH.html' title='News of the Not News: People Like Free iPhone Apps'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/1112616161629893998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/1112616161629893998'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/10/news-of-not-news-people-like-free.html' title='News of the Not News: People Like Free iPhone Apps'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-8222366969542234764</id><published>2008-10-16T00:06:00.004-04:00</published><updated>2008-10-16T12:56:06.333-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Cocoa'/><title type='text'>Thankful to be a Cocoa Programmer</title><content type='html'>The company I work for is interested in Microsoft's .NET framework; I am not. But, I was scrounging for free content on  iTunes the other day and came across the &lt;A HREF="http://www.dotnetrocks.com/"&gt;.NET Rocks&lt;/A&gt; podcast, and  out of idle curiosity downloaded a few episodes.  They are well done, and put together by friendly people with an unflagging enthusiasm for Microsoft technologies. And they make me very happy to spend much&amp;mdash;unfortunately not all&amp;mdash;of my time working on Macs and iPhones. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Apparently, the target audience is comprised of developers putting together custom business applications; the kind of vertical apps corporate America (and apparently Dubai) consume by the megalines of code.  Not the general purpose, high degree of finish, large user base applications I've spent much of my career writing, but database frontends and the like. It's the Bizarro world out there, where right justifying labels is considered a major advance in GUI development. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Any iPhone developers would be well served listening to the recent cast on Windows Mobile. As someone who was scrounging for work when the Mac had 3% market share, I can sympathize with the pathos of a product manager for Windows Mobile trying to put a brave face on disaster, but come on. This exchange pretty much sums up the level of wishfulness and straw grasping:&lt;BR&gt;&lt;i&gt;Host: So let me ask the question a different way: the next version, whatever it's called; should Apple be scared?&lt;BR&gt;Rob Tiffany: Very scared.&lt;BR&gt;Hosts: (laughs) YES!&lt;BR&gt;Rob Tiffany: Very scared.&lt;BR&gt;Hosts: I knew it.&lt;BR&gt;Rob Tiffany: Yeah, yeah, we're working on some secret sauce out there.&lt;BR&gt;Host: Not too secret anymore! &lt;/i&gt;&lt;BR&gt;&lt;br /&gt;I will congratulate the hosts for not being blind to WinCE's current flaws: they gave Rob a hard time about how the phone app on their phone was glacially slow; I'm just amazed they think it will get better. That old saying about a second marriage being the triumph of hope over experience..&lt;BR&gt;  &lt;br /&gt;&lt;br /&gt;And the episode on complying with the corporate governance rules of the Sarbanes Oxley law... If I had to do that sort of thing, I'd seriously consider going to work at Home Depot. How does one show up at work every day doing that sort of thing?&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;And that's the thing. I'm nearly always happy either going into work&amp;mdash;assuming I won't be spending the whole day fixing OLE bugs on the PC&amp;mdash;or pulling out my MacBook and add a refinement to an iPhone app. Life is sweet. I get to work in an application framework which was designed right from the start; light weight  and powerfully elegant.  I'm not one of a hundred cogs living in a condo in Dubai; I'm a sole practitioner, or an unblended part of a small team. I write software people don't have to be paid to use. I don't have to wait for the secret sauce which never comes. I am a Cocoa programmer, and for that I am thankful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-8222366969542234764?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.dotnetrocks.com/' title='Thankful to be a Cocoa Programmer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8222366969542234764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8222366969542234764'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/10/thankful-to-be-cocoa-programmer.html' title='Thankful to be a Cocoa Programmer'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-3929473696179174410</id><published>2008-10-11T05:23:00.003-04:00</published><updated>2008-10-11T05:49:19.103-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone Development'/><title type='text'>The Loss of Homogeneity: iPhones on the Network</title><content type='html'>Developing for the iPhone and iPod Touch is nice: limited hardware differences leads to reliability. If it works on my iPhone running the 2.1 OS, it should run well on your iPhone. They are pretty much the same. Homogeneity is good when it comes to testing for program errors.  &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;So your iPhone is the same as mine, but your network is not.&lt;BR&gt;&lt;br /&gt;I submitted a new version of &lt;A HREF="http://web.mac.com/grhowes/Generally_Helpful_Software/RRgh_for_iPhone.html"&gt;Remote Remote GH for OS X Touch&lt;/A&gt;  to Apple a week ago. It had been gradually gestating and stabilizing has I had time to improve it. The last several weeks, it had been quite stable, and had never been much of a crasher to begin with. Thursday night, Apple notified me that the new version was available for distribution on the App Store; Friday morning RRgh crashed on me on launch. Wha? &lt;BR&gt;&lt;br /&gt;Backing up. I had been playing with the &lt;A HREF="http://xbmc.org/forum/forumdisplay.php?f=56"&gt;XBox Media Center (XBMC)&lt;/A&gt; for the AppleTV, and last night I had tried turning on its UPnP (Universal Plug and Play) server and client. The new RRgh's big feature is support for auto-detecting MythTV frontends via UPnP, so having another UPnP device on my network meant my code had to check to see it wasn't a MythTV. Unfortunately, this revealed a latent crashing bug where I was expecting a string, got a NULL pointer instead, and boom, boom crash. (No actual audio percussion, just a silent quit.)&lt;BR&gt;&lt;br /&gt;An early updater experiencing (what I assume is) the same problem figured out my e-mail address and let me know that I wasn't the only one.&lt;BR&gt;&lt;br /&gt;So, I had to quickly remove RRgh from distribution pending a 1.1.1 release, as I have no wish to get a deluge of negative reviews from whatever small fraction of the populace would be affected by this. Which means, there is no RRgh currently available for download, as I don't have the option to revert to the 1.0 binary. &lt;BR&gt;&lt;br /&gt;If you are one of the people who downloaded 1.1, I hope it isn't crashing on you, but I've submitted an updated binary which should be out within the week. &lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-3929473696179174410?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3929473696179174410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3929473696179174410'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/10/loss-of-homogeneity-iphones-on-network.html' title='The Loss of Homogeneity: iPhones on the Network'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-6855498210749093389</id><published>2008-10-02T02:42:00.004-04:00</published><updated>2008-10-27T08:58:14.490-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS X'/><category scheme='http://www.blogger.com/atom/ns#' term='printing'/><title type='text'>News of the Not News: Quicktime Printing is Dead</title><content type='html'>As I occasionally let on, my day job is the care and feeding of an ancient, semi-well known, Carbon application (and worse its Win32 doppleganger, and worse still its Win32 doppleganger's OLE interface). One &amp;quot;perk&amp;quot; is the occasional confrontation with the living dead. The dead in question is how we print. We print using a very old and elaborate system of QuickDraw calls spiked with embedded Postscript.  This creates very nice output. On Postscript printers. From PowerPC Macs. &lt;BR&gt;&lt;br /&gt;For Intel Macs, not so good. Why? Because there is no embedded Postscript in Quickdraw printing support for Intel Macs. It didn't make the cut of creaky technologies Apple bothered porting over during the Intel transition. So, yes, text and polygons look OK, if imprecisely positioned, and that's most of our output; but anything splined based is bad as there are no splines in QuickDraw only very big polygons.&lt;BR&gt;&lt;br /&gt;So, users of ancient Carbon applications: check out the printing on your shiny new Intel box.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-6855498210749093389?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6855498210749093389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6855498210749093389'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/10/news-of-not-news-quicktime-printing-is.html' title='News of the Not News: Quicktime Printing is Dead'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-927122368448366400</id><published>2008-09-23T13:55:00.004-04:00</published><updated>2008-09-23T14:26:11.837-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='hdhomerun'/><category scheme='http://www.blogger.com/atom/ns#' term='OTA'/><title type='text'>How I Didn't Get Rich Via my iPhone App</title><content type='html'>I think we've all seen the stories about some guy in New Zealand making $6K a day for a Choplifter clone, or another fellow making $250K in two months reimagining Tetris. What you don't hear about are the flops. And I have a flop on my hands. My application to monitor over the air digital television signal quality, &lt;A HREF="http://web.mac.com/grhowes/Generally_Helpful_Software/Signal_GH.html"&gt;Signal GH&lt;/A&gt; has sold 10 copies.  I had had no illusions that it would be a big seller; the target market is small at the intersection of iPhone owners and HDHomerun users; I just assumed there were a few thousand such people and they would all want my app. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Apparently not. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Unlike a lot of apps getting shoveled onto the App Store, Signal is competently coded; performs a useful service, launches quickly, doesn't leak, doesn't crash, and has only a smattering of bugs. Maybe prospective buyers would like to know this, but I have had no reviews so far. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Part of the problem was that Apple mistakenly lists its release date as the day I submitted it to them for testing, instead of the day they actually released it to the public, so I got no time on the front page of the Utilities page. And part is probably too high a price point, maybe $5 is just too much even for niche market apps.  Again, I'm flying in the dark here because I've gotten zero feedback.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;I also don't know where HDHomerun users hang out. The forums on Silicon Dust seem fairly low volume. Maybe if the HDHomerun were buggier, people would be filling their forums but dang it if the HDHomerun isn't the most reliable gadget on my network. And, I don't want to make commercial announcements on public forums anyway; nobody likes that sort of thing. I'm not a marketing wiz, I am a fairly good Mac coder. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Oh well, I only wasted a couple weeks of spare coding time. I've learned my lessons about targeting larger markets. I learned a thing or two about iPhone development, and hopefully my next post on the subject will be "How I Did Get Rich Via My iPhone App."&lt;br /&gt;&lt;br /&gt;&lt;IMG SRC="http://web.mac.com/grhowes/Generally_Helpful_Software/Signal_GH_files/shapeimage_5.png"/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-927122368448366400?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://web.mac.com/grhowes/Generally_Helpful_Software/Signal_GH.html' title='How I Didn&apos;t Get Rich Via my iPhone App'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/927122368448366400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/927122368448366400'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/09/how-i-didnt-get-rich-via-my-iphone-app.html' title='How I Didn&apos;t Get Rich Via my iPhone App'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-4769250433349339226</id><published>2008-09-23T03:03:00.007-04:00</published><updated>2008-10-04T16:58:19.451-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone Development'/><category scheme='http://www.blogger.com/atom/ns#' term='UPNP'/><title type='text'>UPnP with Cocoa</title><content type='html'>Needing a license compatible implementation of &lt;A HREF="http://en.wikipedia.org/wiki/Upnp"&gt;UPnP&lt;/A&gt; I could use to locate MythTV frontends, I made the mistake of using the C++ version of &lt;A HREF="http://www.cybergarage.org"&gt;CyberGarage's&lt;/A&gt; library. This was a mistake as the C++ version (1.7) is old and filled with bugs and leaks. The proper version to use is the &lt;A HREF="http://www.cybergarage.org/net/upnp/c/index.html"&gt;C version&lt;/A&gt; (2.2) which is much less buggy and even comes with an Objective C wrapper class. &lt;BR&gt;&lt;br /&gt;If you are writing an iPhone app and need to locate a UPnP device, this is probably the way to go. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Oh, and one thing to consider is that if you look through the code, you will see that the library avoids opening up connections with network interfaces that have the IFF_LOOPBACK flag set&amp;mdash;for obvious reasons. You might want to also avoid network interfaces with the IFF_POINTOPOINT flag set, as that is as like as not the cell network radio, and you probably don't want to make UPnP inquiries over the cell network.&lt;br /&gt;&lt;br /&gt;[Update: Looks like &lt;A HREF="http://code.google.com/p/tcmportmapper/"&gt;TCM Port Mapper&lt;/A&gt; might be the preferred library, but I haven't tried it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-4769250433349339226?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.cybergarage.org/net/upnp/c/index.html' title='UPnP with Cocoa'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/4769250433349339226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/4769250433349339226'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/09/upnp-with-cocoa.html' title='UPnP with Cocoa'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-2309081111302863240</id><published>2008-09-10T08:23:00.002-04:00</published><updated>2008-09-10T09:20:46.854-04:00</updated><title type='text'>iTunes 8 is still not Cocoa</title><content type='html'>Earlier in the year, I posted a &lt;A HREF="http://sprinkleofcocoa.blogspot.com/2007/11/there-must-be-cocoa-itunes-coming-vista.html"&gt;blog entry&lt;/A&gt; about how Apple, obviously, must be getting ready to release a new version of iTunes based upon the Cocoa framework, and not the Carbon framework. While I still believe this to be true, iTunes 8 is not that product. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;A quick look through the application's bundle shows all the signs of a product still deeply welded to Carbon. &lt;br /&gt;A quick glance through the Info.plist:&lt;UL&gt;&lt;LI&gt;No Principle Class so no NSApplication at launch&lt;/LI&gt;&lt;LI&gt;The HIWindowFlushAtFullRefreshRate flag is set indicating at least a few Carbon windows&lt;/LI&gt;&lt;LI&gt;Application requires Carbon environment flag is set&lt;/LI&gt;&lt;/UL&gt;&lt;BR&gt;&lt;br /&gt;There are a few .nib files in the bundle, but all the ones I looked at were Carbon. &lt;BR&gt;&lt;br /&gt;Localized strings are still kept in a resource (.rsrc)  file! What in the world. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;In fact, there are no obvious signs of any Cocoa use at all.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As someone who's day job involves maintaining a Carbon app that "should" be transitioned to Cocoa, I can sympathize.  But it is concerning as Apple wastes development time adding features like Genius to a straight Carbon application. Anybody writing new features will know that their work will have a shelf life of about  9 months; and will have to be reimplemented&amp;mdash;at least the GUI parts&amp;mdash;in Cocoa. And the sooner a Cocoa iTunes comes out, the faster it will become a mature, bug-free product.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-2309081111302863240?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2309081111302863240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2309081111302863240'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/09/itunes-8-is-still-not-cocoa.html' title='iTunes 8 is still not Cocoa'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-9022313208390272660</id><published>2008-09-04T07:43:00.011-04:00</published><updated>2008-09-05T09:45:58.814-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='InCDius'/><category scheme='http://www.blogger.com/atom/ns#' term='Cocoa'/><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><title type='text'>Revamping a Dated Cocoa Application: InCDius 2.5</title><content type='html'>iPhone development has re-energized my love of programming. My day job requires me to do too much Win32 coding, and that is soul deadening for a Cocoa programmer. The combination of corporate priorities, and the fact I can add features much more quickly and with fewer bugs in Cocoa, leads me to spend a huge fraction of my time in Visual Studio, when I'd rather be in XCode.  It's been draining.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;I released InCDius 2 back in 2002, and it never got out of beta, although beta 16 was quite stable, and I apparently have a number of loyal (yet put upon) users.  It is just an Audio CD database, not a personal media database like the well regarded &lt;A HREF="http://www.delicious-monster.com/"&gt;Delicious Library&lt;/A&gt;. It was fast, and pretty darn stable, although a few users have had database corruption issues&amp;mdash;please back up to XML people. I knew for years that I should release a new version, but could never quite muster the energy. It embarrassed me having this old, non-Intel application, gradually getting less stable with each OS release application; and I was considering my options for killing it entirely. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;But my &lt;A HREF="http://web.mac.com/grhowes/Generally_Helpful_Software/RRgh_for_iPhone.html"&gt;Remote Remote GH&lt;/A&gt; for iPhone application makes heavy use of the SQLite database, so I felt confident I could transition InCDius away from the Berkeley DB database. This transition had been the most daunting of the reasons keeping me from releasing an update. &lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/InCDius.png" /&gt;&lt;br /&gt;My first impulse was to refactor the whole application using Core Data, but that would not have added anything but development time; the GUI was wired up quite well; the application was already scriptable. All I needed was a new database backend, and Apple ships OS X 10.5 with SQLite 3 right in /usr/lib. By choosing SQLite, I was no longer responsible for compiling and upgrading my database library; I can rely on it being there and just working. I tried using the &lt;A HREF="http://www.webbotech.com/"&gt;QuickLite&lt;/A&gt; SQLite wrapper, but it was not capable for the task, as it creates a large number of objects maintaining its internal cache, to the point of locking up my Mac. No, I had to call the SQLite C API directly. As long as I minimize random access into the database, I get good results.&lt;BR&gt;&lt;br /&gt;I also wanted this to be a release that could live on its own for a very long time; who knows how long I'll go without finding the time to update it. I wanted code which would last a very long time. This meant not only transitioning to Intel, but compiling for Intel 64-bit, and removing every deprecated API or framework message I could root out. I decided to make the minimum OS X version 10.5 (Leopard),  and to transition the codebase to Objective C 2.0, although it isn't quite all there yet. I'll have to work on the garbage collection, but I am using both Objective C 2.0 fast enumeration loops and properties where appropriate.&lt;BR&gt;&lt;br /&gt;Forward thinking means removing the past, so out went a few features tied to old APIs. I had been allowing users to import information from Classic Mac OS's CD Player preference file, but that involved using old school Resource Manager calls. Anybody ever going to use this feature again? No. Then out it goes, along with the Resource Manager.&lt;BR&gt;&lt;br /&gt;I had 2 separate ways to play Audio CD tracks. One used QuickTime; one used Core Audio. Kept the Core Audio. &lt;BR&gt;&lt;br /&gt;NSTableView has a new (to me) way to deal with selections with NSIndexSets, and deprecated the messages I had had been using. Goodbye old messages.&lt;BR&gt;&lt;br /&gt;My own Objective C objects were filled with ints, unsigned ints, longs, and even the occasional unsigned. Hello NSInteger, NSUInteger and 64 bit computing. &lt;BR&gt;&lt;br /&gt;I had been using a custom version of NSTableView to draw blue stripes. Goodbye custom class, hello check box in Interface Builder and grey stripes.&lt;BR&gt;&lt;br /&gt;Obviously, I had been using .nib files for building my GUI. Time to upgrade everything to .xib files. &lt;BR&gt;&lt;br /&gt;A user sent me his database (as a .zip archive of XML files) of 15,000 individual disks. Wow, and I had been thinking InCDius was zippy fast and ready for release. Massive performance tuning and the decision to load the database at runtime instead of upon the first search. Much simpler and reliable, and lets the user do something else while everything gets ready. &lt;BR&gt;&lt;br /&gt;Take time to remove all the warning messages. You will save yourself a huge amount of hassle in programming, but especially in Cocoa programming if you eliminate all the compile warnings. You want to know right away if the compiler doesn't know if NSView responds to "releese". Do not let warnings build up. Fix them. Fix them all. &lt;BR&gt;&lt;br /&gt;A &lt;A HREF="http://video.google.com/videoplay?docid=-2199332044603874737"&gt;Google Tech Talk&lt;/A&gt; by &lt;A HREF="http://en.wikipedia.org/wiki/Linus_Torvalds"&gt;Linus Torvalds&lt;/A&gt; inspired me to change the unique identifier key I had been using to lookup disks in the database; he uses SHA1 hashes to avoid corruption in Git, and it seemed to me that a SHA1 hash of the Audio CD's Table of Contents would be as close as I could get to being unique; although there will be rare instances when 2 CDs cannot both be in the database. &lt;BR&gt;&lt;br /&gt;So after all this, what do I have? A fast, reliable(?), clean, focused little application, which I can send out into the world; spend the next few months fixing the occasional bug and adding the occasional feature, and which people can use for a good long while.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-9022313208390272660?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://web.mac.com/grhowes/Generally_Helpful_Software/InCDius_GH.html' title='Revamping a Dated Cocoa Application: InCDius 2.5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/9022313208390272660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/9022313208390272660'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/09/revamping-dated-cocoa-application.html' title='Revamping a Dated Cocoa Application: InCDius 2.5'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-7609501489735626521</id><published>2008-08-28T11:40:00.005-04:00</published><updated>2008-09-10T16:41:49.577-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPod Touch'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='hdhomerun'/><category scheme='http://www.blogger.com/atom/ns#' term='OTA'/><category scheme='http://www.blogger.com/atom/ns#' term='antennas'/><title type='text'>Signal GH - iPhone App for the HDHomerun</title><content type='html'>[Update: It's finally in the &lt;A HREF="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=289580769"&gt;iTunes App Store&lt;/A&gt;.]&lt;br /&gt;&lt;br /&gt;I submitted my second iPhone application to the App Store this morning. &lt;A HREF="http://web.mac.com/grhowes/Generally_Helpful_Software/Signal_GH.html"&gt;Signal GH&lt;/A&gt; is a utility to monitor the signal quality of over the air television for American and Canadian users of the &lt;A HREF="http://silicondust.com"&gt;HDHomerun&lt;/A&gt;. I'm charging $4.99 for it, which seems a fair price given what a small market I'm targeting: the intersection of iPhone and OTA HDHomerun users. Anybody who's set a retail price knows how hard it is. And I'm sure there will be a lot of people giving me one star and claiming it should be free, or one star and claiming they didn't understand you needed an HDHomerun. Sorry guys, gotta send my son to day care, the requirements are right in the first sentence of the blurb.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;The Silicon Dust engineers did a great job with their libHDHomerun API, anybody wanting to put out a C API should check it out for its use of the language, platform ambivalence, and object like characteristics. Of course, they then released it under LGPL, making me wait the last couple weeks for them to modify the license. But they did, and I promptly submitted.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Now just step back and let the pennies roll in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-7609501489735626521?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=289580769' title='Signal GH - iPhone App for the HDHomerun'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7609501489735626521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7609501489735626521'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/08/signal-gh-iphone-app-for-hdhomerun.html' title='Signal GH - iPhone App for the HDHomerun'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-7077396340479359597</id><published>2008-08-23T13:07:00.010-04:00</published><updated>2008-08-25T11:47:48.996-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='car'/><category scheme='http://www.blogger.com/atom/ns#' term='chargers'/><title type='text'>Few USB Car Chargers work with iPhone 3G</title><content type='html'>[Update: an earlier version of this blog entry said that the 2A Griffin PowerJolt was able to charge my iPhone while playing audio and showing the GPS map. Additional testing showed this not to be the case.]&lt;br /&gt;&lt;br /&gt;As I spend 4 hours a week driving my car to and from work, I need my podcasts to keep me sane. Before I bought an iPhone 3G last month, I had a very reliable cigarette lighter to FireWire cable hooked up to a tiny dock which I would plug into my reliable iPod Mini. Apple, to save space, removed Firewire charging on the iPhone 3G thus forcing users to go with the inferior USB style charging.  In a quest to replace my previous setup, I found out the hard way how inferior USB charging is. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;To replace my original micro dock, I purchased an &lt;A HREF="http://www.amazon.com/Apple-MB128LL-A-Component-Cable/dp/B001714I0O/ref=pd_bbs_sr_2?ie=UTF8&amp;s=electronics&amp;qid=1219511849&amp;sr=8-2"&gt;Apple Component AV Cable&lt;/A&gt;. This gave me a USB connector for charging and 2 RCA cables to plug into the convenient RCA ports I had &lt;A HREF="http://sprinkleofcocoa.blogspot.com/2005/07/adding-auxiliary-inputs-for-my-ipod-in.html"&gt;previously installed&lt;/A&gt; in my Civic. And to think I was mocked for using RCA instead of a mini jack.  Of course, this left me with 3 useless component video connectors, but they were easily bundled up. &lt;BR&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Apple_Component_AV_Cable.png" /&gt;&lt;br /&gt;&lt;br /&gt;Now I needed a cigarette to USB adapter, so off to Amazon. I thought the &lt;A HREF="http://www.amazon.com/Mace-Group-USB-CHARGER-USB-CIG/dp/B000BQK9V8/ref=sr_1_1?ie=UTF8&amp;s=electronics&amp;qid=1219512152&amp;sr=8-1"&gt;Mace Group USB Charger&lt;/A&gt; looked compact. &lt;BR&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Mace_Group_USB.png"/&gt;&lt;BR&gt;And was soon happily zipping back and forth between work and home before discovering something: it wasn't actually charging my battery. In the meantime, I had purchased another copy for my wife's car, and the iPhone did not even recognize that has being connected. So back they went to Amazon.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Needing charger for a long day of taking a visitor around town, I picked up a PowerDuo/PowerJolt by Griffin at Circuit City:&lt;br /&gt;&lt;BR&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/PowerDuo.png" /&gt; &lt;BR&gt;That seemed to go alright for a couple days until I left the iPhone displaying a GPS map for half an hour. &lt;B&gt;What's that smell? &lt;/B&gt;The smell of the PowerJolt overheating. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;OK, might need something more heavy duty. My, this Black &amp;amp; Decker Power to Go cup holder charger looks the part. &lt;BR&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Black_And_Decker_USB.png" /&gt; &lt;BR&gt;Turns out it only delivers 350mA to the USB port. The iPhone won't even notice you are trying to charge it. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;How about this &lt;A HREF="http://www.amazon.com/Kensington-Charger-iPhone-iPod-Black/dp/B0014IUVOM/ref=pd_bbs_sr_3?ie=UTF8&amp;s=electronics&amp;qid=1219513722&amp;sr=8-3"&gt;Kensington Car Charger for iPhone and iPod&lt;/A&gt; rated at 1 Amp? It says right on the box for iPhone (no mention of 3G)&lt;br /&gt;&lt;BR&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Kensington_USB.png"/&gt;&lt;BR&gt;Well it didn't overheat, but it failed my listening to music with the GPS running test, couldn't quite keep up. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Finally, going back to another Griffin PowerJolt from Best Buy, this one larger and with a 2 Amp fuse.&lt;br /&gt;&lt;BR&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/PowerJolt_USB.png"/&gt;&lt;BR&gt;Here we have a &lt;strike&gt;winner&lt;/strike&gt;. [Correction: During a longer test, the iPhone's battery did not build charge while playing audio and displaying the GPS map, but the PowerJolt kept cool and was nearly able to keep up.] Driving around while listening to music and with the GPS on, it was actually able to top off my battery.  And this model has the new, don't start smoldering feature. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;It turns out that what any given USB port will deliver in terms of power varies widely: one charger might deliver 5 times as much current as another. I would recommend finding a charger with the highest available maximum amperage, something around 2A like the more recent PowerJolts, and avoiding dual port chargers unless they can guarantee a high current to both ports.&lt;br /&gt;&lt;br /&gt;[Update: What is strange about this is that according to System Profiler, my iPhone lives on an allocation of 500mA while connected to my MacBook.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-7077396340479359597?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7077396340479359597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7077396340479359597'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/08/few-usb-car-chargers-work-with-iphone.html' title='Few USB Car Chargers work with iPhone 3G'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-4565083733016850909</id><published>2008-07-24T23:52:00.000-04:00</published><updated>2008-07-24T23:52:16.223-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='remote controls'/><category scheme='http://www.blogger.com/atom/ns#' term='mythtv'/><title type='text'>Remote Remote for MythTV for iPhone</title><content type='html'>I've written a "toy app" for OS X Touch, a version of my Remote Remote GH for MythTV application which acts as a remote control over the wireless network to control a MythTV. It's a toy in the sense I am mainly using it to learn the iPhone SDK, and not to earn money, or even a large user base. I don't expect it will find a large following, I was just learning the ways of the iPhone. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Coding for the iPhone is different. Not so much in the GUI classes or the tools, but in the outlook it requires of the engineer. I was working in a resource starved environment; one in which I needed to take care not to run out of memory, not to use network unless needed, and not to spend a lot of time launching or quitting. An environment, where I had to justify every button on the remote control as space worthy. I leaned heavily on Apple's performance tools, much more than I would on a Mac. And, I refactored constantly. Every time I learned something new, I would change my code to work better and better fit the SDK way.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;I also needed to use SQLite extensively, and felt compelled to adapt the &lt;A HREF="http://www.webbotech.com/"&gt;QuickLite&lt;/A&gt; framework to both Objective-C 2.0 and the iPhone. If Tito Ciuro reads this, please send me an e-mail. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;And finally, I'm quite proud of most of the artwork:&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/TabBar.png"/&gt;&lt;br /&gt;It's harder than it looks coming up with simple, thematically consistent, iconic graphics. Thanks to my wife for telling me try again after my original app icon design mashed together a picture of a widescreen TV with a remote drawn in perspective. I went with a simple rendering of navigation buttons, which I liked so much I made the buttons part of the actual GUI.&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/RRghIcon.png"/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-4565083733016850909?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://web.mac.com/grhowes/Generally_Helpful_Software/RRgh_for_iPhone.html' title='Remote Remote for MythTV for iPhone'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/4565083733016850909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/4565083733016850909'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/07/remote-remote-for-mythtv-for-iphone.html' title='Remote Remote for MythTV for iPhone'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-7399643595584168804</id><published>2008-07-20T20:04:00.004-04:00</published><updated>2008-07-20T20:58:16.150-04:00</updated><title type='text'>My Semi-Annual Rant about Compiling MythTV</title><content type='html'>So, I am testing a little iPhone app to control MythTV, and I decide I should upgrade to the current bleeding edge build. Which is bad enough, as I had Qt 3.3 installed on my Linux box and the bleeding edge is Qt 4 based; requiring figuring out what my PATH, QTDIR, QTMAKE, variables are required, and then ending up with an upgraded database making it hard to go back.  And then finding out the the remote control interface is pretty severely broken in a couple places, which I either had to fix or cut back on the features of the app. And then finding out that the mythweb is pretty broken, and that live TV is not improved. Etc. &lt;br /&gt;&lt;br /&gt;Bad enough, and then I had to upgrade the Mac frontend to match the new version of the MythTV protocol. As if it it never occurred to the guys at MythTV.org that standards should be flexible enough not to require constant changes. Ever notice that on top of every well formed XML file it says &amp;lt;?xml version="1.0"  and that people have gotten along pretty well without changing the definition every 3.5 weeks. After a couple of hours of trying to get the frontend to compile on my MacBook, which has XCode 3.1, and an older version of Qt futzing things up I decided that the build scripts really didn't like &lt;A HREF="http://llvm.org/"&gt;llvm&lt;/A&gt;, and installed XCode 3.0 on the Mac Mini in the basement. Then it was a couple hours of fixing a few errors in the Mac specific code, and realizing the main configure file had to be made executable. &lt;br /&gt;&lt;br /&gt;Then after it finally compiled, it was figuring out why I couldn't turn off pinging the database server (bad mysql.txt permissions), then why the frontend quit right away with the only clue being in the Console: "MythTV requires an updated schema". So the database schema had changed in the last 3 days, causing the frontend to quit without any warning. Classy. &lt;br /&gt;&lt;br /&gt;And the playback is absolutely horrible on the Mini for some reason involving TOSLink passthrough or problems with linking in a library&amp;mdash;I'm not sure.  I really ought to buy another Mini, one which I can run as 100% OS X, and use EyeTV.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-7399643595584168804?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://mythtv.org' title='My Semi-Annual Rant about Compiling MythTV'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7399643595584168804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7399643595584168804'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/07/my-semi-annual-rant-about-compiling.html' title='My Semi-Annual Rant about Compiling MythTV'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-1243301639308955501</id><published>2008-06-14T22:25:00.014-04:00</published><updated>2008-06-25T18:16:36.542-04:00</updated><title type='text'>Vectored PICT to PDF conversion in your code</title><content type='html'>You should not be creating any PICT files, but longtime Mac users might have a large number of .pict or .pct files lying around, and some (all?) of the tools Apple provides to open such files and convert them to PDF do a horrid job of it.  This applies only to vectored PICTs, as bitmapped PICTS will look bad regardless.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;First I refer you to this screen capture of a simple AppleWorks drawing:&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/AppleWorks_Drawing.png" /&gt;&lt;br /&gt;You will notice that it looks a little archaic with it's lack of anti-aliasing, but that's what people had in the day.&lt;BR&gt;&lt;br /&gt;I copied and pasted this image into TextEdit.app, saved the document as RTFD and then used the "View Contents" item in the Finder contextual menu to get to an actual old fashioned .pict file. This is how hard it is these days to generate a PICT file.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Just to see how not to do this, open the .pict file in OS X Preview.app, zoom in a bit, and you will see that however Preview is rendering PICTs it is doing a pretty poor job of it. I'm guessing it is using QuickTime import  to create a bitmapped version.&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/PICT_in_Preview.png" /&gt;&lt;br /&gt;Tell Preview to save as a PDF and you get this mess:&lt;br /&gt;&lt;embed src="http://homepage.mac.com/grhowes/Blog/PICT_to_PDF_bad.pdf#toolbar=0&amp;navpanes=0&amp;scrollbar=0" width="223" height="172" &gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;The basic problem here is that Apple provides an API for rendering a PICT into a Quartz context (and thus into PDF) which preserves the vectored nature of the original and some applications do not use it. If you use this API, your onscreen representation of PICT files will be as good as they can be, and you will be able to export them to comparatively nice PDF files. This does not mean they will look as good as PDFs which had been created from the ground up as such; PICTs lack of support for transparency, Bezier curves, fractional coordinate systems and rotated text make that impossible. But it will look a lot nicer.&lt;br /&gt;&lt;br /&gt;&lt;CODE&gt;&lt;br /&gt;QDPictRef LoadPICTFromURL(const CFURLRef&amp; pictFileLocation)&lt;br /&gt;{// warning, I did not actually compile or test this code&lt;br /&gt;  QDPictRef result = 0;&lt;br /&gt;  CGDataProviderRef dataProvider = CGDataProviderCreateWithURL(pictFileLocation);&lt;br /&gt;  result = QDPictCreateWithProvider(dataProvider);&lt;br /&gt;  CFRelease(dataProvider);&lt;br /&gt; &lt;br /&gt; return result;&lt;br /&gt;}&lt;br /&gt;&lt;/CODE&gt;&lt;br /&gt;Look around the header files for the QDPictToCGContext.h header and you will find:&lt;br /&gt;&lt;CODE&gt;&lt;br /&gt;QDPictDrawToCGContext( CGContextRef   ctx, CGRect         rect, QDPictRef      pictRef);&lt;br /&gt;&lt;br /&gt;&lt;/CODE&gt;&lt;br /&gt;Then you can use the resulting QDPictRef to draw into a Quartz context, and if that CGContextRef was created via a call to CGPDFContextCreate, then you have created as nice a copy of the original PICT as is possible as seen by this screen shot at 200% zoom:&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/PICT_screen_rendering.png"/&gt;&lt;br /&gt;and this PDF result:&lt;br /&gt;&lt;embed src="http://homepage.mac.com/grhowes/Blog/PICT_to_PDF_good.pdf#toolbar=0&amp;navpanes=0&amp;scrollbar=0" width="228" height="178" &gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;Note that rotated text still looks horrible, as the only way to make QuickDraw draw rotated text onscreen was to draw into an offscreen bitmap and then rotate the pixels in the bitmap.  It was possible, however, to insert a series of  &lt;A HREF="http://developer.apple.com/DOCUMENTATION/mac/QuickDraw/QuickDraw-469.html"&gt;PicComments&lt;/A&gt; which inserted rotated text into a PICT. I've checked this out with PICTs created by a separate application, and the Apple PICT to PDF converter honors these comments. I guess AppleWorks just didn't bother to put them in. [Update: Paragraph rewritten to add extra info, and to hide temporary idiocy on my part.]&lt;br /&gt;&lt;br /&gt;Also check out the little bump in the arrow heads, probably a glitch that went unnoticed in the non-antialiased original caused by drawing the shaft too long and not quite on center.  Otherwise, the new antialiased version looks much nicer. And you can even select and copy the (non-rotated) text right here in the browser.&lt;br /&gt;&lt;br /&gt;It's not unusual, but unfortunate that Apple is inconsistent in using its own API. Preview.app obviously does not, nor does the PICT CoverFlow plugin,  but TextEdit.app appears to, resulting in the oddity of a PICT in a CoverFlowed RTFd document looking much better than the CoverFlow of the PICT file itself.&lt;br /&gt;&lt;br /&gt;Regardless, I recommend that anybody with a large collection of vectored PICTs make PDF copies of them as there may come a version of Mac OS X which will not have any support for PICTs at all. For instance, I doubt you can view PICTs on an iPhone. Warning: see my other posts about how PDFs do not contain the extra data which allows the originating application to recreate the original document. So keep the originals around too.&lt;br /&gt;&lt;br /&gt;[Update: I've corresponded with Thorsten Lemke, proprietor of &lt;A HREF="http://www.lemkesoft.com/" NAME="LemkeSoft Home Page"&gt;LemkeSoft&lt;/A&gt; and creator of the well known &lt;A HREF="http://www.lemkesoft.com/xd/public/content/index._cGlkPTE5Mw_.html" NAME="Graphics Converter"&gt;Graphics Converter&lt;/A&gt; application. He immediately saw the value in incorporating improved Quickdraw picture processing and conversion in his product and version 6.11 and higher (including this morning's beta) will feature it. I envy the nimbleness of independent software vendors. I can't tell you how long my day job company takes getting a minor release out to our customers.]&lt;br /&gt;&lt;br /&gt;[Update: here is the source for a simple automator plugin I threw together to make the conversion. &lt;br /&gt;&lt;CODE&gt;&lt;br /&gt;#import "QuickDrawPictureToPDFExporter.h"&lt;br /&gt;&lt;br /&gt;QDPictRef LoadPICTFromURL(const CFURLRef pictFileLocation)&lt;br /&gt;{&lt;br /&gt; QDPictRef result = 0;&lt;br /&gt; CGDataProviderRef dataProvider = CGDataProviderCreateWithURL(pictFileLocation);&lt;br /&gt; result = QDPictCreateWithProvider(dataProvider);&lt;br /&gt; CFRelease(dataProvider);&lt;br /&gt; return result;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@implementation QuickDrawPictureToPDFExporter&lt;br /&gt;&lt;br /&gt;CGContextRef CreatePDFContext(const CGRect mediaRect, CFMutableDataRef theData)&lt;br /&gt;{&lt;br /&gt; CGContextRef result = 0;&lt;br /&gt; if(theData != 0)&lt;br /&gt; {&lt;br /&gt;  CGDataConsumerRef theConsumer =CGDataConsumerCreateWithCFData(theData);&lt;br /&gt;  if(theConsumer != 0)&lt;br /&gt;  {&lt;br /&gt;   result = CGPDFContextCreate(theConsumer, &amp;mediaRect, NULL);&lt;br /&gt;   CGDataConsumerRelease(theConsumer);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; return result;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (id)runWithInput:(id)input fromAction:(AMAction *)anAction error:(NSDictionary **)errorInfo&lt;br /&gt;{&lt;br /&gt; NSMutableArray* output = [NSMutableArray array];&lt;br /&gt; &lt;br /&gt; if (![input isKindOfClass:[NSArray class]])&lt;br /&gt; {&lt;br /&gt;  input = [NSArray arrayWithObject:input];&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; NSEnumerator *enumerator = [input objectEnumerator];&lt;br /&gt; NSString* aPath =nil;&lt;br /&gt; &lt;br /&gt; while (aPath = [enumerator nextObject])&lt;br /&gt; {&lt;br /&gt;  NSURL *inputURL = [NSURL fileURLWithPath:aPath];&lt;br /&gt;  QDPictRef aPictRef = LoadPICTFromURL((CFURLRef) inputURL);&lt;br /&gt;  BOOL drawn = NO;&lt;br /&gt;  CFMutableDataRef theData = 0;&lt;br /&gt;  if(aPictRef)&lt;br /&gt;  {&lt;br /&gt;   CGRect mediaRect = QDPictGetBounds(aPictRef);&lt;br /&gt;   &lt;br /&gt;   theData =CFDataCreateMutable(NULL, 0);&lt;br /&gt;   CGContextRef cgContext = CreatePDFContext(mediaRect, theData);&lt;br /&gt;   if(cgContext != 0)&lt;br /&gt;   {&lt;br /&gt;    CGContextBeginPage(cgContext, &amp;mediaRect);&lt;br /&gt;    CGContextSaveGState(cgContext);&lt;br /&gt;    QDPictDrawToCGContext(cgContext,mediaRect,aPictRef); &lt;br /&gt;    &lt;br /&gt;    CGContextEndPage(cgContext);&lt;br /&gt;    CGContextRestoreGState(cgContext);&lt;br /&gt;    CGContextFlush(cgContext);&lt;br /&gt;    drawn = YES;&lt;br /&gt;    CGContextRelease(cgContext);&lt;br /&gt;   }&lt;br /&gt;   QDPictRelease(aPictRef);&lt;br /&gt;  }&lt;br /&gt;  else&lt;br /&gt;  {&lt;br /&gt;   NSString *errorString = NSLocalizedString(@"Picture to PDF could not read the input file as a PICT.",&lt;br /&gt;    @"Could not read input file");&lt;br /&gt;   *errorInfo = [NSDictionary dictionaryWithObjectsAndKeys: [errorString autorelease], &lt;br /&gt;     NSAppleScriptErrorMessage, nil];&lt;br /&gt;  }&lt;br /&gt;  if(drawn &amp;&amp; theData)&lt;br /&gt;  {&lt;br /&gt;   NSString* outputPath = [[aPath stringByDeletingPathExtension] stringByAppendingPathExtension:@"pdf"];&lt;br /&gt;&lt;br /&gt;   if (![(NSData*)theData writeToFile:outputPath atomically:YES])&lt;br /&gt;   {&lt;br /&gt;    NSString *errorString = NSLocalizedString(@"Picture to PDF could not  could not create output file.",@"Couldn't write data to file");&lt;br /&gt;    *errorInfo = [NSDictionary dictionaryWithObjectsAndKeys: [errorString autorelease], NSAppleScriptErrorMessage, nil];&lt;br /&gt;   }&lt;br /&gt;   else&lt;br /&gt;   {&lt;br /&gt;    [output addObject:outputPath];&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  else&lt;br /&gt;  {&lt;br /&gt;   NSString *errorString = NSLocalizedString(@"Picture to PDF could not draw the File.",&lt;br /&gt;    @"Could not draw output file");&lt;br /&gt;   *errorInfo = [NSDictionary dictionaryWithObjectsAndKeys: &lt;br /&gt;   [errorString autorelease], NSAppleScriptErrorMessage, nil];&lt;br /&gt;   &lt;br /&gt;  }&lt;br /&gt;  if(theData)&lt;br /&gt;  {&lt;br /&gt;   CFRelease(theData);&lt;br /&gt;   theData = 0;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; return output;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@end&lt;br /&gt;&lt;/CODE&gt;&lt;br /&gt;]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-1243301639308955501?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/1243301639308955501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/1243301639308955501'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/06/vectored-pict-to-pdf-conversion-in-your.html' title='Vectored PICT to PDF conversion in your code'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-7485623751637682869</id><published>2008-05-15T23:26:00.002-04:00</published><updated>2008-05-16T01:40:16.293-04:00</updated><title type='text'>Keep your Frameworks from Metastasising</title><content type='html'>Think Class Library, MacApp, PowerPlant. What do these frameworks have in common? They are all on my resume and they are all dead. Qt, Cocoa, AWT(?), Swing, MFC(?), .NET. What do these frameworks have in common? They are not dead, yet. The question mark indicates a framework in the zombie state of not being improved upon, but being used by too many people to be considered dead. &lt;br /&gt;&lt;H6&gt;"It just so happens that your friend here is only MOSTLY dead. There's a big difference between mostly dead and all dead. Mostly dead is slightly alive." --Miracle Max in The Princess Bride&lt;/H6&gt;&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;And, I am glad that frameworks die. I would rather not live in a world where 23 years later, MacApp was the best we could do. It was a pain to work with and I'm much happier with Cocoa or even Qt. People learned what was wrong with the old frameworks and made better ones. (If only this were true of MFC.) And, baring asteroid collision, people will come up with new frameworks in the future. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;And that is the rub. Frameworks get you 2 ways. 1) they usually lock you into writing all your code in a particular language. If the next great application framework uses Python, and all your work is in C++, you're going to be awfully busy. 2) You drink the Kool-Aid, and use Framework classes everywhere. If you are a Qt user, half your methods take QStrings, and when the time comes when you want to switch from Qt to Cocoa, you will be re-factoring for weeks.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;The language lockin is tough. I've known for years that C++ is not really a great application language; it may be a decent OS level language, but it is too fragile, too demanding, too static, and too complicated for making reliable desktop applications. But what else are you going to use for cross-platform apps? Maybe .NET will kill C++ as a cross-platform language. I don't know; it'll be a while. Hopefully, an appropriate cross-platform language will rise up to take its place. Which is part of my point, 10 years from now, we will not be using the same language on the same framework to do development. Something better will arise.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Getting back to the point of this entry, you want your code to last longer than any one framework. It's a matter of amortization. The longer your code lasts doing useful work, the higher the payoff for writing it. Over the 16 years I've been programming Macs, I've used 5 frameworks, and 3 of them are dead.  I am not predicting the imminent death of Cocoa or Qt, far from it, but die they will, and I should have a backup plan. And here is the other rub, my backup plan 'til now has been to write cross-platform, pure C++ code using a lot of STL and boost, and try to keep the platform specific code from creeping into the general purpose code. But I just said, perhaps prematurely and wistfully, that C++ itself might fall out of favor with framework developers, which both makes cross-platform development more difficult without a Lingua Franca, and negates the hedge against your framework dying. &lt;BR&gt; &lt;br /&gt;&lt;br /&gt;So I don't have a long term solution, but in the meantime do what has been good advice. Keep your use of frameworks limited to a thin GUI layer on top. Abstract the interfaces between your code and the framework. Abstract, abstract, abstract. To the extent practical, do not propagate framework classes into the meat of your codebase. If people had done this in the past, they could have skipped from MacApp to PowerPlant to Qt with a song in their heart instead of the crushing pain it was for most folks. Do not get locked in without a very good reason.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;And know when it is time to scrap your live's work and move to a new language. &lt;br /&gt;&lt;H6&gt;...watch the things you gave your life to, broken, And stoop and build 'em up with worn-out tools... --Kipling&lt;/H6&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-7485623751637682869?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7485623751637682869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7485623751637682869'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/05/keep-your-frameworks-from-metastasising.html' title='Keep your Frameworks from Metastasising'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-2588090603394704681</id><published>2008-05-13T21:49:00.006-04:00</published><updated>2008-06-15T00:41:49.382-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Quartz'/><category scheme='http://www.blogger.com/atom/ns#' term='Postscript'/><title type='text'>Quartz to PDF, versus PS to PDF</title><content type='html'>I am ankle deep in Postscript code at my day job, so as a refresher I took an afternoon and hand encoded a business card for my wife, who is starting a side business arranging academic tours of China (for the Peking University Department of Philosophy and Religion). Obviously, most people would be better served creating a card in InDesign, or other vectored drawing editor, but this was a learning experience. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Here it is with the contact info scrubbed. &lt;br /&gt;&lt;embed src="http://homepage.mac.com/grhowes/Blog/Business_Card.pdf#toolbar=0&amp;navpanes=0&amp;scrollbar=0" width="306" height="526" &gt;&lt;/embed&gt;&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Postscript is not a friendly language, but it was simple enough creating a .ps file in my text editor&amp;mdash;BBEdit&amp;mdash;and just dragging and dropping the icon from the editor's title bar onto the OS X Preview application. Preview has the convenient feature of auto-magically converting Postscript files to PDF. Of course, compilation errors result in a cryptic failure dialog, but these were enough development tools for an afternoon's project. If I were to do this on a more regular basis, I'd compile a simple app which provided a message callback to the CGPSConverterCreate routine.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Consider how much easier it would be to create this file in Quartz, and how much better the output would look. &lt;BR&gt;&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;Font handling is hard in Postscript, even if you don't have to embed descriptions of your fonts. Thus my use of standard Postscript fonts Times and Helvetica.&lt;/LI&gt;&lt;LI&gt;Kerning is not automatic in Postscript. Yes, you can use kshow to manually set the spacing between pairs of characters. No, I'm not going to do that. Thus, the odd spacing between letters.&lt;/LI&gt;&lt;LI&gt;If this file had included characters from non-Roman languages, complications would arise as Postscript only allows 256 characters per font encoding, potentially requiring multiple font definitions per face. None of the free Unicode support in Core Text/Quartz.&lt;/LI&gt;&lt;LI&gt;I might have used a little transparency, but there's no such thing in Postscript.&lt;/LI&gt;&lt;LI&gt;Postscript is hard to read and maintain. The extra syntax needed to keep the parameter stack organized, distracts the eye away from the actual algorithm being described. Postscript is certainly more compact in the editor, by an order of magnitude, than a series of Quartz API calls but much of that compactness is wasted pushing, popping, dup'ing, and rolling the parameter stack. I mean, just look at it: [Update: changed ATSUI to Core Text] &lt;CODE&gt;&lt;br /&gt;gsave&lt;br /&gt;basefont [9 0 0 9 0 0] makefont setfont &lt;br /&gt;(Nashua, NH 03061) &lt;br /&gt;dup&lt;br /&gt;stringwidth pop 2 div neg 0 rmoveto&lt;br /&gt;show&lt;br /&gt;grestore&lt;/CODE&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;The fact of the matter is that Apple has done a lot of heavy lifting for us either via proprietary extensions to PDF, or taking the extra effort of providing optimized support for font embedding.  An afternoon spent trying to keep track of an unruly parameter stack was enough for me to appreciate how much power Quartz gives us, and how easy it is to call upon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-2588090603394704681?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2588090603394704681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2588090603394704681'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/05/quartz-to-pdf-versus-ps-to-pdf.html' title='Quartz to PDF, versus PS to PDF'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-5321804280664456055</id><published>2008-04-03T02:23:00.002-04:00</published><updated>2008-04-03T02:34:31.230-04:00</updated><title type='text'>What does it mean when your app launches faster in Debug?</title><content type='html'>Ummm, maybe you forgot to uncheck "Open using Rosetta" in the release build?&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;I was enthusiastically awaiting how fast my day job application would launch now that I've eliminated the slowest thing. The debug build launched fast, the release build launched fast under instrumentation, the release build launched really slow from the Finder. What?? Was about to go up to bed, when it occurred to me I had switched on Rosetta for something months ago, and might have just forgotten to turn it off. Yep. Application launches quickly now. Users might even notice when this gets to them in a couple months. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;By the way, when you are using Apple's Core Foundation XML Parser, you really really want to use CFTreeGetFirstChild followed by  a series of CFTreeGetNextSibling calls to traverse the elements. You really don't want to call CFTreeGetChildAtIndex on anything approaching a large XML document.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-5321804280664456055?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5321804280664456055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5321804280664456055'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/04/what-does-it-mean-when-your-app.html' title='What does it mean when your app launches faster in Debug?'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-7951063654700060774</id><published>2008-03-17T16:59:00.002-04:00</published><updated>2008-03-17T17:19:12.609-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone Development'/><title type='text'>iPhone App Ideas: A Target Rich Environment</title><content type='html'>I was watching a recent episode of &lt;A HREF="http://www.travelchannel.com/TV_Shows/Bourdain"&gt;Anthony Bourdain's: No Reservations&lt;/A&gt; on the Travel Channel this morning, and came up with an idea for an application.&lt;BR&gt;&lt;br /&gt;Bourdain described the process in which orders are conveyed through a restaurant: customer tells waiter, waiter writes on order slip, waiter goes to waiter station and inputs order into terminal, order gets directed to the appropriate kitchen personnel. I was struck by how the input terminal involved bringing up a diagram of the appropriate table, and inputting the order for each chair around the circle. This seemed something easily transferable to an iPod Touch style interface.&lt;BR&gt;&lt;br /&gt;I'm imagining a situation where the customer tells the waiter, the waiter touches on the table in a map of the restaurant, touches on the seat, is given a series of menu choices corresponding to things on the menu, touches complete, and the order is sent directly to the kitchen. Maybe the customer orders shrimp and the kitchen just ran out of shrimp, the software would show an alert.&lt;BR&gt;&lt;br /&gt;In this scenario, the waiter only has to enter the data once, there is less chance of transcription errors, the restaurant does not have to set aside valuable floor space for the waiter station, and status information is more current. Presumably, the people best positioned to make such software is whoever makes the current restaurant terminals, but some enterprising types could get into the business right now while the going is good, by providing an entire Mac/iPod based solution which incorporated the whole system: data entry, accounting, kitchen display screens, etc. If anyone uses this idea, cash is always an appropriate gift.&lt;BR&gt;&lt;br /&gt;It would be nice if Apple were to come up with an industrial version of the iPod Touch that was not worth stealing as a media player for specialized situations like this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-7951063654700060774?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7951063654700060774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7951063654700060774'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/03/iphone-app-ideas-target-rich.html' title='iPhone App Ideas: A Target Rich Environment'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-669236194157397520</id><published>2008-03-12T22:39:00.003-04:00</published><updated>2008-03-13T00:54:18.210-04:00</updated><title type='text'>The iPhone and the End of Bloatware</title><content type='html'>You still see tables filling full page ads in computer magazines, a column of checks for the product being advertised, a column of blanks under the competitors.  This was the game of the big company, the Microsofts of the world; organizations with large enough staffs to code solutions to any need or perceived need of any customer big or small.  Every customer needs 10% of Microsoft Office, but every customer needs a different 10%. Smaller, more nimble companies have made better pure word processors, but they have all been relegated to niche markets, as the vast majority of customers know that somewhere in Office are the exact features they need, plus a bunch of features they might need someday for free. It's just a matter of finding them. And in a world of full keyboards, contextual menus, 24" monitors, gigabytes of RAM, terabytes of storage, multi-cores, and fast CPUs, there's always somewhere to tuck a feature.&lt;BR&gt;&lt;br /&gt;Now comes the iPhone/iPod Touch with its 480x320 screen, no keyboard shortcuts, finite memory and demand for near instantaneous launch and quit times. Ponder this small subset of toolbars for Word 2003 on Windows:&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Word_2003_Toolbars.png"/&gt;&lt;BR&gt;&lt;br /&gt;and imagine that each icon was twice as big to accomodate the stubby adult forefinger. Imagine making even this small subset of functionality accessible somehow while still showing content. I've a good imagination, but it fails me here.&lt;BR&gt;&lt;br /&gt;Anti-bloat features of the iPhone OS:&lt;UL&gt;&lt;LI&gt;Apps must launch quickly (in practice anything less than a second will seem intolerable), and quit as fast or faster&lt;/LI&gt;&lt;LI&gt;Apps must be relaunched every time you move back from another app.&lt;/LI&gt;&lt;LI&gt;There is a practical limit of 10 or so toolbar type icons per view, and 5 is more reasonable. This leads to a geometric decrease in accessible functionality versus a program on a PC. If you can fit 40 toolbar icons on your computer's monitor, and each opens a dialog with 40 items, and each dialog item invokes a subdialog with 40 features you have 40x40x40-40-40=63,920 accessible features versus 5x5x5-5-5=115 features 3 levels deep on an iPhone (well you could probably fit more than 5 items per view, but you get the idea)&lt;/LI&gt;&lt;LI&gt;There are no contextual menus, much less multi-level contextual menu trees&lt;/LI&gt;&lt;LI&gt;There are no keyboard shortcuts, eliminating the need for laminated keyboard shortcut hint sheets Scotch taped to the back of the iPhone&lt;/LI&gt;&lt;LI&gt;There are gestures, but really, how many unique gestures can you expect a person to master: pinch, shake...?&lt;/LI&gt;&lt;LI&gt;There is a finite amount of RAM, and telling the user to "just add more" is not an option&lt;/LI&gt;&lt;LI&gt;Lack of both RAM and application interaction are a firewall against the metastasized bloatware which are "Office Suites," which have to at least pretend to work together&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;No, what we will get are mini-apps. Apps a single competent programmer will bang out and polish in 3 months or less. The functionality which makes up Office could be broken up into scores of such mini-apps: a mini-table creator, a mini-slide presenter,a separate mini-slide editor, a database client, a little drawing app. In fact, even these small apps will probably be too big, and will be streamlined for more specific task oriented, specialized purposes: a blog post word processor, a series of charting modules which each do one type of chart, a specialized Keynote which only has the tools needed to create presentations following a single corporations style&amp;mdash;imagine all those exactly the same style presentations you see at Apple events. That would be doable on an app which could only show 5 toolbar icons at once, and which relied upon gestures, animation, templates and transparency to maximize what the user can see and do. And, lots of apps to help with one's location based social networking, whatever that is.&lt;BR&gt;&lt;br /&gt;In the iPhone ecosystem, bloatware is non-adaptive. The big have no feature advantage over the small.&lt;BR&gt;&lt;br /&gt;The experienced Cocoa programmer does have an advantage, however. I have been reading through the Apple example code, and it is made up of delightful exercises in object oriented minimalism. Actual, full blown apps written in this style will be incredibly light weight for the functionality delivered, with zippy launch times, and responsive interfaces. This seems to be how one masters a framework, and it is especially true of Cocoa, by learning how to do the most with the least code, which is again, the anti-thesis of the bloatware mentality, which seems to only care about churning as much code out as possible. &lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-669236194157397520?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/669236194157397520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/669236194157397520'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/03/iphone-and-end-of-bloatware.html' title='The iPhone and the End of Bloatware'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-2550034804491001901</id><published>2008-03-07T10:15:00.005-05:00</published><updated>2008-03-10T15:17:57.781-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone SDK'/><category scheme='http://www.blogger.com/atom/ns#' term='interface design'/><category scheme='http://www.blogger.com/atom/ns#' term='Cocoa'/><title type='text'>Re-imagining a Desktop Utility into Cocoa Touch</title><content type='html'>&lt;i&gt;If anybody's starting up a business based around iPhone development, and need a chief engineer, I'm sure you can find my e-mail address.&lt;/i&gt;&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Well the momentous day came, and the iPhone SDK is in our hands. I wish I were not so incredibly busy at my day job, or I would take a couple weeks off and learn the ins and outs. But, I've decided I should start small and port a little application I wrote, &lt;A HREF="http://web.mac.com/grhowes/Generally_Helpful_Software/Remote_Remote_GH.html"&gt;Remote Remote GH for MythTV&lt;/A&gt;, which I'm afraid I have not been properly maintaining, but has the advantage that it would be much more useful on an iPhone than on a laptop, and it only uses Cocoa and various Core Foundation routines. I'm going to go through the exercise here of paring the interface down to size and making it more in touch with the Touch's way of doing things. Then sometime in the next couple months, I'll take the time to actually do it. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Let's look at the original and see how we can get it down to 320x460 and 480x300 (which are about the available sizes once you discount the "status bar" region of the display).  Not only do you have a smallish screen, there is inconvenient text entry, and any widget on screen should be at least 44x44 pixels to deal with the stubby fingers of adult humans. On the plus side, there is multi-touch and 3D movement via the accelerometer.&lt;BR&gt;&lt;br /&gt;&lt;IMG SRC="http://web.mac.com/grhowes/Generally_Helpful_Software/Remote_Remote_GH_files/shapeimage_4.png"/&gt;&lt;BR&gt;&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;&lt;b&gt;Disconnect/Connect Button&lt;/b&gt; This should probably be done away with entirely, and the app should try to keep a connection up when visible.&lt;/LI&gt;&lt;LI&gt;&lt;b&gt;Show Keys Button&lt;/b&gt; This brings up a list of keyboard keys which are appropriate for the current state of the MythTV. The idea was for the user to control the MythTV with the same key presses used when sitting in front of the computer running the MythTV frontend. Keyboard input on the iPhone being discouraged, replacement with a series of contextually appropriate button panels is appropriate. (A panel for watching recordings, a panel for navigating, a panel for DVDs, etc.) &lt;/LI&gt;&lt;LI&gt;&lt;b&gt;Scrolling Status Console&lt;/b&gt; This was a area devoted to telling the user what has happened. This can be condensed into a 2 line status widget at the bottom of each screen.&lt;/LI&gt;&lt;LI&gt;&lt;b&gt;Navigation Buttons&lt;/b&gt; Live TV, DVD, etc., can be put into a standard navigation bar, to allow the user to jump to a common task, which I will pare to Live TV, Recordings and Video&lt;/LI&gt;&lt;LI&gt;&lt;b&gt;Recorded Programs Table&lt;/b&gt; This can be moved to its own panel, and condensed, with perhaps a sub-panel which the user can navigate to with more complete information for each recorded program.&lt;/LI&gt;&lt;LI&gt;&lt;b&gt;Big Scrub Bar&lt;/b&gt; I like the idea of making very long scrub bars to allow for fine control over where in a program the user can jump. This is a good candidate for a control which is always along the long axis regardless of the orientation of the device, and will only be visible in play back mode panels.&lt;/LI&gt;&lt;/UL&gt;&lt;BR&gt;&lt;br /&gt;As I said, I have very little time on hand, but I was able to make a first step of compiling my network protocol classes, which compiled after a mere 5 code changes&amp;mdash;removing #include "Cocoa/Cocoa.h", and replacing call to Carbon's NewPtr(...)/DisposePtr(...) with  malloc(...)/free(...). &lt;BR&gt;&lt;br /&gt;Then it was just a copy/paste job to make a stripped down version of my original application delegate, which just stuffed replies from the server into a simple UILabel in my main window. Amazingly, this worked on the second try, with a connection forming with the server, followed by periodic requests for status.  If anything, the networking code is more solid than in the desktop application. &lt;BR&gt;&lt;br /&gt;I'll update this later, as I start to build the GUI, and figure out how best to minimize my power usage (keeping the Wi-Fi unit off for extended periods).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-2550034804491001901?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2550034804491001901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2550034804491001901'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/03/re-imagining-desktop-utility-into-cocoa.html' title='Re-imagining a Desktop Utility into Cocoa Touch'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-4412365365301944921</id><published>2008-03-03T00:09:00.004-05:00</published><updated>2008-03-03T00:54:34.188-05:00</updated><title type='text'>On the Badness of Skins</title><content type='html'>I refer you to this &lt;A HREF="http://www.corecodec.com/forums/index.php?topic=750.0"&gt;posting&lt;/A&gt; on the product forum for the &lt;A HREF="http://www.corecodec.com/"&gt;CoreAVC&lt;/A&gt; player application. An application which claims to have extremely efficient H.264 decoding. &lt;br /&gt;&lt;br /&gt;Here is the company representative explaining why the Edit menu always comes first , instead of the File menu as Jobs intended it.&lt;BR&gt;&lt;br /&gt;&lt;i&gt;CoreUI, our skin layer, is not meant to hardcode things like "File". There are some apps that don't deal with any file and still require text editing. And we can't wild guess where they want the Edit menu. The thing we could do is add a special &lt;EDITMENU/&gt; element in the skin that could place the Edit menu where you want it to be...&lt;/i&gt;&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Now, I would very much like to see better efficiency in H.264 playback, especially on the 1.6 GHz Core Duo Mac Mini on my wife's desk.  That would be a good thing. But here is a cross-platform application whose creators can't be bothered to put together a simple Cocoa shell application for their player, and believe me this would not be a lot of work for a semi-competent Mac guy to throw together.  Instead, they've ported their skinning engine&amp;mdash;which I'm sure they are quite proud of. The engine is extremely flexible, except in the sense that you can't put together a skin which doesn't make their programmers look clueless. &lt;BR&gt;&lt;br /&gt;Let's see. How much time to put together a nice Cocoa application to host your player: X. How much time to port, and debug a "flexible" skinning engine: maybe 4X. So, precious development time which could be spent elsewhere is instead spent on skinning: a misfeature given to the world by &lt;A HREF="http://en.wikipedia.org/wiki/Winamp"&gt;WinAmp&lt;/A&gt;, and repeated by seemingly every other media player intent on letting skinless iTunes eat their lunch.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;You want to know a big reason WinAmp, or MusicMatch (which I worked for) or whatever, couldn't keep up with Apple's iTune team? A big reason was skins, if you are spending 30% of your development time maintaining skins and the skins engine, and you start rejecting new features because they don't fit into the design of the engine, or because you have to add new artwork to 10 separate skins, and you have your best minds trying to figure out an abstract design for docking arbitrary subwindows, and your testing staff spends all day long looking at every permutation of new feature and skin, then it's going to be like you are fighting Apple with your arm tied to your leg, and your leg is bolted to the floor.&lt;br /&gt;&lt;br /&gt;And for what? A feature that the vast majority of your user base is at most going to flip through once and forget exists. &lt;br /&gt;&lt;br /&gt;BTW, CorePlayer, at the moment, is virtually useless on the Mac, as it lacks AC3 passthrough. You know an actual feature involving playing media. Maybe, if they hadn't spent all that time on their skinning engine, they'd have a product Mac users, like me, would like to buy. &lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-4412365365301944921?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/4412365365301944921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/4412365365301944921'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/03/on-badness-of-skins.html' title='On the Badness of Skins'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-6495683577779128186</id><published>2008-02-25T00:03:00.002-05:00</published><updated>2008-02-25T00:44:26.850-05:00</updated><title type='text'>We Need a PDF replacement for PicComment</title><content type='html'>I direct your attention to the very explicitly obsoleted documentation for the QuickDraw routine &lt;A HREF="http://developer.apple.com/documentation/mac/quickdraw/QuickDraw-346.html"&gt;PicComment&lt;/A&gt;. With a call to PicComment, an application would insert whatever arbitrary data it liked into a PICT. It could then put the PICT on the system clipboard. The user could paste it into their favorite word processor. Days, weeks, femtoseconds later, the user could copy the same image back into the clipboard, and paste it back into the original application. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Without a PicComment, there was little the originating application could do, just treat the image as an uneditable graphic, floating lifelessly inside a document. With a PicComment, the application could retrieve enough information to recreate the original selection from which it came; perfectly without loss of quality. Users built up ad hoc workflows around the knowledge they didn't have to save original image documents, but could copy and paste images back from their word processor if they wished to revise.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;With the gradual withering away of PICT support in OS X applications, it's well past time to look at getting round-trip clipboard support back. I hope Apple is thinking about this. The obvious solution is to:&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;Extend the keys available to &lt;A HREF="http://tinyurl.com/2v6x2u"&gt;CGPDFContextCreate&lt;/A&gt; and other similar PDF creating APIs to include private vendor data. Presumably, you could provide a dictionary under a kCGPDFContextVendorPrivateData key, with a kCGPDFContextVendorID (like "com.genhelp.mygreatapp") and an XML fragment&amp;mdash;or other convenient format&amp;mdash;needed to recreate the original.&lt;/LI&gt;&lt;LI&gt;Encourage application developers to preserve original PDF data whether received via file insertion, pasting or dragging. This would include Apple's own applications such as Preview and Text Edit. Often, applications will thoughtlessly re-render an image into PDF even when the source was PDF to begin with, heedlessly throwing away the original's auxiliary data.&lt;/LI&gt;&lt;LI&gt;Add similar functionality to the TIFF flavor favored by image editing software.&lt;/LI&gt;&lt;/UL&gt;&lt;BR&gt;&lt;br /&gt;Presumably, the host application wouldn't even need to save the whole original, just the contents of the vendor dictionary. &lt;BR&gt;&lt;br /&gt;And users can leave the world where a copy/paste is a one way trip.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-6495683577779128186?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6495683577779128186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6495683577779128186'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/02/we-need-pdf-replacement-for-piccomment.html' title='We Need a PDF replacement for PicComment'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-8194791783983566159</id><published>2008-01-24T10:56:00.000-05:00</published><updated>2008-01-25T12:41:09.997-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDF'/><category scheme='http://www.blogger.com/atom/ns#' term='Office 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='clipboard'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='PICT'/><title type='text'>Microsoft Office Supports PDF on the Clipboard, And Why That is a Big Deal</title><content type='html'>For months, I've wanted to know whether &lt;A HREF="http://www.microsoft.com/mac/default.mspx" NAME="Mactopia"&gt;Microsoft Office 2008&lt;/A&gt; supported copying and pasting PDF data from the OS X clipboard. I couldn't find out, and it's not like I didn't ask. Two days ago, Office 2008 appeared on my chair, and the answer is yes.&lt;BR&gt;&lt;br /&gt;Backing up a moment. When you copy content in one application and paste it in another, you are using a system service to transfer the data be it via the old style Carbon Clipboard manager, the Cocoa NSPasteboard class, or the newish Pasteboard framework available to the non-Objective C crowd.  The two applications must agree on the format of the data exchanged, so typically only widespread standards are used. For text, as I've &lt;A HREF="http://sprinkleofcocoa.blogspot.com/2007/03/its-time-for-carbon-apps-to-support-rtf.html"&gt;outlined before&lt;/A&gt; the RTF format is preferred. For bitmap images, a good choice is lossless TIFF. Vectored images, however, were a quandary.&lt;BR&gt;&lt;br /&gt;Vectored images are pictures composed of individual drawing operations such as MoveTo, LineTo, AddToPath, FillPath, etc.. Because they are not limited in resolution like a bitmap, they look good on screen and tend to print out with lovely crisp lines. They also tend to be smaller than bitmap files. Every application on Classic Mac OS used a convenient format called PICT which is basically a recording of the QuickDraw operations needed to generate the onscreen display. PICT is a primitive format, something more in tune with the computers of 1984 than 2008. Off the top of my head, it lacks fractional coordinates, paths, Bezier curves, gradient fills, pagination, is limited to QuickDraw fonts, has limited (to rotating text) coordinate matrix manipulations, poor support in Cocoa applications and its ugly. The only two good things I can say about it is it does allow for high quality printing via embedded PostScript, and you can squirrel away your own data in it in case the same PICT gets copied and pasted back into your application.  &lt;BR&gt;&lt;br /&gt;When OS X arrived, legacy Carbon applications kept on generating their PICT clipboards for both bitmap and vectored material even though the superior PDF format was available and universally used by newer Cocoa applications. QuickDraw became obsolete and onscreen drawing is most often done with Quartz calls, and yet applications still maintain ways to generate PICT clipboards at great expense of maintenance and design. Why?&lt;BR&gt;&lt;br /&gt;Because Microsoft Office didn't support PDF, and if you want to sell business applications on the Mac, you have to share data with Office, and that content had better print nicely from within Office. I know from personal experience the aggravation of maintaining the portion of an application which renders content into QuickDraw PICTs; ugly, cludgy QuickDraw PICTs when I could be easily generating PDF clipboards; beautiful lightweight, lithe, PDF files. &lt;BR&gt;&lt;br /&gt;To illustrate what I mean I created &lt;A HREF="http://homepage.mac.com/grhowes/Blog/double_helix.pdf" "Double Helix PDF"&gt;this pdf&lt;/A&gt; in an application which supports creating EPS files but not putting PDF on the clipboard. I opened it in the OS X Preview application (a Cocoa App):&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/double_helix_preview.png"/&gt;&lt;br /&gt;Copied the image into TextEdit (another Cocoa App) from Preview:&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/double_helix_text_edit.png"/&gt;&lt;br /&gt;&lt;i&gt;TextEdit has a bug where it doesn't re-render embedded PDFs when it zooms.&lt;/i&gt;&lt;br /&gt;Copied the image from TextEdit and pasted it back into Preview and zoomed in on a detail:&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/double_helix_preview_zoomed.png"/&gt;&lt;br /&gt;Now compare with a zoomed detail when using the PICT version from the clipboard of the original application (a Carbon app) (ignore the checkerboard) pasted into Preview:&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/double_helixe_preview_pict.png"/&gt;&lt;BR&gt;&lt;br /&gt;Presumably, OS X could provide a service where it would extract embedded PostScript from PICTs (if available), and generate a pleasing PDF pasteboard, but it doesn't and I doubt that Apple wants to encourage developers to keep on using PICT.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Getting back to the big news, there was Office 2008 on my chair. Install. Draw a moon:&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Word_Moon.png"/&gt;&lt;br /&gt;Copy. Launch &lt;A HREF="http://developer.apple.com/samplecode/PasteboardPeeker/index.html"&gt;Pasteboard Peeker&lt;/A&gt; and see this output (... means omitted content):&lt;br /&gt;&lt;CODE&gt;PasteboardRef: 1116096  ItemCount: 1&lt;br /&gt;   Index: 1  item ID: 1112493904&lt;br /&gt; ...&lt;br /&gt;      "com.adobe.pdf"&lt;br /&gt;      "Apple PDF pasteboard type"&lt;br /&gt;      'PDF ' P_____ 21056   PDF-1.3              4 0 obj &lt;&lt; /Length 5 0 R /Filter /FlateDecode &gt;&gt; stream x &lt;br /&gt;&lt;br /&gt;      "com.apple.pict"&lt;br /&gt;      "Apple PICT pasteboard type"&lt;br /&gt;      'PICT' P_____ 409198  &gt;n       C                                                   0                 H&lt;br /&gt;...&lt;br /&gt;&lt;/CODE&gt;&lt;BR&gt;&lt;br /&gt;Yay.&lt;BR&gt;&lt;br /&gt;And notice how svelte the PDF (21,056 bytes) is compared to the PICT (409,198 bytes). Rendering a gradient fill in QuickDraw is not pretty. &lt;BR&gt;&lt;br /&gt;Go back to Word and add a star:&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Word_Moon_Star.png"/&gt;&lt;br /&gt;Copy and paste into Pasteboard Peeker and:&lt;br /&gt;&lt;CODE&gt;PasteboardRef: 1116096  ItemCount: 1&lt;br /&gt;   Index: 1  item ID: 1112493904&lt;br /&gt; ...&lt;br /&gt;      "com.adobe.pdf"&lt;br /&gt;      "Apple PDF pasteboard type"&lt;br /&gt;      'PDF ' P_____ 24935   PDF-1.3              4 0 obj &lt;&lt; /Length 5 0 R /Filter /FlateDecode &gt;&gt; stream x &lt;br /&gt;&lt;br /&gt;      "com.apple.pict"&lt;br /&gt;      "Apple PICT pasteboard type"&lt;br /&gt;      'PICT' P_____ 498658                                                                                 H&lt;br /&gt;  ...&lt;br /&gt;&lt;/CODE&gt; The PICT version bloats by 97K while the PDF gets a mere 4K.  Not that size matters any more with RAM and hard prices the way they are.&lt;BR&gt; &lt;br /&gt;&lt;br /&gt;Word in Office 2004 had a clipboard which looked like this:&lt;br /&gt;&lt;CODE&gt;PasteboardRef: 3323920  ItemCount: 1&lt;br /&gt;  Index: 1  item ID: 1112493904&lt;br /&gt;...&lt;br /&gt;     "com.apple.pict"&lt;br /&gt;     "Apple PICT pasteboard type"&lt;br /&gt;     'PICT' P_____ 2222           U           ,   ,         f&lt;br /&gt;...&lt;br /&gt;     &lt;/CODE&gt;&lt;br /&gt;&lt;br /&gt;Open up the pasted PDF in Preview and Zoom:&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Word_Moon_Detail.png"/&gt;&lt;br /&gt;Look at that beautiful shadow detail! Try to do that in a PICT!&lt;BR&gt;&lt;br /&gt;Draw something in &lt;A HREF="http://developer.apple.com/samplecode/Sketch-112/index.html"&gt;Sketch&lt;/A&gt; copy paste, yep, there it is, a PDF pasted into Word. Yay again. &lt;BR&gt;&lt;br /&gt;But what does this all mean? It means that once Office 2008 sees widespread adoption, the rest of the Mac content creation software industry can rip out every last QuickDraw call in their application. It means we can build 64-bit versions of our applications. It means we had best start putting PDF on our own clipboards. It means Cocoa apps can generate content and with no extra effort have it look great inside Office apps.  It means there will be a new, higher minimum quality for interchanged content. It means we can forget everything we ever knew about Classic Mac programming.&lt;BR&gt;&lt;br /&gt;The future is finally here.&lt;br /&gt;[Update: One fly in the ointment is that Word has a bug wherein if you paste a PDF graphic into a Word document, and subsequently copy and paste it from Word and into another application (such as Preview), it loses its vectored quality:&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/double_helix_copied_from_Word.png"/&gt;&lt;BR&gt;&lt;br /&gt;But while the graphic is still within Word, it scales, prints, and zooms beautifully, so presumably this is just a bug in the copy code and not a design flaw. The vectored PDF is being maintained internally in some vectored form.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-8194791783983566159?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.microsoft.com/mac/default.mspx' title='Microsoft Office Supports PDF on the Clipboard, And Why That is a Big Deal'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8194791783983566159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8194791783983566159'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/01/microsoft-office-supports-pdf-on.html' title='Microsoft Office Supports PDF on the Clipboard, And Why That is a Big Deal'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-7269457908651323862</id><published>2008-01-22T12:24:00.000-05:00</published><updated>2008-01-30T02:17:57.911-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='space heaters'/><category scheme='http://www.blogger.com/atom/ns#' term='consumer reports'/><category scheme='http://www.blogger.com/atom/ns#' term='comparisons'/><title type='text'>Space Heaters: Honeywell HZ-519 versus DeLonghi HHP 1500</title><content type='html'>I have an online account with  &lt;A HREF="http://consumerreports.org" NAME= "Consumer Reports"&gt;Consumer Reports&lt;/A&gt;, which I've been quite pleased with; it's the first place I look for home appliance recommendations. The manufacturers of my washer, dryer, wet vac, space heaters, and lawn mower can all thank Consumer Reports for my purchase. However, sometimes, by sticking to objective measures, they get things wrong when problems crop up outside those objective measures. In my case, I feel their high recommendation of the Honeywell HZ-519 electric convection space heater was misguided, as compared to another heater they gave a not quite as high rating, the DeLonghi HHP 1500. &lt;BR&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/HZ519vsHHP1500.png"/&gt;&lt;BR&gt;&lt;br /&gt;&lt;H4&gt;Problem 1: Physical Dimensions&lt;/H4&gt;You might notice that the HZ-519 is long and thin. Long and thin objects are delicate and require odd shipping boxes. As I, and at least one other Amazon reviewer found out, these things are easily bent in the middle during shipping as it is hard to protect, leaving me with some ugly and noisy bends in the metal. (The Amazon merchant did give me $24 back instead of taking the return).  Also, while it has ample cord length, it is mounted at the right side, if your plugin happens to be to the left, the cord suddenly is no longer so long. Compare this with the squarish, solid HHP 1500 which fits in a box of normal dimensions, and whose cord can be used at a fair distance to the left and right. &lt;BR&gt;&lt;br /&gt; &lt;H4&gt;Problem 2: Temperature Control&lt;/H4&gt;Consumer reports gives the HZ-519 high marks for its digital temperature control and timer, which are nice for a single use: set the temperature to maintain by pushing a few buttons, set the time to heat through a few more button presses. The HHP 1500 on the other hand has no way to set a temperature, you turn some knobs and it will try maintain a temperature: what temperature that is it doesn't say. You will have to futz with it over the course of a couple nights until you find a setting which is comfortable for you. But, and here is the big but, once you find a setting you like you are done. When you want to use the DeLonghi you come in flip the top knob on; with the Honeywell, you press the power button, press the "Temp/Timer" button to select temperature, hit a couple arrow keys; if you want automatically turn off the unit, that's more button presses. Every single session. There is no memory of the last setting. Yes, you do get a timer, which is nice, but you try setting the temperature on this thing in a darkened room, when all you want to do is crawl in bed. (There are versions of this heater with a display backlight, and with a remote control which would mitigate this annoyance.)&lt;BR&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/HZ519_Controls.png"/&gt;&lt;BR&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/DeLonghi_HHP1500.png"/&gt;&lt;BR&gt;&lt;br /&gt;&lt;H4&gt;Problem 3: Being Nice to Your Fuses&lt;/H4&gt;The HHP 1500 has two main power settings. One draws about 7Amps when powering its element, the other around 13 Amps, which spikes at over 15 when turning on causing my Kill-a-Watt to make a warning beep. The HZ-519 has one mode which draws around 11 Amps. A typical household circuit is rated at 15Amps. Now imagine having two bedrooms which share an electrical circuit, each with their own space heater. If you installed two HHP 1500s, that's fine, just keep both of them at their 7 Amp setting, and it will just take longer to heat the rooms. If you have two HZ-519s, pop goes the circuit breaker. This assumes the rooms in question are small enough to be heated adequately at the lower setting.&lt;BR&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/HHP_1500_KillaWatt.png"/&gt;&lt;br /&gt;&lt;H4&gt;Problem 4: Noise&lt;/H4 &gt;OK, I shouldn't criticize the HZ-519 because mine has a lot of twisted metal from the shipping incident, but it is quite noisy as it expands and contracts. The HHP 1500 is dead quiet. &lt;br /&gt;&lt;H4&gt;Problem 5: Flexibility of Placement&lt;/H4 &gt; The HZ-519 is designed to be placed along a wall, while the HHP 1500 can be mounted on a wall or rolled into the middle of a room. &lt;BR&gt;&lt;br /&gt;&lt;H4&gt;Energy Usage&lt;/H4 &gt;Not a big problem here, and impossible for me to compare. The HZ-519 in one bedroom has been using about 6kWH  (about a dollar) a night keeping the room at a comfy temp over the chilly temp I keep the rest of the house,  while the HHP 1500 has been draining about the same. I would be happy with nice thick blankets, but my wife wants the children warm when they kick off their covers. &lt;BR&gt;&lt;br /&gt;&lt;H4&gt;Safety&lt;/H4&gt;The HZ-519 does have such additional safety features as automatic switch-off when knocked over. You will have to judge how important this is for you. &lt;br /&gt;&lt;H4&gt;In Conclusion&lt;/H4 &gt;If you are in the market for an electric convection space heater, get the DeLonghi. Buy them in the summer when they are cheap, because they have really gone up in price since the cold weather set in.  I paid $80 for a DeLonghi in late November, it's now mid-January and the same heater is $160.&lt;br /&gt;[Updated with additional commentary after first posting]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-7269457908651323862?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://tinyurl.com/yp35wh' title='Space Heaters: Honeywell HZ-519 versus DeLonghi HHP 1500'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7269457908651323862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7269457908651323862'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/01/space-heaters-honeywell-hz-519-versus.html' title='Space Heaters: Honeywell HZ-519 versus DeLonghi HHP 1500'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-8104140659585171448</id><published>2008-01-01T00:27:00.001-05:00</published><updated>2008-11-08T08:23:04.585-05:00</updated><title type='text'>Memories of RAM past</title><content type='html'>&lt;i&gt;Pretending 1GB equals 1000 MB.&lt;/i&gt;&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;This is in the category of things that happen to everyone, but which should me remarked upon. Modern RAM capacities are amazing.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;My first computer, a Mac Plus, purchased new from the University of North Dakota's bookstore, had .001 GB of RAM installed, which I upgraded first to .0025 GB, and then to its maximum .004 GB, at a cost, as I recall of about $150,000/GB. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;I just purchased, at $15/GB (shipping included) a 2GB module for my MacBook, bringing it up to 3GB&amp;mdash;and requiring me to dispose of an inconvenient 1GB module. So this means that my computer of today has 3000&amp;#215; the RAM of my 1988 computer, while the price per unit has dropped by 9,999/10,000&lt;sup&gt;ths&lt;/sup&gt; of what it once was.  Imagine if cars were improving at the same rate.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Here's a chart of the final RAM capacities for all my previous computers. I've long meant to make up this chart, so bear with the irrelevance to your life:&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/RAM.png"/&gt;&lt;br /&gt;&lt;br /&gt;Drive capacities have gone through a similar transition, from the .0008 GB floppy in my Plus to the 200 GB drive in my MacBook. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;The scary thing is the idea that over the next 20 years from now, RAM might increase in typical capacity by another 3000 times, and what will we be doing with it?&lt;br /&gt;&lt;br /&gt;[Update: For whatever reason, my MacBook does not like the Transcend TS256MSQ64V6U module in combination with any other module I have. It works by itself, but put in either of the pre-existing 1GB modules (or even a 256MB module from a Mac Mini, and it would not boot. So, I'm stuck at a mere 2GB.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-8104140659585171448?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8104140659585171448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8104140659585171448'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2008/01/memories-of-ram-past.html' title='Memories of RAM past'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-2660193259969836947</id><published>2007-12-26T14:27:00.001-05:00</published><updated>2008-03-03T12:26:02.493-05:00</updated><title type='text'>Cute Safari Tip: “Apple” to Apple Symbol </title><content type='html'>The default Safari bookmark bar has a link to &amp;#8220;&lt;A HREF="apple.com"&gt;Apple&lt;/A&gt;&amp;#8221;, and another &amp;#8220;Apple&amp;#8221; labeled RSS feed of Mac news. You can save space by replacing the word &amp;#8220;Apple&amp;#8221; with the apple symbol: &amp;#63743;. (Anybody reading this on a non-Mac will likely see a question mark or an empty square instead of the symbol which is the apple with a bite out of it logo.) This symbol can be found in the Special Characters window as Unicode F8FF (decimal 63743), or generated by shift-option-K.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/AppleSymbolInSafari.png" /&gt;&lt;br /&gt;&lt;br /&gt;Other Mac specific symbols can be found at &lt;A HREF="http://macbiblioblog.blogspot.com/2005/05/special-key-symbols.html"&gt;MacBiblioBlog&lt;/A&gt;.&lt;br /&gt;&lt;br /&gt;[Updated: Had given the wrong key equivalent]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-2660193259969836947?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://macbiblioblog.blogspot.com/2005/05/special-key-symbols.html' title='Cute Safari Tip: &amp;#8220;Apple&amp;#8221; to Apple Symbol &amp;#63743;'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2660193259969836947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/2660193259969836947'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/12/cute-safari-tip-apple-to-apple-symbol.html' title='Cute Safari Tip: &amp;#8220;Apple&amp;#8221; to Apple Symbol &amp;#63743;'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-4382185325604267755</id><published>2007-12-19T20:00:00.002-05:00</published><updated>2008-03-03T12:30:17.640-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS X'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='menus'/><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><title type='text'>The Chaotic Nature Of Window's Menus</title><content type='html'>As part of my day job, I've recently become familiar with the creation, display, and destruction of menus on the Windows platform. In writing this entry, I hope not only to point out the esthetic and technical disaster which is the Win32 menu framework, but offer a caution against getting in the same sort of problems on the Mac.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;From the users point of view, menus on Windows are a chaotic mix of styles. While, we Mac users are used to the menus of each application looking the same on any given OS version, Windows users are treated with menus of wildly varying style, depending on the artistic sensibility of the individual programmer. Here are just a few of the menus found on my wife's fairly vanilla Windows Vista install:&lt;BR&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Vista_Acrobat_Menu.png" /&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Vista_Zip_Menu.png" /&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Vista_iTunes_Menu.png" /&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Vista_Mozilla_Menu.png" /&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Vista_OpenOffice_Menu.png" /&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Vista_Picasa_Menu.png" /&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Vista_Skype_Menu.png" /&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Vista_VLC_Menu.png" /&gt;&lt;br /&gt;&lt;br /&gt;Note the random selection of:&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;Highlight colors&lt;/LI&gt;&lt;LI&gt;Separator graphics&lt;/LI&gt;&lt;LI&gt;Highlight region shapes&lt;/LI&gt;&lt;LI&gt;Margins&lt;/LI&gt;&lt;LI&gt;Margin separators&lt;/LI&gt;&lt;LI&gt;Root menu item shapes&lt;/LI&gt;&lt;LI&gt;A ball icon where another application would use a check mark&lt;/LI&gt;&lt;LI&gt;A "Ctrl-P instead of a "Ctrl+P"&lt;/LI&gt;&lt;LI&gt;Minimum spacings between the title and the accelerator&lt;/LI&gt;&lt;LI&gt;Sizing of the submenu triangle&lt;/LI&gt;&lt;LI&gt;Drawing modes for greying out icons&lt;/LI&gt;&lt;LI&gt;Degrees of fade for greyed out text&lt;/LI&gt;&lt;LI&gt;Alignments of the accelerator text&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;br /&gt;Contrast this with a selection of applications on Mac OS X Leopard:&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Mac_iTunes_Menu.png" /&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Mac_Skype_Menu.png" /&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Mac_Safari_Menu.png" /&gt;&lt;br /&gt;&lt;br /&gt;Although even Apple can't protect us from the attack of the ugly cross-platform icons:&lt;BR&gt;&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Mac_Oxygen_Menu.png" /&gt;&lt;br /&gt;&lt;br /&gt;Why the disparity? Because when programming to the Win32 API, Microsoft requires all but the simplest menus to be drawn by application code responding to simple window events: WM_DrawItem, WM_MeasureItem. The system doesn't make it obvious where to draw your text, how to highlight selections, what the margins are, etc. The only thing the system will do for you is erase the background. If all you want to do is draw an icon: perhaps the favicon for a website, you have to manually draw the whole menu item, and if you want any hope of having that menu item look like all the other menu items in that menu, then you have to draw all the items in that menu, and if you do that, you will want to draw all the menu items in all the menus. If you code using the MFC framework, you will end up using some 3rd party menu class, written by somebody in the same boat as you, having to emulate and approximate whatever style is used by their favorite Microsoft app on any particular OS. Future changes in appearance will not magically appear with a new OS, but require each application to be reprogrammed, or at least to have a dynamic library updated.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Again, the major reason Windows programmers draw their own menus is to add an icon to a handful of menu items&amp;mdash;which is usually the idea of some marketing guy anyway. If Microsoft had only added the ability to provide a graphic, few people would have bothered to draw their own. Life is short. If they had done so, they could have added all sorts of cool wizbangery to Vista, and we Mac users would be reduced to complaining how they stole translucent menus from Apple.&lt;br /&gt;&lt;br /&gt;And while it may seem like a minor thing, Microsoft does not provide separate routines to specify the text of a menu and its key equivalent accelerator. Even if you aren't drawing a menu yourself, you have to provide a string like "&amp;amp;Redo\tShift+Ctrl+Z". &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hopefully, .NET programmers have an easier time.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;The net effect of all this is that Microsoft cannot:&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;Upgrade the operating system and come up with a cool new appearance in which all the 3rd party applications (or even old Microsoft applications) magically share how their menus appear. Click on a menu and it's 1986 all over again. &lt;/LI&gt;&lt;LI&gt;Have any kind of unified appearance.&lt;/LI&gt;&lt;LI&gt;Replace those awful looking, English-centric, and space hogging accelerators with elegant Apple style meta key glyphs.&lt;/LI&gt;&lt;LI&gt;Seamlessly move to *resolution independent GUIs. Apple's having trouble getting 3rd party applications to be resolution independent, but the fact that the OS draws the menus at least eliminates that as a problem.&lt;/LI&gt;&lt;/UL&gt;&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;* Resolution independence is the idea that in our future of ultra-high resolution monitors, a menubar for instance won't be 25 pixels tall, but will be 25 points (25/72nds of an inch) with very high quality text.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;But.&lt;br /&gt;&lt;br /&gt;While all this Microsoft bashing is fun, this is a morality tale of a sort. Apple in its wisdom has given Cocoa developers much more control over how menus are drawn in Leopard. You can in fact, draw anything you please in a menu now. Don't do it. It was bad enough when you could clutter up your menus with blocky little useless icons, now the user can innocently click on a menu and be confronted with the Gates of Hell. Don't do it. Resist the temptation. Put the NSView down. If you are porting a Windows app, do not let the pointy haired boss force you into porting the ugly menus. Tell him it can't be done. Tell him you would lose Tiger compatibility.  Tell him anything, but don't mess with Mac menus. &lt;br /&gt;&lt;br /&gt;&lt;H4&gt;"Just because we can do a thing does not mean we must do that thing." The Federation President in Star Trek: The Undiscovered Country&lt;/H4&gt;&lt;br /&gt;[Entry updated to point out more things wrong with the Windows menus and to add detail.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-4382185325604267755?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/4382185325604267755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/4382185325604267755'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/12/chaotic-nature-of-windows-menus.html' title='The Chaotic Nature Of Window&apos;s Menus'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-790724022611756302</id><published>2007-12-03T17:11:00.000-05:00</published><updated>2007-12-03T17:25:16.233-05:00</updated><title type='text'>Off Topic: The Perception of Time as I Age</title><content type='html'>2 observations: &lt;br /&gt;1) The months pass faster than when I was younger.&lt;br /&gt;2) I feel slower mentally. The ideas come at a markedly lower rate. &lt;br /&gt;&lt;br /&gt;Is it possible that these two observations are sides of the same phenomenon? Perhaps my perception of time is based upon how fast I think. If my younger self had 1000 ideas a month, and my present self creates 500 ideas a month, then do I perceive 2 months as taking as long as 1 month used to take? It seems likely.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-790724022611756302?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/790724022611756302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/790724022611756302'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/12/off-topic-perception-of-time-as-i-age.html' title='Off Topic: The Perception of Time as I Age'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-5104798148891157972</id><published>2007-11-22T22:47:00.002-05:00</published><updated>2008-09-10T08:23:22.913-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS X'/><category scheme='http://www.blogger.com/atom/ns#' term='guesses'/><category scheme='http://www.blogger.com/atom/ns#' term='64-bit'/><category scheme='http://www.blogger.com/atom/ns#' term='Quicktime'/><title type='text'>There Must Be a Cocoa iTunes Coming + Vista 64-bit iTunes?</title><content type='html'>[Update: Apple released iTunes 8, and whatever it is, it is not pure Cocoa]&lt;br /&gt;&lt;br /&gt;[Update: Apple did &lt;A HREF="http://docs.info.apple.com/article.html?artnum=301301"&gt;release&lt;/A&gt; a version of iTunes for 64 Bit Vista. I don't know how it matches up with the below speculation. ]&lt;br /&gt;&lt;br /&gt;This is entirely speculation on my part. If I had insider information, I would not betray it. This is just my uninformed opinion.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Fact 1: iTunes as we know it is a Carbon application on the Mac. It after all is the direct descendent of &lt;A HREF="http://en.wikipedia.org/wiki/Soundjam"&gt;SoundJam&lt;/A&gt;, a short-lived MP3 player for Classic Mac OS.  Open up its package in the Finder and see things like a .rsrc file. &lt;br /&gt;&lt;br /&gt;Fact 2: iTunes makes heavy use of QuickTime and the Mac Toolbox emulation layer which QuickTime for Windows contains. This is what allowed the same codebase to  be deployed on both OS X and Windows relatively quickly. (OK, this may not be a fact, not having access to the iTunes code, but it seems darn likely.)&lt;br /&gt;&lt;br /&gt;Fact 3: There is no 64-bit C API to QuickTime on the Mac. There is only a 64-bit Cocoa interface. &lt;br /&gt;&lt;br /&gt;Fact 4: Pretty much all of that Mac Toolbox being emulated on Windows is no longer available under 64-bit compiles on the Mac.&lt;br /&gt;&lt;br /&gt;Fact 5: All new Macs are 64-bit. Apple is in a good position to start promoting themselves as The 64-bit Company, as their path to 64 purity seems easier than Microsoft's, but it will take getting all their apps there first, and convincing their major developers to follow. I assume it was easy getting their Cocoa applications there, but any residual Carbon applications would be a nightmare. &lt;br /&gt;&lt;br /&gt;Extrapolation 1: Even Apple will not be able to make iTunes a 64-bit application without a major rewrite. After you remove QuickTime, all the old Classic Mac APIs which are not in the 64-bit frameworks, etc., there is little left. Maybe much of the task specific onscreen drawing on the Mac is now done with Quartz calls, and the networking calls are probably being done with CFNetwork calls on the Mac, and maybe they are using WebKit to do the store, and that can all be salvaged, and hopefully the code is factored such that system calls are not sprinkled all over the place, but they are going to have to bite the bullet and just write a from scratch Cocoa application and call it iTunes 8. &lt;br /&gt;&lt;br /&gt;Extrapolation 2: If Apple is not going to extend the life of Classic Mac APIs and QuickTime C APIs for 64-bit Mac applications, what are the odds of them doing so for the emulation layer on 64-bit Vista. Pretty low.  There is no obvious quick way to get iTunes as we know it on Windows to run as a 64-bit process.  I guess they could if they really wanted to, but it seems a pretty hacky solution and would basically obligate them to maintain an entire OS's SDK just to run iTunes and QuickTime. &lt;br /&gt;&lt;br /&gt;Extrapolation 3: I assume Apple cares about the future of QuickTime and iTunes on 64-bit Windows. This is not a big market now, but will only get bigger, and Windows user are not going to accept running multimedia software in 32-bit emulation mode in perpetuity. They can do two things. They can create a new framework which can play and edit QuickTime content, perhaps a set of .NET classes, and write a separate version of iTunes which makes use of these classes. Or, they can bring Cocoa to 64-bit Windows, and run the same source based iTunes as the Mac. I suspect Apple doesn't want to do either, but iPod sales are important to them.  They wouldn't want those early adopter 64-bit users running to Zune.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A little Googling on "64-bit iTunes" came up with this revealing alert text in the current Windows iTunes &lt;A HREF="http://discussions.apple.com/thread.jspa?messageID=5914356"&gt; "This iPod cannot be used because the required software is not installed. Run the itens installer and remove itunes, then install the 64-bit version of iTunes."&lt;/A&gt; That makes me wonder if all this is going to fall out sooner rather than later. Or maybe it's an aberration. &lt;br /&gt;&lt;br /&gt;Anyway, that's my uninformed opinion, and we'll see if it has any relationship to reality.&lt;br /&gt;&lt;br /&gt;[Update: See this &lt;A HREF="http://www.macworld.com/article/132810/2008/04/photoshop64.html"&gt;article&lt;/A&gt; about how Adobe is not releasing a 64-bit version of Photoshop until they can do the major re-writing required to remove their Carbon code.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-5104798148891157972?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5104798148891157972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5104798148891157972'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/11/there-must-be-cocoa-itunes-coming-vista.html' title='There Must Be a Cocoa iTunes Coming + Vista 64-bit iTunes?'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-1310501483152648351</id><published>2007-11-21T22:46:00.000-05:00</published><updated>2007-11-25T23:36:04.770-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='predictions'/><category scheme='http://www.blogger.com/atom/ns#' term='OS X'/><category scheme='http://www.blogger.com/atom/ns#' term='Carbon'/><title type='text'>The Future or Lack of It for Carbon</title><content type='html'>If you are tasked with maintaining a large, old&amp;mdash;is there any other kind&amp;mdash;Carbon application, here's an illuminating experiment. In XCode 3.0, under Build architecture, turn on 64 bit compilation for Intel. Now try to compile.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;In my case, I see errors and lots of them:&lt;br /&gt;&lt;CODE&gt;&lt;br /&gt;error: '::FlushVol' has not been declared&lt;br /&gt;error: 'HideCursor' was not declared in this scope&lt;br /&gt;error: 'ShowCursor' was not declared in this scope&lt;br /&gt;error: 'LMGetFractEnable' was not declared in this scope&lt;br /&gt;error: 'GetOutlinePreferred' was not declared in this scope&lt;br /&gt;error: 'GetPreserveGlyph' was not declared in this scope&lt;br /&gt;error: 'GetWindowEventTarget' was not declared in this scope&lt;br /&gt;error: 'SetFractEnable' was not declared in this scope&lt;br /&gt;error: 'SetOutlinePreferred' was not declared in this scope&lt;br /&gt;error: 'MoveWindow' was not declared in this scope&lt;br /&gt;error: 'SetOutlinePreferred' was not declared in this scope&lt;br /&gt;error: 'OpenCPicture' was not declared in this scope&lt;br /&gt;error: 'SetControlPopupMenuHandle' was not declared in this scope&lt;br /&gt;error: '::SetControlMaximum' has not been declared&lt;br /&gt;error: '::DrawThemeMenuItem' has not been declared&lt;br /&gt;error: 'GetIntlResource' was not declared in this scope&lt;br /&gt;error: 'CompareString' was not declared in this scope&lt;br /&gt;error: '::SetMenuWidth' has not been declared&lt;br /&gt;error: 'IsWindowVisible' was not declared in this scope&lt;br /&gt;error: '::GetPicture' has not been declared&lt;br /&gt;error: '::DrawPicture' has not been declared&lt;br /&gt;error: '::EraseRect' has not been declared&lt;br /&gt;error: '::FindDialogItem' has not been declared&lt;br /&gt;.... lots more errors ...&lt;br /&gt;&lt;/CODE&gt;&lt;br /&gt;So, we have a litany straight out of Inside Macintosh Vol. 1-3: all of QuickDraw, much of the File Manager, the Control Manager, the Dialog Manager,  the Window Manager, the Menu Manager, the Font Manager all gone, but surprisingly not the Resource Manager. Anything that uses Pascal strings or FSSpecs. Few of the API's which came from the Classic Mac OS survive a 64 bit compile.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;I don't know in the short term, what the carrot is for getting independent developers to make 64-bit compiles. Unless you are doing something that really needs 6 GB of real RAM&amp;mdash;very few applications&amp;mdash;there seems to be little performance advantage for 64-bit. And, it's hard taking a Carbon application, ripping out the APIs behind its entire GUI, and putting it back together again. Lots of redesign and drudgery for little immediate payoff. In the long term, Apple will presumably stop supporting 32-bit applications, but that is in the very long term.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Plus, there are little bits of functionality in the Carbon APIs which are hard to replicate in the more modern APIs. One example is embedding one's private metadata in the PICT clipboard flavor. I'd very much like to know how to do that with the PDF API. Another example is the XOR drawing mode for doing tracking, stupid and old fashioned, yes, hard to replace, yes.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;There's an &lt;A HREF="http://arstechnica.com/reviews/os/mac-os-x-10-5.ars/6"&gt;Ars Technica article&lt;/A&gt; which goes into this in more detail.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-1310501483152648351?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://developer.apple.com/documentation/Carbon/Conceptual/Carbon64BitGuide/index.html?http://developer.apple.com/documentation/Carbon/Conceptual/Carbon64BitGuide/Introduction/chapter_1_section_1.html' title='The Future or Lack of It for Carbon'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/1310501483152648351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/1310501483152648351'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/11/future-or-lack-of-it-for-carbon.html' title='The Future or Lack of It for Carbon'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-3101267836887110871</id><published>2007-11-19T13:12:00.003-05:00</published><updated>2008-09-29T13:55:43.577-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hdhomerun'/><title type='text'>HDHomerun Gets More And More Useful</title><content type='html'>[Update: check out &lt;A HREF="http://web.mac.com/grhowes/Generally_Helpful_Software/Signal_GH.html"&gt;Signal GH&lt;/A&gt;, an iPhone utility for monitoring the signal quality of an HDHomerun].&lt;br /&gt;&lt;br /&gt;One of the best bits of tech I've bought over the last year is the &lt;A HREF="http://www.silicondust.com/"&gt; HDHomerun &lt;/A&gt; networked digital HDTV tuner.  I was reminded of this a couple of weeks ago, when I was going through the process of setting up a Mac Mini as a dual boot Leopard/Vista desktop. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;The OEM copy of Vista Home Premium I picked up cheap at MicroCenter comes with Windows Media Center, which Silicon Dust supports for use with the HDHomeRun, so for no added cost, I get live TV watching with a guide, and recording. This is functionality I would not easily get otherwise, as there is no MythTV client for Vista, and I am not going to get an additional tuner for the Mini. It just happened I get all this for free because I happen to own an HDHomerun. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Not that I'm very impressed with Windows Media Center, at least not on the Mini. HD playback is a bit stuttery, unlike VLC on the same OS and hardware; and navigation is confusing. Also, there doesn't appear to be an integrated solution for using my Wiimote; Remote Buddy on the Mac spoils you for effortless couch potato style navigation. MCE does allow the same application to control both live TV viewing and DVD playback, whereas I have to switch off between EyeTV and Front Row on the Mac, but that is comparatively easy with Remote Buddy. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Another HDHomerun nicety is that EyeTV can Picture In Picture both HDHomerun tuners (again on the same hardware Vista MCE can barely decode 1 stream), allowing me to watch 2 HD football games simultaneously, which will be my preferred mode going forward. I like to watch football live, so EyeTV wins over MythTV, whose live TV support is always a bit cumbersome, and the PinP feature seals the deal.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Anyway, my main point is to emphasize the value one gets from a networked device. Because the HDHomerun is accessible from any computer in my house, any computer capable of decrypting an HD stream can use it. In my case, I have 3 computers (my MacBook, a Mac Mini, and my Linux server) and 3 operating systems (Leopard, Vista, Linux), each with their own strengths, sharing this resource.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-3101267836887110871?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.silicondust.com/' title='HDHomerun Gets More And More Useful'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3101267836887110871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3101267836887110871'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/11/hdhomerun-gets-more-and-more-useful.html' title='HDHomerun Gets More And More Useful'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-8585524205107867997</id><published>2007-11-14T22:18:00.000-05:00</published><updated>2007-12-26T12:33:42.214-05:00</updated><title type='text'>The Cover Flow Compulsion</title><content type='html'>Compulsion can be a silly thing. Ever since Cover Flow became ubiquitous on the Mac, I've been on a mission to stamp out generic covers. I spent 5 minutes last night looking for a MP3 track called Voyager "Motion" by someone named Sandra Collins which I'm not sure where it came from (did it come bundled with my Fischer Price iBook 6 years ago?), and which I have told iTunes never to play.  That's just silly. But look at the pretty pictures swirl by.... &lt;br /&gt;&lt;br /&gt;Yes, &lt;A HREF="http://solution.allthingsd.com/20071114/singing-a-new-zune/"&gt;Walt Mossberg&lt;/A&gt;, Cover Flow is addictive.&lt;br /&gt;&lt;br /&gt;For tracks iTunes can't automagically find artwork for, Amazon is a gold mine of customer submitted artwork, at least for popular stuff; you can pick and choose your Beatle covers.  &lt;br /&gt;&lt;br /&gt;Then there's the DVD situation. MythTV wants your artwork in one folder where its database can keep track of it. Front Row 2.0 wants a &lt;i&gt;preview.jpg&lt;/i&gt; file in the same folder with the VIDEO_TS. Vista Media Center Edition wants a &lt;i&gt;folder.jpg&lt;/i&gt; in the same place. &lt;br /&gt;&lt;br /&gt;My process was as follows.  I copied the artwork from DVDpedia (which had downloaded them from Amazon), used Apple's Preview application to create a new file from the clipboard, and saved it as &lt;i&gt;preview.jpg&lt;/i&gt; in every DVD folder on my server. Creating the folder.jpg file was a bit easier, as I wrote a script to make static links from the preview.jpg, the equivalent of typing &lt;br /&gt;$ln -s preview.jpg folder.jpg&lt;br /&gt;170 times. Try to let the computer do what computers do best. A lot of busy work, but look at the pretty pictures swirl by...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-8585524205107867997?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8585524205107867997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8585524205107867997'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/11/cover-flow-cumpulsion.html' title='The Cover Flow Compulsion'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-5171531082870204067</id><published>2007-11-14T09:47:00.000-05:00</published><updated>2007-11-14T10:14:24.983-05:00</updated><title type='text'>SVG on Webkit - Improving</title><content type='html'>I'm gratified to see &lt;A HREF="http://webkit.org"&gt;WebKit's&lt;/A&gt; continuous improvements in its support for SVG. Recent builds fixed a bug, I and many others, reported involving non-support for superscripted and subscripted text. This might seem a minor thing, but SVG support means, for instance, that someday soon Chemistry students will be able to go to &lt;A HREF="http://upload.wikimedia.org/wikipedia/commons/d/d8/Caffeine.svg"&gt;a structure on Wikipedia&lt;/A&gt; via their iPhone, Android phone, or iPod Touch and actually zoom in on any portion of it perfectly, without worry about pixelating some lame .png file, and without worrying about errors in rendering making the structure ambiguous.  &lt;br /&gt;&lt;br /&gt;XML based SVG might not be the hottest technology, but the need for an open standard, full featured, vectored image format is so great, it just keeps chugging along. And it's inclusion in the base technology of both the iPhone and the Google Android SDK means it will finally allow for the inclusion of resolution independent and small vectored files, where today monstrous bitmap files are used. I'm sure Google is eager for its use in web apps for such activities as creating charts and graphs.&lt;br /&gt;&lt;br /&gt;Now if Apple would just turn it on for the iPhone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-5171531082870204067?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://webkit.org' title='SVG on Webkit - Improving'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5171531082870204067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5171531082870204067'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/11/svg-on-webkit-improving.html' title='SVG on Webkit - Improving'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-914305656834496423</id><published>2007-09-13T10:38:00.001-04:00</published><updated>2007-09-13T11:48:36.111-04:00</updated><title type='text'>Walt Mossberg's Take on Linux Desktop Deficiencies</title><content type='html'>This is an e-mail I sent to Walt Mossberg, technology columnist for &lt;A HREF="http://wsj.com"&gt;The Wall Street Journal&lt;/A&gt; after &lt;A HREF="http://ptech.allthingsd.com"&gt;this morning's column&lt;/A&gt; on the practicality of Linux on the Desktop. In the column, Mr. Mossberg skewered Linux for playing neither MP3s or DVDs out of the box, and found this symptomatic of Ubuntu's incompatibility with the mainstream computer user. &lt;br /&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;Mr. Mossberg,&lt;br /&gt;  Just to let you know beforehand, I'm a Mac guy not a Linux evangelist, although I do maintain a Linux server in my basement.&lt;br /&gt;&lt;br /&gt;  It seems to me that you should have mentioned the reason Linux distributions don't come with MP3 codecs or DVD players is because someone would have to pay for a license for those bits of software on a per user basis, and that gets in the way of distributing a free operating system from anonymous FTP sites.  It isn't that the Ubuntu people haven't gotten around to adding that refinement, it's just that it's inherently incompatible with their distribution model.  The MP3 codecs/DVD decryption software you end up downloading is either a clear copyright violation or outright illegal in the U.S. (DMCA) which makes it hard to get bundled with hardware.&lt;br /&gt;&lt;br /&gt;  I hope you don't get an avalanche of e-mail saying you should use Ogg instead of MP3.&lt;br /&gt;&lt;br /&gt;--glenn&lt;br /&gt;&lt;/UL&gt;&lt;br /&gt;&lt;br /&gt;Mr. Mossberg quickly and politely replied, but since I didn't ask him for permission to repost, I will not publish his reply. As an aside, I've found him to be responsive to short, on point, polite e-mails; I don't know how he keeps up with it all. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Also, I might have been wrong, MP3 might be patent entangled not copyright entangled. Regardless, this is quite the problem  for Linux distributions. While it's at least conceivable that some rich benefactor could get an unlimited license from Fraunhofer although Wikipedia says Fraunhofer earned 100,000,000 Euros in royalty payments in 2005 for MP3, but it seems unlikely that the &lt;A HREF="http://www.dvdforum.org/forum.shtml"&gt;DVD Forum&lt;/A&gt; could release an open source library and still maintain the pretense of DRM. And then there's the winner of the Bluray and HD-DVD war, and then whatever DRM hobbled downloadable format comes after that.  Quite a problem. &lt;BR&gt;&lt;br /&gt;It would seem that hardware vendors need a non-free version of Linux that they control the distribution of, which pays its per seat license fees and follows the DRM consortiums rules. Perhaps audio card manufacturers could market versions which are licensed to decode MP3 streams.  I don't know. I do think that Walt Mossberg is right and people have some expectation to play standard media on their desktop computer (without breaking the law).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-914305656834496423?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://ptech.allthingsd.com/' title='Walt Mossberg&apos;s Take on Linux Desktop Deficiencies'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/914305656834496423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/914305656834496423'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/09/walt-mossbergs-take-on-linux-desktop.html' title='Walt Mossberg&apos;s Take on Linux Desktop Deficiencies'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-3083680729516911203</id><published>2007-09-12T12:16:00.000-04:00</published><updated>2007-09-12T12:30:08.930-04:00</updated><title type='text'>Apple's Cool New Site Search</title><content type='html'>I don't know when this was released, but the search field on &lt;A HREF="http://apple.com"&gt;apple.com&lt;/A&gt; is slick. It seems every day some hotshot AJAX programmer (or WebObjects guru) comes up with some new magic once reserved for desktop applications, not web page frontends. In this case, Apple's search function does a real time database search and populates a dynamic popup menu with images and text, all of which updates after every keystroke. &lt;BR&gt;&lt;br /&gt;Type in "boo" and you get this:&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/AppleSearch1.png" /&gt;&lt;br /&gt;Add a "t" and you get this:&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/AppleSearch2.png" /&gt;&lt;br /&gt;Quick, slick and cool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-3083680729516911203?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.apple.com/' title='Apple&apos;s Cool New Site Search'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3083680729516911203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3083680729516911203'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/09/apples-cool-new-site-search.html' title='Apple&apos;s Cool New Site Search'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-659285201973687280</id><published>2007-08-21T07:35:00.000-04:00</published><updated>2007-09-01T10:36:29.532-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sVideo'/><category scheme='http://www.blogger.com/atom/ns#' term='mythtv'/><category scheme='http://www.blogger.com/atom/ns#' term='direcTV'/><title type='text'>Recording Standard Definition TV from DirecTV with MythTV</title><content type='html'>In a followup to my &lt;A HREF="http://sprinkleofcocoa.blogspot.com/2007/08/playing-live-tv-from-satellite-box-on.html"&gt;note to myself&lt;/A&gt; on playing live TV from my satellite box using mplayer, this is about integrating a &lt;A HREF="http://pchdtv.com/"&gt;pcHDTV 3000&lt;/A&gt;'s s-Video input into my MythTV system.&lt;BR&gt;&lt;br /&gt;It would, of course, be nice if I could get all the programming I want in unencrypted HD, but sometimes all you can get or afford is old fashioned analog. In my case, I have a D12-300 DirecTV satellite receiver on my desk, this extra receiver costs me $5 a month over the cost for the receiver in the TV room, so it's a fairly good deal. What makes it a better deal is using my MythTV to time shift,  skip commercials and watch it anywhere in the house wirelessly onto my MacBook. &lt;BR&gt;&lt;br /&gt;&lt;H4&gt;Hardware&lt;/H4&gt;&lt;UL&gt;&lt;LI&gt;&lt;A HREF="http://mythtv.org/wiki/index.php/Configuring_PCHDTV_card_for_ATSC"&gt;pcHDTV 3000 tuner card&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;&lt;A HREF="http://www.newegg.com/Product/Product.aspx?Item=N82E16829120103"&gt;Chaintech AV-710 audio card&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;s-Video cable&lt;/LI&gt;&lt;LI&gt;RCA to mini jack audio cable&lt;/LI&gt;&lt;LI&gt;&lt;A HREF="http://www.newegg.com/Product/Product.asp?Item=N82E16812107108"&gt;USB to serial adaptor cable&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;&lt;A HREF="http://www.monoprice.com/products/product.asp?c_id=104&amp;cp_id=10414&amp;cs_id=1041401&amp;p_id=1137"&gt;DB9 Female to Female Null modem adaptor&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;BR&gt;&lt;br /&gt;Most of the hardware I already had. I did purchase the USB to serial adaptor&amp;mdash;according to accounts on the web not all adaptors work with DirectTV receivers&amp;mdash;and the null modem adaptor.&lt;BR&gt;&lt;br /&gt;&lt;H4&gt;Hardware setup&lt;/H4&gt;I plugged the USB end of the USB to serial adaptor into the DirecTV receiver, and the serial end into the null modem adaptor. I plugged the other end of the null modem into the serial port of my Dell Dimension&amp;mdash;tighten those screws. I plugged the s-Video cable into the s-Video output of the satellite receiver, and into the s-Video input of the pcHDTV card. I plugged the RCA jacks of the audio cable into the red/white outputs of the satellite receiver and the mini-jack end into the line in port (2nd from the right) of the AV-710.&lt;BR&gt;&lt;br /&gt;&lt;H4&gt;Software setup&lt;/H4&gt;My &lt;A HREF="http://sprinkleofcocoa.blogspot.com/2007/08/playing-live-tv-from-satellite-box-on.html"&gt;previous posting&lt;/A&gt; described setting up the system audio to activate the line in port for audio input. I would follow those instructions now, to confirm you can see and hear live TV via mplayer.&lt;BR&gt;&lt;br /&gt;As I will be using a script to change channels over the serial port, I want a non-root user account to open up the serial port device, so as root from the command line:&lt;br /&gt;&lt;CODE&gt;# chmod a+rw /dev/ttyS0&lt;/CODE&gt;&lt;BR&gt;&lt;br /&gt;I would test this by running your copy of the directv.pl script. For example:&lt;br /&gt;&lt;CODE&gt;$ /usr/share/mythdora/directv.pl 231 &lt;/CODE&gt; &lt;br /&gt;should bring up the Food network. (Your path will be different, probably.)&lt;BR&gt;&lt;br /&gt;I went to my account on (the soon to be discontinued) &lt;A HREF="http://labs.zap2it.com/"&gt;zap2It labs&lt;/A&gt; and setup a listing grabber for DirecTV, limiting it to the 10 or so channels I would conceivably watch. &lt;BR&gt;&lt;br /&gt;Then I ran mythtv-setup.&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;Capture Cards&lt;/LI&gt;&lt;UL&gt;&lt;LI&gt;Card Type: Analog V4L capture card&lt;/LI&gt;&lt;LI&gt;Video device: /dev/video&lt;/LI&gt;&lt;LI&gt;VBI device: /dev/vbi&lt;/LI&gt;&lt;LI&gt;Audio device: /dev/dsp&lt;/LI&gt;&lt;LI&gt;Audio sampling rate limit: 48000&lt;/LI&gt;&lt;LI&gt;Do not adjust volume: Checked&lt;/LI&gt;&lt;LI&gt;Default input: S-Video&lt;/LI&gt;&lt;/UL&gt;&lt;LI&gt;Video Sources&lt;/LI&gt;&lt;UL&gt;&lt;LI&gt;Video source name: DirectTV&lt;/LI&gt;&lt;LI&gt;Rest of the settings are dependent on your having setup up a listing grabber for DirecTV&lt;/LI&gt;&lt;/UL&gt;&lt;LI&gt;Input connections - [V4L :/dev/video] (S-Video) -&gt; DirectTV&lt;/LI&gt;&lt;UL&gt;&lt;LI&gt;Display Name (optional): DirecTV&lt;/LI&gt;&lt;LI&gt;Video source: DirecTV&lt;/LI&gt;&lt;LI&gt;External channel change command: /usr/share/mythdora/directv.pl (your path will be different)&lt;/LI&gt;&lt;LI&gt;Preset tuner to channel: 231&lt;/LI&gt;&lt;LI&gt;Click on the Fetch channels from listing source&lt;/LI&gt;&lt;LI&gt;Starting channel: 231&lt;/LI&gt;&lt;LI&gt;Input priority: -1&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;BR&gt;&lt;br /&gt;Of course, I kept my pcHDTV's DVB setup to record over the air digital HD programming, although I did change the Recording Options for the Capture Card to only "Open DVB card on demand".&lt;br /&gt;&lt;B&gt;[Update: somewhere along the way, I lost ATSC tuning for the pcHDTV card, and I'm having a hard time getting it back. For me, this is not an urgent matter as I have the two tuners in my HDHomerun, but obviously it would be important to anybody with only a pcHDTV. I'll try to figure this out, but I think it has to do with a conflict between my kernel version and the DVB drivers.] [Update 2: I updated mythtv to the current build to support &lt;A HREF="http://schedulesdirect.org"&gt;Schedules Direct&lt;/A&gt; and it works again. I apparently can now record off of one of the pcHDTV's outputs at a time (not both at once.)]&lt;/B&gt; &lt;BR&gt;&lt;br /&gt;At this point, you should run mythfilldatabase.&lt;BR&gt;&lt;br /&gt;I then restarted the mythbackend, and opened up the mythfrontend, but before watching any TV, I had to setup my recording profiles.&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;Utilities/Setup&lt;/LI&gt;&lt;UL&gt;&lt;LI&gt;Setup&lt;/LI&gt;&lt;UL&gt;&lt;LI&gt;TV Settings&lt;/LI&gt;&lt;UL&gt;&lt;LI&gt;Recording Profiles&lt;/LI&gt;&lt;UL&gt;&lt;LI&gt;Software Encoders (v4l based)&lt;/LI&gt;&lt;UL&gt;&lt;LI&gt;Default&lt;/LI&gt;&lt;UL&gt;&lt;LI&gt;Enable auto-transcode after recording: Checked&lt;/LI&gt;&lt;LI&gt;Width: 720&lt;/LI&gt;&lt;LI&gt;Height: 480&lt;/LI&gt;&lt;LI&gt;Codec: MPEG-4&lt;/LI&gt;&lt;LI&gt;Codec: MP3&lt;/LI&gt;&lt;LI&gt;Sampling rate: 48000&lt;/LI&gt;&lt;/UL&gt;&lt;LI&gt;Live TV&lt;/LI&gt;&lt;UL&gt;&lt;LI&gt;Enable auto-transcode after recording: Checked&lt;/LI&gt;&lt;LI&gt;Width: 720&lt;/LI&gt;&lt;LI&gt;Height: 480&lt;/LI&gt;&lt;LI&gt;Codec: RTjpeg&lt;/LI&gt;&lt;LI&gt;Codec: Uncompressed&lt;/LI&gt;&lt;LI&gt;Sampling rate: 48000&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;br /&gt;&lt;H4&gt;Conclusion&lt;/H4&gt;After finishing all this, I was very surprised that I could watch Live TV both at my MythTV box itself, and over wireless with my MacBook, and I could also schedule recordings and it would all work. I like having a wired connection to the satellite box for changing channels, it should be 100% reliable unlike an infrared blaster arrangement. The video is amazingly ugly compared to the beautiful HD I get from my antenna, but then again, it's going to be a while before Good Eats comes in over the air. &lt;BR&gt;&lt;br /&gt;I keep my audio sampling, storing and playback rates at a constant 48000 Hz as it is the standard playback rate for the PCM stereo audio which will eventually go out the optical port to my audio receiver, and I don't see the point of adding another possible failure point in the sampling conversion. My previous MythTV install made 44.1Khz recordings sound high pitched.&lt;BR&gt;&lt;br /&gt;I'm just glad I'm done with this, and I hope this saves you some time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-659285201973687280?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://mythtv.org' title='Recording Standard Definition TV from DirecTV with MythTV'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/659285201973687280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/659285201973687280'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/08/recording-standard-definition-tv-from.html' title='Recording Standard Definition TV from DirecTV with MythTV'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-6400782321260445012</id><published>2007-08-17T02:25:00.000-04:00</published><updated>2007-08-22T21:00:54.124-04:00</updated><title type='text'>Playing Live TV from Satellite box on Linux</title><content type='html'>This is more of a note to myself, as I'm sure this involves an unusual set of hardware and software. &lt;BR&gt;&lt;br /&gt;I have a standard definition DirectTV satellite box on my desk. I wanted to display its content on my Mythdora Linux box&amp;mdash;actually, I want to record standard definition programming with MythTV, but I haven't quite gotten there yet. [Update: &lt;A HREF="http://sprinkleofcocoa.blogspot.com/2007/08/recording-standard-definition-tv-from.html"&gt;This post&lt;/A&gt; is about recording]. I have a pcHDTV 3000 capture card in my Linux computer with an s-Video input, and a Chaintech AV-710 audio card with a line level input (it's the second one from the right). I figured I could bring the video in through the s-Video port and the audio in through the line level port via an s-Video cable and an RCA to mini-jack cable, it would just take a little configuration tweaking.&lt;BR&gt;&lt;br /&gt;First, I had to use alsamixer to turn on capturing, so I brought up the capture display for the AV-710 by using &lt;CODE&gt;alsamixer -V Capture&lt;/CODE&gt; and selecting the Line capture item and hitting the space bar and then setting the Capture level item to a moderate value. (Actually, I did a ton of stuff trying to make this work, but I think it boiled down to this.)&lt;BR&gt;&lt;br /&gt;Then I had to figure out the voodoo to cause mplayer to display the video from the pcHDTV card combined with the audio from the AV-710 card. This ended up being:&lt;BR&gt;&lt;br /&gt;&lt;CODE&gt;mplayer -tv driver=v4l2:device=/dev/video:input=2:outfmt=rgb24:alsa:amode=2:audiorate=48000:forceaudio:immediatemode=0 -vo xv tv:// -vf pp=lb -ao oss:/dev/adsp&lt;/CODE&gt;&lt;BR&gt;&lt;br /&gt;Breaking this command line into parts:&lt;br /&gt;&lt;UL&gt;&lt;LI&gt;-tv driver=v4l2:device=/dev/video:input=2 means the  Video For Linux framework will grab video from input 2 of the pcHDTV card&lt;/LI&gt;&lt;LI&gt;alsa:amode=2:audiorate=48000:forceaudio:immediatemode=0 means audio will come from the ALSA frameworks default capture device at a sampling rate of 48000 Hz (which is the frequency that my TOSLink output needs)&lt;/LI&gt;&lt;LI&gt;-vo xv tv://  set the video output&lt;/LI&gt;&lt;LI&gt;-vf pp=lb means to use a linear blend deinterlace algorithm&lt;/LI&gt;&lt;LI&gt;-ao oss:/dev/adsp means to output it to what happens to be the optical output of the AV-710&lt;/LI&gt;&lt;/UL&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-6400782321260445012?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6400782321260445012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6400782321260445012'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/08/playing-live-tv-from-satellite-box-on.html' title='Playing Live TV from Satellite box on Linux'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-6259894336629590180</id><published>2007-08-12T09:16:00.000-04:00</published><updated>2007-08-13T08:54:54.219-04:00</updated><title type='text'>Mac MythTV Frontend Settings</title><content type='html'>There are a lot of MythTV settings. Page after page of preferences. In many ways, this is bad design; a refusal by the authors to make decisions about correct and incorrect behavior. But that's the situation, and here are a few settings where I think the value should change. &lt;BR&gt;&lt;br /&gt;&lt;br /&gt;&lt;H5&gt;Utilities/Setup.Setup.General.Audio.Enable AC3 to SPDIF passthrough&lt;/H5&gt;If you have your Mac hooked up to a receiver via an optical cable, remember to check this or you will throw away your surround sound. Unfortunately, it doesn't auto-detect the absence of such a cable and fall back to non-passthrough, so you'll end up unchecking this when you move your Mac.&lt;br /&gt;&lt;H5&gt;Utilities/Setup.Setup.Apearence.Theme.Theme&lt;/H5&gt;If you are using a widescreen Mac, or attaching your Mac to an HDTV, you should try MythCenter-wide as the theme. Non-wide screen themes tend to get their lower buttons cut off in the more complicated preference panels.&lt;br /&gt;&lt;H5&gt;Utilities/Setup.Setup.Apearence.Theme.QT Style&lt;/H5&gt;The Mac themed buttons are unusable (transparent blue on blue). Use Windows style. &lt;br /&gt;&lt;H5&gt;Utilities/Setup.Setup.TV.Playback.General Playback.Deinterlace playback&lt;/H5&gt;Unless you have a Mac which can just barely display 1080i content, or your monitor will deinterlace content for you, you should turn this setting on.&lt;br /&gt;&lt;H5&gt;Utilities/Setup.Setup.TV.Playback.General Playback.Algorithm&lt;/H5&gt;This is something you should investigate for yourself. Run the Activity Monitor application in your /Applications/Utilities folder to determine the performance hit of the various deinterlace methods, and test them for effectiveness. In particular, the BOB method doesn't work well for me, while the Kernel method works but uses more of my CPU. I will try using the One field method. &lt;br /&gt;&lt;H5&gt;Utilities/Setup.Setup.TV.Playback.On Screen Display.OSD Theme&lt;/H5&gt;The Gray-OSD theme seems the the most tasteful of the bunch. &lt;br /&gt;&lt;H5&gt;Utilities/Setup.Setup.TV.Playback.On Screen Display.Always use Browse mode when changing channels&lt;/H5&gt;If your channels take as long to change as mine, you'll prefer to see what's on before committing to changing the channel.&lt;br /&gt;&lt;H5&gt;Utilities/Setup.Setup.TV.Playback.Mac OS X Video Settings 2/2.Video in the dock&lt;/H5&gt;I think this feature is pretty useless and a waste of power.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-6259894336629590180?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://mythtv.org' title='Mac MythTV Frontend Settings'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6259894336629590180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6259894336629590180'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/08/mac-mythtv-frontend-settings.html' title='Mac MythTV Frontend Settings'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-7293182706462664455</id><published>2007-08-05T16:09:00.000-04:00</published><updated>2007-08-05T16:57:50.777-04:00</updated><title type='text'>Why Can I use MythTV with 802.11g, but not EyeTV?</title><content type='html'>The Linux box in the basement runs the &lt;A HREF="http://mythtv.org"&gt;MythTV&lt;/A&gt; backend. I can watch live HDTV wirelessly using 802.11g networking through the Linksys router in my back bedroom to my MacBook. As long as the microwave isn't on, and I stay within 30 feet or so of the router, the picture and sound are typically great. &lt;BR&gt;&lt;br /&gt;I have an &lt;A HREF="http://elgato.com/index.php?file=products_hdhomerun"&gt;HDHomeRun&lt;/A&gt; networked HDTV tuner right next to the Linksys router, and I cannot watch 5 seconds of TV wirelessly without a skip, big pixilation, or pop using the EyeTV application. Using wired ethernet it's fine, but 802.11g? Forget about it.&lt;BR&gt;&lt;br /&gt;I can set the MythTV to grab a stream from the HDHomerun, bring it down to the MythTV via wired ethernet, and then back up the same wire to the router, and out as radio waves, and it still works smoothly. I just watched 20 minutes of 1080i HD golf on CBS without a skip; although twisting the MacBook around will cause the occasional skip at this distance&amp;mdash;perhaps 25 feet through a floor and a couple walls.&lt;BR&gt;&lt;br /&gt;Why can MythTV do what EyeTV can't in this situation? I don't know; presumably it has more flexibility in buffering at the source, but it still has to average the same bit rate. MythTV might be better at handling lost packets... Again, I don't know. I just know MythTV works better for wireless HDTV.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-7293182706462664455?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://elgato.com/index.php?file=products_hdhomerun' title='Why Can I use MythTV with 802.11g, but not EyeTV?'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7293182706462664455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7293182706462664455'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/08/why-can-i-use-mythtv-with-80211g-but.html' title='Why Can I use MythTV with 802.11g, but not EyeTV?'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-4329215693913125097</id><published>2007-08-02T17:24:00.000-04:00</published><updated>2007-08-04T09:42:46.811-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='remote desktop'/><category scheme='http://www.blogger.com/atom/ns#' term='MacBU'/><title type='text'>New Windows Remote Desktop Beta</title><content type='html'>The Mac Business Unit at Microsoft released the first beta of &lt;A HREF="http://blogs.msdn.com/macmojo/archive/2007/07/31/come-and-get-it-rdc-for-mac-v2-beta.aspx"&gt;Remote Desktop Connection 2&lt;/A&gt;. This is good news for me. A perk of my job is that I get to do most of my C++ coding on my Mac, but I do need a PC on my desk for Visual Studio to implement and debug Windows specific objects. As I require cutting and pasting between the two environments, I use Remote Desktop Connection on my iMac to put a full screen PC on a secondary monitor. I can copy and paste text between the two environments, using the same trackball and keyboard; and I can do full compile link cycles while not taking away from my Mac's performance unlike a &lt;A HREF="http://www.parallels.com/"&gt;Parallels&lt;/A&gt; virtual machine.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately, I was irked by inexplicable slowdowns and unreliable text pasting; and I had no real hope of the situation brightening as I believed Microsoft had abandoned Remote Desktop Connection development, and I would be stuck forever with a PowerPC only, buggy hack.  And yet, here out of Redmond comes a beta of a universal binary version 2. Read the &lt;A HREF="http://blogs.msdn.com/macmojo/archive/2007/07/31/come-and-get-it-rdc-for-mac-v2-beta.aspx"&gt;blog entry&lt;/A&gt; announcing the release. They took use cases like mine into account; I like the easy sharing of a Mac folder as a Windows volume; text pasting seems instantaneous, and GUI performance is fairly snappy on my 20" Intel iMac.&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;It shows its beta-ness. I crashed it several times trying to bring it up on my second monitor before it stuck. I hope the MacBU will fix the more blatant bugs in short order. Thanks MS.&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-4329215693913125097?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.msdn.com/macmojo/archive/2007/07/31/come-and-get-it-rdc-for-mac-v2-beta.aspx' title='New Windows Remote Desktop Beta'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/4329215693913125097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/4329215693913125097'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/08/new-windows-remote-desktop-beta.html' title='New Windows Remote Desktop Beta'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-8809150810176471735</id><published>2007-07-25T07:35:00.002-04:00</published><updated>2008-09-29T13:56:21.313-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eyetv'/><category scheme='http://www.blogger.com/atom/ns#' term='hdhomerun'/><category scheme='http://www.blogger.com/atom/ns#' term='dvr'/><title type='text'>HDHomeRun and EyeTV</title><content type='html'>[Update: check out &lt;A HREF="http://web.mac.com/grhowes/Generally_Helpful_Software/Signal_GH.html"&gt;Signal GH&lt;/A&gt;, an iPhone utility for monitoring the signal quality of an HDHomerun].&lt;br /&gt;Cruising the &lt;A HREF="http://www.avsforum.com/avs-vb/showthread.php?p=11111644"&gt;AVS Forum Mac Home Theatre Forum&lt;/A&gt; I was gratified to see &lt;A HREF="http://www.elgato.com/index.php?file=products_hdhomerun"&gt;El Gato&lt;/A&gt; and &lt;A HREF="http://www.silicondust.com/"&gt;Silicon Dust&lt;/A&gt; had come to together and done the obvious: bundle El Gato's best on platform EyeTV DVR software with Silicon Dust's networked &lt;A HREF="http://sprinkleofcocoa.blogspot.com/2006/12/hdhomerun-networked-hdtv-tuner.html"&gt;HDHomerun&lt;/A&gt; high definition digital tuner.&lt;BR&gt; &lt;br /&gt;This only makes sense, as El Gato no longer makes the closest approximation to the HDHomerun, the long lamented EyeTV 500 Firewire tuner with its support for digital over the air broadcasts and unencrypted cable streams. The HDHomerun can do both functions only better:&lt;UL&gt;&lt;LI&gt;Two independent tuners&lt;/LI&gt;&lt;LI&gt;Shareable between computers&lt;/LI&gt;&lt;LI&gt;Placeable closer to roof antennas&lt;/LI&gt;&lt;LI&gt;Uses ubiquitous Ethernet port instead of specialized Firewire&lt;/LI&gt;&lt;/UL&gt;&lt;BR&gt;&lt;br /&gt;If I were putting together a home theatre PC, the HDHomerun is the only ATSC/QAM tuner I would consider; it's just so much more flexible than something tied to a single computer. &lt;BR&gt;&lt;br /&gt;Plus, using EyeTV with my HDHomerun cost nothing extra. I already owned a copy of EyeTV 2 and El Gato tech support gave me a link to the 2.4.2 update for free. New purchasers of a HDHomerun can get an EyeTV bundle for $200, meaning El Gato is charging $30 for a two seat license above the $170 price for just the HDHomerun.&lt;BR&gt;&lt;br /&gt;The first problem was figuring out I had to run the Setup Assistant from the Help menu so EyeTV could find the HDHomerun; which it quickly did; and it immediately came up streaming 2 digital channels in separate windows. Then I had it search for available channels which took over an hour&amp;mdash;812 frequencies @ 5 seconds each&amp;mdash;using the exhaustive option. It found 15 digital sub-channels in my area, which is a bit low; but it is the height of summer and tree leaves down the street block my path to the Boston antenna farm. A later quick search found 12 channels, so the exhaustive search may be worth it. It would be nice if it would just take the information from my TitanTV account. Maybe El Gato could speed this up by using both tuners. A second exhaustive scan the next morning found 19 sub-channels.&lt;BR&gt;&lt;br /&gt;At this point, I could watch TV, in fact, I could watch 2 separate TV streams at once on my MacBook, with sound from the frontmost stream. Not that I would make a habit of doing so; the combined effort of decoding 2 1080i streams into half sized windows takes 175% of a core, leaving a measly 25% to do anything else. Also, I was reminded of EyeTV's annoying habit of resizing the window every time a standard definition commercial comes on. Remember to fix the ratio at 16:9. &lt;BR&gt;&lt;br /&gt;As I can watch HD from my MythTV via my home's 802.11g network, I was hoping to watch live TV direct from the HDHomerun over wireless, but this brought sputtering, stopping, and ugliness; El Gato should improve EyeTV's behavior over an unreliable network. Still, I have the whole house wired with Cat-6 Ethernet cable, so I have some flexibility.&lt;BR&gt;&lt;br /&gt;EyeTV allows you to update the firmware to the HDHomerun quite easily. Much more easily than manually downloading the firmware and flashing the device with the HDHomerun's Windows utility. This is typical of EyeTV's nearly painless experience. EyeTV is the best I've seen at live TV viewing, and I've tried MythTV, VLC and SageTV (on the PC). I haven't tried it's DVR functionality, because I actually use my MacBook, and can't devote it to the task; if and when I get a Mac Mini for the TV room, I will give it a try. I just wish there was something to watch in the summer; I've 3 tuners in the house and nothing to see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-8809150810176471735?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.elgato.com/index.php?file=products_hdhomerun' title='HDHomeRun and EyeTV'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8809150810176471735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/8809150810176471735'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/07/hdhomerun-and-eyetv.html' title='HDHomeRun and EyeTV'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-5505678028506596389</id><published>2007-07-20T15:36:00.000-04:00</published><updated>2007-07-22T09:53:17.790-04:00</updated><title type='text'>upgrading to Mythdora from Fedora Core 4</title><content type='html'>My Linux installation was not aging gracefully. I had installed Fedora Core 4 a couple years ago, and had intermittently added packages as needed to keep current compiled versions of MythTV running; if just barely. For instance, the DVD player didn't know what to do with DTS tracks, there was no overlay interface on playback (although this might be because I had a bad OSD theme selected). I wanted to try the new tickless kernel to see if it helped with using less energy and making less noise, but nobody is keeping the yum database up to date for Core 4 and a &lt;CODE&gt;yum updage&lt;/CODE&gt; did nothing. So time to upgrade. &lt;BR&gt;&lt;br /&gt;The &lt;A HREF="http://wilsonet.com/mythtv/fcmyth.php"&gt;Myth(TV)ology&lt;/A&gt; page recommends installing the &lt;A HREF="http://g-ding.tv/"&gt;Mythdora&lt;/A&gt; specialized distribution. This is Fedora Core 6 with pre-installed MythTV  all on a DVD image.  Also, I wanted to take the opportunity to bump up my boot disks capacity a bit, and also not destroy my initial installation, so I ordered a 400 GB from Frys.&lt;BR&gt;&lt;br /&gt;Before I did anything, I backed up my MythTV database via:&lt;br /&gt; &lt;CODE&gt;$ mysqldump -u mythtv -pmythtv mythconverg -c &gt; mythtv_backup.sql&lt;/CODE&gt;&lt;BR&gt;&lt;br /&gt;I have a fairly uncommon configuration in that my master PATA (hda) drive is a Windows XP boot volume, while the slave (hdb) is my Linux disk. I replaced my hdb drive with the new 400GB drive, and booted off the Mythdora DVD. Now, I had to be very careful not to wipe out my XP installation; choosing to install on the hdb drive, and using the boot installer advanced options to install a boot installer on hdb. Experience told me that installing a boot installer on the XP disk would be bad. Then after installing Mythdora, I had to boot off a &lt;A HREF="http://www.knoppix.org/"&gt;Knoppix&lt;/A&gt; LiveCD, and in the terminal make a copy of the first 512 bytes of the hdb1 volume:&lt;br /&gt;&lt;CODE&gt;dd if=/dev/hdb1 of=mydora_bs.bin bs=512 count=1&lt;/CODE&gt;&lt;br /&gt;I mailed the resulting file to myself via a webmail account. I booted into Windows XP and followed &lt;A HREF="http://www.linux-tutorial.info/modules.php?name=Tutorial&amp;pageid=236"&gt;the instructions&lt;/A&gt; for editing the boot.ini file to make my Linux installation an option for the Windows boot manager.&lt;BR&gt;&lt;br /&gt;At this point, I could boot into Linux. I put my old Linux boot hard drive into a Firewire case, and attached it the computer, allowing me to recover the old database via: &lt;br /&gt;&lt;CODE&gt;$mysql -u mythtv -pmythtv mythconverg &lt; mythtv_backup.sql&lt;/CODE&gt;&lt;br /&gt;and to copy the contents of my recordings folder, the contents of my .mythtv folder, and anything else onto the new disk. My old recordings had been in a /video volume, but mythdora had created a /storage volume, so I created a symbolic link to point /video into the new partition. &lt;BR&gt;&lt;br /&gt;After doing this, the overlay display disappeared, which caused me to discover that I had been using an invalid OSD theme (who names these things?) which came back after setting it to a valid theme, it took me a while to find the proper audio device settings to allow TOSLink pass through on my Chaintech AV-710 audio card (it's /dev/adsp), and of course there is always the nonsense in dealing with my complicated xorg.conf file.&lt;BR&gt;&lt;br /&gt;And now I've upgraded, and everything seems to be working OK. I can play DVDs with DTS tracks. I have my overlay display. I'm getting used to Gnome instead of KDE. &lt;BR&gt;&lt;br /&gt;Oh, and the energy use has not improved. If anything, it's using a few more Watts. Still worth the upgrade.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-5505678028506596389?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://g-ding.tv/' title='upgrading to Mythdora from Fedora Core 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5505678028506596389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/5505678028506596389'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/07/upgrading-to-mythdora-from-fedora-core.html' title='upgrading to Mythdora from Fedora Core 4'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-6342733119863650873</id><published>2007-07-04T12:58:00.000-04:00</published><updated>2007-07-04T13:28:39.304-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rotation'/><category scheme='http://www.blogger.com/atom/ns#' term='Quicktime'/><title type='text'>How To: Fix Portrait Oriented Movies</title><content type='html'>If you are like me, you have dozens of video clips from digital "still" cameras which are rotated 90&amp;deg;. And like me, you find them hard to watch in their original form. Luckily, this is easy to fix with QuickTime Pro. &lt;BR&gt;&lt;br /&gt;Open a .mov or .avi file from your camera using the QuickTime Player which you have upgraded to Pro:&lt;br /&gt;&lt;EMBED SRC="http://homepage.mac.com/grhowes/Blog/Sliding_Original.mov" HEIGHT=260 WIDTH=320&gt;&lt;/EMBED&gt;&lt;BR&gt;&lt;br /&gt;Under the &lt;i&gt;Window&lt;/i&gt; menu is a &lt;i&gt;Show Window Properties&lt;/i&gt; item. A dialog pops up and you should see a list of tracks. Choose the Video Track, and then click on the Visual Settings tab. &lt;BR&gt;&lt;br /&gt;&lt;img src="http://homepage.mac.com/grhowes/Blog/RotationSetting.png" alt="Quicktime Visual Settings"/&gt;&lt;br /&gt;Click on one of the circular arrows. Your movie will rotate 90&amp;deg; and you can now save it in a form suitable for friends and family. &lt;br /&gt;&lt;EMBED SRC="http://homepage.mac.com/grhowes/Blog/Sliding_Rotated.mov" HEIGHT=340 WIDTH=240&gt;&lt;/EMBED&gt;&lt;BR&gt;&lt;br /&gt;I don't know why iPhoto doesn't do this. It should.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-6342733119863650873?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6342733119863650873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/6342733119863650873'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/07/how-to-fix-portrait-oriented-movies.html' title='How To: Fix Portrait Oriented Movies'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-3037394429787040325</id><published>2007-06-25T18:20:00.000-04:00</published><updated>2007-06-25T18:21:18.213-04:00</updated><title type='text'>Widescreen Still Cameras</title><content type='html'>For Christmas, I bought my wife a &lt;A HREF="http://www.amazon.com/Panasonic-DMC-LX2K-Digital-Optical-Stabilized/dp/B000GHULTM/ref=pd_bbs_sr_1/102-6023220-6124148?ie=UTF8&amp;s=electronics&amp;qid=1182702715&amp;sr=8-1"&gt; Panasonic DMC-LX2K&lt;/A&gt; digital still camera. This camera has many interesting features&amp;mdash;including a Leica lens&amp;mdash;but one pushed me towards the purchase: it's native widescreen sensor. Unlike most cameras with a 16:9 setting, this camera does not throw away pixels when you shoot with it. Also, the camera records Quicktime movies at greater than DVD resolution (848x480). In good light you would not believe the quality of video you get out of this "still" camera. &lt;BR&gt;&lt;br /&gt;In bad light, on the other hand, you would not believe how quickly the quality drops to atrocious. I tell everyone that this is the world's greatest pocket camera except for the lousy&amp;mdash;low light&amp;mdash;pictures.&lt;BR&gt;&lt;br /&gt;But this entry is not about any given camera, but about the benefits of a wider aspect ratio in digital photography and video. If we watch our media content on 16:9 HDTV screens, and the 16:10 aspect ratio is becoming commonplace for computer monitors, why does 4:3 have a near monopoly on still photography? And will this change?&lt;BR&gt;&lt;br /&gt;This topic was brought to mind as I was using Front Row on my MacBook to present a series of recent snapshots on my 720P HDTV. All the landscape shots fit perfectly on the screen, showing the content at its best and retaining the original composition of the images. &lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Rooster.png" /&gt;&lt;br /&gt;Photos with different aspect ratios, especially the extreme 9:16 rotation came up with some very odd, and pixelated cropping.&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Lap.png" /&gt;&lt;br /&gt;Or this picture of my mother at the beach in the  more common 3:4 portrait image:&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Mom_at_Beach.png" /&gt;&lt;br /&gt;But even standard 4:3 images can come up missing important details like me peering over the top of this menu:&lt;br /&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Peering.png" /&gt;&lt;br /&gt;It is an implementation detail of iPhoto/Front Row that full screen images are cropped to fit (this is for straight viewing of the library, and not slideshows where you have more control). Apple could just has well have &lt;A HREF="http://en.wikipedia.org/wiki/Pillar_box_%28film%29"&gt;pillar boxed&lt;/A&gt; the images, and they probably should have even if this removed detail. This does not negate the fact that the best aspect ratio for photos which will be displayed on an HDTV is 16:9, and 16:9 is a good compromise for full screen display on the 16:10 aspect ratio of newer Apple monitors. It's certainly better than 4:3. And 16:9 is better for the same reason it and wider formats are used in movies, it's easier to tell stories with pictures if you have room to work with; not having your subjects jammed together in unnatural intimacy. People occupy space.&lt;BR&gt;&lt;br /&gt;Why is 4:3 still the standard for digital stills if it is no longer the standard for digital video? I had thought the reason was the dominance of 4:3 friendly printing media in that you can't go to Staples and get widescreen photo paper, but the most common photo size is 6:4 which has an aspect ratio of 1.5 halfway between 16:9's 1.8 and 4:3's 1.33. Anyway, most digital photos are only seen onscreen and screens are getting wider; all of Apple's monitors and laptops use 16:10 displays.  The iPhone doesn't follow this trend with a 3:2 aspect ratio; probably a compromise between esthetics and comfortably fitting in the hand.&lt;BR&gt;&lt;br /&gt;I suppose manufacturers feel the buying public isn't ready for the change. They've shot 4:3 since the days of glass negative plates and probably don't feel the need to change.  Also, I would think (but don't know) that the optics have to be more sophisticated to project such an oblong image without chromic and other distortions. But the public will change. They will tire of the whole shoddy experience of looking at their hi-tech photos on their hi-tech TV and grab onto solutions. &lt;BR&gt;&lt;br /&gt;Consumers should buy 16:9 equipment when available and compose and crop their shots in future proof 16:9. Imagine 20 years from now how quaint all those 4:3 pictures you took last month will look. Anybody will tell at a glance they were from a bygone era&amp;mdash;of tail fins, rotary phones, and poodle skirts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-3037394429787040325?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.amazon.com/Panasonic-DMC-LX2K-Digital-Optical-Stabilized/dp/B000GHULTM/ref=pd_bbs_sr_1/102-6023220-6124148?ie=UTF8&amp;s=electronics&amp;qid=1182702715&amp;sr=8-1' title='Widescreen Still Cameras'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3037394429787040325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/3037394429787040325'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/06/widescreen-still-cameras.html' title='Widescreen Still Cameras'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-7577269704576679507</id><published>2007-06-21T17:45:00.000-04:00</published><updated>2007-06-21T18:03:27.698-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='USB Microscope'/><category scheme='http://www.blogger.com/atom/ns#' term='Alton Brown'/><title type='text'>Alton Brown Uses My Software</title><content type='html'>My TiVo has a &lt;i&gt;Good Eats&lt;/i&gt; season pass, and you can bet there is one thing that will get me to pause, rewind, slo-mo and call the wife in from the other room: when he brings out his &lt;A HREF="http://www.luxussoftware.com/"&gt;LX-Proscope&lt;/A&gt; and starts looking at the fine details of yeast, sugar, or most recently pretzel salt. Why? Because I wrote the Luxus software clearly displayed on his PowerBook. It was my first project using the Qt framework, and it turned out pretty good for what it was; I just wish they let had let me make a Cocoa version. Somebody told me they've also seen it being used on CSI. How cool is that?&lt;BR&gt;&lt;br /&gt;&lt;br /&gt;I bring this up because I was having a hard time finding Mr. Brown's e-mail address to correct his description of what constitutes an acidic solution. His chemistry knowledge is usually good, but not this week.&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-7577269704576679507?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.foodnetwork.com/food/show_ea/text/0,1976,FOOD_9956_50120,00.html' title='Alton Brown Uses My Software'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7577269704576679507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/7577269704576679507'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/06/alton-brown-uses-my-software.html' title='Alton Brown Uses My Software'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-12068616.post-141696752361243195</id><published>2007-06-20T08:50:00.000-04:00</published><updated>2007-06-20T16:09:42.086-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS X'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='market share'/><title type='text'>Which Mac OS X should I Support?</title><content type='html'>A critical decision any developer of Mac OS X software has to make is where to draw the line between users we can be troubled to support, and which users we can tell to come back when they have a newer operating system. It comes down to number of users, and effort to support. First, the numbers. According to Steve Job's recent &lt;A HREF="http://events.apple.com.edgesuite.net/d7625zs/event/" NAME="WWDC Keynote"&gt;WWDC keynote&lt;/A&gt; there are 15 million Tiger users, 5 million Panther users and 2 million users of older operating systems. &lt;br /&gt;&lt;BR&gt;&lt;IMG SRC="http://homepage.mac.com/grhowes/Blog/Mac_Users_By_Release.png" /&gt;&lt;BR&gt;&lt;br /&gt;This is for the overall Mac community; the market segment you intend to develop for may be different. Maybe you are targeting the elementary school market where 5 year purchasing cycles create huge pockets of happy 10.2.8 users (I guess). Or maybe you are targeting the top end photo editing business where the release of universal binary Photoshop has released a maelstrom of hardware and software purchasing the like not seen since the world was young (another guess). Temper these absolute numbers knowing somebody who hasn't shelled out money in 6 years to buy a new OS is unlikely to buy third party apps. Regardless, these are the numbers we have and what we'll use. &lt;BR&gt;&lt;br /&gt;Apple itself is always happy to tell its developers to forget about users of older releases--not in so many words. If these users find they cannot run some new application they will gradually feel the pressure to upgrade, and hopefully upgrade to new hardware, but even selling a $129 OS upgrade to some iBook G4 user is nearly pure profit to Apple. Also, Apple wants us to integrate new OS features: hard to do while still holding onto 10.2.8 support.&lt;BR&gt;&lt;br /&gt;There are over a million people out there running 10.2.8 and some small number running 10.1, and some unlucky few running 10.0 who couldn't be bothered to get the free 10.1 upgrade. Should developers support them? No.&lt;BR&gt;&lt;br /&gt;Why?&lt;UL&gt;&lt;LI&gt;You want to use invasive technologies like Core Bindings which  are 10.3 and above.&lt;/LI&gt;&lt;LI&gt;You won't be able to debug and still use the latest developer tools.&lt;/LI&gt;&lt;LI&gt;You are going to find that these people are 5% of your user base but manifest 50% of your bugs.&lt;/LI&gt;&lt;LI&gt;Your graphics are going to look awful, trust me.&lt;/LI&gt;&lt;/UL&gt;&lt;BR&gt;&lt;br /&gt;Realistically, only a product with a near 100% installed base and a huge development team like Acrobat Reader would even think about supporting 10.2, and look even Adobe's minimum OS is &lt;A HREF="http://www.adobe.com/products/acrobat/acrrsystemreqs.html#80mac"&gt;10.4.3&lt;/A&gt;.&lt;BR&gt;&lt;br /&gt;OK, well what about 10.3? Those 5 million users are awfully tempting. Yes they are. And I'd still lean against supporting them with any project you are starting today. Why? &lt;UL&gt;&lt;LI&gt;Debugging, while possible, is hard. Maybe you are the master of command line gdb or remote debugging, but I am not.&lt;/LI&gt;&lt;LI&gt;By the time you get finished October will be here and those 10.3 users will be squished into a smaller slice by Leopard.&lt;/LI&gt;&lt;LI&gt;There are many 10.4 specific technologies in Cocoa and Core Foundation that I'd like to use.&lt;/LI&gt;&lt;LI&gt;A one or two person team only has so much time, and there are a lot of better places to put your effort.&lt;/LI&gt;&lt;/UL&gt;&lt;BR&gt;&lt;br /&gt;So my advice is to target 10.4, and be thankful you never had to support Windows ME. The horror, the horror.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12068616-141696752361243195?l=www.sprinkleofcocoa.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/141696752361243195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12068616/posts/default/141696752361243195'/><link rel='alternate' type='text/html' href='http://www.sprinkleofcocoa.com/2007/06/which-mac-os-x-should-i-support.html' title='Which Mac OS X should I Support?'/><author><name>Glenn Howes</name><uri>http://www.blogger.com/profile/13657643977857888422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://bp0.blogger.com/_8qhoRNa6u-I/SDwtYLt-hDI/AAAAAAAAAAM/vIKu4r7nzas/S220/Glenn_Simpsonized.png'/></author></entry></feed>
