Clippan CouchDB cli


I love CouchDB. To me it’s a simple, easy to understand document store with predictable, reliable master-master synchronization/replication and, when needed, high availability. And it can easily be extended beyond basic use cases through views. It can be fully controlled and used using regular HTTP (REST) requests It also has a fantastic web based admin interface, “Fauxton”. However, it doesn’t really have a cli (beyond using curl with some tricks). So I wrote one: clippan.…
Read more ⟶

Go Locking Pitfall


Can you see (and explain) the issue with the following (slightly contrived) code? package main import ( "fmt" "sync" ) type Example struct { m sync.RWMutex a int } func (e *Example) ReadA() int { defer e.m.RUnlock() e.m.RLock() return e.a } func (e *Example) WorkWithA() int { defer e.m.RUnlock() e.m.RLock() val := e.ReadA() val += 1 return val } func (e *Example) UpdateA(newA int) { defer e.…
Read more ⟶

Tweaking Oxygenos on Oneplus 10 Pro


I recently picked up a OnePlus 10 pro. It seems to be one of the most feature-rich modern phones on the market right now. It has loads of memory and should receive updates until 2026 so although the price is rather steep, I should be good for at least 4 years, unlike the Pixel 3a XL that I purchased 2 years ago which is already no longer receiving updates and which is continuously running out of storage memory.…
Read more ⟶