Why do some JavaScript methods have such long names?

Allen Wirfs-Brock (the project editor of the ECMAScript 5 specification) recently mentioned the thought process behind method names such as Object.getOwnPropertyNames():


es6-shim – ECMAScript 6 functionality on ECMAScript 5

Update 2012-03-13: Added a section on installation.

Paul Miller’s es6-shim gives you functionality that will be in ECMAScript 6 (code-named ECMAScript.next), on ECMAScript 5 engines. It was initially based on a project of mine, but adds much new functionality, Node.js compatibility, and (not least) tests.


Subclassing builtins in ECMAScript 5

JavaScript’s built-in constructors are difficult to subclass. This post explains why and presents solutions.


Reinventing the tire – without air

It’s a dream come true: drive a vehicle without worrying about a flat tire or insufficient air pressure. Bridgestone has presented a concept for “airless tires”.

Hello iTunes Account Switcher (goodbye TuneSwitch)

iTunes Account Switcher is a Mac OS X utility for quickly switching between iTunes accounts.

JS Central – a website with JavaScript news and links

Check out my latest project: JS Central, a website with JavaScript news and links.


What is the difference between a shim and a polyfill?

In the JavaScript world, one frequently encounters the words shim and polyfill. What are those things and what is the difference between them?


Duolingo: using free online language lessons to translate texts

Duolingo achieves an impressive win-win: Customers get to learn a foreign language for free while helping the company translate texts.


Fake operator overloading in JavaScript

Update 2012-01-29: The post “What is {} + {} in JavaScript?” looks at the addition operator in more detail.

This post describes how to do a limited version of operator overloading in JavaScript. With the technique described here, you’ll be able to implement a type StringBuilder that can be used as follows:

    var sb = new StringBuilder();
    sb << add("abc") << add("def");
And a type Point that can be used as follows:
    var p = new Point();
    p._ = new Point(1, 2) + new Point(3, 4) + new Point(5, 6);
    p._ = new Point(1, 2) * new Point(3, 4) * new Point(5, 6);


Write your shell scripts in JavaScript, via Node.js

Update 2012-08-21: All posts about shell scripting via Node.js have the label “jsshell”.

Do you know JavaScript and want to write a shell script? Then you should give Node.js a try. It is easy to install and shell scripts are a great way to get to know it. This post explains the basics.


Firefox Electrolysis project put on hold

Update 2012-02-02: Servo: a vision for the future of Firefox

One of Chrome’s greatest features is that it has one process per tab. In May 2009, Mozilla announced the Electrolysis project whose goal is to give Firefox the same feature. Mozilla now says that they are putting the project on hold, because it was too ambitious.

What’s new in CSS 4 selectors

The following are the highlights of what is new in CSS 4 selectors:


Try out a webOS app online

You can try out Philippe Charrière’s webOS app “GitHub Connect” online.

HP will open-source webOS and produce new hardware for it

Joshua Topolsky has interviewed HP’s Meg Whitman and Marc Andreessen for The Verge. Highlights:

Basic income – an idea to bring stability to our economies

Update 2012-01-06: There is an initiative for a Europe-wide basic income. If the case I make below convinces you then consider supporting it.

This post outlines some of the challenges that our current economies are faced with and explains how a basic income can be a solution.


The Calvin and Hobbes Firefox logo

Sean Martell, Lead Visual Designer at Mozilla has created a Calvin and Hobbes version of the Firefox logo.


The #newtwitter user interface

Twitter today announced a new user interface for its service. This post describes its structure.

Movie titles and lines in JavaScript

Tweets marked with the hashtag #MovieLinesInCode express a movie line or title in programming language code. This post gives some examples in JavaScript; most of them are paraphrased from the blog post “Best of #MovieLinesInCode” by Arialdo Martini [link via Michael Haszprunar].


The art of giving and taking criticism

Update 2011-12-09: section “A hierarchy of disagreeing”

This post provides a few rules that help with giving and taking criticism.


Handling footnotes and references in HTML

This post examines what options one has for handling footnotes and references in HTML. It then presents a library that helps you with handling them.


When is it OK to use == in JavaScript?

Update 2011-12-07: Added case 5 and a conclusion.

Short answer: never. This post looks at five possible exemptions from the rule to always use === and explains why they aren’t.


Is Google's Chromebook a failure?

On Quora, the question “Is Google's Chromebook a failure?” prompted interesting answers.


A closer look at super-references in JavaScript and ECMAScript 6

Update 2013-04-09: now simulates the approach of the ECMAScript 6 specification draft (search for "HomeObject" to find the relevant parts).

This post examines how super-references work in JavaScript and how they will be simplified by ECMAScript 6. To understand this post, it helps to be familiar with JavaScript inheritance. If you are not, consult [2].


Former bank regulator William Black explains Occupy issues

On November 3rd, William Black spoke at the Occupy Los Angeles Teach-In. A video of his talk has been posted on YouTube:


Mnemonics for remembering the CSS order of top right bottom left

Whenever one specifies values for all directions in a single CSS property, one has to adhere to the standard order: top comes first, right second, bottom third, and left fourth. This post mentions three mnemonics for remembering that order.


Node.js v0.6.3 now comes with NPM

Node.js version 0.6.3 (stable) came out on 2011-11-25. Highlight (quoting “Node v0.6.3” by piscisaureus for node blog):

V8’s incremental garbage collector: shorter pauses, better interactive performance

Quoting “A game changer for interactive performance” by Vyacheslav Egorov and Erik Corry for The Chromium Blog:


HTML5 context menus in Firefox 8+

Starting with version 8, Firefox supports HTML5 context menus. This post is a summary of “HTML5 context menus in Firefox (Screencast and Code)” by Chris Heilmann for Mozilla Hacks.


Named parameters in JavaScript and ECMAScript 6

This post explains what named parameters are, how they can be simulated in JavaScript, and what improvements ECMAScript 6 will bring. Obviously, what is said about methods here applies to functions, as well.


Video: Prototypal inheritance in JavaScript

I recently held a talk on JavaScript inheritance for a MunichJS meetup at Google Munich. Courtesy of TNG, a video has been recorded which I have uploaded to Vimeo.


The Node.js v0.8 roadmap

Ryan Dahl has posted the roadmap for version 0.8 of Node.js. The following sections describe the highlights.

Bridging the module gap between Node.js and browsers

Update 2012-07-04: amdefine: use AMD modules on Node.js

One of the advantages of Node.js is that you can use the same programming language – JavaScript – on both server and client. When it comes to modularizing code that is portable between the two platforms, one is presented with a major challenge: they approach modularity differently. This post examines four solutions for writing cross-platform modules.


Execute code each time the Node.js REPL starts

If you start the Node.js binary without any arguments, you are in the REPL (Read-Eval-Print-Loop), a JavaScript command line. This post shows you how to execute code each time the REPL starts. That allows you to, say, automatically load modules you want to use.


Web audio APIs and the low-level approach

HTML5 Audio APIs - How Low can we Go?” (by Mark Boas for The Worm Hole) explains that there are currently two competing web APIs for audio. One is supported by Firefox, the other by Chrome and Safari. The former takes a low-level approach, the latter is higher-level.


GWT and Dart

GWT’s Bruce Johnson writes about GWT’s future, in light of the recent introduction of Dart.


Key webOS feature: developer interest

This post argues that webOS had one key feature of a successful operating system: developer interest.

What JavaScript would be like with significant newlines

Update 2012-03-17: More explanations in Sect. 1.

Brendan Eich recently repeated that he regrets not having given JavaScript significant newlines. This post explains what that would be like. Quote:


Web technology stacks – from LAMP to Janos

The classic stack of small- to medium-scale web technologies is LAMP (Linux, Apache, MySQL, PHP). With the rise of JavaScript and NoSQL databases, another stack is poised to replace it: Janos (client-side JavaScript, Node.js, NoSQL database).

Economic inequality is bad, even for the rich

The TED talk “How economic inequality harms societies” by Richard Wilkinson explains an interesting fact: Beyond certain basic wealth, the well-being of a society depends much more on income differences being small than on incomes being high on average.


Load Node.js modules in browsers via lobrow

Update 2011-11-19: Bridging the module gap between Node.js and browsers

Node.js has the advantage of letting you use JavaScript on client and server. Thus, it is a major nuisance that you can’t put portable code into a file that can be loaded on both platforms. This post presents a solution.


Improving the JavaScript typeof operator

