| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | Title | Brief description | Taken by | Due on | ||||||||||||||||||||||
2 | Collect & transmit structured log & instrumentation data from Haskell | -- Figure out how to buffer structured log data in memory AND flush the buffer upon time/memory, whichever occurs earlier. two options — pipes or broadcast channels. -- Figure out which interim existing visualisation service can we push the instrumentation data to. need not be a 100% fit for now, but at least something that can get us started. If there is not such existing visualisation service, then we have to write a very basic one on our own in Purescript/Elm. | ||||||||||||||||||||||||
3 | Rails cookie decryption in Haskell | -- The Haskell app needs to be able to decrypt and understand the Rails auth cookie. -- It should be able to read the encryption key/salt from config.yml and expose the contents of the cookie in a structured format (record type) in the App environment used by all servant handlers. (this needs to be a per-request environment, NOT an app-wide environment!) Note: Here's a relevant library which seems to have already implemented the core decryption code - https://github.com/iconnect/rails-session | Saurabh Nanda | Completed | ||||||||||||||||||||||
4 | Opaleye generated left join queries seems to slow down the Postgresql's query planner | https://github.com/tomjaguarpaw/haskell-opaleye/issues/284 | ||||||||||||||||||||||||
5 | Opaleye - Multiple left joins | https://github.com/tomjaguarpaw/haskell-opaleye/issues/237 | ||||||||||||||||||||||||
6 | Haskell port of Zurb's Inky library | Ideally something built on top of Lucid (which we are using for regular HTML generation as well). We would like the functions/combinators to be type-safe so that a `column` tag outside a `row` tag is not allowed. A `menu` tag inside a `menu` tag is not allowed. An orphan `item` tag is not allowed, etc. Link: https://foundation.zurb.com/emails/docs/inky.html | James Haver II | WIP | ||||||||||||||||||||||
7 | TechEmpower benchmarks - Yesod | Fixing the yesod & yesod-postgres code to perform better in the benchmarks. | ||||||||||||||||||||||||
8 | TechEmpower benchmarks - Servant | Fixing the yesod & yesod-postgres code to perform better in the benchmarks. | ||||||||||||||||||||||||
9 | ReflexFRP benchmarks | Benchmarking GHCJS + Reflex-FRP as per https://github.com/krausest/js-framework-benchmark | Alex | Completed | ||||||||||||||||||||||
10 | Purescript benchmarks | Benchmarking Purescript + Halogen/Thermite/Pux as per https://github.com/krausest/js-framework-benchmark | Thomas | Completed | ||||||||||||||||||||||
11 | DB migrations infra | Figure out how to manage DB migrations if we aren't using Persisten (which has some support for migrations baked into the library). Sqitch is a possible alternative. | Pranay | Completed | ||||||||||||||||||||||
12 | Extensible records | Survey of mature (or seemingly mature) libraries that alleviate the records problem in Haskell: -- Benchmark performance against regular record accessors and lens-accessors -- Benchmark for compile-time -- Can the extensible record have duplicate field names? -- What's the story around nested extensible records? How do you update nested records? -- Integrate the extensible record with other popular libraries, like Lens, Aeson, Opaleye, and swagger-data | ||||||||||||||||||||||||
13 | Miso benchmarks | Benchmarking GHCJS + MisoJS as per https://github.com/krausest/js-framework-benchmark | Saurabh | Completed | ||||||||||||||||||||||
14 | Haskell deployment | A well-integrated deployment story with hapistrano (or something better): -- Haproxy setup for A/B deployment -- New server is deployed on a new port -- Haproxy config file is changed to point to server deployed on new port -- Haproxy is sent a soft-restart signal. -- Once all connections to old server (old port) are terminated, the old server is shut down. -- DB migrations are run before deployment. -- Static assets are deployed as well. | Saurabh & Rajdeep | Completed | ||||||||||||||||||||||
15 | Structured logging and instrumentation | Wrappers over popular libraries that log & transmit structured data to a remote service (eg. NewRelic): -- Opaleye - log the query, the execution time, and number of rows affected -- Redis -- log the command, exectuation time, and bytes transferred -- Email -- log the subject, recipient, size of email, and time taken -- WAI/Servant -- log the request (including JSON payload), resposne HTTP code, error message in case of 500s, time take to respond, breakup of the time by Sql, Redis, Email, HTML rendering, etc. | ||||||||||||||||||||||||
16 | Record splicer | Pranay | Completed | |||||||||||||||||||||||
17 | Opaleye code generator | Saurabh | Completed | |||||||||||||||||||||||
18 | Ability to pretty-print data-structures for debugging | While most data structures have a Show instance, they aren't optimised for human readability. Is there a library out there which implements a PrettyPrint instance for most common data-structures that can be used for displaying the data-structure for human reading? Anything based on Generic or generics-sop? | ||||||||||||||||||||||||
19 | Haskell deployment - documentation | Survey all available approaches for deploying Haskell webapps and write a detailed tutorial for each approach: -- Docker -- Nix -- Keter -- Hapistrano -- Nginx? -- Heroku | Saurabh | Completed | ||||||||||||||||||||||
20 | Servant <> Typescript bridge | eg. Servant<>Elm bridge | ||||||||||||||||||||||||
21 | Lucid from HTML | eg. Blaze from HTML or Miso from HTML | Completed | |||||||||||||||||||||||
22 | Currency formatting package | There doesn't seem to be a proper way to format currency values on the lines of http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#method-i-number_to_currency | ||||||||||||||||||||||||
23 | Logging JSON request payload in WAI / Servant | Wai/Warp doesn't seem to have proper support for this. Benchmark the impact of the hack mentioned at https://github.com/yesodweb/wai/issues/636 if enabled in production. If the impact is severly negative, then investigate if this can be done at the Servant level instead. | ||||||||||||||||||||||||
24 | Query tracing support for Opaleye | https://github.com/tomjaguarpaw/haskell-opaleye/issues/312 | ||||||||||||||||||||||||
25 | Job queues in Postgres | Extract and generalise our job-queue infra (tightly coupled with our app right now) so that it can be open-sourced. Will need documentation on how to integrate with any app (especially an app's authentication/authorization infra) | Saurabh | WIP | ||||||||||||||||||||||
26 | Job queue admin | web interface for basic monitoring and adminstration of the Postgres-backed job queue | Saurabh | WIP | ||||||||||||||||||||||
27 | Sendgrid API | Open-source our code for Haskell implementation of Sendgrid API | ||||||||||||||||||||||||
28 | Postgresql ORM vs HRR | Help us evaluate Postgresql ORM vs HRR for typical web-app use-cases | Drop | Drop | ||||||||||||||||||||||
29 | DB-heavy testing | Setup either HTF or Tasty to run DB-based tests in parallel in isolated transactions | Saurabh | WIP | ||||||||||||||||||||||
30 | ||||||||||||||||||||||||||
31 | ||||||||||||||||||||||||||
32 | ||||||||||||||||||||||||||
33 | ||||||||||||||||||||||||||
34 | ||||||||||||||||||||||||||
35 | ||||||||||||||||||||||||||
36 | ||||||||||||||||||||||||||
37 | ||||||||||||||||||||||||||
38 | ||||||||||||||||||||||||||
39 | ||||||||||||||||||||||||||
40 | ||||||||||||||||||||||||||
41 | ||||||||||||||||||||||||||
42 | ||||||||||||||||||||||||||
43 | ||||||||||||||||||||||||||
44 | ||||||||||||||||||||||||||
45 | ||||||||||||||||||||||||||
46 | ||||||||||||||||||||||||||
47 | ||||||||||||||||||||||||||
48 | ||||||||||||||||||||||||||
49 | ||||||||||||||||||||||||||
50 | ||||||||||||||||||||||||||
51 | ||||||||||||||||||||||||||
52 | ||||||||||||||||||||||||||
53 | ||||||||||||||||||||||||||
54 | ||||||||||||||||||||||||||
55 | ||||||||||||||||||||||||||
56 | ||||||||||||||||||||||||||
57 | ||||||||||||||||||||||||||
58 | ||||||||||||||||||||||||||
59 | ||||||||||||||||||||||||||
60 | ||||||||||||||||||||||||||
61 | ||||||||||||||||||||||||||
62 | ||||||||||||||||||||||||||
63 | ||||||||||||||||||||||||||
64 | ||||||||||||||||||||||||||
65 | ||||||||||||||||||||||||||
66 | ||||||||||||||||||||||||||
67 | ||||||||||||||||||||||||||
68 | ||||||||||||||||||||||||||
69 | ||||||||||||||||||||||||||
70 | ||||||||||||||||||||||||||
71 | ||||||||||||||||||||||||||
72 | ||||||||||||||||||||||||||
73 | ||||||||||||||||||||||||||
74 | ||||||||||||||||||||||||||
75 | ||||||||||||||||||||||||||
76 | ||||||||||||||||||||||||||
77 | ||||||||||||||||||||||||||
78 | ||||||||||||||||||||||||||
79 | ||||||||||||||||||||||||||
80 | ||||||||||||||||||||||||||
81 | ||||||||||||||||||||||||||
82 | ||||||||||||||||||||||||||
83 | ||||||||||||||||||||||||||
84 | ||||||||||||||||||||||||||
85 | ||||||||||||||||||||||||||
86 | ||||||||||||||||||||||||||
87 | ||||||||||||||||||||||||||
88 | ||||||||||||||||||||||||||
89 | ||||||||||||||||||||||||||
90 | ||||||||||||||||||||||||||
91 | ||||||||||||||||||||||||||
92 | ||||||||||||||||||||||||||
93 | ||||||||||||||||||||||||||
94 | ||||||||||||||||||||||||||
95 | ||||||||||||||||||||||||||
96 | ||||||||||||||||||||||||||
97 | ||||||||||||||||||||||||||
98 | ||||||||||||||||||||||||||
99 | ||||||||||||||||||||||||||
100 |