project discussion
aside
tron grades
While I think that the individual and team tron tourneys
were good learning experiences, both in coding, debugging,
and project management, I have had a hard time giving
letter grades to your work. Team effort in general make
individual grade assignments challenging, and the wide
range of your backgrounds and experience has made a
single rubric feel problematic.
So I decided to keep things simple. You'll find feedback
for the team, some comments on your individual work,
and the same grade for everyone who was on a team.
If the letter grade is important to you and you'd
like to make an argument for a different one,
do so in this week's assignment.
final projects
I will speak with you each individually about
your project for the second half of the semester.
The grading categories for the project look like this :
- planning : the idea itself, its proposal and resources
- presentation : explanations of your progress over the next month
- technical : your mastery of the technical bits needed to accomplish the project
- style : the clarity of your code and other materials, and whether it follows accepted conventions
- completeness : does it feel finished, and what bugs are there
- support : appropriate docs, tests, sample output, screenshots, etc
For next week, I'd like a proposal, including resources
(compilers, tutorials, etc) and a rough schedule.
Be ready to do a "here are my first steps" presentation next week.
Too thin a proposal.
I'm going to write a 2048 game in python.
I want instead something like this.
For my coding project I'm going to write a 2048 game in Python,
along with a graphical interface using Zelle's graphics
and with some sort of computer player.
The game itself can be see at
http://gabrielecirulli.github.io/2048/
along with its code at
https://github.com/gabrielecirulli/2048
There are currently many versions of this floating
around the internet, including hexagonal ones
http://baiqiang.github.io/2048-hexagon/
After each move, the tiles slide to one side
of the board, and a new random tile is added.
As seen in the addRandomTile function at
https://github.com/gabrielecirulli/2048/blob/master/js/game_manager.js
the odds are 9/10 of getting a "2" for a new
tile, and 1/10 of getting a "4". The place
where the new tile is placed is chosen
randomly from the empty spaces.
I will create a github repository to hold the code,
and use Python 2.7 as installed on csmarlboro.org.
My first version will simply implement the game mechanics,
with tests, and will work with standard input and input,
with the user typing for example "e <return>" to
slide all the tiles to the right (east).
With that's in place, the next step will be a graphical
version that builds on it, using Zelle's graphics module
http://mcsp.wartburg.edu/zelle/python/graphics/graphics/index.html
which we used in the Intro Python course last term.
Finally, I'll explore algorithms for a computer player.
There's a discussion of AI algorithms for this game at
https://news.ycombinator.com/item?id=7379821
I'll probably start with an expectimax algorithm as described at
http://en.wikipedia.org/wiki/Expectiminimax_tree
The schedule I have in mind is
Apr 8 matrix data representation and move API with tests
15 clickable user interface with graphics
22 some sort of computer player (we'll see)
29 testing and docs
May 6 class presentation
languages and technologies
A number of folks have expressed an interest in exploring
a new language as part of their project. That's fine,
but as I have said, I want you to choose a specific task
to accomplish in that language, not just "learn language X".
If you can't think of one, maybe you could try
- a game (e.g. checkers, or triangle solitaire, or sudoku)
- generating an image (i.e. a fractal)
- a word problem (i.e. crypto or anagrams or something)
- a number of smaller exercises, i.e. projecteuler.net
- searching for Matt Ollis' latin squares
The languages that folks have talked about include
- Python
- C
- JavaScript (i.e. internet browser)
- Haskell (functional)
- Java (android development)
- SQL (database; not general purpose coding language)
- Go (Jacob's plan work)
- Ruby on Rails (back-end web development)
... which will have nearly everyone heading in different directions.
That means you all need to be exceptionally clear when sharing
your work weekly and describing what is and isn't working
with people who aren't familiar with the language and/or
development environment you're using.
I would really like to see all projects managed under something
like github system, so that I (and others) can see the schedule
of changes and view the code from a browser. If you can find
a way to simulate or deploy in the cloud too, that would
be excellent ... though that will depend on your specifics.
Depending on the time remaining today, I would like to start
to look at something along the lines of a "hello world"
program - perhaps the pythagorean triplet
from
http://projecteuler.net/problem=9 - for each
of the languages / environments we're talking about,
or at least the ones that we can get up and running
on csmarlboro.
Googling will find examples of this problem
in many of the languages we're discussing.
On cs.marlboro.edu :
$ gcc foo.c -o foo ; ./foo # compile & run C code
$ ghc foo.hs -o foo ; ./foo # compile & run Haskell code
$ python foo.py # compile & run Python
$ node foo.js # (command line) compile & run JavaScript
$ javac Foo.java ; java Foo # Java (assuming Foo.java contains "class Foo")
$ go run foo.go # Go (but typically has various expected folders)
In class we set up a github repository
and worked euler 9 in python and C :
Random notes: