Tcoz Tech Wire

Discoursing on trends and technologies interesting to Tim Consolazio, sole proprietor of Tcoz Tech Services, specializing in Flash/Flex/Air, iPhone, Facebook, Twitter, and related technologies.

"Technology from an indie software developer's perspective".

Monday, June 22, 2009

TcozTwitter: A Twitter Client using Adobe Air and the Flex Mate Framework - Day 7: Running on the iPhone...really?

This post covers my progress developing a Twitter client using the technologies mentioned in the article title, but also takes another interesting turn. I've been working on the side with Citrix to understand their latest XenApp Server product, and how a Flash/Flex/Air developer might be able to leverage it. To this end, I decided to branch my Air code base, and use what I've already done to drive forward a version of TcozTwitter that could be delivered on the iPhone...or any mobile device for that matter.

Notice I said “branch”, not “start all over again with a different technology”, and “any mobile device”, not just “iPhone”. Those are the important things to get here. More on that in a minute.

If you're interested in the history, links to all the previous blog articles are at the end of the article.

To summarize, here's the “thin line” of technologies you'll need to be familiar with, if you want more detailed summaries, look at the links at the bottom of this article:

Amazon EC2 Cloud and S3. EC2 is essentially a vast pool of processing power that you can isolate a piece of to run whatever you need. I frequently liken it to a ball of clay; you grab a chunk and shape it the way you want; when you're done, you take a snapshot of the configuration (so that you can “restart” it from where you left off), and put the chunk back on the bigger ball. S3 is “Simple Storage Service”. It's basically a huge pool of storage space that you can access via an API or one of many downloadable clients. When you take your “snapshot” of your “chunk” (or in EC2 parlance, when you “bundle” your “instance” into an “AMI”), the AMI is saved to a “bucket” (essentially a directory) that you've previously created in S3. When you “restart” your instance, you point to the configuration file that gets stored with your AMI data, fire it up, and there ya go.
XenApp Server and Desktop. There's a lot to this technology, but I'm focusing on the iPhone-tweaked version of the product, which you can read about here. Briefly, XenApp and Desktop are server-side software that “virtualizes” applications and allows you to view them over a variety of different clients. You install whatever app on a server—any technology that the server supports is fine—then “publish” it via the XenApp software so that it can be accessed remotely by Citrix Viewer and Receiver clients. Citrix has published an AMI in the EC2 cloud that you can use to experiment with. Remember, an AMI is a saved configuration, ready to go. All you need to do is go the cloud, fire it up, install your app, publish it, and remote clients can access and run it. The Citrix XenApp AMI is a demo that times out in three months; plenty of time to learn your way around.
Flex/Air, and Mate. Flex is an ActionScript 3 component framework used to build applications that run in the Flash player, Mate is a Flex-specific framework, heavily leveraging MXML, to simplify and organize building applications with Flex and ActionScript 3. I'm using Mate purely to familiarize myself with it. I'll say this; compared to other frameworks, it's pretty easy to get your head around, and it does simplify a lot of tasks. I have some concerns, but that's true of any prescribed development approach.
The iPhone. Enough said about that I think, and then some.

You'd be surprised, once you know exactly how it all works, how easy it is to set this all up and get basic applications working. I can publish an app, or an app update in a matter of minutes.

Here's some screenshots of my Twitter client, running on the iPhone, using all the above mentioned technologies:








It really works, even over EDGE on an OG iPhone (as I write this article, I'm actually expecting the delivery guy with my new 3GS 32mb Black. UPDATE, I have the new iPhone, and the Citrix stuff runs great over the 3G network). I leave it up and running on my iPhone while it's docked to see my tweets come in without any page refreshes and whatnot.

I also have to say, Citrix' luminaries Chris Fleck and Ray Yang have been great. When I started my experiments, I pinged them with a few questions, and they've been supporting my efforts with tech info and advice ever since, because they're interested in my perspective on these technologies.

It's that perspective that, perhaps, makes this all interesting, so much so that TechCrunch published a story on my findings that stayed on the front page of their site for weeks and sparked a lot of debate, mostly revolving around “There's no need for Flash on the iPhone,” and “why don't you just build a native app”. Flash is a great candidate for building mobile apps. The industry just seems to have a variety of issues that prevent it from getting out there on mobile devices, and I have good reason to believe they're not primarily technical ones.

Anyways, I'm an independent developer; in a nutshell, that means I go from contract to contract, building various kinds of applications for various kinds of clients of all sizes. I've worked for Microsoft, Viacom, Thomson Reuters, IAG Research, American Express, CitiGroup, IEEE/Spectrum, and a slew of smaller shops and startups. I'm pretty proud of my portfolio, and I work hard to stay cutting edge; I run servers to host all kinds of development environments and server software, like Flash Media Server, TomCat, BEA WebLogic, MAMP, Red5, Blaze, Ruby/Rails, .Net, Air, SVN, FTP, mySQL, SQL Server, Oracle Comm. Edition, etc. etc.

It's a lot of work, and isn't cheap; sure I write it off, but I have to do the cash layout, and admin/maintain them. IMHO, it's necessary; a good independent developer should know how to put together a good development and staging environment in just about any technology.

So, enter the Amazon EC2 cloud. Now, I can spin up instances of virtually any kind of development environment...install this and that software/app/etc...save the configs and shut them down...for about 10 cents an hour. After doing the math, that works out to about half what I pay now for a fully dedicated hosted box at a solid host company, and that's only if I leave it up and running 24/7. It's WAY flexible. For staging and development testing, it's fantastic.

However, most of what I do for a living involves Flash development. I love the iPhone and have learned Objective C, got my business accepted into the dev program—it turned out to be more than a matter of just paying for it to my surprise—and so on. But I've been working with Flash for a decade, and it's a big disappointment that Flash doesn't run on it.

Enter XenApps, which Citrix makes available as a demo AMI config in the EC2 cloud. All I have to do is select the AMI, launch it, and I'm looking at a clean build of Windows Server 2k3 with XenApps, Desktop, and all that; everything I need to work with to see if I can deliver a Flash/Flex/Air application to an iPhone.

I settled on Air, mostly due to the fact that Air doesn't deal with browser security and sandboxes the way that Flash/Flex do; Air is a native runtime, with it's own encrypted data store and access to NativeWindow and other elements that make it a fairly powerful RIA desktop development environment. Crossdomain and such isn't a hassle as well. You can also publish an Air app (which, on Windows, is an .exe) in a very straightforward way from the XenApp environment, as opposed to using AppViewer, which is a .Net app Citrix distributes that you run in lieu of your actual SWF by pointing it at the web page that embeds it. It works and works well, but I figured why bother with web pages and such if I can just run my Flash app in a native runtime environment without the involvement of the browser footprint.

The connection should be evident; there I was developing a Twitter client in Flex Builder, and publishing it to Air, using the Mate framework. So I decided to marry the two efforts, and see if I could branch my slowly developing Twitter app—it's hard to find spare time, but I fit it in now and then—and see if I could tweak it for delivery to the iPhone via XenApps.

Yay verily, it worked; I installed the Air runtime on the Windows instance, installed my Air TcozTwitter client, published it through the XenApps server, and pointed the iPhone Citrix Receiver at it, and there it was, touch enabled and all. True, I had to rethink the UI in terms of the iPhone. I've had people say that Flash apps won't port directly to the iPhone because they use mouseovers and such—think about it, the iPhone doesn't have “fingerovers”, which is interesting—but that's true of any technology no matter what. As a UI developer, you have to look at the device, consider the interactivity, and develop your app, using your given technology, in that context. If you factor your code well and the UI is truly abstracted, this isn't that big a deal though at all, certainly a heck of a lot less work than writing the whole thing all over again in Objective C...and then Symbian...and then Android...and then Windows Mobile...and then Blackberry...and whatever else winds up getting cranked out of BigTech Labs XYZ.

Here's points I found to be VERY interesting about this manner of development:

I'm not an “enterprise”, I'm an independent developer. But, I don't just write code for clients, I build things off to the side to keeps my chops fresh and who knows, maybe make some money. I find that this technology, although created by Citrix which is typically associated with “enterprise”, works for me. The Citrix guys seemed to find that interesting too. A library of demo apps that I can bang off a single EC2 instance is also a powerful demo tool for landing contracts. As I mentioned once before, I could probably get work just by having put all this together.
With just UI refactors, I can roll out the same codebase to any mobile device that Citrix has written a Receiver for. They've covered a number of them, see their website for more info.
The XenApps “tweaked” version I'm working with, via the Receiver, presents your apps as a selectable library; so, the user downloads ONE app (the phone-specific Receiver), and they can access ALL the apps that I publish though XenApps.
Consider the above...all I have to do, to deploy a new app to my entire userbase, or update one, is install it on my EC2 instances, which you access via RDP or the Citrix Receiver desktop app (I use the Mac version). No app store approval iterations. It'll be interesting to see how this shakes out.
Because the app runs on a regular server, I don't have the development restrictions inherent on the iPhone. I can make any number of network connections of any kind, store data in a variety of ways locally, and whatever else I need to do. The available technology I can use to drive my apps is essentially unlimited.
For proving out concepts and getting user reactions, this can't be beat. I can build apps rapidly in one codebase, get them deployed to all kinds of devices, and see what users think. What hits on a Symbian may not hit on an iPhone. Depending on the reaction, I can decide to build a native app, or abandon the effort for a given platform.

There are some things I have yet to figure out, the Citrix guys say they are interested in helping me find solutions:

Encrypted data store in the Air runtime is having some issues; I believe these are probably related to the permissions that XenApp is using to run apps under; some server config will probably solve this, if not, I can always just dump everything to a SQL DB or some such.
iPhone mechanisms, like the auto-complete for text, the new cut 'n paste, and such, don't work, because the app isn't actually running on the phone. Fixable, because I can just build the capability into the application, and just make sure I emulate the iPhone look 'n feel. The investment of time can in fact give me the same look and feel consistently across any device...nice for my end users on different platforms, and of course very useful looking forward to things like NetBooks and touchscreen e-readers.

Will I abandon building native apps for the iPhone, and whatever else I find the time to learn how to build apps for? Of course not. There's money to made out there, and different development technologies is something I'm interested in. So, the Objective C book and Xcode will still take up space on my hard drive, and be frequently used.

But, if I work with a client that needs apps rapidly deployed to a variety of devices, without going through the rigor of building multiple versions and maintaing multiple code trees, will I be glad that I learned how to do this...and, will I continue to ensure that apps I build are constructed in such a way where I can branch and get a version running on the iPhone this way in relatively little-to-no time?

You bet. Citrix has most definitely found a place in this independent developer's toolbox.

I wonder how many other contract Flash developers have said that.

As always, thanks for visiting.

Article Links:

TcozTwitter: A Twitter Client using Adobe Air and the Flex Mate Framework: Day 1, Day 2, Day 3, Day 4, Day 5, and Day 6.

Flash/Flex...on the iPhone? Initial Exploration, Follow up with Citrix.

Why the Amazon EC2 Could and S3 is a great thing for the independent developer, Article Link

Labels: , , , , , , , , , , , ,

Friday, June 19, 2009

iPhone 3G S Unboxed, and some immediate things I noticed...

Here it is, in all it's shiny new glory. Time to upgrade from the OG (though I will keep it on as a developer device...it's still a perfectly good phone).

