Simulate various connection problems with Toxiproxy and Java’s HttpURLConnection to see what kind of errors get produced: connect timed out vs. read timed out vs. connection refused … . Results: System: openjdk 11.0.1 2018-10-16 (.setConnectTimeout 1) => java.net.SocketTimeoutException: connect timed out (.setReadTimeout 1) => javax.net.ssl.SSLProtocolException: Read timed out on HTTPS, java.net.SocketTimeoutException: Read timed out on HTTP (or Toxiproxy with 5s latency or timeout ) Nothing listening at the port => ...
Read More »Home »
Clojure – comparison of gnuplot, Incanter, oz/vega-lite for plotting usage data
What is the best way to plot memory and CPU usage data (mainly) in Clojure? I will compare gnuplot, Incanter with JFreeChart, and vega-lite (via Oz). (Spoiler: I like Oz/vega-lite most but still use Incanter to prepare the data.) The data looks like this: ;; sec.ns | memory | CPU % 1541052937.882172509 59m 0.0 1541052981.122419892 78m 58.0 1541052981.625876498 199m 85.9 ...
Read More »An answer to CircleCI’s Why we’re no longer using Core.typed
CircleCI has recently published a very useful post “Why we’re no longer using Core.typed” that raises some important concerns w.r.t. Typed Clojure that in their particular case led to the cost overweighting the benefits. CircleCI has a long and positive relation to Ambrose Bonnaire-Sergeant, the main author of core.typed, that has addressed their concerns in his recent Strange Loop talk “Typed ...
Read More »Shipping a Refactoring & Feature One Tiny Slice at a Time, to Reduce Risk
You don’t need to finish a feature and your users don’t need to see it to be able to release and start battle-testing it. Slice it as much as possible and release the chunks ASAP to shorten the feedback loop and decrease risk. My colleagues have been working on a crucial change in our webshop – replacing our legacy shopping ...
Read More »There will be failures – On systems that live through difficulties instead of turning them into a catastrophy
Our systems always depend on other systems and services and thus may and will be subject to failures – network glitches, dropped connections, load spikes, deadlocks, slow or crashed subsystems. We will explore how to create robust systems that can sustain blows from its users, interconnecting networks, and supposedly allied systems yet carry on as well as possible, recovering quickly ...
Read More »Challenging Myself With Coplien’s Why Most Unit Testing is Waste
James O. Coplien has written in 2014 the thought-provoking essay Why Most Unit Testing is Waste and further elaborates the topic in his Segue. I love testing but I also value challenging my views to expand my understanding so it was a valuable read. When encountering something so controversial, it’s crucial to set aside one’s emotions and opinions and ask: “Provided ...
Read More »Tiny, Tiny Steps – Experience Report Developing A Feature In Minimal Value-Adding Increments
A post for those who want to see what an iterative, MVP-driven development of a feature looks like. Once upon time, there was a webshop portal with hundreds of partner webshops displayed on the front page. Potential users wanted to find out if their favorite webshops or a particular type of goods were available, existing users wanted to find a ...
Read More »Clojure: How To Prevent “Expected Map, Got Vector” And Similar Errors
What my Clojure code is doing most of the time is transforming data. Yet I cannot see the shape of data being transformed – I have to know what the data looks like on the input and hold a mental model of how they change at each step. But I make mistakes. I make mistakes in my code so that ...
Read More »Frustration-Driven Development – Towards DevOps, Lean, Clojure
My wife has mentioned that she likes my passion for doing things right in software development. That made me thinking, why do I actually care so much and do not just enjoy the coding itself? It boils down to that I am not happy until my code is in production. Seeking the satisfaction of having my code used by and ...
Read More »