[Haskell-cafe] Open-source projects for beginning Haskell students?

202 views
Skip to first unread message

Brent Yorgey

unread,
Mar 11, 2013, 11:48:37 AM3/11/13
to Haskell Cafe
Hi everyone,

I am currently teaching a half-credit introductory Haskell class for
undergraduates. This is the third time I've taught it. Both of the
previous times, for their final project I gave them the option of
contributing to an open-source project; a couple groups/individuals
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! Just send
me a paragraph or so describing your project and explaining what
task(s) you could use help with --- something that I could put on the
course website for students to look at.

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. During the next two
weeks they would be contacting you to discuss the possibility of
working on your project.

* 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
Haskel...@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Jason Dagit

unread,
Mar 11, 2013, 2:26:17 PM3/11/13
to Haskell Cafe
On Mon, Mar 11, 2013 at 8:48 AM, Brent Yorgey <byo...@seas.upenn.edu> wrote:
Hi everyone,

I am currently teaching a half-credit introductory Haskell class for
undergraduates.  This is the third time I've taught it.  Both of the
previous times, for their final project I gave them the option of
contributing to an open-source project; a couple groups/individuals
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!  Just send
me a paragraph or so describing your project and explaining what
task(s) you could use help with --- something that I could put on the
course website for students to look at.

Myself and several of my friends would find it useful to have a plotting library that we can use from ghci to quickly/easily visualize data. Especially if that data is part of a simulation we are toying with. Therefore, this proposal is for: A gnuplot-, matlab- or plotinum-like plotting API (that uses diagrams as the backend?). The things to emphasize:
  * Easy to install: No gtk2hs requirement. Preferably just pure haskell code and similar for any dependencies. Must be cross platform.
  * Frontend: graphs should be easy to construct; customizability is not as important
  * Backend: options for generating static images are nice, but for the use case we have in mind also being able to render in a window from ghci is very valuable. (this could imply something as purely rendering to JuicyPixels and I could write the rendering code)
 
* 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.

I am willing/able to take on the mentoring aspect :)

Jason

Ben

unread,
Mar 11, 2013, 2:50:38 PM3/11/13
to Jason Dagit, Haskell Cafe

On Mar 11, 2013, at 11:26 AM, Jason Dagit wrote:

> Myself and several of my friends would find it useful to have a plotting library that we can use from ghci to quickly/easily visualize data. Especially if that data is part of a simulation we are toying with. Therefore, this proposal is for: A gnuplot-, matlab- or plotinum-like plotting API (that uses diagrams as the backend?). The things to emphasize:
> * Easy to install: No gtk2hs requirement. Preferably just pure haskell code and similar for any dependencies. Must be cross platform.
> * Frontend: graphs should be easy to construct; customizability is not as important
> * Backend: options for generating static images are nice, but for the use case we have in mind also being able to render in a window from ghci is very valuable. (this could imply something as purely rendering to JuicyPixels and I could write the rendering code)
>
> * 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.
>
> I am willing/able to take on the mentoring aspect :)

i second this, but with a different emphasis. i would like a ggplot2-type DSL for generating graphs, for data analysis and exploration. i agree with :

* it would be great to have no gtk2hs / cairo requirement. (i guess this means text rendering in the diagrams-svg backend needs to be solved.) i guess in the near-term, this is less important to me -- having a proper plotting DSL at all is an important start.

* frontend : graphs should be easy to construct, but having some flexibility is important. the application here is being able to explore statistical data, with slicing, grouping, highlighting, faceting, etc.

* backend : static images are enough for me, interactive is a plus. most importantly : it should be fast enough to work pleasantly with large datasets. ggplot2 is pretty awesome but kills my machine, routinely.

i would be willing to mentor, but i'm not an expert enough i think!

best, ben

Brent Yorgey

unread,
Mar 11, 2013, 4:09:24 PM3/11/13
to haskel...@haskell.org
On Mon, Mar 11, 2013 at 11:50:38AM -0700, Ben wrote:
>
> On Mar 11, 2013, at 11:26 AM, Jason Dagit wrote:
>
> > Myself and several of my friends would find it useful to have a plotting library that we can use from ghci to quickly/easily visualize data. Especially if that data is part of a simulation we are toying with. Therefore, this proposal is for: A gnuplot-, matlab- or plotinum-like plotting API (that uses diagrams as the backend?). The things to emphasize:
> > * Easy to install: No gtk2hs requirement. Preferably just pure haskell code and similar for any dependencies. Must be cross platform.
> > * Frontend: graphs should be easy to construct; customizability is not as important
> > * Backend: options for generating static images are nice, but for the use case we have in mind also being able to render in a window from ghci is very valuable. (this could imply something as purely rendering to JuicyPixels and I could write the rendering code)
> >
> > * 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.
> >
> > I am willing/able to take on the mentoring aspect :)
>
> i second this, but with a different emphasis. i would like a ggplot2-type DSL for generating graphs, for data analysis and exploration. i agree with :
>
> * it would be great to have no gtk2hs / cairo requirement. (i guess this means text rendering in the diagrams-svg backend needs to be solved.) i guess in the near-term, this is less important to me -- having a proper plotting DSL at all is an important start.
>
> * frontend : graphs should be easy to construct, but having some flexibility is important. the application here is being able to explore statistical data, with slicing, grouping, highlighting, faceting, etc.
>
> * backend : static images are enough for me, interactive is a plus. most importantly : it should be fast enough to work pleasantly with large datasets. ggplot2 is pretty awesome but kills my machine, routinely.

