Monday, February 28, 2011

Agenda for Second Meeting

-- Determine Team Name
-- Determine Presentation Flow -- materials needed, discussion details, for next day's meeting with Joe -> use proposal as basis

Friday, February 25, 2011

Roberts Rules of Order

I take most of this from http://www.robertsrules.org, since I can't find my book with the rules.

There are several rules, and their intent is to allow decisions to be made in a straightforward manner. The language used in Robert's Rules sounds somewhat Victorian. Maybe I can break it down into more modern English.

Definition of "motion": a formal proposal for action made to a deliberative assembly for discussion (google definitions, princeton website)

We might say, "propositions", or even better, "offers". The other meaning of "motion" could be captured by the word "plan".

The main offers have a certain order of precedence, meaning when one is offered with lower priority than what is currently going on, it gets ignored.

Main Offers (from lowest priority to highest):
- to begin discussing a plan
- to end permanently the current plan
- to reword the current plan
- to let a committee figure out the details of a plan
- to postpone a plan to a certain time
- to limit or extend a debate
- to close a debate
- to lay aside a detail temporarily
- to follow the agenda for the day instead of whatever was going on
- to complain about something going on in the proceedings
- to take a break
- to end a meeting


There are a few other things you can do, as situations arise, like have a plan reconsidered, cancel a previous action, request information, enforce rules, and avoid making a decision about something. Pretty neat way to run meetings.

Wednesday, February 23, 2011

Agenda for first meeting

Tasks:

- Nominate a product owner

- Make a wiki with product backlog / tasks to do

- Have a script that can log onto facebook and access the Farmville app

- Establish a database and write a script that goes online, verifies the identity of the server, and then sends and receives verification of its certificate in the server database.

- Give "point" values to upcoming tasks on list based on time required

Sprint workshop:

- decide how many points to aim for on this iteration

- discuss in detail (user stories) all items to be accomplished this iteration

- estimate time to be taken by each sub-task and figure out how much time each team member will devote to getting this sprint done. Include "stretch" tasks for being done early.

- establish where we'll work and have a TODO list, "test cases in progress" list, "code in progress" list, "ready to be verified" list, and a "done" list

- establish a time for every day to briefly all check in together and report on progress since yesterday. Have scrum leader update "burndown" chart to indicate hours needed left to complete sprint.


Remember:

- team members should try to work on the same code together, and when your tasks are finished early, work on someone else's or a sprint task.

- review every sprint at the end, the burndown chart, the team velocity, discussing what went well, what could be done better, and what will be done differently next time. Continue process through every iteration.

First meeting with team

We are all free on Tuesdays and Thursdays, 4 of us at 11, 4 of us at 12:30, and all of us after 1:15. We will meet in the Farris building tomorrow and arrange our scrum stuff. I will be gathering details I need for an effective meeting...

Monday, February 21, 2011

Pharmville specs

  • This is based on the Volere Requirements Specification Template.

Also, remembering the five points to a SMART goal: Specific, Measurable, Attainable, Realistic, Timely / Timed.

1. The Purpose of the Project

-- Service Goal
  • Allow customers to gain experience, prestige, and credits inside Zynga games in an automated manner. This goal is actually a set of goals to be attained, and can later be transformed into a set of goals to make the service faster or more reliable over a set period of time.
-- Revenue Goal
  • Starting small, we expect revenue to be in the 10s of dollars by the end of the semester. Further goals will not be stated here.
-- Legal Goal
  • Have the product and company comply with all state and federal laws, avoiding torts and copyright infringements.
-- Security Goal
  • The product shall employ online verification mechanisms to avoid being hacked and distributed without permission.
-- Learning Goal
  • Production team shall learn how to employ agile techniques in the product development cycle, how to advertise on Facebook, how to program in Python, and how to use some of the Facebook APIs for python.

2. The Stakeholders

-- the client: Joe Kniss
-- the customer: millions of Facebook users
-- other stakeholders: team members who will be graded on our performance
-- hands-on users of the product: same as the customer


3. Mandated Constraints

-- Solution constraints
  • Follow the direction of the teacher
  • Be legal
  • Use python, php, SQL, and developer APIs
-- Anticipated workplace environment
  • We expect school, as well as team members' houses. Maybe even the institute.
-- Schedule constraints
  • Other classes
  • 10 weeks
-- Budget constraints
  • No money

4. Naming Conventions and Definitions
-- Not currently applicable

5. Relevant Facts and Assumptions
-- Not currently applicable

6. The Scope of the Work
-- The Current Situation
  • Not started yet
-- The Context of the Work
  • Not currently important
-- Work Partitioning
  • TBD

7. Business Data Model and Data Dictionary
-- Not sure

8. Scope of the Product
-- Product Boundary
  • Users are to play with the product, but not reverse engineer or otherwise misuse it
-- Product Use Case Table
  • TBD

9. Functional and Data Requirements
-- Functional Requirements
  • Should be broken down into atomic parts, and kept track of by the product owner
  • The product shall maintain a history of what it's done for the user
  • The product shall check in with a server every 15 minutes for verification
  • The product shall allow user to set different behavior modes
-- Data Requirements
  • There shall be a user database, that includes payment receipts and history

10. Look and Feel Requirements
-- The product shall be user tested for quality


11. Usability and Humanity Requirements
-- Ease of use
  • The product shall be user tested by a wide demographic
-- Personalization and Internationalization Requirements
  • We'll cross that bridge when we come to it
-- Learning Requirements
  • The product shall be easy to use
-- Understandability and Politeness Requirements
  • The product shall be tested for sensitivity to audience's sense of appropriateness
12. Performance Requirements
-- Product shall be fast on an ordinary computer
-- Product shall be safe to use and void of dangerous bugs
-- Product shall be robust and updated to reflect changes in Zynga games

... and the list continues. See http://www.volere.co.uk/template.htm

My vote

all five to JH

Sunday, February 20, 2011

Imperfect Voting

There are a couple things that are interesting to consider. First, there is Pareto efficiency. That is to say, can we be assured that the final selection is done such that there are no changes that could be made in terms of players in teams or project selected for implementing such that it improves at least one person's situation while not diminishing anyone else's?

Then there is Arrow's impossibility theorem. It states that we cannot have a fair ranking system and at the same time have everyone's preferences considered equally, with Pareto efficiency, and such that adding a new proposal to the group won't change the over all results besides giving the new proposal a chance to win.

These suggest a couple different voting systems. First, people can vote in some manner and have the bottom scorers removed from the pool, and then have the voting continue again. It could be made in one pass if everyone's preferences were ranked, and when options were removed, all the options below them would be augmented and the votes re-totaled, continuing until we hit the top five.

Second, we could have people vote and result in a top 10 or so projects. After that, the people who gave the proposals would be the only ones with a vote, and they pick the top 5 projects. I think that system would lead to some interesting results and some good debate.

For the basic voting schema, I still think people should give all proposals a ranking between 1 and 5, and then add all the scores together. Also, these rankings should be prefigured and no one should know the overall results until all the votes had been decided. The top 10 or so results from there can have the people who made the proposals decide which they want to do.

If the top proposal people decide to team up and choose, say, only 3 proposals, the rest of the class should be able to re-vote, and form groups to tackle whichever proposal wins.

Facemashing the Proposals

The Social Network was pretty misleading. The Elo rating system algorithm used in Facemash has been around for years, and is not the best predictive algorithm in existence. It basically performs a weighted average of results, which, iteratively, it updates scores based on performance vs. expectation.

Consider 2 people, A and B, with a current rating Ra and Rb. Then at each update step, you update each rating as follows:

Ra' = Ra + K(Sa - Ea)

