Sunday, August 19, 2012

My First Dub-Dub.

The Pilgrimage

I'd heard of this event that happened each year at WWDC where a group of attendees would travel with bus loads of other attendees and visit the corporate Apple store and buy some swag, take pictures, hang out and eat a bit of lunch on the Sunday before the main event.  

The registration for WWDC opened promptly at 9am on Sunday morning.  I had no idea what to expect as I walked from my hotel to the Moscone West building.  But as I approached the number of nerdy looking folks seemed to certainly swell.  There must have been a few hundred other developers keen to pick up their badges and whatever swag Apple was providing attendees.  As the doors opened everyone was sucked into the building and a lot of people just started taking pictures.  I couldn't help it.  I did too.  

After collecting my badge and swag I had some time to kill so I had some Starbucks and browsed the inter-tubes until it was time to meet for the Pilgrimage to Cupertino.  Once on the bus I met a nice fellow from Eastern Europe.  It felt strange to me explaining to fellow WWDC attendees that I don't actually do iOS or OSX development full time.  In fact I do very little.  But I explained that I was trying to change that and hoped that my attendance would help me to bring that change into being.

Actually being at the Apple offices wasn't all that interesting.  It was basically an office building in a sea of other office buildings.  We got to mull around the parking lot and buy some more Apple branded swag in the corporate gift shopt.  I had lunch with some more nice people at the local restaurant that apparently a lot of Apple employees frequent.  

The experience was good, but not something I'd likely repeat.  Unless I attended with some other co-workers or friends again in the future.  I'm a bit shy, so going on my own is a bit of a lonely road to take.

Keynote Day:

I'd heard of the ridiculousness of the Keynote day and read all about how some people start to line up in the wee-hours of the morning to ensure a relatively close seat.  I was not one of these people.  This too is something I would never do on my own.  But with a couple others and some planning, I could be convinced to give it a shot.

My experience was however pretty interesting.  I managed to end up in line not far from the front door to the center.  Except that my position was after the line had wrapped itself 3/4 of the way around the block.  So my hopes of getting in the main room were pretty slim.  As luck would have it, I was in line very near a rather interesting and talkative fellow.  His name was Bill Atkinson.  Most people probably don't recognize that name.  But he wasn't shy about telling his tails.  Bill was a very, very early employee of Apple.  I believe he said he was number 30.  He hand some great stories about shipping the first Lisa and Mac.   Although the stories have blurred together for me and are starting to fade.  I was definitely a bit star struck.  Especially when he started to talk about the fact that he and Steve Jobs actually still met and talked not too long prior to his passing.  I also found it interesting that this man, with his lineage was still forced to wait in line with the rest of us.  It made me a bit doubtful of the stories. So once I had a viable internet connection I made sure to look him up.  Sure enough - this was the real deal.  Now I wished I'd got an autograph.  Although I'm not sure what I would have got him to sign.

After what seemed like an eternity of waiting and milling about in the lumbering and slowly moving line I finally got into the main ballroom where the keynote would be held.  I found a seat and waited patiently for it to happen. And it was fantastic.  Just watch the video.

Sessions, Sessions, Sessions:

My next few days were wall-to-wall sessions that I'm still not really allowed to talk about.  I went to sessions that covered a lot of the topics discussed in the keynote.  But I mostly stayed away from the social stuff.  Not really my cup of tea.  Although, not being an iOS or OSX developer proper, nothing really is my cup I suppose.  I just attended the sessions that covered topics I found interesting.  In particular, topics related to the developer tools, new language features and compelling new APIs that would soon be available.  I'd also have to fight to get decent internet connectivity the entire week.  I'd heard that the wireless was really good at WWDC, but this year must have been an exception.

Hump Day:

Typically, I got back to the hotel at the end of a day of sessions and decompress for a while.  Then either grab some dinner or actually go to bed early so I could be up early for the next day.  This is the genesis of my very recent obsession with podcasts.  I started to listen to Marco Arment and John Gruber's podcasts in these afternoons.  Given the heavy Apple bent in the topics covered, they felt very much at home and they even had a couple that came out while the conference was still going on.  I also followed the adventures of a number of the various popular Mac and iOS developers who were in attendance.  I follow some folks form Martian Craft, Panic, Pacific Helm, Black Pixel and others.  The sessions also gave me some incite into those folks on twitter who were from Apple.  There are a lot more of them than I'd realized and they are pretty active posters on the social network.  Notably though they seem to be developer facing employees that we are supposed to be able to reach. So it's not really all that surprising.  But I'd not been able to locate them previously, so I was still quite pleased and surprised.

Sensory Overload:

The last couple days were a bit of a grind. I bowed out of the beer bash due to my exhaustion.  I'm still not sure if I regret that decision or not. I made a plan to visit some family that lived in the area on Friday after the conference wrapped up. That helped.  But I was mostly missing my own family.  I had a few FaceTime chats where my daughter would be kissing my face on my iPad at home and I'd see the top of her head as she did.  It was pretty cute, but I also really wanted to be home after those calls.

Wrapped Up:

The last day there was a really well done lunch time talk by J.J. Abrams.  He plugged his iOS app a bit, but really gave the crowed a great review of his progress from a nobody to the Hollywood darling he is today.  That afternoon I took a train to see my family got to play with my 2nd cousin for a while.  It was oddly peaceful to be around a toddler again.

I still think about the week and all the things I didn't do and wish I had.  I hope to get to go back again another year with some friends and co-workers to better take advantage of all the week has to offer.  I'd also like to come back with some code and an application I'm working on so that I can have something to talk with the Apple engineers in attendance. I felt like I really didn't get to make use of the value of such a resource being so close this time around.

I really liked my first dub-dub.  I hope it's not my last. 

Saturday, August 18, 2012

Deconstructing Android Open 2011

A prelude:
I'd already written this post once...well most of it, but Blogger failed me. I thought it was auto-saving. Alas, it was not. I had about 2000 words written. It was probably a bit long, but I liked it and it was helping me to organize my thoughts. I'm going to try not to re-create that post now. I'm going to try and start fresh with a new post about Android Open. Here goes:

Day 1: Workshops
The conference started off on a very strong note.  Sunday was a day of 2-1/2 hour workshops.  The first one was a 101 style session.  I've been developing software for OCAP or (tru2way) for a number of years and recently learned how to develop software for iOS at a very beginner level.  I've even done a small amount of Symbian development in Qt. More recently, JavaScript and some other scripting languages for web application development are on my plate.  Up to this point I've mostly written systems software though. Writing an application is very different from systems programming.  But as I'd started to learn more new application development platforms I noticed a lot of similarities between them.  This workshop covered the basics of Android development and started to make it feel pretty familiar. At the same time it pointed out some of the differences from iOS. It was a very well structured workshop.