Not to throw cold water on these ideas (which sound fantastic!), but
the scope of this sounds more like a GSoC project than something a
beginner could accomplish in 10-15 hours in the space of a few weeks.
I'm looking not for project ideas but for small, concrete
contributions they could make to existing open source projects.

-Brent

Jason Dagit

unread,
Mar 11, 2013, 4:20:48 PM3/11/13
to haskel...@haskell.org
Good point. Perhaps the project I mentioned could be broken up into suitable tasks? For example, if the students just worked on the frontend portion it would still be useful as a starting point for others.

Jason

Michael Orlitzky

unread,
Mar 11, 2013, 10:52:12 PM3/11/13
to haskel...@haskell.org
On 03/11/2013 11:48 AM, 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".

It's not exciting, but adding doctest suites with examples to existing
packages would be a great help.

* Good return on investment.

* Not too hard.

* The project is complete when you stop typing.

Carter Schonwald

unread,
Mar 12, 2013, 2:25:56 AM3/12/13
to Michael Orlitzky, haskell-cafe
+ 1000,

there are so many widely used niche libs which would greatly benefit from more examples in their test suites, or which have tractable small improvement / enhancement  tickets languishing.   Plus most large systems engineering does involve helping improve preexisting some part of the time. 

Edward Z. Yang

unread,
Mar 12, 2013, 3:19:09 AM3/12/13
to Michael Orlitzky, haskell-cafe
I also support this suggestion. Although, do we have the build infrastructure
for this?!

Edward

Excerpts from Michael Orlitzky's message of Mon Mar 11 19:52:12 -0700 2013:

John Lato

unread,
Mar 12, 2013, 3:34:25 AM3/12/13
to Edward Z. Yang, haskell-cafe
There's the "doctest" package: http://hackage.haskell.org/package/doctest, which looks pretty good and has a number of users (35 direct reverse deps).

It has support for cabal test integration, although I would like to see better integration with other test tools.  But that can be added in the test executable I suppose.

My only quibble with this suggestion is that asking beginners to do this sort of work may do more harm than good.  It would certainly be helpful, but I don't think most people would find it interesting.

Kim-Ee Yeoh

unread,
Mar 12, 2013, 6:27:43 AM3/12/13
to Haskell Cafe
Question is: does the task even have to involve the the production of
Haskell code?

Is it possible that both the student and the community-at-large would
benefit further from expository-style artifacts?

Some possible activities:

(1) producing documentation for popular packages that cater to
different learning styles (e.g. styles: Little Schemer, RWH, LYAHFGG,
etc.)

(2) survey of the various approaches taken by similar packages,
explaining the different choices taken

(3) cheatsheets, whether of GHC extensions, packages, syntax, commonly
used functions, etc.

These don't have to be harder than they sound. Option (2) in
particular could be e.g. a table listing the type signatures of the
various Iteratee packages with regard to Iteratee, Enumerator, and
Enumeratee. Or how a four-line Unix cat is implemented across them.

It's been said that a good teacher doesn't cover material, he
/uncovers/ them, i.e. the few core ideas that underpin everything.

Well, Haskell is just this heap of everything that's pretty hard to dig under.

Failing which, the indefatigable teacher would do well showing how the
student can teach themselves.

-- Kim-Ee

Tim Docker

unread,
Mar 12, 2013, 7:46:12 AM3/12/13
to haskel...@haskell.org
On 12/03/13 05:26, Jason Dagit wrote:
>
> Myself and several of my friends would find it useful to have a
> plotting library that we can use from ghci to quickly/easily visualize
> data. Especially if that data is part of a simulation we are toying
> with. Therefore, this proposal is for: A gnuplot-, matlab- or
> plotinum-like plotting API (that uses diagrams as the backend?). The
> things to emphasize:
> * Easy to install: No gtk2hs requirement. Preferably just pure
> haskell code and similar for any dependencies. Must be cross platform.
> * Frontend: graphs should be easy to construct; customizability is
> not as important
> * Backend: options for generating static images are nice, but for
> the use case we have in mind also being able to render in a window
> from ghci is very valuable. (this could imply something as purely
> rendering to JuicyPixels and I could write the rendering code)