The typeof operator in JavaScript is partially broken. This blog post explains how to fix it and how to extend its use to objects.


Customize LaTeX output from a shell (Unix)

This post explains how to influence LaTeX output via a Unix shell, including the insertion of a word that you pass to a script. It is partially based on an answer given by Will Robertson on StackOverflow.


Myth: JavaScript needs classes

  • [2012-03-17] I completely rewrote this post and changed its name (which previously was “JavaScript does not need classes”).
  • [2012-07-29] Classes have been accepted for ECMAScript.next.
  • [2012-10-03] Since this article has been written, it was decided that ECMAScript will have the special property __proto__ instead of the <| operator.
  • [2013-10-21] Instead of the extension operator, ECMAScript.next will have the function Object.assign().
A popular JavaScript myth is that JavaScript’s prototypal inheritance is complicated and that to fix it, we need classes. This post explains that that opinion is not completely wrong, but misses some important points.


Why I want the iPad to have a mouse cursor

This post argues that both Apple and Microsoft are wrong with regard to what user interface approach to use where. It also presents suggestions for how to implement user interfaces that work well on all devices. The idea is that depending on how you use a tablet such as the iPad, it makes sense for it to have a mouse cursor (or rather, a trackpad cursor).

JavaFX open-sourced as JFX

This is big news. Quoting an email from the OpenJDK mailing list [via Developpez.com]:
As announced at JavaOne we (Oracle) would love to contribute JavaFX into OpenJDK as a new project called "JFX".


Uncurrying `this` in JavaScript

Update 2011-12-17: New section “Making uncurryThis() safe to use in the presence of untrusted code”.

This post explains applications of uncurrying and currying this in JavaScript. It has been triggered by a tweet of Brendan Eich’s.


What Steve Jobs and Apple are and aren’t

This post describes my opinion on Steve Jobs’s legacy. I see myself between the camps of Apple haters and Apple fanboys. Apologies if my use of past and present in this post isn’t always correct – it is about the legacy (present) of someone who is not alive, any more (past).


A quick overview of JavaScript

Update 2013-06-22:Basic JavaScript: an introduction to the language” is an improved longer version of this post.

This post gives an overview of JavaScript that is as short as possible, but explains every major feature. Give the language a chance! You have to learn its quirks, but then it is fun to program in.


Real-world Twitter

“Big Words” is a very simple iPhone app idea: Use your mobile device to display Twitter-style messages to other people, in the real world. Fittingly, one of its creators is a Twitter co-founder.


JavaScript: Why the hatred for strict mode?

There seem to be people who hate ECMAScript 5’s strict mode. This post shows that this hatred is not justified and provides work-arounds for features that are missing.


Wall Street isn’t successful

The article “Wall Street Isn't Winning It's Cheating” (by Matt Taibbi for Rolling Stone) argues that the Occupy Wall Street protests are not about “hating the rich”:

Mobile apps – dead within three years?

On 2011-09-08, Seth Sternberg, CEO of Meebo made a bold prediction:
Prediction: Mobile apps are dead in 3 yrs - mobile web wins. Faster cloud connection and faster chips. PCs all over again. Implications?
This tweet packs a lot of stuff into very few characters. Let’s look at the assertions.


String concatenation in JavaScript

There are two ways of doing string concatenation in JavaScript. This post demonstrates them and explains which one is faster.


Three recommended articles on Steve Jobs

If you still don’t have enough of news about Steve Jobs then here are three articles that shed light on some lesser known aspects of his life.

Enums for JavaScript

This post describes a JavaScript implementation of enums, enumerations of symbols. The idea originally comes from Allen Wirfs-Brock, via a thread on the es-discuss mailing list.


Printing objects on Node.js

Problem: If a data structure is too deeply nested, Node.js stops showing the details. This post presents two solutions.



Universal modules (browser, Node.js): imports and universal tests

Update 2011-11-19. This post is now superseded by “Bridging the module gap between Node.js and browsers”.

This post explains how to write modules that are universal – they run on browsers and Node.js. A previous post showed a simple way of doing so, this post presents a more sophisticated solution that also handles modules importing other modules. Additionally, we use the unit test framework Jasmine to write tests for those modules that are equally universal.

Will Intel’s Tizen mobile operating system succeed where MeeGo failed?

Tizen [1], Intel’s new mobile operating system, is supposed to succeed where MeeGo failed. However, the article “From MeeGo to Tizen: the making of another software bubble” by David Neary for VisionMobile expresses doubt:


Universal unit testing (browser, Node.js) with Jasmine

Update 2011-11-19: Bridging the module gap between Node.js and browsers. [With the given information, you can write your unit tests as modules that run on both platforms.]

This post gives a quick introduction to the JavaScript unit test framework Jasmine. It has the advantage of allowing tests to be run both in browsers and on Node.js.


What’s new in Firefox 8 for end users and developers

This post describes the highlights among the new Firefox 8 features for end users and developers [source: Mozilla Firefox Beta Release Notes].

A JavaScript class pattern that starts with a function

There are too many JavaScript class patterns and inheritance APIs out there. Here is another one. The twist: Its core construct is a function, not an object literal.


Why do people queue up to buy the iPhone 4S?

The Gadget Blog has surveyed people standing in line for the iPhone 4S at the London Regent Street Apple Store [via MacRumors]. Interesting findings:

The power of the Asynchronous Module Definition

Update 2011-11-19: Bridging the module gap between Node.js and browsers

This post explains Asynchronous Module Definition (AMD), a standard for defining modules in JavaScript and contrasts it with the currently very popular CommonJS synchronous modules.


logo.js – JavaScript has a (semi-)official logo

On Oct 4th, Chris Williams (@voodootikigod) published logo.js on GitHub.


Google Dart – overview and comments

Today, it has finally happened: At the GOTO conference, Google has officially presented its new programming language, Dart. This post gives an overview of Dart and provides a few comments on how it fits into the current programming language landscape.

“Buck (2011)” – of horses and men

Buck” is a documentary about Buck Brennaman, the main inspiration of the book “The Horse Whisperer”. It offers interesting insights into horses and humans.


Apple’s introductions: is the iPhone 4S disappointing?

Update 2011-10-08: New section “Voices on the web”.

This post gives and overview of the introductions that Apple has made on Oct. 4, 2011. It will also tackle the question whether the iPhone 4S is disappointing.

Unix shell: search for a text via “find” and “grep”

This post shows you how to use “find” and “grep” to search for a text string in all files that are directly or indirectly contained in a given directory.


New on DZone: HTML5

DZone has always been a great source of content for developers, especially for the Java community. Now they have introduced a new zone, which aggregates content on HTML5.


Displaying a square root with HTML

This post shows two ways of displaying a square root with HTML.


Amazon’s new Kindles – overview and ramifications

This post summarizes what Amazon has introduced on Sep 28, 2011 and explains the ramifications of the introductions.


Intel replaces its MeeGo mobile OS with the HTML5-based Tizen


The Linux foundation just announced the “Tizen” project, whose (open) development will be lead by Intel and Samsung. It will give Intel a replacement for its MeeGo platform which has not made enough progress.


Firefox 7: new features for developers

This post summarizes the highlights of “What’s new for Web Developers in Firefox 7” by Christopher Blizzard for Mozilla Hacks:

Internet Explorer 10 Preview – a first look by Sencha

Sencha has recently published a first look at the Internet Explorer 10 preview [via Sacha Storz]. This post summarizes the main points.


ECMAScript.next: new details, reacting to Dart complaints

On September 18, 2011, Brendan Eich held a talk at CapitolJS. In it, he covered more details on what will be in ECMAScript.next; how to react to the complaints voiced by Dart’s creators; and RiverTrail, a JavaScript extensions for parallel programming. This post summarizes the highlights of the first two topics.


Template strings: embedded DSLs in ECMAScript 6

In ECMAScript 6, template strings [1] are a syntactic construct that facilitates the implementation of embedded domain-specific languages (DSLs) in JavaScript. They were originally called “quasi-literals”. This blog post explains how they work.

Warning: This blog post is slightly outdated. The terminology has changed:

  • Template literal (was: template string): `abc`
  • Tagged template (was: tagged template string): func`abc`
  • Tag function (was: template handler): func from previous item


A Windows 8 keynote review by a JavaScript programmer and Apple user

Update 2011-09-18: More content in the section “Additional information from sources on the web”.

