Found this list on GitHub: https://github.com/plt/racket/wiki/Intro-Projects
Intro Projects
This page lists Racket projects which are feasible for people who don’t have a lot of experience with the Racket code base. They’re mostly small, self contained, and would be extremely useful. Some involve writing a new library that would be useful to lots of other people, and some help fix or clean up some aspect of the existing Racket code base.
The best place to ask for help with any of these is on the users mailing list.
Recreational Programming
These are intended to be a collection of fun topics to explore, intended as exercises or mini-projects, but also interesting in their own right. If you implement one, then leave a link: different solutions can lead to comparisons of style and constructive suggestions. Finally, add more ideas …
- Graphics
- Draw some fractals: Mandelbrot set; Julia set; L-systems; Sierpinski gasket; Koch snowflake; space-filling curves
- Make a random maze; animate the drawing
- Tile a plane: rectangles – grid or herringbone; triangles; hexagons; Penrose tilings; quilt designs
- Animate a classic looking clock
- Animate a word clock
- Wordplay
- Find anagrams
- Find palindromes
- Make a scrabble or crossword helper
- Scan a text for haikus
- Puzzles
- zebra puzzle
- sudoku solver
- sudoku generator
- Calendars
- Day of the week of any given date
- When is Easter (and other holidays) in a given year?
- Cryptography
- Encrypt / decrypt simple ciphers and codes
- rot13
- Crack simple ciphers
- Programming tools
- Reimplement some standard library operations
- Reimplement some of the standard Unix tools
- Classical mechanics
- Animate a bouncing ball, then balls
- Simulate planets in orbit
- Pendulum
- Newton’s cradle
Small Projects
These are self-contained projects. Just create a new github repository, and start hacking. When you have something that works, release it on PLaneT.
- Implement a Rosetta code task: http://rosettacode.org/wiki/Reports:Tasks_not_implemented_in_Racket
- You could also re-implement or improve an existing Racket solution
- Math: Try some project Euler exercises: http://projecteuler.net
- Implement mini versions of classical programs (can be used as extended examples on the web site):
- Notepad using racket/gui
- Paint
- Calculator
- Data structures: hash array mapped trie, 2-3 finger trees, other purely functional data structures (some already implemented here).
- Code for doing OAuth
- Now available here
- Also available as part of ryanc’s webapi PLaneT package.
- Write bindings for libgit
- Work started here
- Write bindings to Authorize.Net
- Write libraries to interact with Wii Remotes
- Technical details on the Wiimote
- wiiuse has code for the Wiimote’s protocol, as well as Win/Linux bluetooth code
- Mac OSX Bluetooth Dev info
- Write libraries to interact with game controllers
- Write bindings to various Google APIs
- Authentication would be useful
- Other interesting things: docs (esp. around spreadsheets), maps
- Write bindings to the Github API
- Write bindings to the Twitter APIs
- Write bindings to the Facebook APIs
- Write bindings to Amazon AWS.
- Eric Hanchrow has some pitiful first steps which might be inspirational.
- Staying in the pitiful vein, a typed/racket effort by Ray Racine which is actively being developed.
- Greg Hendershott has untyped Racket code for the S3, SDB, SES, SNS, SQS, and CloudWatch services: PLaneT package, Github.
- Write XMPP bindings
- A starting point can be found here
- Bindings for a text to speech engine
- IRC log highlighter
- IRC client library (can be based on the gabot code (contact Eli), which is better for a library than rudybot)
- Bindings for Apple’s Core-* Libraries
- Write a better s-exp diff tool
- Write bindings to gobject introspection
- Use the Racket examples on Rosetta Code and the snippets on the http://racket-lang.org home page to make
demo.racket-lang.org
that show cases programs and snippets written in Racket. There’s a start of explanations of the home page snippets here: https://github.com/samth/racket-examples
Larger Projects
For the more ambitious Racketeer …
- Make a web page (demo.racket-lang ?) that contains Racket snippets. Use the programs from http://rosettacode.org/wiki/Category:Racket to get started.
- Write a markdown parser (important: lots of tests; support at least popular variants that are used by stackoverflow and github)
- Norman Gray has a WikiCreole parser on PLaneT. It’s reasonably clear how to generalise that to cope with markdown, and Norman is working on this as a background project.
- Also available here.
- Write a YAML parser
- Now available on PLaneT.
- Write a gitolite replacement in Racket (contact Eli)
#lang scsh
— or better: write just a library for similar bindings (macros & functions), and make it into a language that has shell-like syntax- Write a blogging framework
- Write a Common Lisp compatibility layer (same functionality, but not all the core language features that would make this extremely difficult; for example: keep immutable pairs)
- Write a Clojure compatibility layer
- Started on one here but it needs a lot more work.
- Write bindings to SDL (note that there are Allegro bindings on planet).
- Work started here
- Integrate the existing parser-tools SRE with Racket regexps.
- Write some code metrics tools (number of functions, number of lines, etc) and integrate them with DrRacket’s module browser.
- Write image filters example
Related articles
- Understanding GitHub: A Journey For Beginners, Part 1 (readwrite.com)