where Ra' is the new score, K is just a scaling factor for change sensitivity, and Sa are the actual "points" made in the competition, and Ea are the expected number of points. Put simply, if we have Ra currently scoring better than Rb, then in a binary point system like Facemash would have, Ea = 1. So if Ra wins, its score doesn't change. If it loses, so that Sa is 0 or -1, then Ra is reduced by K or 2K. Same thing for Rb.

The way we could implement the same kind of thing in class is simply to rank the worst proposal with a "0", and add one to every higher rated proposal, so the highest gets a 27 or 28, depending if you're allowed to rank your own proposal. We don't even need to average -- we could just take the raw scores at the end.

Some tests between the systems indicate that the overall scores will be different, but the order of ranking remains the same. I might not be testing it thoroughly enough. I was using http://elo.divergentinformatics.com/ to test the elo system.

We might try a blocky distribution, where the 29 proposals get put into 5 equally-rated bins, and then add all those scores together. Ties for values that would have simply been "close" the other way can then be resolved by a popular vote. This stops a proposal from losing only by a narrow margin.

Friday, February 18, 2011

Proposal -- Pharmville

My first draft proposal can be found at this link.

Second draft: here.

Thursday, February 17, 2011

Rank / score / name

(verbose notes in previous post)


00 / mine / JH

01 / 95 / TDG

02 / 85 / NS

03 / 83 / AR

04 / 80 / JD

05 / 78 / AH

06 / 76 / AK

07 / 68 / JD2

08 / 67 / IG

09 / 63 / LAG

10 / 55 / ANS

11 / 45 / DWS

12 / 41 / JD1

13 / 40 / GIA

14 / 38 / SM

15 / 37 / VS

16 / 35 / E

17 / 25 / MM

18 / 23 / AS

19 / 22 / ED

20 / 20 / BFR

21 / 18 / RH

22 / 15 / WC

23 / 13 / KN

24 / 11 / ALH

25 / 10 / CJA

26 / 05 / EA

27 / 03 / DH

28 / 00 / K

Tuesday, February 15, 2011

Thoughts about proposals (desirability going up to 100)

00 -- Pharmville by me. I feel like this one will make money.

95 -- Room Scheduling by T.D. Gonzales. I think we should do this and give it to UNM to save ourselves the trouble of being victim to their cruddy systems. We might find that it's harder than it looked.

85 - Locus Log by Nishant Sreedharan. I find it interesting that the example pictures in the proposal anticipate the hijacking of the system by spammers trying to sell merchandise. Is there a way to avoid that? Also, there are tools that use flickr and picasa pictures, and show recent geocoded posts on a map. There are other applications that display useful information about things you are looking at through the camera. If we're saving text streams, why even worry about showing it on an augmented reality app? Why not just geocode messages and show a map with nearby messages from merchants and other people? It actually might be cool what people nearby you have "floated" to the airwaves -- a new way of learning about the world, rather than via friends or people you follow on facebook or twitter. Can we accept a new medium like that? It might be cool! I'd be worried about people abusing the system with profanities, but it has tons of possibilities if that can be controlled!

83 -- Cross Stitch Pattern Generator by Amy Reynaud. This would best be utilized as a free application, perhaps an extension to Adobe Photoshop. Actually, upon further reflection, it might make a cool extension to Facebook as well, allowing users to turn photos into cross-stitch patterns and share on their walls. For a dollar's worth of facebook credits they can keep and manipulate the pattern on-line, printing out ready-to-use instructions. Image manipulation is an awesome field, and the algorithms to transform colored nodes into efficient paths are very cool -- like the Martin-Held zig-zag pocket machining algorithm. I don't know the ones for cross stitch patterns, but I'm sure they're not too hard or much different.

80 -- Thaumaturgy by Justin Dawson. This is a great idea. I hadn't played the games referenced before, but have checked them out and think this is a very viable idea, and could be completed (not passed through the iPhone store, though) with polish by the end of 12 weeks. Since I've programmed for the iPhone, I wouldn't mind this at all.