I maintain the Chart library:

http://hackage.haskell.org/package/Chart

I'd like to see it used more widely, but gtk/cairo seems to be a problem
for many people.

Is the cairo dependency the reason you are suggesting that an
alternative plotting library be built?
Is your problem with cairo the difficulty in setting it up on ms
windows/osx?
What graphics API would you suggest using to "render in a window from ghci"?

If there were a good cross platform alternative to cairo, I'd happily
target this additional 2D drawing API. However, I don't think there
currently is one. Neither gloss nor the diagrams library currently have
adequate text support.

Tim

Ivan Lazar Miljenovic

unread,
Mar 12, 2013, 8:06:25 AM3/12/13
to Tim Docker, haskel...@haskell.org
This is probably a completely stupid and bonkers idea... but I wonder
whether using Inkscape's ability to be able to export PDF or PS files
that can be imported into LaTeX and let LaTeX deal with the text
placement/rendering would work... Rather fiddly for just a "give me
an image" library though :)

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



--
Ivan Lazar Miljenovic
Ivan.Mi...@gmail.com
http://IvanMiljenovic.wordpress.com

Vo Minh Thu

unread,
Mar 12, 2013, 1:59:43 PM3/12/13
to Haskell Cafe
2013/3/11 Brent Yorgey <byo...@seas.upenn.edu>:
Maybe it is a too small project (and not a contribution to an existing
project), but a Haskell wrapper around PostgreSQL setproctitle code
would be nice (something similar exists in the Python world).

Otherwise I have began some "infrastructure" projects on GitHub that
are all pretty simple but could be damn useful: curved is meant to be
a drop-in-replacement for graphite (it is almost the case), sentry is
a process-monitoring tool, humming is a job queue on top of
PostgreSQL, hlinode is a binding to the Linode API, ... They all have
in common that they are small, self-contained, and quite often just
massaging around rawSystem calls, database "execute" calls, or
GET/POST calls.

Thu

Kristopher Micinski

unread,
Mar 12, 2013, 3:25:15 PM3/12/13
to Vo Minh Thu, Haskell Cafe
The problem with all of these suggestions is that they start from no code.  I believe Brent is looking for an *existing* project which needs contributions.  I assume so that beginning Haskellers can learn real code style in the middle to large, and get input from existing community members.

Kris

Simon Michael

unread,
Mar 12, 2013, 5:13:08 PM3/12/13
to haskel...@haskell.org
Hi Brent,

hledger is an existing project whose purpose, code and installation
process is relatively simple. I'm happy to do a bit of mentoring. If
this sounds suitable, I can suggest some easy fixes or enhancements, eg:

...hmm. In fact nothing on my long wishlist[1][2] looks all that quick.
They're kind of tricky, or require a fair bit of architectural
knowledge, or they are unglamorous and boring. (I'd love to be proven
wrong.)

shelltestrunner[3] or rss2irc[4] are much smaller projects, but their
backlogs are not all that pretty either. If any of these are of interest
let me know and I can look harder for suitable jobs.

-Simon


[1]
https://code.google.com/p/hledger/issues/list?can=2&q=&colspec=ID+Type+Status+Summary+Reporter+Opened+Stars&sort=&groupby=&mode=grid&y=Component&x=Status&cells=tiles&nobtn=Update

[2] http://hub.darcs.net/simon/hledger/NOTES.org#2140

[3] http://hub.darcs.net/simon/shelltestrunner/browse/NOTES.org

[4] http://hub.darcs.net/simon/shelltestrunner/browse/NOTES.org

Simon Michael

unread,
Mar 12, 2013, 5:18:00 PM3/12/13
to haskel...@haskell.org

Joachim Breitner

unread,
Mar 12, 2013, 6:40:05 PM3/12/13
to haskel...@haskell.org
Hi,

Am Montag, den 11.03.2013, 11:48 -0400 schrieb Brent Yorgey:
> If you have any such projects, I'd love to hear about it! Just send
> me a paragraph or so describing your project and explaining what
> task(s) you could use help with --- something that I could put on the
> course website for students to look at.

arbtt, the Automatic Rule-Based Time-Tracker could possibly be an
sufficiently interesting application with lots of corners for
improvement. Someone could for example try to generate graphs from it,
or add other statistical analyses... but I guess you are interested in a
better defined task?

