Friday, May 13, 2011

The End

This is actually my 51st post, but only my 48th published one. The Angels have caught a liking for our project. Very cool -- and I'm very tired! Will do something more -- tomorrow.

Sunday, May 8, 2011

update

We are finally moved into our new house. It's been a crazy, distracting week with all the stuff to do over here.

So, since I last did anything for Farmville, there is a ridiculous 5 minute buffer rather than a smart sleep, and we now update every 5 minutes, dictionaries are being abused like crazy, and random errors are creeping up all over the place. On the other hand, the GUI LOOKS nice...

Oy, the more I look, the more errors there are.

Ugh, this will be a long week. Today I just reviewed all the recent changes, and looked up a bunch of legal stuff that we will likely be adding to an addendum slide. I still have yet to complete my self evaluation, but I think I get some slack for recent personal events.

Friday, May 6, 2011

Friday presentations

H.A.S.H. Home Automation Systems

The demo was nice -- is it a push notification system, or do you have to be logged in?

Nice market potentials!

Monday, May 2, 2011

Presentations Monday

First presenters: Task Poets

-asking for $500k
- clients will be ergonomics departments across the world, costing $100 per user
- competition is gnome voice control, and built in control apps with Windows 7 and Apple.
- they want their product certified by US Ergonomics, and they want to work with insurance companies to reduce cost for companies using their product
- potential futures: lip reading, keyboard

- nice demo using bluetooth speaker!

How big is the workers compensation business, esp. related to hand repetitive motion injuries? Quote indicates damage to other places than hands?

Do you plan on copyrighting your software, and do you have to buy licenses for any part of it?

What about dragon speakeasy?

Second presenters: Class Match

presenter is nervous, and no one up front looks remotely happy or excited.

- trying to raise $440,000
- customers will be the university, or people like SunGard
- competition includes WebCT, Google Groups, and Facebook
- barriers include acceptance by both university and students

what's the difference between a MySQL expert and a database expert?

Isn't it an oxymoron to say "accepted by the students AND the university"?

May deliverables

  • Project and Docs (Delivered as a team)
    1. Working demonstration of project.
    2. User documentation.
    3. Developer documentation.
    4. Requirements/User Stories/Use Cases/Tasks, finished and remaing (future features too).
    5. A polished 10min presentation for NM Angels (given on May 13).
    6. Evaluation (see below)
  • Self Evaluation (Delivered by individuals via email to professor)
    • Design (Principles & Process, Concept to Completion)
    • Testing (Unit and System)
    • Writing (consider your proposal, first self eval, and contributions to project docs)
    • Speaking (consider project pitch, participation in meetings, presentation)
    • Professional Development (Self directed? Iteration? Responsible? Resourceful? Dynamic?)
    • Skill (Programing, Tools and APIs, Abstract/Reusable code)
    • Contributions and Achievements (obviously!!)
  • Group Evaluation (Include an evaluation of the group in your Self Eval, AND prepare a Group Eval as a team)
    • Attendance (of individuals, and ability to coordinate as a team)
    • Division of Labor (roles, contributions, quality, timelyness)
    • Meeting performance (preperation, quality, topicality, timely, etc..)
    • Professionalisim (of individuals and team)
    • Communication (within the team, with the "hats", with the world)
    • Design, Development, Testing, and Tracking of project.
  • Based on the deliverables above, what grade do you deserve?

compact, robust

My work of late has been all about reducing, reducing, reducing our code base to make it more manageable. A couple hundred lines have been cut and more are to come.

It's been nice having a language that lets us map, filter, and reduce, and also has nice partial function application, keyword unpacking, and list unpacking capabilities.

Wednesday, April 27, 2011

huge farms and parser problems

For the most part, my work consisted of deconstructing what was going on with super large farms, and their breaking our program. Also, in the process of fixing that, I also figured out why the xml harvester wasn't working on Windows, and made it more robust.

Sunday, April 24, 2011

legal stuff

I added a bunch of notes to our wiki on legal cases and precedent, and also made a few minor changes to the program.

updated notes, windows executable

So the installer stuff for Windows is tough with Python 2.6 and above because they completely overhauled the way they deal will DLLs. I will need to figure out how to fix the pyinstaller, or find a different way to package our program for user testing.

I also loaded and merged all my notes with the rest from yesterday's meeting, and sent Joe a version of our browser loader so he can see if he can get flash working with Qt.

