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


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to