Open-source projects for beginning Haskell students?

Hi everyone, I am currently teaching a half-credit introductory Haskell class for undergraduates. This is the second time I've taught it. The last time, for their final project I gave them the option of contributing to an open-source project; a couple groups took me up on it and I think it ended up being a modest success. So I'd like to do it again this time around, and am looking for particular projects I can suggest to them. Do you have an open-source project with a few well-specified tasks that a relative beginner (see below) could reasonably make a contribution towards in the space of about four weeks? I'm aware that most tasks don't fit that profile, but even complex projects usually have a few "simple-ish" tasks that haven't yet been done just because "no one has gotten around to it yet". If you have any such projects, I'd love to hear about it! Here are a few more details: * The students will be working on the projects from approximately the end of this month through the end of April. * By "relative beginner" I mean someone familiar with the material listed here: http://www.cis.upenn.edu/~cis194/lectures.html and just trying to come to terms with Applicative and Monad. They definitely do not know much if anything about optimization/profiling, GADTs, the mtl, or Haskell-programming-in-the-large. (Although part of the point of the project is to teach them a bit about programming-in-the-(medium/large)). * What I would hope from you is a willingness to exchange email and/or chat with the student(s) over the course of the project, to give them a bit of guidance/mentoring. I am certainly willing to help on that front, but of course I probably don't know much about your particular project. thanks! -Brent

On 16 March 2012 21:28, Brent Yorgey
So I'd like to do it again this time around, and am looking for particular projects I can suggest to them. Do you have an open-source project with a few well-specified tasks that a relative beginner (see below) could reasonably make a contribution towards in the space of about four weeks? I'm aware that most tasks don't fit that profile, but even complex projects usually have a few "simple-ish" tasks that haven't yet been done just because "no one has gotten around to it yet".
I have a bunch of small Haskell projects and I would enjoy helping someone contribute to them. The problem would be finding projects that are actually interesting to a student. The only ones I can think of, that are trivial to work on, are: * https://github.com/chrisdone/freenect Requires a Kinect device (your students have X-Box right?). This is my Kinect interface. Who doesn't love devices with video and depth perception? Currently it only supports depth perception, as that's all I wanted from it, but one could fairly straight-forwardly add video support. This would require some mentoring and helping along as it requires not only Haskell knowledge, but it needs some C code and using the FFI. It took me a weekend to figure out and write the depth perception part, with help a newbie could tackle video within four weeks. Alternatively -- there's also the opportunity to write some simple motion detection stuff with the existing code. * https://github.com/chrisdone/stepeval This is benmachine's project to evaluate Haskell in steps. It's currently on hpaste.org, but it's rather incomplete. Fleshing this out to support more syntax would be nice. Not sure if this is actually interesting to anyone else. But it's a good way to solidify your understanding of Haskell's evaluation model and syntax, maybe. * https://github.com/chrisdone/css Making this very trivial CSS library well-typed could be easy and useful. * https://github.com/chrisdone/wordnik A little interface to the Wordnik online dictionary service. I kinda started this but didn't finish it. Once done though we can send it to Wordnik and they'll for sure stick it on their libraries page. * https://github.com/chrisdone/amelie (hpaste.org) The only one that is relevant to the Haskell community, but I don't have any features that need doing on it, as far as I'm aware. I think the code is fairly easy to grok, though. Could be an opportunity for adding some feature, and it'll be used by a fair chunk of the Haskell community. * https://github.com/chrisdone/pgsql-simple The PostgreSQL library that amelie uses, it's a raw tcp/ip socket interface to the server, fairly trivial and yet interesting (to me) and useful. Needs more authentication methods, and I have some opportunities for optimizing some things. Tests and benchmarks for it would be good too, and probably easy to write. * https://github.com/chrisdone/hulk My IRC server that we use at work could do with a better logging mechanism than a file full of JSON. Probably a DB backend. I don't know if any student would care at all about such a project. Yeah… I don't really work on interesting projects, I won't bother listing the rest. Nor are they a big deal for the community. I'm sure the Hackage2 guys can do with some help. The ecosystem of Yesod, Happstack and Snap always has a bunch of libraries that could do with some fleshing out, I'd estimate. Another idea might be hacking on Leksah, which can always have more features. Ciao!