78 -- Remote Home Control by Alan Hayward. I assume that control of devices can be done through a secure radio or wifi transmitter? How will we contain costs for hardware? If your company is investing the cost of pulling this together, I would be happy to be part of the team, working on low-level components or on iPhone- and Android-related ends. Cool idea, yet one that may have a pretty small market for quite some time. The easier we make it on the user, the better, unless or initial audience is for hackers.

76 -- Tech Shop Management by Alexey Kuliashevich. I also am very interested in writing software like this, based on what I see no matter where it seems I look in the business world, from restaurant chains to schools and other small businesses. Everyone has crappy DB management software. I think security needs to be thought of, also, because of terrible hacker situations that have happened in major commercial chains across the world.

68 -- Bit Boutique by John Donahue. This would be very hard to do -- realistic physics for clothing has been a recent bane of animators, such as in Disney's Tangled. But it would be a great exercise.

67 -- Arduino System by Isaiah Griego. The idea sounds kind of like the Carnegie-Mellon Alice project, but for electrical engineering also instead of just software design. It would be really cool to design something with the boards.

63 -- Zombie Earth by Leif Guillermo. I don't see why this shouldn't run inside Google Earth itself. No use reinventing the wheel and wasting time writing your own methods to download content. All in all, a good idea that can make a lot of progress in 12 weeks.

55 -- Military Prep Tool by April Suknot. This would be a pretty neat tool, and could possibly be funded or sold to the military.

45 -- Machin Identifier by Donald Swartz. Would this be mainly a database-type program, or would we use algorithms to categorize pictures of stamps? That would be cool too.

41 -- Nth Sense by John Donahue. I'd be interested in making a specific application or two that utilizes the ideas here. The proposal was a little too... generic.

40 -- Voice Recognition / App Launcher For Ubuntu by Geoffrey Alexander. Developing a good library for recognizing speech is hard. The best would utilize a sophisticated neural net that learns dialects and phrases. Dragon Naturally Speaking is a phenomenal program that does it all, and it works on Ubuntu when using Wine. I don't know if it will open apps on Ubuntu, but you can program custom phrases to do stuff, so it might be hacked. So building this might not have the highest utility value, besides making life easier, perhaps, for Ubuntu users. It does look very doable, however.

38 -- Integrated Chat and Game Environment by Seth Morris. Shouldn't we use javascript instead of Java? This would be an interesting challenge. Trying to run multiple games in the same "environment" that includes everyone chatting might result in a lot of problems, especially when individual games crash. I think things would still need to be compartmentalized. Maybe making an app on Facebook would be the way to go -- take the example of Farmville but make an environment with games. Use facebook's chatting capabilities. Might be more successful, who knows? You could avoid a lot of the overhead of things that weren't considered by the proposal -- creating a webpage, marketing the program, having a large user base, etc.

37 -- Workbook Learning Application by V Steinhaus. Decent but there are tons of competitors that are high quality and also free. I personally love using the free flashcards databases and applications for my studying.

35 -- Tournament Management Software by Erich Doll. What about open source alternatives, like http://sourceforge.net/projects/opensourcetms/ ? I think it would be neat to push forward an initiative like that one and make it better. By the way, Java doesn't create "pleasant" visual experiences. I don't see any reason why this couldn't be implemented for iPhones or Droids, except for the lack of desire to learn a new platform / programming language. It might be more successful if it was available for the iPad!

25 -- Zombie Survivor game by MM. Might be alright, but wouldn't stretch us much.

23 -- Social Networking App by Amr Saad. My comments on this have been made elsewhere.

22 -- Traffic Control System by Ekaterina Davydenko. I didn't have a clear idea of what exactly the plan was to implement, hardware / software involved, or who we would present the system to.

