There's one of my hobby projects that could use some manpower to
bootstrap it into a production-quality tool. It's an HTML templating
system; right now it reads input templates in one of two languages (one
very declarative, very similar to Python's jinja2, the other being a
locally-pure functional language with a curly-bracket syntax), and it
can output PHP and JavaScript as well as execute templates directly in
Haskell code. There's also a rather experimental JSON-based intermediate
format, designed for high-security scenarios (JSON can be parsed
quickly, but because it cannot contain arbitrary code, a compromised
compiler can be mitigated by whitelisting what the runtime can do; this
way, only the runtime has to be audited, not the compiler).

There is an incomplete implementation of a PHP library that can
interpret this intermediate JSON format, but it hasn't been used in any
production-quality project yet.

The core part is the compiler, consisting of a
Parsec-based parser, an AST, an optimizer, and a few backends.

The unique selling points:

* Pre-compile your templates - now you can have the cake (expressive
  clean template language) and eat it too (great performance, because
  it's pre-compiled to your web app's native language).
* Use the same template for PHP, Haskell and JavaScript (and maybe
  others, too).
* Bye bye XSS: HTML-encoding is the default.
* Extensible: Hook up your own native functions - it's as simple as
  adding a function to your template input data, then calling it inside
  the template.

It could use some work in a lot of areas; projects could include, for
example:

- Getting the JavaScript backend to support 100% of the language
  features (right now, only the direct-execution and PHP backends pass
  all tests)
- Implement some glue to allow easy embedding in Haskell web
  applications (yesod / happstack / snap)
- Add more features to the input language (some of which would also
  require some changes to the backends), e.g.:
  - range literals
  - list comprehensions
  - indexed for-each, or some way of getting the current iteration's
        index; very useful for things like zebra-stripe data grids and
        such
- Add other backends (Python and Ruby would be the most obvious
  candidates, but I'm really open to anything)
- Add more library functions
- A better optimizer
- Some tooling and integration support, e.g. some kind of mechanism to
  switch between executing on-the-fly (for development) and using
  pre-compiled templates (for production), something to implement
  graceful degrading on the client side (use client-side templates when
  possible, fall back to postbacks and server-side templates as needed),
  syntax highlighters for popular editors, etc.

Anyway, here's the source:

https://bitbucket.org/tdammers/hpaco

The PHP lib/script that can produce and run a subset of the JSON
intermediate format is here:

https://bitbucket.org/tdammers/phpaco

(Any contributions, feedback, etc., very welcome)

On Thu, Jul 04, 2013 at 05:26:59PM +0200, Anders Bech Mellson wrote:
> Is there any project that needs working this fall which could be used as a
> university project?
> 
> I am in the university (M.Sc. in software development),
> so I am mainly looking for project ideas (preferably concrete ones).
> 
> We are 2-3 students that have ~10 hours pr week for 3 months to work on a
> project.
> 
> Is there a listing somewhere with project ideas for contributing to the
> Haskell community?
> 
> Thanks in advance,
> Anders

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


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

Reply via email to