Hey Chris, I'm up for working on pg simple a bit, partly for my own ends. Email me off list and I'll elaborate further, but one thing I'd really like to do is flesh out the geometry/gis bits. -- Carter Tazio Schonwald On Friday, March 16, 2012 at 5:07 PM, Christopher Done wrote:
On 16 March 2012 21:28, Brent Yorgey
wrote: So I'd like to do it again this time around, and am looking for particular projects I can suggest to them. Do you have an open-source project with a few well-specified tasks that a relative beginner (see below) could reasonably make a contribution towards in the space of about four weeks? I'm aware that most tasks don't fit that profile, but even complex projects usually have a few "simple-ish" tasks that haven't yet been done just because "no one has gotten around to it yet".
I have a bunch of small Haskell projects and I would enjoy helping someone contribute to them. The problem would be finding projects that are actually interesting to a student. The only ones I can think of, that are trivial to work on, are:
* https://github.com/chrisdone/freenect Requires a Kinect device (your students have X-Box right?). This is my Kinect interface. Who doesn't love devices with video and depth perception? Currently it only supports depth perception, as that's all I wanted from it, but one could fairly straight-forwardly add video support. This would require some mentoring and helping along as it requires not only Haskell knowledge, but it needs some C code and using the FFI. It took me a weekend to figure out and write the depth perception part, with help a newbie could tackle video within four weeks. Alternatively -- there's also the opportunity to write some simple motion detection stuff with the existing code.
* https://github.com/chrisdone/stepeval This is benmachine's project to evaluate Haskell in steps. It's currently on hpaste.org, but it's rather incomplete. Fleshing this out to support more syntax would be nice. Not sure if this is actually interesting to anyone else. But it's a good way to solidify your understanding of Haskell's evaluation model and syntax, maybe.
* https://github.com/chrisdone/css Making this very trivial CSS library well-typed could be easy and useful.
* https://github.com/chrisdone/wordnik A little interface to the Wordnik online dictionary service. I kinda started this but didn't finish it. Once done though we can send it to Wordnik and they'll for sure stick it on their libraries page.
* https://github.com/chrisdone/amelie (hpaste.org) The only one that is relevant to the Haskell community, but I don't have any features that need doing on it, as far as I'm aware. I think the code is fairly easy to grok, though. Could be an opportunity for adding some feature, and it'll be used by a fair chunk of the Haskell community.
* https://github.com/chrisdone/pgsql-simple The PostgreSQL library that amelie uses, it's a raw tcp/ip socket interface to the server, fairly trivial and yet interesting (to me) and useful. Needs more authentication methods, and I have some opportunities for optimizing some things. Tests and benchmarks for it would be good too, and probably easy to write.
* https://github.com/chrisdone/hulk My IRC server that we use at work could do with a better logging mechanism than a file full of JSON. Probably a DB backend. I don't know if any student would care at all about such a project.
Yeah… I don't really work on interesting projects, I won't bother listing the rest. Nor are they a big deal for the community. I'm sure the Hackage2 guys can do with some help. The ecosystem of Yesod, Happstack and Snap always has a bunch of libraries that could do with some fleshing out, I'd estimate. Another idea might be hacking on Leksah, which can always have more features.
Ciao!
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe

Chris> * https://github.com/chrisdone/pgsql-simple The PostgreSQL library Chris> that amelie uses, it's a raw tcp/ip socket interface to the server, Chris> fairly trivial and yet interesting (to me) and useful. Needs more Chris> authentication methods, and I have some opportunities for optimizing Chris> some things. Tests and benchmarks for it would be good too, and Chris> probably easy to write. For some reasons, I like very much this project. Beside being useful, it has the potential to demonstrate a lot of the haskell power : easy concurrency, good parsing, nice combinator-based interface. -- Paul

Brent Yorgey wrote:
I am currently teaching a half-credit introductory Haskell class for undergraduates. This is the second time I've taught it. The last time, for their final project I gave them the option of contributing to an open-source project; a couple groups took me up on it and I think it ended up being a modest success.
So I'd like to do it again this time around, and am looking for particular projects I can suggest to them. Do you have an open-source project with a few well-specified tasks that a relative beginner (see below) could reasonably make a contribution towards in the space of about four weeks? I'm aware that most tasks don't fit that profile, but even complex projects usually have a few "simple-ish" tasks that haven't yet been done just because "no one has gotten around to it yet".
Finding a suitable project seems tricky to me as most "real-world" projects usually involve at least one nasty corner like interfacing with a C library, which is usually too hard for someone who just became comfortable with the traditional list origami. With that caveat, I do have a small task that may be suitable and that is useful to me in the context of my reactive-banana library and my yet undisclosed tomato-rubato project. The task is to implement a small audio synthesizer in Haskell. Of course, implementing high-performance audio synthesis is too challenging a task for a Haskell beginner, but there is one particular approach that I would like to see performance measurements of. More specifically, the idea is the following: 1a. Implement a handful of combinators for generating audio as a lazy list of samples type Audio = [Sample] 1b. Get it out of the speakers. (I can find a library for that.) This will be slooow. 2. Implement the same handful of combinators for a different representation, namely a lazy list of memory blocks with 64 samples each type Block = Data.Vector.Vector -- 64 samples type Audio = [Block] In other words, each block is filled in an aggressively optimized inner loop while the blocks are shuffled around with ordinary Haskell functions. 3. Do performance measurements on 2 and test whether it can be run in real-time. So, the task does involve an external library and some knowledge about GHC's optimization, but hopefully nothing too fancy. How is this task useful for me? If the performance is good enough, I can replace the lazy lists with Event / Behavior from reactive-banana , giving a real-time audio synthesizer in the style of functional reactive programming. If it doesn't work out, then the students had a fun project to work on, which is just as well. Best regards, Heinrich Apfelmus -- http://apfelmus.nfshost.com