The second workshop was a bit of a mess.  It was supposed to talk about Android application design.  It was design focused, but it was more like a design 101 rather than being truly rooted in the nuances of designing a well structured and beatify Android application, we were treated to some rather rough definitions of basic design principles such as affordances, visibility and constraints.  Here's the link to the presentation.

Let me know what you think. I wasn't impressed.  However I think that if I were looking for a n introductory design talk I wouldn't have been so appalled. That said, I did learn some stuff about design that I didn't know before. I just wish that the description had more aptly described the actual contents of the workshop.

Android App Development 101 (Good)
Designing an App from Idea to Market (Not terrible, but could have been much better)

Day 2 & Day 3: Sessions, Sessions and More Sessions
In short: Some good, some bad.   The talks really shifted gears going into the actual conference and moving away from the workshop style talks from the first day.  These talks were short and focused.  Or at least the good ones were.

Here's a list of sessions I attended or have since watched on video:

  • Securing Android (Meh)
  • Beautiful Android (Not bad, but not great)
  • From iOS to Android (Bitter about Objective C mostly, but I learned some stuff)
  • Extending HTML 5 with Native Plugins: PhoneGap Plugins (Scattered presenter, but he tried)
  • Getting the Magic on Android Tablets (Ugh. Terrible presenter and not well structured talk)
  • Extending Development on Rooted Devices (Neat guy.  But too short and rushed to be much use)
  • The Honeycomb Action Bar: Front to Back
  • Fragments for All
  • Design, Building and Architecture Strategy for Twin Towers: Android & iOS (OMG this was boring)


Conclusion:
I personally wouldn't attend another of the Android Open conferences in the future.  I'm a lot more interested in the deeply technical programming topics that would actually teach me how to develop on the platform.  These talks were mostly too short and superficial to be of much use in that respect.  I did however really enjoy the extra activities where I got to see what a number of startups were working on with Android.  Next time I'd want to attend something like Google IO, or another conference I'd heard about while attending Android Open called: AnDevCon (Android Developer Conference).  These seem like they'd be more my speed.

Friday, March 16, 2012

Welcoming our New Overlords

So it looks like Cisco has decided to purchase the company I work for.  I have to admit that my feelings are currently mixed about this.  Those of you who I've worked with at TVWorks here in London Ontario will know why I'm a little skittish.  Long story short...they shut down the office about 2 years ago now. Here's a funny side note that I just found in looking up that link about the closing: The website still says that they have an office in London, Ontario.  On top of that, the second hit in my google search for: "TVWorks closing london" was a job posting that was still active for a position in the London office.  And if any of my ex-co-workers were to check out the site you'd see a couple familiar faces.

Anyway, my story goes like this: I used to work at Liberate Technologies.  I started there while they were attempting to file for bankruptcy.  I was recently out of University and wanted to work for a tech company that was doing something more interesting to me than the place I was working.  I was impatient and left my previous employer after about 3 months of full time employment to join Liberate. I figured they'd go out of business in a year or so, but at least I should learn something along the way that I probably would not have learned if I didn't give it a shot. I was right...at least partly.  I was learning a great deal.  My manager was great.  My team lead was a very good mentor who had a lot of great stories, great patience and a quirky sense of humor that I absolutely loved.  

Then something odd happened which I hadn't accounted for.  We got purchased by the company that was the big fish customer we were constantly chasing.  It was great!  There were retention bonuses, pay raises and a lot of talk about the things we could do together.  The day of the announcement our management was running around with cases of beer.  This place just turned it up to 11.  I was on cloud nine.

But over the next few months some things started to change.  The teams were getting pulled in lots of different directions and some of the people that I really admired and wanted to work with were leaving for far off places.  But I was busy and doing well and making a name for myself.  Things were still pretty good.  Then more people left.  Things continued on.  It was actually still pretty good.  We were really busy.  We were hiring like crazy.  Our numbers swelled.  Then we got a new name.  TVWorks.  For me this was a bad smell.  Mostly because the name seemed like a cheap knock off of GuideWorks, who was a partner of ours (and previously a competitor).  Oh and I moved in with my long-time girlfriend.  And we promptly got a cat.

Then things started to shift.  New management from the mothership, as we called it, came in with a lot of talk about how they were going to help us deploy things faster and make things happen.  The term "doubling down" was used and promptly mocked around the water-coolers.  The hiring turned from full-time, to contracts. The perks were starting to claw back.  There was more talk of fairness with other sites and integrating with the mothership in various ways in order to streamline things.  By the way, I married that girl I moved in with earlier...and bought a house.

This continued for some time.  We tried moving to an Agile-ish development style that was met with mixed results.  Some people really embraced it, others chaffed. The mothership was not all that amused.  Our co-owner backed out of the partnership.  Our free drinks suddenly had a cost and our Christmas party lost some of the previous flare. I was getting restless, but was still generally ok with things.  I struggled to find a place to fit and seemed to be always one step away from getting to do the work I'd hoped to do.

Then things got real sad. The contractor positions were removed.  We carried on.  Various key positions in senior management were suddenly removed. We looked at each other with odd expressions, but still marched on. And after a few more months of slow decline, and after numerous others left of their own accord due to the shifting winds, the final axe came down.  The office closed. And on the lighter side, my wife and I got pregnant with our first child.

All of those things came flooding back to me the moment I read the e-mail Thursday morning.  The ups and downs and the excitement which eventually turned to resentment.  It's because of that experience that I have a hard time walking into this new change with bright eyed optimism. Perhaps it's also because I'm a lot wiser and more cynical now that I'm older and have a daughter to think about.  Maybe the last experience has just made me a more jaded person.  I don't really know.  But I'm trying really hard to be positive about this new change. I think there is a good chance that it will be positive for a lot of reasons.  This is a very different situation than the last purchase that I went through for a lot of good reasons.

For starters the value that the buyer has put on us this time around is considerably more than when Liberate was bought up.  This time a technology company is buying another technology company rather than a media distribution company buying a software development company.  This should be a better fit between the way the corporations work.  It seems that we have a lot to offer these new overloads and I think they actually understand what it is we do and what we have to offer. I'm not clear that the previous transaction I was a part of had that same solid foundation.  And my daughter is walking around nowadays and is ridiculously cute.

Enough with my blathering.  I've just ordered the new Apple TV and I'm way more excited about that than this work stuff anyway.  But I feel better geting this off my chest.  Hopefully I don't get called into a dark office on Monday for saying something that I shouldn't have.  (It's happened before)

Thursday, February 9, 2012

Reviewing the Bio

Image: courtesy of Cult of Mac
I recently finished the Steve Job biography by Walter Isaacson.  It was great.  I don't recall ever finishing a book as quickly as I did this book. (My wife says she can't recall the last time I finished a book...period.) I think the closest was when I read The Shock Doctrine a few years back.  I loved the crazy stories in the Jobs biography, the anecdotes and the pacing of the novel were all quite good.  I also found the parts that discussed his illness very moving.  I actually welled up on occasion.  But I'm also a softy so that's really not that hard to make happen.