Thursday, April 21, 2011

emitting signals

I hooked the ability to emit signals for QtObject capture into our code by simply providing the method emit() in an object that wants to be able to emit a signal, and then overriding emit() with an appropriate signal from the object that wants to capture the signal. Nothing like injecting your own code into another object's code during runtime!

I also have been working on parsing more generically.

Tuesday, April 19, 2011

Using cookies like a browser; browsing for team profiles

I got the cookies working like they're supposed to, to cut down on start up time, and I put together the agenda for our class meeting with the NM Angels.

Sunday, April 17, 2011

web scraping and farm fixes

So I looked more into web scraping, and found PySide as a result of it. Trying to figure out how to persist our cookies and pass them between the urllib and the QtWebkit.

Not too much progress...

I believe I fixed the problem with planting and harvesting that recently "cropped" up.

Saturday, April 16, 2011

threading and not being kicked out

today I added basic threading to our GUI -- we can actually switch to the QThread class and be able to pass messages in the signal / slot format that Qt uses. So it was a first pass. I also worked a little on refactoring and looked into the bug only my system has had so far -- the forcibly removed error.

Friday, April 15, 2011

PtQt4 in action!

I got PyQt4 working for Windows. It was a nightmare. That really took all of my allotted time for the day.

Thursday, April 14, 2011

little progress

So I hooked in my login saving information to the gui so I wouldn't have to re-enter it every time. I also helped figure out what went wrong in with Zynga's recent changes, and I tried running Justin's gui but found out that I don't have qmake in my path and so am downloading the full version of Qt4 to see if that will fix things. Ho-hum..

Wednesday, April 13, 2011

need sleep!

Unlike the last post (keep awake!), I really just need sleep. Today I got caught up in non-school business and so wasn't able to commit to the full 2 hours. I did get the PyQt stuff going on my system, though, so I should be able to kick it into gear tomorrow. I'm off to bed..

Tuesday, April 12, 2011

Keep awake!

I wrote a script to keep a mac awake, and also a script to keep a Windows machine awake. Surprisingly, the way to do so for each machine was hard to find... and ultimately unsatisfying for the mac.

I also used a shelver for storing persistent user data in the app.

Monday, April 11, 2011

Assignment: Test First

We need to spend a week where we test first, rather than code first, and make sure we can do it.

Saturday, April 9, 2011

work on Saturday -- security verification

I re-wrote the PHP that returned the verification scheme so it has the hashes and values as originally outlined. Then I fixed the Python verifier to use the scheme to verify an email address.

Thursday, April 7, 2011

working with flash and python

So I've found a way to embed flash movies in python. Yay.

The problem is it won't work with games. I will look here tomorrow to see if they have a way of doing it.

**UPDATE**
I checked out those links and all were broken. *SIGH*

Technology Business Plan Competition

Amr let me know about the TBPC which will be held tomorrow. We are too late to present our own ideas, but we can go there and learn from the current presenters and judges.

My business contact let me know that he was able to go to the Self-Employment Fair the Tuesday before last, when my car had broken down. He was able to talk with the President of the New Mexico Angels, John Chavez, for about half an hour one-on-one. Tomorrow he will be at the TBP Competition, so hopefully I can meet him then.

Monday, March 28, 2011

Requirements for our code

Completeness, correctness, unambiguousness, reliability, consistency, and traceability.

Any module should ideally fit in a single page.

If you're copying and pasting code, it's wrong.

How well do we understand system boundaries?

Aesthetics.

Reusable components in our code.

Thursday, March 24, 2011

literate programming and the rational unified process

The wikipedia article on literate programming is very well laid out and was a good read. There are a lot of literate programming "languages" out there! I wonder if there is any style that generates test cases as well as code. It may be good and all to interweave thoughts and comments with the code in a natural-language type flow, but I think it would be hard to debug this, given the amount of text you have to search through, and all of the chunks of the same piece of code being scattered about. Maybe you compile it into source code, and then debug it, and then figure out the pieces you debugged and inject them into the original? Sounds a little too hard...

I would like literate programming if we designed a language that could take natural language and produce code, resolving ambiguities in the natural language by waiting until the last moment to evaluate and dynamically type any portion of the program, interpreting the language by the surrounding state at the time of execution. If it still can't be resolved, throw an error and let the user revise their language, or be more specific, or whatever.