20 -- PhAT software proposal by Ben Russell. It went from Physics simulation to talking about teaching physics. Is this a virtual classroom? The proposal goes from teaching students, to being an multi-purpose "blackboard" type tool where grades can be tracked, etc, finally to being about building a realistic 2d physics engine that will be plugged into some kind of virtual classroom / blackboard system. A waterfall method is being used to design the process for completing the project. The main components, even whittled down as they have been into 3 separate section, don't have the feel like they'll mesh well. A "2d" physics engine sounds interesting -- but why not just use an open source engine that is already out there, and modify the source to fit your needs? I can think of a few...

18 -- Restaurant Buzzer by Ryan Hammer. We might reach a larger audience if we had restaurants simply text people to know that their table is or will be ready. I don't see the value in the effort suggested.

15 -- Virtual Visual Chat Room by Torin Adamson. Think: Second Life (or an online The Sims). I see it was already noted in the project description. I don't see why it would be important for webmasters to all have their own chat client worlds integrated into their sites (maybe private businesses for their internal webs...). If you let users upload whatever they want to, you might find hackers very interested in testing the limits of the idea. Clutter! K. I. S. S. =). Given your background, it might be nice to implement part of an RPG engine instead.

13 -- Food Blogger Software by Katherine Nystrom. I don't see how the "Food Blogger" vs. ordinary cook needs a way different application than normal. It was only alluded to, but I couldn't find it explained. Thus, I see no niche to be filled, especially given the variety and quality of applications already out there.

11 -- DragonRise by Tony Hickerson. Unfortunately, I'm burnt out on making online games, etc.

10 -- iPhone Game App by Carlos Alvarez. A 2D networked multiplayer shooter. Good luck.

5 -- Collaboration Software by Erick Aldaz. I think he needs to use his hypothetical software to make things clearer in the proposal.

3 -- Class Match by Dustin Hart. Unfortunately, the needs of students can readily be met by 1) webct / blackboard programs already integrated with students' schedules, 2) Google groups, and 3) actually going to class, meeting and knowing people, and organizing study groups. I find it interesting that the proposal mentions a few times that it's not trying to replace facebook. I agree -- it's not only trying to replace facebook, but also webct, google docs, etc. The timeline and entire project are entirely infeasible.

0 -- Curtain Fire Game by Kevin Williamson. This kind of game is fun, and would be pretty easy to make. Too easy for this class (think 251), and given the lack of detail or confident backing this project has, I can't say I want to be near it.

Friday, February 11, 2011

Concept Paragraph(s)

I originally wanted to design a web service that connected local service sector businesses with consumers, allowing consumers to rate the businesses that they have interacted with. The idea was to have a space for businesses to advertise and name their price, motivated by a need to find affordable local tutors by parents and college students, but extendable to small businesses advertising their services. A major factor in the design was how to allow the site to earn money. It could take a percentage of business transactions, like eBay, but local businesses could simply meet with their clients and not post their transactions online. It could make money by requiring merchants to pay a premium to post a larger amount of data or to be listed first on search returns. This functionality could stagnate the growth of the site if not done well. It could make money through advertising clicks, which may be effective after becoming more popular.

A great aspect about such a web service is that the design can be made simple, it can fill a niche market that isn’t quite filled yet, and it can start local and expand as revenue is made, thus paying for itself early on. This service has a chance to enable the service-sector entrepreneur – and in today’s job climate, it really has a chance to take off.

I don’t want that idea owned by UNM.

Thus, my second idea is to design a sophisticated bot to play through parts of the World of Warcraft MMORPG. This bot will not be sold to users. Instead, it will be used by several private machines to harvest gold on multiple WoW accounts. Websites will be set up that allow WoW users to buy gold for the game at competitive prices. A lot of effort in the project will be spent on preventing WoW administrators from discovering the bots and banning accounts / email addresses, and some effort will be spent on figuring out what countries we can host servers / our LLC in that can avoid legal issues with Blizzard. Early phases of the project will be carried out using unofficial Blizzard servers to begin testing out Blizzard with more formidable bots. Time will also need to be spent on making the UI that controls the bot easy to configure in real time, and also in writing or finding tools to assemble and analyze the massive data flows we will be experiencing as we run our project.