There are some lessons to be found in the book to be sure.  Some are cautionary, others are opportunities for all of us to learn something.  All that has been discussed by many others around the net.  And to be fair I think this next criticism has as well.

As I read about Steve Job's time at NeXT and this miss-adventures with Pixar I came to realize something.  The stories were getting to the point where the Apple purchase of NeXT was just about to happen and it hit me.  Wait a minute.  What changed?

It struck me that the events described at NeXT and at Pixar where missing something They seemed to be lacking any real explanation of how Jobs had moved from a bratty kid with insane mood swings and a childish temper to a man retained some of those same faults, but seemed to have many of them tempered and was more in control of himself. How did he get to this place where he was allowing concessions that he would have never even considered previously.  Isaacson offeres up a morsel of an explanation (or hypothesis) to the reader by summing up of Steve Job's experiences with NeXT and Pixar as giving him some sense of humility due to the failures that they and he experienced.  Except that in both cases they ended up doing pretty well.  NeXT was failing for sure, but still managed to be rescued by Apple in the purchase that brought Job's home to Apple.  And Pixar flourished as it created animated hit after hit after hit even though it had a rocky start.  So what actually changed?

Maybe I just missed the point.  But I also found the hammering home of this idea that Steve somehow embodied the cross-roads of technology and the liberal arts is a bit silly. Not that the notion of working at that cross-roads is silly.  Nor is it silly for a business such as Apple to attempt to own that area.  But I just felt like the book kept hitting that note so hard and so obviously that it failed to deliver the message very artfully.  Also that's not really the theme I was personally hoping to gleam from the book.

I really wanted to know how the journey between leaving Apple and returning to save it effected him and changed him into the man who could save it and build something as impressive he did from what was a company on the brink. That's what I was looking for.  Not this rather bland idea that you he just stayed true to this one ideal and that's what guided him and was injected into the DNA of Apple and that's all it took.  I don't buy it.  There needs to have been more.  Given what I read of his early days at Apple, something changed.  But what was it that influenced those changes?

Regardless of my own thoughts however, I would still wholeheartedly recommend anyone who's thought about starting a company, or really enjoyed any of Apples products, or who is just amazed by the things that Steve Jobs accomplished would definitely enjoy giving this book try.


Wednesday, January 25, 2012

On the side...

I've decided I should post a quick update on what's going on with my side project.  I totally missed my stated goal of getting an application deployed for the holidays.  But I had a good reason for it.  Or maybe just a good excuse.  I had a paying gig..and I don't mean my day job.  A friend of mine from a previous employer happened to have acquired a small grant from a local technology company support organization called the Tech Alliance. I've been eager to help him any way I could since he's basically managed to do thus far what I hope to be able to do my self at some point.  He's turned his side project into a full time business that he operates from home.

Anyway the story goes that Nokia had approached him a while back about his application.  They wanted it to be ported to their Symbian devices and were willing to support him in getting that done.  That amounted to some contract work to one of the many small mobile development contract houses out there these days.  Needless to say though, he wasn't particularly pleased with the results.  So when he got this grant from the Tech Alliance he was hoping to hire me to help him clean it up and maybe create a bit of a spike in sales.

My mission, should I chose to accept it, was to provide a working build environment and clean up a lot of the rough edges of the user interface.  A pretty simple task really.  Although I'd only really looked at a small amount of Qt code recently and wasn't at all aware of the joys of the Symbian operating system and SDK.  I'd originally tried to set things up with the Eclipse environment, because that is generally my tool of choice.  However the plugin for Qt wasn't working  particularly well for me and caused a number of problems.  So I gave up on that pretty quickly and decided to venture into the wild world of Qt Creator.  That is one annoyingly structured environment.  The workflow was horrible.  The simulator didn't even properly represent the look of the application and was very, very buggy.  When I finally got the application building I couldn't target the device because I had to wait for the certificate to become live because it had a date in the future rather than being available to use once downloaded.  Then the wonderful Qt Creator environment would crash every 2 or 3 times I re-loaded the application for debugging.  There was also a funny story about a USB cable.  But I don't think I'll go into that.

There were so many little quirks with the Qt SDK and Qt Creator system that I don't think I could even list them all here.  And I won't even get into how messy the code was.  It looked like each file was written by 5 different people, all of whom had completely different coding styles, none of which were about being readable.

I also spent some time on another possibly paid effort.  However that one didn't happen.  It's not dead yet, but postponed until the summer for various reasons.   That project is significantly larger and more effort than the one that distracted me before the holidays.  However the scope of quoting on it also ate up a considerable amount of my time.

I still hope to get a chance to do that project since it would have meant native iOS application development.  Which is really what I'm hoping to do with my side project.  Although I'm quite open to mobile development of any kind.  I plan to try and release my own application on Android as well as iOS when it is ready. It really is quite simple so I don't foresee any major effort in doing the port.  Of course my first target will be iOS.  I may even give the Windows Phone 7 a try at some point.  Then I have some larger, more complex applications I'd like to start working on.  My hope is to get my small application out on at least iOS by the summer and have made a good start on at least one of the larger projects before the fall.  We'll see how that goes.

One other thing.  I'm going to be doing my best to try and convince my employer to send me to WWDC this year.  I'm not hopeful of my success in that regard.  But I was thinking that maybe I could swing it if I offered to pay the conference fees if they could manage the travel.  I've made it a part of my personal goals at work to create an application that can demonstrate I have gained an advanced knowledge of iOS development.  So at least I have that going for me.  But now I have to actually start making something there too.  I have some thoughts that I'll have to try and find the time to squeeze in...probably while I should be eating lunch.

Here's a bit of a before and after shot of one screen.  You let me know which you like better.  I'll try not to get upset.



And here are some more snapshots I'd collected:



I used a much nicer image for that big logo than was previously there.  The old one was fuzzy since it was way too low resolution for the screens.  The changes in the other screen were to remove an action bar like mechanism for selecting favorites and allowing a couple other options that no one ever uses.  So I followed the design pattern that the latest iPhone and iPad implementations use which is much simler and more elegant.



Saturday, September 24, 2011

How I like to define JavaScript Objects

I've been really impressed by the expressiveness and power of JavaScript lately.  It's much more capable a language than I ever used to give it credit for.  The flexibility of JavaScript also can make it often harder to understand what is going on.  There are many ways to accomplish the same thing and they can look like completely different things.

If you have need to create a lot of custom "classes" in your application, I have a few things I've grown to appreciate.  In this post I'll talk about a style of class definition that I find readable, provides good encapsulation and can provide good performance when accessing functions on these objects.  I'm sure that if I'd worked with JavaScript longer I'd be able to enumerate all the problems with my approach, but so far I don't think there is a lot of down side. But I think part of the reason I like my approach is that it reminds me of Java with less ceremony.

