I use Deja-Dup, to backup my Ubuntu machines. And just like shimo describes in this blog post , I too want to avoid backing up gigabytes of node_module directories 1 . But I also want to avoid backup up gigabytes of target directories from building Rust projects with Cargo. I have accumulated some 50+ Rust codebases scattered throughout my project directories. Their combined target directories…
Deleting content, reliably, from a decentralised network is just not possible. The fediverse (Mastodon, Pleroma, PixelFed, etc.) in theory, never forgets. The internet never forgets either. When I helped design a decentralized application[1], and later again an Event-Sourced setup, we applied cryptography to solve this: encrypt all data that should be deletable, then throw away the key(s) to…
A few months ago, we shelved Plannel, on which I worked as co-founder for about a year. There was a need, there was problem, but the actual solution turned out to not be tech (to improve project communication between clients and web/creative agencies), but human (really just a “project/account manager”, not more tools). It’s a hard lesson, but a good one. After trying to join a few existing…
Let’s address the mammoth in the room: the fediverse , the network of mastodon servers, is very inefficient. In this post I’ll show why it is inefficient and why that isn’t a problem. A great analogy to explain this with is growing food. Gardening: making my own food, decentralized I spend a lot of my time in my vegetable garden, our communal orchard, chicken coop, and keeping bees. A lot of my…
Most blogs have a comment section below each article. A relic from the days that blogs itself were the bulk of “social media”. Before Slashdot and Digg, there simply was no place to discuss the article other than in the comments below that article. It’s still a core feature of Drupal, WordPress, and other blog-software. A static site, however, cannot have comments in the same way. The…
When writing software in an OOP language, Value Objects are an invaluable (pun intended) tool in my toolbelt. The idea of Value Objects arose from Domain Driven Design , but are useful in and on itself, so outside of DDD. Examples of Value Objects are things like numbers, dates, monies and strings. Usually, they are small objects which are used quite widely. Their identity is based on their state…
Last week I stumbled upon a StackOverflow answer , where Shepmaster wrote a great quote about software testing: “How do I test X” is almost always answered with “by controlling X” This is simple, and may sound trivial. But it has some interesting consequences. Ability to control X First, there is the question: “can I control X?”. Because if you cannot, testing it becomes impossible. When X is some…
In this article I’m putting together my quotes, thoughts and notes on the idea that Frameworks harm the maintainability of the software you build in that framework. I’m proposing that Frameworks: are harming maintainability, but not deliberate. have different goals than you or your team. make trade-offs that harm maintainability of the projects built in them. are designed to take your project…
In this post I’ll try to explain why not all technical debt is crippling. And what I learned, dealing with technical debt. I’ll try to show that: Technical Debt isn’t always bad. It is bad, dangerous even, when it starts to compound. The interest must be calculated into operations. We must deliberately and actively choose when and where to take on technical debt. One trick to take on technical…
By now, there are thousands of articles explaining why Rust is a good option/the fastest/cleanest/nicest/whateverest. While reading about objective attributes that speak for- or against a programming language, a talk by Owen Synge stuck with me. He explains why he likes Rust. Why he chose it. And what he values in a language. I took this idea for my rust presentation . And now wanted to explain it…
Event Sourcing (ES) is one of those software paradigms that I wish I had known about much earlier. In hindsight several of my projects and companies would have benefited greatly from an Event Sourced Architecture. Event Sourcing is, by no means, a magic bullet. It’s an architecture that has a place and use. But for many spreadsheets it turns out to be an excellent fit! Spreadsheets are notorious…
Many people keep repeating that Ruby is slow. It is. But that doesn’t matter, because your database is so much slower that it is the bottleneck. So, an alternative title would be “Ruby is slow, but that doesn’t matter for you.” While writing a gem that offers key-value storage in your existing Postgresql database , and benchmarking it, my old mantra kept popping up: Ruby isn’t slow, the database…
Almost 12 years ago I answered a StackOverflow question is ruby on rails (or at least the community) dying? [closed] with [there is] still [a] very active community around it . Today, 2022, I see this declining more rapidly than before. The most obvious (and unscientific) place to look is Google Trends. For both Ruby, and Ruby on Rails, we see a clear downward trend for years. First a sharp bump,…
Last summer I started a sideproject. Post-a-Coin . A simple and straightforward idea, really: you can buy high quality postcards with Bitcoin preloaded to give as a gift. For the crypto-nerds: a paper wallet, really^1. I envisioned it as a small side-project: a tiny company that makes some revenue to keep itself running, but which, above all, helps to put bitcoin into more hands. This autumn, I…
When provisioning servers with Ansible, managing the secrets is quite a hassle, even with ansible-vault helping there. A typical ansible-vaults contains all sorts of critical secret keys, such as API-keys, root (sudo) passwords of sysadmins, databases passwords and so on. And it is protected with a single password. Anyone running ansible, needs that password; otherwise ansible won’t provision…
Anno 2019 gaat het deponeren van algemene voorwaarden , bij de KVK gelukkig al wel digitaal. Maar daar is dan alles ook mee gezegd. In de instructies van deze KVK is te lezen: “Voorzie het document van je bedrijfsnaam (deze bedrijfsnaam moet gelijk zijn aan de naam waarmee je bent ingeschreven in het Handelsregister) en stuur dit naar …. De datum van ontvangst van je mail of post wordt gehanteerd…
In all the blockchain hype, a simple, yet self-refuting idea keeps popping up: a Private Blockchain . In order to understand why a private blockchain is nonsense, we must first define what a block chain is and what it is not. Since Nakamoto coined (PDF) the term, lets see if his description helps: a peer-to-peer distributed timestamp server to generate computational proof of the chronological…
So, today, Brendan Eich spoke up against mining on your browser. Eich is the founder of Mozilla, Inventor or JavaScript, and current CEO of the ground-breaking browser Brave . On twitter, he says : Brave now blocks the abusive-even-when-opt-in (1.75 cores on my MBP which became too hot to call a laptop) 1st party Monero mining script at Salon, thanks to fast work by @lukemulks. I have several…
When you use Tinder, and you swipe someone, you probably don’t sit there thinking “Let’s create some TCP packages and send them over IP, hoping they reach the phone of that nice looking fellow there”. You probably just think in terms of “lets swipe this nice fellow, Leo” I’m bringing Tinder into this story to show the power of a layered architecture. You can swipe Leo because the Internet is made…
F/Rite air, was een 1-aprilgrap van IEX in 2005. Zij toonden hiermee aan dat mensen, zonder enige kennis van zaken, zonder enig onderzoek, aandelen kochten in een tech-bedrijf wat “gebakken lucht” verkocht. Dat was het hoogte (of laagte-)punt van de dot-com bubble. Nu is er de blockchain bubble. Vooral zichtbaar in de vorm van ICO’s. Deze ICO’s zijn de laatste dagen overal in het nieuws . ICO’s,…
My current team found out that we should have tracked some time over the last year. Extracting timelogs in retrosepct is not fun. Git helps a lot, combined with chat-logs from Slack, Google Calendars will give a good basis. A day of grep, sed, and awk, and you have some time-logs. I decided that from now on, I want to track what I start and finish working on in a basic log. And I am using git with…
Beste Nu.nl, Wij zien dat u een hele zwik aan trackers , analytics , en andere aggressieve, privacyschendende bedrijven op uw site toelaat. Dit vinden wij jammer, want NU.nl verdient haar geld blijkbaar met het verkopen van haar bezoekers aan allerhande louche bedrijven. Wij willen daarom geen uitzondering maken voor NU.nl en zullen advertenties blijven blokkeren. Nu.nl controleert of uw browser…
For a crafts e-commerce shop , built with Spree , I wanted to add an option to sort the products on the products page. In this blogpost, I’ll describe how one can build such a feature, more to create some understanding of how in Spree such customisations can be developed. Spree has everything in place to add this, but it can be a bit daunting to find all the bits and pieces that could and should…
FactoryGirl is a solution for cleaning up the repetitive task of setting up test data, used in many Rails projects. I think FactoryGirl encourages bad design by hiding design problems. The need for repetitive or complex test-data is an indication that your code and its API need improvement. Instead of improving the application, FactoryGirl enables you to only improve this in your test suite: that…
There is no such thing as “a good WYSIWYG” without looking closely at the case you are trying to solve and the preconditions you want to set. WYSIWYG, is, unfortunately, a label that is applied to far too many solutions for varying problems. When people ask for “A WYSIWYG-editor” they are often asking for a solution to one of the following three problems: Needing to add markup up to body-texts. In…
Schrijvers en uitgevers zijn bang. Mensen kopen hun boeken niet meer . Goh. Al in 2010 schreef ik al dat het veel makkelijker is om illegale boeken te krijgen dan legale. Daar is niets in veranderd. (Ik kocht, trouwens, in 2013 voor bijna €200 boeken voor mijn e-reader, maar dat terzijde). Er zijn, voor mij, als fervent lezer, ongeveer de volgende mogelijkheden, in volgorde van moeilijkheid: Het…
Een van de mooie dingen van een verstorend concept als Bitcoin, is dat “de gevestigde orde” zich er geen raad mee weet. Dat is niet erg, voor een deel heeft dat tijd nodig, voor een ander deel, zorgt het voor marktvernieuwing (als in: diegenen die blijven vasthouden dat paard en wagen echt een beter vervoermiddel is dan een auto of fiets, gaan failliet). Maar mooier is, om te zien hoe de Dr.…
Deze vraag kreeg ik de afgelopen weken verschillende keren. Laat ik beginnen met de bekende waarschuwing die ik eerder al gaf : Weet wat je doet. Besef dat de kans groot is dat je alles verliest. Misschien is de kans dat je alles verliest wel groter dan dat je iets aan je bitcoin-avontuur overhoud. Dit is dan ook stap 1: Informeer jezelf! . En dek jezelf in: ga niet je hele spaarrekening…
Last few weeks, I had to explain quite a few times what it is I am doing now. Time for a summary. I am not a WordPress Developer. Source of the confusion is Savvii , a brand-new WordPress hoster where I work. Although Floor Drees forbade me to use the word Senior , I am the Senior Developer at Savvii. And I develop in Ruby. And Rails. And then some more. I also don’t develop with or for Drupal.…
Dit artikel verscheen eerder op de blog van Savvii , de Wordpreshoster waar ik momenteel werk. Als hoster willen we natuurlijk zoveel mogelijk automatiseren, hiervoor moeten we allerhande onderdelen ontwikkelen: van het afhandelen van bestellingen tot het updaten van de wordpress-sites. Voor ons is dan van belang dat dit backend : snel aan te passen is aan nieuwe eisen, wensen en inzichten goed…
Monday (5th of Juli August) I am starting at the startup Savvii . To be part of the team that wants to bring you the very best WordPress hosting in the Netherlands. I am going to develop the software for the back end: program the robots that do all the magic behind-the-scenes work. Because I am a Ruby-developer, I’ll do this in Ruby. We needs some technical things like long-running threads and…
Het bedrijf dat in Nederland pintransacties verwerkt, Equence , kondigde aan om ons pingedrag te verkopen aan geïnterresseerde marketeers en bedrijven. Ze beweren dat deze transacties anoniem zijn. Dat is onzin, pintransacties (Of iDeal, creditcard, Paypal of eender welke digitale transactie) kán eenvoudigweg niet anoniem zijn; je rekeningnummer is immers direct gekoppeld aan je, geïdentificeerde,…
Afgelopen dagen heb ik aardig wat vragen over Bitcoin beantwoord. Daarom een algemene samenvatting. In de vorm van een waarschuwing. Bitcoin is overal in het nieuws. BBC , Fox en vandaag ook het NOS achtuurjournaal . De reden is de enorme wisselkoersstijging . Vanmiddag ging de prijs van 1 Bitcoin door de $100-grens: je betaalt dus $100 voor één Bitcoin. Begin dit jaar was dat nog minder dan $20.…
Like in most programming languages, when you write paths in ruby, e.g. to open a file you pass in a string: filename = "bar.txt" File . open ( "/home/foo/" + filename ) This is a serious smell for several reasons. Not, as people often believe, just to cater the few Ruby developers on Windows (Windows knows how to follow “/foo/bar/” paths just as well as “\foo\bar” nowadays). But mostly because…
Nearly a year ago, long before I decided to move out of Drupalwork entirely , I reported a security vulnarability in Drupal 7 core in imagecache. Since imagecache is used on most Drupal6 instances this problem occurs there too. I had the draft for this poste, tucked away on an offline disk (security-details should not live “online” or in “the cloud”, ever); and, obviously, the day I arrive in…
TL;DR : Tagadelic is close to a Drupal 7 release, with an easy upgrade path to Drupal 8. It is completely rewritten, Object Oriented and Test Driven. Since I don’t do any Drupal anymore, I am looking for someone who can maintain a clean, OOP and TDD-module, to take it over from me. There is just so much you can do when porting an age-old module again and again. Tagadelic has been around since…
I am improving a Command line app to manage my todos . I am developing it entirely ‘Behaviour Driven’, using Cucumber and Aruba . All is pretty straightforward, but I had a hard time testing the colors in the output. Colors are made with Rainbow ; which is really neat, but sometimes a little too smart. Rainbow detects when it outputs to something that cannot handle colors and turns them off. The…
The Cucumber Book describes a really nifty trick when testing web-pages: open the browser when a step fails. This is a feature provided by cucumber itself. Add a support file features/support/debugging.rb : After do | scenario | save_and_open_page if scenario . failed? end And add launchy to your gemfile, and bundle install . (or install it with whatever else you use). group :test do #... gem…
Last elections, I stepped forward as a volunteer for the Dutch Pirateparty . They were struggling with Drupal, and the most pressing issue was getting a webshop going, using the Dutch Payment system iDeal, to take care of new member subscriptions . I had quite some experience with Drupal e-commerce, and the default Dutch payment-method iDeal , in Drupal. Yet decided to build something from scratch…
Statische sites, bijvoorbeeld weblogs gemaakt met simpele HTML-bestandjes, maken een terugkomst. Gereedschappen als Jekyll samen met moderne revisiebeheersystemen als git , maken het opzetten van een simpele, statische site, vaak vele malen makkelijker dan het inregelen van een CMS. In dit artikel leg ik kort uit hoe een CMS zich dat verhoudt tot een statische site. Daarna bekijk ik een rijtje…
The upgrade to Ubuntu 12.10 upgraded my Ruby version to 1.9.3 (yay!). This, however, broke my command-t a vim-plugin to open files quickly. Command-t is a compiled plugin (for speed) and needs to be compiled against the system-wide Ruby. Else vim crashes with a SEGV . A little searching , showed me that command-t was the problem and needed to be recompiled. Obviously only when you had installed…
Recently I rolled out a Ruby-on-Rails/ Spree -based webshop on the budgethoster Site5 . I thought to share some gotcha’s, reasoning around this project. To debunk the idea that hosting for Rails is either complex and hard, or done on Heroku. To explain a bit about Spree as a good option for your e-commerce (or not) and to go a little into how I modified Spree. My wife makes custom bags,…
Designs should be leading when building a website or -application. There! I said it. Sure, form follows function; content is king and so on: a design should be a Good Design to begin with: it should carry the function, content and user-experience to a higher level. So, for the sake of the argument, let us assume you have the Perfect Design For Your Project, Audience and Branding. It is UX-tested.…
As a Dutch webdeveloper, I see mostly Dutch websites being built. And I see many team struggling with how to do this well. I developed a set of best practices, which I want to share and discuss. If your entire teams’ first language is English, this post is probably not for you. And if you are the kind of person who thinks “are there actually people out there who write Russian code, Swedish…
Over eleven years ago, I got involved in Drupal , after running two personal blogs on Drupal. A few years later, to my surprise, I found myself to be amongst the first few people to offer commercial and professional Drupal services . And boy, it was a ride. With no IT-education, other than webmonkey , the fantastic Drupal-community allowed me to piggyback and stand on shoulders. Great, strong…
One of the most surprising things I learned when moving away from Drupal-development towards Rails development, is the impact of fast and low-barrier deployment. We all know that Drupal’s deployment is severely broken . I always thought fast and low-barrier deployment was just a nice-to-have, because it would bring down the actual hours spent on deploying. But it gives you so much more: Very quick…
I have been involved in many “we want to move all our websites to one technology” projects. Mostly Drupal. Mostly where people wanted to move from a wild range of CMSes, forum-systems, blogging-tools and so on, written in various languages towards everything-in-Drupal. Smart move, you might think. Not often, I know now. We all like car analogies, when it comes to websites, so here is one: my 1986…
If you are a Vim user, you probably want the escape key more at hand . On Ubuntu (And probably every Gnome3 desktop) this is really very easy. It comes with point-and-click tools to map your key to about everything you can think of; and more. If you google this problem, you find all sorts of xmonad CLI commands. They work too, but this is far easier for the stupid Linux-user like me. Open System…
President Obama heeft alle federale overheidsorganisaties in de Verenigde Staten twee maanden gegeven om hun informatie via APIs aan te bieden . Dat getuigt van een goede visie. Overheden zijn helaas geen webbouwers. Iedereen kent voorbeelden van verschrikkelijke websites van overheden. Regelmatig lees je over dramatisch verlopende ICT-projecten in gemeentes, rijksoverheden en aanverwanten. Zo…
Wired heeft een verhaal over Thomas Valenti. Als fan, ontwierp en printte hij poppetjes voor Warhammer . En deelde hij die op Thingiverse . En dat mag niet. De advocaten van Games Workshop, de Britse fabrikant van het spel, hebben de bestanden waarmee je de poppetjes kon printen, offline laten halen. En zo begint de “oorlog”. Een fabrikant als Alessi, die plastic prullaria mooi maakt; en zo een…