Some pointers:
http://hackage.haskell.org/package/arbtt
http://darcs.nomeata.de/arbtt/doc/users_guide/
https://www.joachim-breitner.de/blog/archives/336-The-Automatic-Rule-Based-Time-Tracker.html
https://lists.nomeata.de/mailman/listinfo/arbtt

Greetings,
Joachim

--
Joachim "nomeata" Breitner
Debian Developer
nom...@debian.org | ICQ# 74513189 | GPG-Keyid: 4743206C
JID: nom...@joachim-breitner.de | http://people.debian.org/~nomeata

signature.asc

Alp Mestanogullari

unread,
Mar 12, 2013, 8:03:27 PM3/12/13
to Haskell Cafe
Hi,

My suggestion may sound a bit odd, but if they're looking for a challenging but still simple enough project, I'd love for people to test out the new version of hnn (not yet released, but on github [1]) and make something fun with it. I'd love to mentor this and add things to the library altogether as they progress and give some feedback. The biggest issue with that proposal is that they either have to know a bit about neural networks before or must be able to learn very quickly. This can however be compensated by that warm feeling you have when your neural net finally does what you want it to.
--
Alp Mestanogullari

Alp Mestanogullari

unread,
Mar 12, 2013, 8:07:13 PM3/12/13
to Haskell Cafe
--
Alp Mestanogullari

Michel Kuhlmann

unread,
Mar 13, 2013, 3:05:41 AM3/13/13
to haskel...@haskell.org
Hi Brent,
I am myself a haskell-beginner. Too, trying to come to terms with
Applicative and Monad. Nevertheless, I forked [1] @tomahawkin's `devsurf`
library, with the aim of extending it to triangular-mesh and point-cloud
manipulation library.

There are lot's of things I still miss. For example:

* Point-cloud/mesh simplification
* Slicing of meshes/point-clouds (taking cross-sections)
* Interpolation from point-cloud to mesh
* Merging different meshes
* Difference between two meshes, resulting in a diff-mesh
* ...

Related to that I created a repository for associated executables [3].
The main-program there is `mshConv`, which should convert meshes into
and from different file-formats, analog to fabulous `pandoc`.

There are several things to be done:

* Proper command-line interface
* Using Parsec in Readers
* More Readers
* More Writers

Currently mesh-conversion could be done in `meshlab` [4]. On the homepage is
also a list with potential Readers and Writers.

I am willing to exchange email, but I do not have the competence of
mentoring or guidance.

Best regards,
Michel

[1] https://www.github.com/tomahawkins/devsurf
[2] https://www.github.com/michelk/devsurf
[3] https://www.github.com/michelk/devsurf-bin
[4] http://www.meshlab.org

Ernesto Rodriguez

unread,
Mar 13, 2013, 6:13:14 AM3/13/13
to Haskell Cafe
Dear Prof. Yorgey,

Not something very big, but if someone wants to get hands on working with Parsec I started developing a library to work with motion capture (MoCap) data. I need to parse MoCap data for my bachelor's thesis [1] so I decided to do it in a way that might benefit others. On the other hand, I don't need all the info in the file for my work and this project is not my priority, so one of the students could extend the parser to parse the sections of the file it currently ignores. Also more file types support would be nice since I am only developing a parser for ASF/AMC files. The project is very new, small and is located here: https://github.com/netogallo/MoCap .  I can give you more details of the tasks that could be done (essentially creating a parser fore more sections of the file, define ADTs to represent those sections, semantic validation of files, better error messages, ect.) and I would be willing to exchange e-mails and answer questions to students if necessary.  

Best Regards,

Ernesto Rodriguez


On Mon, Mar 11, 2013 at 4:48 PM, Brent Yorgey <byo...@seas.upenn.edu> wrote:



--
Ernesto Rodriguez

Bachelor of Computer Science - Class of 2013
Jacobs University Bremen



Mario Blažević

unread,
Mar 15, 2013, 3:06:58 PM3/15/13
to haskel...@haskell.org
On 13-03-11 10:52 PM, Michael Orlitzky wrote:
> On 03/11/2013 11:48 AM, 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".
>
> It's not exciting, but adding doctest suites with examples to existing
> packages would be a great help.
>
> * Good return on investment.
>
> * Not too hard.
>
> * The project is complete when you stop typing.


In the similar spirit, many existing projects would benefit from a
benchmark suite. It's a fairly simple but somewhat tedious process, good
for a team work practice:

1. Take a well-defined task, like parsing JSON for example.
2. Devise a test scenario that includes the task.
3. Make a list of all libraries on Hackage which (claim to) do the task.
4. Write a simple test for each of the libraries.
5. Combine all the tests into a Criterion test suite.
6. Publish the test suite and the benchmark results.
Reply all
Reply to author
Forward
0 new messages