On Sat, Mar 17, 2012 at 11:01 AM, Heinrich Apfelmus
The task is to implement a small audio synthesizer in Haskell.
seriously?!?! i'm not in his class, but i'm game! i learn better when i'm working on something interesting, and i want to make my (currently pretty pathetic) haskell better and i *LOOOVVVVEEEEE* audio! a haskell-based synth (or series of synths) would be really spiffy! what do i have to know / learn / do? justin -- * The wise man said: "Never argue with an idiot. They bring you down to their level and beat you with experience." * As a programmer, it is your job to put yourself out of business. What you do today can be automated tomorrow. ~Doug McIlroy No snowflake in an avalanche ever feels responsible. --- CFO: “What happens if we train people and they leave?” CTO: “What if we don’t and they stay?”

serialhex wrote:
On Sat, Mar 17, 2012 at 11:01 AM, Heinrich Apfelmus
wrote: The task is to implement a small audio synthesizer in Haskell.
seriously?!?! i'm not in his class, but i'm game! i learn better when i'm working on something interesting, and i want to make my (currently pretty pathetic) haskell better and i *LOOOVVVVEEEEE* audio! a haskell-based synth (or series of synths) would be really spiffy! what do i have to know / learn / do?
Well, it's up to you, really. You need to learn a bit how audio synthesis works, for instance starting with the following links. http://www.acoustics.salford.ac.uk/acoustics_info/sound_synthesis/ http://en.wikibooks.org/wiki/Sound_Synthesis_Theory http://en.wikipedia.org/wiki/Category:Sound_synthesis_types Then, it's best to learn by programming various wave forms yourself and playing around with them. I just finished implementing the necessary Haskell backend for playing raw audio data. You can find it here: http://hackage.haskell.org/package/tomato-rubato-openal The testSine function demonstrates how it works. Best regards, Heinrich Apfelmus -- http://apfelmus.nfshost.com

