Important news, interesting finds.

Created by Peter Kankowski
Last changed
Filed under General

Share on social sitesReddit Digg Delicious Buzz Facebook Twitter

New links: 2011

December 2011

An example of the CPU caches effects on almost simple loops, see the pictures of the measurements for different sizes and access patterns (and Hacker News discussion). Many thanks to Ace for the link.

Gestures instead of passwords: a new way to sign up in Windows 8.

File size reported by FindFirstFile can be incorrect (by Raymond Chen).

VP trees: A data structure for spatial search by Steve Hanov.

→ Don't let more than one process try to read from stdin at the same time by Raymond Chen.

November 2011

Profiling without a Profiler by Lockless Inc.

Why Stack Exchange Isn’t in the Cloud by Kyle Brandt.

Lossless and Transparency Encoding in WebP: the lossy compression is more effective than JPG and the lossless compression is better than PNG. There is support for animation and transparency.

Stop Online Piracy Act is opposed by Google, AOL, eBay, Facebook, LinkedIn, Mozilla, Twitter, Yahoo, and Zynga.

List of freely available programming books

How to use a hash table to cache the result of conversion from UTC to local time for different time zones by Raymond Chen.

Passion Versus Professionalism by Ernest Adams.

Asynchronous UIs: don't make your users wait.

Adobe is stopping development on Flash Player for mobile browsers; Flash will work in mobile apps through Adobe AIR.

Dwolla, a payment network charging $0.25 per transaction.

Intel 4004, the first CPU, is 40 years old today.

October 2011

John McCarthy, the creator of LISP, died at 84.

The Ksplice Pointer Challenge. Test yourself: do you understand the difference between arrays and pointers in C?

→ Herb Sutter and Bjarne Stroustrup about Dennis Ritchie: he created “a high-level, portable, efficient systems programming language. Everyone knew it couldn’t be done, and he did it”.

What's New in Visual Studio C++ 11. Auto-vectorization (using SIMD for a loop) and auto-parallelization (splitting a loop into multiple threads) will be supported in the next version of Visual C++.

ISO C++11 (formerly known as C++0x) was published. Wikipedia provides a good overview of the new language features.

Memory capacity and commercial compiler development. In 1980s, many compilers were written by one person. With the increase in memory capacity, more optimizations became viable, and you cannot write a compiler alone anymore.

Steve Jobs has passed away.

An interactive tour of Google Go: learn the language by writing programs and running them in your browser.

"Algorithm" is Not a Four-Letter Word: algorithms for generating random mazes.

September 2011

Don't make objects that end with 'er' by Travis Griggs.

→ PHP 5.4 beta is released. Traits (a language construct that can be used instead of multiple inheritance) are the major new feature.

Javascript PC Emulator by Fabrice Bellard, a genius behind ffmpeg, qemu and tcc. Thanks to Ace for the link.

Windows 8 Developer Preview is available for download (requires installation on a separate partition, includes Visual Studio 11 and SDKs).

Introduction to Artificial Intelligence, a free on-line course from Stanford University taught by Sebastian Thrun and Peter Norvig. Enrollment is now open.

The Programming Languages Beacon: a list of major software products, with details about the programming languages used to implement them.

Python 3.2.2 has been released.

August 2011

Steve Jobs resigns as Apple CEO

Building Windows 8, the next version of Windows (blog).

How Browsers Work: Behind the Scenes of Modern Web Browsers

Hyperpolyglot: Programming Languages Syntax Comparison

What every computer science major should know by Matt Might.

PHP 5.3.8 Released with over 90 fixed bugs. Version 5.2 is not supported anymore; the users should upgrade to 5.3.x.

Stories about the B5000 and people who were there. The memories of early computer history, specifically the development of the early ALGOL (the origin of Pascal and C) compiler and first computers supporting it, discovering recursive descent and involving, among others, Don Knuth as a student writing a compiler in some three months, earning a yearly pay from it and obtaining masters degree instead of bachelors. Many thanks to Ace for the link.

July 2011

CSS Lint: a CSS checker.

How To Safely Store A Password: use bcrypt.

JavaScript Design Patterns by Addy Osmani.

Boost your productivity: Cripple your technology by Matt Might.

