Do not spawn processes on users requests

I’ve been playing recently an online game that has recently launched, that uses the following idea. When a user starts a match, it spawns a process in the server that acts as the opponent, generating the actions against the user. The game had a rough launch, with a lot of problems due it being played by a lot of people. And, IMHO, a lot of the problems can be traced to that idea. I see it’s a seductive one. If a user generates an interaction with the service that takes time (for example, a match for… Read More

All you need is cache

What is cache More than a formal definition, I think that the best way of thinking about cache is an result from an operation (data) that gets saved (cached) for future use. The cache value should be identifiable with a key that is reasonably small. This normally is the call name and the parameters, in some sort of hashed way. A proper cache has the following three properties: The result is always replicable. The value can be scrapped without remorse. Obtaining the result from cache is faster than generate it. The same result will be used… Read More

Gorgon: A simple task multiplier analysis tool (e.g. loadtesting)

Load testing is something very important in my job. I spend a decent amount of time checking how performant are some systems. There are some good tools out there (I’ve used Tsung extensively, and ab is brilliant for small checks), but I found that it’s difficult to create flows, where you produce several requests in succession and the input depends on the returned values of previous calls. Also, normally load test tools are focused in HTTP requests, which is fine most of the time, but sometimes is limiting. So, I got the idea… Read More

Compendium of Wondrous Links vol X

More interesting reads worth checking out Tech Use Python on AWS Lambda instead of JavaScript. Create Escher like images using Julia. BeeWares, a collection of tools to help in all the phases of Python development Crete project templates with Cookie Cutter. An interactive Maze Solver. About development I’ve still confused with this “learning code is cool”, as this article says. I’m not sure if this is a bad time to be a beginner.  Yes, it’s true that too many options is confusing, but the amount and quality of instructional material at the moment is… Read More

Leonardo numbers

Because Fibonacci numbers are quite abused in programming, a similar concept. My first impulse is to describe them in recursive way: But this is not very efficient to calculate them, as for each is calculating all the previous ones, recursively. Here memoization works beautifully Taking into account that it uses more memory, and that calculating the Nth element without calculating the previous ones is also costly. I saw this on Programming Praxis, and I like a lot the solution proposed by Graham on the comments, using an iterator. The code is really clean.

Compendium of Wondrous Links vol IX

Welcome back to this totally non-regular compilation of interesting reads. Enjoy! A Pixel Artist Renounces Pixel Art. A module of Python utilities aiming to complement the standard library. Boltons Named Pipes in Unix. Pipes are a really powerful tool. I’m each day more convinced that the biggest problem that an developer faces today is the internal expectations and unfair comparison. Productivity vs Guilt and Self-Loathing.   On secretly Terrible Engineers Curiously enough, in my current job, one of the first things my manager said to me was: “your interview was brilliant, but here’s a… Read More

ffind v0.8 released

Good news everyone! The new version of find (0.8) is available in GitHub and PyPi. This version includes performance improvements, man page and fuzzy search support. Enjoy!

Optimise Python with closures

This blog post by Dan Crosta is interesting. It talks about how is possible to optimise Python code for operations that get called multiple times avoiding the usage of Object Orientation and using Closures instead. While the “closures” gets the highlight, the main idea is a little more general. Avoid repeating code that is not necessary for the operation. The difference between the first proposed code, in OOP way and the last one The main differences are that both the config dictionary and the methods (which are also implemented as a dictionary) are not… Read More

Compendium of Wondrous Links vol VIII

More great reads! About code creation It seemed like a good idea at the time. How tech decisions done at some point in time can have a big impact much much later. Unfortunately, this is unavoidable, developing software is based in dealing with imperfect information all the time. Fear Driven Development. Dealing with different languages is difficult in programs (and otherwise). Seven Laws of Sane Personal Computing. Great compilation of Python libraries that deserve to be widely used. Debug like Sherlock Holmes. One of my favourite ways of thinking on debug is: “Once you eliminate the… Read More

Compendium of Wondrous Links VI

They finally found all those buried Atari cartridges, and confirmed a beloved urban legend. Just wonderful. This episode of @ExtraCreditz follows up an idea I always had about education. The key is being demanding, but allowing a lot of opportunities. Amazing book introduction, showing how no one is immune to think that they are stupid. Lots of things in live are hard. Readability in code is not about being literary. Is about making the code easy to understand. You don’t read code, you explore it. The Great Works of Software. The premise is extremely… Read More