On Sep 13, 2011, Microsoft presented more details on Windows 8 in a keynote at the BUILD conference. This post summarizes and reviews that keynote from the perspective of a JavaScript programmer and Apple user (iPad, Mac OS X). If you already know what the keynote is about, you can skip to “Additional information from sources on the web” and “Observations” at the end.


A first look at what might be in ECMAScript 7 and 8

Brendan Eich mentions features that are candidates for ECMAScript 6, 7 and 8:


Google’s Alex Russell on JavaScript versus Dart

Its good to see that not everyone at Google thinks that JavaScript “not viable in the long term” [1]. Quoting the highlights of a blog post by Alex Russell [via @MunichJS]:

Cool HTML5 website: Nike produces and sells 1,500 “Back to the Future” shoes for charity

Quoting: “Back To The Future Sneaker Trailer Features Hader, Durant And Lloyd” by Adam Rosenberg for Spinoff Online:
The sneaks will be released in a limited run of 1,500 in an eBay auction that started Thursday. All proceeds will benefit the Michael J. Fox Foundation for Parkinson’s Research. There are more details to be found at Back4theFuture.com.
The website is great. Lots of animations etc. – without Flash! It works well everywhere: iPad, Firefox without Flash, etc. Competent work.


Google Dart to “ultimately ... replace JavaScript”

  • New post 2011-10-10:Google Dart – overview and comments” (with all the information from the official Dart launch at the GOTO conference)
  • New post 2011-09-13:Google’s Alex Russell on JavaScript versus Dart
  • 2011-09-14: Rewrote of the section “What does it all mean?” and added new material on universal virtual machines. Added Crockford quote under “Other voices on Dart”. Added a conclusion.
  • 2011-09-13: More on Eich’s comments at Hacker News.
The following keynote will be held at the GOTO Aarhus 2011 Conference on Monday, Oct. 10, 2011:
Dart, a new programming language for structured web programming
This post explains what Dart is all about and how it relates to JavaScript.


Why Carol Bartz wasn’t the right CEO for Yahoo

Carol Bartz recently got fired as CEO of Yahoo. The article “The Failure of Yahoo's Board” (by Maxwell Wessel for Harvard Business Review, via @k33g_org) explains why that was the right decision and why having hired her in the first place should be considered a failure of Yahoo’s board. Quote:


JSHint – a JavaScript code quality checker

JSHint is a tool that analyzes JavaScript source code to warn about quality problems. This post describes how to use it.


Soon: USB 3 will enable the ultimate docking station via 100W power

Quoting USB 3.0 could soon drive monitors, hard drives with 100W of power by Casey Johnston for Ars Technica:
The next USB 3.0 specification will provide up to 100 watts of power to devices, allowing users to power some of the more demanding gadgets on their desks without additional power supplies. The USB 3.0 Promoter Group announced that the standard would allow USB 3.0 ports to power and charge devices like notebook PCs and would remain backwards compatible with USB 2.0 devices.


Currying versus partial application (with JavaScript code)

Currying and partial application are two ways of transforming a function into another function with a generally smaller arity. While they are often confused with each other, they work differently. This post explains the details.


Twitter bookmarklet tip: associate a name with a web page

Twitter’s Share Bookmarklet tweets the URL of the current page. This post explains how to automatically add a Twitter name to the default tweet text.


How to write and unit-test universal JavaScript modules (browser, Node.js)

Update 2011-11-19. This post is now mostly superseded by “Bridging the module gap between Node.js and browsers”.

Node.js has a very nice module system that is easy to understand, yet distinguishes between the exports of a module and things that should be private to it. This post explains how the code of a Node.js module can be modified so that it works on both Node.js and web browsers. It also explains how to unit-test such code.


Team sizes: webOS versus Android versus OS X

webOS: une équipe de développement de 600 personnes!” by Christophe Laporte for iGeneration [via @k33g_org] compares the sizes of the teams working on the following operating systems:


Spreading arrays into arguments in JavaScript

Update 2012-02-01: Complete rewrite of the section on spreading constructor arguments.

Sometimes, one needs to spread the elements of an array, to use them as the arguments of a function call. JavaScript allows you to do that via Function.prototype.apply, but that does not work for constructor invocations. This post explains spreading and how to make it work in the presence of the new operator.


Firefox’s extensions get a security review, Chrome’s don’t

Mozilla checks Firefox browser extensions for malicious behavior, Google does not check Chrome extensions.


HP lost its way

Quoting Losing the HP Way (Robert X. Cringely).


Google’s options for Motorola in light of its Android profits

Two recent steps by Google make it seem like the company is moving Android closer to Apple’s model: First it controlled the software more tightly [1]. Second, it bought the hardware vendor Motorola Mobility [2]. The post concludes by summarizing a counter-argument to this hypothesis by Joshua Topolsky.


HP will spin off PC division, stop making webOS hardware


The press release

Quoting the official HP press release [via MacRumors]:
  • HP confirms that it is in discussions with Autonomy [Corporation, see below] regarding a possible offer for the company.
  • HP will consider a broad range of options [for its Personal Systems Group (PSG)] that may include, among others, a full or partial separation of PSG from HP through a spin-off or other transaction.
  • In addition, HP reported that it plans to announce that it will discontinue operations for webOS devices, specifically the TouchPad and webOS phones. HP will continue to explore options to optimize the value of webOS software going forward.
Autonomy Corporation provides enterprise software for automated analysis of unstructured data (text, audio, images, video).

Firefox: the disappearing version number

Interesting development: Mozilla de-emphasizes Firefox version numbers.

TV: Alphas

Zak Penn, Ira Steven Behr And David Strathairn Talk Alphas” is a report by Bryan J. Daggett for Spinoff Online on a session at Comic-Con 2011. Quote:


An introduction to JSDoc

Check out my book (free online): “Speaking JavaScript”. Updated version of this blog post: chapter “JSDoc: Generating API Documentation”.

Update 2011-08-19. Tweet from JSDoc’s creator, Michael Mathews:
Awesome article about JSDoc. I learned (er remembered) a few things from reading it myself! via @rauschma 2ality.com/2011/08/jsdoc-intro.html

JSDoc is the de facto standard for documenting JavaScript code. You need to know at least its syntax (which is also used by many other tools) if you publish code. Alas, documentation is still scarce, but this post can help – it shows you how to run JSDoc and how its syntax works. (The JSDoc wiki [2] is the main source of this post, some examples are borrowed from it.)


What is the correct media type for JavaScript source code?

Question: What media type should you use for JavaScript source code? Answer [via Brendan Eich] and explanations after the break.

Press review: Google buys Motorola Mobility

Update 2011-08-19: Google’s options for Motorola in light of its Android profits

The news in a nutshell:

  • Motorola recently spun off its mobile division into Motorola Mobility.
  • Google has purchased that company for $12.5 billion.
  • Probable main reason for purchasing Motorola: to get patents for defending Android against attacks.
This post will be continually updated, as I find interesting tidbits in various articles.


Bluetooth low energy – two years on a coin-cell battery

Bluetooth low energy (BLE) is part of the Bluetooth 4 standard and enables new devices such as watches and sensors that consume very little power while being able to communicate with general-purpose computing devices such as cell phones and notebooks. Quoting Wikipedia:


JavaScript’s JSON API

JSON is a plain text data storage format. This blog post describes what it is and how to work with it via an ECMAScript 5 API.


Patents: Google versus Microsoft

This post describes an ongoing dispute between Google and Microsoft regarding the recently sold Nortel patents.


Preventing the next Breivik

Quoting “Friedensforscher Galtung: ‚Wir müssen verstehen, wie Breivik denkt‘”:
Die Helfer müssen mit Menschen, die extremistisch denken, in Dialog treten, sie müssen sie im Gespräch herausfordern. Ich selbst habe viel mit Radikalen gearbeitet, mit Rassisten in den Südstaaten der USA, die ähnlich realitätsferne Gedanken hatten wie Breivik. Meine Freunde haben immer gesagt, das bringe doch nichts. Aber das stimmt nicht: Diese Leute wollen, dass man ihre Ideen in Frage stellt, sie lechzen danach, als Gesprächspartner ernst genommen zu werden.
Loose translation:
Social workers have to seek out a dialog with people with extremist thinking, they have to challenge them in a conversation. I myself have worked much with radicals, with racists in the southern states of the USA whose thoughts were similarly removed from reality to Breivik’s. My friends have always told me that that’s no use. But that’s not true: Those people want their ideas to be questioned, they long to be taken seriously in a conversation.
Having these kinds of conversations is not easy, but it is necessary, because it provides a reality check to their thinking.