Some immediate things:

- Looks like WiFi settings don't roll over on a fully sync, I had to dig up two of my old wifi keys.
- Compass looks like it's subject to interference. I had it near a monitor and a wireless mouse, aside from that I can't see any powerful magnets or wireless devices that would cause undue interference.
- The home button doesn't "click" anymore, you just touch it. EDIT wrong...it was just sticky. It clicks.
- Initially, the Tekkeon "MyPower" battery/sleeve I bought, which worked fine with the iPhone OG and says it works for the 3GS on their website, reports "charging is not supported with this accessory" on the 3GS. Not good.
- The restore went VERY quickly; the 8mb from my OG iphone was done in about five minutes.
- It doesn't come with a little dock.
- The OG docks doesn't seem to fit.

Compass Fail:





Tekkeon Fail:





iPhone Unbox:




























Labels:

Wednesday, June 17, 2009

TcozTwitter: A Twitter Client using Adobe Air and the Flex Mate Framework - Day 6: Running on the iPhone

It's been a few days since my last post, but I've been VERY busy. Swift3d V6 is out (it's great 3d modeling and animation software, very Flash and Papervision friendly), I'm still skilling up my iPhone dev chops, I'm digging in to Flash Media Server 3.5.2, my current contract is coming to release (V1.0 of Thomson Reuters Insider), and...well, you get the idea.

If you've been following my blog, you know I've been working with Citrix to use their XenApps image in the Amazon EC2 cloud to deliver Flash/Flex/Air apps to the iPhone using the Citrix Receiver. You can view the previous post links on the right of the blog page, or search for "iPhone" and "Citrix" tags to review previous posts on how I'm going about this.

I've got the issues sorted for the most part: design parameters for an iPhone app delivered this way, how to get rid of the Adobe Air EULA so that users don't have to click through it, and so forth. I've even got ads integrated (I'm running an OpenAds server that I've set up a couple of campaigns on for friends that own businesses...free ads for them, proof of concept for me).

I'm going to put up a full blog post on the issue, but for now, here's a picture of what I'm looking at on my iPhone. I just leave it up in my iPhone doc, and see my tweets come in without any refreshes; it's a fairly real-time twitter client. I've even tried it over the EDGE network, it works fine (remember, that client is actually not running on the iPhone). No awkward refreshes like standard VNC or RDP, etc.

With this as a base, adding features to complete the functionality is pretty straightforward. I'll be adding a login screen (right now it just uses my creds), a post-tweet screen, a fancy loader, and all that. But it's all just Flash development at this point, the mechanism to deliver it to the iPhone running as a native app, all I need to do is update the Air app on the EC2 cloud instance to deploy a new version; users of the Citrix Receiver won't have to update the app, they'll just have to restart the Citrix client.

Pic below, detailed blog post in next couple of days. Interestingly enough, there's not that much to tell. If you know how to put it all together, it's actually pretty easy to set it all up.

Labels: , , , , , , , ,

Tuesday, June 9, 2009

Buying the iPhone 3GS: Existing customers, buying from either Apple or AT&T doesn't matter, and woe to the non-upgrade eligible!

Figured I would blog this to put an actual experience buying an iPhone 3GS, with details on upgrades and non-upgrade purchases. Not to mention that...I mean, c'mon. I gotta have a blog post about the new iPhone, and at this point, aside from what everybody already knows from the WWDC, this is all I've got to add.

I'll start with the bad news: if you're not eligible, this article from Boing Boing is the reality:

IPHONE 3G S: WORLD'S BEST PHONE SADDLED TO WORLD'S WORST CARRIER

The article states:

For non-qualified customers, including existing AT&T customers who want to upgrade from another phone or replace an iPhone 3G, the price with a new two-year agreement is $499 (8GB), $599 (16GB), or $699 (32GB). Visit www.wireless.att.com for eligibility information.

Lucky for me, this doesn't apply. I didn't see the upgrade to 3G to be worth it. True I was a little jealous of the network speed now and then and the maps feature on 3g worked better, but the overall ROI just didn't seem to be there. Funny the things people said; the CEO of a startup I did some work for said, "you must not be a power user". Erm...no. I'm just an adult that made a decision based on value.

Anyway, let's talk about upgrade purchase. I have an OG iPhone, have had it since day one. Yesterday I bought a 32gb 3GS iPhone from the Apple Store, right after I got the email following the WWDC, so it was about 6:30 p.m. EST. It cost $299, and the ordering process appeared aware of my current AT&T plan and upgrade eligibility, actually asking me if I wanted to upgrade any portion of it. I also paid for one-day shipping, which was $16 dollars. The total was $337.05 with tax, and the shipping date is June 19th. All this was sent to me in an order confirmation as well, so as far as I can tell, I'm good.

So, to clarify, because people have told me otherwise...THERE IS NO DIFFERENCE BUYING FROM THE APPLE STORE OR AT&T. NONE. The Apple store is aware of your upgrade options and so on, and AT&T customer service told me point blank that it doesn't matter.

Why didn't I buy from AT&T directly? Only because I got the offer email from the Apple Store first, and wanted to place me order ASAP.

Anyway, to nail in the facts, I went to the AT&T site, and checked out both "Add an new Line", and "Upgrade".

This picture was identical for both "add a new line" and "upgrade". Note it's $299.



A visit to the website, a call to customer service, and my email confirmations, confirmed it all. If you're reading this, you have the facts: eligible for an upgrade, the phone will cost you $299, not eligible, it'll cost you $699 for the high end. And there is no difference if you buy it from the Apple store or from AT&T.

I'll tell you this, for that money, I would just upgrade the 3G to the 3.0 OS and forget the new phone; wait for the next one. I just don't see it being worth the money, exactly as I didn't see the 3g being worth the money compared to the original, and, if you're already a 3g owner, you're on the faster network. I have a feeling that, aside from the better camera (which really still isn't all that great) and the bigger capacity for the high end one, there isn't much of a difference to the typical user.

What would NOT surprise me though, is if all of us upgraders get ROOKED six months from now, exactly as we did when the iPhone first released, the price plummeted later on, and they gave us a $100 rebate usable for in-Apple-store purchases (thanks Steve J. for the $87 power cord for my $3,200 first-day Macbook 17). Six months later they'll put out a faster network and another phone on it or some BS like that. Apple has a history of this and it sucks.

But then I'll just resign myself to another two years, and enjoy my new iPhone, exactly as I do my current one. I never lost a contract because I broke out a pre-3G.

There you have it. As always, thanks for visiting.

Labels: , , , ,

Wednesday, June 3, 2009

iPhone app development...using JS and HTML instead of Objective C? Freakin' amazing!

I had to try this; check out NimbleKit. I dabble in iPhone development, and have already gone through the rigor of Objective C, but I mean...JS and HTML?

NimbleKit touts, "NimbleKit is the fastest way to create applications for iPhone and iPod touch.You don't need to know Objective-C or iPhone SDK. All you need is to know how to write an HTML page with Javascript code."

I'm dubious to say the least; write in one language, compile to another completely different environment, is something I've seen blow up more than once. But then again, I was dubious of the Google Web Toolkit, and that worked really well when I needed it. With that said, let's give it a try. I downloaded the installer, which adds a new project type to your XCode iPhone Applications project templates:



Firing it up brings you to the dev interface for the project. It looks more or less like a regular app, with the addition of a the NimbleKit supporting binaries, like libNimbleKit.a, the NKit.js library, and an HTML folder in the project explorer. The page of interest to me is located in that HTML folder, called main.html, and we see it includes the NKit.js file.



So, let's compile and run the project on the iPhone (I'm a registered developer) using just the default HTML text in the emulator...BONK! NimbleKit wants you to register NimbleKit, and initialize it with the serial number they send you in order to test on the iPhone. I'm not inclined to do that at this point but, it did show that NimbleKit will deploy the app to the iPhone without issue; I actually see the icon on the iPhone and everything exactly as you'd expect. The pic below is a screenshot from the iPhone:



So, for now we're using the emulator. My confidence is building though, if this thing really pans out I might just register and get a serial number. Right now though, there's very little documentation and only one tutorial. I think I'll wait for another rev to commit.

There's a tutorial showing how to build a simple "Radio" application, but what I think I'm going to do is just try to knockout a hello world that loads an image. Right off the bat, you can see that, while you use JS and HTML as your "MainView", which is what you put UI items on. Let's try to add a button, and an image control, so that when we click the button, the image loads. Nothing fancy, but this gets us through creating and positioning UI elements, hooking up events, and UI elements that react based on the result of that event (in this case, a button click). This is a basic exercise I try in any UI development environment I come across.

In Objective C, the code might look like this; this is the implementation class, I'll leave out the interfaces and whatnot. Note that in the NimbleKit project, I don't have to worry about the separate interface and implementation objects, I just work right on that HTML page directly.


- (void)loadView
{
[ super loadView ];

mainView = self;

btn = [ UIButton buttonWithType: UIButtonTypeRoundedRect ];
btn.frame = CGRectMake ( 110, 10, 100.0, 20.0 );
[ btn setTitle: @"Load Pic"
forState: UIControlStateNormal ];
[ btn addTarget: self action: @selector(btnClicked:) forControlEvents: ( UIControlEventTouchDown ) ];

[ self.view addSubview: btn ];
}

- (IBAction) btnClicked:(id)sender
{
/*
UIAlertView *alert = [ [UIAlertView alloc]
initWithTitle:@"Hello DevX" message:
@"iPhone, here I come!"
delegate:self cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil];
[alert show];
[alert release];
*/
img = [ UIImage imageNamed: @"cat.jpg" ];
CGSize imageSize = img.size;
myImageView = [ [ UIImageView alloc ] initWithImage: img ];
myImageView.frame = CGRectMake ( 0, 100, imageSize.width, imageSize.height );

[ mainView.view addSubview: myImageView ];
[ myImageView release ];

}


So, let's try and port that same idea into NimbleKit. Although there's no documentation, I saw in the video and in the screenshot on the home page that the UI elements are preceded with "NK". Those aren't native iPhone framework names...hmm, where do I get the object names? My guess would be, since you do this all in a JS script tag, I'd need to look in the nkit.js file, and sure enough, that's where I found what I was looking for; NKButton, and supporting methods.


function NKButton()
{
this.init = NKPlaceNativeButton;
this.show = NKShowNativeButton;
this.hide = NKHideNativeButton;
this.setTitle = NKSetNativeButtonTitle;
this.setImage = NKSetNativeButtonImage;
this.id = CallNKitAction("NKCreateButton?sync=yes");
}
function NKSetNativeButtonImage(imageName)
{
CallNKitAction("NKSetNativeButtonImage?image="+imageName+"&id="+this.id);
}

function NKSetNativeButtonTitle(title)
{
CallNKitAction("NKSetNativeButtonTitle?title="+title+"&id="+this.id);
}

function NKPlaceNativeButton(x, y, width, height, callback)
{
CallNKitAction("NKPlaceNativeButton?x="+x+"&y="+y+"&width="+width+"&height="+height+"&callback="+callback+"&id="+this.id);
}

function NKShowNativeButton()
{
CallNKitAction("NKShowNativeButton?id="+this.id);
}
function NKHideNativeButton()
{
CallNKitAction("NKHideNativeButton?id="+this.id);
}



So, with this info in hand, I tried to write out the JavaScript. Doing "var btn = new NKButton ( ), and setting the properties every which way, didn't make a native button appear. Ok, I'll go with a NKNavigationController instead; this worked as expected, a nav controller appeared on the top of the emulator screen with a button, and a test event handler that shows an NKAlert worked. So far so good.

It then dawned on me that I wasn't thinking about this right; I'm supposed to be using HTML and JS, not trying to figure out how the standard iPhone SDK applies. So, let's shift thinking: I'll still use the NKNavigationController (though based on what I can see, the button should have worked...DOCS PLEASE!), but I'll also add a button under it that does the same thing; clicks and makes the image appear. For the image, I'll just put in an HTML "img" tag, with no "src" attribute specified. When I click either the button in the nav bar, or the standard HTML button, I'll call a JS function to load the image. Here's my code:


<html>
<head>
</head>
<body>
<script type="text/javascript" src="NKit.js"></script>

<script type="text/javascript">
var navController = new NKNavigationController ( );
navController.setTitle ( "Testing NimbleKit" );
navController.setStyle ( "black" );
navController.addNavigationItem ( "Image", "showImage" );

function showImage ( )
{
img.src = "cat.jpg";
}

</script>

<input type="button" value="Load Image", onClick="showImage ( )" />
<img id="img" src="" />

</body>
</html>


And I will be freakin' damned...they both worked perfectly. Screenshots below. I gotta say, I'm stunned. The potential for this development kit is pretty staggering when you think about it. The developer of NimbleKit has essentially put basic iPhone development into the hands of every basic web page developer.

You think there's a lot of apps in the iPhone store NOW...just wait 'til this gets out!

As always, thanks for visiting.




Labels: , , , , , ,

Monday, June 1, 2009

Flash Flex on the iPhone? Setting up the Amazon Cloud Instance running Citrix XenApps

This is a continuation to my series of articles detailing how to get Flash Apps running on an iPhone...sort of. You really don't run Flash on the iPhone, you run it on a Citrix XenApps server, which runs on a Windows instance in the Amazon EC2 cloud.

My previous blog articles can be found here:

- Flash, Flex...on your iPhone?
- Monday, May 18, 2009 The Citrix Receiver Follow Up: Flash/Flex (and then some) on your iPhone...or Symbian...or WinMo...or...

Quick blurbs on what the technologies I mention above are:

- Flash/Flex/Air: if you're reading this article, no explanation needed.
- Citrix, simply, specializes in terminal-based delivery of applications. Think "thin client" delivery of applications.
- XenApps, in there own words, "Citrix XenApp virtualizes an individual application, be it Microsoft Office, PowerPoint, Excel, or SAP (sic, or Flash, etc.), allowing users to run those applications on a client directly from a XenApp server hosted with a Windows application."
- Amazon EC2, cloud-based computing infrastructure. I describe this more below.

So, my goal is to "Deliver Flash/Flex/Air apps, initially for the iPhone but eventually for any client, from the EC2 cloud running an instance of a Windows Server running Citrix' XenApps".

Whew. I could probably land a contract just by saying I know what that means.

In order to get this rolling, I'll have to get a Citrix XenApps instance running in the on the Amazon EC2 cloud. Citrix offers a video showing how to do this, you can view it here.

