Skip to content
snoyberg edited this page Apr 26, 2013 · 15 revisions

Wishlist

See the TODO list for tasks that will be implemented. Below is a list of Yesod features that would be nice, but that we can continue to live without. Volunteers are welcome:

  • Solution for integration testing using webkit. funcunit.js has some good ideas, but they try to couple it to steal.js and I couldn't get it to get pages from my localhost. The Ruby project ghostbuster may be the easiest approach, but I found it a little buggy. capybara-webkit demonstrates how we could bind directly to webkit.

  • Create a wai-handler-direct-fastcgi which uses the direct-fastcgi package instead of the C library. Discussion: https://github.com/snoyberg/wai-handler-fastcgi/commit/ca64674de3934ae8dd9a612487596db0cd049781

  • http-conduit: add multipart form rendering. That’s possibly even a good project for a separate package.

  • screen casts, maybe webinars/virtual meetups.

  • Have client session cookie code not only optional for whole site, but optional per subsite. Follow up on Matt’s idea of “Yesod middleware” for providing features like sessions.

  • Proxy subsite. Could be useful for cross-domain Ajax.

  • Extend the current benchmark suite to run against Erlang, Nginx Perl module, and maybe that one Lua contender and Lift. Based on this, for Erlang, We may need to benchmark against both Yaws and mistulin. Here is an article on doing http benchmarking and another

  • integrate Yesod's forms with reform or otherwise improve forms

  • file uploading plugin configurable for different storage methods and providers (like Ruby's carrierwave + fog)

  • reusable wiki sub-site. there are now a few Yesod wiki applications.

  • A Yesod installer script

  • use the numerals package for i18n numbers

  • type-safe parameters- an extension to type-safe urls. so /foo/2?bar is directed to

    getFoo :: Int -> String -> RepHtml
    getFoo id bar = do ...
  • Better deployment. Keter is a good tool, but it could use some improvements across the board, and some feature enhancements too.

  • Admin subsite, providing access to modifying database entries, viewing logs, etc. There are already a few attempts at this kind of thing.

  • Easier client-side deployment. I've been using Fay, and I'm happy with it, but the process could certainly be smoother.

Key/value stores and caching

There is a proposal to improve the per-request cache in ticket #268, based on a Typeable type-tagged key map. This type of keys could be used for typesafe storage in a modular way in more places, without polluting everything with type variables, for example:

  • Generalize sessions, instead of a Map Text ByteString, make something akin to (Typeable key, Serializable a) => Map key a, the current lookupSession and setSession session map could then just be stored under one key. This would make it easier to make an addMessage that builds a list of messages to be displayed, and also for subsites or widgets to store their session things under their own key.
  • Per request storage: store widgets or database lookup results in a cache: one could define cacheable entities that get automatically cached during the whole request, with optional parameters.
  • Flexible general-purpose caching: a bit more complex than per-request cache because of the longer lifetime: use the API for making caches (preferred storage location: foundation type?) with a longer lifetime, for caching things like RSS feeds, updates from remote sites, that only need to be regenerated once in a while. API functions for automatically expiring cache items after a fixed amount of time, or explicitly expiring.

Persistent

There are a lot of potential tasks here, including plenty of relatively green field coding opportunities (implement a new backend), or even API redesign.

  • projections, or sub-selects, where you only want a portion of your data fields returned. This was discussed on web-devel. The only reasonable implementation given was to stick either a default value or an undefined in the fields you don’t want.

Deployment

  • Integation with ekg for monitoring
  • Faster deployment with binary diffs, perhaps using bsdiff of courgette.
  • A documented technique for zero-downtime (amazon load balancer?)

Community Applications

  • An application that integrates with the Yesod development environment to automatically collect compile errors. If someone else has already offered a solution to a similar compile error it will try to match it and offer the solution.

Development tools

  • yesod console- load a ghci session with simple access to your Persistent models, printed out in a convenient (tabular?) format. Maybe we need to wait for improvements to ghci cabal integration.

hamlet/templates

  • a version of the hamlet template package that allows arbitrary haskell code in the templates. (might be easy using haskell-src-extra)
  • a simple pass-through html template (easy)
  • more configurable javascript minifier (for example no minification, or running an external minifier)
  • a javascript template language that knows more about javascript, making it safer to insert interpolated values? (language-javascript or jmacro perhaps)

sprites

  • Make some reusable subsite or route, that takes a directory of images, generates a combined sprite image at compile time and a widget to insert them, something like ^{sprite SpriteR my_image_png}
Clone this wiki locally