VicinityBuzz Update: Windows Phone 8 & More

VicinityBuzz on Win Phone 8

While attending Codemash a few weeks ago, I ended up in a Windows Phone development precompiler (Codemash’s name for a training session). It was my plan to hit mostly mobile and analytics sessions, but I was not originally planning on attending this session. With Windows Phone still struggling for market share, I wasn’t in a rush to work with it. However, other sessions were cancelled because weather had delayed some presenters, so I ended up in this session. Microsoft’s Jeff Blankenburg was teaching the session, and I have enjoyed some of his presentations and a Silverlight fire-starter event in the past. It’s one of my rules of conferences to attend sessions based more on good speakers, rather than based solely on topic.

With regards to marketshare, Jeff made the point during the session that with a less crowded app store, you do have a bit more discoverability. Even if that doesn’t hold up, the platform shares enough similarity with Windows 8 that a port to the Windows Store will be trivial. The Windows App Store isn’t exactly setting the world on fire either, but I’d like to see my app on all of these platforms, and as Windows 8 adoption rises with new machine sales, that marketplace should see constant upticks.

Having worked with Silverlight in the past, I found it pretty easy to get going on Win Phone 8 development. There was some definite rust on my XAML skills, but it came back to me fairly quickly. One thing to keep in mind is that you want to keep things relatively simple on a mobile platform. I have worked on some WPF projects in enterprise settings with MVVM frameworks, dependency injection frameworks, and more. While I followed an MVVM pattern, I just rolled my own with a simple base class.

My project was to do a version of an app I already have in the iOS App Store, VicinityBuzz. It does location based searches of twitter. You can search around you, or by entering an address. The radius is a configurable setting. I like using the app at conferences like Codemash to catch all the chatter that may not have a hashtag. One catch is that obviously only tweets that included location will be found. If folks have that feature turned off in their twitter app, then it won’t show up.

Since I had written the app before (in phonegap for iOS), I knew the feature set and domain cold. The challenge was just getting up to speed with the latest API’s for search and geolocation, and then implementing within a new platform. One of the biggest benefits of this project was getting up to date with the latest Twitter API. I still need to update the version for iOS, as it’s currently non-functional because of api changes over the last several years. I plan on doing that very soon now that I know the latest version.

Anyway, I won’t go into the development details here too much, but I finished a version 1 of VicinityBuzz, and it is now in the windows phone store here, and it’s free. So go check it out. If you like it, I’d love to have some more reviews.

Also, if you are inspired to do any Windows Phone development yourself, you may be interested in a device to do some real testing. I recently found there are some prepaid phones new on Amazon that are dirt cheap for that purpose. Check out the Nokia Lumia 520 and Nokia Lumia 521 on Amazon.

Watch this blog for upcoming posts about working with the Twitter API, and some of the things I learned working with Windows Phone 8. And more mobile in general. I have the bug again…

Boiling the Ocean (or Attempting to Keep Up With Tech)

I was asked by a fellow developer how I keep up to date on the variety of technologies that I’m expected to understand when doing my job. I intended to write a short answer, and generate a blog post as a longer answer. I got this idea from Scott Hanselman, who in his talks about productivity mentions saving keystrokes, and the idea that when you answer a question for someone, you should share that in a way that is useful to you and others. With that in mind, here’s the advice I would give if you find yourself taking on a job that requires a broad knowledge of the technology and software.

Question: Somebody in your position obviously needs to understand a lot of technologies to be able to pick the best solution for a project. How do you approach learning and having an understanding of all the new stuff that is constantly coming out? Obviously you can’t sit down and learn every tiny detail, but do you just obtain a high level understanding of how things work and then flush out the details once you start a project in a technology that you’ve never used before?

I use Google Reader a lot, I just checked and I have 121 rss/atom feeds going into it. They are not all work related, and it’s not like I read every article. But I star stuff I want to read, or put it in Instapaper and then go back to it. I try to read a mix of updates on what I already know and interesting things about what I don’t.

As for how to learn and retain, and relate technology, that is a harder question. I’d love to tell you that you just get a high level exposure first and then fill in the details when needed, but my mind doesn’t work that way. I hated classes like Systems Analysis in college that only talked about systems in generic terms, because I couldn’t relate those terms to specific examples.

My own take is that in the beginning of your career, you just have to learn practical skills and learn the tools you work with well. When you start wanting to learn about systems and being able to evaluate, compare, select, recommend, etc, then you pick up as follows:

Let’s say I’ve never used a database, and I’m assigned to work on a project that will use Ruby on Rails and PostgreSQL. Take the on the job time to learn the tool as well as you can, focusing on the aspects you need for your job. Where possible, try to understand and separate product names / features from conceptual names / features. In this example, that means understanding what database and schema mean in generic terms, and why they mean different things in the PostgreSQL than they do in some other products (like Oracle or SQL Server). Spend a little bit of off time playing around with an easily attainable (usually open source) alternative. Spend a night or two doing those same types of tasks in MySQL. You’re not looking to be a dba, just doing similar tasks as to what you do. Finally, talk to people who use other products and compare. This works great with products that are hard to get a hold of because of cost, etc. In this example, talk to an Oracle DBA or App Developer. What features do they like about their product that would prevent them from switching. If you don’t know one, ask the question online. Quora, LinkedIn, Twitter are all great places for this kind of question.

At this point, you’re out of work time (so not counting your project time working with PostgreSQL because you would have done that anyway) is 4-6 hours on MySQL and maybe another hour in conversation. But you should have a really good idea of the concepts surrounding relational databases.And you should know what the different projects compete on in that arena and what some of their strengths and weaknesses. If you spend time away from that field and come back in, you should have the conceptual understanding and just need to buff up on the implementation details and latest trends.

Two other quick pieces of advice. First – After getting the practical experience on a type of tool, read the Wikipedia page. Most pages are at most a 15 min read and they lay out the purpose and strategy behind any tool type, and usually list the major players in that area. Second – Try to keep personal opinion from having to much sway. We all prefer different tools, but every tool can be criticized. That’s important to do, and know it’s weakness, but don’t dismiss the tool outright. They were built for a reason, a context. And many of the weaknesses relate to some tradeoff the programmers / vendor made that has a good reason behind it.

Flex is a Relic and Silverlight is a Zombie

…or some other catchy metaphor that will grab your attention. These technologies were hot over the last 5 years. Flex gained a particular amount of popularity in the Java community where UI technologies have a bit of a spotty record (that’s like saying my Bengals have a bit of a spotty record over a lifetime). Silverlight gained a lot of traction among Microsoft developers who actually cared about design and UX. Many alpha-geeks of the Microsoft space were running around giving conference talks about the MVVM pattern, and sharing code on codeplex. So what happened?

Both of these technologies are going to fade on the public web. Tablets and mobile devices are too big a share to ignore. Html5, phones and tablets did them in. The heavy hand of Steve Jobs probably gets credit for the coup de grâce. The browser vendors and phone OS creators have really put their weight behind Javascript and Html5. If you have have that skill-set right now you can create:

  • Web Content
  • Mobile Web Content
  • Mobile Apps via Appcelerator
  • Mobile Apps via PhoneGap
  • Windows 8 Metro Apps

That’s a pretty wide reach for a markup / scripting language set.

So what do you do if that’s your trade? You work as an AIR/Flex developer or Silverlight developer, what do you do? There are good options for each camp, and some universal options.

Flex Developers

I think this is the slightly less promising path in the long term (despite it hitting a much higher peak than Silverlight). That said, Flash and Air will live on for a while, and you have some time to make a transition. Additionally, the ability to use the Adobe tools to make mobile applications provides a bridge to the hot mobile market. And you can make long term plans to transition to another cross-platform tool (PhoneGap, Appcelerator, etc), or go native. If you’re in the Adobe camp, new tools like Edge are likely to ease the transition to the standards-based technologies of the web.

Silverlight Developers

Similarly, Silverlight won’t be gone tomorrow. Intranet applications that need rich functionality (and simple deployment) are still a nice fit for Silverlight Desktop applications. And the adjustment to WindowsPhone 7’s flavor of Silverlight is straightforward, though I would be cautious and investigate the financial realities of that market. Finally, while Windows 8 Metro Apps don’t specifically use Silverlight, they can use C# with XAML and a subset of the .Net libraries that emphasize a security sandbox and async data connections. Sound familiar? That’s because they re-animated the corpse of Silverlight and made it an option for writing Metro apps. Long term, you should probably learn to use the Html5 / JavaScript hooks for Metro due to the ubiquitous nature of those skills. But isn’t it nice that you can learn the new API (WinRT) while keeping C# and XAML, and then make the languages switch at your leisure.

For Everyone

Both camps should embrace these newer web technologies and the UI skills they picked up during their time with the respective technologies. Good user experience and design are rare skills in developers, and retraining the languages and tools should be the easy part. Keep your black turtlenecks and invest in the next tools rich applications. You already have a leg up.

My 45 Days With Win Phone 7, and the Move Back to iPhone

A while back, I bought a Windows Phone 7, specifically an HTC 7 Surround. I bought it used via ebay (for under $150), so as to not have it count as my contract subsidized phone. It was not an unlocked phone, and I was able to switch my SIM card from my main phone (an iPhone 4) to the WP7 without problems.