Of what is out there right now, I think noweb would be good to learn.

On to RUP:

Developed by IBM, this process is very detailed, and seems interesting to learn. A summary of it is very interesting (about 20 pages). It turns out that it is all about using UML as a way to communicate design, requirements and architectures across teams. A bunch of tools are employed to keep the models up to date and to support bookkeeping.

I definitely see how important an easy tool for bookkeeping would be!

And the IBM 6 best practices for a software development team are:

1) Develop software iteratively -- agile methods I think work just as well here
2) Manage requirements -- they emphasize use cases and scenarios, as in agile!
3) Use component-based architectures -- I think Python is a great example of this in practice; developers of Python have made dozens upon dozens of robust and useful components for the language
4) Visually model software -- this is where UML comes into play. I think we need to use this more.
5) Verify software quality -- Here I think agile is better - test first!
6) Control changes to software -- this is what good version control software is all about, right?

Here's a visual of how they envision the "process":




















I think our team could do better with a vision document and a bigger overall picture of what we want to create.

The rest of the doc goes into details about this process.

Wednesday, March 23, 2011

class monday

I've been watching the video from Monday's class. My team has done a great job responding to what Joe brought up, based on our conversations in our meeting today.

I am very impressed by what everyone has accomplished, and it makes me committed to work harder this next week to output as much as everyone else is.

Tuesday, March 22, 2011

long, empty week

Somehow I accomplished nothing over spring break.

Well, I got my job back. Took a drug test. Read a computer science book. Accepted a counteroffer from a bank. Wrote a script for the Independent Sets problem. Wrote some variations on a self-assembler and missile in the Linden language. Spent some time on the next kaggle competition.

What has been delaying me here? Poor time management, I guess. Not focusing on this as my priority. I catch up on what my team is doing, and then I run out of energy. Often not having access to the internet -- I fixed that problem yesterday. I will renew my focus tomorrow.

Thursday, March 10, 2011

Asana collaboration tool

http://asana.com/2011/02/asana-demo-vision-talk/

this talk is about a cool new tool. Their goal is to have a product that is as fast as notepad, that updates immediately across the network, that holds all "truth" about a project with multiple ways of distilling and viewing the data, and that keeps all conversations about the project attached to the actual tasks in the project.

I like how it is very notepad-like in updating and changing things. Every task has a chat attached to it, where people can "follow" the task and be emailed when a note about it updates. Responding to the email also updates the task chat, like in google groups. It is easy to move assignments around to people. When a task is finished, all the followers are notified.

Very social-appified, which makes sense because they came from Google then Facebook.

This tool could really help us with our team meetings and coordination, much better than Google sites. It looks like they also built in ways to collaborate your software and components with other developers, so you can use your social networking to get tools, information and help you need to progress as a company. Their goal is to have "business to business virality".

They also developed an in-house web app programming language to speed the design and deployment of that kind of software, called "lunascript".


I applied to see if our team can beta-test their product.

Wednesday, March 9, 2011

high-level stuff we need figured out

-- Design patterns

-- Coding standards

-- Commit patterns and how to stick to our process

Tuesday, March 8, 2011

Evaluation of Ekaterina Davydenko's proposal

Dynamic Traffic Control System

Total evaluation criteria score: 25 / 40

Actually, not bad compared to a lot of proposals. It only misses what many of the other ones also miss.

Part I

As far as I can understand it, the Dynamic Traffic Control System idea consists of building large overhanging and side-of-the-road electronic signs that can be either manually controlled or automatically adjust to road conditions. It wasn't clear in the proposal how much of the system would require continual updating from human personnel, and how much would be able to run on its own.

