Showing posts with label planning. Show all posts
Showing posts with label planning. Show all posts

Thursday, March 27, 2014

app download statistics

Currently, I write my app targeted at windows phone 7.1, which means it runs on all windows phones out there. There are some nice new features in the windows phone 8 sdk, and it seems like a lot of effort to run multiple versions, so I have been thinking about just ditching wp7 and building only for wp8. Before doing that, however, I thought it would be nice to have some actual numbers on what phones are running my app.

I thought I'd have to add this in my own analytics call, but it turns out the Dev Center offers an excel export of your download stats that includes the phone OS Version for each purchaser (along with other info like manufacturer, mobile operator, phone language, and somehow even user gender and age group). So I downloaded that report for the last year and found 

- 140 users with wp7
- 225 users with wp8
- 78 users with unspecified OS versions (not sure how that works)

looks like over a third of my users are still on 7, so I should definitely make sure the app still works for them!

Tuesday, January 21, 2014

Automated Calendar Planning


My initial interest in AI planning comes from a promise I made to a friend years ago, which I was unable to keep. He was an amateur theater director, and he was complaining about the time and difficulty of building a rehearsal schedule, where constraints included
- actors available at different times
- rehearsal slots of different length
- scenes of different length
- scenes that contained varying combinations of actors
- a hard constraint that each scene be rehearsed at least once before the play opened (I think he actually said at least twice, ideally three times)
- a soft constraint that scenes would ideally be rehearsed in order
- the reluctant possibility that if it were impossible to have all the actors for a scene together for long enough, you could provide stand-ins to allow others to rehearse

As an over-ambitious junior programing student, I said I could build something that would do that! Unfortunately (although perhaps unsurprisingly), it turned out to be quite a bit more difficult than I had imagined, and I never got around to it. Last year, I started looking into the problem again and I did build a much simplified version for an unrelated scenario (given x conference attendees who have expressed preferences from 1-y for each of y conference workshops held over z timeslots, which attendees should go to which workshops?) but the Automated Theater Rehearsal Planner was still beyond me. In late January, as I poked through the list of uncompleted projects, I once again came across this one and decided to look seriously into it - as a professional programmer, surely this is something I can do! And in a serendipitous moment, while looking up resources on scheduling algorithms I discovered that this course had begun a few days earlier, so I signed up for it and this is now an active project that I hope to get into a useful state this year.

Some background info on the problem for reference

To understand the general domain of scheduling, I started at the broadest relevant page, http://en.wikipedia.org/wiki/Automated_planning_and_scheduling, and after looking through it selected these relevant links
- http://en.wikipedia.org/wiki/Preference-based_planning, which is relevant because of the soft constraints listed, such as preferring to rehearse in order and have all actors in a scene together
- http://en.wikipedia.org/wiki/Scheduling_(computing) (if one considers the director or the rehearsal space to be the resource being scheduled) which led to http://en.wikipedia.org/wiki/Job_Shop_Scheduling and eventually on to http://en.wikipedia.org/wiki/Genetic_algorithm_scheduling and finally to http://en.wikipedia.org/wiki/Scheduling_(computing)#Scheduling_optimization_problems and to this flow shop scheduling demonstration app: http://posh-wolf.herokuapp.com/ (although flow-shop appears more restricted than my problem). 


Since it seemed likely that at least a broadly similar tool existed, I searched for free tools to try out in order to clarify what I needed to build exactly. (Or if perhaps it already existed). When searching for basic 'scheduling tools' or 'resource planning', the results tended to be about processes, such as scheduling a factory line and supplier logistics for organising delivery schedules - it may turn out that this is the same problem, but they don't quite seem to match. When I searched for 'rehearsals' (or similar), there were no specifically relevant results, however I found that there is a ton of software available for employee scheduling. Since it seemed that this should have significant overlap with the problem I'm looking at, it seemed worth installing a couple of the freeware options to check them out.
http://www.kappix.com/download.htm
http://www.simulation.co.uk/

I found that the basic issue with these tools is that employee scheduling operates on the assumption that you have a fixed number of slots to fill for each session, and are moving the people into the slots (and in the more complex tools, matching the people to the required tasks for each slot). For the rehearsals, I have a variable number of slots, based on how many people can attend, and I want to see which scenes (tasks) are relevant to the largest number of these people. 

Now, for the Creative Challenge project in the class: I'm going to get my scheduler app into a user-friendly state and post it to the class.

Tuesday, March 6, 2012

extracting the hardcoded info


PAX East schedule is out! I need to get cracking on this. I also got another response to my app survey today, where the only feature requested is 'update for pax east'. 