BrowserID: A better way to sign in (developed at Mozilla Labs).

June 2011

→ Google launched a social network called Google+

→ Intel released AVX2 instruction reference, including 256-bit wide SIMD, a hardware random number generator (the RDRAND instruction), vectorized table-lookup (VGATHERxx), bit-manipulation instructions (LZCNT, which is already supported by AMD, parallel extract and deposit, ANDN, etc.). The new instructions will be available in future Intel processors (Haswell microarchitecture). Agner Fog commented the new instructions.

Firefox 5 was released.

A list of Advanced Computer Science Courses.

The Architecture of Open Source Applications by Amy Brown and Greg Wilson. How do Audacity, Bash, Eclipse, LLVM, Mercurial, sendmail, and other OSS work.

Experience porting 4k lines of C code to Google Go by Krzysztof Kowalczyk. He was able to port them in a few days and found an out-of-bounds bug along the way.

Windows 8 user interface presented by Jensen Harris.

May 2011

Practical Cryptography Corrected by Bram Cohen (the guy who created BitTorrent): one-page advice to implementers.

April 2011

Amazon web services outage.

Incompetent Research Skills Curb Users' Problem Solving by Jakob Nielsen. Users rarely change search strategy or critically evaluate search results.

Lock-free algorithms by Raymond Chen.

March 2011

What I like and don't like to see in a technical presentation by Grig Gheorghiu.

Optimizing a Screen for Mobile Use by Jakob Nielsen. A great example of redesigning for increased usability.

Mirah: Ruby-like syntax which translates directly to pure Java (no additional run time libs). Thanks to Ace for the link.

Firefox 4.0 was released. New features: faster JavaScript engine (JIT compiler), accelerated graphics (Direct-X on Windows), and revamped user interface. With the new version, you can share your bookmarks and settings across multiple computers or mobile devices. The WebM codec, XMLHttpRequest 2, WebGL (3D graphics in JavaScript), HTML5 forms, and CSS3 transitions are now supported; support for SVG and OpenType font format was greatly improved. The parser now conforms to HTML5 standard. Sources: What's new in Firefox 4, When can I use.

→ The final version of Internet Explorer 9 was released.

Easy Perfect Minimal Hashing (Python implementation and measurements) and Succinct Data Structures by Steve Hanov.

XML is really, really slow by Krzysztof Kowalczyk.

February 2011

Final five IPv4 blocks are allocated to registries. No unallocated blocks remain.

How to optimize the Euclidean Algorithm by Lockless Inc.

The case of the inconsistent right shift results by Larry Osterman. When you shift a 64-bit variable by more than 64 bits, the result will be different on 32-bit and 64-bit compilers.

January 2011

PHP crashed because of excess precision (80-bit long double instead of 64-bit double) in x87 registers. The problem was solved by forcing to store the value in memory in lower precision (using 'volatile'). Rasmus Lerdorf pointed to a similar bug report for GCC and a good paper on floating point (pdf). Later, the same bug was discovered in Java.

Underhanded C. Hiding malicious behavior in innocent-looking C code.

The history of MOS 6502: the chip was laid out by hand and it worked the first time.

Using averages — a common performance measurement mistake. Using the time of the fastest run is more accurate.

You're On The News. Get an instant email when your blog is submitted to Hacker News.

Understanding Hash Functions and Keeping Passwords Safe: how to use salted passwords and crypt() in PHP.

Responsive Web Design: adapting to screen resolution by resizing images, moving or hiding content (important for mobile users).

Fast and Easy Levenshtein distance using a Trie by Steve Hanov (see also Compressing dictionaries with a DAWG).

Why Is Eric Schmidt Stepping Down at Google? Larry Page will head the company.