I bought the phone in order to have a chance to do some Windows Phone 7 development. As a developer with Silverlight experience, it’s a pretty easy transition to make. Sure, the dev toolset has a simulator, but I wanted to try out some apps and have my hands on the real thing. Plus, it serves as a nice backup phone, and it makes a nice portable gaming distraction (with achievements). Even without swapping the SIM card, you can use email, online apps, as long as wifi is available.

Soon after the purchase, my wife’s iPhone 3gs broke. At this point, we knew a new Apple phone was coming soon, so I gave my new iPhone 4 to my wife, and used the WP7, waiting for the new phone. She knows I do a lot more “technical stuff” with a phone, and was fine with taking the 4 and letting me getting the new revision when it released (I used her upgrade for the 4s). Yes, for a tech guy, that’s a great way for a wife to show love. All I had to do was holdout for about 45 days with a WP7.

I kind of looked forward to it, thinking it would be a chance to get a feel for just how good the platform was. For the record, this was the version of the OS just before Mango. Mango released the week I got my iPhone 4s.

So what did I think?

What’s Good?

It was a very usable phone. Contact management is nice on Windows Phone. All LinkedIn, Facebook, and regular contacts are merged (including Twitter in Mango). From that persons page, you can contact them via any of those methods. And rather than a favorites person list, you can pin them to your homepage, allowing very quick access to your favorite contacts.

The basics are covered in terms of apps. Social sites, games, utilities. And they are cheap and often free. The store is closer to Apple’s than the wild west that is Android, so that’s good.

The phone itself had pretty good battery life, nice sound, and I liked the kickstand. That line has been discontinued, and I’m not sure why. Maybe HTC wanted some new Mango specific features and needed a redesign. Regardless, it was a fine phone.

You only have one page to customize, but it’s completely customizable. And the second page is essentially a list of every app on your phone. It was a different way to organize than iOS, but I found it very usable.

Those front page tiles (as of Mango) can show you various news and status updates. For example, the weather app shows the current temperature on it’s icon, and contacts show their latest social status. iOS could use this feature, though I suspect it’s icons are too small to provide useful data.

Zune pass is nice. Spotify is taking a bite out of this market, but I did a month trial of the Zune pass, and I could listen to anything I wanted that was on the store. A few gaps, but in general the marketplace has a lot of songs. Zune recently added some new pricing structures to compete with Spotify.

Cost… If you’re due for an upgrade, you can get a nice WP7 phone for free. And I think the free options for WP7 are higher end phones that the free versions of Android phones. And the only free iPhone is the 3gs, which is fairly dates at this point.

What’s Bad?

The depth of the marketplace just isn’t there compared to the App Store. This is understandable because of how new the marketplace is, but with such a low marketshare, I’m not sure it will ever catch up. Developers are monetizing on the App Store, and Microsoft and Google can’t make that case as well.

Mango changed this, but when I used the phone, it was one app at a time. That’s hard to go back to. Especially when Apps seem to take a while to initialize.

Phone manufacturers can brand some parts of the phone, and even have their own sub-pieces of the marketplace. There was an HTC Apps shortcut on my phone, that took me to specific versions of apps like Youtube, etc. I assume this is so they can optimize the experience for their phone, but it fractures the app stats, and makes integration with other apps harder. It’s a step in the Android direction, and I don’t think that’s a smart direction. (Why does it matter if app stats are off like popularity? When I’m looking for popular apps on a new phone, I would expect things like youtube to be at the top. But if youtube has 6 private label versions, it gets pushed down the list.)

Finally, there’s just a certain je ne sais quoi to the iPhone, that WP7 doesn’t have. Yes, that’s completely subjective, and a lot of it is based on personal experience. But this is a blog, and I’m telling you about my personal experience with the phone.

The Fine Print…

I bought a used phone, with some mild wear and tear. I have had 3 iPhones, all brand new purchases. That adds to the experience.

I’m invested in the iTunes store in terms of music and apps. I never really commited to WP7 and the Zune marketplace that way.

I should have spent more time seeing if there was cool integration options with my XBox. That kind of stuff sells me on a product.

Summary

WP7 is a nice platform. If I were banned from Apple products tomorrow, I would have to think long and hard about WP7 vs Android. I think WP7 is better (than Android), my only hesitation is that phones are about apps and integration, and both of those things suffer when marketshare is low.

Maybe the best way to describe the difference is by saying what I like best about iPhone. Despite being closed and proprietary, it doesn’t feel commercialized, because Apple is the only hardware maker, there isn’t hardware advertising and private labelling. Those things detract from the experience, and Apple is all about design and experience. Combine that with content, and you have a winner.

Apple brings huge headstart in content, and that’s hard to overcome. Just look at Windows vs OS X. There are virtual machines and compatablity layers, but at the end of the day, users had years of content and applications that ran on Windows, that they weren’t ready to give up on. As cloud based services and web-based applications take over, we’ve seen that the Windows market erode a bit. And eventually, that may be the case for phones and tablets too, but we’re not there yet. Apps still matter.

