RSSAmplifier

Blog

Søren Sandmann Pedersen

ssp.impulsetrain.comRSS feed ↗10 posts

Latest posts

First Class Goto

Oort is an experimental programming language I have been working on, on and off (mostly off), since 2007. It is a statically typed, object-oriented, imperative language, where classes, functions and methods can be nested arbitrarily, and where functions and methods are full closures, ie., they can be stored in variables and returned from functions. The control structures are the usual ones: if ,…

Celebrities die 2.7183 at a time

The claim that celebrities die in threes is usually dismissed as the result of the human propensity to see patterns where there are none. But celebrities don’t die at regularly spaced intervals either. It would be very weird if a celebrity predictably died on the 14th of every month. And once you deviate from a regularly spaced pattern, some amount of clustering is inevitable. Can we make…

The Radix Heap

The Radix Heap is a priority queue that has better caching behavior than the well-known binary heap , but also two restrictions: (a) that all the keys in the heap are integers and (b) that you can never insert a new item that is smaller than all the other items currently in the heap. These restrictions are not that severe. The Radix Heap still works in many algorithms that use heaps as a…

Porter/Duff Compositing and Blend Modes

In the Porter/Duff compositing algebra, images are equipped with an alpha channel that determines on a per-pixel basis whether the image is there or not. When the alpha channel is 1, the image is fully there, when it is 0, the image isn’t there at all, and when it is in between, the image is partially there. In other words, the alpha channel describes the shape of the image, it does not…

Big-O Misconceptions

In computer science and sometimes mathematics, big-O notation is used to talk about how quickly a function grows while disregarding multiplicative and additive constants. When classifying algorithms, big-O notation is useful because it lets us abstract away the differences between real computers as just multiplicative and additive constants. Big-O is not a difficult concept at all, but it seems to…

Sysprof 1.2.0

A new stable release of Sysprof is now available. Download version 1.2.0 .

Over is not Translucency

The Porter/Duff Over operator, also known as the “Normal” blend mode in Photoshop, computes the amount of light that is reflected when a pixel partially covers another: The fraction of bg that is covered is denoted alpha. This operator is the correct one to use when the foreground image is an opaque mask that partially covers the background: A photon that hits this image will be…

Gamma Correction vs. Premultiplied Pixels

Pixels with 8 bits per channel are normally sRGB encoded because that allocates more bits to darker colors where human vision is the most sensitive. (Actually, it’s really more of a historical accident, but sRGB nevertheless remains useful for this reason). The relationship between sRGB and linear RGB is that you get an sRGB pixel by raising each component of a linear pixel to the power of…

Sysprof 1.1.8

A new version 1.1.8 of Sysprof is out. This is a release candidate for 1.2.0 and contains mainly bug fixes.

Fast Multiplication of Normalized 16 bit Numbers with SSE2

If you are compositing pixels with 16 bits per component, you often need this computation: uint16_t a , b , r ; r = ( a * b + 0x7fff ) / 65535 ; There is a well-known way to do this quickly without a division: uint32_t t ; t = a * b + 0x8000 ; r = ( t + ( t >> 16 )) >> 16 ; Since we are compositing pixels we want to do this with SSE2 instructions, but because the code above uses 32 bit arithmetic,…