From c2906e7316c2cba0cda447748900fbceab1a4a95 Mon Sep 17 00:00:00 2001 From: Eduardo Trujillo <ed@chromabits.com> Date: Sun, 2 Oct 2016 14:57:48 -0700 Subject: [PATCH] feat(projects): Updated and new project descriptions --- projects/blog.md | 38 +++++++++++++++++++++++++++++++++ projects/craze.md | 33 +++++++++++++++++++++++++++++ projects/kawaii.md | 53 ++++++++++++++++++++++++++++++++++++++++++++++ projects/shift.md | 27 +++++++++++++++++++++++ 4 files changed, 151 insertions(+) create mode 100644 projects/blog.md create mode 100644 projects/craze.md create mode 100644 projects/kawaii.md create mode 100644 projects/shift.md diff --git a/projects/blog.md b/projects/blog.md new file mode 100644 index 0000000..04400e9 --- /dev/null +++ b/projects/blog.md @@ -0,0 +1,38 @@ +--- +title: Blog +platform: Haskell +github: etcinit/blog +post: /posts/2016/02/15/serving-hakyll-site-with-warp/ +uuid: 05ba78e4-3659-4f39-9afc-ac50868f081c +--- + +The generator and server behind this blog. + +<!--more--> + +**About** + +The Chromabits blog has gone over multiple engines over time. A long time ago, +the site was powered by a dynamic PHP CMS. After a while, it migrated to a Node +JS server with isomorphic JS. Finally, it has recently been reborn as a static +website generated using the Hakyll library/framework. + +[_Dropping everything and going static_][1] describes this in greater detail. + +**Architecture** + +The project could be subdivided into three main sections: The generator, the +server, and the frontend. + +The generator uses Hakyll, which then uses Pandoc, to take many posts and +project descriptions written in Markdown into full pages using different +templates and some basic logic (like the random title colors). + +The server uses the [kawaii][2] package to define a custom web server that took +less time to program and setup than the trial and error that setting up Apache +through configuration files can be sometimes. + +The frontend is simply a Gulp task for compiling SASS into a minified CSS file. + +[1]: /posts/2015/08/23/going-static/ +[2]: /projects/kawaii/ diff --git a/projects/craze.md b/projects/craze.md new file mode 100644 index 0000000..3e77456 --- /dev/null +++ b/projects/craze.md @@ -0,0 +1,33 @@ +--- +title: Craze +platform: Haskell +github: etcinit/craze +docs: https://hackage.haskell.org/package/craze +uuid: 427d241d-384a-4468-8b0e-11e0c71861b1 +--- + +A micro-library for racing HTTP GET requests. + +<!--more--> + +Craze is my first open-source Haskell package. It started as a small algorithm +for work, but as gained more features it was polished enough to open-source. + +**What is Craze?** + +Craze is a small module for performing multiple similar HTTP GET requests in +parallel. This is performed through a function called `raceGet`, which will +perform all the requests and pick the first successful response that passes a +certain check, meaning that the parallel requests are essentially racing +against each other. + +**What is the usefulness of this?** + +If you are dealing with data source or API that is very unreliable (high +latency, random failures) and there are no limitations on performing +significantly more requests, then performing multiple requests (through direct +connections, proxies, VPNs) may increase the chances of getting a successful +response faster and more reliably. + +However, if using a different data source or transport is a possibility, it is +potentially a better option that this approach. diff --git a/projects/kawaii.md b/projects/kawaii.md new file mode 100644 index 0000000..532c208 --- /dev/null +++ b/projects/kawaii.md @@ -0,0 +1,53 @@ +--- +title: Kawaii +platform: Haskell +github: etcinit/kawaii +docs: https://hackage.haskell.org/package/kawaii +uuid: ea143dfb-4312-4afa-91fd-004ebd02fb3d +--- + +Utilities for serving static sites and blogs with Wai/Warp. + +<!--more--> + +Warp is a really performant web server for Haskell applications that follow the +Wai interface. Kawaii is a library that encapsulates a lot of the boilerplate +involved in setting up a Warp/Wai server for hosting static websites and blogs. + +The library was originally part of the source code of the Chromabits blog, but +refactored to be more generic and work with more projects. + +**Features:** + +- Wai applications: Static website, home redirector. + +- Built-in HTTP and HTTPS servers. + +- A CLI for launching a basic server on any directory. + +- Middlewares: + + - Logger: Logs all requests to `stdout` in Apache-like format. + + - Force SSL: Redirects all visitor accessing a site from HTTP to the HTTPS + version. + + - GZip + + - Domain enforcer: Redirects visitors to a specified domain. This allows + authors to create redirections from a www to a non-www domain or + vice-versa. + + - Security headers + + - HSTS + + - Content Security Policies: Besides adding the appropriate headers, the + middleware includes a mini-DSL for describing the desired rules in + Haskell. + + - De-indexify middleware: Many static site generators use `index.html` for + many paths to avoid showing any extensions as part of an URL. This + middleware ensures that even if a visitor directly accesses a URL ending + in `index.html`, they get redirected and served the directory version: + `my.blog/index.html --> my.blog/`. diff --git a/projects/shift.md b/projects/shift.md new file mode 100644 index 0000000..fa8d270 --- /dev/null +++ b/projects/shift.md @@ -0,0 +1,27 @@ +--- +title: Shift +platform: Haskell +github: etcinit/shift +uuid: 58e8fe22-59a1-462a-8a9e-c238a4fd3da5 +--- + +A changelog generator. + +<!--more--> + +Born out of the frustration that comes out of having to manually update +changelog files, Shift is a tool that can automatically generate a change log +based on a project's Git history. + +To be ultimately useful, Shift does require that the project follows a git +commit convention. In it's initial implementation, it solely supports the +Angular commit convention since it is one of the most popular of these kind of +conventions and fairly easy to parse. + +I chose Haskell to write this project due to its very powerful and declarative +parsing libraries, which are use extensively to parse commit messages and +bodies. + +Additionally, Shift takes advantage of projects hosted on GitHub and can +generate richer changelogs by embedding links to commit diffs and author +profiles. -- GitLab