The system would also be connected to all the traffic lights in a city, have a centralized database (what for, I don't know), and be manipulable by law enforcement, emergency medical vehicles, DOT people, and firefighters.

Part II

One thing I don't get is why this system would be centralized. A decentralized, robust system seems to make a lot more sense to me. Rather than a centralized database, distributed servers that control their own portion of the roads and communicate with each other and whoever logs into them would make more sense.

Syntax score: 5/5

The structure of the proposal is professional, and the spelling and grammar are accurate and appropriate. The writing is, for the most part, clear and sufficiently detailed. It could cover more about how personnel will be trained to use the system and the interfaces they would have to learn and use. The story is consistent and well-structured.

Plausibility: 2/5

The project cannot be completed in 12 weeks. As it stands, full implementation, testing with agent-based models, and deployment (along with the training of relevant personnel) would take a long time. Furthermore, a centralized system for managing traffic conditions would be vulnerable to exploitation and reliability issues. Also, what happens when different bureaus decide to give opposing directions for the same chunk of road? Whose decision becomes final? Would a city really consent to such a project? It will need a lot more explanation and convincing data on other such systems.

If a decentralized system were chosen instead, how would it do better than other systems already in place, in terms of manageability, cost, and projected savings in time and money for consumers, and lives for medical personnel (and when it comes to traffic accidents, etc).

Support: 2/5

The arguments for the need for such a system are sound, but I find no convincing evidence that yet another costly city road project like this system would really benefit the city. For instance, traffic lights are very complicated to perfect, and the systems already in place have been tested and tweaked to be about as good as they can get. They also are remotely configurable and change with the level of traffic. The new system would likely not do anything to make them any better.

Novelty: 2/5

The idea of managing traffic conditions is not new. The approach offered really doesn't sound worthwhile. Just doing a quick search brought up, for instance, http://www.cttraffic.com/pages/CISV.html, which details the complex devices already employed in traffic control. They use fiber optics, video relays, remote monitors, exclusive relay lines and control software already. All this is very expensive and requires approval and control from various state authorities.

There is a book that covers many details of traffic control that is published by the Department of Transportation: http://ops.fhwa.dot.gov/publications/fhwahop06006/index.htm. It covers controllers, sensors, managing urban and suburban roads, freeways, and integrated systems. It covers communication and information systems, and design, implementation, and management of Traffic Control Systems.

For a history of traffic light management, see http://ops.fhwa.dot.gov/publications/fhwahop06006/chapter_1.htm#1-5 and sections five and six. I also think it would be useful to review Figure 1-3 from that page and try to see how the proposed system would fit in it. Table 1-2 from that page really gives a sense of the broad scope of details that need to be covered within traffic control. It gives the sense that the proposal largely underestimates the scope and difficulty of managing traffic, and overestimates the impact that installing more traffic signs around a city or freeway will have. The ability to post warnings about delays, etc, also already exists in many big cities.

I found some interesting research on decentralized traffic control: http://www.physorg.com/news114355988.html. It actually doesn't seem that useful when you really look at it. Not without even more research and simulation.

Stakeholder Identification: 4/5

"Private companies" are mentioned, but it sounds like the whole idea is intended for the DOT. This is a project that is meant, it sounds like, to be funded by tax payers.

Scope: 5/5

It's pretty clear what was intended. I liked the use of a diagram to show how components were to interconnect.

Profit/Impact: 4/5

The amount to be made from the DOT or other groups was never stated, but the impact on drivers and law enforcement, etc, was made quite clear. If this was to be a privately funded company, selling their services to state and federal governments, there would be a greater need for projected profits. As it stands, the true costs of all the hardware and construction for implementing such a system were never really covered, either. This would, therefore, make a great government project =).

Security/Risk: 1/5

The project proposal didn't really define any risks beyond that a "major concern will be the dependability and ... integration ... requirements of the system".

Some of the major risks I could think of off-hand were as follows:

1) There is danger of traffic warnings being ignored / no mention of social engineering to get the job done. Thus, a lane may be attempted to be opened up through signs flashing to keep it free for emergency vehicles. During rush hour on a busy freeway, without physical barriers, how many people would disregard such a rule? Enough to slow down cops anyway? The same applies for medical personnel. In the event that no one sees any immediate reason to follow a mandate, many likely will break the mandate. It also encourages disaffection with the system, when it tells people to do something but doesn't offer immediate positive results.

2) The securing of the systems is never presented, nor the ability to deal with conflicting orders from different organizations. The way to handle events like server failure isn't mentioned, either.

3) Sensing systems and their management are not mentioned. "Database" doesn't say enough, if that was meant to incorporate data from video feeds, scanners, and human input.

Monday, March 7, 2011

Self-Evaluation

some guides:
http://www.wikihow.com/Write-a-Self-Evaluation
http://www.evergreen.edu/washcenter/resources/acl/e3.html


my self eval:

This is a 3 credit hour class, and I have been treating it like a 6 credit hour class. I believe I have been going above and beyond what is expected of me by the professor. Part of my doing this has been because of my missing the first three weeks of class. The other part has been because I continually strive to perform at the top of my abilities. Sometime, I strive too hard, but I feel the need to do what it takes not only to get an A or A+, but also to learn the most that I can to prepare me for future things.

Examples of efforts I have made include catching up on all the class assignments from the first three weeks. I reviewed one proposal completely, one partially, and I read all 29 proposals thoroughly, giving a brief review and rating. I managed to turn in my proposal in time to give a 2 minute presentation. I also had my proposal reviewed, and edited my proposal in response.

I also have actively maintained a blog, researching and taking my time to output valuable comments that I can later use. Of the 4 1/2 weeks I have actually been in this class, I have given over 20 blog posts, 17 of which are very lengthy, researched, and detailed. I have thus exceeded expectations for blog posts per week that I've had this class, and have slowly but surely been catching up on the 9 posts for the weeks I missed. I have eliminated fluff from most of my posts, thus not always blogging on the topic the teacher suggested if my research in that area returned sparse results, and I had a replacement topic for the day.

I have hustled to learn techniques for success in programming on a team and to think of a viable project for our time frame and that would actually have economic benefits. I also learned voting techniques and Roberts' Rules. I've learned new web programming and interaction techniques, and shared them actively with my team. I have gone the extra mile in working with people from the school of management, and learned how to start a company and seek funding for our team. I am working on getting us connected with several different venture capitalists, including the Angels. I will be trying to see if a representative will come and speak to our class.

I've expected to learn from this class, in broad sense, everything that it takes to run my own startup successfully. I figure the best way to learn is to actually do it, and this class has been the perfect springboard. My expectations have included the objectives from the class webpage: to "gain experience in project development begin[n]ing with concept proposal, specification, implementation, and maint[e]nance in a team setting".

I have learned a tremendous amount each week since I've been in the class, both through my own research, and through participation in class and on my team. I have sought to share what I learn with others so we can all learn together.

As a leader, I have sought not only to be productive and make my team productive, but I have sought to balance the leadership roles and give everyone the chance to learn and grow. I try to follow Dale Carnegie's principles in How To Win Friends and Influence People, though I've stumbled a bit there. I do review my behavior and seek to change for the better.

My greatest weaknesses include my tendency to take too much work upon myself, and get burned-out thereby, not relying enough on my team members. They also include my tendency to stray from established schedules, to not stay on task, and to not follow up with others on my team or ask for help enough. I also am a huge procrastinator, though not always on purpose. It's more of a time-management thing, where I budget too little time for some tasks, and take too long in others, and then end up rushing and behind in a lot of things. I do evaluate myself on these things and seek to improve.


Self-ranking based on above discussion (with somewhat arbitrarily chosen metrics):

Participation (in class and in team): 5 / 5
Learning: 5 / 5
Self-direction (initiative, motivation): 5 / 5
Follow-through with responsibilities: 3 / 5
Completion of Assignments: 4 / 5
Progress towards course objectives: 5 / 5


Thus, my total self-evaluated ranking, giving the above criteria equal weight, would be about a 27/30. This equates to a 90%, which based on what I've observed in our class, should put me in the top 5 students, with a well-deserved A.

points in my favor:

- I created the Farmville bot idea
- I fought hard to get my idea to the top five and keep it there
- I researched Scrum and taught it to my team
- I have dedicated many hours to solving the "hard" details to get our project to work
- I have put our team in touch with the Anderson School of Management, and through our contact, the Angels investment group and other investors
- I have maintained a focus on what it will take to actually build a successful company from scratch, and am committed to seeing our idea through to the finish
- I maintain focused on making our entire team focused, motivated, and efficient at what we are undertaking
- Our team has been among the most "hit-the-ground-running" types
- We focus every week on improving ourselves and improving our process and communication
- I have been learning a ton about managing a successful team, and also I have been learning a ton about internet protocols and web applications

class goals:

- we have the goal to learn what it takes to be successful in the "real world"
- our goal is to learn to handle all the facets of a real software development cycle
- we have to learn how to work efficiently on a team and with a strict time budget

my weaknesses:

- taking too much work on myself rather than relying on teammates
- not maintaining my blog with everything going on in class, preferring instead to only write down what I think I personally need to remember or keep
- I don't follow up with people often enough, and don't follow a schedule well either

