Saturday, August 01, 2009

I'll vote 5 on "programming the voting game"

Hey you know how sometimes I don't ever do stuff? Sometimes I do stuff! Here's a stuff:
The Voting Game (yes you must sign in with a google account. sorry that's kind of annoying, but it's fun to play with the super-easy users API)
And
The Voting Game Source Code
The technology stack is like this: App Engine, Python, Django templates (I guess), and HTML forms. So if you know anything about App Engine or HTML forms, or simple web app programming at all I guess, I would REALLY REALLY appreciate your comments on the code. Really. I would like send you a nice thing or cook you dinner or something.

Also: people always stamp some kind of license on their code. I don't know from licenses. What's a good license for "I did this for fun, I don't ever want to make any money off it, please use it if it helps you at all (for fun or profit, whatever)"?

But even more importantly, always be happy to vote!

(for info on what the voting game is, ask beej, or read the README)

Disclaimers: yes I know the buttons should get grayed out if you've already voted on a thing. I don't know how to easily do this without passing dumb extra variables into the HTML template. It's not flashy. It's not really authenticated/access-controlled the right way (I could vote on your game and vice versa). There's no great way to tell if everyone's done voting. And if you don't know how the voting game works, it's kind of hard to figure out what's going on. Maybe I'll improve these things later. Don't hold your breath.

Side note: about App Engine. Things I like:
- the users API. I can use Google Accounts with like 3 lines of code!
- the datastore API. I can put data in a persistent layer by creating an object and calling put().
- I don't have to have a server to build a web app!
- the admin console and launcher are great
- 1-click deployment
- python seems pretty okay (you can use java too I guess)
- they have a host of features (monitoring, cron jobs, etc) that I haven't even touched yet

Things I don't like:
- how are you supposed to build a UI? HTML forms? HTML forms are kind of crap! For example, greying out the buttons if you've already voted on a thing is hard.
- if you get more than like 1000 things in a query, I guess you have to do some fancy paging or something. (but then, I guess if your query returns more than 1000 results, ur doing it wrong.)
- it makes web 1.0 apps easily, but web 2.0 apps difficultly. Hmm... I guess I could do it all with javascript maybe?
- python might not actually be pretty okay. I find it hard to organize my code. I guess I'm used to the java model; I shouldn't knock the python one until I actually try it.
- the datastore is actually rather tricky, when you have entities that have relationships to other entities. I don't know if I'm doing it right. I guess we're trying to get away from the SQL world and into the BigTable and friends world; it would be nice if anyone ever taught a class about new non-relational data models.

10 comments:

Brian said...

Haha you know how sometimes i don't ever do things?

I can't tell if I'm excited or sad - I had planned to make the voting game online myself :)

If you really don't care, use an MIT license. Then people can see the source, use it in their apps, and even sell commercial apps using it if they want to.

Worried about the UI? App engine let's you upload files right? What about SWFs? If so use Flex!

Hopefully I'll have some time to check out the code! Thanks for posting it.

Dan said...

Neat. I don't know from Flex. In my mind, it's made by Adobe, which means it's like in-a-Flash-box, which means the following things:

1. If you don't have flash (like you're on a phone), you can't use it
2. History doesn't work
3. Right-clicks don't work
4. Big downloads

Please correct me if I'm wrong. Like I said, I've never used it, so I probably have poor assumptions. And I tend to be biased in the Google way, which is to say, straight-up HTML-CSS-JS.

And sorry to steal your idea! I hate when people do that. We should have an online ideas board, so we know who's doing what, and could maybe collaborate in the future. That would be neat.

yincrash said...

yeah. you want a BSD style license. the apache license is one of those.

or if you want you can just declare it public domain i guess.

i would be pro project collaboration. that would be awesome.

yincrash said...

http://en.wikipedia.org/wiki/BSD_licenses

apache license is a bsd style license except that any derivative work must have a notice that it is using code that is licensed under the apache license. so it's sort of like a creative commons by-attribution license

yincrash said...

question, can you talk about what you do with your 20% time?

Dan said...

Answer: yes. Right now, nothing. I've got to get on that. (80% time easily becomes 100% time unless you fight back. you're encouraged to fight back, though.)

Sarah said...

There's also Creative Commons for licenses, it's a bit more widely known outside of software:

http://creativecommons.org/choose/

MIT/BSD licenses and the GPL are more commonly used in software, so you've got plenty of choices :)

Dan said...

Hmm. So one more question: if I want to let people use my source for whatever they want, without crediting me, then why do I need a license at all? Is the concern that someone else might take my code and then claim it's their own (and not public)?

yincrash said...

So, w/o licensing, by default, you have all rights reserved and it is under full copyright. that means, if someone did use your code for whatever you want, and you didn't give them a license (or release in public domain), you can still sue them for damages.

that will prevent people from using your code.

Dan said...

Aha. I guess that makes sense, and it's nice that the law works that way.

In case anyone's still curious, I went with the MIT license. Which is I guess a form of the BSD license, except people can say "our software includes Dan Tasse's Voting Game" for promotional reasons. (they can't with the BSD license. I'd be honored if they did! :)

The Creative Commons ones were a little more confusing, and I think you're right, Sarah, they look like they're generally less for code and more for media.

I mean, obviously it's not that important, in this case. Unless someone wanted to take the Voting Game and make it social! and viral! and web 2.0 and and and feed and push and cloud and AJAX and web geek web geek web geek