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.

Saturday, April 24, 2021

to test fetch data logic with network delay, can save graphql response to a json and start the server

json-server db.json --port 3001 --delay 5000

Sunday, April 25, 2021

an old colleague sent me this: jcs/progman: progman.exe^H^H^H^H

I'm not sure the correct way to switch a window manager, I added a new file in /usr/share/xsessions and selected it in lightdm menu

it doesn't have a run dialog in menu, installed grun and it's good now

funny that I could just started emacs and not really needed anything else

for my reference, eww shortcuts:

space / shift space for screen up / down


the dev news page was an old express app by node js, using jade template, it works fine by I migrated to clojure today

it surprisingly doesn't have any index in tables, it's quite fun to tune the SQL (it's a large db)

Friday, April 30, 2021

few books I'm interested in:


saw this paper from 2019 on hackernews: Zanzibar: Google’s Consistent, Global Authorization System

some related links found on the discussion:

Blog Archive