Here's what I usually see around the web:
function MyClass (some, params, needed) {
    this.doSomeInit();
}
var p = MyClass.prototype; //Or = new ParentClass();
p.baz = "lorem";
p.fuzz = "ipsum";
p.foo = function() {
    return this.baz + this.fuzz;
};
p.bar = function() {
    return this.fuzz + this.baz;
};
I've also seen:
function MyClass (some, params, needed) {
    this.doSomeInit();
}

MyClass.prototype.baz = "lorem";
MyClass.prototype.fuzz = "ipsum";
MyClass.prototype.foo = function() {
    return this.baz + this.fuzz;
};

MyClass.prototype.bar = function() {
    return this.fuzz + this.baz;
};
So what's going on?  
The above code is basically just 2 different ways of defining a JavaScript "class".  I put class in quotes because JavaScript doesn't technically have classes.  It has objects.  My main gripe with these approaches is that it requires that these objects expose a lot of their internal structure by updating their prototype so that these public functions can manipulate the internal state of the object and do work. The only real difference in the 2 styles above is that one is slightly more efficient since it avoids the chaining of object property calls that's required.  There is a cost to calling MyClass.prototype each time you define a new function.  So if you're looking for speed you put that in a variable.

I prefer to do something like the following:
function MyClass (some, params, needed) {
    var baz = "lorem";
    var fuzz = "ipsum";

   function myPrivateFoo() {
       console.log("PRIVATE");
   }

    this.foo = function () {
        return baz + fuzz;
    };    
    this.bar = function () {
        myPrivateFoo();
        return fuzz + baz;
    };
}
This approach means that I don't have to expose the variables baz and fuzz.  I also get to use the parameters, "some", "params", "needed" without the need to create internal vars or properties on the prototype.  The functions foo() and bar() are both public privileged members of our object.   It also makes it easy for these public functions to use private functions.  My main reasons for liking this approach is that I think it's cleaner in that I like that my constructor encapsulates the class definition like you'd see in Java. I also like that my object can be more shy about what they expose to the world.  But is there a downside to this?  Actually there is.  

The catch is that every time the constructor is called all of the code in my constructor gets run.  All the function definitions are added to the prototype every time.  That's not so good.  Why?  Because if your custom object needs to be constructed a lot, then yes you'll take a hit in the performance department.  However that's usually a smell of something else not being quite right in the design and can be mitigated with a pattern that separates construction from execution and ensuring you are being judicious about your object creation. However if it truly is something that needs to be created thousands of times, then by all means follow one of the other approaches.  Or take a hybrid approach and define any functions that are fully public and don't require internal knowledge of your object state and define them explicitly with the MyClass.prototype.myFunction syntax and anything that has to access the internal state can be defined in the constructor.  There's not really a right answer here.  I'm just sharing my preference and providing a small argument for it.  

If you were to look at performance from another perspective, my approach may actually be preferred.  If you are using functions that an object exposes in a loop, or another pattern that requires lots of calls, my approach means that there are fewer property lookups on the object prototype since local variables can be used more often.  In practice I find that I'm not constructing custom objects very frequently, but I am calling functions on those objects in loops quite a bit.  So for me this approach is a good fit.  

Anyone else have a different take? I'd love to hear about it in the comments.

Friday, September 23, 2011

Starting Fresh

I'm no longer a part of the Redshirt Labs gang of 5 that was actually 4 for quite a while and felt like 2 for a long time, but whatever.  I'm done.   Of course we still hang out and eat the same lunch at Prince Al's, but no longer will I be pining over what to do next with Zengaku.  The rest of the gang will figure it out.  I'd offered to take it off there hands, but they didn't go for that.  I also considered licensing the source code and doing a fork, but I reconsidered and felt like a clean break would be best.

So begins the adventure once more.  This time with a little more solitude.  But if I make an application that only sells a few hundred dollars worth on the market, that's a bit easier to swallow than when you have to split that 5 ways.  Plus I'm not going to be making games.  Which I think would be fun, but is a tough business to get into and requires a lot of talent that I don't have.  Mainly a lot of art, music, sound and game design skills.  I could probably implement the code for a game if you gave me the spec/design docs, but coming up with all the rest is way to much for me and I can't go and hire all that talent either.  This is just a hobby after all.

So I've made the initial steps of setting up my new business.  I've got an idea for a first application.  I'll share that soon enough. I got a website, a hosting service, a remote repository and an official business license.  I'm working on my registration with the Apple Developer Program. It's all getting started.  Now to start making the application.  My hope is to have it delivered to the App Store before the Christmas holidays.  Not that it would help sales or anything, just that I need a goal and that seemed reasonable.

I'm not going to get into the details of my business idea, or the application I plan to build just yet.  If you ask me in person I'll tell you about it. But mostly I'm just not ready to share much else at this point.  I have a lot of work to do.  I'd like to have a decent landing page on my website, get some blog content lined up,  get the application in progress and moving forward and so on and so forth.  Then I'll have loads more to talk about. But for now this is about it.

I may have to write a bit about my new affection for JavaScript and functional programming.  I don't know if I'd say I know a lot about either just yet, but I've definitely spent some time getting familiar with JavaScript over the last couple months and I'm actually quite impressed.  But also looking forward to doing a bit of C/C++ work once more.

Wednesday, March 30, 2011

A couple of things Developers Should Know but often Don't

I've been reviewing a lot of code lately. Mostly Java code, but some C, some C++ event some Objective C.  There have been some patterns to the coding mistakes/miss-steps that I've seen and been pointing out in a number of these review.

Loops
This one seem to be the most common of late. And I had to convince some people of the merit of my stance.  Basically my theory is that you should almost never need a while loop.  So if you ever see yourself using one.  Ask yourself why.  Most times you'll be declaring some kind of iteration tracking variable and incrementing or updating it somehow as you loop through whatever structure is being iterated over.

The problem there is that the variable gets declared and used outside the loop.  Now C doesn't help here so it's common for C developers to make this mistak in languages that do help. In my case Java.  Using a for loop allows you to declare a variable that is scoped to you loop so you can be sure you don't accidentally keep the variable longer than you need and use it by accident somewhere else in your function.

I think the latest C standard (C99) fixes this, but it's pretty common that you can't count on that so a lot of C developers still don't think about this feature.  Just about the only time I think a while loop is a bit cleaner or clearer is if you are creating an infinite loop; in that case the simple while(true){} is pretty universal.  Although I've seen for(;;){} a number of times as well so I'm still not sold on that.