If you want to do Haskell audio synthesis, you could also use
hsc3 (good start here: http://slavepianos.org/rd/ut/hsc3-texts/). With
hsc3 you can start on serious audio synthesis with only a few lines of
Haskell. In my opinion it could use a much larger community.
Tom
On 3/22/12, Heinrich Apfelmus
serialhex wrote:
On Sat, Mar 17, 2012 at 11:01 AM, Heinrich Apfelmus
wrote: The task is to implement a small audio synthesizer in Haskell.
seriously?!?! i'm not in his class, but i'm game! i learn better when i'm working on something interesting, and i want to make my (currently pretty pathetic) haskell better and i *LOOOVVVVEEEEE* audio! a haskell-based synth (or series of synths) would be really spiffy! what do i have to know / learn / do?
Well, it's up to you, really. You need to learn a bit how audio synthesis works, for instance starting with the following links.
http://www.acoustics.salford.ac.uk/acoustics_info/sound_synthesis/ http://en.wikibooks.org/wiki/Sound_Synthesis_Theory http://en.wikipedia.org/wiki/Category:Sound_synthesis_types
Then, it's best to learn by programming various wave forms yourself and playing around with them. I just finished implementing the necessary Haskell backend for playing raw audio data. You can find it here:
http://hackage.haskell.org/package/tomato-rubato-openal
The testSine function demonstrates how it works.
Best regards, Heinrich Apfelmus
-- http://apfelmus.nfshost.com
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe

Sorry; make that http://slavepianos.org/rd/ut/hsc3-texts/hsc3-tutorial.html
On 3/22/12, Tom Murphy
If you want to do Haskell audio synthesis, you could also use hsc3 (good start here: http://slavepianos.org/rd/ut/hsc3-texts/). With hsc3 you can start on serious audio synthesis with only a few lines of Haskell. In my opinion it could use a much larger community.
Tom
On 3/22/12, Heinrich Apfelmus
wrote: serialhex wrote:
On Sat, Mar 17, 2012 at 11:01 AM, Heinrich Apfelmus
wrote: The task is to implement a small audio synthesizer in Haskell.
seriously?!?! i'm not in his class, but i'm game! i learn better when i'm working on something interesting, and i want to make my (currently pretty pathetic) haskell better and i *LOOOVVVVEEEEE* audio! a haskell-based synth (or series of synths) would be really spiffy! what do i have to know / learn / do?
Well, it's up to you, really. You need to learn a bit how audio synthesis works, for instance starting with the following links.
http://www.acoustics.salford.ac.uk/acoustics_info/sound_synthesis/ http://en.wikibooks.org/wiki/Sound_Synthesis_Theory http://en.wikipedia.org/wiki/Category:Sound_synthesis_types
Then, it's best to learn by programming various wave forms yourself and playing around with them. I just finished implementing the necessary Haskell backend for playing raw audio data. You can find it here:
http://hackage.haskell.org/package/tomato-rubato-openal
The testSine function demonstrates how it works.
Best regards, Heinrich Apfelmus
-- http://apfelmus.nfshost.com
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe

Tom Murphy wrote:
If you want to do Haskell audio synthesis, you could also use hsc3 (good start here: http://slavepianos.org/rd/ut/hsc3-texts/). With hsc3 you can start on serious audio synthesis with only a few lines of Haskell. In my opinion it could use a much larger community.
While Rohan's bindings to SuperCollider are great, I have found that SuperCollider itself is quite difficult to understand for a new user. (My tomata-rubato project aims to be much easier to learn.) Also, as far as I am aware, you can't do low-level audio programming in SuperCollider, i.e. play a list of samples that you've calculated yourself. That's cool if you're only interested in sound design, but bad for learning how audio programming works. Best regards, Heinrich Apfelmus -- http://apfelmus.nfshost.com

erik flister wrote:
giving a real-time audio synthesizer in the style of functional reactive programming.
you know about yampasynth right?
Yes. In fact, their glue code was extremely helpful for understanding OpenAL. As for the FRP, I prefer a style without arrows, though, see my reactive-banana library. Best regards, Heinrich Apfelmus -- http://apfelmus.nfshost.com

Plus yampa hasn't been maintained for more than 3 years, and I lacks
documentation, which makes it a bad choice for beginners.
I don't even know what is the future of that project...
Le 23 mars 2012 09:22, Heinrich Apfelmus
erik flister wrote:
giving
a real-time audio synthesizer in the style of functional reactive programming.
you know about yampasynth right?
Yes. In fact, their glue code was extremely helpful for understanding OpenAL. As for the FRP, I prefer a style without arrows, though, see my reactive-banana library.
Best regards, Heinrich Apfelmus
-- http://apfelmus.nfshost.com
______________________________**_________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/**mailman/listinfo/haskell-cafehttp://www.haskell.org/mailman/listinfo/haskell-cafe

Hi Brent,
Would scoutess [1] fit there? There still are *many* things to do in
scoutess, and these things can be split up in pretty simple tasks. And when
you say 4 weeks, you mean aside from the other courses they have I guess?
[1] http://patch-tag.com/r/alpmestan/scoutess/wiki/
On Fri, Mar 16, 2012 at 9:28 PM, Brent Yorgey
Hi everyone,
I am currently teaching a half-credit introductory Haskell class for undergraduates. This is the second time I've taught it. The last time, for their final project I gave them the option of contributing to an open-source project; a couple groups took me up on it and I think it ended up being a modest success.
So I'd like to do it again this time around, and am looking for particular projects I can suggest to them. Do you have an open-source project with a few well-specified tasks that a relative beginner (see below) could reasonably make a contribution towards in the space of about four weeks? I'm aware that most tasks don't fit that profile, but even complex projects usually have a few "simple-ish" tasks that haven't yet been done just because "no one has gotten around to it yet".
If you have any such projects, I'd love to hear about it!
Here are a few more details:
* The students will be working on the projects from approximately the end of this month through the end of April.
* By "relative beginner" I mean someone familiar with the material listed here: http://www.cis.upenn.edu/~cis194/lectures.html and just trying to come to terms with Applicative and Monad. They definitely do not know much if anything about optimization/profiling, GADTs, the mtl, or Haskell-programming-in-the-large. (Although part of the point of the project is to teach them a bit about programming-in-the-(medium/large)).
* What I would hope from you is a willingness to exchange email and/or chat with the student(s) over the course of the project, to give them a bit of guidance/mentoring. I am certainly willing to help on that front, but of course I probably don't know much about your particular project.
thanks! -Brent
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
-- Alp Mestanogullari
participants (10)
-
Alp Mestanogullari
-
Brent Yorgey
-
Carter Tazio Schonwald
-
Christopher Done
-
erik flister
-
Heinrich Apfelmus
-
Paul R
-
serialhex
-
Tom Murphy
-
Yves Parès