The Value and Perils of Performance Benchmarks in the Wake of TechEmpower's Web Framework Benchmark

The TechEmpower's Web Framework Benchmark is quite interesting but the comments following it at HackerNews are even more so. That is at least the constructively critical ones that highlight many of the issues with benchmarks while also reminding us of their value. One could formulate the benchmark paradox:

Benchmarks are important for rational technological choices yet it is very hard if not impossible to perform them in a sensible way.


I would like to record here some of the important points, mainly as a future reference for myself for whenever I will be dealing with benchmarking.


Continue reading →

Most interesting links of Mars '13

Recommended Readings

A lot of stuff this month since I have finally got time to review some older articles. Quite a few articles by Fowler. Few really great (yet short) talks on agile & SW development.
Continue reading →

Tools for Editor - Browser Integration for Interactive JS/HTML Development

Chrome Development Tools and similar ones are great for interactive, exploratory coding of JavaScript, HTML, and CSS - but the changes aren't persistent and the tools haven't the power of a programmer's editor. I'd like to be able to use a powerful editor yet be able to see changes to JS/HTML/CSS without having to save-[compile]-reload and I want to be able to execute pieces of JS in the context of the browser. Fortunately, there are ways to get at least some of this and it is getting continually better. Let's see what tools we have now.

These tools usually use either remoting capabilities of the browser or a long-polling connection to the web site, sending and executing JavaScript.


Continue reading →

Markdown + JavaScript = Great HTML Presentation Decks

You can easily create beatiful, interactive, simple presentations by writing them in Markdown (falling back to HTML whenever needed) with special markers separating the individual slides and using JavaScript to render it into an interactive HTML presentation. We will now look at a few tools that can help you with that. My favorite one is Reveal.js that has recently got out-ot-the-box support for full Markdown presentations.


Continue reading →

Escaping the Zabbix UI pain: How to create a combined graph for a number of hosts using the Zabbix API



This post will answer two questions:
  • How to display the same item, f.ex. Processor load, for a number of hosts on the same graph
  • How to avoid getting crazy from all the slow clicking in the Zabbix UI by using its API
I will indicate how it could be done with plain HTTP POST and then show a solution using the Python library for accessing the Zabix API.

The problem we want to solve is to create a graph that plots the same item for a number of hosts that all are from the same Host group but not all hosts in the group should be included.


Continue reading →

You are not lean unless you have a clear objective and measure

A colleague of mine, Bjørn Remseth, had a good observation:
Without a clear objective you cannot be lean.

Continue reading →

From Stateful Iteration in Python to Stateless Clojure

I have a piece of Python code that leverages a stateful object and was wondering how to reimplement it in the inherently stateless Clojure, without resorting to its facilities for managing state. It turns out to be simple and beautiful.

Continue reading →

Books Our Developers Should Read

Republished from blog.iterate.no with the permission of my co-author, Morten Berg, and later updated.

There are a few books that every developer in Iterate should read because they express what we believe in and are extremely valuable in themselves. The books chosen are generally and broadly useful and not tied to some too limited domain (contrary to e.g. Effective Java).  The list is kept as short as possible, about 4-5 books, and is revised regularly.

Why particularly these books, why lean and agile? Our people are primarily responsible for crafting solutions for our clients, for making sure that they use the customers' limited resources efficiently to produce the maximal business value possible. However, according to our experience, it is never truly known upfront where that value lies. Software development is therefore inherently a learning and exploration process. A process that needs to be continually adjusted based on empirical feedback from the reality and on shifting conditions. This is what lean is about: eliminating waste, maximizing value by maximizing learning, making sure that the right product is built. We value software craftmanship and building things right - but building the right things is crucial.

Here are the books and why we believe they are so important.


Continue reading →

Most interesting links of February '13

Recommended Readings


Continue reading →

JDBC: What resources you have to close and when?

I was never sure what resources in JDBC must be explicitely closed and wasn't able to find it anywhere explained. Finally my good colleague, Magne Mære, has explained it to me:
In JDBC there are several kinds of resources that ideally should be closed after use.  Even though every Statement and PreparedStatement is specified to be implicitly closed when the Connection object is closed, you can't be guaranteed when (or if) this happens, especially if it's used with connection pooling. You should explicitly close your Statement and PreparedStatement objects to be sure. ResultSet objects might also be an issue, but as they are guaranteed to be closed when the corresponding Statement/PreparedStatement object is closed, you can usually disregard it.

Continue reading →

Most interesting links of January '13

Recommended Readings

Various
Continue reading →

The Sprinting Centipede Strategy: How to Improve Software Without Breaking It

Re-published from blog.iterate.no.

Our code has been broken for weeks. Compiler errors, failing tests, incorrect behavior plagued our team. Why? Because we have been struck by a Blind Frog Leap. By doing multiple concurrent changes to a key component in the hope of improving it, we have leaped far away from its ugly but stable and working state into the marshes of brokenness. Our best intentions have brought havoc upon us, something expected to be a few man-days work has paralized us for over a month until the changes were finally reverted (for the time being).

Lessons learned: Avoid Frog Leaps. Follow instead Kent Beck's strategy of Sprinting Centipede - proceed in small, safe steps, that don't break the code. Deploy it to production often, preferably daily, to force yourself to really small and really safe changes. Do not change multiple unrelated things at the same time. Don't assume that you know how the code works. Don't assume that your intended change is a simple one. Test thoroughly (and don't trust your test suite overly). Let the computer give you feedback and hard facts about your changes - by running tests, by executing the code, by running the code in production.


Continue reading →

Bash: Parse Options And Non-Options With Getopts

Parsing script or function options and non-option arguments is easy in Bash with getopts
Continue reading →

Bash Magic: List Hive Table Sizes in GB

To list the sizes of Hive tables in Hadoop in GBs:

sudo -u hdfs hadoop fs -du /user/hive/warehouse/ | awk '/^[0-9]+/ { print int($1/(1024**3)) " [GB]\t" $2 }'

Continue reading →

Fast Code To Production Cycle Matters: For Pleasure, Productivity, Profit

I spent one afternoon adding a much needed feature to our application. Now I have been waiting for several days for various people to review and approve it. And I have just realized how tiring it is and how much energy it takes from me.

Continue reading →

Copyright © 2024 Jakub Holý
Powered by Cryogen
Theme by KingMob