Proper Scope
Along the same lines as my previous issue with loops is ensuring that your variables are scoped properly.  I hate seeing Java functions with a long, long laundry list of auto variables that are potentially not needed since the the parameters may make their allocation unnecessary.  Although this isn't really a memory or optimization effort it does help a bit in that respect.  The Java stack frame will be allocated with space for all the local variables.  Event the objects, although only space for the reference is allocated by default.

So although you will not be preventing local variables from being allocated, if you have the the objects you create properly scoped they will at least only do the object allocation when needed and will be dereference and available for GC as soon as possible.  But the optimization can come into play if your objects are only going to be created if certain parameters are passed into that method.  So in cases where your parameters don't require the objects to be created you save that time and memory.  But like I said, this isn't really the reason to scope them properly.

The best reason for scoping variables is for clarity and maintenance. The issue with keep a variable around longer than you need to is that it is unclear if you intended to use it later and just forgot, or worse yet you do use it later, but didn't actually mean to do so.  Don't laugh.  This happens a lot.  In particular in long, hairy functions.  I don't like those either, but baby steps.


Over use of if this set this else set that
I think this is a pretty easy one.  Which would you think is clearer and more concise:
Option 1:
if (conditiona) {
   var = boo;
}
else {
   var = bar;
}

Option 2:
var = (conditional) boo : bar;

Option 2 is the clear winner in my books hands down every time.  I think this is the very reason why the ternary operator gets included in pretty much every language I've had the pleasure of working with.

I have lots of other gripes and faux paus that I see on a daily basis, but these are just some of the most common that I've seen of late.  One of my biggest pet peeves is when OO design gets perverted into some crazy mess of over complicated goo.  Often that seems to start with good intentions and the classic over use of inheritance rather than composition.  I've trained myself similar to the for loop to stop every time I see inheritance to ask if it is actually the most appropriate solution to the problem at hand and if it truly adds value beyond what composition could provide.  I feel like I'm stating the obvious since I've been reading about this stuff on blogs like this for years, but I keep seeing these same issues in the code I look at being created on a daily basis so people still aren't getting the message.  I figured I may as well add to the ocean of data out there pleading with developers to clean things up.  But I'm sure it's a Sisyphus like task. But I'll keep pushing that damn rock anyway.   It's just how I roll.

Sunday, March 6, 2011

Samsung's Lost a Customer Today

I have a Samsung HTDV.  I was quite happy with it until recently.  It started to behave rather oddly when I powered it on.  I'd hear this relay clicking sound repeatedly before it actually powered on.  At first this happened for 2 or 3 cycles.  Then it was 10, then 20, then it was starting to take upwards of 5 minutes before the TV would actually turn on.

This started around the time my 1st child was born so my time for such distractions was at a minimum.  I finally decided to look up on the inter-webs to see if others had seen this problem and maybe there would be a quick fix. I soon found that this seems to have been a common issue with a number of Samsung LCD TVs with my model number.  They called it the "bad capacitor issue".  Apparently they installed some sub-standard capacitors that eventually wore out.  As the issue progresses eventually your TV would never power on again until the faulty capacitors are replaced.

So I looked up the Samsung support site and called the support group.  They told me I had to provide my proof of purchase and fax it to them.  And so I did. But after all that I found out that since I've owned my TV for longer than 3 years I don't qualify according to Samsung's policy on the matter.  I said: "That's fine, but it's my policy that if a company doesn't want to fix a product issue that is obviously due to an error on their part, they'll lose me as a customer."  The service rep just stuck to the script and said: "Sorry, but this is Samsung's policy."  I don't care if that's the policy.  After this experience Samsung's not going to get another dime from me.  It's too bad too.

I had heard over and over again that they had a quality product.  But this is all it takes to really sour a customer on your products.  I wouldn't have minded if they'd just offered to fix the issue and replace the capacitors at fault.   But that's just not the story I'm telling you today.  I'd rather be praising them.  But I'm not.  Instead you're reading this little buyer beware story.  Oh well.  When I decided to get a new TV I wonder who's going to be getting my money.  Maybe Apple will finally have produced a real Apple TV product.  One can dream.

Globe & Mail talks about Cord Cutting

I was reading the Globe & Mail a couple weeks ago in between feeding my newborn daughter and catching up on sleep. The article in question was this one: Globe & Mail - This is Where we Leave Cable Behind.  I found it pretty interesting given my past experiences within the cable business.  I'd expected the article to be all about digital streaming over the internet, but rather it talked more about how digital cable is slowly being supplanted by the newer and cooler sounding IPTV.

The majority of the article talked about how IPTV is being deployed aggressively by a number of telecom companies to go on the offensive vs. the big canadian cable stalwarts.  And it seems that despite the limited footprint of the product they are making inroads.  This is basically the Telco's punch in the nose after getting bullied by the cable folks for so long in the realm of mobile phones.

The part of the article that I latched onto was when it was quoting from someone they'd interviewed who was using the IPTV service from one of the providers.  The whole article was talking about the great new features and web-like experience that this new IPTV technology could provide.  But at the moment the offerings provided in these early markets where the service is available they have a very cable-like experience thus far.  And the guy they are interviewing doesn't really care about that.  What he's excited about despite all that is the fact that the program guide and other software that he interacts with on the device provides a user experience more like what you'd expect from a product built in the last 4 or 5 years and not like it was built in the 80's using Atari games as the design aesthetic.

If I were a cable operator...and I'm not, but if I were I might want to consider getting a new program guide experience as soon as possible.  I know my feelings are similar to the guy in the Globe's article.  If my provider had a much nicer user interface with a well laid out and simple flow of control for searching, browsing and discovering content on my TV I'd be a lot more satisfied than I am today.  So what I'm saying is that in terms of short term bang for the buck the cable companies really should consider just giving their guides a real facelift.  Let a real designer go to town on it.  Let a real software company build it for you and deploy, deploy, deploy.

I'm not saying that IPTV is a waste of time.  Not at all.  I believe it's likely where all paid TV is going to go and needs to go.  But it's more of a longer term strategic thing as far as I can tell.  But if they want to stop the bleeding.  And I'm thinking they do, they would be well served to bring their guides into the 21st century.  They don't even need to add new features....just make the ones they already have work better.

I'd love to be a cord cutter, but my morality gets in the way...

I have a hard time with "cord-cutting".  I would love to stop giving my service provider so much money for a service that I think I'm over-paying for, but I also don't have a clear alternative that provides the same level of service without going outside the law.  The frustrating part isn't that no one else can provide the service at the same level of quality or even better.  It's that government regulations and the entrenched telecom companies keep blocking competition any chance they get.

Just across the boarder services such as Hulu, Amazon On Demand, VUDU, and others provide access to a lot of high quality streamed content that I can't have for a number of political and legal reasons.  I could do as a number of my tech savvy friends have done and setup a Usenet account or use Bit torrents to get at the content I'd like.  Or more recently some have tried services which allow you access to US services through a VPN like service so the service provided doesn't detect you aren't in the US and as such allows you to stream content to you're hearts content. The last option is probably the most morally ambiguous.   The first 2 are pretty clearly stealing.  And I have a hard time with that since I love the content.  I want to pay those who produced it their due.  They provided me the entertainment value and I feel obligated to pay them for that value.  This is why the last option is more palatable to me.  At least in that case the producers of the content are still getting paid.  You're just subverting their contract with the contents owners to not distribute the content outside certain geographic boundaries.

I find that as time passes and things like UBB have come to a head my moral arguments are carrying less and less weight with me.  I'm starting to feel like the only way we'll be able to change the way video content is delivered is to hurt them where it seems to matter most, even if that will in turn still hurt me, in that the content I love may not have the funds to be produced any more. I could quite easily sign up for  a Usenet service, pick up a Mac Mini with HDMI out and install Plex or another XBMC varient quite easily.  I know the programs to install that can automatically download the content I'd want and it's all pretty easy to find.

However it's not all doom and gloom.  There's still a chance that my provider will learn something here.  For me the UI and the UX matter a great deal more than the feature list.  If they can just spend some time focusing on that they would find someone like me a lot easier to please.  They already provide a pretty impressive feature set.  I can deal with VOD shows that are handcuffed by not allowing me to fast-forward through the commercials.  I can also deal with a DVR that doesn't have all the bells and whistles that a TiVo can provide.  Just make it easier to use, make it drop fewer scheduled recordings, make it easier for me to find the VOD content you have, and make it not so horribly ugly to look at on my big screen TV.  I don't think I'm asking for too much here.

Tuesday, November 23, 2010

Buzz Comments Degraded into a Mac App Store Sucks Battle Royal

So I've been wanting to post this discussion for a while and just haven't got around to doing so.  It was a discussion that happened on Google Buzz a while back where one person posted a link that talked about all the things that flash can do that HTML5 cannot.  It then degraded into an Apple sucks festival to which I wasn't really invited and was summarily dejected from.  Although I could have probably picked a better leg to stand on since I'm not the biggest fan of XCode (although XCode 4 does seem to be a pretty substantial improvement).  Anyway I hope someone finds this conversation as amusing as I did.  I've posted the full comment history with the names of those who are not me edited out.  Everything else is as it was in the discussion...bad grammer, bad spelling et al.


Commenter #1 - Dropping Flash support was such a bad move. And now dropping Java support is even worse. I honestly think Jobs might have gone crazy. Or, he's a Cylon.Oct 29
Commenter #2I kind of see a possible reasoning for it. Apple has always benefited from not being too popular; people didn't care enough about macs to write viruses for it, etc. Standard security through obscurity. Now that it's growing, people are starting to care and are using attack vectors being found for macs through trusted public script interpreters like java/flash/etc. It doesn't matter that the interpreters run in the user space and the vulnerabilities are in OS X. Jobs will push the blame elsewhere. So by discontinuing support for anything they don't explicitly approve of (upcoming mac app store), they can continue to falsely claim that they're "secure" because of their walled garden. "you're safe because we only give you approved crayons and safety scissors".
I'm interested to see if they start voiding mac warranties for installing applications that aren't in the mac store because they can compromise system security (like jailbreaking iphones).
Oct 29
Commenter #3I can't believe that even mac fanboys are into the idea of an imac store... I also can't imagine that developers are too keen to have to share 20% of their income with apple in a space where they previously didn't have to share anything with anyone.Oct 29
Commenter #2But now there's the argument that a store will help smaller developers that won't need separate publishers etc. 70% is better than 0. I'm guessing (completely on whimsical speculation) that there would be a paid Apple-certification process for large companies that want to be supported with a one-time fee.Oct 29
Kevin Hendry - If by 20% you mean 30% I'd agree.Oct 29
Commenter #3good point. As a dyed-in-the-wool apple fan; what is your take on the iMac app store? Do you think it's a good thing or a bad thing? Do you think Jobs is going to go insane a look future iOS releases to only allowed apps from the supported store - and if that happens will you switch away from apple or smile and tell everyone that you love it?Oct 29
Kevin Hendry - Also it isn't exactly true that they get everything now. They pay for other services to manage the payment systems and they have to pay to maintain those systems if they decide to build them...which most can't afford to do. Plus the idea would be similar to that with the mobile store where a common place for application discovery may spur enough traffic and business to offset the increased percentage take that Apple gets. If it works. Also it provides a greatly simplified interface for payments compared to go-it-alone options. However I'm pretty skeptical it will work unless they loosen up the restrictions more than they have thus far.Oct 29
Kevin Hendry - IF it starts to prove that monies can be made like the mobile store did, there will be a lot of new crazy applications for the Mac we've not seen or thought of yet. But similar to TV I don't know if the medium is all that ripe for a lot of creativity.Oct 29
Kevin Hendry - Also if Apple actually starts to lock down the Mac platform similar to what they've got on the mobile devices I think it will flop. I need my Mac to be open enough for a number of tools to work on it. It is a swiss army knife of sorts. The phone being an embedded device I can understand why it is more restricted. But a PC cannot have those same restrictions other wise its a tablet.Oct 29
Commenter #2Isn't the industry moving closer to a tablet-like experience? Multi-touch / Chrome OS / dumbed down netbook UI's / etc? Most people just need access to their "google internet" and their fart apps.Oct 29
Commenter #1Haha. Sadly, I think you're right BC.Oct 29
Kevin Hendry - Yes, for a large number of average consumers iPad like devices are on the way, but they still need machines to develop the code on at some point. Part of Apples recent success is due to a number of moves it made to modernize its development environment, and the OSX platform (not just the GUI). Things like CLANG (via LLVM), WebKit, Grand Central Dispatch, Blocks for C (and possibly the next C spec). These things get developers excited about building code on their platform. I'm certainly disconcerted that they've deprecated their Java port, but I think it's probably better if that is supported via the community regardless.

They have to keep building machines & technologies that developers want to build code on top of...not just consumption devices for the masses. The nice thing is that they're building application/media consumption devices that are popular and they're providing a good development platform us to make monies with. If they were to remove the pillar of the development platform by restricting the options available to developers they will likely lose them in droves. I believe that since I think that although everyone likes to make money, mostly developers like other things and if you piss them off enough they'll walk away from the money in the short term and probably make you regret it. I don't think Apple is going to lock things down on the Mac....but they might...and I think they'd pay dearly for such a mistake.
Oct 29
Commenter #2If Steve Jobs sucker punched his average fan, they'd probably thank him for the "real" experience he just gifted them. He presents a smaller netbook that costs a thousand dollars with minimal specs, and the reviews are glowing because it's small and it "just screams" for everyday tasks. Apple already treats developers and device owners like worthless piles of waste, and they stick with it because ..... well, I don't know why. But they do.
I've already stated that the locked-down mac strategy was completely wild speculation, but for the sake of fun I'm going to continue with it. Developers already have to pay, what is it, $100 to be able to make apps for iCrap devices. Who's to say that they wouldn't put a similar idea to use with mac development kits? It, itself, could be an approved app in iTunes. And part of the sdk could be a sandboxed environment for testing code, so you wouldn't void your warranty by running non-approved code directly on Apple's hardware (that you have the privilege of having in your house).

Anyhow, just a fun thought exercise. I'm sure that in reality they'll be far more creative in finding ways to fuck over their client base while being thanked for it.

I need Timmies
Oct 31

Friday, November 19, 2010

Teleported

Our Team Logo
The other day a friend from my previous employer who now works out in California dropped a whole lot of joy on me and my old team mates.  We've setup a group on Yammer to share little tid-bits and just generally keep in touch.  The other day he posted a list of our old sayings or fun quotations that we'd collected through the years.  Lots of teams do this.  Lots of teams collected lists like this when I was at TVWorks.  I still think these guys were a bit different.  They congealed as a team in a way I'd never seen before and so far we still can't help but get together whenever we can for "team" lunches at the end of each month.  I don't know if I can put a finger on what it is I miss the most about working in that environment with that specific group of people, but it was something special for me.  As I know it was for others as well.  And I'll be thinking back on those days in the TeleQuad laughing my ass off to the point of tears streaming down my face after someone said something absolutely absurd that not one of you where weren't there and didn't speak Teleporter'ese would ever appreciate or understand.

I think I'll have to do some follow up posts with my thoughts on what these guys did well and why I think they gelled together and created a culture all their own.  Also I should talk about the problems this caused and the issues they had in dealing with other teams in the company and my take on some of the things they never quite got right.  But mostly this points is just about me remembering just how much fun that whole experience was and how important my relationship to those guys is to me still.

Thanks Mark for Teleporting me back for a while.  Here's a recap of our little list of Teleporter goofy sayings just in case you're curious.  I"ll try to explain in comments if any of you are interested enough to ask.

  • "That's not a magnet!" - Tom
  • "The comma will protect us all." - Andrew
  •  "That's harass." - Peng
  • "Set to the OR of the NOTs." - Tom
  • "There's no GC in C." - Tom
  • "Laser solids" - Peng
  • "Monkey peaches" - Peng
  • "Set how many big?" - Tim
  • "Undo the did." - Tom
  • "The designees are sad." - Mark
  • "Make like the regression and break." - Andrew
  • "Make from for the bind bits!" - Tim
  • "Evil smell." - Peng
  • "Groupe Ide" (pronounced group-eh ee-day) - Tim & Andrew
  • "That's so awkward" - Peng (said whenever someone spills something on their pants)

Sunday, November 14, 2010

Subverted

My experience with version control systems, revisions control systems, configuration management systems or whatever you happen to call them primarily consisted of Perforce while at Liberate/TVWorks.  I spent some time dealing with Visual Source Safe before that.  Perforce felt like it was from the future after that experience.

As I moved into more of a team lead and architect role at TVWorks I spent less and less time committing code.  Then Comcast management decided that we should be using common tools across the various entities working on software products for Comcast's video services.  For all intents and purposes this consisted of TVWorks in London, TVWorks in Mill Valley and Guideworks in Radnor.  There are other players, but they didn't seem to be included in the quest to use common tools.  Regardless this yielded yet another change in revision control system for me.  This time the move was to Subversion.  But since I wasn't doing development any longer my experience with Subversion was pretty limited.  Switching to  Subversion made a co-worker of mine was quite excited for some reason, but not because we were using Subversion, but what doing that allowed us to use.  Git.

Upon him explaining Git and taking some time to read up on the tool myself I decided that my interactions with Subversion would be through a Git front end that my co-worker had told me about.  Doing so proved quite problematic for me due to a number of non-standard repositories I had to interact with...also the rather bloated size of the repositories made Git choke more than once while using Cygwin.  I had more success natively on Linux, but still working with git-svn and the CableLabs repository structure was a real pain and I'd generally opted for the script they'd created to complete a sparse checkout of a branch.

As such I became familiar with Git and its interface to SVN, but not really proficient at either one.  We decided to make use of GitHub and a private repo for our code at Redshirt Labs as well.  This also allowed me to learn quite a bit more about Git and the work flow it allowed you to use.  Although my interaction was pretty limited again since my role within Redshirt Labs was more about getting all the other partners to focus long enough to produce our application than doing a lot of application development myself.  I drove meetings, worked our agenda's, found someone to do the creative work, helped limit the initial feature set and set milestones.  Not much development there.

Nowadays I'm getting right down to development once again.  I've been working hard to make Zengaku a universal application that can run properly on both the iPad and the iPhone/iPod Touch.  I've been figuring out how to manipulate the interface to handle orientation changes and creating a lot of new artwork with a lot of help from my sister-in-law.  The point is I've been getting quite familiar with Git now and really liking what I see.

At my day job, or at least on the project I'm working on, we use Subversion.  Once again this is actually working with Comcast and CableLabs coincidentally.  I'm still trying to figure out the best ways to make git-svn work in this situation.  In part due to the Big-Ass-Checking problem I've had.  Using Git and a local repo that I can checkin to makes me feel a lot better while I'm developing and is generally pretty quick to work with.  However the crazy SVN layout still gives me loads of trouble.

I've also learned a few new things about SVN that I didn't realize.  Apparently you can swap branches in SVN like you can in git.  This was totally news to me since it was a big reason why I liked working with Git.  I'd never seen any tutorial or blog talking about this particular feature of Subversion.   Apparently all you need to do is call: 'svn switch'.  You have to specify the URL of the branch you are switching to so it isn't as nice as: 'git checkout <branch>'.  But it would do the job.  I've tried it a few times and it does generally work, although it has failed mid switch more than once...trying again allowed it to complete.

I also learned that SVN is more efficient than I'd been led to believe in that creating a branch is a very inexpensive operation.  It is more akin to creating a soft link than creating a new branch.  This has some problems for me since the branches that are created end up just being complete copies of the entier repository which seems less than ideal since you have a large amount of code that has nothing to do with what the branch is about a lot of the time.  In particular when we are talking about the CableLabs tru2way repository.  The other thing I didn't realize about Subversion is that when you merge change from a branch back to the main or trunk you lose the individual submissions that got you to that point.  Unless you keep the branch around (which you could, but would make for a rather wild tree after a while).   When I found this out it really made me scratch my head since at this point I'd though that since Git didn't have such a problem, subversion surely wouldn't either.  But as my co-worker pointed out...I kinda jumped the queue and when straight to go collecting my $200 with Git.  I never really had to live with Subversion so I just assumed that the Git way was the way things should be done.

This was a bit of a meandering post that ended up way, way longer than I thought it would.  But I'm going to share it anyway.  Hope someone findes it interesting and maybe finds out something new as well.  I might talk more about how I'm managing to use Git in our current environment in a later post.
There was some chatter that CableLabs might be considering a move to Git, but I'm not really hopeful.  Although it would definitely make my life a lot easier.

Tuesday, November 2, 2010

I missed my Arbitrary Deadline for Zengaku...oh well

We've been working hard getting the next update to Zengaku ready for consumption.  However the amount of work was a bit more than we'd anticipated and hey, we're all working day jobs as well, so what do you expect.  I've spent more than one night up past the witching hour.   However I think the updates that we have got coming are very necessary, but are a step along the way to our end goal.  This update is mostly going to be adding some functionality and some minor cosmetic clean ups for the iPad version.  However we've got some great ideas to really overhaul the UI in the next update.  I'm really excited about those changes.

Here's some highlights of what we've got coming in this update.  I think we are a week or 2 mor away from getting it all tested and integrated.

  1. Increased number of puzzles: Each puzzle book is getting a boost in the number or puzzles.  Each book now has 100 puzzles.  That's a massive increase in value for our customers.  And current customers will get all these extra puzzles at no extra cost.  Also we are adding a new puzzle book for jumbled mini puzzles.  These puzzles are only 6 digits, but the digits used are jumbled.
  2. We've added a screen for controlling settings so you can turn on or off some of the new game play enhancements.
  3. You can now have your notes sorted in ascending order.  
  4. You can have buttons be disabled once you select a cell and you have checked values already stored in the connected row/column.  This will make it easier for you to see what options are left.  This will also clear out notes in that row for numbers that match the disabled values.
  5. The iPad version will have graphics that really just make things look like a larger version of the iPhone version.  More substantial changes are planed, but for now you are at least going to get images that are native resolution and not scaled at 2X.  Hopefully this will improve the experience on the iPad significantly for now.
  6. We are also supporting orientation changes so you can decide wether or not you'd prefer to play in landscape or portrait.  And you'll be able lock one option in place if you'd prefer using our new settings screen.
I hope some people will find these updates compelling enough to give Zengaku another look.  Our free version will also be getting all these updates, with the exception of the jump in puzzles.  Although I think we'll probably add a couple of our jumbled mini puzzles for potential customers to try. 

Sunday, October 17, 2010

Overflowing Stacks

I tinkered with Stack Overflow a while back.  I was a pretty avid reader of Joel on Software and of course I had to check out anything Joel was up to.  At the time it seemed interesting, but coding wasn't my day-to-day so it was more of a resource now and again than anything.  Since I've been getting back into development once again I've been dipping my toe back in the water.  I started by asking a few more questions based on things that I've been pondering at work and not had much lucking working out on my own.

Recently I was looking for a lightweight library for linked list and queue management since I've noticed that the RI seems to be lacking any such common implementation.  And in embedded systems not using a common data structure implementation seems to be the norm.  Previously we just built our own implementation.  But back then I pretty much just did what I was told to do.  Nowadays I tend to want to poke my head up and look around before I go a head and build something like that myself.   Less than 24 hours later I've got 2 different ideas for open libraries or at least small implementations of those basic data structures that may work quite well in the RI.

I'm still trying to figure out the best way to clone the massive SVN repository with all of its bloat, but that's probably a whole other post.

What I'm finding interesting though is just how quickly I feel myself getting sucked into the whole mechanic of reputation, awards, badges essentially amounting to a form of personal status or street cred.  I'm patrolling the un answered questions looking for a place where I think I can add value.  I'm checking back in with the site just to see if my questions have been voted up or not.  I'm actually mildly pleased with myself when I get that feedback that someone else felt I'd asked a good question.  I'm eagerly awaiting the moment when I get my answer voted up by someone or get a checkmark from the question asker.  They really are onto something here.

profile for Kevin at Stack Overflow, Q&A for professional and enthusiast programmers


And now I'm even proudly posting my "flare" on my blog for all to see.  As long as they don't implement some form of ganking I can see myself working to improve my rep with the Stack Overflow clan.  Oh look I've gained a new privilege.  Sweet.

Wednesday, October 13, 2010

Big Ass Checkins

So my latest gripe is going to be about checking in code in very large chunks. The reason I'm griping about this is probably obvious.  But just to be clear.  The process at NDS, or at least for the project I'm a part of seem sa bit heavy handed.  I don't think I'm allowed to discuss the particulars of the thing, but what it comes down to is you end up with fewer checkins to the source repository that are rather massive in the number of changes they include.

This isn't really what the process is supposed to do I think.  Nor is it what anyone would actually advise you doing.  But what they've got is a process that makes it easier for a developer if they work that way.  I've tried to mitigate things a bit by using Git locally in a local branch.  This gives me the satisfaction of checking in smaller chunks of changes.  But I have to admit that my discipline is lacking when I know that there aren't any CI tests being run on what I've just done, nor has anyone actually reviewed the code.

It also makes working in a team that spans 5 timezones a bit onerous since integrating changes will be done in rather large unruly chunks or better known as all at the end.   This scares me.  We're not there yet, but I can feel the hurt coming already.  Hopefully the crazy level of design done up front will be able to help prevent some of the pain.  But I'm not looking forward to it.  There will likely be a follow up post on this once the event actually happens.  Until then I'll just keep wincing every time I think about it.

Monday, October 11, 2010

Universal Appeal

I've spent quite a few hours of my long weekend getting some things done with Zengaku.  I've added a number of high resolution images so that it will look even better on the iPhone 4.  I've also done a bunch of work on the iPad views and view controllers.  Although that will take some time.  I think the bigger form factor may require rethinking and re-designing the puzzle selection mechanism a bit.  Our first update will probably be pretty simple, but a move in the right direction.  I'm thinking of something split panel so that the puzzle books will be on the left and the puzzles will fan out to the right.  I might see if we can have some icons associated with puzzle books and puzzles.  Maybe previews of the puzzle boards themselves, but time is a factor here since I want the update to be ready by months end.  I'll probably leave it at simple named lists for now.

Generally the iPad version of the game is going to look like the iPhone version with some tweaks to the images for the screen size.  And probably some work on the game board layout.  As well as rotational support so landscape will also work.  We might enable this on the phone as well if I can get something that works well.

I found an interesting library that might allow me to quickly get Twitter and FB sharing in without too much trouble.  I'm hoping those who play the game will share with others from within the app and maybe spur a few more downloads.   We're also thinking of rewarding those who tweet and share their affection for the game with others.

Finally there are some game play and settings features a few people have been asking about.  I have those on my todo list, but they aren't at the top.  So hopefully a crap load of new puzzles will satisfy them for now.  Once we get the universal application going adding the game play updates shouldn't be much trouble though.