The motivation behind my second idea is to simply spend idle CPUs at cents per hour performing rote tasks that game addicts are willing to spend dollars for.

Agile development

This is what I gathered from looking at Scrum and Extreme Programming and narrowing down the ideas for our class:

1) Have a “product backlog”, which is a master list (via Google docs or something) of every feature and project-related issue from the user-perspective (not expressed as technical tasks) atomized into stand-alone doable tasks (not interdependent)

2) Nominate a “product owner”, who dedicates themselves to the completion of the project, the elucidation of its requirements, and the only one able to prioritize the product backlog

3) Negotiate as a team (minus the product owner) on the “points” of the highest priority items on the backlog and let the product owner decide whether to change priorities of certain tasks

4) Decide as a team how long to “sprint” for each iteration – for a 10 week project, every 2 weeks is about right

5) Hold a sprint workshop, where the team decides how many points to aim for on the iteration (over iterations, figure out the “velocity” of the team – points completed per iteration), they discuss in detail every item on the backlog that is to be completed this iteration, forming “user stories” to describe the bare bones of all the features to implement this cycle

6) Figure out time constraints for the team for the sprint. Break down all features into sets of tasks to be performed, estimating the time each task will take to complete. Decide on what will constitute being “done” with this iteration, and try to state all tasks or sets of tasks as “deliverables”. Make sure each task takes a day or less to complete. Adjust the goals for this iteration based on time estimates, also including “stretch” tasks if the team delivers earlier than expected

7) Establish a place to work with the team, and a place where the incomplete goals for the sprint (user stories) can be written down, along with (in columns) a TODO task list, an “test cases in progress” list, a "code in progress" list, a “ready to be verified” list, and a “done” list.

8) Hold a 10 minute daily meeting at the same time, where each member briefly reports on what they have achieved since the last meeting, what they will achieve before the next meeting, and anything that may be holding up their progress. Also update an iteration “burndown” chart, which indicates the hours of work, as a team, needed to complete the sprint, compared to original estimates per diem.

9) Get members of the team to work on the same code together, whenever feasible, and when a team member finishes their tasks early, have them work on the tasks of another member. Everyone should be familiar with everyone’s code, ideally.

10) Review every sprint at the end, the burndown chart, the team velocity, discussing what went well, what could be done better, and what will be done differently next time. Continue process through every iteration.

Wednesday, February 9, 2011

Functional vs Nonfunctional project components

Functional

- branding

- user interface
- flow / layout of application
- aesthetic appeal

- timings
- transitions between portions of an application
- incremental content loading
- speed of content delivery

- content
- frequency of updating
- target audience
- access control

Nonfunctional

- documentation
- user
- programmer
- trademarks and copyrights
- legal notices

- code design
- standards
- platform support
- agile methodology
- style
- languages

- back-end support
- secure protocols
- databases
- concurrency issues

- testing and maintenance

Preliminary review of Amr Saad's project proposal

The design of the program seems to require universities to sign on-board, as well as a considerable amount of back-end work: databases in different locales, security protocols, and website design on top of any mobile applications.


The creation of a small games software suite is a great idea -- however, such suites do already exist and it is hard to see why combining it with a mobile chatting app would be of any benefit. It might be more feasible to integrate gaming apps directly into an already existent social application, such as facebook or twitter.


Thus the project seems to have too broad a scope and doesn't seem to have any way to make up the costs of the extra work required in building such a multi-featured app.


Jim Collins, in his book "Good to Great", explains the difference between what he calls the "hedgehog" approach versus the "fox" approach. A fox is wily, and knows many things, whereas a hedgehog knows one big thing. It turns out that companies tend to be successful most often when they focus on the one big thing they can do, that outcompetes everyone else. For this to be a viable idea, the project proposal needs to pare down the expected costs, and focus on the one big thing their app can do that will hold its own. Will it be a social app or a gaming app? In 12 weeks it can't be both.