That’s why I think Microsoft’s Windows 8 strategy is smart. The more they can move developers to HTML 5 and Javascript, the easier it is to develop cross platform for mobile and tablet platforms. The WP7 and Windows 8 marketplaces can merge, and leech off HTML 5 developers that are targeting the higher marketshare platforms. If there is minimal overhead to developing cross platform, then WP7 will get a number of apps that is disproportionate to it’s marketshare.

I’m happy to have the WP7 around for development purposes. And would recommend it to users who don’t like the iPhone and aren’t invested in App Store already. Particularly if they are gamers with live accounts. But it isn’t a primary platform for me.

Thoughts on Steve Yegge’s Google+ Rant

Let me say up front, Steve Yegge is my favorite blog writer. I think I started reading his blog in late 2007, and really picked up digging through the archives in 2008. He is the reason I still write blog posts. This blog does decent traffic for a hobbyist technical blog, but it’s still like pulling teeth to get comments. And blogs may just be fading in general, as people want more bite sized content. I’m not complaining, that’s just the 140 character world we live in.

Speaking of 140 characters, that’s one of the great things about Steve’s blog, brevity be damned, he writes what he wants to. Unlike twitter experts regular pithy updates, he drops novels, and then walks away for 3 months. But you need time to stew on the posts. I consider it an honor that one of my posts is cited on his wikipedia page.

So what did he do? He mistakenly posted an internal essay to Google on his public Google+ stream. It’s everything his best posts did and maybe even more. It’s brutally honest, funny, and making points at several different levels.

First, I wonder if it even was a mistake. His follow up on Google+ tends to make me think it was. But if not, there’s some “friggin’ genius” in his blundering. You can’t unsee things on the internet (insert your favorite internet porn meme here). By “accidentally” dropping a note like that, he may have just saved Google. Their lack of platform and dog-fooding is a real issue. And now, it’s clear to everyone at Google, and everyone outside of it. Every new product that Google launches will be scrutinized through the lense of that post. Google _HAS_ to react and take that demand serious. Speaking of, Facebook just launched an iOS Platform.

Again, I don’t think he did it purposefully. But you have to consider the analogy of a lawyer saying something inadmissible in front of the jury. You can tell them to forget it, but there is no “undo” button that takes you back to where you were.

Everyone wants to know what Google thinks. Will he be fired. First, I doubt it. Google’s “don’t be evil policy” would make it hard to fire a guy for being a public whistle blower, albeit on technical matters. But I want to know what Jeff Bezos thinks, as Steve takes him to task pretty well. Now he does call him the Dread Pirate Bezos at one point, which may be a hint that he’s just doing that for humor and realizes that Bezos is nothing like his own legend. But still, he may have done some career damage by talking that candidly about a former employer where he was pretty high on the chain, and for putting Google in that kind of spot. Facebook would certainly have some questions about that post before hiring him.

I thought he did a really nice job of summarizing what Microsoft does well, and what they don’t. Microsoft is baffled that it’s strength in tools (Visual Studio) and languages don’t trump environments like X-Code and Objective-C. Microsoft community members cite Objective-C as proof that developers just care about market share. That may bare truth, but Steve’s right about platform. Microsoft has opened up more API hooks into their products than you can imagine, but Apple does it elegantly. There is a much smaller surface, and a straight forward interface to working with things. I think that’s due to Apple’s desire for everything to have a clean design, and a gift that came when they chose to build a system with Unix under the hood. No wonder ever described Win32 as “by programmers, for programmers”. Want more proof that Steve is right? Look at what Microsoft just did at build. They didn’t release new languages, or new tools. They even resurrected C++. But they did release a new Platform, with a much cleaner API surface.

Finally, look at the community around Google for confirmation of what he’s saying. There are developers around Microsoft, Facebook, Adobe, Amazon and Apple. Because they can leverage those platforms while still striking out on their own. Adding value. How do you add value to Google Docs? Once you’ve configured a business account for a company, and trained their users, how do you continue to add value? You don’t. The only place Google has done this is with Android, and they screwed the pooch on the store model.

If Google rallies around his message, they could get their mojo back. After all, they understand Big Data better than anybody. They get horizontal scaling and Data Analysis like nobody’s business. And people generally still buy their ethics, and their is a culture around quality and intelligence. But marketing, innovation and what Steve calls Accessibility matter.

Now go read some of his best posts like:

That list may take you a day to read, and that’s if you can resist following the rabbit trail into further articles. Enjoy.

Finally, one of my favorite recent discoveries is his keynote inspiring developers to solve bigger problems:

Now if he would just write on his blog more often…

Oh, and for those new to following Steve Yegge, he’s one hell of a guitar player: