powRSS
Home Recent Glimpses Shuffle Blogs Random

New: Explore conversations across blogs with powRSS Mentions

Timo Tijhof

Timo Tijhof

Principal Engineer, Wikimedia Foundation.

All posts (24)

What’s the deal with these string methods, and how are they different? String substr() str.substr(start[, length]) This method takes a start index, and optionally a number of characters to read from that start index with the default being to read until the end of the string. The start parameter may be a negative...
How a long sequence of dots allowed a regex to reach its internal stack limit. Premise Wikipedia’s production error logs were reporting an increase in app crashes from the search results page. The internal Logstash error report looked as follows: [RuntimeException] Cannot consume query at offset 0 (need to go to...
Why does software accept invalid data? And, at what software layer should we reject it? Also, what are “namespaces” and “special pages” on Wikipedia? Premise One day, our server monitoring was reporting a high frequency of fatal errors from web servers. Over 10,000 an hour. The majority shared a single root cause –...
These are short stories from bug hunts and incident investigations at Wikipedia. Impact After developers submit code to Gerrit, they eagerly await the result from Jenkins, an automated test runner. Every day during the 15 minute window before 5 PM in San Francisco, code changes submitted for code review would have...
These are short stories from bug hunts and incident investigations at Wikipedia. New database partition A user reported a timeout error for certain queries from the Public log viewer on commons.wikimedia.org. Database administrator Manuel Aróstegui investigated the underlying query and found that it was slow (and...
This week saw the conclusion of a project that I’ve been shepherding on and off since September of last year. The goal was for the initialisation of our asynchronous JavaScript pipeline (at the time, 36 kilobytes in size) to fit within a budget of 28 KB. The above graph shows the transfer size over time.…
What’s the worst that could happen after npm install? When you open an app or execute a program from the terminal, that program can do anything that you can do. In a nutshell: Imagine if your computer were to disappear in front of your eyes and re-appear in front of mine. Still open. Still unlocked. What…
Six years ago (in 2012), I was looking for a newsletter about browser releases. At the time, my motivation was to remember to regularly check and update the jQuery TestSwarm framework as needed for each new browser release. I found a simple overview at browsehappy.com, run by WordPress. Lacking RSS, I decided to...
This post shows how we measure and interpret load times on Wikipedia. It also explains what real-user metrics are, and how percentiles work. Navigation Timing When a browser loads a page, the page can include program code (JavaScript). This program will run inside the browser, alongside the page. This makes it...
Today, I’d like to challenge the assert.ok and assert.not* methods. I believe they may’ve become an anti-pattern. assert.ok Using assert.ok() indicates one of two problems: The former necessitates improvement to the code being tested. The latter comes with two additional caveats: Common examples: assert.not Using...
How did Apple create Safari, and what is PhantomJS? Safari In January 2003 Apple announced Safari, their new web browser for Mac. The Safari team had just spent 2002 building Safari atop KHTML and KJS, the KDE layout and javascript engines developed for Konqueror. The Safari team kept the codebase somewhat modular....
re·buke verb express sharp disapproval or criticism of (someone) because of their behavior or actions “she had rebuked him for drinking too much“ “the judge publicly rebuked the jury“ noun an expression of sharp disapproval or criticism “he hadn’t meant it as a rebuke, but Neil flinched“ (from the Oxford English...

Page 2 of 2