Thursday, January 13, 2011

Different levels of progress

To start: I got my Windows Phone. I have the Samsung Focus, and I'm loving it. I never pictured myself as one to become so committed to using a device for so much of my daily activities, but it has certainly integrated quickly and deeply into my life. The Focus is one of the few models that supports memory expansion, but I have yet to do so because of the uncertainty on supported models. Not that I've run out of memory... yet.

Running my GEDCOM Viewer app on the phone is just so much better than in the emulator. It's a completely different experience to have the code running where it's meant to instead of just as a theoretical application. That doesn't mean it's done, though; it has a few more functional bits to be added for a first release, and a LOT of user interface stuff to work on.

I've picked up three books for Christmas: Silverlight 4 in Action, Learning XNA 4.0 and XNA Game Studio 4.0 Programming. The first will hopefully help me learn a little more about the layout in Silverlight, though I really need to bunker down and go through Mike Taulty's Blend Bits series as well.

I've got a few game ideas for the phone, one trivial and silly, another more educational and involved. The first I will likely whip up while reading the XNA books, but the other will be an ongoing project on the side both as I learn the XNA required as well as the educational material behind it.

Back to the GEDCOM Viewer. It started off with a nonsense project name early on, but as I approached completeness (of functionality), I thought it needed a name, albeit a boring one, so attempted to do a rename in all of the pertinent places. That did not go well, and I ended up creating a brand-new project with the correct name and cut-n-pasting code over. It was a mixture of namespaces, manifests and metadata that just didn't mesh with a brute-force rename. Lesson learned...

...or is it? I follow a variety of genealogy sites and mailing lists, mainly ones that discuss the data standards that are used for recording genealogical data. This is an ongoing debate, because while the hobbyist genealogist is ultimately concerned with how they're related to some distant historical figure, serious genealogists (which I'm trying to become) are concerned about the different relationships of the DATA, not just of the people. While the hobbyist might find a document showing a marriage or a birth taking place and just say "X married Y" or "Z was born to X and Y", professionals want to say "this document says X and Y married. I have A and B, and I conclude/suggest/believe that A==X and B==Y."

This changes the way that information is kept. The GEDCOM format stores conclusions (A was born there and then, A married B), perhaps with citations to source documents, but they're all recorded as fact, not supposition or theory. Researchers, especially when dealing with historical data, don't want to claim certainty on anything, but want to provide all of the information available to the next researcher to make an educated decision on whether they believe the same conclusion or not. A handful of attempts have been made to make an interchange format for this kind of data, to allow sharing of research, but none have become popular. One group, though, the International OpenGen Alliance, is trying to change that, and I'm hoping to be able to take part in the process, if not in the capacity of a researcher (because I'm still a relative amateur, and likely don't have the insight into all of the needs of professional researchers), but for any programming APIs and data standards that are developed, because that is something I *do* have a lot of experience in.

If you're reading this blogpost because of mention of genealogy or GEDCOM, you might want to take a look yourself:

OPENGEN.ORG - Genealogy Standards Alliance

The reason I mention this is that while the first version of my app is a GEDCOM viewer, I'd really like to support other formats, especially if they become standards in the field. The problem there? I've done that rename to "GEDCOM Viewer", which won't be accurate if I can support some OpenGen format in the future. Perhaps I'll have figured out the renaming magic by then?

I can blame a lack of UI in my app as the reason why I haven't finished, and it's a good excuse, but not one that I shouldn't be able to surmount. Personal events (selling the house, new child on the way) don't provide a lot of free time either, but a sizeable hurdle that, frankly, has left me a little unmotivated, is the process of getting set up with the Marketplace.

Being in Canada, there are concerns about how you get paid out if your app should ever make any money. By default, Microsoft takes their cut, and unless you've gone through the paperwork, will also withhold money for the IRS. This means that I will get $0.49 on the dollar, which will also get taxed by the CCRA here, to the point where I'd see around $0.35 in my pocket for every dollar in gross sales.

Microsoft's entitled to their cut, and the Canadian Government, I suppose, can have theirs. But there are ways to not have to share with the IRS. In theory. But what a pain! I won't detail the hassle so far (and still on-going), but being in this state of "couldn't really earn my money anyway" hasn't been hastening my fingers to finish the app and submit it.

That's nonsense, of course. I could submit the app (and have it refused a hundred times, if you believe some of the developers I follow) and (full with optimism) have it sell without having finished the financial portion of the Marketplace registration, just letting my pennies accrue until I've sorted everything out with the IRS. And, if I recall, Microsoft doesn't pay out until you've earned $200, which on a $0.99 app would be 286 sales... as popular as my genealogy viewer can hope to be, that's a lot of sales to dream about. So it would mean a second app, a third app, a first/second/third game, before I got to that point.

I should really just finish this app and start the submission process, find out what little things I missed in the list of rules, and while sorting that out, get started on the next app or game. The biggest motivation should be that the rebate deal is going to expire in a month's time, and there's a good chance that the money I "make" from that is going to amount to more than I'll ever make from the apps themselves.

Saturday, November 13, 2010

Another of those "I'm still here" blog titles

