Jim Cheung

Monday, April 05, 2021

this holiday I rewrote one my personal project

the origin stack was immutant with undertow as web server, compojure for routing and selmer as template engine

I replaced it with ring, jetty and {{ mustache }} almost a complete rewrite, but I had so much fun

I have better understanding about ring, handlers and middlewares, also there're less magic feelings


compojure has dependency of a parser Engelberg/instaparse, nice but I don't need it

I checked Clojure Web Routing Library Recommendations 2020 tried reitit and bidi, they're not dead simple so not suitable for my project but I agree that reitit is a good choice for real projects

since my project has very few routes and I decided to use cond to do it

to extract parameters from a route, I borrowed the idea from Clojure: string interpolation

so far the result is good, not too complicated to setup routes comparing to compojure


like routes, I don't have much logic in my templates, selmer is relative large comparing to mustache (also I used an early version of selmer that includes the whole clojurescript as dependency, generates large uberjar, it is fixed in newer version)

first I used fhd/clostache, but I found it doesn't handle nested sections well I switched to davidsantiago/stencil and it works great


one thing that didn't work out is replacing markdown with org, I couldn't find a library that has good support on org files other workarounds are more complicated than markdown


found this interesting app: LiteStore - A tiny NoSQL database for rapid prototyping

the creator is quite crazy, he had created a frontend microframework, a web server, a NoSQL store, a Markdown processor, a static site generator, and even a programming language

maybe one day I'll have my own stack like him, because I found reinventing the wheel is super fun

Friday, April 09, 2021

a good summary: The Architecture Behind A One-Person Tech Startup


github writes about How we scaled the GitHub API with a sharded, replicated rate limiter in Redis

more about rate limiter on redis:

an alternative approach without redis: Gubernator: Cloud-native distributed rate limiting for microservices

and shopify's stack: E-Commerce at Scale: Inside Shopify's Tech Stack

Sunday, April 11, 2021

few good books show up in safari online, I still have problem with keeping records for my reading list.

started a new readling-list page, maybe will find another tool to replace it.

Blog Archive