The polynomial algorithm for 3-SAT problem (if it's correct, then P=NP).

Simple Email Service, Amazon's solution for sending newsletters and notifications by email.

Test results for Intel's Sandy Bridge processor by Agner Fog. Old bottlenecks were removed, but throughput of the decoders is usually too low.

Test-Taking Enhances Learning by Jakob Nielsen. People who took a free-recall test remembered 145% more; it's also useful to add quizzes to educational websites.


New items are in bold typeface. Feel free to add your links below.

Peter Kankowski
Peter Kankowski

About the author

Peter is the developer of Aba Search and Replace, a tool for replacing text in multiple files. He likes to program in C with a bit of C++, also in x86 assembly language, Python, and PHP.

Created by Peter Kankowski
Last changed



Using Uninitialized Memory for Fun and Profit



I would probably not like to have somebody like Larry working for me if he had to investigate "injustice done by the compiler" of having a "different x << 0x55 evaluation on 32 and 64 bits." My 2 euro cents.


Mapping Floats to Sortable Integers:



A lot of interesting stuff at the section Graphics and coding tricks of


Peter Kankowski,
Ace, thank you so much! His tricks are very interesting.

Easy Perfect Minimal Hashing

Python implementation and measurements by Steve Hanov



Interestingly enough, Firefox 4 release got slower when timing the simple Javascript FPU loop (it's not the overall benchmark, just one "limit" case) on i5 650. Note especially big difference between beta 6 and release, it's the return to the speeds of 3.6.6.

0.88    Firefox 4b6
0.96    Opera 10.62
1.43    Safari 5.0.1
2.26    Firefox 3.6.6 JS
2.31    Firefox 4

Be especially aware about those differences when reading benchmarks which used some earlier betas -- betas can be irrelevant for the release of FF 4.

Peter Kankowski,

Firefox 4 uses both old (TraceMonkey) and new (Jägermonkey) JavaScript engines. The Register notes: “TraceMonkey speeds JavaScript performance by detecting code loops and converting them to assembly language. With Firefox 4, TraceMonkey still looks to convert loops, but when it can't, JaegerMonkey converts entire methods into assembly.”

Probably, they used the new engine more widely in the beta version (than in the release), so your benchmark was faster.


Ruby-like syntax which translates directly to pure Java (no additional run time libs):



re: http://www.knosof.co.uk/cbook/ The author writes: "Addison-Wesley decided they did not want to publish the book (so much for contracts)." I'm not surprised at all, if they expected to get an "annotated C standard" and got that book which contains everything and the kitchen sink.


Clipperz "More than a password manager"


"Clipperz leverages the capabilities of modern browsers to efficiently execute Javascript code. All your private information are locally encrypted before storing them on Clipperz servers. So you don’t need to trust Clipperz because you are just giving Clipperz a bunch of scrambled and twisted bits."

"Yes, you can use Clipperz for free. We don’t know yet how the service will evolve and we might start charging an annual fee. "

The whole code and UI is in one file:



Stanford Javascript Crypto Library


"Instead of embedding tables in the code, our library contains code that precomputes all tables on the browser before encryption or decryption begins. Since code to precompute the tables is much smaller than the tables themselves, we keep the library size small. We reap the benefits of precomputed tables by quickly building the tables on the browser before the first encryption. The only values we hardcode are the 10 round constants, which are 28 bytes total."


"Moreover, computing the tables in the browser is far faster than downloading them over the network."



The memories of early computer history, specifically the development of the early ALGOL (the origin of Pascal and C) compiler and first computers supporting it, discovering recursive descent and involving, among others, Don Knuth as a student writing a compiler in some three months, earning a yearly pay from it and obtaining masters degree instead of bachelors.

Peter Kankowski,
Ace, thank you very much! It's fantastic :)

If you like that, you'll like Knuth's own version of his work then: http://www.webofstories.com/play/17086 and even original documentation he made: http://www.softwarepreservation.org/projects/ALGOL/algol58impl/#Burroughs_205


Javascript PC Emulator by Fabrice Bellard, a genius behind ffmpeg, qemu and tcc: http://bellard.org/jslinux/

Peter Kankowski,
Thank you!

A benchmark Javascript garbage collectors in Google Chrome and Firefox



An example of the CPU caches effects on almost simple loops, see the pictures of the measurements for different sizes and access patterns:





Caltech Large Scale Image Search Toolbox



One ASM micro optimization detail I've just discovered -- Microsoft calls it "fatret" when their compiler produces F3 C9 sequence instead of the simple C9 for "ret". The same sequence is produced by GCC too:


The explanation of the reasons behind it and when it should be used:


Peter Kankowski,
Jacob Nilsen's critique of Windows 8 GUI: http://www.useit.com/alertbox/windows-8.html

Your name:


Please ignore this field: