The Magic Camera is Up on the App Store!

I outsourced my first iOS app, and it is now live here. The Magic Camera lets you take a picture of someone, but instead of taking the picture, the app actually presents a picture from a set of images of people from around the world, animals, etc.

I had a few goals in putting this together--first, I thought it would be a fun app, and it seems like the kids really enjoy it. Second, I wanted to get something new in the App Store, but I did not have time to write it myself. Finally, I wanted to develop a relationship with an outsourced team to develop more app in the future.

The experience was a great one--the developer that I found on oDesk did a great job, and was extremely professional. Compared to costs that I have seen others describe for app development, I got this developed for an outstanding rate. And I think the quality of the final version is high.

Anyway, it was a great first experience outsourcing the app. And if you have kids, they would probably enjoy this app, like my kids do! And it's free!

Dynamic WordPress content - getting content from another database

I am currently working on a research project to catalog a number of events from recent history. The goal was to be able to create these events in one database and display them. Due to the sophistication and layout capabilities of WordPress, this seemed like a great framework to put the presentation into. But there are a few hurdles I needed to overcome--essentially, how could I create pages in WordPress in advance, and then, when they were requested, source events them from another database.

The concept may or may not seem interesting, but my goal was to dig deeper into WordPress to understand some of the inner workings. Thanks to tons of great web sites where people share their knowledge (most notably John Faulds code example here), and WordPress's own outstanding documentation, it was easy to develop some simple code to perform the function.

First off, let me explain my approach. It was to create all the pages in WordPress first programmatically, placing an identifier into the content section. My goal would be to read this content section later, be able to determine what content to get from my secondary database based on this information, and then retrieve and display my new information.

All you need to do is go into your functions.php page and introduce code like the following (note John Faulds' runSQL function copied here almost verbatim):


function dynamic_content() {

$content = get_the_content();

echo "

";

$sql = "select description from dates where date = '" . $content . "'";
$results = runSQL($sql);

//echo $sql;

while ($row = mysql_fetch_array($results)) {
echo $row[0];
echo "

";
}

}


function runSQL($rsql) {
$rootpasswd='';
$user='';
$db='';
$dbcnx = @mysql_connect('localhost',$user,$rootpasswd,true);
if (!$dbcnx) {
echo '
Unable to connect to the database server at this time.
';
exit();
}
mysql_select_db($db, $dbcnx);
$result = mysql_query($rsql) or die ('test');
return $result;
mysql_close($connect);
}




This requires some explanation first. You will notice in your loop template pages that there are regular calls to "the_content". This function actually outputs content--and since my goal was to read this and replace it, the_content() is not acceptable.

Review: Android Blows

Understand a few things first. I love competition. I firmly believe that competition is what makes people and companies strive to be better. More than anything, I wanted iPhone to have a strong competitor to keep it honest. Anyone who lived through the glorious chip revolution of the 1990's and saw the birth of PowerPC (who?) and AMD challenge the supremacy of Intel and the resulting monumental gains in chip technologies knows the good that comes out of companies fighting for their lives.

Second, understand that dollar or dollar, I own more Google stock than I own Apple stock. Google is an amazing company, I genuinely believe they try to do all the right things, and I know if I was presented with some of the interview questions posed to potential Google employees, I would probably curl up, wimpering, into a fetal position.

But I have to be honest. After almost five months of desperately wanting to just *like* the Android phone, I have to conclude that it is frustrating on a par with my Windows machines at work. Yes, it's that bad.

Let's start with some specifics. I am using the Samsung Fascinate from Verizon. Specs appear to be about on par with most Android phones--1GHz Hummingbird processor, 384M of RAM. I love the sleek design and slim size--it is very iPhone-esque. A co-worker showed me, and between his positive review, my love of Google, general public praise for Android, and being able to get a smart phone with Verizon service, I could not pass it up.

But it only took a few times of turning it on for me to be annoyed--the phone was about as responsive as a Pentium Pro circa 1998 running Windows Vista.

So I went back to my co-worker, and he explained that you pretty much HAD to run a utility (he recommended the free version of Advanced Task Killer) that would aggressively kill applications in memory that were no longer needed. With a lot of experience with iPhone and iPad development, I was immediately skeptical. Does the operating system manage everything so poorly that third party apps need to be bolted on to make the experience bearable? Has Google made the equivalent of Windows for the smart phone????

Advanced Task Killer immediately created it own set of problems. Since I installed it, I notice my keypad disappears at awkward times when I am using it mid-phone call--like when I am trying to enter my PIN to access my voicemail. I tried disabling ATK for the obvious tasks--like the phone--but that did not fix the problem. Turning down the aggressiveness of the task killing (I normally have it set to "Aggressive", not the top setting of "Crazy") does help, but then my phone is no longer responsive in any way again. I would call it a catch-22, but my keypad would disappear after I type the first 2.

Next comes the most common app I would use on the phone, Mail. Strangely enough, the native mail app was so slow and sluggish, I switched over to the official Yahoo! mail app. This, let me tell you, is a real piece of work. Not only does it suffer from the absolutely embarrassing performance, it has weird quirks that you need to be aware of. For example, there is an Outbox. Once I sent an email, watched the message appear on the screen saying it was waiting to be sent, then waited until it disappeared. No problem. The next day, I found this not STUCK IN MY OUTBOX. I had synched mail probably 50 times. And of course I discovered this handy problem with an important email. Today, I just figured out the work around. When messages get stuck in your Outbox, start up the aforementioned Advanced Task Killer, kill Yahoo Mail, restart it, and hope for the best. It only took me 15 minutes to send this email today. Of course, in the future, I know I can just kill the application and restart it to actually send a note. Does this sound more and more like Windows to you???? (OK, you are thinking, Google is not responsible for what Yahoo publishes, right? I think I am within my rights to list this because (1) it is actually better than the native mail app, (2) I am sure the poor performance has something to do with the operating system since every Android app seems to suffer from it.) Oh, and did I mention the performance? If you are retrieving mail, don't even bother trying to scroll the display or even use the home button to get out of the app. If an app does not want to give up control to the operating system, you might as well set the phone down and let it do its thing for the 7 minutes--because it will NOT respond.

Oh, and then let's talk about browsing. If I try to launch my My Yahoo! page in the native browser, the application crashes. I guess that is good, because I don't have to load up ATK to do it for me. In desperation, I switched to the Dolphin browser, which can be downloaded free. It is pretty good, has not crashed on me, and seems to perform pretty well. I recommend Google or Verizon (whoever is packaging the native browser on the Fascinate) switch to Dolphin. It would have saved me hating something else about the Android. And you would not have needed to read this paragraph.

I had a lot of confidence in Android's overall approach. Be open. Run on all kinds of hardware. Open source the code so it can be understood, and possibly improved. But I would contend after 5 months of serious use that it is simply not finished. Android, if it will ever be a contender, is going to need either a major overhaul, a significantly higher hardware requirement to offset the unacceptable performance of the apps, or some combination of the two. The iPhone outshines it in so many ways, it is not even a contest. But the biggest way--it is just plain usable. Sure, bad connection speeds are a fact of life when you are not in wi-fi range. The iPhone is cool with that--maybe you can't get your mail right then, but you can scroll through the mail you do have, even press the home button to go do something else if mail isn't getting retrieved fast enough for you. Try doing this with an iPhone, then with your shiny new Android. You will want to put your Android through the nearest window.

So, if you are in the market for a smart phone, PLEASE think carefully before you get an Android. If you are patient and like waiting on your devices, or if you are getting it for free and would have to pay for anything else, or you have never used a peripheral in your life that was not powered by Windows, you might be happy with it. But if you do not fit into one of these three categories, you owe it to yourself to look at all the choices out there....

Building Web Sites with Microsoft Technologies

I just finished a continuing education class at Lakeland Community College in Kirtland, OH. I am putting the slides for the class out here if they are useful to anyone.

Here are the presentation and class materials for the 5 classes:

Part 1: ASP.NET
Part 1: ASP.NET project files
Part 2: .NET Framework
Part 2: .NET Framework project files
Part 3: Database concepts
Part 4: ADO.NET
Part 4: ADO.NET project files
Part 5: Putting It All Together
Part 5: Putting It All Together project files


Questions? Shoot me an email.

Great Free Differencing Tool for Mac

For some odd reason, searching in Google for a file differencing tool for Mac does not return anything promising. The best I found easily was a blog post saying to use the FileMerge that gets installed with Xcode. You can run it from the command line.

Command line? Look, I am a Microsoft developer most of the time. That means I both expect and need things to be kinda easy.

Luckily, I searched a little further and found Sourcegear's DiffMerge. Just like you would expect, graphical, easy to use, and free.

Thanks, Sourcegear!

Crank Out Some iPhone Apps - Outsource Them!

If you have been reading my blog, you know my story--I am a Microsoft developer by day, and an iPhone/iPad developer by night. The problem--when you have a wife and kids and a house (or even a social life) this is not really sustainable for long.

With iOS4 coming out, I have been doing a little less coding lately and a little more reading about iPhone development. One of the things I have been reading is books by others promising ways to write apps quickly or make money on iPhone apps. A lot of them I just laugh at. So when I read an ad promising to let me write iPhone quickly without writing code--well, I had to read the book just to see what they were promising.

To my surprise, it was a really good idea! The book, How To Create iPhone Apps with No Programming Experience is actually a great step-by-step methodology to get apps built the easy way--by explaining what you want and handing it off to someone else to code. The book comes with a few extras, the most interesting on how to make money with free apps, which you probably already know. But the book itself was a good read. If you have any thoughts about trying to write an iPhone yourself but just don't have the time, this is a great solution.

The best part of the book was the description of some of the completely ridiculous apps that have made big money. The point being, of course, that marketing is every bit as important in the iPhone app gold rush as programming. You can have a slick app, but if you have no marketing plan, it will disappear in the mountain of apps released daily. Conversely, if you have an idea for an app that you can market, maybe a crazy simple app could make you rich. And if you outsource them, you can crank out ten in the time you would have done one yourself.

Anyway, check out How To Create iPhone Apps with No Programming Experience. It is a great no-nonsense approach to getting your app out there for people to download.

BTW--I have unofficially crossed the 50,000 app download mark. How exciting is that!!

Review process for iPad apps--Yikes!

So I submitted my first iPad app almost 2 weeks ago. After being lulled into a false sense of confidence following iPhone app reviews, I have had a bad experience with this review.

iPhone app reviews had gotten down to a few days at the end of last year and earlier this year. So I expected the iPad app review for my first app to be, I don't know, vaguely like that.

When I saw my app go from "submitted" to "in review" so quickly, I was very optimistic. But then came an extremely long delay. And OK, I am fine with a delay--I am sure everyone is submitted iPad apps right now.

But then came the frustration. After 8 days (yes, 8 days) I get a notice that my app had been rejected. The reason? I had called it "FindIt for iPad" on the title screen, and this is a copyrighted term. Fair enough--I probably should have thought of that. But what required 8 days to figure out that "iPad" was prominently placed on the main page?????

Then, of course, the process has to start over from scratch. Again, I get it--a new binary, and anything can be in it. So the new executable has to be completely tested. So we are now a full 16 days from the initial submittal. And I don't have much confidence that it is really being reviewed any more when it says "in review." (See rant above about "how did it take 8 days to figure out 'iPad' was prominently placed on the main page.")


Scary stuff. Hopefully this helps someone out there avoid the same issue I had.