What’s next for our economy?

During the last decades, the burden of maintaining society has shifted towards the middle and lower class, away from the upper class [1]. The article “How Our Economy Was Overrun by Monsters and What to Do About It” [via @michellegallen] frames the problem as follows:


iCloud icon versus classic Mac icon

The graphic design of the very first Macintosh lives on. Compare:


Adobe Edge: a Flash-like tool for HTML5

Adobe Edge is a Flash-like tool for HTML5. This is an important step for that technology, because it is still lacking in good tools. Quoting the post “Adobe Edge: completing the Flash/HTML cycle”:

JavaScript performance: Array.prototype versus []

Array.prototype contains many generic methods that can be applied to array-like objects. [] is a popular shortcut for accessing these methods. This post examines the pros and cons of using that shortcut.

Update: Inspired by a comment from Kevin Roberts, I’ve added a third way of accessing generic methods, and a conclusion.

Water reservoir in space: 140 trillion times our oceans

NASA’s article “Astronomers Find Largest, Most Distant Reservoir of Water” reports on some truly staggering numbers:

Eight words not to use in your Twitter bio

The post “8 Words That Should Never Appear in Your Twitter Bio” contains good ideas. The two words that I agree with most are:


test262 – ensuring that JavaScript implementations comply with the ECMAScript specification

With so many JavaScript implementations out there, how do you guarantee that all of them stay true to ECMA-262 (the ECMAScript language standard)? The answer is test262, a suite of tests to be run by an implementation. Quote from the test262 website:


The cost of iCloud per device

In the Q3 earnings Call on July 19, Apple detailed how it will pay for the iCloud services – it defers revenue from its devices. All sums additionally cover the costs for minor operating system upgrades.


ECMAScript.next: Array.from() and Array.of()

Update 2014-05-08. Newer version of this post: “ECMAScript 6’s new array methods

On July 9th, Brendan Eich announced that Rick Waldron had prototyped [1] two new methods for ECMAScript.next: Array.from() and Array.of(). Both methods are also useful in current JavaScript.


OS X Lion: observations and tips

  • Update 2011-07-29: More content in the Mail section. Mentioned path bar and status bar in section on Finder.
  • Update 2011-07-27: Material on iMac freezes; longer conclusion; sections on Mail, iCal, preparing for Lion.
Having used Lion for a few days, this post describes my experiences and gives tips for using it.


Three annoying habits of successful people

The article “3 Annoying Habits of Successful People” starts by quoting Peter Drucker:
Coaches, he said, spend a lot of time teaching leaders what to do. But we don’t spend enough time teaching them what to stop.
Then it lists three annoying things that successful people tend to do:


Google+ – observations and future

A previous post gave an in-depth look at what Google+ is and how it was created. This post lists my observations after having used Google+ for two weeks. It relates those observations to what a technical lead on the Google+ team wrote about its future.


Google becomes more focused, closes Google Labs

Could it be? Is Google becoming more focused?


JavaScript properties: inheritance and enumerability

Update 2012-10-29:Properties in JavaScript” is a general introduction to how properties work.

This post examines how inheritance and enumerability affect operations on properties in JavaScript.


Will there be a single Microsoft operating system by 2015?

This is my next... reports an interesting rumor: There will eventually be a single Microsoft operating system. Quote:


Programming: the benefits of taking a break

This post lists several benefits of taking a break during programming.


Are older people better programmers?

Peter Knego states something interesting: “It's official: developers get better with age. And scarcer.”. He uses reputation and other metrics from StackOverflow to corroborate his point.


CoffeeScript – overrated?

There has been an interesting thread on Reddit with the title “DAE [Does Anyone Else] think CoffeeScript is ridiculously overrated?” [via @k33g_org]. This post provides some perspective on that opinion.


Presenting at MunichJS can get you a job

Quick anecdote from MunichJS, a JavaScript user group in Munich: Student Felix Niklas held a lightning talk at a meetup, about implementing OS X Lion’s email thread unfolding animation in CSS [gist, demo – works on Chrome, Safari]. Buddycloud’s Simon Tennent was in the audience, liked the talk and hired Felix to do front-end engineering for them.

SourceMap on Firefox: source debugging for languages compiled to JavaScript [update: WebKit, too]

Update 2011-09-16: Source maps are coming to WebKit, too. Mozilla and WebKit implementers might even agree on a common format.

More and more languages are compiled to JavaScript. Mozilla has plans to let you debug those languages in their source code (no need to look at JavaScript).


Managing the flood of social content

We all know the problem: Social web applications such as Facebook and Twitter produce a lot of content. Now Google+ joins their ranks. The article “When Google Circles Collide” argues that, as a search company, Google should do a better job of filtering that content.


Comments on Jon Rubinstein’s WebOS letter

After initial reviews of HP’s TouchPad were mixed, Jon Rubinstein (head of HP’s Palm unit) wrote a letter [1] to his staff. This post summarizes that letter and gives additional perspective.

The next big thing – if you look for it, you won’t find it

Especially the tech industry is obsessed with finding the next big thing. This post argues that that is usually not a smart thing to do.


Google+: An interesting product, badly marketed

Google+ is Google’s new service for social networking and information sharing (a “Facebook competitor”, if you will). This post provides an overview of Google+: What it is, how it works and how it was created. It argues that Google has not marketed this product properly. Update 2011-07-22: Google+ – observations and future


A JavaScript glossary: ECMAScript, TC39, etc.

This blog post explains the difference between JavaScript and ECMAScript. And the differences between ECMAScript.next, ECMAScript 6 and ECMAScript Harmony.


Apple’s iCloud: stealing a page from Google and more

iCloud is an interesting product for Apple: It is moving into Google territory. For the first time, every Apple user will have free online storage that is pervasively integrated into many applications. This post gives an overview and mentions new facts that have come out.


Prototypes as classes – an introduction to JavaScript inheritance

Updates – read first: JavaScript’s prototypal inheritance is hard to understand, especially for people coming from other languages that are used to classes. This post explains that it does not have to be that way: The proposal “prototypes as classes” is a simplification of classes and inheritance in JavaScript. It might become part of ECMAScript.next, a.k.a. “the next version of JavaScript” (after ECMAScript 5). But there is also a library that allows you to use its features in today’s JavaScript. What’s intriguing about prototypes as classes is that they aren’t a radical departure from current practices, but rather a clarification of them.

Incidentally, this post is also a good introduction to JavaScript inheritance, because the basics are easier to understand with prototypes as classes.


Windows 8 will (probably) not deprecate C++ and .NET in favor of HTML5

Update 2011-09-16:A Windows 8 keynote review by a JavaScript programmer and Apple user” – Microsoft confirms that C++, .NET and HTML5 are all equal citizens on Windows 8.

Windows 8 introduced a new kind of application to the world of Windows: The immersive application with a tablet-first design [1]. Immersive applications will dominate Windows 8, existing applications will be relegated to a second-class status and accessible through a compatibility mode. When Microsoft first presented Windows 8, it gave the impression that immersive apps can only be written in HTML5. The article “Windows 8 for software developers: the Longhorn dream reborn?” on Ars examines whether that is true. This post summarizes the article.


Translating CoffeeScript classes to JavaScript

The post “Classes in Coffeescript” contains an interesting juxtaposition of CoffeeScript code and the JavaScript it is translated to. This post examines the result of the translation in more detail, which nicely illustrates how subclassing works in JavaScript. To understand the following, you should be familiar with JavaScript’s prototypal inheritance (explained here).


What’s up with the “constructor” property in JavaScript?

All objects produced by built-in constructor functions in JavaScript have a property called constructor. This post explains what that property is all about.


Google’s lack of social sensitivity: not everyone wants to be reminded of one’s father

A seemingly minor action by Google on Father’s Day caused a major backlash: They displayed a reminder to “call dad” in Gmail. Quoting “‘Reminder: Call Dad’ Is Another Notch In Google’s Belt Of Social Fail”:

Quick JavaScript tip: trailing commas inside an object literal

It used to be that some JavaScript engines weren’t picky about trailing commas inside an object literals, while others threw a syntax error. The ECMAScript 5 language specification [1] has made trailing commas legal, via the following syntax rule (in Sect. 11.1.5):


ECMAScript.next: the “TXJS” update by Eich

Updates: Brendan Eich held a talk [1] at the TXJS conference in which he detailed the latest updates on ECMAScript.next. This post lists the highlights of his slides and adds a few explanations.

