Jim Cheung

Friday, March 05, 2021

emacs

a simple function to lock the buffer window, I used it on eshell and a notes buffer, so even delete-other-windows won't kill it

also I don't need it, but it's easy to create a flag for toggle

(defun lock-window ()
  (interactive)
  (let ((window (selected-window)))
    (set-window-dedicated-p window t)
    (set-window-parameter window 'no-other-window t)
    (set-window-parameter window 'no-delete-other-windows t)))


the easiest way I could find to include environment variables in a Makefile:

.EXPORT_ALL_VARIABLES:

FOO=bar
BAR=baz

all:
	npm run dev

it will not pollute the shell too


reading Data Science at the Command Line, 2nd Edition, it provides some command line tools for different kind of data format, quite useful

install the csvkit:

$ brew install csvkit

convert xlsx file to csv:

$ in2csv top.xlsx | tee top.csv | head

to extract specific sheet:

$ in2csv --names top2000.xlsx
$ in2csv --sheet Foo top2000.xlsx

grep in a column and output as csv

$ csvgrep top2000.csv -c ARTIEST -r '^Queen$' | csvlook -I

select columns from csv

$ cat top.csv | xsv select name,height,mass,sex,homeworld,species | csvlook

database result to csv

ql2csv --db 'sqlite:///r-datasets.db' \
> --query 'SELECT row_names AS car, mpg FROM mtcars ORDER BY mpg' | csvlook

Saturday, March 06, 2021

the above emacs function can be turned into a minor mode:

(define-minor-mode locky-window-mode
  "lock the buffer to a window"
  :lighter " LOCKED"
  (let ((window (selected-window)))
    (set-window-dedicated-p window locky-window-mode)
    (set-window-parameter window 'no-other-window locky-window-mode)
    (set-window-parameter window 'no-delete-other-windows locky-window-mode)))

(add-hook 'eshell-mode-hook 'locky-window-mode)
(global-set-key (kbd "C-c l") 'locky-window-mode)


found a great article: My go-to Clojure libraries

and interesting idea that using Interceptor pattern (exoscale/interceptor) to replace /Ring/ middlewares:

(def cookies
  {:name ::cookies
   :enter (fn [ctx] (update ctx :request #(cookies/cookies-request % {})))
   :leave (fn [ctx] (update ctx :response #(cookies/cookies-response % {})))})

also provided lots of good libraries:


found a clojure news site: today in clojure

Thursday, March 11, 2021

saw more and more zig(lang) lately, for example:

looks like it is like golang, not much syntax (unlink rust), maybe I should give it a try:


talking about rust: Why asynchronous Rust doesn't work

brings out an article from 2015: What Color is Your Function?

I still can't do async, golang's concurrency approach is easier to me.

recently I'm trying clj-commons/manifold: a compatibility layer for event-driven abstractions

manifold's creator Zach Tellman did a good talk on the why: Zach Tellman - Everything Will Flow

Wednesday, March 17, 2021

watched Clojure Parallelism Beyond Futures

some useful libraries:

lasync is very simple and useful, I also like you can just print out the queue to check basic info

claypoole is useful when you need to use pmap

Monday, March 22, 2021

some clojure resources:

Go to this URL http://clojure.github.io/clojure/clojure.core-api.html and start reading from top to bottom.


reading Network Programming with Go, notes here

Blog Archive