Three IMPORTANT notes, this is fair warning, and this is coming from somebody that has worked with resources in clouds before (I've just never been responsible for actually configuring and maintaining one).

- WATCH THE WHOLE VIDEO CAREFULLY. Believe me, you won't figure it out on your own if you've never done anything like this before.
- DO NOT SKIP THE VIDEO IN FAVOR OF THE "STEP BY STEP" IMAGES BELOW THE VIDEO. They don't provide enough detail.
- DO NOT USE SAFARI. If you're a Mac user, you probably know Safari doesn't always work well in sites that have multiple form submissions. The Amazon web pages broke quite a bit until I switched to Firefox.

Let's talk about what "an instance in the EC2 cloud" means. An "instance", is conceptually like a dedicated server...but it's not. It's an allocation of resources that appears to me to be a server, but which is disposable; when you terminate an instance, it's configuration is saved so you can restart it, but otherwise, the resources are freed up. The company, like Amazon, uses commodity hardware to build a platform to make instances available, and you pay for the time that each of your instances runs, because you're using resources in their cloud. When I terminate the instance, I don't get billed anymore, because there's no server to keep up and running, just a stored configuration that gets reconstituted into an instance if and when I start it back up.

Conceptually, the "cloud" is like a big ball of clay. When I need a chunk of clay, I grab off as big a handful as I need; I pay for that chunk based on the size of it, and how long I keep it out of the main big ball. When I'm done, I take a snapshot of the chunk, and just put it back onto the big ball. It's now available for anybody else to use, and my billing stops until I grab a new chunk, which by using my snapshot, can get instantly reshaped to the last known configuration. I can grab as many chunks as I need, shape them all differently, and so on.

It's a great model. In addition to a website hosted by Brinkster (where my blog and main site is), I currently pay almost $150 a month for a dedicated Windows server that I use for deployment and testing of customer apps. I pay for it whether or not I'm actually doing anything with it, which has irked me more than once. It's a business write off and all that, and IMHO an essential tool for any independent web-based software developer, but still, if I can economize by just using cloud instances of windows and linux servers, activating and deactivating them when I actually need them, and enjoy the easy flexibility of multiple environments (this one runs Tomcat on Linux...this one .Net on Windows Server 2008, etc.) I can cut that cost to a fraction and save myself multiple webserver config headaches and such.

Anyway, to get started, you go to the Amazon Elastic Compute Cloud EC2 Site. Initially, this is a little scary, because you see a list of usage fees by the hour, and you have to submit a credit card. But I'm intrepid, and have a business credit card, so on I go. I needed to set up an EC2 account, which lets me run select all kinds of pre-made server images that I can run as instances, and an Amazon S3 account, which is the storage mechanism for my files and so forth. They run independently of one another; again, remember that you're not actually running a server, you're running an allocation of resources, broken down into processing and storage. This way, I can run the same image as multiple instances, each with different (or differently configured) apps, using different amounts of processing power, all pointed at the same storage, or different areas of storage. Very flexible and elegant.

Anyway, the EC2 account I want to run my server images in is "$0.125 per Small Windows Instance (m1.small) instance-hour (or partial hour)". According to the documentation, it breaks down like this:

- You're paying by the hour, 12.5 cents, for every hour your instance is running. Hmm...let's assume I'll leave it up all day for a month: 12.5 x 24 = 300 cents = three bucks a day, x 30 = 90 bucks a month. I don't mind that as an investment in learning this technology and proving its use; if I land one contract because of this, it'll more than repay me in a couple of hours. And if course, I don't have to run it all the time.

- The specs for a Small Windows Instance, which should be plenty for my development experiments and demos: 1.7 GB of memory, 1 EC2 Compute Unit (1 virtual core with 1 EC2 Compute Unit), 160 GB of instance storage, 32-bit platform. Hmmm...we'll have to see how it goes. The large instance has 7.5 GB or memory, but is fifty cents an hour. So, here's hoping the Small Windows Instance can swing it.

So, you fill out the forms (again, don't use Safari), which when complete, takes me to a page with the following message:

"Thank you for signing up for Amazon Elastic Compute Cloud. We will e-mail you a confirmation when the web services are available for you to use. In order to begin using this service, you will need a X.509 certificate. You can Create a New X.509 Certificate or Upload Your X.509 Certificate."

Ok...so let's create the X.509 Certificate. If you don't know what one is, an X.509 certificate binds a name to a public key value; more generally, a public-key certificate is a digitally signed statement from one entity, saying that the public key (and some other information) of another entity has some specific value. So, by using a certificate, a browser and an application know that they are speaking to the intended targets by comparing those values; if it checks out, the communication is coming and going from where it's supposed to.

After a minute or so to create the certificate, I now have a certificate assoicated with my EC2 account, and my instances will be run using it.

That really seemed to be about all there was to it; strangely enough, by signing up for EC2, I seemed to have already signed up for S3; I went to the S3 page to sign up, but it told me I already had access, and as far as I know, I've never signed up for it before. It makes sense, but seemed a little implicit; I'd prefer to have at least received an explicit notice of some kind. It doesn't seem to cost me any additional money though.

Once that's done, you go to the EC2 Console and look up an image of the XenApps demo image. This image is located in the Community AMIs list after you click "Launch Instances" (search for "XenApps"). In order to do so, you'll need to create a security group and a key under which to run the instance; these items do things like open ports so that you can access the instance however you need, like HTTP, RDP, and via the Citrix clients. WATCH THE VIDEO, it explains exactly how to do this and what it means.

All in all, not so bad to get this end of it up and running. I still need to know how to upload and configure apps to make them available, but that's the next step. For now, I'm an independent developer with direct experience in setting up custom configured server instances in a cloud. I understand the benefit of it and can put out a wide number of configurations for any kind of client to access and test applications, and it's costing me twelve-and-a-half cents an hour to play with. Worth every penny IMHO.

Next, making Flash/Flex/Air apps available on my fancy new server instance running XenApps.

As always, thanks for visiting.

Labels: , , , , , , , , , , ,

Thursday, May 28, 2009

Amazon adds Browser Access to Kindle User Highlights and Notes

Amazon continues to enhance the Kindle experience. I got this email a little while ago:

--------------------------
Dear Amazon.com Customer,
Our customers have told us that they love being able to add highlights and notes to their Kindle books. We want to make it possible for you to access your highlights and notes directly from a Web browser too. So we've released http://kindle.amazon.com, an online tool that enables you to do just that.

To try it out, go to http://kindle.amazon.com, sign in with your Amazon account, and simply select one of your books where you have added highlights or notes.

We hope you enjoy this new feature. If you have feedback please send it to us at amazonkindle-feedback@amazon.com.

The Amazon Kindle Team
---------------------------

Tellin' ya, I love the Kindle. The more I use it, the more I know that anything remotely resembling a backlit laptop, netbook or otherwise, isn't a substitute. You can use it anywhere and it's never inappropriate, because for all intents and purposes, you're reading a book or a notepad. I only refrain from using the keypad now and then, like in crowded, subdued situations, e.g. when you're in a conference session, around people eating dinner in a restaurant, etc; it can be distracting.

A while ago, I got into an online back 'n forth about the usability of a Kindle compared to a real book. One of the forum commenters said that it's harder to take notes on a Kindle, and that he'd rather just use a book.

I respect books, I own a lot of them; but fact is, we waste a LOT of paper on them, and many kinds of books aren't intended to convey that aura of "book". Technical manuals, programming books, general paperbacks, reference guides, blogs, etc., are about conveying information to me; I just want the content. For that sort of thing, if you can make a better book, which makes annotation, highlighting, clipping, bookmarking, and searching faster and more robust, you've got my interest.

The highlighting and annotation feature of a Kindle is essentially, pushing a button and moving a cursor. It can be a little awkward across pages, otherwise it's easy and fast, certainly faster than carefully drawing long horizontal lines. Clipping articles and taking notes is essentially the same thing; hit Menu, select Add Note or Clip Article, and it's done. There's keyboard shortcuts I'm sure, but the menu options don't bother me, so I haven't really explored them.

What happens to these notes, highlights, and clippings? They get stored in a sort of "book" of their own. On your main book list, you open "My Clippings", and lo and behold, there they all are. This information is actually saved to a .txt file on your Kindle (right in the root directory), so if you want, you can even move it to your computer and print or edit it. I find this VERY handy. If I could print right from the device that might be welcome, but again, the Kindle is supposed to be a better book, not a laptop or tablet; I appreciate the distinction.

All this data gets backed up to your Kindle account online via the free "Whispernet" 3g wireless access you get with the device. So, if you ever lose your Kindle, or want to view the information on a different Kindle, your good to go; just sync it to the new device. I was disappointed to find that "My Clippings" didn't seem to be on the iPhone though. Well, at least I can grab the txt file...

...no need anymore. Now I can just use any browser-enabled device, access my Kindle account, and get to My Clippings. Here's a shot of it on the iPhone, this not being possible until today.

Note: To get it REALLY right, you should just be able to access "My Clippings" from any Kindle reader, iPhone-based or whatever. It's still not on the iPhone native app as far as I can tell.

The below shows a book I read on my Kindle, which had a music exercise (you had to write down the key a piece is written in based on a the chords used to create the music). I just did it with the keypad on the Kindle while on the subway. Below you can see the chords I entered (got 'em all right btw yay).


Labels: , , , , ,

Wednesday, May 27, 2009

Meebo Chat: browser-based universal client. I use it, I like it. The new notifier has Email notifications now...Windows only though (argh!)

I'm a longtime fan of Meebo, click here to check 'em out. In a nutshell, they are a browser-based chat client that allows you to connect to just about any chat service in a single view: Yahoo, AIM, Jabber, Facebook chat, and more. You can use them all nice 'n neatly, with all your contacts mixed 'n matched as needed, in a single browser tab.

Meebo has announced the following via their blog (which pops up in a chat window when you start Meebo), this version shortened to highlight the important bits:

"Mail notifications for the notifier (plus proxy and ssl!)

We have something pretty cool to announce - the Meebo Notifier now supports email notifications!...Meebo Notifier for Windows can now alert you when you get new emails for your Gmail, Yahoo, Hotmail, and AIM accounts.

Whenever you get a new email, the notifier will show a popup notification just like it already does for IMs, and will also create an icon in the system tray next to the Notifier icon (as shown below) so that you can easily access your email accounts.

A simple click on a mail notification or its corresponding icon will take you right to your mail web page.

By the way, in case you missed them, we introduced a couple other new features in the Notifier a few weeks ago: HTTPS support...Proxy access."

The notifier is a native app, which at this point, unfortunately only runs on Windows, so I don't use it (MAC CLIENT PLEASE). It looks like this:






Why I started using Meebo is actually sorta funny. I was on a big account in NYC--you've all seen the work more than likely--and needed to communicate with some developers about external video feeds.

Naturally, you send URLs back and forth; we were using AIM to do so. Security had decided they didn't want URLs going back and forth through their routers; don't ask me why, it's ridiculous I know. Everybody got around it just by typing, "go to www dot domain slash dot" and so on. Dilbertian corporate thinking at its best; hinder an employee's ability to do a job, call it security, and check something off your list.

One day I was walking around the floor, and an employee was using some browser-based chat client. I saw a URL pop up in one of the chat windows.

I queried, "WTF is that?". He replied "Meebo. It runs over HTTP/port 80 so security doesn't block it".

Five minutes later I had a meebo account, and I've been using it ever since; that's probably at least three years, maybe more.

Meebo has evolved quite a bit since I started using it as a humble way to beat corporate security. The notifier is a recent thing (but again I don't use it MAC CLIENT PLEASE). It also didn't have advertising; it does now, and I must say, if you must have advertising, their model is an example of how to do it without pissing off your users. Ads appear as a slide-up panel at the bottom of the window, which you can click an arrow to close into an unobtrusive bar at the bottom. They tried one or two other more intrusive models, users didn't like it, they ditched it. We recognize they're a startup and need money, but if any service compromises gets pushy about premium access by destroying the original experience, I'll drop you the same day.

Pic below:




They've also got a browser-based Mobile client, which works fairly well, a screenshot from the iPhone of the contact list is below; you sign in, you see your contact list as pictured below, you tap a contact, you go to a window dedicated to that conversation. You can run multiple conversations by tapping back 'n forth to the contact list.




You can set some nice options, like backgrounds and such, turn notification noises on and off, add/remove accounts, use hide/invisible on each of them, use custom status messages, review chat history, and so on. All the things that you'd expect these days from a chat client. Meebo even implemented file transfer a little while back.

Meebo also has a nice little service feature; you can actually create your own Meebo room on your own web page. Think of it as a turnkey chat solution. You go to their Meebo widget configurator page, set some options, and blammo, you have a dedicated Meebo room that other people can visit. If you look at the first page, you can see the un-blurred "tcoz's room" entry at the top of the contact list. When you double click it, you see this:




Notice the "embed" button at the top. When you click it, you get a window that lets you copy markup for pasting into your own web page, and blammo, your site is chat-enabled with your own Meebo room. I don't use them because I dislike the advertising integration, and there may be a way to turn it off that I haven't found, but if you're looking for something fast that works, it's a good option.

So, Meebo has gotten more interesting. If you're on Windows, try the notifier.

One more time...

MAC NOTIFIER CLIENT PLEASE ok plz ty.

As always, thanks for visiting.

Labels: , , , , , ,

Monday, May 18, 2009

The Citrix Receiver Follow Up: Flash/Flex (and then some) on your iPhone...or Symbian...or WinMo...or...

I said I'd follow up on my story Flash, Flex...on your iPhone?, (this story generated a lot of press, got picked up by TechCrunch and blogs all over) and here it is. 

As a quick recap, I looked at the Citrix Receiver iPhone app, and was impressed with the experience. It's not a VNC or RDP solution; Citrix has created a client that, by use of a highly optimized communication protocol, lets you view apps running in the EC2 cloud (for the layman, that means "you see it on your phone but it's actually running somewhere else") without installing them on your phone. This means that you can build an application out of any technology, deploy it to the remote server infrastructure, and access it on your phone, or computer, or any device that runs the Citrix Receiver. The technology is optimized for this use; there's no awkward, blocky screen redraws, no browser toolbars, etc. A properly designed application appears to be running as a full-screen application on the phone, no matter what technology it's built out of. This suite of tools is branded "XenApps" for the most part; I'm not one of their marketers and know there's more to it, but "Xen..." is a big Citrix branding buzzword these days.

It's amazing how many people responded negatively, clearly without trying the Citrix Receiver demo. For the most part the issues are around the rampant abuse of Flash all over the web; poorly programmed banners, autoplay video players, that sort of thing. I concede: the web is full of bad Flash, and if that's the extent of your experience, you'll probably be pretty close minded about the subject. I've been a Flash developer for a long time though, and have never programmed a banner. I work on enterprise-level applications that make companies money; I've built applications that you've more than likely used, and that have helped people sell companies, and is currently helping a startup stay in business. Flash development, with Flex and Air, is stronger than ever and isn't going anywhere. Hating it is a waste of time. 

To continue my rant, I'll tell you one thing for sure: I don't want to be in the business of porting those apps to every different platform on earth. Yes, I could make money doing it. But it's boring and doesn't move me along to the next new project. People say, "forget Flash just build an iPhone app". Erm...what about Android? And Blackberry? And Symbian? And Windows Mobile? And Windows desktop? And OSX Desktop? Hire all those developers....maintain all that code...I've got better things to do. I want my app to have as much reach as humanly possible with as little work as possible, and porting the code to everywhere isn't a good strategy. 

Note: Citrix said that for Blackberry and Android clients, we have to "stay tuned". The guys on the call wouldn't nail in any dates or promises about this, but they didn't say "no". I'd assume that, considering how attractive this technology could be to corporations, a Blackberry client would be a no brainer. There is currently one for the iPhone, Symbian, and Windows Mobile 6.1.

The Citrix Receiver, backed by the Citrix technology on the server side, is the sort of thing that makes this possible. Again I'll say, and Chris Fleck, VP of Solutions Development for Citrix agreed readily, that it's not for every kind of app; if you have something that requires lots of real-time graphical updates, like a MMORG or something, you should probably consider going native. But that's the minority of apps; 75% of the stuff I've seen in the iPhone app store, or more, could be served using the Citrix technology, which would give the developers the opportunity to deploy it to all the new platforms coming out. 

One big thing though; the Citrix Receiver is branded Citrix. This was a big downside, and I told the Citrix guys so; if I'm MTV, or Thomson Reuters, or CNN, or Disney, I'm not going to want my front-end gateway UI to be branded Citrix. I want people searching their platform's app store for my brand, and when they pull it down, I want to see my logo on their phone. Here's what it currently looks like:




To this, Citrix responded, "that's a real valid point. We're going to look into this". One of their developers that was on the call seemed to think it would be a no brainer to implement. So, from what I can see, Citrix is going to enable this. So, you brand the Citrix Receiver as your own...

...YOU DON'T EVEN HAVE TO BUILD IT. You just brand it and get it in the [ fill in mobile platform ] app store. 

Then you take your code base, deploy it to the Citrix solution on the EC2 cloud, and that's it. Anybody with the receiver can use your app, no matter what technology it's built out of. It just stuns me that people don't see the potential for this. If Citrix really puts in the time and makes this solution rock solid, it could very well represent a significant direction of the next wave of mobile device use. 

Citrix showed me how easy it is to do it; in fact, it looks so easy, and so cost effective to get up and running, that I'm going to try it with my Planet Sudoku app. They even have a little app shell, called "AppViewer" which you can embed your tech in, that takes care of the full-screen look-and-feel for you. 

Initially, I was going to port this thing to the iPhone, but now, as an experiment, I'm going to just refactor the UI to fit the iPhone, use the AppViewer shell, and deploy it with the Citrix solution; you'll be able to play my Sudoku client on your iPhone in a lot less time than if I retooled the whole thing to Objective C. More blogging to come on that one I'm sure. 

Is it really that easy? I don't know for sure, but as far as I can tell, this is a heck of a lot easier than porting the app to Objective C. In their own words (note that where they say "Windows", you can sub in "apps that run on Windows", like Java, Flash, Flex, Air, Silverlight, etc.):

"While unmodified Windows applications can be delivered to mobile devices via Citrix XenApp, XenApp also provides an excellent platform for delivering custom mobile applications. Citrix is seeing interest in this area from a number of it's ISV partners. The concept is to build the application using tools normally used to build full Windows applications, but simply design the user interface with the smaller screen size and resolutions of mobile devices as a design consideration. The concept is to reskin the UI of larger applications with a smaller form factor UI. As long as the custom mobile application can be published on Citrix XenApp, it can be delivered to mobile devices with the Citrix Receiver installed."

So, if this indie software developer can make this work, I'd pretty much say that anybody can, not matter what your reach is. You don't need deep corporate pockets; I don't actually know this for a fact yet, but I'm optimistic, and am actually trying it now, so I'll let you know. 

For more info on this topic, and/or to learn how to get involved in this sort of development, visit the Citrix developer community site, and take a look at the Tips and Tricks sections. 



Labels: , , , , , , , , , ,

Friday, May 15, 2009

Flash, Flex...on your iPhone?

I'm a Flash/Flex/Air developer primarily, with expertise in what I think of as "supporting" technologies (gateways and data layers built out of .Net, Java, PHP, Ruby, etc.). My usual contract gig is, I manage and/or work on an application's UI, using ActionScript technologies, and offer whatever assistance is needed to set up the gateway and data transfer backends. Sometimes I build all of it, sometimes I just have to work with the backend guys to understand how something like OpenAMF or Fluorine works, it depends on the client's expertise, but that's why they hire me. 

Flash/Flex, however, has been one of my greatest disappointments with the iPhone. We were promised "the complete web", and it's one of the reasons I jumped on the OG iPhone day one. Shortly after dumping my other phone and signing onto AT&T, I visited one of my ActionScript-based web apps...

...and discovered there was no Flash. Apple and their fanbois came back with a few short, lame justifications for this disclosure omission: "we support the open web, Flash is proprietary", "the Flash player is not really a Web 2.0 technology", were some of the things I saw bandied about. Fact is, it's the best solution for RIAs, and is getting stronger all the time. I've been doing this for 15 years, picked Flash/Flex for a reason, and the industry seems to support my decision; the NYTimes recently dumped Silverlight for Adobe Air, MLB did the same thing a while back if I remember correctly, and I'm currently working on a very large project that I can't talk that much about, but which will go live soon (and then I'll talk about it as much as I can). 

I have actually viewed Flash apps on my iPhone over VNC and RDP connections (check out WinAdmin in the app store). This lets me pull up a browser remotely, and access any web page I want, including ones with embedded flash apps. If the Flash app is designed properly, with a web page that properly sizes the browser, removed as many tool/status bars as possible, and so on, the experience isn't bad, but, I admit it's unreasonable to ask your average user to buy and install WinAdmin, or some other VNC client, to play a Flash game. I'd also have to provide the server for browser access, etc. 

It seems somebody has set out to solve this problem: Citrix. Take a look at this:

http://citrixcloud.net/

They offer a client for iPhone, called Citrix Receiver, which offers a 2-hour session, expires-in-24-hours, demo of access to the CitrixCloud. In their own words, the CitrixCloud, or C3 is "a complete set of service delivery infrastructure building blocks for hosting, managing and delivering cloud-based computing services. C3 includes a reference architecture that combines the individual capabilities of several Citrix product lines to offer a powerful, dynamic, secure and highly available service-based infrastructure ideally suited to large-scale, on-demand delivery of both IT infrastructure and application services. "

For the layman, that means more or less, "you can use our products to expose your apps to pretty much any client. With one of our viewers, a user can use any application on just about any client as if it was installed on their desktop". 

So, by now you may have guessed: The Citrix Receiver can provide access to Flash and Flex applications in a very compelling way. 

Ultimately, it's still the iPhone accessing web pages, but, it's not doing it through Safari, which can't run the Flash player. It's accessing a browser on a Windows machine remotely. The Citrix Receiver hides this though; you wouldn't really know it unless you were looking for it. The applications are sized full-iPhone-screen, some for landscape, some for portrait, and there's no browser toolbar or anything like that; you appear to be using a full-screen Flash/Flex app. 

So, when they go live with this (again, Citrix Receiver is a demo), does this mean I'll have to install the Citrix Receiver and understand all this cloud stuff to simply run an iPhone game?

Yes...and no. Here's a total hypothetical. Say you're an internet game company of some kind, something like a Pyzam. You're in the business of buying and developing Flash games, integrating advertising, all that. You create a branded version of the Citrix Receiver, and get your cloud infrastructure set up. Users go to the App Store, and get your branded viewer for free. They create an account, log in, and happily play Flash/Flex/Air games on their iPhone, with advertising and whatever else the developers build into the games/widgets/etc. 

I think that's compelling. Sure it needs more thinking through, and at this point is probably most useful to corporations or organizations housing large portfolios of Flash apps. But this is a direction that shows that, with some ingenuity, even today, you can offer applications built out of pretty much any technology on the iPhone. This also works with Windows apps, Silverlight, and so on, but I'm really interested in Flash/Flex. 

Also, it gets around a lot of the "pay for and we must approve" apps scenario, and enables use of ActionScript development resources, which are nowhere near the scarcity and premium of good iPhone development. If Apple doesn't like your content, they can reject your viewer though I suppose. 

So in the end...will phones just become all about the screen, and what viewer/cloud-access apps they can run? The thin-client finally plants its flag for good in the mobile world? Hmm...

Below are some screenshots from the Citrix Receiver demo. As always, thanks for reading Tcoz Tech Wire. 

Remember, these are Flash and Flex apps. They look great, and work as expected. These are screenshots right from the iPhone.

These two photos are of the Citrix Receiver interface for accessing different kinds of apps:







These images show some basic Flash/Flex apps from their demo. The first is a pretty standard reports app, the second shows network statistics in real time, the meters moved and everything just like a native app:







These images show a Shirt Configurator: you select colors, styles, logos, etc., and can save the profile. I found this very interesting.






Labels: , , , , , , , , ,

Wednesday, May 13, 2009

Hey OG iPhone Owners: First-Run Contracts end in June, Will You Consider Another Phone?

I just realized today, while reading the news about the no Steve Jobs at WWDC announcement that my AT&T shackles will end soon; my contract is coming up. I'm free to switch to another phone without penalty (unlike the nearly $200 penalty I paid to leave T-Mobile and go AT&T/iPhone).

Will I? I can't say right off the bat "no". It's also possible that I might double up; I'm an iPhone developer (well, emerging one anyway), and might go with another phone purely for techno must-have. I really don't know for sure.

There's some pretty interesting options out there. Things that attract my attention:

- Everybody says Verizon is better than AT&T. I bought my girlfriend an iPhone, and she loves it, but she says this all the time. AT&T does seem to drop a lot of calls and have peculiar dead spots, and the iPhone does occasionally just seem to drop signal, compelling me to shut it down and restart it. That's annoying.

More robust video media. Lots of phones have WAY better cameras, can capture video, and so on. It's be nice to actually be able to use my phone as a full-time camera; I pretty much consider the iPhone camera semi-useless. For example, the Samsung Omnia, which is very iPhone like, has a 5.0 megapixel camera, and a nice touchscreen on Windows Mobile 6.1, which is supposed to be really nice. This phone would actually be a contender.

Innovation. People are learning things from the iPhone, and creating some pretty slick devices like, the Samsung Alias 2, with "morphing keys" (the correct keys appear based on the context of your use, like dialing a call vs. texting). (Verizon). This keypad is powered by e-ink technology...very interesting. 

Also, along innovation, the Palm Treo Pro. Sprint is working hard on their network, I've heard from people it's solid now. I loved my Palm, and definitely am interested in what they're up to. It runs MS Office Mobile (hmm...full Office app on the phone? I miss that...), Windows Mobile 6.1 (again people say great things), a revamped IE Mobile, a touch screen with stylus (I used to use this a lot on the Palm), Bluetooth 2.0 (iPhone really sorta fell down in the bluetooth world)..another contender. 

Storage options, like the T-Mobile G1, with a really nice touchscreen, running Android, which means Google muscle and thinking, which is a significant consideration. This phone has a microSD card slot. The phone has some flaws though; I'd probably only buy this to get involved with Android. A second run on this phone though will likely be a significant improvement. Multiple home screens might also be very useful.

In the end though, what the choice really seems all about is the OS, and your techno-religious beliefs, i.e. Microsoft is evil...no, corporations are, so Apple is too...I hate MSFT stooges...I hate Apple hipsters...only Open Source for me...I really loved my Palm...and so on. 

Do you like Windows 6.1 (which really does seem nice, but again I don't know from direct exposure), Android (probably for the techno geek...but I am one), Palm for the old loyalist or because it's easy to use, Mac/iPhone? They all support developer platforms, all have touchscreens, music services, GPS, etc. etc. etc...

Hard to say, and I'll probably stick with the iPhone. But will I look? Damn right...why not? When my contract times out, it won't cost me anything to do so anymore.

Labels: , , , , , , , , ,

Tuesday, May 12, 2009

iPhone Apps I Can't Live Without (or actually just really like).

I'm not an App Store addict, but I definitely bought the iPhone to consolidate my on-the-go kit; I carried a Palm and a clamshell/Razor type phone for quite some time, then rolled over to a Dash for a while, which allowed me to cut loose the PDA for the most part (I loved the Dash, best speakerphone ever). It still wasn't the whole package though; the screen was small, Windows Mobile with ActiveSync could be problematic and apps frequently never worked properly...I wanted more function, less trouble.

A friend of mine had a line on three iPhones the day they released. He called me, said cough up the $600, and I would be among the cel phone elite. Funny how back in the day, people would've given an arm for an iPhone, but now it's, "there's no way I'd have spent that much money". Even all the "I don't need an iPhone and touch typing sucks" people now can't put their iPhone 3gs down. I always said, the only people who say they don't need one are people that don't own one.

Note: I never upgraded to the iPhone 3g, and still think it was the right thing to do. I'll be eligible for upgrade to the iPhone 3 (4g?) right off the bat, and from what I can see, there just isn't enough difference between the first and second gens to compel me to print more money for Steve Jobs (I also own a MBPro 17, a Macbook 13, and a Mac Mini). I bought my girlfriend a 3g, and have done a pretty close comparison; at the outset, I was a bit jealous of not needing wifi for some things, and the 3g is a bit faster, but over time that's evened out to the point where it doesn't bother me at all.

People say, "I have the 3g", I say, "I have the OG".

Regarding apps, I'm not an "app of the day" type. I select mine carefully because I'm looking for something specific, and when I buy one, I tend to use it hard; if I find it's not useful, I get rid of it quickly, and I've gotten rid of lots of apps. My phone isn't completely cluttered with freebies and all that; the apps in this list I find truly useful every day because they are part of my workflow and/or appeal to my interests directly. I don't look for distractions or time-killers, I look for ways to continue pursuing my interests.

Listed in no particular order, other than the order I keep them in on my iPhone:

- ToDo 2.0. I was totally disappointed in the ToDo list on the iPhone, just like everybody else as far as I know. ToDo is a robust, easy to use app with great sorting options, customizeable lists, a great and organized display, alerts, iCal todo list synchronization via the Appigo Sync desktop app (very unintrusive), a "focus list" for critical tasks, item tagging, drag 'n drop this 'n that, badge notification...it's absolutely what the iPhone ToDo list needs to be. It also syncs with ToodleDo, which I don't use, but people tell me it's really useful, so who knows, maybe I'll sign up. "It's freakin' great," pretty much says it all.

- NoteBook (www.appigo.com, the same makers as ToDo). A great notepad app in it's own right. Create notebooks to organize notes, have links in your notes, email notes, etc. etc. Way better than the standard "Notes" app (which I actually used all the time until installing NoteBook). The best thing though, is it integrates directly with ToDo; you can save a ToDo item as a note, or vice versa. Notes can contain web page and phone number links...again, it's freakin' great.

- Skype. I've been a Skype user since it got up and running, and have saved a fortune using it, not to mention giving me the satisfaction of stickin' it to the man. I do most of my communication through email, text and chat; phone conversations are brief, frequently cut short with a request to just email me the details. I also live and work in and around the NYC area, so wifi is usually close. Skype lets me bottom out my minutes plan, taking my monthly bill down significantly. The UI is completely in sync with the desktop app and I've never encountered any bugs. Freakin' great; saves me money and works fine.

- FireBox. Encrypted storage for personal info, passwords, etc. I've tried some others, but Firebox allows you to set up your own form templates and categories in a way that appeals to me. I store my credit card numbers and info, server logins, and all my website logins, etc., right on the phone. Lose your phone? No problem; the encryption is industrial strength, and there's a desktop app that syncs the encrypted store to your desktop. In fact, you can add and remove forms, categories and entries in the desktop app. This app has made the iPhone as important to me as my wallet, possibly moreso, since I don't actually carry a traditional "wallet" (I use a large business card holder, silver and fancy people compliment it frequently, and just fold up my money in my pocket). FireBox appeals to me more than other solutions because it is extremely flexible. I can configure my categories and entries exactly as I like, whereas other solutions I've tried have things like a "credit card template" that either wants too much or too little info, has fields named in ways unintuitively (at least to me), and so on.

- Twitterific. For me, the best Twitter app. Admittedly, I'm not the most experienced Twitter user, but I checked out Tweetie and a couple of others; I like the look and feel of Twitterific best. It's easy to use, exposes the functionality that's important to me very plainly and simply, multiple accounts and timelines are easy to navigate...I know, people are religious about their Twitter apps. For now though, this is the one for me. I use Tweetie as a backup (and have never actually had to use it, I really got it because so many people are like TWEETIE for god's sake!).

- Guitar Toolkit. I've been playing guitar for 23 years, with very few extended breaks, and usually take it more seriously than your typical non professional; lessons and all that. GuitarToolkit has a metronome, chromatic tuner, scale and mode reference with root tones indicated (all graphic on the fretboard, and interactive; touch the fret, hear the note), a chord finder for identifying and locating various chord positions and fingerings, and more. It's by far one of the most fully functional music/guitar apps period, let alone just on the iPhone. True, the tuner can bork in noisy settings, and some of scale generation logic needs a little tweaking (the positions are always right, but for example, sometimes an A sharp will be used in stead of a B flat, making the scale appear to be missing a note until you look at it twice), but since it's not intended to be a teaching tool and the positions are always correct, it doesn't bother me. The GuitarToolkit guys are affiliated with Agile Software, a dev shop in NYC that I actually do work for as well.

- GuitarChords, basically just a breakout of the chord reference by the guys at GuitarToolkit; useful because you don't have to init the whole app every time you want to just browse some chords to refresh your memory. They give this one away.

- Grand Pro. Imho, the best piano keyboard simulator for the iPhone. You can record and store your diddling, replay it, etc. Nice display options (single or double octave, small or large keys, etc.). Great for theory study on-the-go, comping ideas, and retrieving them later for notation.

- Karajan. A very interesting music learning tool, primarily useful for ear training. Sounds out series of chords, intervals, scales, etc., and you have to guess which one you're hearing, either from a list, or right on a keyboard. Ear training is an essential and overlooked part of many non-pro musician's study regimen, even serious ones. This app without a doubt helps me keep my ear in-tune while on the go.

- BofA iPhone app (Bank of America). I bank at BoA. Originally, the app was just short of a clunky web page shell. Now it's pretty slick, enables me to do transfers, balance checks, all sorts of online banking, with a glance 'n tap. I use this all the time.

- Kindle Reader. I'm a Kindle 2 (and soon DX) fan. I use the Kindle Reader to continue reading in settings where pulling out the Kindle and a booklight might not be appropriate, or just to browse and purchase reading material that I'll pull down on my Kindle later. A great complement to a great product. For reading though, the Kindle 2 rules, or I think so anyway.

Games:

- Chicktionary. A word game, create lots of words from a starting combination of letters, which is fun, but the graphics and sounds are really fun; I want a Chicktionary stuffed chicken that squawks when you squeeze it! The game is actually harder than you'd expect, sometimes frustrating in fact, but I prefer that to being too easy, which many iPhone games are.

- Caissa Chess: Challenging, great UI, great features you'd expect in chess software. I looked over a number of chess apps, and believe this is among the best. I'm not a pro or even advanced player, but I do enjoy the game and play on and off.

- Chess Player: A chess app, but you don't play, it steps through classic chess games of all kinds, allowing pause, replay, etc. Great for game analysis and allows a glimpse into the minds of the greats. Sometimes it's nice to just kibitz.

- Learn Chess: an interactive e-book, great for the learner, nice for the hobbyist. Lets you learn and/or brush up on all the rules (e.g. many don't know what En Pasante is), basic strategy, and some nice extras. Probably not for the advanced player, but still fun, and a great example of the "interactive e-book" genre, which is something I'd actually not heard of in the context of the iPhone. Might be worth a blog post of it's own.

- Trism. One of the first "featured" game apps in the App store. Sort of a Bejeweled kind of game, but uses the accelerometer to allow collapsing and shifting the tiles in any direction. Interesting features like bombs, tile locks, and so on. I still play this game when I'm too fried for chess, word games, or music study. Updates have made the game a lot smoother.

- Light Bike, the game right out of Tron. Can get kind of tiresome after ten or so minutes, but is still fun, and a great example of a 3d game working really well on the iPhone. Also has head-to-head play, which I've never used, but I've heard it works great.

That's pretty much it: I've got some other miscellaneous apps on there, but the ones I've mentioned above are the ones I use all the time; those apps have made the iPhone far more than just a phone and/or PDA to me. Naturally I also use it to watch movies, email, text, and all that as well, but if you're not sporting at least a handful of apps, you're not getting the full bang out of your iPhone.

As always, thanks for reading, any questions or comments, feel free, tcoz@tcoz.com.

Labels: , , , , ,

Monday, May 11, 2009

Climbing Mount iPhone Developerest: At the Foot (Getting it Up and Running)

If you didn't know from the blog description or my profile, I'm a software developer by trade. I've worked for American Express R&D, Microsoft, count Citigroup, Spectrum/IEEE and Thomson Reuters among my current project clients, and have run my own cottage dev shop for five years (lucratively enough to make a living, thank the powers).

My specialty for quite some time, actually as long ago as 10 of my 15 years in the field, has been, on top of competency with Java, .Net, PHP, and assorted ECMA scripting languages and whatnot, ActionScript development. I don't consider myself a "Flash" developer; "ActionScript programmer" is more accurate, though these days, I would add "Flex Developer" as well, since I work with and manage resources for some pretty big Flex projects. Facebook development is also up my alley, I actually was a paid reviewer for both O'Reilly Facebook dev books, but on the tech side, that really boils down to skill with ActionScript, JavaScript, and PHP (I do understand that integration of the social graph is another and equally important matter).

Note: Check out my Facebook Sudoku app, Planet Sudoku, at http://apps.facebook.com/planetsudoku.

Based on a history of development tools and languages that focus on the UI, and the fact that I own an iPhone and find it indispensable, it's probably no surprise that I got interested in iPhone development.

So there you are one day, saying out loud to nobody in particular (well, I do that now and then anyway), "I gotta get this rolling," and off we go.

Note: I'm aware of the open source alternatives to the official Apple SDK and so on; at this point, I'm only interested in being a fully legit, licensed, Apple iPhone developer, particularly because Apple makes it clear that any unsanctioned use means no App Store approval. I'm sure I won't be good enough to fool them for a long time, if ever, and I'm not prepared to take up the Jolly Roger for that cause right now.

So, my learning process, in a nutshell:

- Get a beta or something of the dev kit.
- Get the language book.
- Put on the strong black tea.
- For a month or so, allocate the time used for relaxing, working out, and playing guitar, to going through the samples, cursing at the screen, eventually figuring out how to make hello world appear when you click a button, getting the eventing mechanisms straight, learning how to call and use data, figuring out how to manipulate images...all the key stuff that you'd have to understand to be able to translate requirements, into features, into an app.

Additionally:

- Find the useful community resources (often done by googling for things that either seem broken in the book, or just because you know from experience there has to be a better way to do a certain something)
- See if any frameworks I already work with exist for the given environment (e.g. PureMVC for iPhone).

FYI, PureMVC for iPhone: http://www.darklump.co.uk/blog/?p=185. I will more than likely blog my experience with this port some day.

- See if you can find some practice certification material, or get the cert book; this is important to me not because I necessarily want to get certified (I used to take certification seriously, I don't anymore, but that's a topic for another day), but it's valuable to me to make sure I understand what's considered "essential" areas for a given technology.
- Maybe take a class or two. Instruction can never hurt, and it shows real interest to a potential client. This can be costly, but it's a write off.
- Avoid the design-time GUI tool until I know how to create basic applications with just the language. I firmly believe, if you don't know how the basic plumbing works and depend entirely on the UI design tool, and something doesn't work the way you expect, you'll be seriously behind the 8-ball.

That's how I've always done it, it's always worked, and that's how I intended to start my climb up Mt. iPhone Develeporest.

So...

- Go to the iPhone Developer Center, http://developer.apple.com/iphone/.

Tutorials, community, and download for the dev tool, XCode. So far so good, several of my steps knocked right out.

- Get the language book.

I got this one first, and recommend it, but I'll say it right now, it is NOT enough, even to get you started: iPhone SDK Application Development, O'Reilly, Jonathan Zdziarski.

I say "NOT enough" for two main reasons:

First, Objective C is different from C-based languages in many ways syntactically; at first glance, it's really cryptic. You ultimately see that it's actually not bad at all, but all the brackets and unfamiliar keywords, and having to write two distinct parts for every class (interface and implementation), can take you out of your comfort zone. I love interfaces and such, I'm an OOP nut, but I still found the conventions of Objective C a bit disorienting.

Second, iPhone development involves understanding "Views" and class hierarchies related to them. If you don't understand the language already, working with the iPhone API to implement views and attach things to them is not easy at all.

Realizing all this quickly, I got this book: Programming in Objective-C 2.0, 2/e, Stephen G. Kochan.

Now we're talking; excellent book that demystifies Objective-C. For the most part, you write "utility apps", like simple calculators and so forth, but it gets you grounded in the language, which really unlocks the iPhone API for you. I like the language now and have no issue writing classes and having them work together nicely.

Alrighty; I understand the language, at least enough to work with the tool somewhat productively. XCode has an iPhone emulator, so I've ported some of the utility examples from the Objective C book to the iPhone (like adding real buttons for the calculator) and run them in the emulator with no errors. I'm starting to feel like an iPhone developer.

So, let's get one of these sample apps on the iPhone. You have to register your phone as a "developer" phone...ok, not so bad, the iPhone site walks me through this, yeah yeah I know if I blow it up or it catches fire Apple is not responsible...alrighty let's get "Hello World" on and see how this process works...BLAMMO. Dead stop.

In order to put an app on your own iPhone (now registered as a dev unit), you have to register as an iPhone developer with Apple, and they have to send you a license key, which you use in combination with a certificate, to sign your app, so that it can be transmitted via your usual USB connector to your iPhone (XCode actually makes this seamless, very nice). Otherwise, you'll just develop with the emulator forever (again, I am not interested in hacks or workarounds to this).

This process takes time, and may not be as easy as it sounds. You can register a number of different ways; for example, as an independent developer under your own name, or as a business. I opted for the latter; Tcoz Tech Services, a sole proprietorship with a DBA that I've used for five years. Apple required that I fax (can you believe they don't accept emails of scanned forms?) my business registration documents to them, and that they review them, etc. If approved, you go on to the next step.

So, I complied. Again, BLAMMO. I don't live at the address that I originally registered the business under anymore. Apple won't approve your registration unless the mailing address you apply under, and the addresses on the documents (in my case, a DBA), are identical. This held me up for almost two months, so I will say in caps:

IF YOU ARE A CONTRACTOR RUNNING A SOLE PROPRIETORSHIP WITH A DBA, AND WANT TO REGISTER YOUR BUSINESS WITH THE IPHONE DEVELOPER PROGRAM, MAKE SURE THE ADDRESS OF YOUR BUSINESS REGISTRATION MATCHES THE ONE YOU REGISTER WITH!!!!!

Fair warning.

After quite a bit of back and forth, Apple did allow me to change my registration address to the one on the DBA; this was reasonable, because there is no law saying I have to live at the same address, it's entirely Apple's policy. It held me up, but they worked with me and I pushed it through. One day, Apple telephoned me, asked me some confirmation questions, welcomed me/my business to the program, and said I'd receive a mail taking me to the last step.

Hah, guess what...the last step is to PAY. That's right. You don't have to pay to learn Objective-C, or get the XCode dev tool, or the emulator. But that's all meaningless if you want to be an independent developer building iPhone apps that sell in the App Store. You need to be able to put them on the iPhone accordinlg to Apple hoyle, and unless you pay up (a little more than $100 a year), you can't do it. Talk about incentive to build and sell at least 120 copies of my first 0.99$ app!

I grumbled, and again considered going the open source hacker route (interestingly, as I understand it, the developers of the first iPhone SDK are in fact the guys that wrote the open source unofficial one, which preceded the official one), but no, I'm a pro, do the right thing, keep it above board.

After a journey of roughly four months, all the pieces are in place, and I'm now testing apps on my iPhone. Look out for my first iPhone app; will it be a hit? I don't know. It certainly won't be my magnum opus, but I do know it's original; I've looked carefully and there isn't one available that does what I have in mind.

Feel free to contact me at tcoz@tcoz.com if you have any questions.

Labels: , , , , , , , ,

Sunday, May 10, 2009

The New Sunday Morning: Kindle and iPhone

It used to be, you got the NYTimes and Daily News--I mean c'mon, you gotta have the comics--sat down to your breakfast, brunch or early lunch, chatted with whomever is at the table, and/or just wrapped yourself up in a cocoon of news and thought. 

How things have changed, or maybe they've just evolved...or devolved. Hmm.

It struck me this morning that while the ritual is similar, the tools have changed. Today I found myself sitting with my tea and girlfriend--and thinking of a mimosa, ahem--but no newspapers. Instead, I was flipping around some unread sections of blogs and looking over the news on my Kindle 2, and when I found something of interest, quietly pushed it out to my friends on Facebook, or tweeted it, on my iPhone. 

Interesting; has this civilized Sunday self enrichment ritual, involving newspapers, discussion, and reflection, devolved into looking for anything to FB update or tweet because I hadn't said anything in a while? Am I actually getting as much quality time and info as I used to?

Many might say, "I've been reading news online for years, I get it free, and I get more of what I want, because I can search and yada." Well ok, but do you and your wife/girlfriend/friends bring your laptops to Frank's Waterfront in Edgewater, break them out on the table, and engage in discussion while typing/searching and all that? I think not. A working lunch, or a solo nosh, sure, but with people or in any kind of upscale place...no.

This isn't to say that this sort of thing is universally unacceptable; there's places that cater to it. I hang out at some excellent spots in Brooklyn along Atlantic and down Clinton and Smith streets, get great food, and bring my laptop, and I'm sure every neighborhood has such a place, or at least, one close by.

Anyway...

...as I changed from the Sunday Times for a minute to scan some news via the integrated web browser on the Kindle, I actually found that Thomson Reuters had blogged a first disclosure of the Reuters Insider, an online news product that is an industrial strength example of "narrowcasting". I found it interesting, particularly because I'm managing a team of UI developers on the project, and am under strict NDA not to discuss the project other than saying "I'm working on it". I handed the Kindle to my girlfriend and showed her the article, and we discussed it (paranoid assurance: I only discussed the content of the article). 

Note: If you're interested, google Reuters Insider, and look for the "Full Disclosure" blog link, it should be the first one. 

This specific interaction prompted me to blog today. It was exactly as if I had handed over a newspaper and pointed out an article. Sure I could have done it on my iPhone, but there was something much more appealing about handing over the Kindle, and while she looked it over, I could discreetly refresh my tweets. We discussed a little, then she handed back the Kindle, and the cycle resumed.

As far as information and retention, I scanned my NYTimes, and CNN, and blogs, bookmarked and annotated some things on the Kindle for later review, and so on; I believe I got my fill of news updates and such, and additionally, saw some interesting comments and interactions from the threads I follow on Twitter and Facebook. Not to mention that a day without Sockington would be a tough one, and possibly KingPoo (who I'm giving a chance). 

Regarding social appropriateness, nobody seems bothered by me using the paperback-sized, slim, subdued device (note, I have pre-ordered a Kindle DX, but probably won't bring it to a setting like this, it's a lot bigger). There have been curious looks and even a couple of "what's thats", but because the device emits no light or noise, lies slim and flat (unlike a laptop) on the table and holds like a book, and frankly looks quite nice in its leather cover, it seems that it passes social muster. Also, the iPhone, with all volume turned off (buzz enabled of course), is very subtle, since you can nav with one hand very quickly and discreetly, unlike many hold-in-front-of-your-face thumb typing phones with their audible thumb typing clicks. Naturally, excessive texting would compromise this, but that's getting back to the aforementioned Irish Pub thing. 

End result; it was fun, interesting, integrating the social graph enhanced the experience, and the combination of Kindle and iPhone, used with restraint, didn't appear to irk anybody. A laptop wouldn't have enabled the  same environment or interaction; the e-book reader, with the hyper-enhanced ability to scan, search, and mark up blogs and news, all of which will sync to my iPhone Kindle reader, and the discreet use of FB and Twitter when I felt like looking over popular topics, adds up to my new Sunday brunch gigbag. 

Oh right, I still got the comics, both with the Kindle 2 and iPhone's Safari. I mean c'mon...you've gotta have the comics. 

Labels: , , , , , ,