Facebook is working on a mobile HTML5-based app platform to compete with Apple

The article “Project Spartan: Facebook’s Hush-Hush Plan To Take On Apple On Their Own Turf: iOS” [via Daring Fireball] describes Facebook’s plan’s for a new mobile application platform that is based on HTML5. Quote:


15% use one of these 10 iPhone passcodes

Someone making an iPhone lock screen app with a 4-digit passcode anonymously logged the passcodes. That led to the removal of his app from the app store. The app is called “Big Brother”, which to me sounds like a giveaway for what it does. The author now lists the 10 most commonly used codes in a a blog post. [Source: Marco Arment]


Erich Gamma (Eclipse) joins Microsoft to work on JavaScript tools

If you have ever read the “Gang of Four” book on design patterns [1] or worked with the Eclipse Java IDE (and platform) then you are probably familiar with the name Erich Gamma who was deeply involved in both. Recent news was that Gamma had left IBM and stopped working on Eclipse [4]. Now Microsoft announces that he will join them [source: Heise via Ludwig Adam]. Quote:

Equality in JavaScript: === versus ==

Update 2011-12-02: When is it OK to use == in JavaScript?

There are two operators for comparing values in JavaScript: strict equality === and “normal” (or lenient) equality ==. Many style guides (correctly) tell programmers to avoid lenient equality and always use strict equality. This post explains why.


The Twitter Firefox plugin

The Twitter plugin for Firefox has three main features:


A few things you might not know about “Star Trek (2009)”

When I watched the original Star Trek TV series as a kid in the late 1970s, it was a revelation: a new magical world opened up. Like fairy tales, but cooler, because it all seemed so real (remember: I was a kid). Since then, Trek TV series and movies have had their ups and downs. The last outing of the franchise, “Star Trek (2009)” [amazon.com, itunes.com], is a lot of fun, even though its story does not leave me completely satisfied. I recently re-watched it and collected several things that you might not know about it. [Warning: spoilers.]


The Hacker News (Y Combinator) effect

A link to my post “Implementing bookmarklets in JavaScript” became popular on Y Combinator’s Hacker News. This post briefly describes the consequences.


Fixing out-of-sync audio in VLC

Sometimes you play a movie file and video and audio are out of sync: You either see someone talk before you hear them or vice versa. This post explains how to fix this on the cross-platform movie player VLC.

Tip: use JavaScript as a calculator in Firefox and Chrome

The following tip allows you to quickly perform calculations via JavaScript in Firefox and Chrome. Many people use Google for this purpose, but this tip even works if your computer is offline.


Apple quietly revises its in-app purchasing requirements

Apple has quietly revised its in-app purchasing regulations. Mac Rumors provides details, this post gives a summary.


Implementing bookmarklets in JavaScript

Bookmarklets are little plugins for your browsers: JavaScript programs packed into javascript: URLs that you add to your bookmarks and start by clicking on them. They perform an operation on the currently open web page such as submitting it to Twitter. There are even bookmarklets that transform the current web page, for example, to add icons that, when clicked, add an event to Google Calendar. A separate post explains what bookmarklets are in more detail. This post tells you how to implement bookmarklets. It presents techniques, tools, and patterns for doing so.

Overview and analysis: Apple’s WWDC 2011 announcements (Lion, iOS 5, iCloud)

There were three main topics at Apple’s WWDC 2011 keynote and, as usual, Apple’s pages provide good in-depth coverage:
  1. Mac OS X Lion
  2. iOS 5
  3. iCloud
This post gives an overview of what has been announced and concludes with an analysis of what it all means.



Google will stop supporting older browsers

Quoting the article “Google to abandon older browsers” [via @annavester]:
As a result, from 1 August, Google will only support what it calls "modern browsers". By this it means the latest versions and major prior releases of Chrome, Firefox, Internet Explorer and Safari.

As new versions of these are released, Google will get its web services working with that and then drop support for the third-oldest version.

Support in this sense means that Google will only do compatibility testing with more up-to-date browsers. It will not carry out tests with older programmes and can make no guarantees that web services will work with them.

  • You can also read Google’s original post.
  • Radical move, but it might help move web technologies forward.
  • I like the way @elijahmanor summarizes this news: “When IE10 comes out they’ll only support IE10 & IE9”
  • Opera: is not among the four browsers explicitly supported by Google. Note that that doesn’t necessarily mean that Google’s apps won’t run on it, just that they won’t test on it.


Lessons learned by Apple Retail during its first 10 years

To celebrate its 10th anniversary, Apple Retail has created a “thank you” poster for its employees. Mac Rumors has published a photo of the poster and transcribed its contents. This post tries to bring a little more structure into the text. Some of the things that are listed are pure corporate speak, but there are also many interesting tidbits.


Windows Phone 7 Mango: the highlights

There is a video on YouTube where Joe Belfiore (whose title is the slightly weird “corporate vice president, Windows Phone Program Management”) shows off the features of the new Windows Phone 7 update called Mango. This post summarizes the highlights.


Is Windows 8 the right approach for tablet computing? Opinions are coming in...

Update 2011-09-16:A Windows 8 keynote review by a JavaScript programmer and Apple user

New opinions critical of Windows 8’s approach to tablet computing have surfaced. This post examines their merits.

Cutting off the revenue stream of spammers

I’ve always wondered why spam could not be prevented by educating the public to not purchase things advertised in spam emails. A study mentioned in a New York Times article follows a similar train of thought: By stopping banks from accepting money for spam offers, one could destroy the revenue stream of spammers. Quote:

Firefox 6: new features for developers

A post on the Mozilla Hacks blog details what’s new for developers in Aurora 6 (pre-beta Firefox 6). The following is a summary of its contents:


Windows 8: Microsoft restarts its operating system efforts (an analysis)

Update 2011-09-16:A Windows 8 keynote review by a JavaScript programmer and Apple user

Make no mistake: Windows 8 means that Microsoft is completely rethinking its operating system efforts, from the ground up. Ballmer wasn’t kidding when he called Windows 8 Microsoft’s riskiest product bet, back in October 2010 [4].


JavaScript’s with statement and why it’s deprecated

This post explains how the with statement works in JavaScript and why its use is discouraged.


A checklist for Android manufacturers

Chris Ziegler’s post “Why do I keep coming back to the Nexus S?” is actually more of a checklist that he’d like Android manufactures to adhere to:

Google Blogger: staying in control of your content and other tips

I am very happy with Google Blogger, but that does not mean that your out-of-the-box experience cannot be improved. This post contains tips for optimizing your blog: Avoid the loss of your content, tweak the look, etc.


HTC is not locking Android bootloaders, any more

This [1] is a big deal: HTC won’t lock its Android bootloaders, any more. Quotes from the post:


Google Wallet: pay with your Android phone (a summary)

Google Wallet is a new product that enables you to pay with your Android cell phone.

TuneSwitch: quickly switch between iTunes accounts (Mac)

TuneSwitch is a Mac program that allows you to quickly switch between your iTunes accounts. No further explanation is necessary: You will know immediately whether you need this or not. [Via fscklog]

The void operator in JavaScript

    void expr
evaluates expr and returns undefined. Examples:

Movie: Mr. Nobody (2009)

  • Title: Mr. Nobody [amazon.com, amazon.de]
  • Genre: Drama | Fantasy | Romance | Sci-Fi
  • Year: 2009
  • Runtime: 141 min
  • Language: English
  • Cast: Jared Leto, Sarah Polley, Diane Kruger, Rhys Ifans, Juno Temple
  • Story: We are presented with various scenes from a man’s life, out of chronological order. Some scenes are from our future where the man is famous for what he embodies.
  • My rating: 8/10


New ideas for cell phone sensors

A N.Y. Times article refers to Benedetto Vigna, the general manager of the Microelectromechanical systems (MEMS) division of STMicroelectronics, regarding new sensors that might be built into cell phones soon.


Bookmarklet: copy a link for Twitter and editors

Update 2011-09-27: Automatically remove parts of the title, add a Twitter name, add a hashtag.

Problem: You have found an interesting web page and would like to copy its link, for use with Twitter or an editor. That means you need to perform several steps: First, you copy the URL. Second, you go back to copy the title (which might be tricky to get at). Third, you construct the link from the copied pieces.

Web gaming technologies: Angry Birds’ cross-compiled Java versus native JavaScript

After it became clear that Angry Birds was basically a true webapp with only a little Flash to overcome the limitations of web-based audio [1], more information came to light regarding the technology it is based on [2].