startup success rates

Here is a good, recent article about startups.

There is actually a 60% success rate by their numbers, and they suggest several factors for success:

2-3 person teams are better than large teams. I believe Jim Collins is one of the best sources for how to be successful also. A large part of success has to do with the team and leadership. A visionary leader is more important for a startup than a "committee". Being a young team gives us an edge. We need to be fast and decisive.

The success rate seems WAY inflated to me. Here they mention that the success rate is closer to 18% for first-timers, and 20% for people who have failed before and are trying again. People who have been successful typically see a 30% chance for success on their next venture. These numbers feel a lot more accurate -- and their data is supported by this paper, which also mentions that being funded by experienced venture capitalists gives you higher chances of success - and more initial funding.

Lastly and probably the best of all this besides the Jim Collins books, is this Paul Graham article on startups, and why you should do them. One thing he points out that I think is important is to make sure to have a cofounder in what you do. Also, most of the time the idea the startup was founded for changes before the product is finished. Another great reason for Agile teams!

Sunday, March 6, 2011

online service horrors... and potential

So hosting complicated programs online causes much pain.

This discussion talks about Zynga adding up to 1000 servers (including the Amazon cloud servers) a week to keep up with their huge host of customers. What with over 200 million customers per month, they needing a server for every couple hundred people, they now have tens of thousands of servers running their games. Running through a petabyte of throughput a day. Insane. 7% of their users, on average, are online playing at any time. Even cutting that number in half so it's 7% of the monthly users online at any time during 12 hours of every day, that means that over 5 billion hours get spent on these games every month.

What could we accomplish with 5 billion hours of free time? Hmm...

This is a game company site outlining what they themselves did, combining Amazon's cloud with their own servers, running Ruby on Rails and Javascript combined with Flash and their own custom "GAML" engine to get things going.

The site offered a lot of other great details. For instance, through micropayments, a well-performing online game world company can expect to make between $1-$2 (amortized) per user per month (ARPU). From here you can see that estimates are that Zynga makes the most from their Poker game at $2 ARPU, whereas farmville only pulls in $0.50 ARPU. Their war games, surprisingly, are pulling in about $1.50 ARPU per month, but from the first link's discussion, it probably costs them a ton to move all the data around in those ones.

The original discussion from hacker news also mentions that the average server should be able to handle about 500 requests per second on average and 4000 per second during peak times. These are smaller requests, like what we'd be doing with a bot that is verifying itself. If our bots check in every 15 minutes, that means we could easily manage a hundred thousand, or even a couple hundred thousand bots with a single server.

This is a cool article about how Zynga uses Amazon's EC2, with an Apache PHP front end, memcached system for active user play, and mySQL for their databases. Here is a blurb about memcached and how the Black Hat community pointed out a fatal error many companies were making, exposing all that data to anyone who cared to connect and listen. Zynga probably has it patched by now. Here is where you can find an article and tools for messing around with unsecured memcaches.

Friday, March 4, 2011

notes from class

critical path = the stuff that needs to be done, and in order, for project to complete

self evals due before next Friday

Thursday, March 3, 2011

Long day

So today I had a meeting with our business contact. He talked about forming an S corporation rather than an LLC. With that kind of set up, we would be taxed like a business partnership, but if anything happened the company would be liable for problems rather than us programmers. Also, we could set up hedge funds and authorized shares for our company.

We also discussed funding that is available to us, so that we programmers could get paid and receive funding for our needs over the summer -- housing, travel, phones, food, family expenses, and bonus incentives among the categories we would get funding for.

We also discussed other projects "in the works" that I am not privileged to share.

We also had our second pre-sprint meeting, which was good.

We are modifying our format, which makes us not entirely scrum-tastic. For instance, we are sprinting in 1-week intervals. That is more eXtreme Programming-like. However, unlike XP, we are not changing our sprint todo list until the next sprint, and we also don't necessarily tackle highest priority items on the product backlog.

This article is pretty insightful on the contrast between scrum and XP. They make some good points. I definitely think that the scrum was a good way to go for our team. We are making progress and learning how to be more efficient as we go.

I also like this. It says that the best project for agile methodologies are ones where there is urgency in the work, and the tasks are new and complex for the team. I think our project exactly fits that description.

The highlights of scrum include having self-organizing teams, and a strong focus on the product that the user sees.

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.