I've been making some awesome progress on the long count calendar application. I've got all of the math working (although I still need to test all of the nasty edge cases to make sure it calculates things correctly), but for anything after 1582 (when the Gregorian calendar came about) it seems to be working just fine. To test the date calculations I'm working on the ability to convert ANY date into a long count. This is a nice feature to have (what was Jan 1, 1900, for instance?) and will be useful for people looking to compare against other date calculations. The other thing I'm going to provide is the ability to put in a long count date (13.17.5.2.1) and see what date that converts to in a Gregorian calendar.
Normally, the main issue about converting from these earlier dates to later ones is that not everyone transitioned to the Gregorian calendar at the same time.Most of Catholic Europe adopted it in/around 1582. The British empire didn't adopt it until 1752 and the Soviet Union was in 1918 (right after the Bolsheviks took power and Russia became the Soviet Union). The Wikipedia article on the calendar has a nice chart showing the adoption times for different countries. So depending on where you were you had a different calendar. I'm pretty sure that the date is the 1582 and using the default NSCalendar objects will fix it for that date, I believe.
I will say that Apple seems to have done a good job with the calendar objects. NSCalendar and NSCalendarComponents are very nice little objects that really do simplify the mathematics. I have to convert to Julian dating anyway, which makes the math about as easy as it can be, but having the system provide some of the common functionality is very handy, especially being able to extract out year, month, and day without any extra divs and mods on my part. It will even provide the day of the week if you need it (which I don't in this particular application). I still need to dig into the objects a little more, especially with the pre-1582 dating - just to make sure they work as expected.
I did get the T'zolkin and Haab calculations into the application, so not only does it show the long count form (12.19.19.8.2 for today) but also the "month" and "day" (5 Sotz' 1 Ok - also for today). So everything is present in the application now from an implementation perspective - all the math works, it grabs the right images, etc. I need to get some better quality glyphs for the application, though, because the ones I have are low-res and won't look good on the iPhone let alone an iPad. That could actually be a major pain in the butt - one I'm not concerned about right now (those two stories are last on my kanban board), but I recognize that I'm going to have to spend some time either finding some good quality ones or drawing them myself (shudder!).
Overall things are looking really good. I think I might be able to make some good progress this weekend during downtime for Yeomen of the Guard. I'm off-stage quite a bit and with 3 shows in 4 days, I've got a lot of potential time to move this forward. I'm setting a goal of having the Gregorian to Long Count conversion done around Saturday night, the Long Count to Gregorian conversion around Sunday afternoon, and the reckonings done by Monday night. Which means that all I'll have left to do is get some good graphics next week and then I could, in theory, put it out on the App Store by the end of June - the first such Otto Von product to be available. All in the course of 3 weeks. Wow.
So keep your fingers crossed - I need all the luck I can get on this rapid development path!
The story of a small development company working on iPhone and Facebook games. You'll find the ups/downs/ins/outs of working on iPhones, Facebook, and general life. Come join the journey!
Wednesday, June 6, 2012
Monday, June 4, 2012
Silly Little Mayan Long Count Calendar Utility
So for post 101 (that's 5 in binary), I'm giving a sneak peek into a silly utility I decided to develop. I don't know why, but it's just been one of those things that I thought "you know - why not?". So I am. And what IS said utility? Oh, it's tres bien, mon amie. And tres sillie. (And yes, I know that sillie is not really French). Regardless, here's a screenshot:
And what, pray tell, is that? Why, my friends, that's a Long Count (commonly referred to as "Mayan") calendar converter. It tells you what day it is in the Long Count (which, ya know, 'ends' on Dec 21 of this year - but not really). The Long Count calendar is actually pretty straightforward. It's mostly based on the number of days since the "dawn of man" which is 13.0.0.0.0 - a date that correlates commonly to August 11, 3114 B.C.E. It uses a Julian dating scheme (every day is just 1 more day) and then divs and mods them into buckets (b'ak'tun, k'atun, tun, winal, and k'in). The main Wiki page gives a pretty good explanation of the whole thing.
I pretty much started it this evening when I got home, but I've been reading about the Long Count for a while now. I'm intrigued by different counting methods. I used to have a devil of a time with them (converting from decimal to binary to hexadecimal sucked). And then I heard Tom Lehrer's "New Math" (YouTube link here - and yes, you want to click it) and it completely resonated. I grokked it. My mom had Lehrer's LPs (if you remember those, you're older than you look) and I listened to them endlessly. Since then I've kind of geeked out at new methodologies.
Anyway, I looked in the App Store and saw a couple of things about the Long Count calendar but saw that some people were disappointed in the lack of functionality of some of those other apps. There are multiple "reckonings" for the start point of the Long Count, but those are all just relative to the main reckoning. It seems simplistic to use the different reckonings for reference use and also to allow people to convert any date. Probably be able to put in a Long Count and have it convert to a Gregorian date as well. So I'll see what I can do to make that happen and quickly.
Given that I have the basic calendar already working in just a few hours I'm actually feeling a lot more accomplished than I have in ages. And that's a good thing. And tres bien, mon amie.
And what, pray tell, is that? Why, my friends, that's a Long Count (commonly referred to as "Mayan") calendar converter. It tells you what day it is in the Long Count (which, ya know, 'ends' on Dec 21 of this year - but not really). The Long Count calendar is actually pretty straightforward. It's mostly based on the number of days since the "dawn of man" which is 13.0.0.0.0 - a date that correlates commonly to August 11, 3114 B.C.E. It uses a Julian dating scheme (every day is just 1 more day) and then divs and mods them into buckets (b'ak'tun, k'atun, tun, winal, and k'in). The main Wiki page gives a pretty good explanation of the whole thing.
I pretty much started it this evening when I got home, but I've been reading about the Long Count for a while now. I'm intrigued by different counting methods. I used to have a devil of a time with them (converting from decimal to binary to hexadecimal sucked). And then I heard Tom Lehrer's "New Math" (YouTube link here - and yes, you want to click it) and it completely resonated. I grokked it. My mom had Lehrer's LPs (if you remember those, you're older than you look) and I listened to them endlessly. Since then I've kind of geeked out at new methodologies.
Anyway, I looked in the App Store and saw a couple of things about the Long Count calendar but saw that some people were disappointed in the lack of functionality of some of those other apps. There are multiple "reckonings" for the start point of the Long Count, but those are all just relative to the main reckoning. It seems simplistic to use the different reckonings for reference use and also to allow people to convert any date. Probably be able to put in a Long Count and have it convert to a Gregorian date as well. So I'll see what I can do to make that happen and quickly.
Given that I have the basic calendar already working in just a few hours I'm actually feeling a lot more accomplished than I have in ages. And that's a good thing. And tres bien, mon amie.
Labels:
2012,
app store,
development,
iOS,
long count,
mayan calendar,
personal
Saturday, May 19, 2012
Using Kanban for Work
I've been using agile development methodologies (Extreme Programming (XP), RUP, Scrum, etc) for over a decade now. In every job I've had in that time I've touted the benefits of using agile rather than whatever process was prevalent (usually just basic waterfall). In some cases the teams totally bought into it and saw fantastic productivity improvements (like a 300% increase at one company). I've had grassroots support in the trenches only to have senior management balk at it ("too hard to track", etc. - the typical NIH issues). In some cases, the team decided to implement it anyway. Other times the team thought they knew the technology but just ended up with iterative waterfall (smaller waterfall cycles).
![]() |
| Example KanbanFlow board |
![]() |
| A slice of cake is like a story |
Your first column is usually the "backlog" or "To Do" list. These are the stories that you've started to define but aren't really complete enough to really consider for developing. Ideally you prioritize the backlog so you can quickly identify those stories that you need to finish defining first. Your "Ready to Pull" list are the stories, in priority order, that can be worked immediately if you have the bandwidth. The "In Progress" is just that - things that you are actively working. Sometimes called your "WIP" (work in progress), this should contain only those stories that you can work on and complete in two weeks (the standard iteration/sprint length). This insures that you don't try to take on multiple tasks that de-focus you from working something through to completion. Finally, when you've completed a story you move it to the "Done" list. It's pretty straight-forward, but the challenge is making stories/slices that are usable and small enough. It takes a lot of practice and even after a decade I struggle sometimes.
Kanban allows you to have multiple work items in process (your WIP limit). For me that's generally one. I need to focus on that one thing, get it completed, and move on to the next. With a larger team than I have (i.e., more than one), your WIP limit will be larger. Using the Kanban board lets me prioritize the work that needs to be done. I can add new stories, shift priorities - all things that are important in running a small project.
KanbanFlow, the free(!) online board I'm using doesn't have some typical user story fields (and no, I don't get a kickback for rating them so highly, but maybe I should; are you listening, KanbanFlow?!). For instance, it tracks time in hours not points. I guess you could use the "hours" field as a "points" field, but overall it's a small thing. So far I am very pleased with the software and able to work around (or ignore) the things I don't require.
If you're looking to get some focus on your work, Kanban is certainly one methodology that you should explore. And KanbanFlow is a very good free service should you choose that direction. Good luck and happy coding.
Labels:
agile,
development,
methodology,
ottojotts,
personal,
process,
release
Thursday, May 17, 2012
Stupid relearnings
It's been a while since I've written any iOS code. All of my work on OttoJotts lately has been in PHP working the back-end pieces. I've written quite a bit of the web interface to break up the code into functions that I'll be able to use for both mobile and web. It's been a lot of work, but it's starting to come together finally. I've got a few more pieces of functionality to add to the back-end to allow folks to use a web page to play the game. Which will be interesting and should really exercise the code without having to have everyone download a new iPhone app. I can then finish up the iPhone version and maybe actually be done with this app.
On an aside, I've been using KanbanFlow (link here) to track the work I've been doing and the ToDo for future work. I was using Google Wave to do that originally. When Wave first came out, I was horribly excited because it meant that I could document my ideas, see how those ideas morphed over time, and keep the most up-to-date version of the thought process available. And then I could share that with someone else if I needed to (like bringing someone else into the project). Since Wave is going away and all of the waves are read-only now, I needed something new. Given that I've more than a passing familiarity with agile (having done it for over a decade now), I decided to give some kind of Kanban board a shot. I ended up picking KanbanFlow - it's met my needs so far by allowing me to track multiple boards (I have one for regular ToDo and one for OttoJotts ToDo's).
I love that I can customize the columns (although I don't need to) and I can easily move things between the columns. It also allows you to track the estimated to time to complete a task and how long it actually took. I'm not really using those features, but I suspect I will later. Plus, you can color-code your tasks to track different elements of the project. Very cool stuff. I may write up a quick post on using Kanban for development later. Anyway, that's not really the point. Nor is that I've been working on OttoJotts back-end. What IS relevant is that because I've been doing that I've been away from iOS too much.
I decided to work on a quick project to see if I could do it in my "copious free time", but it's a little application for my toddler. The idea is an app that plays Old McDonald and lets him pick from one of three animals and then it strings the song together with the order he's selected. Pretty basic stuff, but it will be fun for him, I think.
What I've been relearning is the basic constructs to make the application, which sounds terrible (and is more than passingly so). I had thought "This might be easy in OpenGL" and then I looked at what was really needed there (gesture detection, processing, etc) and decided quickly - "Um, no". So then I decided that I should probably make a basic UIView application and I'd add UIImages to it. Which would have been fine, but again - need to check for "clicks". Then I *facepalmed* myself and realized that I just needed to have UIButtons. They have all the functionality I need - they can be "clicked" and they can have images associated with them. D'oh. So now I'm making some good forward progress, but it just seemed like a ridiculous amount of time to spend on something so basic it beggars the imagination. Such is the curse of being away from a technology too long...
What does this mean for all the apps I'm working on? Absolutely nothing. This is pretty much a one-off for my kiddo. I might post it to the App Store to share it. But that's neither here nor there and we'll have to see how it feels when it's done. Right now, though, it's got a date with a very important audience of one. Guess I better get back to it.
On an aside, I've been using KanbanFlow (link here) to track the work I've been doing and the ToDo for future work. I was using Google Wave to do that originally. When Wave first came out, I was horribly excited because it meant that I could document my ideas, see how those ideas morphed over time, and keep the most up-to-date version of the thought process available. And then I could share that with someone else if I needed to (like bringing someone else into the project). Since Wave is going away and all of the waves are read-only now, I needed something new. Given that I've more than a passing familiarity with agile (having done it for over a decade now), I decided to give some kind of Kanban board a shot. I ended up picking KanbanFlow - it's met my needs so far by allowing me to track multiple boards (I have one for regular ToDo and one for OttoJotts ToDo's).
![]() |
| KanbanFlow's UI |
I decided to work on a quick project to see if I could do it in my "copious free time", but it's a little application for my toddler. The idea is an app that plays Old McDonald and lets him pick from one of three animals and then it strings the song together with the order he's selected. Pretty basic stuff, but it will be fun for him, I think.
What I've been relearning is the basic constructs to make the application, which sounds terrible (and is more than passingly so). I had thought "This might be easy in OpenGL" and then I looked at what was really needed there (gesture detection, processing, etc) and decided quickly - "Um, no". So then I decided that I should probably make a basic UIView application and I'd add UIImages to it. Which would have been fine, but again - need to check for "clicks". Then I *facepalmed* myself and realized that I just needed to have UIButtons. They have all the functionality I need - they can be "clicked" and they can have images associated with them. D'oh. So now I'm making some good forward progress, but it just seemed like a ridiculous amount of time to spend on something so basic it beggars the imagination. Such is the curse of being away from a technology too long...
What does this mean for all the apps I'm working on? Absolutely nothing. This is pretty much a one-off for my kiddo. I might post it to the App Store to share it. But that's neither here nor there and we'll have to see how it feels when it's done. Right now, though, it's got a date with a very important audience of one. Guess I better get back to it.Wednesday, April 25, 2012
OttoJotts and other stuff
Been working on the back-end pieces of OttoJotts over the past few weeks. It's been slower than I'd hoped, both because I'd run into a small issue that was keeping me from moving forward with the game views and because I was finding other things I wanted to do instead (like catch up on Reddit and watch some videos). I've been a bit demotivated the past few weeks. Lots of stuff happening personally and financially that have added more stress than I needed right now.
On the OttoJotts front, though, things have been progressing reasonably well given the time I've spent on them. Right now I've got the account information and the main game list showing up. I still have to get the game details (the guesses and such) showing up and the ability to start games. Still a lot of work left but once I get these things sorted out it's a lot of playtesting and hooking it up to the iPhone.
iPad is still something of a question. I don't own one so I'll need to rely on people who do to test it out. I'd like to make sure that it works and that I have a good set of graphics for it so it looks reasonable. Just hoping that at least one of my friends is willing to help out. *wink wink*
The other issue I've been running across has been my ADHD kicking in wanting me to work on another small project and get it out. That's kind of what OttoJotts was supposed to be, so I hesitate to jump through the hoops to get something started only to end up on month 15 with nothing yet to show for it. I need to take a Kanban approach and just finish the work in progress and then work on the next thing. It's something I've struggled with for years and is once again rearing its ugly head. I wish I were more motivated to finish OttoJotts and get it done. Maybe I'm unable to complete things. Maybe I'm afraid of what happens if I do complete it (total flop). I don't know - it's just frustrating and adds to my stress level.
Anyway, lots to do at the "real job" (for now). I have tons to do still but I can actually pull this out if I can just get some focus on it. Send happy, supportive thoughts!
On the OttoJotts front, though, things have been progressing reasonably well given the time I've spent on them. Right now I've got the account information and the main game list showing up. I still have to get the game details (the guesses and such) showing up and the ability to start games. Still a lot of work left but once I get these things sorted out it's a lot of playtesting and hooking it up to the iPhone.
iPad is still something of a question. I don't own one so I'll need to rely on people who do to test it out. I'd like to make sure that it works and that I have a good set of graphics for it so it looks reasonable. Just hoping that at least one of my friends is willing to help out. *wink wink*
The other issue I've been running across has been my ADHD kicking in wanting me to work on another small project and get it out. That's kind of what OttoJotts was supposed to be, so I hesitate to jump through the hoops to get something started only to end up on month 15 with nothing yet to show for it. I need to take a Kanban approach and just finish the work in progress and then work on the next thing. It's something I've struggled with for years and is once again rearing its ugly head. I wish I were more motivated to finish OttoJotts and get it done. Maybe I'm unable to complete things. Maybe I'm afraid of what happens if I do complete it (total flop). I don't know - it's just frustrating and adds to my stress level.
Anyway, lots to do at the "real job" (for now). I have tons to do still but I can actually pull this out if I can just get some focus on it. Send happy, supportive thoughts!
Thursday, March 22, 2012
SSL certificate issues resolved
So after a bit of back-and-forth with Jumpline support (which was as supportive as hoped if not quite as responsive as hoped), I now have SSL certificates on my website (click here to see). This is cool, but the solution was not as obvious as hoped.
Apparently, the VDS manager (the software that manages my virtual domain) has some, well, quirks about how it expects things to behave. In particular, it requires that the certificate be actually named "server.crt" rather than whatever I defined in the httpd.conf file. Thanks to Andrew and Geoff at Jumpline, who went in and actually modified my server config to make this work, things seem to be working correctly now. It took 2 days of their futzing around to actually make it work, but it does seem to be working.
The other main problem is that I can't use multiple certificates as I'd hoped to do. I could do a wildcard certificate but that costs in the $400/yr price range - something I can't swing financially. So I wasted $12.99, which is sad but at least not an expensive object lesson. Still disappointing.
Now, though, I can begin to work again on OttoJotts for Facebook. I'll have to see how well it goes. I'm putting in a breakpoint, though - if I don't make progress for more than a day that I actually work on things, I'm going to punt and work on the web version instead.
Let's see what the next several days holds in store for OttoJotts...
Apparently, the VDS manager (the software that manages my virtual domain) has some, well, quirks about how it expects things to behave. In particular, it requires that the certificate be actually named "server.crt" rather than whatever I defined in the httpd.conf file. Thanks to Andrew and Geoff at Jumpline, who went in and actually modified my server config to make this work, things seem to be working correctly now. It took 2 days of their futzing around to actually make it work, but it does seem to be working.
The other main problem is that I can't use multiple certificates as I'd hoped to do. I could do a wildcard certificate but that costs in the $400/yr price range - something I can't swing financially. So I wasted $12.99, which is sad but at least not an expensive object lesson. Still disappointing.
Now, though, I can begin to work again on OttoJotts for Facebook. I'll have to see how well it goes. I'm putting in a breakpoint, though - if I don't make progress for more than a day that I actually work on things, I'm going to punt and work on the web version instead.
Let's see what the next several days holds in store for OttoJotts...
Tuesday, March 20, 2012
SSL certificates and my web host provider
The past few days have been proven quite difficult - unexpectedly and disappointingly so. Here's the general gist of what's been happening.
I decided that rather than write a full front-end web interface for OttoJotts that I would be sneaky and do it for Facebook, creating a back-end for beta testing. This would give me a leg up on the FB version of the game and would still let me write most of the code needed for things without doing web development directly (I would be able to leverage some of my other efforts to help). I kept getting a failure from FB, though, and found out that it was likely based on secure browsing and a lack of SSL support from my game.
So I went online, found a cheap solution from NetworkSolutions ($12.99/yr for an SSL certificate - that's a good deal) and bought one for my FB subdomain. Installing it has been quite the exercise in frustration, though. For some reason, adding OpenSSL to the Apache service is simple. I just had to click on something, fill out a form, and bam! Installed. The certificates, though, are a different beast.
First, none of the documentation I've found match my configuration. I've been searching for, literally, days trying to find out what arcane incantation I'm missing to make this thing work. There are two separate configuration files - httpd.conf and ssl.conf. In different directories. Which one do I edit? What changes do I need to make to them? The information online seems scattered and confused - and doesn't match the configuration I have.
I've submitted a ticket with my hosting company to enlist their help, but some of the documentation now has me concerned that I won't be able to add a separate SSL certificate for my main site (the WWW one) and one for my subdomain (the one I'm using for the FB game) because of how OpenSSL is configured. Overall what I would have expected to be something that should be bog simple (because of the need for secure connections in an increasingly-connected world) has turned out to be the epitome of legacy manual entry. The only thing that would make it worse if I had to submit it on Hollerith (punch) cards! As it is, it's fortunate that I know vi as well as I do and can navigate my way around a Linux system.
I will update as things progress but for now I can just say that someone (not me) needs to figure out how to make this a lot simpler than it currently is.
I decided that rather than write a full front-end web interface for OttoJotts that I would be sneaky and do it for Facebook, creating a back-end for beta testing. This would give me a leg up on the FB version of the game and would still let me write most of the code needed for things without doing web development directly (I would be able to leverage some of my other efforts to help). I kept getting a failure from FB, though, and found out that it was likely based on secure browsing and a lack of SSL support from my game.
So I went online, found a cheap solution from NetworkSolutions ($12.99/yr for an SSL certificate - that's a good deal) and bought one for my FB subdomain. Installing it has been quite the exercise in frustration, though. For some reason, adding OpenSSL to the Apache service is simple. I just had to click on something, fill out a form, and bam! Installed. The certificates, though, are a different beast.
First, none of the documentation I've found match my configuration. I've been searching for, literally, days trying to find out what arcane incantation I'm missing to make this thing work. There are two separate configuration files - httpd.conf and ssl.conf. In different directories. Which one do I edit? What changes do I need to make to them? The information online seems scattered and confused - and doesn't match the configuration I have.
I've submitted a ticket with my hosting company to enlist their help, but some of the documentation now has me concerned that I won't be able to add a separate SSL certificate for my main site (the WWW one) and one for my subdomain (the one I'm using for the FB game) because of how OpenSSL is configured. Overall what I would have expected to be something that should be bog simple (because of the need for secure connections in an increasingly-connected world) has turned out to be the epitome of legacy manual entry. The only thing that would make it worse if I had to submit it on Hollerith (punch) cards! As it is, it's fortunate that I know vi as well as I do and can navigate my way around a Linux system.
I will update as things progress but for now I can just say that someone (not me) needs to figure out how to make this a lot simpler than it currently is.
Off-topic: "Microsoft" questions in interviews
I've been seeing a bit of traffic around the net these days about the so-called "Microsoft questions" and whether they provide any value (most recently I think I saw this on a blog). The questions most often raised is "shouldn't my code speak for itself?" and "what could this possibly tell you about me?". The answers are - "no" and "a lot". Let me elaborate.
I've been on the hiring side of the table for over 15 years. I've interviewed several dozens of people and hired only a handful of that total number. Did I pass up very qualified individuals? Yes. Did I make what I think, even in retrospect, were good decisions? Yes. The reason is that I picked individuals who answered those "Microsoft" questions well. Not always correctly, but well.
The reason behind the "Microsoft question" is to find out how someone thinks. I couldn't have cared less if the candidate got the right answer. Rather, I was looking to see how that person thought and approached the question. One of my favorites was the following:
I was a Windows developer for several years and one thing that I learned pretty quickly was that if you didn't want to just make another version of Word with the Microsoft Foundation Classes (MFC), you really needed to find alternative solutions. MFC didn't always do things in ways that you thought it would. It often required some creative solutions to make the MFC do what you wanted. If someone approached the problem above with a straight-forward approach they'll fail. Same thing with MFC (or any other technology for that matter). Which means they'll get stuck easily and need some help. Which means that I or one of my leads would be spending a lot of time trying to teach this person how to solve problems, not just work through the hard problems of architecture and design. Just today I was talking with a friend about his experience in Drupal and the same thing came up. You can't always rely that things will work as advertised and sometimes you need to get your hands dirty to solve the problem.
The hardest thing I ever did on Windows was override a common dialog. If you're not familiar with these, suffice it to say that they are provided by the framework at a very low level in the system and that, while they provide some override functionality, what I got asked to do was not part of the traditional customization flow. I got some of the problem solved with some straight-forward work but it took some pointers from a senior developer to lead me to the final solution which required not one but two different class overrides. It wasn't just something I could Google (even though Google didn't exist yet). The final result was a small thing but it made the product manager happy and I learned quite a bit about how Windows messaging worked. Would someone unable to approach that problem above have been able to solve it? Possibly, but it have been far more challenging - and time-consuming. And for those people who just give up on the Sherlock Holmes problem they would have come back to me saying it was impossible (even though it apparently wasn't).
My wife's workplace has something of a mantra that there was one qualification you had to have and the rest they could just teach you (theirs was financially-based). I follow that same kind of mantra, but it's around creative thinking. If you can think creatively, you can usually work your way through or around almost any obstacle that pops up from a development perspective. Sometimes the answer is "can't be done" but if you have more than a hammer in your tool bag you'll have a lot of options to try before you come up with that answer. And that's what I like to see - meeting needs creatively and growing my developers.
So are the "Microsoft questions" important? The answer has to be "yes". They show that while you may not have the skills, you have the mindset to attack problems from a variety of directions. It shows you're tenacious and don't give up. That you have a variety of ways of framing a problem. To me, they're not just important - they are pretty much the entire interview.
PS - If you're interested in the answer the Sherlock Holmes problem, just post a comment and I'll vet your solution or send you the correct answer.
I've been on the hiring side of the table for over 15 years. I've interviewed several dozens of people and hired only a handful of that total number. Did I pass up very qualified individuals? Yes. Did I make what I think, even in retrospect, were good decisions? Yes. The reason is that I picked individuals who answered those "Microsoft" questions well. Not always correctly, but well.
The reason behind the "Microsoft question" is to find out how someone thinks. I couldn't have cared less if the candidate got the right answer. Rather, I was looking to see how that person thought and approached the question. One of my favorites was the following:
Sherlock Holmes is looking for a new Dr. Watson. You are placed in a room with 3 light switches. Down the hall is another room where Holmes is sitting with a single lamp. One of the 3 switches controls the lamp. You can't disassemble the switch and can't see or hear anything outside of the room.You can play with the switches as long as you want but when you enter the room with Holmes you must tell him, with 100% certainty, which of the switches operates the lamp. How do determine which switch controls the lamp?I love this question. But why? Because it requires the person to think creatively and "outside the box". I don't really care if you get the right answer. I want to know how you think. I always ask my candidates to think out loud so I can understand what their thought process is. How are they attacking the problem? Are they finding the obvious and hidden information in the question?
I was a Windows developer for several years and one thing that I learned pretty quickly was that if you didn't want to just make another version of Word with the Microsoft Foundation Classes (MFC), you really needed to find alternative solutions. MFC didn't always do things in ways that you thought it would. It often required some creative solutions to make the MFC do what you wanted. If someone approached the problem above with a straight-forward approach they'll fail. Same thing with MFC (or any other technology for that matter). Which means they'll get stuck easily and need some help. Which means that I or one of my leads would be spending a lot of time trying to teach this person how to solve problems, not just work through the hard problems of architecture and design. Just today I was talking with a friend about his experience in Drupal and the same thing came up. You can't always rely that things will work as advertised and sometimes you need to get your hands dirty to solve the problem.
The hardest thing I ever did on Windows was override a common dialog. If you're not familiar with these, suffice it to say that they are provided by the framework at a very low level in the system and that, while they provide some override functionality, what I got asked to do was not part of the traditional customization flow. I got some of the problem solved with some straight-forward work but it took some pointers from a senior developer to lead me to the final solution which required not one but two different class overrides. It wasn't just something I could Google (even though Google didn't exist yet). The final result was a small thing but it made the product manager happy and I learned quite a bit about how Windows messaging worked. Would someone unable to approach that problem above have been able to solve it? Possibly, but it have been far more challenging - and time-consuming. And for those people who just give up on the Sherlock Holmes problem they would have come back to me saying it was impossible (even though it apparently wasn't).
My wife's workplace has something of a mantra that there was one qualification you had to have and the rest they could just teach you (theirs was financially-based). I follow that same kind of mantra, but it's around creative thinking. If you can think creatively, you can usually work your way through or around almost any obstacle that pops up from a development perspective. Sometimes the answer is "can't be done" but if you have more than a hammer in your tool bag you'll have a lot of options to try before you come up with that answer. And that's what I like to see - meeting needs creatively and growing my developers.
So are the "Microsoft questions" important? The answer has to be "yes". They show that while you may not have the skills, you have the mindset to attack problems from a variety of directions. It shows you're tenacious and don't give up. That you have a variety of ways of framing a problem. To me, they're not just important - they are pretty much the entire interview.
PS - If you're interested in the answer the Sherlock Holmes problem, just post a comment and I'll vet your solution or send you the correct answer.
Labels:
business,
hiring,
interviews,
Windows
Monday, March 12, 2012
More updates
I don't want to sound like a broken record, so thankfully this post avoids that. I've been working on cleaning up the back-end PHP code for OttoJotts so I can create a basic web interface that will exercise the two-player game. One of the concerns at this stage is that I'm going to spend too much time on the iOS front end and less on the actual game play. By working on the back-end I'm focusing my attention on the actual play. This also has the benefit of being the basis for a web interface for other things.
I've almost completed moving all of the actual working code into functions that can be called from either the iOS-supporting PHP code or from an HTML page directly. Given my (relatively) intermediate skills in web development, I'm hoping I can get something written up without killing myself to provide access. Some things, like creating an account and such, I'll pass on as that will require some effort. Rather, I'll just do that manually for now and then later work on getting something coded up that's pretty and usable.
Overall I'm pretty happy with how things have been going. I know that there's an added security benefit to what I'm doing, which is definitely a good thing. PHP has had a reputation for being somewhat "security lax" but there are things that you can do to harden it. Part of this work is doing that hardening.
So, things are progressing even if not visibly. I'm hopeful that I'll be able to get this hammered out in the next few days and then I can work on the web interface. Then I'll be able to test the two player game code and, if everything's working well, be good to go. This does make me wonder, though, whether I should just do a web interface iOS app for the two player game and get the single player game out there. So do an OttoJotts solitaire version now-ish, get the web version working and then write a web UI wrapper app for the two-player game since I'm finding the two versions are radically different. Need to think this one over a little bit...
Until next time...
I've almost completed moving all of the actual working code into functions that can be called from either the iOS-supporting PHP code or from an HTML page directly. Given my (relatively) intermediate skills in web development, I'm hoping I can get something written up without killing myself to provide access. Some things, like creating an account and such, I'll pass on as that will require some effort. Rather, I'll just do that manually for now and then later work on getting something coded up that's pretty and usable.
Overall I'm pretty happy with how things have been going. I know that there's an added security benefit to what I'm doing, which is definitely a good thing. PHP has had a reputation for being somewhat "security lax" but there are things that you can do to harden it. Part of this work is doing that hardening.
So, things are progressing even if not visibly. I'm hopeful that I'll be able to get this hammered out in the next few days and then I can work on the web interface. Then I'll be able to test the two player game code and, if everything's working well, be good to go. This does make me wonder, though, whether I should just do a web interface iOS app for the two player game and get the single player game out there. So do an OttoJotts solitaire version now-ish, get the web version working and then write a web UI wrapper app for the two-player game since I'm finding the two versions are radically different. Need to think this one over a little bit...
Until next time...
Wednesday, January 4, 2012
2012 Updates and Such
So I totally suck at updating this thing in any reasonable sense. It was a very busy period since February of last year through the end of the year. My son, Andrew, was born in April and a lot cascaded from that event, as you'd expect. Summer vacation was then upon us and a lot of things cropped up meaning that nothing happened with OttoJotts. Then the new school year was upon us and then Halloween and then Turkey Day and then Christmas (holy crap where did December go?!) and then New Year's. Wow.
So now it's 2012. The end of the world will be upon us in 352 days so I better get cracking on this game. What's on tap for right now is finishing up the two-player games which are started (mostly it's just friend management right now) and getting out Alpha 4 with those and then getting the rest of the functionality into Alpha 5 so I can get Beta 1 polished and out the door. The goal for Alpha 4 is to be out to testers by the end of February, Alpha 5 by Memorial Day, and the final game by Independence Day. What? You don't measure your year by holidays?
So that's the plan. It looks good on paper and may actually be do-able. We'll have to see. I just feel that there's an awful lot left to do and this really, sadly, isn't my full-time job. It's not even really a part-time job what with playing dad with the kiddos and stuff. Hopefully I'll be able to devote some more time to getting this project done. I've only got like 5 other ideas I want to get working on before the world ends in, *checking* yup, 352 days.
So now it's 2012. The end of the world will be upon us in 352 days so I better get cracking on this game. What's on tap for right now is finishing up the two-player games which are started (mostly it's just friend management right now) and getting out Alpha 4 with those and then getting the rest of the functionality into Alpha 5 so I can get Beta 1 polished and out the door. The goal for Alpha 4 is to be out to testers by the end of February, Alpha 5 by Memorial Day, and the final game by Independence Day. What? You don't measure your year by holidays?
So that's the plan. It looks good on paper and may actually be do-able. We'll have to see. I just feel that there's an awful lot left to do and this really, sadly, isn't my full-time job. It's not even really a part-time job what with playing dad with the kiddos and stuff. Hopefully I'll be able to devote some more time to getting this project done. I've only got like 5 other ideas I want to get working on before the world ends in, *checking* yup, 352 days.
Subscribe to:
Posts (Atom)