Tip: load source from a file in the Node.js shell

Node.js is really handy as an interactive shell for JavaScript. To load source code from a file, you must create a module. This post explains how.


Making it easier to reply to email digests

Mailing lists are still a common way of communicating in teams. If the volume is high, a convenient option is to receive a digest that delivers several sent messages in a single email.


Automatic semicolon insertion in JavaScript

Update 2011-11-11: What JavaScript would be like with significant newlines

In JavaScript, automatic semicolon insertion allows one to omit a semicolon at the end of a line. While you always should write semicolons, knowing how JavaScript handles their omission is important knowledge, because it helps you understand code without semicolons and because it has effects even in code with semicolons.


Why the Angry Birds webapp needs Flash

Update 2011-05-21: Web gaming technologies: Angry Birds’ cross-compiled Java versus native JavaScript

Shortly after the Angry Birds webapp came out on 2011-05-11 [1], people were disappointed that it needed Flash. This post examines why that is.

A few thoughts on Chromebooks and Chrome OS

Update 2011-12-01: Is Google's Chromebook a failure?

Chromebooks and Chrome OS are yet another kind of device and operating system that have recently been introduced. This post tries to make sense of them.


Google I/O, day 2: summary of the Chrome keynote

The focus of the keynote on day 1 was about Android [1], the keynote on day 2 is about Google Chrome and Chrome OS.


Google I/O, day 1: summary of the Android keynote

I had the pleasure of attending Google’s public viewing of the Google I/O keynote, in Munich. This post is a summary of what has been presented. If one were to summarize the content in one sentence, it would be: “Android everywhere”.


Eich’s ECMAScript.next status update at JSConf: arrow function syntax, classes, transpilers

Update 2011-06-17: ECMAScript.next: the “TXJS” update by Eich

At JSConf.US 2011, JavaScript creator Brendan Eich gave an update [1] on what features will make it into ECMAScript.next, the version after ECMAScript 5 [3].

Programming language variables: scope and extent

This post examines two aspects of how variables work in programming languages: The scope and the extent of variables. Example source code is given in JavaScript, but should simple enough to be universally understandable.


Google’s Traceur: compile ECMAScript.next to JavaScript on the fly

Google’s Traceur allows you to use ECMAScript.next features right now: Write ECMAScript.next code and use a special script type. Then the first script you load is Traceur which ensures that all your new code is compiled to JavaScript on the fly.

New ways of playing old instruments

This post shows how some musicians do amazing things with pianos, guitars, and zithers. This is one of the few instances where you really have to watch how someone makes music, in order to really appreciate it. So it’s good that all of the following material is available on YouTube. Videos embedded after the break.


Anime site handles piracy like a business problem

Blog post on Ars: “Competing with free: anime site treats piracy as a market failure” explains how a US site that offers Japanse anime with English subtitles manages to compete with subtitles.


Why is the revenue of technical books declining?

Mark Pilgrim has written the post “The ‘book’ is dead” [via Daring Fireball] where he examines why revenue from technical books seems to be declining. It was triggered by a prior post from David Flanagan, in which he writes:
For 15 years I’ve been one of those lucky authors who has been able to support himself and his family almost entirely on book royalties. But the publishing industry has been in decline and my royalties checks have decreased more-or-less steadily since the dot-com bust, and I’ve now decided that I need to look for a salaried job.
Pilgrim’s post makes a few noteworthy points:


Creating new programming languages is becoming easier ... and harder

In December 2010, Brendan Eich talked about Mozilla’s new programming language called Rust (that focuses on safety and concurrency, to replace C++ as Mozilla’s implementation language). He mentions that creating new languages is still important, because they can recycle old research, but repackage it so that it becomes more mainstream-compatible. One example is Clojure that continues the Lisp tradition, but on the Java Virtual Machine (JVM). There are two new aspects to modern language design:


ECMAScript.next features are taking shape

The ECMAScript wiki has two pages with features that might make it into ECMAScript.next:


Patterns for modules and namespaces in JavaScript

Update 2011-11-19: Bridging the module gap between Node.js and browsers

JavaScript does not come with support for modules. This blog post examines patterns and APIs that provide such support. It is split into the following parts:

  1. Patterns for structuring modules.
  2. APIs for loading modules asynchronously.
  3. Related reading, background and sources.


George R. R. Martin: a successful fantasy author and his fans

George R. R. Martin is writing the ongoing fantasy series “A Song of Ice and Fire” which has sold more than 7 million copies world wide. Recently, HBO launched a new series that is based on the first book in the series called “Game of Thrones”. The New Yorker has recently published the article “George R. R. Martin’s Fantasy Books and Fans” which gives interesting insights into the life of a best-selling fantasy author.

The Sony S2 tablet might make dual screens work, thanks to Android

There are some awful dual-screen devices out there. For example, the Acer Iconia 6120. It is a laptop where Acer made the wrong observation that tablet users love typing on glass and replaced the keyboard with a touchscreen [1]. Now Sony has given that idea another go and presented the dual-screen S2 tablet with Android Honeycomb [2].


New Honeycomb tablet from Lenovo this summer, with optional stylus and trackpad keyboard

This is my next has published a rumor about Lenovo bringing out a tablet this summer [1]. Noteworthy:


ECMAScript 5 spec: LexicalEnvironment versus VariableEnvironment

This post examines some of the details of how environments are handled in the ECMAScript 5 (ES5) specification [1]. In particular, there isn’t a single “current environment” in ES5, but two: the LexicalEnvironment and the VariableEnvironment. A piece of code at the end exploits these ES5 internals to produce different results on Firefox and Chrome.

Motorola is working on its own mobile OS

This blog post lists the steps that Motorola has taken towards creating its own operating system and then explains why that decision makes sense.


iPhones and iPads are keeping a log of where you have been

The article “Cool or Creepy? Your iPhone and iPad Are Keeping Track of Everywhere You Go, And You Can See It” [via @netzzwerg] describes that iPhones and iPads keep a log of the locations you have visited while they were switched on:

Iterating over arrays and objects in JavaScript

This post explains three approaches for extracting information from arrays and objects:
  1. for loops,
  2. array methods (courtesy of ECMAScript 5 [1]),
  3. listing property keys.
It concludes with best practices for applying these approaches.


Song: “From where I’m standing” by Schuyler Fisk

Schuyler Fisk gives a stand-out performance of the song “From where I’m standing” [itunes.com] in the movie “I’m Reed Fish” (which I also recommend, by the way). I like the unplugged version [YouTube] of this song better than the studio version [itunes.com]. But that’s because I’m not that into country music. I’d love to hear a non-country studio version.

The truth behind the seemingly too honest URL of a Kate Middleton article

Note: If you want to be nice to the Independent, you don’t click on the URLs below and believe me that they do display a Kate Middleton article (well, at least they did when I wrote this post).

Currently, the following URL is making the rounds on the Twitters:
It links to the article “Kate Middleton jelly bean expected to fetch £500”. Why does it work?


Are Amazon and Apple playing chicken regarding in-app purchasing?

Marco Arment speculates that Apple and Amazon might be locked in a power play regarding Apple’s in-app purchase requirement. Currently, Amazon is still not adhering to this requirement (whose deadline is June 30th, 2011).


JavaScript: converting any value to an object

This post is about converting between primitive values and wrapper objects [1]. Thankfully, one is usually not faced with this kind of task in JavaScript. The most frequent use case is to add properties to a primitive. As a primitive is immutable, you need to convert it to a wrapper object to do so. Read on if you want to see some of JavaScript’s more obscure corners.

Let us start with a short quiz:
What does ({}).valueOf.call(myvar) do?

Google’s difficulty with social networking

Social networking is an essential next step for Google’s two core businesses: advertising and search. For advertising, because it is becoming an important marketing instrument. For search, because people use it to share and rate information (including links). Thus, it is no surprise that Google is trying hard to catch up with Facebook regarding social networking. The article “Larry Page’s first blunder” argues that Google is currently taking the wrong approach and offers suggestions for improvement.


A preview of webOS 3 and where it’s better than the iPad

PreCentral has a guided tour of HP’s webOS 3.0 Beta 1 running on an emulator. The following is a list of things that webOS 3 does better than the iPad. List and screenshots after the break.

Great insight into the workings of the new AOL/Huffington Post

AOL has recently bought the Huffington Post. The blog post “Leaving in a Huff” [via Marco Arment] gives us great insight into how AOL does business in the aftermath of this purchase.