So, last week I implemented the ability to download a hardcoded file from my server. Now I need to adapt that so that I can download whatever files are available, and that I only do this if they are updated from my version.  I want to add this option in an app bar, but I need the collapsed app bar which is only available in mango, and I'm hoping to get one last usable version for pax east out in pre-mango format. So I've added this button in the about page (terrible design, I know). I might also want to add a little notification to the front menu letting the user know if a new version is available?
I should add a 'what's new' popup on first run, like 4th and Mayor.

I wired up a button in the about screen to look for a new schedule on my server, and put a really lame 'version info' file on the server, looks like this
3.1.2012
"East/2012"

So this is - date = last time the server schedule was updated, and location= folder location to look in on the server. In that folder will be a zip file of all the xml files. Each zip needs to be a complete set - I'm not going to try and manage just sending the new events or anything like that. (I'm mostly being inspired here by this article on downloading and reading from a zip - http://www.galasoft.ch/mydotnet/articles/article-2008032301.html

I actually format the event schedule  into xml by hand. I copy the plain text from the official website, then
  1. Remove special characters - /&" are the main ones. Also odd quote chars like ’ and — and …
  2. Manually insert an 'Event' heading for each event
  3. arbitrarily decide on the 'type' of the event, basically I put as 'show' anything that doesn't sound like it'll have audience participation/questions. 
Etc etc

I've hardcoded lots of things that need changing. I haven't gotten a full plan for how to best handle this instead.
  1. Panorama title says' PAX Prime 2011' - updated
  1. Maps are all of Seattle - I have the bcec and boston maps, but will the pax specific ones change? I should probably wait here...nah, I'll almost definitely need to send out another update later. For now let's put in last year's maps.
  1. Useful links are seattle based - updated


Saturday, February 11, 2012

PAX Digital Assistant: up to now

My plan for this blog is to be mostly about my app development work - building, testing, designing, using toolkits and frameworks and so on. I have one app under development and ideas for more. This post gives the background of my current app. 

In the beginning - conception, ambition, scaling back, release
Late 2010, when the SDK for Windows Phone had been released and I was all excited about building an app, I realised that I should build an app for PAX. I began, but didn't get anything done in time for PAX of that year. Then I bought tickets to PAX East 2011, and decided that I would have an app out for that. I looked into MVVM programming, and got pretty much my first taste of actually using an MVC pattern (big props to Laurent Bugnion's toolkit). I was practicing all my (underdeveloped) project management skills, creating user stories, sketching out the interface, etc. Shockingly, I didn't give much thought to testing it (pretty egregious oversight, given that I'm an SDET).



Unsurprisingly, my first ideas were ridiculously ambitious - it should interface with twitter, allowing you to follow all the pax-related accounts, and to tweet, and it would automatically append a #pax tag to any tweets you sent, and you should be able to view the map and zoom in from a suburb level right to a room level, and make notes on the map and share them with your friends in realtime. I handwrote the events into a custom, simple-as-possible xml format, then saved this schedule into the app itself (easy at the time, but meant that a full update was required for any schedule changes). As the dates got closer, I started cutting features. I actually got the app through certification about a week before PAX began, and then had to create an update with the full schedule that made it to the app store the day of PAX East 2011. I was unbelievably proud, and seeing the (mostly positive) reviews and getting a few emails from users was an amazing feeling.

version 2 - poor design bites back
I planned to improve it for PAX Prime, August, but in the end didn't really make any changes - my clunky overall design meant that simply updating all the content to be relevant for Prime was an effort. At PAX Prime I had some new users, but still a few bugs.  In particular, some users complained it was crashing frequently, which I couldn't repro. Eventually one of the users figured out that if he switched his region format from Canada to the USA, it stopped crashing - I thought I'd covered all my bases by randomly testing in region formats like french, two cyrillic languages and an asian language, but no. Immediately after PAX I was still motivated enough to do some work, and I fixed this bug as well as implementing a search feature among all the events.

doing it all right this time, for real
Coming up now we have PAX East 2012. I am in the process of redesigning the app under a test driven framework, so that I can add some major new features like exporting your scheduled events to your calendar, sharing them with friends on an associated website, and updating the event list from a website rather than releasing a new version of the app each time the schedule changes.  I created a Trello board to track what I'm doing - I have mostly been pretty consistent at keeping all my notes and sketches on my ipad (I use NoteTaker HD), but a dedicated task tracker seems like it'll make life easier. I decided that it would be useful to get more feedback from users (related: I'm taking a User Centred Design Certificate) so I wrote a survey, piloted it on three friends who used the app, and then published (well, submitted for certification, so far) an update that adds a link to this survey in the about page and a notice the first time the user opens it asking them to go take the survey. I also have some feedback in email already from users who contacted me through my about page.

Next few posts will probably cover
 - how I'm building the test framework for my app, and problems I've run into where my design isn't test friendly
- installing and beginning to work with the Skydrive API
- setting up the website for the schedule to update from