<?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-3458247764774806260</id><updated>2012-02-16T14:54:24.505-10:00</updated><category term='Scrivner'/><category term='Code'/><category term='NLP'/><category term='MacTech'/><category term='Internet'/><category term='AI'/><category term='DIY'/><category term='Conference'/><category term='bad science'/><category term='Writing'/><category term='iOS'/><category term='iPad'/><category term='Android'/><title type='text'>Freelance Mad Science</title><subtitle type='html'>Discussions about things I like: robotics, AI, Apple products, Lisp, Ruby, Smalltalk, Objective-C, DSLs, and probably the occasional, rage-induced rant about Java.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>40</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-175701939012896151</id><published>2011-04-04T08:01:00.001-10:00</published><updated>2011-04-04T08:02:46.441-10:00</updated><title type='text'>Blog Moving</title><content type='html'>I've moved my blog to www.freelancemadscience.com. I hope to have new things to announce there soon.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-175701939012896151?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/175701939012896151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=175701939012896151' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/175701939012896151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/175701939012896151'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2011/04/blog-moving.html' title='Blog Moving'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-2047685787191929918</id><published>2011-03-03T06:14:00.001-10:00</published><updated>2011-03-03T06:14:26.088-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DIY'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>What the frick is wrong with Instructables</title><content type='html'>I'm a big DIY nut. I admit, I don't have enough time to do any big projects on my own. My writing, coding and kids keep me pretty busy. But I love reading about other people's projects, and dreaming up things that I might try to do someday (when I have enough space, money and time).&lt;br /&gt;&lt;br /&gt;As a result, I've been following the &lt;a href="http://www.instructables.com/"&gt;Instructables&lt;/a&gt; feed for several years now. At first it was a very cool mix of interesting food and technology projects. Things that really inspired the imagination, with clear step-by-step instructions on how to do it yourself.&lt;br /&gt;&lt;br /&gt;Recently, however, I've noticed that a growing number of Instructable posts are either inane (e.g. "How to put on pants") or there simply someone showing off their own project without bothering to provide the step-by-step instructions. As a result, I've been growing more and more frustrated with the feed. And, I hate to admit it, but the time has come. Something must be done.&lt;br /&gt;&lt;br /&gt;This is actually a symptom of a broader internet problem. Something similar happened with Twitter's trending topics. At first, they were a great way to keep track of geek news--new movies, new technology, new video games, whatever. If it was a trending topic, I was probably interested in it. Now, however, they're almost useless to me. The Twitter demographic has clearly shifted to a more mainstream audience, and I just can't bring myself to care about Justin Bieber or Ke$ha. Ironically, I was going to use the current trending topics to prove my point, but Blade Runner is currently #2, so maybe all hope is not lost.&lt;br /&gt;&lt;br /&gt;Now the problem with Twitter and the problem with Instructables are not exactly the same. In Twitter's case, it's more of a lowest common denominator issue. For Instructables, that's part of the problem--more kids posting low-quality 'Ibles (not to pick on kids--I like to see them getting involved and trying new things--but if I see another "I'm 13 and this is my first 'Ible, please be nice" post that goes on to show me how to draw ligers using only blue and purple crayons, I may have to gouge out my own eyes). But there's also a ton of people posting "joke" 'Ibles (I use quotes, because they really aren't funny). This feels more like the comment troll problem, where a few individuals seem intent on entertaining themselves at everyone else's expense.&lt;br /&gt;&lt;br /&gt;In both cases (and in the internet at large), there's still a lot of really cool stuff going on. It's just getting harder and harder to find it. For Instructables, it's become painfully clear that sucking on the main RSS fire hose is no longer the way to go. I'll give the Editor's Pick or Popular feed a try. Hopefully that will give me a more-curated experience. For Twitter, I'll carefully select the people I follow, and blissfully ignore trending topics. For the internet at large--who knows. We've been struggling with this issue for years now, and while the battlefield shifts around a bit, it really hasn't gotten any better. &lt;br /&gt;&lt;br /&gt;We're still at the early days in this technology, where rampant growth and changes are the norm. The current hope is that social search will save us. I'm not so optimistic. Still, by the time the internet matures, we should have better tools for content discovery. But, who knows when (or if) that will occur. &lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-2047685787191929918?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/2047685787191929918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=2047685787191929918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/2047685787191929918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/2047685787191929918'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2011/03/what-frick-is-wrong-with-instructables.html' title='What the frick is wrong with Instructables'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-5502531373798044659</id><published>2011-02-17T06:38:00.001-10:00</published><updated>2011-02-17T06:38:34.270-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AI'/><category scheme='http://www.blogger.com/atom/ns#' term='NLP'/><title type='text'>Thoughts on Watson</title><content type='html'>Ok, let me start by admitting that I don't watch Jeopardy. I don't even own a TV. I have, however, been following the epic man-vs-machine battle that played out this week, and I must say, I'm honestly surprised. Not that the computer won. That was inevitable. If not this year, then someday soon. No, I was surprised that most of the people who commented on Watson's victory completely missed the point.&lt;br /&gt;&lt;br /&gt;If you look online (go ahead, you know you want to), you'll find a lot of people talking about how, of course, the computer won. They say its reaction time gave it an unfair advantage. That it could push its button faster, cutting out the human opponents. Or they talk about its database. Of course, if you load all that data into a machine, you'll be able to answer any trivia question with ease.&lt;br /&gt;&lt;br /&gt;In both cases, the commenters are fixating on the minor details and missing the main point. Watson was able to parse natural language questions and come up with reasonable answers. That was the hard part. That was the key accomplishment. Natural language processing is unbelievably difficult (trust me, I worked in the NLP lab as an undergraduate). Button pushing and database access are trivial.&lt;br /&gt;&lt;br /&gt;The interesting thin is, this shows our natural bias. As humans, parsing the question is easy, so easy we don't even think about it. Instead, we focus on the things that give us trouble. Do we know the answer? Can we beat our opponent to the buzzer? Those are the areas that concern us, so any perceived advantage in those areas seems grossly unfair. But, in doing this, we forget the first step. You must understand the question before you can answer it.&lt;br /&gt;&lt;br /&gt;This just highlights the differences between humans and computers. Our brains and Watson's brain have vastly different areas of competence. And lets face it, our brains work very hard to make many tasks seem trivial (object recognition, natural language processing, etc.). Even the dumbest Wheel of Fortune contestant has more processing power inside their skull than Watson could ever dream of. But here's the thing. Computers can always add more processing power. Human brains--not so much. Once computers get as complicated as a human brain, then things really get interesting.&lt;br /&gt;&lt;br /&gt;I will say, I am a bit more moved by Noam Chomsky's &lt;a href="http://www.framingbusiness.net/archives/1287"&gt;criticism of Watson&lt;/a&gt;, dismissing it as "a bigger steamroller". Chomsky claims that Watson doesn't really understand the questions. But, I'm not so sure. How do we measure understanding? It seems like this line of argument steps into a murky, metaphysical swamp, from which we can never escape.&lt;br /&gt;&lt;br /&gt;Instead, I tend to agree with Kurzweil's comments (from the same article):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Kurzweil says that Chomsky’s “answers are so brief that it is difficult to understand what he is trying to say. I would say that Watson is clearly not yet ‘strong AI’, but it is an important step in that direction. It is the clearest demonstration I’ve seen of computers handling the subtleties of language including metaphors, puns and jokes, something people had said would not be possible. I don’t agree with Chomsky that Watson is not impressive in that regard. As long as AI has any flaws or limitations, people will jump on these. By the time that the set of these limitations is nil, AI will have long since surpassed unaided human intelligence.”&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-5502531373798044659?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/5502531373798044659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=5502531373798044659' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5502531373798044659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5502531373798044659'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2011/02/thoughts-on-watson.html' title='Thoughts on Watson'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-805017052509899988</id><published>2011-01-12T19:44:00.001-10:00</published><updated>2011-01-12T19:44:36.638-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iOS'/><category scheme='http://www.blogger.com/atom/ns#' term='Code'/><title type='text'>Jumping into Existing Projects</title><content type='html'>For the last 6 months, I've had the good fortune to work on a number of awesome projects. Things that I would love to show to other people and brag about, but I always hesitate because they aren't unconditionally awesome--and they aren't all mine.&lt;br /&gt;&lt;br /&gt;As part of my contracting gig, I've jumped into a number of projects that were about 75% finished. My job was to polish them up and get them ready for the app store. While I'm really proud of the work I've done, there are several lingering problems that I really wish I could go back and "do right." Most of these are existing features that worked (more or less), and we just didn't have the time or money to fix.&lt;br /&gt;&lt;br /&gt;There were also a number of management-level decisions that I didn't entirely agree with. Things like the way we handled in-app ads. I mean, I understand. My client needs to make money. Hell, I want them to make money. After all, I want them to keep paying me. But, it would have been nice if we could have toned things down a bit. Still, they asked for it; I implemented it. No shame in that.&lt;br /&gt;&lt;br /&gt;Mostly, though, I don't want to look like I'm taking credit for someone else's work. After all, they lead the horse to water--I just got it to drink. Or, in other words, I didn't make it, I just made it awesome.&lt;br /&gt;&lt;br /&gt;The really weird thing is that this uneasy feeling goes cuts other way as well. I often find myself having trouble talking to my clients, especially when things start to go wrong.&lt;br /&gt;&lt;br /&gt;I mean, I don't want to be THAT guy. You know the one. The guy who is always whining about the last person who had his job. Always finding some way to blame them or excuse his poor performance on them. In an ideal world, I want to be the one who finds the problems, owns the problems and fixes the problems. But when my clients are pestering me for results, and I'm fighting to meet a tight deadline, and I just spent the last 15 hours cleaning up someone else's mess...well, it's hard to find a constructive way to express my concerns. I mean, let's be honest, (and I'm sure Obama would have my back here) sometimes it really is the Bush Administration's fault. Or in my case, it's the fault of whatever knuckle-typing orangutan they hired to cobble this thing together.&lt;br /&gt;&lt;br /&gt;Don't get me wrong, I love a good orangutan. But, let's face it, they are the hippies of the simian world. If you need a sidekick to ride on your hog and watch your back at the roadhouse, then a orangutan is definitely the way to go. But, despite the convincing neck beard, they should not be allowed anywhere near code.&lt;br /&gt;&lt;br /&gt;And I guess that's the real lesson here. Don't hire orangutans. They may work for bananas, but eventually you'll have to hire someone like me to come in and shovel out their poop. In the long run, those will become the most expensive bananas you've ever purchased.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-805017052509899988?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/805017052509899988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=805017052509899988' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/805017052509899988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/805017052509899988'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2011/01/jumping-into-existing-projects.html' title='Jumping into Existing Projects'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-9030961562489959156</id><published>2010-11-05T08:03:00.002-10:00</published><updated>2010-11-05T08:09:30.641-10:00</updated><title type='text'>From the Crazy Idea Lab</title><content type='html'>Hey,&lt;br /&gt;&lt;br /&gt;Over the last couple of days, an idea has begun to bubble up from the bottom recesses of my brain. Preparing and putting on my presentation just reminded me how much I enjoy teaching. As a result, I'm seriously considering putting together a few tech training courses. I think I'd like to start by focusing on "Intro to iOS Programming" classes, then possibly branch out into other topic areas (Ruby on Rails comes to mind). &lt;br /&gt;&lt;br /&gt;If anyone would be interested, please drop me a line. Also, let me know what sort of topics you would be interested in covering, as well as preferences for class length, etc.&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-9030961562489959156?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/9030961562489959156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=9030961562489959156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/9030961562489959156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/9030961562489959156'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2010/11/from-crazy-idea-lab.html' title='From the Crazy Idea Lab'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-6084855635978041936</id><published>2010-11-05T07:56:00.003-10:00</published><updated>2010-11-05T08:01:44.675-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MacTech'/><category scheme='http://www.blogger.com/atom/ns#' term='iOS'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>MacTech Conference</title><content type='html'>I'm sitting in the great hall on the last day of the MacTech conference. It's been a great 3 days. I've learned a lot, and had a chance to talk to so many interesting people. My presentation went over well (though, being between sandwiched between two of the best sessions all conference, I am afraid it may have been somewhat overshadowed). It was just about the right length. I'm starting to feel presentation fatigue just as things are wrapping up.&lt;br /&gt;&lt;br /&gt;I hope they will do this again next year.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-6084855635978041936?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/6084855635978041936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=6084855635978041936' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/6084855635978041936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/6084855635978041936'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2010/11/mactech-conference.html' title='MacTech Conference'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-3266306041302739732</id><published>2010-10-22T09:05:00.001-10:00</published><updated>2010-10-22T09:05:45.528-10:00</updated><title type='text'>Could Apple's App Store Lead to a More Open App Ecosystem?</title><content type='html'>The upcoming App store for Mac seems to have the internet in a mini-uproar. There seems to be a general fear that this is the narrow point of the wedge. That Apple's long term plan is to lock-down the Mac, the same way they have locked down the iPhone and iPad. And yes, that could be their end goal, but I can't help but wonder if maybe a desktop app store couldn't lead to more-open app stores across the board.&lt;br /&gt;&lt;br /&gt;Limiting the app ecosystem makes sense for a phone. By it's very nature, its a limited device. It's OK if it can't do everything--as long as it lets me accomplish useful tasks while I'm on the run. On the other hand, users expect to get more work done on their iPads. Not surprisingly, the iOS SDK loosened up considerably with the iPad's release. Before, each application was kept entirely in its own sandbox. Now we can move files from one app to the next. It may not be complete access to the file system, but it has vastly improved the iPad's usefulness.&lt;br /&gt;&lt;br /&gt;Soon we will have a full-blown desktop app store. Most of the excused given for limiting apps simply don't apply. We're no longer dealing with devices that have severely limited resources. We no longer need to worry about upsetting AT&amp;T. Users don't need to jail break their computers to load applications from outside the app store. Most importantly, users will have even higher expectations on what applications can and should be able to do. This will create a considerable amount of pressure on Apple to open up the process, and despite what many people think, Apple is not immune to pressure.&lt;br /&gt;&lt;br /&gt;In many ways, Apple is already on a slow path towards loosening restrictions on the iOS app store. They've lifted the ban on third-party languages. They've published a more specific list of their requirements. They continually add new features to the SDK that allow access to previously restricted features on iOS devices. I fully expect this trend will continue as Apple feels their way through what is obviously a tricky and difficult issue. I also expect this trend will accelerate once we have a desktop App store. It won't happen overnight, and it won't be perfect. But, I have a feeling that the Mac App Store will be a good thing for the larger App ecosystem.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-3266306041302739732?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/3266306041302739732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=3266306041302739732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/3266306041302739732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/3266306041302739732'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2010/10/could-apple-app-store-lead-to-more-open.html' title='Could Apple&amp;#39;s App Store Lead to a More Open App Ecosystem?'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-7187066105046884041</id><published>2010-10-13T11:46:00.001-10:00</published><updated>2010-10-13T11:55:34.737-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iOS'/><category scheme='http://www.blogger.com/atom/ns#' term='Code'/><title type='text'>Changing the transition animation for an UINavigationController</title><content type='html'>I love the UINavigationController class for iOS. It's a great framework for managing a wide range of view-swapping applications, and we get the transition between views for free.&lt;br /&gt;&lt;br /&gt;But, what if we want to use a different type of transition animation? UINavigationController only has one option--the new view slides in from the right while the old view slides off the left. There's no direct mechanism, but it turns out that it's not too hard to manage, at least for a select set of transitions.&lt;br /&gt;&lt;br /&gt;First, lets look at the UIView methods. The navigation controller has its own view, which will contain the subviews we wish to manage. in iOS 4.0 and later, we can use that view's block-based animation.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;[UIView &lt;br /&gt;  transitionWithView:self.navigationController.view&lt;br /&gt;            duration:1.0&lt;br /&gt;             options:UIViewAnimationOptionTransitionCurlDown&lt;br /&gt;          animations:^{ &lt;br /&gt;             [self.navigationController &lt;br /&gt;                 pushViewController:self.alternateView &lt;br /&gt;                 animated:NO];&lt;br /&gt;          }&lt;br /&gt;          completion:NULL];&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;    &lt;br /&gt;Note: when we actually call pushViewController: we are setting the animated value to NO. This disables the Navigation Controller's default animation. Instead, the block of code uses the defined transition (in this case UIViewAnimationOptionTransitionCurlDown).&lt;br /&gt;&lt;br /&gt;The same thing can be done using iOS 2.0 or later (although, you cannot submit anything older than 2.0 at this time). &lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;[UIView beginAnimations:@"transition" context:nil];&lt;br /&gt;[UIView setAnimationDuration:1.0];&lt;br /&gt;    &lt;br /&gt;[UIView &lt;br /&gt;  setAnimationTransition:UIViewAnimationTransitionCurlDown &lt;br /&gt;                 forView:self.navigationController.view &lt;br /&gt;                   cache:NO];&lt;br /&gt;&lt;br /&gt;[self.navigationController &lt;br /&gt;  pushViewController:self.alternateView animated:NO];&lt;br /&gt;    &lt;br /&gt;[UIView commitAnimations];&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Also notice, the two methods use two slightly different constants to define the view type. However, they both support the same four options: curl up, curl down, flip left and flip right.&lt;br /&gt;&lt;br /&gt;We can get a different set of transitions by setting a transition animation for the Navigation Controller's view's Core Animation Layer.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;CATransition* transition = [CATransition animation];&lt;br /&gt;transition.duration = 1.0;&lt;br /&gt;transition.type = kCATransitionFade;&lt;br /&gt;transition.subtype = kCATransitionFromTop;&lt;br /&gt;&lt;br /&gt;[self.navigationController.view.layer &lt;br /&gt;  addAnimation:transition forKey:kCATransition];&lt;br /&gt;    &lt;br /&gt;[self.navigationController &lt;br /&gt;  pushViewController:self.alternateView animated:NO];&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;There's one big difference here. The other animations were local. They only affected the code within the block (or between the beginAnimations and commitAnimations calls). This is a global change, and will continue to affect the Navigation Controller's behavior until it is changed again (or cleared by setting the animation to nil). &lt;br /&gt;&lt;br /&gt;This also has four options: fade in, move in, push or reveal. For all but the fade, you can also set the direction of motion (from the top, bottom, left or right--though the iPhone seems to reverse the top and bottom options). We've already seen the push animation--the default behavior is a push from the right. Move in simply slides the new view over the existing one. Reveal pulls the old view away, revealing the existing one. While fade simply cross-fades from one view to the next.&lt;br /&gt;&lt;br /&gt;I really wish there was an easy way to do other animated transitions (for example, having a view appear to grow from the center of the screen, or shrink into the center of the screen). But, I suspect those would take a lot of work at the CALayer level. I made a few attempts using regular animation blocks and altering the size of the incoming view. I could get the size to animate, but the old view simply vanished, leaving my new view to appear over a white background. Not what I wanted at all.&lt;br /&gt;&lt;br /&gt;Still, there's a lot of cool effects you could produce with just these options. Happy hacking!&lt;br /&gt;&lt;br /&gt;-Rich-&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-7187066105046884041?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/7187066105046884041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=7187066105046884041' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/7187066105046884041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/7187066105046884041'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2010/10/changing-transition-animation-for.html' title='Changing the transition animation for an UINavigationController'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-3666035652890236122</id><published>2010-09-29T07:03:00.001-10:00</published><updated>2010-09-29T07:03:52.898-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Writing'/><category scheme='http://www.blogger.com/atom/ns#' term='iPad'/><category scheme='http://www.blogger.com/atom/ns#' term='Scrivner'/><title type='text'>Testing out Scrivner</title><content type='html'>So, I finally broke down and started testing out Scrivner. For those who don't know, it's basically a word processor specifically designed for writers. It allows you to organize and work on large writing projects, and it has been highly recommended by just about everyone. &lt;br /&gt;&lt;br /&gt;So far I like it. With one exception.&lt;br /&gt;&lt;br /&gt;Let me take a quick step back here, and say that I've listened to a lot of people talk about how the iPad is a great media consumption device, but that it sucks for media creation. I disagree. I use my iPad all the time. However, I use it differently than my desktop.&lt;br /&gt;&lt;br /&gt;For example, brainstorming. I love MindNotes. It's the first computerized mind-mapping software that I felt was realistically useable. In fact, I now prefer it to paper. It's almost as easy to use, and I can so easily move things around, or export the results to use in other programs. In fact, my only complaint is that I cannot connect items into loops. I'd really like to be able to draw additional connections between existing nodes.&lt;br /&gt;&lt;br /&gt;I am also a big fan of Pages on the iPhone. Don't get me wrong, I would never sit down and write anything of significant length. However, for editing documents, it is absolutely brilliant. Again, I probably prefer editing on my iPad to editing on my computer. In the old days (back when dinosaurs walked the earth--you know, the 90's), I would typically print out hard copies when editing, mark them up, then go back to the keyboard to make the changes. I find that editing on the iPad gives me almost all the advantages I found in working on hardcopies (very portable, a uni-tasking environment, easy to mark up with notes and comments), with the added bonus of removing the tedious final step. I can make the changes directly on the iPad, and just export them back.&lt;br /&gt;&lt;br /&gt;In fact, I wish someone would develop a word processor on the iPad that really focused on making it a good editing tool. I'm not entirely sure what that would entail, but I can feel the general shape of it.&lt;br /&gt;&lt;br /&gt;Enter Scrivner.&lt;br /&gt;&lt;br /&gt;Scrivener, in many ways, has the ability to become an excellent editing platform. I love the way I work with scene-sized blocks of text. And it feels like there should be some sort of synergy between the outlining in Scrivner and the outlining I already perform in MindNotes. Mostly, it just feels like there should be some way of getting the peanut butter of Scrivener into the chocolate that is editing on the iPad.&lt;br /&gt;&lt;br /&gt;But there isn't. And it doesn't sound like the folks at Scrivner have any interest in making one. And that's a sad, sad thing.&lt;br /&gt;&lt;br /&gt;Sure, I could export the Scrivner document as a word doc, then import it into Pages on my iPad. But, I cannot round trip the document back into Scrivner (or at least, I don't know how to). And that may turn out to be a deal-breaker for Scrivner.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-3666035652890236122?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/3666035652890236122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=3666035652890236122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/3666035652890236122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/3666035652890236122'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2010/09/testing-out-scrivner.html' title='Testing out Scrivner'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-5586844858713680673</id><published>2010-09-28T09:07:00.004-10:00</published><updated>2010-09-28T09:34:38.667-10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bad science'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='iOS'/><title type='text'>"Developers prefer Android" is Bogus</title><content type='html'>Ok, I know I'm a huge iOS fanboy, and given the amount of time and energy I've invested in learning the platform, I have a vested interest in its success. But, I'd hope that I'd be a bit miffed at these headlines, even if the situation where reversed.&lt;br /&gt;&lt;br /&gt;Today CNet posted the following article &lt;a href="http://news.cnet.com/8301-13579_3-20017903-37.html?part=rss&amp;subj=news&amp;tag=2547-1_3-0-20"&gt;Survey: Developers favor Android over Apple long-term&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;OK, first off, let's be accurate here. There is a 59% to 35% split in the surveyed population that says Android has the best long-term outlook. Which is very different from developer's preferring Android. I prefer Lisp to Java, but its pretty obvious that Java has had the better long-term outlook.&lt;br /&gt;&lt;br /&gt;But what really upsets me is the science behind the survey. This was a survey of 2,363 Appcelerator Titanium developers. For those of you who don't know (and I didn't until I looked into it) Appcelerator Titanium lets you write cross-platform iOS/Android applications using HTML, JavaScript and CSS. In other words, these aren't your typical iOS developers, and will be heavily biased towards people who are interested in making cross-platformed apps.&lt;br /&gt;&lt;br /&gt;It is not surprising, given the selection bias, that Android polled favorably. Also, overall iOS didn't do too badly. You might even say it kicked ass. Here's the iOS vs. Android rundown from &lt;a href="http://www.appcelerator.com/mobile-developer-report-September-2010/"&gt;the poll&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_gBXd-b6PMC4/TKJCM2VB5yI/AAAAAAAAAAM/r8u81pJsxgE/s1600/poll.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 316px;" src="http://1.bp.blogspot.com/_gBXd-b6PMC4/TKJCM2VB5yI/AAAAAAAAAAM/r8u81pJsxgE/s320/poll.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5522048881619232546" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-5586844858713680673?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/5586844858713680673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=5586844858713680673' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5586844858713680673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5586844858713680673'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2010/09/developers-prefer-android-is-bogus.html' title='&quot;Developers prefer Android&quot; is Bogus'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_gBXd-b6PMC4/TKJCM2VB5yI/AAAAAAAAAAM/r8u81pJsxgE/s72-c/poll.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-4988537786593229945</id><published>2010-09-24T08:38:00.001-10:00</published><updated>2010-09-24T08:38:24.602-10:00</updated><title type='text'>MacTech Conference</title><content type='html'>If you liked my articles, come see my presentation at http://macte.ch/conf_warren. &lt;br /&gt;&lt;br /&gt;Or, more importantly, come see the the presenters. It looks like it will be quite a gathering.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-4988537786593229945?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/4988537786593229945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=4988537786593229945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/4988537786593229945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/4988537786593229945'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2010/09/mactech-conference.html' title='MacTech Conference'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-5717556893903058612</id><published>2010-09-24T05:28:00.001-10:00</published><updated>2010-09-24T05:28:46.372-10:00</updated><title type='text'>Throwing off the shackles of a reliable paycheck</title><content type='html'>So, the move is mostly behind us. I've traded the nice beaches of Hawaii for Houston. Somehow that feels like a step down. The beach is farther away, and the hurricanes are worse.&lt;br /&gt;&lt;br /&gt;Still, I'm now freelancing full time. I'm trying to focus on iPad/iPhone work and tech writing, but I'm willing to stray for interesting technologies (Ruby, Smalltalk, Objective-C) or for applied AI.&lt;br /&gt;&lt;br /&gt;So, if you know anyone who needs an iOS gunslinger for hire, let them know that I'm available.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-Rich-&lt;br /&gt;&lt;p class='blogpress_location'&gt;Location:&lt;a href='http://maps.google.com/maps?q=W%20Holcombe%20Blvd,Houston,United%20States%4029.705274%2C-95.424907&amp;z=10'&gt;W Holcombe Blvd,Houston,United States&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-5717556893903058612?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/5717556893903058612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=5717556893903058612' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5717556893903058612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5717556893903058612'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2010/09/throwing-off-shackles-of-reliable.html' title='Throwing off the shackles of a reliable paycheck'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-425291337147318311</id><published>2010-05-14T10:54:00.001-10:00</published><updated>2010-05-14T10:54:32.900-10:00</updated><title type='text'>Has Google Wave gone the way of cold fusion?</title><content type='html'>So, I realized this morning that I hadn't logged into Google Wave since February. I was never a big wave user, even at the best of times. However, I noticed that all the waves I had been following appear to be long dead. &lt;br /&gt;&lt;br /&gt;I don't hear much about it in the tech news lately either. &lt;br /&gt;&lt;br /&gt;On the other hand, a quick search of with:public shows a lot of activity, so maybe it's just me. I like the idea of Wave, but seem to have trouble fitting it into my digital lifestyle.&lt;br /&gt;&lt;br /&gt;Is it just me? Is anyone out there actually using Wave? And, if so, what do you use it for?&lt;br /&gt;&lt;br /&gt;-Rich-&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-425291337147318311?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/425291337147318311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=425291337147318311' title='32 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/425291337147318311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/425291337147318311'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2010/05/has-google-wave-gone-way-of-cold-fusion.html' title='Has Google Wave gone the way of cold fusion?'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>32</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-8514548291116497940</id><published>2010-05-13T11:17:00.001-10:00</published><updated>2010-05-13T11:17:53.273-10:00</updated><title type='text'>Why does Apple hate MobileMe?</title><content type='html'>Ok, so I've got this new iPad. While I truely love it, there is one slight problem. Syncing documents back and forth is just a little too complicated for my tastes. But, that's OK. I mean, Apple has this other, cool technology called MobileMe. It's specifically designed to help us keep all our computers in sync. It even has an app in the app store. So, I can use MobileMe to shuffle files onto my iPad...except, the MobileMe app is still iPhone only. Oh, you can run it on the iPad, but it does not support opening files using other applications, which makes it pretty much useless.&lt;br /&gt;&lt;br /&gt;No worries. The iPad has a full web browser. MobileMe has a full-feature web interface. I can just open up www.me.com and download my files from there...except, www.me.com only gives me access to an iPad specific version of the web page. Sure, it has instructions for setting up email and contact syncing, and for installing the various (iPhone only) apps. That's nice I guess. Oh, and I can even access "Find My iPhone," but I cannot access iDisk directly. Yes, that's right. I can find my iPad from my iPad, but I cannot download a PDF file and open it in GoodReader.&lt;br /&gt;&lt;br /&gt;So, the bottom line is, there comes a time in every man's life when you just stop beating your head against the wall and start using DropBox. Just sayin'.   &lt;br /&gt;&lt;br /&gt;-Rich-&lt;br /&gt;&lt;br /&gt;PS: To all the web developers whose pages redirect my iPad to a stupid mobile version. Stop! It! Now! I swear to all the TCP/IP gods, if you keep this up I will hunt you down and punch you in the throat.&lt;br /&gt;&lt;p class='blogpress_location'&gt;Location:&lt;a href='http://maps.google.com/maps?q=Spencer%20St,Honolulu,United%20States%4021.307341%2C-157.846172&amp;z=10'&gt;Spencer St,Honolulu,United States&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-8514548291116497940?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/8514548291116497940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=8514548291116497940' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/8514548291116497940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/8514548291116497940'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2010/05/why-does-apple-hate-mobileme.html' title='Why does Apple hate MobileMe?'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-7505923244978492210</id><published>2010-05-06T17:05:00.001-10:00</published><updated>2010-05-06T17:05:30.717-10:00</updated><title type='text'>What would you like to see?</title><content type='html'>I'm about to start working on another set of iPhone/iPad articles. Are there any topics you'd like to see covered? Leave a note in the comments, and I'll see what I can do. &lt;br /&gt;&lt;br /&gt;-Rich-&lt;br /&gt;&lt;p class='blogpress_location'&gt;Location:&lt;a href='http://maps.google.com/maps?q=Waialae%20Ave,Honolulu,United%20States%4021.282782%2C-157.798617&amp;z=10'&gt;Waialae Ave,Honolulu,United States&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-7505923244978492210?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/7505923244978492210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=7505923244978492210' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/7505923244978492210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/7505923244978492210'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2010/05/what-would-you-like-to-see.html' title='What would you like to see?'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-5825766757704552461</id><published>2010-05-02T14:37:00.001-10:00</published><updated>2010-05-02T14:37:21.695-10:00</updated><title type='text'>iPad as ebook reader</title><content type='html'>When it comes to just reading text,  I much prefer my Kindle. I know a lot of people say they don't notice any eye strain when reading from the iPad, but boy I sure do. Especially if I'm already tired. Now, admittedly, I will gladly spend several hours reading a good novel at one sitting, so I might not be a representative sample.&lt;br /&gt;&lt;br /&gt;But, here's where things get interesting. I tend to read four things: novels, computer books research papers, and pen and paper RPGs. Of these, only the novel plays nice with the Kindle. The Mobi ebook format just doesn't handle the formatted text well. Yes, several computer book publishers have worked very hard to make Kindle compatible versions of their books, but the end result always feels a lot clunkier than either their epub or PDF equivalents. And many books (not to mention all research papers and RPGs) are only available in PDF. The less said about the Kindle's PDF support, the better.&lt;br /&gt;&lt;br /&gt;With the help of some third party apps, the iPad can easily handle all three common ebook formats. It may not be the best ebook reader, but it is the one reader to rule them all. So, while I may prefer to read on my Kindle, I think I may find myself spending more and more time reading on the iPad.     &lt;br /&gt;&lt;br /&gt;-Rich-&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-5825766757704552461?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/5825766757704552461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=5825766757704552461' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5825766757704552461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5825766757704552461'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2010/05/ipad-as-ebook-reader.html' title='iPad as ebook reader'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-3792310560549055449</id><published>2010-05-01T12:19:00.000-10:00</published><updated>2010-05-01T12:21:38.016-10:00</updated><title type='text'>The age of the iPad</title><content type='html'>Ah, yes. I finally got my hands on an iPad. Yes, I know I'm a month late, coming to the party, but. I really wanted to wait for the 3G iPad. There's been a lot of chatter about which device users should choose. I suspect it depends on how you look at things. If the iPad is  primarily a couch computer for media consumption, then WiFi is for you. If it's primarily a mobile device, then you'll want 3G. Personally, I prefer to work outside the house/office as much as possible. So, I'm mobile all the way.&lt;br /&gt;&lt;br /&gt;I've only spent a few hours with the device so far, so it's too early to give anything but very superficial initial reactions.&lt;br /&gt;&lt;br /&gt;In general, I love the richer UI. There are so many more possibilities than on the iPhone. But, of course, with great power comes great responsibility. Some iPad apps actually feel a lot less useful than their iPhone equivalents I'm looking at you, Mail. Admittedly, I'm trying to use Mail to manage four different email accounts. But, bopping between accounts never bothered me on the iPhone. On the iPad, however, it feels a lot clunkier. &lt;br /&gt;&lt;br /&gt;Similarly, I love having official support for transferring documents to and from the iPad. I don't even mind having to physically plug the iPad into my computer (though Mobile Me based document syncing would totally rock...just sayin'). But, why oh why has apple forced us into a process that must be 100% manual! Ok, fine. Funnel everything through iTunes. I'm OK with that too. But please, let the app drop boxes appear as folders or drives in the finder. Or, at the very least, give us Automator or AppleScript support for slurping these files around.&lt;br /&gt;&lt;br /&gt;Most surprisingly, I find the onscreen keyboard much more useful than I would had expected. With the help of the autocorrection, I can type at almost full speed. I mean, I've written this entire post on my iPad. I'd never have managed anything this length using the iPhone keyboard. And I'll probably get faster as I use it more. While a Bluetooth keyboard would br nice, I think I'll favor mobility over raw typing speed, and just go commando.&lt;br /&gt;&lt;br /&gt;Well, that's it for now. I'm going to give myself a couple days to just explore the device as a user, before I really start looking at it as a developer.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-3792310560549055449?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/3792310560549055449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=3792310560549055449' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/3792310560549055449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/3792310560549055449'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2010/05/age-of-ipad.html' title='The age of the iPad'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-5886058837925361386</id><published>2010-02-05T11:14:00.001-10:00</published><updated>2010-02-05T11:14:34.627-10:00</updated><title type='text'>iPhone Uproar Revisited</title><content type='html'>Just wanted to add a quick note.&lt;br /&gt;&lt;br /&gt;In my last post, I poo-pooed those moaning and crying about the lack of multitasking. And, in general, I think my criticism is valid. Most people want multitasking just to say they have multitasking, not because it will actually improve or affect the experience of using the device at all. &lt;br /&gt;&lt;br /&gt;However, there is one edge case that is rather important to some people. You cannot listen to Pandora (or similar services) and use other apps at the same time. &lt;br /&gt;&lt;br /&gt;For me, it's not a big deal. I like Pandora, and I find this occasionally irritating. But, I have a rather large library on iTunes (the "My Favorites" playlist has nearly 24 hours of music in it alone), and I've invested a lot of time organizing playlists for different moods. And Apple's built in iPod app multitasks just fine.&lt;br /&gt;&lt;br /&gt;But, if you're a big Pandora user, this could be a deal killer.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-5886058837925361386?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/5886058837925361386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=5886058837925361386' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5886058837925361386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5886058837925361386'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2010/02/iphone-uproar-revisited.html' title='iPhone Uproar Revisited'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-594566541378533176</id><published>2010-01-29T15:46:00.001-10:00</published><updated>2010-01-29T15:46:56.537-10:00</updated><title type='text'>iPad Uproar!</title><content type='html'>Wow. Apple seems to have kicked over the beehive this time. Everyone's talking about the iPad, and I thought I would add my small voice to the roar.&lt;br /&gt;&lt;br /&gt;My impression, it's a slick device that will be a lot of fun to use for media consumption and light content generation. I don't expect it to replace my laptop. I don't think it will change the world, but I do have an iPad-size hole in my life. Once I can get my hands on one, it will definitely be put to good use.&lt;br /&gt;&lt;br /&gt;Interestingly, a lot of the day-after press that I have seen has been very negative. This isn't that surprising. The iPad, like the iPhone before it, is a very closed environment, and that doesn't sit well with some people. Still, some of the reaction seems to be a bit knee-jerk. And I wanted to address some of that criticism here.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;It's not really mobile&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;OK, I'm not sure what people are complaining about. Yes, you can't fit it into your jeans pocket. Big deal. If that's what you want, buy an iPod Touch. &lt;br /&gt;&lt;br /&gt;See, I remember the early days of mobile computing. Where you had a 25 lb. box, the keyboard clamped onto the front, and you had to heft it using a luggage-style handle bolted to the top. So maybe I have a different understanding of the word "mobile" than most folks.&lt;br /&gt;&lt;br /&gt;Here's the thing. The iPad is smaller than my laptop. The iPad is smaller than a stack of text book. In many cases, I will be able to use it instead, greatly reducing the amount of gear that I need to lug around. To me, that's mobile.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;It's just a big iPhone&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Well, size has a quantity all its own. The additional screen real estate will allow developers to build applications that just wouldn't work on the iPhone.&lt;br /&gt;&lt;br /&gt;But, even if it is just a big iPhone, so what. My iPhone has already replaced a lot of the work I used to do on my laptop. My biggest complaint, the screen is too small. Give me a bigger screen. Make it a little easier to browse the web and do email, and I'll be ecstatic. For me, one of the biggest features will be the ability to read full-page PDFs without having to squint at microscopic type. I print out a lot of research papers because I don't yet have a good alternative. If it's a two-column document I can stick it on my iPhone and zoom in on a single column at a time. That works OK. A bigger iPhone would let me comfortably read even the single-column articles. &lt;br /&gt;&lt;br /&gt;And don't even get me started about the gaming opportunities.&lt;br /&gt;&lt;br /&gt;So yes, a bigger iPhone would be nice.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;A netbook can do everything the iPad does, and do it cheaper&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This ignores the whole touch interface, the accelerometers, GPS and a host of other features. I think the touch interface is going to be a big winner here, once people actually get their hands on the device. It's a much more natural way to interact with software than the traditional mouse/keyboard combination, at least judging by the number of fingerprints I keep finding on my laptop's screen.&lt;br /&gt;&lt;br /&gt;Being able to reposition the screen between landscape and portrait mode is also very nice. Even nicer, applications can detect this change and respond in interesting, useful ways.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;It doesn't support a mouse?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You can buy the keyboard dock or link the iPad with any bluetooth keyboard (which makes Apple's tiny bluetooth keyboard suddenly very attractive). But you cannot link with a bluetooth mouse. This fact has made some peoples head explode.&lt;br /&gt;&lt;br /&gt;Here's the thing. The iPhone OS doesn't have a mouse pointer. How would you even use a mouse. And why would you want to, when you can just tap the object directly. &lt;br /&gt;&lt;br /&gt;A multi-touch interface allows a considerably wider range of interaction than most mice. Yes, long term mouse users may find the mouse more accurate--but, if you've ever watched a newbie use a mouse, you know that accuracy is a learned skill, not an inherent feature of the interface.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;It doesn't support multi-tasking&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Why is multitasking such a big deal? To me, multitasking is mostly needed when two or more applications are running on the same screen. The iPad is specifically designed to have each application take up the entire screen. And I think that's the right decision for devices like this.&lt;br /&gt;&lt;br /&gt;So, as long as an application saves it state as you use it, restarts wherever you left off, and opens and closes quickly, moving between applications isn't a problem, even without multitasking.&lt;br /&gt;&lt;br /&gt;Already, on the iPhone I can be writing an email, close the email-app to look up a word using a dictionary app. Copy the correct spelling, and reopen and paste the word. It's really quite seamless. I've seen bigger delays when switching tasks on multi-tasking machines. And there are definite technical advantages to only doing one thing at a time.&lt;br /&gt;&lt;br /&gt;There is, however, one place where multitasking would be useful. Every once in a while, I find myself waiting for an application to download a big file. I would like to switch to a different app until the download was finished. It's not a big deal, but some sort of limited multitasking would be nice.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;It doesn't support Flash&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;OK, this is the one complaint that I agree with. Mind you, I don't like Flash. I think HTML 5.0 is a much more compelling and robust technology. But, I also think it's ridiculous to expect everyone else to rewrite their web pages just because I have a new gadget. &lt;br /&gt;&lt;br /&gt;The iPad is supposed to be a premium web-browsing tool. So, its annoying that it cannot be used to access broad swaths of the web.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-594566541378533176?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/594566541378533176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=594566541378533176' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/594566541378533176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/594566541378533176'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2010/01/ipad-uproar.html' title='iPad Uproar!'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-6399027344973577718</id><published>2009-08-23T10:27:00.002-10:00</published><updated>2009-08-23T10:35:33.587-10:00</updated><title type='text'>iPhone App Released.</title><content type='html'>Hey,&lt;br /&gt;&lt;br /&gt;So, my iPhone app has finally been released. My work had me develop this for them over Christmas, then it kinda fell between the cracks for a bit. But, it's out now and in the wild.&lt;br /&gt;&lt;br /&gt;The app lets you take a picture (or select a picture from your photo album), and converts it into a "coloring book," where you can select a color then touch a segment to fill it in. You can turn on and off the segment lines, and adjust how much the underlying image shows through.&lt;br /&gt;&lt;br /&gt;If you have an iPhone, search for "ColorIt!" in the app store.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-6399027344973577718?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/6399027344973577718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=6399027344973577718' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/6399027344973577718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/6399027344973577718'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2009/08/iphone-app-released.html' title='iPhone App Released.'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-4375350876189886288</id><published>2009-04-22T23:04:00.003-10:00</published><updated>2009-04-22T23:12:58.498-10:00</updated><title type='text'>Something's up with the source code</title><content type='html'>First, I want to apologize to everyone whose emailed me. I'm sorry I haven't gotten back in touch with you. I've been incredibly busy the last few months, and I just haven't had a chance to look into the issue yet.&lt;br /&gt;&lt;br /&gt;Having said that, let me backtrack and start at the beginning. Apparently (judging from the emails) there is a problem with the source code for my 2-part iPhone Productivity Application article in MacTech. And the code does not compile.&lt;br /&gt;&lt;br /&gt;As I said earlier, I haven't had a chance to look at this yet. However, here is some background information. As you may know, MacTech accidentally printed the articles out of order. To make things even more confusing, I changed some of the source code between the first and second version. No, I don't remember exactly what I changed--just cleaned things up a bit as I remember. Anyway, I provided MacTech with two copies of the source code. Both compiled fine on my machine (though I didn't test them on others). I think they should be pretty compatible, but obviously I only tested the first set of source code with the first article, and the second set with the second.&lt;br /&gt;&lt;br /&gt;So, if MacTech only has one version online, I'm not sure which one it is. Also, the SDK has changed somewhat since I originally wrote the code. It shouldn't have affected anything, but if you're compiling against a newer (or for that matter, an older version of the SDK), the code might not work. I believe I compiled it against version 2.0, but I'm not sure.&lt;br /&gt;&lt;br /&gt;I will try to look into this more in the near future. If you've had any success with the source code, please go ahead and add a comment with whatever information you have.&lt;br /&gt;&lt;br /&gt;Thanks, and sorry for the confusion.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-4375350876189886288?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/4375350876189886288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=4375350876189886288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/4375350876189886288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/4375350876189886288'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2009/04/somethings-up-with-source-code.html' title='Something&apos;s up with the source code'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-1202847178825736021</id><published>2009-02-25T22:50:00.001-10:00</published><updated>2009-02-25T22:50:50.521-10:00</updated><title type='text'>iPhone Production Application Articles</title><content type='html'>Well, this is really old news by now. I wanted to post something about it earlier, but never seemed to find the time.&lt;br /&gt;&lt;br /&gt;Apparently there was a mixup at MacTech magazine, and my two-part article on developing productivity applications was printed out of order. Part II came out in February's issue. I'm not sure whether Part I will follow in March.&lt;br /&gt;&lt;br /&gt;However, there is an upside to this. The good folks at MacTech have released both articles in their entirety onto the web. So, I encourage you to check them out:&lt;br /&gt;&lt;br /&gt;Part I: &lt;a href="http://www.mactech.com/articles/mactech/Vol.25/25.03/iPhoneProductivityApplicationsPart1/"&gt;http://www.mactech.com/articles/mactech/Vol.25/25.03/iPhoneProductivityApplicationsPart1/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Part II: &lt;a href="http://www.mactech.com/articles/mactech/Vol.25/25.02/iPhoneProductivityApplicationsPart2/"&gt;http://www.mactech.com/articles/mactech/Vol.25/25.02/iPhoneProductivityApplicationsPart2/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm also currently working on a third iPhone article, this time focusing on  immersive apps, images and Quartz 2d.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-1202847178825736021?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/1202847178825736021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=1202847178825736021' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/1202847178825736021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/1202847178825736021'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2009/02/iphone-production-application-articles.html' title='iPhone Production Application Articles'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-5384282356628651321</id><published>2009-02-04T17:51:00.001-10:00</published><updated>2009-02-04T17:51:53.498-10:00</updated><title type='text'>Things that bug me about Objective-C (and iPhone development)</title><content type='html'>Ok, before I get started, don't get me wrong. Objective-C is still one of my favorite programming languages. But, as I continue to use it, I can't help but feel that it has some rough edges. &lt;br /&gt;&lt;br /&gt;First, it has the same essential flaw as Java. It's not a pure Object-oriented language. There is this dichotomy between things that are objects and things that are not. For example, you cannot put a raw int or a c-style array into an NSArray--not without wrapping it first. &lt;br /&gt;&lt;br /&gt;In some ways, this gives us a lot of power. We can drop down and write lower-level code when the performance demands require it. And, when working on a limited device (like the iPhone), those demands can be frequent. But I feel it's a bad design choice. It encourages mixing C and Objective-C, and I think the two programming styles are best kept separate.&lt;br /&gt;&lt;br /&gt;I guess the biggest problem with Objective-C is really just C. Anytime I have to use C code, I loose many of the strengths and benefits of using Objective-C. I also expose myself to pointer and array-overrun errors. These are often the hardest to debug, since they may appear as mysterious errors in unrelated parts of the application.&lt;br /&gt;&lt;br /&gt;And then we get to the iPhone. I love Xcode and I love the iPhone, but sometimes the two just don't play well together. Yes, debugger, I'm looking at you. I mean, really. What's up with the breakpoints? Sometimes they work. Sometimes they don't. Sometimes I can trick them into working again by cleaning all targets and rebuilding. Other times I have to reboot the computer. One time I could only fix the problem by reinstalling Xcode.&lt;br /&gt;&lt;br /&gt;OK, that's it. Enough complaining for one day.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-5384282356628651321?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/5384282356628651321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=5384282356628651321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5384282356628651321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5384282356628651321'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2009/02/things-that-bug-me-about-objective-c.html' title='Things that bug me about Objective-C (and iPhone development)'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-4598907648066705060</id><published>2009-01-28T22:42:00.001-10:00</published><updated>2009-01-28T22:42:09.540-10:00</updated><title type='text'>Lessons in iPhone Development</title><content type='html'>I've been spending a lot of time working on iPhone projects, and I've learned a couple of important lessons (the hard way).&lt;br /&gt;&lt;br /&gt;1) Computationally intensive code runs slow on the iPhone. When it comes to raw number crunching, code ran 60 times slower on the iPhone than on my old MacBook Pro. If it takes one second on the simulator, it will need at least a minute on the phone.&lt;br /&gt;&lt;br /&gt;Even worse, something that is so fast that you cannot even see it in the simulator may take several seconds to complete. This can cause all sorts of unexpected problems. The lesson here, test everything on the phone as early as possible.&lt;br /&gt;&lt;br /&gt;2) The camera image picker is apparently designed to be used only once then thrown away. The photo library picker (even though they're the same class) doesn't seem to have this limitation. &lt;br /&gt;&lt;br /&gt;I put both in tabbed windows, so the user could easily switch images. The user could return to the photo library picker as many times as they wished. However, the camera picker would only take a single picture, then it would only display the last picture taken. There seems to be no way to reset it.&lt;br /&gt;&lt;br /&gt;Bottom line, use them as modal views and toss them. Instantiate a new picker the next time you need one.&lt;br /&gt;&lt;br /&gt;3) Memory management is hard. Even when I thought I'd been careful, when I tested it in Instruments, I had leaks all over the place.&lt;br /&gt;&lt;br /&gt;4) Using Objective-C serialization to save off large collections of objects can be very slow. Encoding the collection into a NSData object, then saving that can vastly improve performance. At least, it did for me.&lt;br /&gt;&lt;br /&gt;I'm sure there's more, but that's all I can remember at the moment.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-4598907648066705060?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/4598907648066705060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=4598907648066705060' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/4598907648066705060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/4598907648066705060'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2009/01/lessons-in-iphone-development.html' title='Lessons in iPhone Development'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-6388702686307165553</id><published>2008-10-22T21:44:00.002-10:00</published><updated>2008-10-22T21:57:06.056-10:00</updated><title type='text'>Where does the model go in iPhone MVC Apps?</title><content type='html'>I've just finished debugging a iPhone demo application for an article. I ran into an interesting problem, however. &lt;br /&gt;&lt;br /&gt;Apple's documentation strongly pushes using a Model-View-Controller design for iPhone applications. That's good. Having struggled to debug large applications that didn't use MVC, I definitely see the benefits.&lt;br /&gt;&lt;br /&gt;Here, the application should be separated into three distinct partitions. Roughly speaking, the model controls the state. The view displays information to the user, and the Control manages the other two.&lt;br /&gt;&lt;br /&gt;In my iPhone app, the views are built in Interface Builder. Each view has its own UIViewController. But, where should the model go? Where should it live? How do I connect it to my view controllers?&lt;br /&gt;&lt;br /&gt;Here's the problem, most of the views are instantiated in my code. I can easily pass in the model when I instantiate the class. My root view, however, is instantiated by the nib, secretly and mysteriously in the background.&lt;br /&gt;&lt;br /&gt;So far, the best solution I've found is to access the root view in my application delegate as follows:&lt;br /&gt;&lt;br /&gt;- (void)applicationDidFinishLaunching:(UIApplication *)application {&lt;br /&gt; &lt;br /&gt; model = [[Model alloc] init];&lt;br /&gt; &lt;br /&gt; id rootController = [navigationController visibleViewController];&lt;br /&gt; [rootController setModel:model];&lt;br /&gt; &lt;br /&gt; [window addSubview:[navigationController view]];&lt;br /&gt; [window makeKeyAndVisible];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;This is not as clean as I'd like, but it's better than the other options I've come up with. In particular, there's an intriguing Proxy Object in interface builder, which sounds like an ideal solution--but I can't make it work and I haven't found any documentation on it yet.&lt;br /&gt;&lt;br /&gt;If anyone out there has any suggestions, please let me know. &lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-6388702686307165553?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/6388702686307165553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=6388702686307165553' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/6388702686307165553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/6388702686307165553'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2008/10/where-does-model-go-in-iphone-mvc-apps.html' title='Where does the model go in iPhone MVC Apps?'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-8125187510411572426</id><published>2008-09-16T21:02:00.001-10:00</published><updated>2008-09-16T21:02:10.416-10:00</updated><title type='text'>Last Time Machine Update</title><content type='html'>Ok, this is the last thing I'll say on the subject (probably).&lt;br /&gt;&lt;br /&gt;Forget everything I've ever said about hosting Time Machine backups on a shared drive. Yes, it's technically possible. But, trust me. Don't do it. Just don't. It's not worth the heartache.&lt;br /&gt;&lt;br /&gt;Go out and buy a Time Capsule. Wireless backups that actually work! I've been running mine for two months now, and I haven't had a single hiccup. Much, much better than the shared drive option.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-8125187510411572426?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/8125187510411572426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=8125187510411572426' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/8125187510411572426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/8125187510411572426'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2008/09/last-time-machine-update.html' title='Last Time Machine Update'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-5008774180452949001</id><published>2008-08-07T21:57:00.001-10:00</published><updated>2008-08-07T21:57:52.031-10:00</updated><title type='text'>Object Lesson in Single Points of Failure</title><content type='html'>So, I bought my wife a new iPhone. Before we attached it to her computer, I decided to update all the software, and (of course) the machine choked and died. I tried everything I could think of, but I couldn't get it back up and running. We took it to the Genius Bar, and the genius in question tried everything he could think of. No luck. According to our tests, the hard drive was fine, but Leopard would not install properly.&lt;br /&gt;&lt;br /&gt;I decided to re-partition and reformat the hard drive. But, before doing that, I wanted to make sure the user drive was backed up. I took the 500 G disk we were using for Time Machine backups and attached it directly to my wife's machine, and copied over her user directory. Then I partitioned, reformatted the disk and reloaded Leopard. Everything went well.&lt;br /&gt;&lt;br /&gt;Until...&lt;br /&gt;&lt;br /&gt;My lovely wife walked by, accidentally snagged her hand on the USB cable for the hard drive, and knocked it to the floor. Now it only fell a few feet onto soft carpet, but when I plugged it back in, it refused to mount and only made a strange clicking sound.&lt;br /&gt;&lt;br /&gt;All our backups were on that drive. The time machine backups. The new backups I'd just made. Everything. All of it gone. Poof.&lt;br /&gt;&lt;br /&gt;Now, I have secondary backups for my most important files. But, alas, my wife did not. &lt;br /&gt;&lt;br /&gt;It's easy to feel over-confident when you have backups. But backups can fail. Whenever you only have a single copy of your data, even if it's only for a split second, you're at risk.&lt;br /&gt;&lt;br /&gt;Lesson learned. It's not a new lesson, but one I seem to need to be reminded of from time to time. Single points of failure are bad.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-5008774180452949001?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/5008774180452949001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=5008774180452949001' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5008774180452949001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5008774180452949001'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2008/08/object-lesson-in-single-points-of.html' title='Object Lesson in Single Points of Failure'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-174954058297494481</id><published>2008-08-04T22:45:00.001-10:00</published><updated>2008-08-04T22:45:22.000-10:00</updated><title type='text'>Thoughts on Matlab</title><content type='html'>I've been using Matlab a lot at work lately.&lt;br /&gt;&lt;br /&gt;Now, by all rights, this should be a language that I love. It's a dynamic, highly expressive language. &lt;br /&gt;&lt;br /&gt;However, something about it just sets my teeth on edge.&lt;br /&gt;&lt;br /&gt;To be fair, I think I can divide my complaints into two groups: issues that are my fault and issues that are the languages fault.&lt;br /&gt;&lt;br /&gt;Matlab treats everything as matrices. OK, that's a bit of an exaggeration, but not much of one. More to the point, Matlab works best when you are performing operations on an entire vector or matrix at once--rather than iterating over the data and performing the operation on each element individually.&lt;br /&gt;&lt;br /&gt;A lot of the built in functions and operations are designed to work across entire matrices. In fact, these functions often operate equally well on scalar values or matrices. For example, &lt;code&gt;X &lt; Y&lt;/code&gt; could be two scalar values (in which case, it will return 0 for false or 1 for true), or it could be two, equal-sized matrices (in which case, it will return a matrix of 0s and 1s). &lt;br /&gt;&lt;br /&gt;Personally, I think this obfuscates the code. It's often difficult to tell wether we're looking at scalar, vector or matrix operations. Still, I'm willing to accept this as my own personal issue. Indeed, it is part of a larger weakness on my part. Basically, I have trouble decomposing problems into matrix operations.&lt;br /&gt;&lt;br /&gt;OK, it's easy to do on simple cases. But, lets say I'm building a neural network. I'm storing my weights in matrices. Now, I want to minimize the amount of iterating that I'm doing--but I often have trouble seeing the opportunities to parallelize my operations. It can be done. I've built my neural network code, and I've spent a considerable amount of time replacing iterations with matrix operations. But, I don't find it a natural-feeling way to code.&lt;br /&gt;&lt;br /&gt;One of my co-workers has commented that I write Matlab code like I'm writing Java. I think that statement shows, not only my lack of Matlab skills, but her weaknesses in Java. I can tell you without hesitation, my Matlab code is nothing like my Java code. But, the underlying criticism still stands. I am often fighting against the language, not working with it. &lt;br /&gt;&lt;br /&gt;I see a lot of people doing this with languages I love, and I get incredibly frustrated when they then unfairly criticize those languages. So, I'll accept the blame here, and try to do better in the future.&lt;br /&gt;&lt;br /&gt;I do think there are some real issues, however. First off, the language is often inconsistent. For example, in &lt;code&gt;X &lt; Y&lt;/code&gt;, the X and Y could be either scalar or matrix values. However, &lt;code&gt;X &amp;&amp; Y&lt;/code&gt; must be scalars. If you want to do logical operations on matrices, you must use &lt;code&gt;and(X, Y)&lt;/code&gt;. To me, this makes no sense. Why should logical operations be different than comparisons?&lt;br /&gt;&lt;br /&gt;Also, the environment seems a bit buggy. For example, with a single-processor machine, it is incredibly easy to put your code into an infinite loop that locks up your computer. On a dual-core, this is less of a problem, since I can ctrl-c my way to freedom, but on a single core, Matlab grabs control and won't let go.&lt;br /&gt;&lt;br /&gt;Also, the IDE doesn't have many of the features we've come to expect from a modern development environment. There's a taste of debugging and profiling, but they are not as useful as other environments. The IDE lacks any real refactoring tools, and I haven't found any tools for running unit tests.&lt;br /&gt;&lt;br /&gt;Finally, I don't like the way it organizes the code. Basically, each function must be in its own file. Yes, you can include multiple private, helper functions within a file, but they cannot be called from the outside. Also, I often want to test my helper functions, so I need to place them in their own file anyway, at least during development.&lt;br /&gt;&lt;br /&gt;This really limits my ability to keep my code base organized. In other languages, I can have files of related functions, and folders of related files. Matlab removes one entire dimension. Yes, I can still group similar functions into a hierarchy of folders--and put those folders in other folders, and so on and so forth. Then I need to remember to add the entire tree to my path. It just feels really clunky to me.&lt;br /&gt;&lt;br /&gt;So, the take-home message is this, Matlab is a great language for doing mathematical exploration of ideas and building quick prototypes, but it lacks the software engineering tools needed to build robust, large-scale projects. &lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-174954058297494481?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/174954058297494481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=174954058297494481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/174954058297494481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/174954058297494481'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2008/08/thoughts-on-matlab.html' title='Thoughts on Matlab'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-6854956462191618210</id><published>2008-07-14T00:19:00.001-10:00</published><updated>2008-07-14T00:19:29.171-10:00</updated><title type='text'>One of my favorite iPhone 2.0 features...</title><content type='html'>One of my favorite features of the iPhone 2.0 is a little bit of spit and polish that's not getting much press (I haven't seen anyone else mention it, actually). &lt;br /&gt;&lt;br /&gt;Previously, entering passwords on the iPhone was always a super pain in the butt. It was too easy to mistype something, and you couldn't tell that you'd made a mistake, since the password was all dots.&lt;br /&gt;&lt;br /&gt;Now, the password fields dot-out all the letters except the last one, letting you see the last letter you typed. Yes, that sacrifices a bit of security, but if someone is peering that closely over your shoulder, they can probably see what you're typing anyway. And somehow, just being able to see the last letter makes it so much easier to type in my passwords correctly.&lt;br /&gt;&lt;br /&gt;Oh, there are a lot of more-obvious features that I could also rave about, but I think the new password fields deserve a little love.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-6854956462191618210?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/6854956462191618210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=6854956462191618210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/6854956462191618210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/6854956462191618210'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2008/07/one-of-my-favorite-iphone-20-features.html' title='One of my favorite iPhone 2.0 features...'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-6542957571498530591</id><published>2008-06-12T22:40:00.001-10:00</published><updated>2008-06-12T22:40:36.137-10:00</updated><title type='text'>Unimpressed...</title><content type='html'>OK, I finally managed to watch the keynote. Which keynote? Surly you are joking. The 2008 WWDC Keynote, of course.&lt;br /&gt;&lt;br /&gt;Now, it's Thursday, and the keynote was Monday. That by itself should tell you a lot. Usually, I would try to find a way to watch a S. Jobs presentation as soon as it appeared on the Apple site. This time around, I felt no great longing to see the actual presentation. I could tell already, from the news trickling through the web, that I was going to be disappointed.&lt;br /&gt;&lt;br /&gt;Don't get me wrong. The 3G iPhone is nice. GPS is nice. Better battery power is nice. And the new price is astounding. But, I don't think I'm going to run out and buy one. I love my iPhone, and I can't wait for the 2.0 update. I'm itching to develop my own apps for this platform. I might even buy a 3G phone for my wife. But, I don't think the changes are significant enough to warrant upgrading. &lt;br /&gt;&lt;br /&gt;Of course, I might change my mind. Maybe a series of new, cool apps will require 3G or GPS, forcing me towards an upgrade. But, right now, I can wait.&lt;br /&gt;&lt;br /&gt;And there are things that I'm waiting for. How long until Apple releases a 32 GB iPhone, or a 64 GB? Currently, my iTunes library sits at 27 GB. I'd definitely upgrade to a phone that could store all my media.&lt;br /&gt;&lt;br /&gt;I'm also still waiting for Flash. Apple claims the iPhone provides real access to web pages. But, I'm sorry. Without Flash, its not a real browser. There are too many things I cannot access.&lt;br /&gt;&lt;br /&gt;And there are the other dream features. The forward-facing video camera for mobile video conferencing. The auto-rotating marshmallow skewer and bacon stretcher. I'm looking for that unexpected Apple touch that places the new iPhones even further ahead of the competition.&lt;br /&gt;&lt;br /&gt;Finally, I mentally place 3G and Blu-Ray in the same category. They're nice technologies, but I think they may be a little too late. I suspect on-demand, HD movie downloads will kill Blu-Ray before it ever becomes truly popular. Similarly, I think something (maybe WiMax, maybe a new technology using the soon-to-be-freed analog TV bands) will soon wipe 3G away. Of course, I'm probably dreaming of things 5 years in the future--so a 3G phone may still be a safe bet, assuming you're going to upgrade it in a few years anyway.&lt;br /&gt;&lt;br /&gt;Next comes Mobile Me. A lot of people have raved about Mobile Me, claiming that it is much, much better than .mac. Again, there's noting wrong with it. Yes, the push email/calendar/contacts is nice. But, really. It's not a feature I need. &lt;br /&gt;&lt;br /&gt;I don't need to receive my email instantaneously. If someone needs to contact me that desperately, they should call me. After all, it is a phone. And syncing my calendar and contacts once a day is fine. The web interfaces look cool, but I usually read my personal mail on my phone anyway, or on my home computer. &lt;br /&gt;&lt;br /&gt;Now, if they gave my iPhone "Back To My Mac" capabilities, then we'd be talking about a technology I could get behind. Even if it just let me browse my home folder and open files remotely. The iPhone can already open Word, Excel and PDF files (not to mention a variety of media files). 2.0 will add support for PowerPoint and the whole iWork suite. I'd love to be able to browse through files on my hard drive at home, and open and view them remotely. Even better, let me email them from my iPhone, or let me copy them to a public .mac/Mobile Me folder. This would let me access my home files even when I'm trapped in a PC-only environment (like work). &lt;br /&gt;&lt;br /&gt;Finally, there was an incredibly brief mention of Snow Leopard. Now, I can't say I'm excited about Snow Leopard, since we know next to nothing about it. However, I'm going to make a bold prediction here, based on rather sketchy evidence. First, I think the name is deliberately tied to Leopard. Snow Leopard may well be a variant on Leopard, not an entirely new OS. We've also heard that it won't contain any significantly new features--which would be appropriate for a variant. &lt;br /&gt;&lt;br /&gt;Second, the marketing speak suspiciously refers to Snow Leopard as OS X, not Mac OS X. This may or may not be significant. Apple has already moved OS X away from the desktop with the iPhone OS. This could be a step in a similar direction. Or it might just be a marketing decision.&lt;br /&gt;&lt;br /&gt;Finally, it is apparently Intel only and fully 64 bit. Here's the question no one has asked, does that mean it won't run on 32-bit intel macs? There are a number of those floating around. My MacBook Pro is one. Will I be cut out in the cold?&lt;br /&gt;&lt;br /&gt;Or, is Snow Leopard an OS for an entirely new type of device? Something that can leverage the touch technologies pioneered in the iPhone? I'm not saying a tablet. I've been waiting for an Apple tablet so long now, I've basically given up hope. But, what about a laptop with a touch screen. Alternatively, Apple could be planning new hardware with a significant jump in the number of cores. Snow Leopard seems to emphasize parallel computing--it might be nice to have new hardware that could really take advantage of Grand Central.&lt;br /&gt;&lt;br /&gt;The bottom line is, I don't think Snow Leopard is an OS for the computers we have today. I'm not sure what it runs on, but I hope it will be a nice surprise.&lt;br /&gt;&lt;br /&gt;OK, back to the Keynote. While everything that Steve presented was good and interesting, nothing made me want to rip off my shirt and dance topless in the isles (and thank goodness for that!). I think Apple's moving in the right direction, but I can't help but be a little disappointed. Where are the surprises? The rumor sites scooped almost everything. Where's the "one more thing?" &lt;br /&gt;&lt;br /&gt;Maybe I have set my sights too high, but I can't help but feel a little let down.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-6542957571498530591?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/6542957571498530591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=6542957571498530591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/6542957571498530591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/6542957571498530591'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2008/06/unimpressed.html' title='Unimpressed...'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-7331049092857874733</id><published>2008-05-30T21:13:00.001-10:00</published><updated>2008-05-30T21:13:41.452-10:00</updated><title type='text'>Frustrated when people just don't get it...</title><content type='html'>Ok, I'm not one of those "Ruby (or whatever language) will kill java" people. I don't like Java. I'm a proficient Java programmer. I probably know it better than any of my preferred languages, since I've had to use it so much for work. I don't wish it would die, though I do wish I could get away from it for a while...&lt;br /&gt;&lt;br /&gt;Still, I found myself getting a bit hot under the collar when I read&lt;a href="http://littletutorials.com/2008/05/28/13-reasons-java-die-old-age/"&gt; 13 reasons why ruby, python and the gang will push java to die… of old age&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Just look at some of the things that spiked my blood-pressure:&lt;br /&gt;&lt;br /&gt;&lt;quote&gt;&lt;i&gt;&lt;br /&gt;Reason number 1: Syntax is very important because it builds on previous knowledge. Also similar syntax means similar concepts. Programmers have to make less effort to learn the new syntax, can reuse the old concepts and thus they can concentrate on understanding the new concepts.&lt;br /&gt;&lt;br /&gt;Reason number 2: Too much noise is distracting. Programmers are busy and learning 10 languages to the level where they can evaluate them and make an educated decision is too much effort. The fact that most of these languages have a different syntax and introduce different (sometimes radically different) concepts doesn’t help either.&lt;br /&gt;&lt;br /&gt;Reason number 6: There is no great incentive to switch to one of the challenger languages since gaining this skill is not likely to translate into income in the near future.&lt;br /&gt;&lt;/i&gt;&lt;/quote&gt;&lt;br /&gt;&lt;br /&gt;To me, this seems like arguing for ignorance. Learning languages is too hard. Learning a new syntax is too hard. Why bother.&lt;br /&gt;&lt;br /&gt;And, perhaps it's true for a certain number of programmers. Heck, I know people at work who feel exactly this way. It may even be the majority opinion, for all I know.&lt;br /&gt;&lt;br /&gt;But that doesn't make it a good attitude.&lt;br /&gt;&lt;br /&gt;I prefer to follow the Pragmatic Programmer's advice. I try to learn a new language every year.&lt;br /&gt;&lt;br /&gt;Now, I don't expect to use all these languages on real projects. I'd like to, don't get me wrong. I can often be found whining about how Project X would be so much easier if we could only use Language Y. But that's beside the point. I study programming languages, because studying a variety of programming languages makes you a better programmer, even if you never use them professionally.&lt;br /&gt;&lt;br /&gt;Let's move away from computer languages for a second and look at natural languages. It's often said that languages affect how we think. My wife is Japanese, and I know enough Japanese to get by (though her English is much better than my Japanese will ever be). There are definitely concepts in Japanese that I just cannot express in English. We just don't have the words. Sure, I can describe the idea in a round-about way. But I cannot say it directly.&lt;br /&gt;&lt;br /&gt;This is often frustrating. If I've been using Japanese a lot, I often find myself unable to express certain feelings accurately in English. Now, the truly odd part is, I never had a need to express those feelings until I learned Japanese. My mental model of the world simply did not include those ideas, at least, not as a crisp, well-defined concept.&lt;br /&gt;&lt;br /&gt;The same thing happens with programming languages. Knowing how to decompose a problem for a functional language is very different than knowing how to decompose a problem for an object-oriented language. It provides an entirely different set of tools for breaking down and understanding complexity.&lt;br /&gt;&lt;br /&gt;Also, learning a new language often forces you to examine your preconceived notions. Often you find that your preconceived notions are just wrong. &lt;br /&gt;&lt;br /&gt;And here's the best part. Just because you cannot use the tools and techniques from one language directly in another, doesn't mean the effort was wasted. Often you can borrow a really useful gem or two. Having programmed in Lisp, I now find it much easier to program recursive traversals of complex data structures. After using Smalltalk for a while, I find I write much smaller methods in Java--which makes my Java code much easier to read and maintain. &lt;br /&gt;&lt;br /&gt;So, yes. Learning one programming language is hard. Learning a second is somewhat easier, but it's still a chore. But, by the time you get to your fourth or fifth language, it gets a lot easier. &lt;br /&gt;&lt;br /&gt;Finally from a section labeled "Why many of the new languages will never be popular"&lt;br /&gt;&lt;br /&gt;&lt;quote&gt;&lt;i&gt;&lt;br /&gt;Some languages have very difficult to “get” concepts. For example most of the supporters of functional languages are proud of how concise statements are in their language. This is not really useful for somebody used to think procedural or object oriented. If the only gain from binding and twisting your mind is typing a few less lines then any experience programmer will tell you that this is not the main activity. Writing the first version is just a small part of the life cycle of a project. Typing the code is even smaller compared with the design time. From the second version the game changes dramatically. Maintainability is way more important. Also very important is to be able to add features and to refactor the code. Readability is paramount from version two, and for both development and support teams.&lt;br /&gt;&lt;/i&gt;&lt;/quote&gt;&lt;br /&gt;&lt;br /&gt;This entirely misses the point. First, I'll repeat my argument from above. binding and twisting your mind is good because it forces you to approach problems from a new perspective. That should be justification enough. But wait, there's more!&lt;br /&gt;&lt;br /&gt;Functional languages (or any expressive language) often allow you to model complex ideas concisely, but we're not interested in just saving keystrokes. Concise languages have less code. There is a direct correlation between the size of your codebase and the number of bugs in your program. There's also a correlation between size and maintainability.&lt;br /&gt;&lt;br /&gt;Let's make this concrete. When I took my Natural Language Processing course, I did all the assignments in Lisp. The TA was a friend of mine, and he often commented that my code was an order of magnitude smaller than the other students. I could do more with 200 lines of Lisp than they could do with 2,000 lines of Java. That's not "just a little typing." My code had fewer bugs. It typically ran faster, and I never had memory issues that often plagued other students.&lt;br /&gt;&lt;br /&gt;Now, maybe that's not a fair comparison. These projects fell squarely within Lisp's sweet-spot: command line tools that manipulated lists of symbols. If I was building a UI, I'd probably pick a different tool. &lt;br /&gt;&lt;br /&gt;Now, before someone else mentions it, I admit it. Nothing I have said here contradicts 13 Reason's main argument. These languages that I love may never become popular. They may never kill off Java. But, does that really even matter? Popularity has never been a measurement of quality. Trust me. My daughter loves Hannah Montana. As far as I can tell, every tween girl in the country loves Hannah Montana. Yet, I know in my heart that it is not quality music (or quality TV for that matter).&lt;br /&gt;&lt;br /&gt;I do hope we move from a monolithic language approach to a polyglot language approach--but Java doesn't have to die for that to happen. It just needs to learn to share.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-7331049092857874733?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/7331049092857874733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=7331049092857874733' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/7331049092857874733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/7331049092857874733'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2008/05/frustrated-when-people-just-don-get-it.html' title='Frustrated when people just don&amp;#39;t get it...'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-5914599632308924776</id><published>2008-05-13T21:51:00.002-10:00</published><updated>2008-05-13T21:54:12.659-10:00</updated><title type='text'>Two new articles.</title><content type='html'>I just received my May issue of MacTech Magazine, and I have two articles in this issue. Part II of my RubyCocoa article and an overview of the iPhone SDK (at least, what I can talk about without violating my NDA).&lt;br /&gt;&lt;br /&gt;Hopefully I'll be able to talk a lot more about the iPhone SDK soon. However, I can safely say, good things are coming.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-5914599632308924776?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/5914599632308924776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=5914599632308924776' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5914599632308924776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5914599632308924776'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2008/05/two-new-articles.html' title='Two new articles.'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-7116624438676533044</id><published>2008-05-03T22:47:00.000-10:00</published><updated>2008-05-03T22:48:09.003-10:00</updated><title type='text'>The problem with JUnit</title><content type='html'>I'm a big unit test fan. However, I often feel that the goals of testing run counter to the goals of good Object Oriented design. At least in static languages like Java.&lt;br /&gt;&lt;br /&gt;Object oriented design is based on the idea of encapsulating behavior. Testing is an attempt to reveal and examine behavior. You can't have both.&lt;br /&gt;&lt;br /&gt;I often run into this problem when implementing algorithms inside an object. From an OO perspective, I often want to declare all the methods that perform the scary math as private. They should never be called from the outside. However, I really need to test them somewhere.&lt;br /&gt;&lt;br /&gt;Problems also crop up when calling methods that change an object's state. The state is not always directly exposed, and sometimes it's nearly impossible to indirectly detect the change.&lt;br /&gt;&lt;br /&gt;I don't feel the same tension when testing in dynamic languages like Ruby. Usually, these languages have a stronger reflexion or metaprogramming functionality. They let me safely encapsulate the things that should remain hidden, but still allow me to pry my objects open and root around in the guts.&lt;br /&gt;&lt;br /&gt;I can write tests using reflection in Java, but the syntax is painful. I can get around that with a library of helper methods--but for some reason, reflection makes many Java developers uncomfortable, even when only used in testing. And, truth be told, it never feels as natural as the dynamic language tests.&lt;br /&gt;&lt;br /&gt;Similarly, I can use a mixture of interfaces and mock objects (for example, using EasyMock) to let me examine the inner workings of a class. Often this simplifies writing the tests, but the results can be incredibly brittle. Building useful mock objects generally requires a detailed understanding of our classes inner workings. If I change the implementation, I will break my mock objects, and then break my tests--even if the new version is functionally identical to the old.&lt;br /&gt;&lt;br /&gt;Of course, even the reflection-based testing is somewhat brittle. Reflection, by definition, looks at the implementation, not the interface. But, our interactions with the implementation tend to be more surgical and specific. So, while these tests are somewhat brittle, they tend to be more resilient than the mock-object versions.&lt;br /&gt;&lt;br /&gt;I can try to get around all these problems by redesigning my objects. Move my algorithms to a utility class, where they are publicly exposed and easy to test, or add accessors to the internal state, even if the accessors should never be used for non-test code. While this works, it can lead to unnecessarily awkward designs, or exposing more of the implementation than is really necessary.&lt;br /&gt;&lt;br /&gt;I think, ultimately, a mixed approach is best. Like many software engineering tasks, we must examine our design and decide which sections are likely to change, and which are likely to remain the same. Static sections can often be effectively tested using reflection or mock objects. Sections that are likely to change should be encapsulated and tested as separate objects. &lt;br /&gt;&lt;br /&gt;The trick is then to successfully separate one from the other.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-7116624438676533044?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/7116624438676533044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=7116624438676533044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/7116624438676533044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/7116624438676533044'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2008/05/problem-with-junit.html' title='The problem with JUnit'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-5140191598009159765</id><published>2008-04-09T22:12:00.002-10:00</published><updated>2008-04-09T22:17:28.657-10:00</updated><title type='text'>Interested in Nu</title><content type='html'>If you haven't already, check out &lt;a href="http://programming.nu/"&gt;Nu&lt;/a&gt;. A LISP variant, implemented in Objective-C with heavy Ruby sensibilities. It's like all of my favorite things, rolled into one.&lt;br /&gt;&lt;br /&gt;Well...It would be nice if it had XCode support. And it's seems a long ways away from a 1.0 release. Still, it looks quite interesting.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-5140191598009159765?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/5140191598009159765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=5140191598009159765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5140191598009159765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5140191598009159765'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2008/04/interested-in-nu.html' title='Interested in Nu'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-2673009437766791234</id><published>2008-03-24T22:12:00.002-10:00</published><updated>2008-03-24T22:14:37.367-10:00</updated><title type='text'>Time Machine Update Update</title><content type='html'>Nope, my wife's computer has been refusing to do backups since shortly after the 10.5.2 update. Apparently, she got tired of seeing it complain, and just shut it off. Anyway, it's not just me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-2673009437766791234?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/2673009437766791234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=2673009437766791234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/2673009437766791234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/2673009437766791234'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2008/03/time-machine-update-update.html' title='Time Machine Update Update'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-1674687917629553389</id><published>2008-03-19T20:00:00.002-10:00</published><updated>2008-03-19T20:11:50.567-10:00</updated><title type='text'>Time Machine Update</title><content type='html'>Here are a few things I've learned about Time Machine since writing the article.&lt;br /&gt;&lt;br /&gt;1) I had to send my MacBook in for repairs. Apple replaced the logic board. Therefor, I had a new ethernet MAC address. Therefor I could no longer access my backups. I found some hackish instructions online that helped me fix it. But, I told them that I had backups when I sent it in. If they had wiped my hard drive, I would have panicked.&lt;br /&gt;&lt;br /&gt;2) When booting from a Leopard DVD, I did not have the option to restore from backup. The problem seems to be, I need to setup the wireless to connect to the network, and I need to log into the host machine before getting access to the backup bundle. The software on the Leopard DVD simply doesn't give me the option to do that.&lt;br /&gt;&lt;br /&gt;In the end, I erased and reinstalled OS X on the machine. Set up a dummy account. Used that account to access the network and log into the host machine. Then I connected to the time machine backup and restored all my data.&lt;br /&gt;&lt;br /&gt;I think there may be a better option here. I think I spotted something that suggested connecting the drive directly (even though you typically cannot connect the hard drive directly if you've been doing remote backups). I don't know. It sounds sketchy to me. But it might be worth a try the next time a machine goes down.&lt;br /&gt;&lt;br /&gt;3) 10.5.2 seems to hate Time Machine. Since upgrading, my backup has become more and more unreliable, and has taken longer and longer. Finally, it stopped working entirely. I couldn't even mount the bundle anymore. I let Disk Warrior work on it for three days. It reported over 50,000 errors, but wasn't able to do anything useful. In the end, I had to delete the bundle and start from scratch.&lt;br /&gt;&lt;br /&gt;Actually, it may have been the hacks I mentioned in step 1 that eventually killed it--but I don't think so. Other people seem to be having the same problem. I thought 10.5.2 was supposed to improve Time Machine stability.&lt;br /&gt;&lt;br /&gt;4) While I cannot mount my backup sparse bundle directly on the host machine, I can mount any backup bundle from any remotely logged in machine. No password needed. That's kind of scary.&lt;br /&gt;&lt;br /&gt;That's it. If you have any other tidbits, list them in the comments.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-1674687917629553389?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/1674687917629553389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=1674687917629553389' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/1674687917629553389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/1674687917629553389'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2008/03/time-machine-update.html' title='Time Machine Update'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-5172307951482880340</id><published>2008-03-04T22:37:00.002-10:00</published><updated>2008-03-04T23:01:59.110-10:00</updated><title type='text'>Sometimes I think Apple's out to get me!</title><content type='html'>So, I write an article about installing Ruby for Rails on Tiger. Then Apple announces that RoR will be included in Leopard.&lt;br /&gt;&lt;br /&gt;Then I write an article about using TimeMachine over a wireless connection. Just days after the magazine hits the stand, Steve Jobs announces Time Capsule. &lt;br /&gt;&lt;br /&gt;Now, I've just finished a pair of articles on RubyCocoa. They haven't even been published yet, but Apple's already at it again.&lt;br /&gt;&lt;br /&gt;Today, I just learned about a new, open source project backed by Apple, called &lt;a href="http://trac.macosforge.org/projects/ruby/wiki/MacRuby"&gt;MacRuby&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;MacRuby is a Ruby 1.9 port that runs on top of Objective-C. It's not ready for prime time yet, but it looks promising. First off, it is Ruby 1.9--which I think is a great thing. Among other things, this means it will be much, much faster than RubyCocoa, which uses Ruby 1.8. &lt;br /&gt;&lt;br /&gt;From there, things get really interesting--and just a bit odd. All MacRuby objects are subclasses of NSObject. Because of this, they inherit all the base object methods from both Objective-C and Ruby. They've also added an expanded syntax for keyed attributes in method calls. &lt;br /&gt;&lt;br /&gt;So, &lt;br /&gt;&lt;br /&gt;&lt;code&gt;[person setFirstName:first lastName:last];&lt;/code&gt; &lt;br /&gt;&lt;br /&gt;becomes&lt;br /&gt;&lt;br /&gt;&lt;code&gt;person.setFirstName(first, lastName:last)&lt;/code&gt; &lt;br /&gt;&lt;br /&gt;or &lt;br /&gt;&lt;br /&gt;&lt;code&gt;person.setFirstName first, :lastName =&gt; last&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;You can even write your own classes in Ruby that use keyed attributes:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;  def setFirstName(first, lastName:last)&lt;br /&gt;        @name = "#{first} #{last}"&lt;br /&gt;  end&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Of course, you can do all the cool RubyCocoa tricks. Make calls back and forth between the Objective-C and Ruby portions of your code. Import Cocoa frameworks. Etc. But, in MacRuby, it all looks just a little bit tighter.&lt;br /&gt;&lt;br /&gt;For example, MacRuby's String, Array and Hash classes are simply subclasses of Objective-C's NSString, NSArray and NSDictionary. This lets you transparently pass objects between Ruby and Objective-C.&lt;br /&gt;&lt;br /&gt;I look forward to playing around with this project as it develops. &lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-5172307951482880340?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/5172307951482880340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=5172307951482880340' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5172307951482880340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/5172307951482880340'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2008/03/sometimes-i-think-apples-out-to-get-me.html' title='Sometimes I think Apple&apos;s out to get me!'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-1659395016779184250</id><published>2008-03-02T21:54:00.002-10:00</published><updated>2008-03-02T21:57:43.721-10:00</updated><title type='text'>Review of The Unofficial Lego Mindstorms NXT Inventor's Guide</title><content type='html'>I love the Lego Mindstorm kits, and I've always enjoyed No Starch Press's books. So I was excited to hear about their Unofficial Lego Mindstorms NXT Inventor's Guide (ULMNIG). These are two great tastes that taste great together.&lt;br /&gt;&lt;br /&gt;Unfortunately, I was led a bit astray by the title. "Inventor's Guide", to me, summons mental images of crazy legos hacks, but that's not the goal of this book.&lt;br /&gt;&lt;br /&gt;In the introduction, the ULMNIG  describes its true intentions--taking you beyond the user guide and instructions that came with the Mindstorm kit.  It does  not assume any previous experience with Lego or Mindstorms, but helps you explore a broader range or projects and possibilities.&lt;br /&gt;&lt;br /&gt;As an entry level book, I think the ULMNIG overwhelmingly succeeds. &lt;br /&gt;The book starts with a description of the lego pieces, then provides basic guidelines for building sturdy structures and functional gear trains. For me, this was the weakest part of the book. Don't get me wrong. It has solid information, and should be useful for beginning builders. But it felt too short and too superficial for my tastes.&lt;br /&gt;&lt;br /&gt;The ULMNIG then spends two chapters exploring the NXT-G programming language in detail. If you are going to use NXT-G, then you need to read these chapters. They provide a lot of information that will help you get the most out of your Mindstorm brick. They are also much clearer and more informative than the user manual. Reading these chapters will save you from hours of frustrating trial and error. &lt;br /&gt;&lt;br /&gt;Finally the last half of the book covers six new robot designs. Four of these designs are radically different from each other. One is a differential drive with a ball castor. One is a four-wheeled steering vehicle. One is a six-legged walking motion sensor, and one is a stationary bot.  There are also two variations on the differential-drive bot.&lt;br /&gt;&lt;br /&gt;This gives you a nice combination of projects. The designs increase in complexity, allowing you to improve your skills as you progress through them. Building them will teach you a wide range of design techniques, while the variations show you how you can modify existing designs for other purposes.&lt;br /&gt;&lt;br /&gt;The projects are definitely the highlight of the book. Working through the projects will teach you more about building robots than the rest of the book combined. And, once your finished, you should be ready to jump into your own projects.&lt;br /&gt;&lt;br /&gt;Unfortunately,  advanced builders/programmers might find themselves somewhat disappointed with this book. The ULMNIG hints at several advanced topics: building dynamic structures and third party programming languages. Unfortunately, these only get the briefest introduction. A few paragraphs each, tops. And the ULMNIG doesn't even mention other advanced topics, like third-party sensors and hardware, or attaching your own circuits to the NXT brick.&lt;br /&gt;&lt;br /&gt;So, I would not recommend this book for everyone.  But, if you've finished all the projects in the Mindstorm Users Guide, but your still struggling to build your own robots, then this is definitely the book for you.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-1659395016779184250?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/1659395016779184250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=1659395016779184250' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/1659395016779184250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/1659395016779184250'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2008/03/review-of-unofficial-lego-mindstorms.html' title='Review of The Unofficial Lego Mindstorms NXT Inventor&apos;s Guide'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-1358301423384894239</id><published>2008-02-25T20:18:00.002-10:00</published><updated>2008-02-25T20:22:49.513-10:00</updated><title type='text'>Some articles online</title><content type='html'>MacTech magazine has released three of my articles online. Please check them out.&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://www.mactech.com/articles/mactech/Vol.22/22.09/RubyonRails/index.html"&gt;Introduction to Ruby on Rails&lt;/a&gt;&lt;br /&gt;2. &lt;a href="http://www.mactech.com/articles/mactech/Vol.22/22.10/AjaxOnRails/index.html"&gt;Ajax on Rails&lt;/a&gt;&lt;br /&gt;3. &lt;a href="http://www.mactech.com/articles/mactech/Vol.23/23.04/LegoNXTontheMac/index.html"&gt;Lego NXT on the Mac&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-1358301423384894239?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/1358301423384894239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=1358301423384894239' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/1358301423384894239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/1358301423384894239'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2008/02/some-articles-online.html' title='Some articles online'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3458247764774806260.post-117659284283967561</id><published>2008-02-17T22:55:00.000-10:00</published><updated>2008-02-17T23:03:40.250-10:00</updated><title type='text'>Hi</title><content type='html'>Please excuse the dust. Things are still under construction here.&lt;br /&gt;&lt;br /&gt;Hopefully I'll get everything polished away sometime this week.&lt;br /&gt;&lt;br /&gt;This blog will focus on things that I think are cool: robotics, AI, Apple products, Lisp, Objective-C, Smalltalk, Ruby, DSLs, and probably the occasional half-blind-with-fury rant about Java. Hopefully it will serve two purposes. 1) Most importantly, I will post additional information about my articles here. This may include changes, additions or support material. 2) It will server as a dumping ground for all the semi-random tech ideas that pop into my head. Sorry about that.&lt;br /&gt;&lt;br /&gt;Well, I hope you enjoy it.&lt;br /&gt;&lt;br /&gt;-Rich-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3458247764774806260-117659284283967561?l=freelancemadscience.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freelancemadscience.blogspot.com/feeds/117659284283967561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3458247764774806260&amp;postID=117659284283967561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/117659284283967561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3458247764774806260/posts/default/117659284283967561'/><link rel='alternate' type='text/html' href='http://freelancemadscience.blogspot.com/2008/02/hi.html' title='Hi'/><author><name>Rich</name><uri>http://www.blogger.com/profile/04243458955367448042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