Wow, almost two months since I last posted here...

Windows Phone 7 has released in Europe and Asia, then in the US... but not Canada! I had such hopes to have my hands on a Windows Phone the day the North American release happened, especially because my carrier (only) carries the Samsung Focus, which seems to be the popular one, but all we Canadians have been told is "the end of the month". Apart from it just being fantastic to have a Windows Phone, I had also wanted one in my hands as a way to spur me further, faster -- something -- to get an app finished.

It's not that I haven't been working on it; my spare time is devoted only to that, at the expense of everything else: my Wii and PS3 scowl as I enter the room. Still, my spare time is at a minimum lately, with wife and kids, baby on the way, new house being built, work and teaching (I wisely resisted taking any classes this semester), but it's going slowly forward.

Part of the problem, as I've mentioned before, is that I'm new to .NET, to C#, to Silverlight (haven't touched XNA for months, which is unfortunate). This means I'm wasting a lot of time fighting with things that experienced programmers in these areas would breeze through. Still, I'm learning my way around them all, feeling more comfortable with them, and with luck, once this first app is finished, future apps will be a relative breeze.

This is still the GEDCOM viewer app I mentioned last time; it fetches a GEDCOM file from the web, parses it out and gives an index of the individuals within, using the fancy LongListSelector that the Silverlight Toolkit for WP7 (link on the sidebar) added to the regular set of controls. Individuals are represented with a Pivot control, breaking up the most important information, secondary information, and perhaps source information into separate pages. Each individual also adds buttons to their families, ones in which they're a child, and ones in which they're the parent, if these exist. The family view shows the parents and children on one page, and secondary information (such as marriage details, census details, etc.) on another. Except for the ugly layout (that design skill I've yet to learn), it has the basic functionality going.

Still to go, in no particular order: support to save/delete GEDCOM files in isolated storage; ability to switch between bookmarked GEDCOMs (whether in storage or bookmarked online); saving browsing potition, both for tombstoning and even on complete exit (if desired by the user); support for multiple values of data (multiple sets/versions of Birth information, Marriage information; multiple marriages).

This version is just a viewer, not meant to provide any data editing ability. Maybe version 2.0. Before that, though, I'm considering features other genealogy packages provide, such as calendars of living persons' events (birthdays, anniversaries), Bing map overlays with the locations of birth/marriage/death/etc. events, graphical family tree representations (ancestor/pedigree trees, descendant trees, hourglass trees, etc.). All of these would expand my Silverlight experience, strengthen my C# skills, and further my .NET knowledge. I'll likely start a second app before adding this next set of features, hopefully moving forward with some of the ideas that @bytemybits and I have been talking about.

So, no one has been blessed with my amazing app yet, but on the other hand, I couldn't be using it myself, either, since I can't get a phone yet. The numerous blogs I follow have been a tremendous source of information (and I'm only 50 articles behind at the moment!), and the Twitter community for #wp7 and #wp7dev is great; I just wish I was able to participate more in the community.

As for the whole developer process, I've gone through the whole GeoTrust thing, so I believe I could submit an app for approval to the Marketplace today, if I had one. Being Canadian, I don't have the easy route of submitting my SSN and bank account info to get paid, but instead have to go through hoops to get an ITIN, all so I don't get overly taxed by both the US and Canadian governments. One thing I wonder about is whether they'd just hold any earnings if I was to have an approved app on the marketplace before getting any banking information to Microsoft, or if they'd not allow me to post until it was done. Depending on how long the IRS takes to get me my number, I might be able to find out!

Friday, September 17, 2010

I'm Still Here

Unlike Joaquin Phoenix's stunts regarding the film of the same name, this isn't a hoax -- I really am still here, even if I haven't been posting.

The final RTW (Release To Web? Release To World?) of the Developer Tools was released yesterday to much fanfare (at least, amongst the Windows Phone 7 developers). The uninstall of the Beta version and re-install of this final version went painlessly, unlike my previous experiences. I won't go into the features added/changed - they can be found on the main Windows Phone 7 site or on many of the main developers' blogs, all linked on the side.

The WP7 community is growing and very active, keeping my RSS feed very busy, and thus me busy reading about the latest tricks people have found and the latest projects people have been working on. There is so much good material coming out, it all feels like required reading, and thus take a not-insignificant amount of my time to keep up on. At one point I was over 300 posts behind in my reader... after a reading blitz over the last few nights, I'm now only a respectable 17 behind. All this reading and learning has definitely affected any progress in developing *my own* apps.

As for my progress... I finished reading Learning XNA 3.0 by Aaron Reed. I had a few issues with the writing style and some of the content, but overall it was a good way to learn XNA; it ramped up from the basics in 2d to some fancier tricks in 3d and interesting material on HLSL. I haven't put any of it to use yet, but from it I've learned nearly everything I need to implement my first game idea.

On the Silverlight front, I'm a little more behind. I've got three or four ideas that I want to put in place, but don't have the skill/talent for design nor the Silverlight know-how to implement it, if I did. My first app is going to be a GEDCOM viewer, figuring that a viewer (versus an editor) would be an easy first step, that I have lots of data available, and it's the kind of app that will give me experience with multiple views and will utilize lots of different Silverlight items, from columnal layouts to listboxes to the newer pivot/panorama devices for Windows Phone. The backend code is nearly complete - reading and parsing the data - but I now have to figure out the design portion (how I want it to look) and then the implementation of that (the Silverlight portion). Unfortunately, it's possible to learn Silverlight (a skill) but it might not be possible to learn the design (an art). I'll see how well I do in the next week or so.

Monday, August 16, 2010

Competition(?) on the Windows Phone Marketplace

Last week or so, I started hearing around the blogosphere that Microsoft itself was going to be putting games out for Windows Phone 7. At first I was a bit miffed about this, because it meant that right out of the gate, this market for indie developers -- which is how I see this field -- was going to be crowded by the "big guy". I knew, of course, that there were small game studios out there, currently developing for iPhone and/or Android, that were going to be getting into the Windows Phone market, but they were "acceptable competition" in my mind.

After thinking about it, though, I decided that the game industry itself has done fine with the AAA developers and the indies alike (as has been the general theme over at Game Theory Online and The Escapist's Extra Credit feature), room for both. Yay!

But then I read tonight about Microsoft's continued focus on games for Windows Phone 7 and their support for many other existing XBox Live developers, and my heart sank again. It's not clear that they'll all be there on day one, or if they're all just in-development, but even though I've never seen any of these games (not being an Xbox 360 owner), you know that they can't suck if they're mentioned in this article.

Is there room for someone like me to even try? I've never published a game before, I'm new to XNA, and while I like to think I've got lots of game ideas, I have no idea what they'll be like if/when they materialize. Obviously there will be opportunity for many indie developers to make their mark in the Windows Phone marketplace, perhaps because of that next novel game concept, or perhaps because the price point on these "professional" games will leave a second price tier - the $0.99/$1.99 level? This is probably where I was going to end up anyway, so am I again worrying for no reason?

Should I just consider the app market instead of the game market?

Of course, at the rate that I'm accomplishing anything in Silverlight *or* XNA, this might be a non-issue. All these rumours of November release, then October... I had wanted to have made *something*, no matter how trivial, before the phone was available. That time sure seems to be approaching fast, and I'm still in learning mode.

Sunday, August 8, 2010

Silverlight progress

I've put the XNA programming aside for now, moving on from samples and examples to trying to get an honest-to-goodness app finished and running. To do this, I'm leveraging libraries written by others, something that I find hard to do because I rather enjoy the process of implementing the same code myself.

But, time is of the essence, since I don't have many hours a week that's mine for WP7 projects, and thus it makes sense to not re-invent an internet-available wheel. Of course, I'm completely new to Silverlight, having at most run downloaded WP7 samples and read a few book excerpts. This means I really have no idea how to use other Silverlight controls in my own or how to include other C# projects in a Silverlight project.

I thought the first was easy enough to figure out -- even though I'm pretty new to Visual Studio (again), I know how to include references to other projects, and Silverlight does it the same way. But no, not really. And including an existing C# library in Silverlight doesn't work the same way. Only certain project types are able to be included in this way, and this one library isn't one. So as not to waste time (YET AGAIN) fighting with tools instead of developing, I've just copied the code from these downloaded libraries and controls into my own project, and am now fighting with dependencies that are expected from "full" environments but aren't available in the Windows Phone restricted set of APIs.

At this rate, I might end up coding these libraries myself, after all.

Friday, July 30, 2010

Learning and more learning

Last week the Windows Phone team hosted a series of Jump Start courses, which I "attended" for the most part. Unfortunately, my children were accommodating during the parts that I knew, but not the parts that I wanted most to see, but that's what reruns are for, right? It was a good overview of what the platform could do and how to do some interesting introductory things in both Silverlight and XNA. Alas, I did not win a T-shirt nor the private jet that they gave away.

I also "attended" the unboxing of a Windows Phone 7 by Tim Heuer. It may sound a bit lame, watching a guy open a package and play with the device, but it certainly makes things more real when you see a live device in someone's hands, being loaded fresh with apps and working. It was a decent group of people also watching, chatting on the side of the video. And, we learned not to stick a microSIM card into a SIM slot (but that it can be successfully removed).

This week I also moved from XNA experimentation to learning more Silverlight. Well, I haven't gotten to the Silverlight per se, but have started writing some background code (for Yet Another Twitter App) that will support the data-driven aspects of Silverlight. If you're so inclined, you can watch the Back|Start|Search twitter account for lots of noisy tweets while testing the app over the next while. After that, we might actually start using that account to tweet things of import!

Monday, July 12, 2010

Windows Phone Developer Tools Beta

The Beta of the Windows Phone 7 Developer tools has just been released. Many of the changes from the CTP we've been using seem to be geared to allowing those who have actual devices to use them. Unfortunately that doesn't include me.

Other changes include controls and control templates, both of which I've got no real understanding of yet, since that's all Silverlight and I'm still a Silverlight newbie, still focusing on learning some XNA.

The scary part about this, if you've read my previous posts on the matter, is that I have to uninstall the CTP versions of things and reinstall this version. Wish me luck!