Random thoughts

October 6, 2016


I see a lot of code bases getting into a mess through an inappropriate use of abstraction. Like many things in the Software Engineering industry, it is a tool which is in wide-spread use, learned from poor examples and not particularly well understood. For me, the best definition of an abstraction, and I apologise for not crediting whoever coined this phrase (_it may well have been me in my yuff :-) but I am pretty sure I read it somewhere_): ... Read more

October 6, 2016

Quick update on seafile and plex

So I am trying a new experiment… So…. how have you all been? It has been a worryingly long time since I last saw you all ;-) Life seems to be doing all it can to stop me blogging, so this is ‘fly by’ blog post to keep me in rhythm. seafile Wow, this is rocking my world big time - it is great. Disappointed there isn’t a ‘one-way sync TO the server’ as that would replace my use of rsync. ... Read more

October 1, 2016

Moving to seafile from pydio

About We occasionally need to share sensitive files with our clients: new deployment bundles, test data etc. Due to the sensitive nature of our work we must have the following: strong usernames/passwords no client installation so a decent web UI is necessary encryption in transit and at rest And as I will be administering it, it must also: be trivial to install and upgrade not break when you upgrade the OS As this is an experiment I want to self-host (as that increases security somewhat) and all the hosted options I have looked at are either too expensive or too cumbersome. ... Read more

September 29, 2016

Circle-ci and phantomjs

Another quick tip. I use the excellent cljsbuild to compile and test our ClojureScript projects (and I can’t believe how difficult it is to wire this stuff together in 2016!). To support continuous integration I use phantomjs to provide the JavaScript environment. Unfortunately circleci’s environment doesn’t have phantomjs v2 available to it and v1 has some troubling properties. It turns out, after much googling and dead ends, that it is pretty trivial to get phantomjs in your circleci environment, simply add: ... Read more

September 28, 2016

Keeping project buffers tidy with projectile

Projectile is an excellent library for managing ‘projects’ (where a project is typically a git repository). Today I found a new tip - projectile-kill-buffers which effectively removes the project from your current emacs session: projectile-kill-buffers is an interactive autoloaded compiled Lisp function in ‘projectile.el’. It is bound to SPC p k, M-m p k, C-c p k, <menu-bar> <tools> <Projectile> <Kill project buffers>. (projectile-kill-buffers) Kill all project buffers. [back] It is really useful if you are toggling between multiple projects and want to finish working on one of the projects. ... Read more

September 27, 2016

Git tagging your builds automatically

I need to write a much longer post to explain my thoughts on ‘versioning’ and what constitutes a release with today’s trends of continuous integration, but for now, a simple tip. I wanted a way to distinguish each build, not each release but each build. There is one excellent source of truth for that which is your git repository. Wouldn’t it be great if each build contained a full git log of what went into it? ... Read more

September 26, 2016

Lessons learned with Clojure's StackTraces

A hard day I learned the following lessons today: Simplest is best Evaluate your assumptions Sometimes development is just hard In a nutshell, our production app records UI errors and submits them to the server where they are pushed to the error-handler. Similarly, if an Exception is raised server side it is also pushed to the error-handler. However, the errors that had been captured were all ridiculously long stack traces with no references to any of my code. ... Read more

September 25, 2016

Blogging with cryogen (OLD)

A fresh start So, er yeah. I haven’t really blogged for a long time - this time it will be different. I promise. Hmm, I am already sceptical. It is well known that ‘trying harder’ never works, so what is different this time? Well, I have some objectives which are SMART: **S**pecific **M**easurable **A**greed upon **R**ealistic **T**ime-based In a democracy of 1 it is pretty easy to meet the ‘Agreed upon’ criteria. ... Read more

© Malte Kiefer 2016