The problem with do-not-track (opting out of online tracking)

This post gives a brief explanation of online tracking, presents a new browser feature for opting out of it, and then points out the flaws of that feature.


Internet Explorer 10 is “native” and good for webapp developers

The Internet Explorer 10 Preview (IE10) comes with many new features, two of them are especially good news for webapp developers:

A page with useful JavaScript links

I have created the page “JavaScript links” where I am collecting JavaScript links that I find useful.


The Singleton pattern in JavaScript: not needed

This post argues that the singleton pattern is usually not needed in JavaScript, because you can directly create objects. It then slightly backpedals from that position and shows you code skeletons that you can use if your needs go beyond the basics.


The Singleton pattern and its simplest implementation in Java

This post motivates the Singleton design pattern and explains its implementation in Java.


Information management classics: Lifestreams (1996)

Lifestreams [1] were created in 1996 to correct some of the shortcomings of document management when used for personal information management. Even today, document management is still the dominant way of information management, both conceptually and as a user interface metaphor. Some of the shortcomings are:


Apple’s next dock connector

Apple will eventually need to upgrade its dock connector. The prime candidate is Thunderbolt [2], because it is fast and carries enough power even for charging iPads. It has been designed with mobile applications in mind. But there is one problem: If Apple migrates its iOS devices to a Thunderbolt connector, how are PCs and older Macs to sync with them? A patent that has recently been granted [1] to Apple sketches a solution.


How Google Chrome reduces the processor load of webapps

With the web’s popularity, it is common for web browsers to have many open tabs at the same time. Processor load can significantly increase in such a case. Google Chrome has implemented several measures to help with that:


Movie: Beautiful girls (1996)

Picture by Amazon
Beautiful girls” [amazon.com]. Cute little movie. Contains many acute observations about the dynamics of relationships. And about dreams and ideals versus reality and what actually makes us happy. The cast is great, with Natalie Portman actually looking the age of the part (which is important for the role), Michael Rapaport, Matt Dilon, Uma Thurman, and several others. This movie does not feel dated at all, it only slightly shows its age when the discussion turns to supermodels (which were a big phenomenon in the 1990s).

After you have watched it: Fun how Uma blows off each one of the three male protagonists and becomes kind of a symbol for unfulfilled dreams. The photo on the poster hints at that fact, by surrounding her with the guys. Rapaport and Portman are the stand-out performances of the movie.


Engadget Reloaded: Topolsky working with SB Nation on new tech website

Topolsky was editor-in-chief at Engadget. He left after AOL bought it and he didn’t like their policies. Now he has announced his latest project [via Marco Arment]: a cooperation with SB Nation.

Why the iTunes store should be web-based

I think that the iTunes Store (apps, video, audio, ebooks) should be web-based, in a manner similar to Amazon’s Kindle store: Buy on the web, sync with your player app later.

Amazon as a competitor to Google and Apple

Amazon seems to become a competitor for both Google and Apple. Recently, it has taken the following two steps:
  • It created its own app store for Android. [1]
  • It created an online storage service that streams music to mobile and other devices. [2]

Google is tightening its control of Android

The latest from Google:
[Google] is now demanding that content partnerships and OS tweaks get the blessing of Andy Rubin before proceeding. The alternative, of course, is to not be inside Google’s warm and fuzzy early access program, but then, as evidenced by the company recently withholding the Honeycomb source code, you end up far behind those among your competitors who do dance to Google’s pipe. [Engadget]


Scott Adams (Dilbert) on being exposed to ideas

Great meta-idea [via Marco Arment], has a Zen-like quality:
Regular readers of my blog know that the goal of my writing is to be interesting and nothing else. I’m not trying to change anyone’s opinion, largely because I don’t believe humans can be influenced by exposure to better arguments, even if I had some. But I do think people benefit by exposure to ideas that are different from whatever they are hearing, even when the ideas are worse. [...]

Contrast my style of blogging to the most common styles, which include advocacy for some interest group or another, punditry, advice, and information. [=idea monoculture]


JavaScript: an overview of the regular expression API

Updates: This post gives an overview of the JavaScript API for regular expressions. It does not, however, go into details about regular expression syntax, so you should already be familiar with it.

Using HTML5 figures in today’s browsers

HTML5 includes tags for figures and figure captions. This post explains how to use them in modern browsers.


Amazon Cloud Drive: online storage with one new idea

The latest development in cloud computing: Amazon is entering the ring with the Amazon Cloud Drive [via fscklog]. Summary:

Barcoo: mobile barcode scanning can be useful

Mobile technology inspires an incredible amount of social applications and location-based services. Not all of them are useful. That’s why I was delighted by a talk on Barcoo that I attended yesterday. The basic idea: You scan the barcode of a product to get data on it from their server. So far, so boring. Things become interesting and useful due to Barcoo’s clever ways of aggregating data.


A first look at the upcoming JavaScript modules

Update 2012-10-22: Note that this feature is still actively being worked on and in flux.

Judging by a tweet by David Herman, he is excited about something (he is shouting!) and so should we be:

This means: ECMAScript Harmony (or ECMAScript.next [1]), as it is currently being planned, will have modules. This post gives you a first look, summarizing the material at [2].

The sound of program files

Someone took MS Paint and interpreted it as an audio file:


It’s official: LOL means “laughing out loud”

The traditional meaning of LOL is “lots of love”. In online communication, LOL has become popular as an abbreviation for “laughing out loud”. With it, the writer expresses amusement about something. I usually prefer alternatives such as :-) (smiley) or “hehe”. Now the Oxford English Dictionary has been updated to reflect the more prevalent use of LOL.

The original ending of “I Am Legend”

YouTube has the ending of the movie “I Am Legend” [amazon.com, itunes.com] as it was originally planned. Video embedded after the break.


JavaScript: how it all began

This post presents a brief history of how Brendan Eich created JavaScript and what influenced its design decisions.


Mac tips (not only) for switchers

If you are new to the Mac, everything can feel a bit off. This post tries to help. And might even teach you something new if you are already familiar with the Mac. I am also mentioning some advanced things which should be interesting for programmers and people coming from Linux.


Nike commercial is an entertaining mini-movie with several stars

Keywords: 5:48 long, starring Kobe Bryant, lots of action, funny, great visuals, surprising guest stars, embedded after the break. Watch it! [Source: io9]


Augmented reality can make you see things that are not there

Brilliant installation by Lynx (Axe in many countries): A giant screen at London’s Victoria train station showed a live video stream of passersby. Embedded in it were the “fallen angels” from the marketing campaign. People were able to somewhat interact with them. Picture and link to video after the break.

Fringe: prequel comics and “Green Lantern” in the alternate universe

Cool: Fringe wanted to show comics in the alternate universe that were different from ours. And they asked DC Comics (Superman, Batman, Green Lantern, etc.) to draw covers for them. DC Comics also publishes a Fringe prequel comic mini-series. Picture and links after the break.


Make node.js code pretty via a generator-based library

The JavaScript server environment node.js has an intriguing approach to coding: Do other things while waiting for results from, say, a database. But don’t use threads to juggle those things, use continuations. This is similar to what client-side JavaScript code (such as Ajax calls) already looks like. Not having to create threads saves a lot of overhead when loads are high. Multi-core and multi-processor systems can still be supported, by scheduling one “instance” of node.js per core/processor.

The only problem with node.js code: You get one nested function expression for each outside request you make.


Enable (vertical) side tabs in Google Chrome [Windows, Mac]

Warning: Old post, may or may not work, any more.

Tabs for web pages in browsers are usually arranged horizontally, on top of the browser window. This arrangement has two disadvantages: First, with many tabs, it becomes impossible to read their titles. Second, horizontal tabs take up valuable vertical space on widescreen displays. The obvious solution is to arrange them vertically. Firefox has several ways to do this. It is one of three features I still miss from Chrome. But there now is a way to turn on a beta version of this feature in Chrome. This post explains how.


Mac tip: remount an ejected storage device (without unplugging)

If a storage device is connected to a Mac via USB or Firewire, you can eject it so that it disappears from your Mac. This post explains how to remount it, without unplugging it and then plugging it back in. This is mainly of interest if you use an external (non-SSD) hard drive with Time Machine: After a backup, if you don’t want it to make any noise, you can eject it and it spins down. Then the problem is how to remount it for the next backup.


How the iPad 2 Smart Cover performs its magic

iFixit has figured out how Apple’s Smart Cover for the iPad 2 works. This blog post summarizes the findings.

One way in which Android really is more open than iOS

This post explains the tricky meaning of “open” with regard to Android: Sometimes Android is not open at all, sometimes its openness has negative consequences. The post concludes with one aspect of Android that is more open than iOS, in a manner that is only beneficial to programmers.


The Smithsonian captures intriguing wildlife pictures via automated cameras

The Smithsonian has captured 201,000 pictures via motion-activated automatic cameras in places around the world, such as the Peruvian Amazon or China [source: Engadget]. See five of them after the break.

DZone: a great news resource for software developers

DZone is a great website with news related to software development. It has the following advantages:
  • Topic-related subsites. These subsites are called zones and allow you to focus on what you want to know about. There currently are zones for the following topics: Agile, Cloud, Mobile, .Net, Java, Web Builder, IDEs & Tools, Languages, Architects, Books, Servers.
  • Friendly and knowledgeable community. DZoners tend to “get it” and to be courteous. In many other public web places, ignorant and hostile behavior is common.
  • Keeping up with trends. Many people contribute to DZone (some of my blog posts are republished there) which ensures a broad perspective.

Should Macs still have DVD drives?

Is there still a reason for Apple to provide DVD drives in Macs and MacBooks?


JavaScript values: not everything is an object

Update 2012-08-14: Rewrote most of the post, added Sect. 4 explaining typeof and instanceof.

This blog post explains that JavaScript has two main kinds of values: primitive values and objects. There are several things one needs to be aware of when working with them.

Do tablets make sense, yet?

In his blog post “Moving on from iPad ‘office productivity’ apps”, Marco Arment makes the case that even Apple is still in the process of figuring out what tablets are really good for. He mentions the keyboard dock being discontinued (others say it’s not). But his argument still stands: The iPad isn’t good with keyboards. Furthermore, Apple seems to have backed away from office productivity apps:


Movie: Conviction (2010)

Picture by Amazon
Conviction” [amazon.com, itunes.com, amazon.uk] is a movie about a woman that dedicated her life to proving her brother’s innocence, after he was convicted for murder. It doesn’t make it easy on us, because the brother does have some disagreeable traits, so we only hesitantly root for him and are never quite sure whether he is really innocent. The movie has a great script and a great cast with many familiar faces (Minnie Driver, Peter Gallagher, Melissa Leo, Juliette Lewis). The New York Times article “Betty Anne Waters, Real-Life Heroine of ‘Conviction’” has more on the real events behind the story.

Fringe: safe for now, actors’ input on roles

Two tidbits from a interview with John Noble (Walter) and Jasika Nicole (Astrid):


Four things that Apple should add to iOS

Update 2011-06-08: Several of my wishes have been fulfilled.

There are still enough things on iOS that add up to make it the best choice for non-technical people who just want a hassle-free experience. But, the competition is improving and bringing out tablet-specific editions:

  • Android Honeycomb has many user-interface innovations and improved looks.
  • WebOS apps can now also run in a browser (and probably as stand-alone desktop apps before long).
There are four instances where Apple is the one doing catch-up and needs to improve iOS (listed in order of urgency).


The sequel to “Last Airbender”: “Legend of Korra”

Don’t let the anime visuals and panned live-action remake fool you: “Avatar: The Last Airbender” is great TV. It rivals “Lord of the rings” in epic-ness and easily trumps it in character development. Now there is news about a sequel mini-series called “The Last Airbender: Legend of Korra”.

Ars reviews the Motorola Xoom (Android Honeycomb)

Quoting from the article:
If you compare the Xoom against the iPad 2 today, there isn't much of a case to be made in favor of the Xoom. If you make the same comparison four or five months from now when the Xoom has all of its features intact, the story is going to look rather different. LTE and Flash are both desirable features that would make the Xoom look really appealing to a decent-sized mainstream audience.
[...] If you are looking for the best tablet available today, then look no further than Cupertino [=Apple]. If you are an Android enthusiast and you want a good tablet that runs the same software as your phone, you should wait a few months for everything to solidify before you decide which Android tablet you want. Don't jump for the Xoom just because it's the first—they rushed it out prematurely hoping to capitalize on exactly that.
Related posts:

How you handle conflict might be determined in early childhood

The article “Early Attachment May Affect Our Ability to Resolve Conflict in Relationships” describes that early attachment (the relationship you had with your parents as an infant) determines how well you handle conflict later on. Interestingly, handling conflict well is not about avoiding it, but about letting go after it happens. It makes sense that being clingy with people would imply being clingy with thoughts and emotions. The article describes a lab experiment:


Visually comparing the sizes of Earth, other planets, and stars (video)

The video “Star Size Comparison” (duration: 2:34) nicely visualizes how tiny Earth (diameter 12756 km) is compared to the Sun (diameter 1,392,000 km, 109.1 times Earth’s). And how tiny the Sun is compared to other stars. Factoid from the video:
VY Canis Majoris (a red hypergiant) is the largest known star. It has a diameter of 2,800,000,000 km. It would take an airplane 1100 years to circle it, if it was flying at 900 km/h.
Video embedded after the break.


Lightweight JavaScript inheritance APIs

Creating objects via constructor functions is fairly straightforward in JavaScript. But as soon as you want to do inheritance, things become complicated. This post examines how inheritance works in traditional JavaScript. It then presents four APIs that make things easier, without adding too much bulk to the language: ECMAScript 5, YUI, Prototype.js, and John Resig’s Simple Inheritance.


What keeps me from switching from Firefox to Chrome

It feels like Firefox has lost some of its edge. Conversely, Chrome seems to move faster [1]. My main complaint about Firefox is that it still doesn’t have per-tab processes (they are working on them, under the name Electrolysis). Chrome has them and generally feels more responsive; Safari will get them soon [1]. But, until Chrome provides the following two features, I will stick with Firefox.

Why people confess to crimes they didn’t commit

Since 1989, DNA analysis has been used to prove that people who have been convicted are actually innocent. This post lists interesting facts about these exonerations and then describes a study on why some of them were due to (false) confessions.


Movie: Everybody’s fine (2009)

Everybody’s fine” [amazon.com, itunes.com, amazon.uk] is a quiet, emotionally satisfying drama. It has many small twists that keep things interesting and – thankfully – are not contrived. Most of the film is a little depressing, but things get better later on.

10 newborn baby animals (with pictures)

A post on UPI shows pictures of 10 baby animals that have been born in zoos around the world. Three pictures after the break.

Web sites: dynamic page extension versus paged navigation

Recently, more and more web sites are showing their content via dynamic page extension instead of paged navigation.
  • Dynamic page extension: New content is appended to the current page. Examples:
    • DZone and normal Twitter recognize when you are close to the end of the page and add new entries.
    • Mobile Twitter has a link at the end of the page to “show more”.
  • Paged navigation: New content is shown on a new page. Example: Google’s search results.
But good old-fashioned paged navigation has several advantages:

Summary: Apple’s iPad 2 introductions

Today, Apple introduced the iPad 2, more of an evolutionary than a revolutionary improvement to the original iPad. This post summarizes what is new.


John Siracusa on the Apple strategy tax

A strategy tax applies to one product of a company that becomes worse in order to help another product. A historic Microsoft example is where “the Internet Explorer team is not allowed to fix the DHTML editor because it might compete with Word.”

Two new Chrome dev features: OmniBox extensions, background pages

Google is currently developing two new features for Chrome: extensions for the OmniBox and background pages for webapps.

Crowdsourcing language translations

Crowdsourcing is the practice of asking the public to help perform a given task. These days, the internet is often used for the asking and for the performing. The most recent example is Twitter crowdsourcing the translation for its international editions, via a “Translation Center” website. Here is how it works:


Gender-neutral pronouns in English

Fill in the blank, with a possessive pronoun such as “my” and “your” to express that it’s the user’s name:
The user has to click on _____ name.

Fixing Mac OS window management

Window management on Mac OS X is currently a bit confusing: You have applications, Spaces, Exposé, and Dashboard. Mac OS X Lion will add Launchpad (an app launcher) and full-screen apps to that arsenal. This post lists ideas for simplification.


Next in social networking: reputation?

The post “Quora vs. StackExchange” argues that reputation is the next big thing in social networking.


Movie: Singles (1992)

Amazing that I’ve last seen “Singles” [itunes.com, amazon.com, amazon.uk] almost 20 years ago, when it first came out, at the movies. I liked it back then and I still like it now. It’s a fun romantic comedy about singles living in Seattle in the early nineties.