Tuesday, December 31, 2013

Concurrency Models, Rust, and Servo (lars.com)

This post explores the space of implementation choices in concurrency models for channel-based concurrent programming languages. It also discusses Rust's current choices in that space and their fit with the Servo parallel web browser. This post was prompted by the back-and-forth discussions on the rust-dev mailing list. Read more...

Monday, December 23, 2013

Startups should use a relational database (raycmorgan.com)

One of the main goals of a startup is to find a market with a problem and to create a solution that solves that problem. This is a hard process. A lot of your time will be spent learning about your (potential) customers. Once you have discovered a market need, the next thing to do is create the simplest solution that solves that problem. This is when you must make some simple yet important decisions about your early development process. Where are you going to host, what languages will you use, etc. One of the more important decisions you will make is what database you will use.

In a startup, technical decisions must be made quickly. The right technology choices will not mean success, and conversely will not lead to failure. What these choices will lead to however, is speed at which you can validate your hypothesize. So select a hosting provider that allows you to not worry about infrastructure. Go with a programming language that you know, and suits your problem well. Use a database that will allow you to ask it questions about the data — questions that you don’t even know you will have. Read more...

Thursday, December 19, 2013

How close are we to creating artificial intelligence? (aeon.co)

The very laws of physics imply that artificial intelligence must be possible. What's holding us up? Great essay by David Deutsch challenging how we think about GAI and process of thinking itself. Here follows few quotes I hop those will make you want to read all essay.

An AGI is qualitatively, not quantitatively, different from all other computer programs. The Skynet misconception likewise informs the hope that AGI is merely an emergent property of complexity, or that increased computer power will bring it forth (as if someone had already written an AGI program but it takes a year to utter each sentence). It is behind the notion that the unique abilities of the brain are due to its ‘massive parallelism’ or to its neuronal architecture, two ideas that violate computational universality. Expecting to create an AGI without first understanding in detail how it works is like expecting skyscrapers to learn to fly if we build them tall enough.

In 1950, Turing expected that by the year 2000, ‘one will be able to speak of machines thinking without expecting to be contradicted.’ In 1968, Arthur C. Clarke expected it by 2001. Yet today in 2012 no one is any better at programming an AGI than Turing himself would have been.

‘We humans pride ourselves on being the paragon of animals, but that pride is misplaced because they, too, have language, tools … And self-awareness.’

Remember the significance attributed to Skynet’s becoming ‘self-aware’? That’s just another philosophical misconception, sufficient in itself to block any viable approach to AGI. The fact is that present-day software developers could straightforwardly program a computer to have ‘self-awareness’ in the behavioural sense — for example, to pass the ‘mirror test’ of being able to use a mirror to infer facts about itself — if they wanted to. As far as I am aware, no one has done so, presumably because it is a fairly useless ability as well as a trivial one.

The battle between good and evil ideas is as old as our species and will go on regardless of the hardware on which it is running...

Furthermore, in regard to AGIs, like any other entities with creativity, we have to forget almost all existing connotations of the word ‘programming’. To treat AGIs like any other computer programs would constitute brainwashing, slavery, and tyranny. And cruelty to children, too, for ‘programming’ an already-running AGI, unlike all other programming, constitutes education. And it constitutes debate, moral as well as factual. To ignore the rights and personhood of AGIs would not only be the epitome of evil, but also a recipe for disaster: creative beings cannot be enslaved forever.

One implication is that we must stop regarding education (of humans or AGIs alike) as instruction — as a means of transmitting existing knowledge unaltered, and causing existing values to be enacted obediently. As Popper wrote (in the context of scientific discovery, but it applies equally to the programming of AGIs and the education of children): ‘there is no such thing as instruction from without … We do not discover new facts or new effects by copying them, or by inferring them inductively from observation, or by any other method of instruction by the environment. We use, rather, the method of trial and the elimination of error.’ That is to say, conjecture and criticism. Learning must be something that newly created intelligences do, and control, for themselves.

Quote of the Day - 2013-12-19

It always seems impossible until its done.

   - Nelson Mandela

Wednesday, December 18, 2013

Quote of the Day - 2013-12-18

Your time is limited, so don't waste it living someone else's life. 
Don't be trapped by dogma - which is living with the results of other people's thinking. 
Don't let the noise of others' opinions drown out your own inner voice. 
And most important, have the courage to follow your heart and intuition. 
They somehow already know what you truly want to become. 
Everything else is secondary.

Friday, December 13, 2013

Baby's First Garbage Collector (journal.stuffwithstuff.com)

There’s a bunch of different ways you can implement the process of finding and reclaiming all of the unused objects, but the simplest and first algorithm ever invented for it is called “mark-sweep”. It was invented by John McCarthy, the man who invented Lisp and beards, so you implementing it now is like communing with one of the Elder Gods, but hopefully not in some Lovecraftian way that ends with you having your mind and retinas blasted clean. It works almost exactly like our definition of reachability:
  • Starting at the roots, traverse the entire object graph. Every time you reach an object, set a “mark” bit on it to true.
  • Once that’s done, find all of the objects whose mark bits are not set and delete them.
That’s it. Read more....

Wednesday, November 27, 2013

Visualizing Garbage Collection in Ruby and Python (patshaughnessy.net)

Since this is the “Ruby Python” conference, I thought it would be fun to compare how garbage collection works inside of Ruby and Python. But before we get to that, why talk about garbage collection at all? After all, it’s not the most glamorous, exciting topic, is it? How many of you get excited by garbage collection? [ A number of RuPy attendees actually raised their hands! ] Read more...

PostgreSQL: Don't Use CHAR or VARCHAR (blog.jonanin.com)

Earlier this week, while browsing some stack overflow questions about postgres' textual data types, I came across a link to a set of benchmarks that compare the performance of the CHAR, VARCHAR, and TEXT types in PostgreSQL — I highly recommend reading through the article if you have the time. It turns out that many variable length data types (and some that are fixed length, like CHAR) are represented internally with the same varlena data structure, which is simply a byte array prefixed with a 32-bit length field. Read more...

Tuesday, November 26, 2013

SQL Server: ntext, text, and image are deprecated (msdn.microsoft.com)

ntext, text, and image data types will be removed in a future version of Microsoft SQL Server. Avoid using these data types in new development work, and plan to modify applications that currently use them. Use nvarchar(max), varchar(max), and varbinary(max) instead. Read more...

Tuesday, November 19, 2013

Australis is landing in Firefox Nightly (blog.mozilla.org)

A very exciting set of changes is landing in Firefox Nightly. We’ve been calling the project Australis, but, simply, it’s the next iteration of the Firefox user interface. It’s not quite finished, and it needs more polish, which is exactly why we’re so eager to get it out to a wider set of the community. So, what is Australis? Read more...

Friday, November 15, 2013

Amazon RDS for PostgreSQL (aws.amazon.com)

Amazon RDS makes it easy to set up, operate, and scale PostgreSQL deployments in the cloud. With Amazon RDS, you can deploy scalable PostgreSQL deployments in minutes with cost-efficient and resizable hardware capacity. Amazon RDS manages complex and time-consuming administrative tasks such as PostgreSQL software installation and upgrades, storage management, replication for high availability and back-ups for disaster recovery. With just a few clicks in the AWS Management Console, you can deploy a PostgreSQL database with automatically configured database parameters for optimal performance. Read more...

Tuesday, November 12, 2013

Isomorphic JavaScript: The Future of Web Apps (nerds.airbnb.com)

At Airbnb, we’ve learned a lot over the past few years while building rich web experiences. We dove into the single-page app world in 2011 with our mobile web site, and have since launched Wish Lists and our newly-redesigned search page, among others. Each of these is a large JavaScript app, meaning that the bulk of the code runs in the browser in order to support a more modern, interactive experience.

This approach is commonplace today, and libraries like Backbone.js, Ember.js, and Angular.js have made it easier for developers to build these rich JavaScript apps. We have found, however, that these types of apps have some critical limitations. To explain why, let’s first take a quick detour through the history of web apps. Read more...

Linux ate my ram (linuxatemyram.com)

What's going on? Linux is borrowing unused memory for disk caching. This makes it looks like you are low on memory, but you are not! Everything is fine! Read more...

Monday, November 11, 2013

Why Fluent NHibernate tries to write enums as strings?

This is frequently asked question in Stack Overflow site. The answer is very simple: you should specify the enum type in your mappings using CustomType<T>() for example CustomType<MyEnumType>(). This will write integers into the database then you save mapped object. Here follows example mappings:

public class UserMap : ClassMap<User>
    public UserMap()
        Id(x => x.Id).GeneratedBy.Identity();
        Map(x => x.LoginName).Length(64).Nullable();
        Map(x => x.EMail).Length(128).Nullable();
        Map(x => x.FirstName).Length(128).Nullable();
        Map(x => x.LastName).Length(128).Nullable();
        Map(x => x.Birthday).Nullable();
        Map(x => x.Role).CustomType<Roles>().Not.Nullable();
        References(x => x.Employer).Column("EmployerId").LazyLoad().Nullable();

Troubleshoot and Optimize Queries with Windows Azure SQL Database (technet.microsoft.com)

Windows Azure SQL Database is a cloud based relational database service from Microsoft. SQL Database provides web-facing database functionality as a utility service. Cloud-based database solutions such as SQL Database can provide many benefits, including rapid provisioning, cost-effective scalability, high availability, and reduced management overhead. This paper provides guidelines on the Dynamic Management Views that are available in SQL Database and how they can be used for troubleshooting purposes. Read more

Friday, November 1, 2013

Android KitKat (developer.android.com)

Welcome to Android 4.4 KitKat! Android KitKat brings all of Android's most innovative, most beautiful, and most useful features to more devices everywhere. Find out more about KitKat here.

Thursday, October 31, 2013

Lightbeam for Firefox (mozilla.org)

Shine a light on who’s watching you. Lightbeam is a Firefox add-on that uses interactive visualizations to show you the first and third party sites you interact with on the Web. As you browse, Lightbeam reveals the full depth of the Web today, including parts that are not transparent to the average user. Read more...

Wednesday, October 30, 2013

Lisp for C++ programmers (prog-elisp.blogspot.ru)

One old good friend of mine, whom I respect a lot and who is a very good C++ programmer, recently asked me to give him an example of how it's possible make new language features in Lisp. He's aware of Lisp's ability to invent new syntax, and he's also excited about C++11. So he wonders how is that possible to introduce new syntax into your language all by yourself, without having to wait for the committee to adopt the new feature. Read more...

Monday, October 28, 2013

MongoDB is to NoSQL like MySQL to SQL — in the most harmful way (use-the-index-luke.com)

Yesterday evening I tweeted: “MongoDB seems to be as bad for NoSQL as MySQL is for SQL.” Unfortunately, I tweeted without context. But I guess I couldn’t have given all the required context in a single tweet anyway, so I’m dedicating this post to it. I hope this answers some of the questions I’ve got in response to the tweet. Read more...

Call me maybe: Cassandra (aphyr.com)

Cassandra is a Dynamo system; like Riak, it divides a hash ring into a several chunks, and keeps N replicas of each chunk on different nodes. It uses tunable quorums, hinted handoff, and active anti-entropy to keep replicas up to date. Unlike the Dynamo paper and some of its peers, Cassandra eschews vector clocks in favor of a pure last-write-wins approach. If you read the Riak article, you might be freaking out at this point. In Riak, last-write-wins resulted in dropping 30-70% of writes, even with the strongest consistency settings (R=W=PR=PW=ALL), even with a perfect lock service ensuring writes did not occur simultaneously. To understand why, I’d like to briefly review the problem with last-write-wins in asynchronous networks. Read more...

Friday, October 25, 2013

Knockout v3.0.0 released (knockoutjs.com)

Knockout.js takes backward compatibility seriously. If you’re using a recent v2.x build, you will typically be able to drop in Knockout v3.0.0 without having to make any changes to your application code. Version 3.0.0 is intended to be fully backward-compatible except for a few carefully chosen design changes that enable major new features or fix longstanding issues.

Here follows new features:

  • Computed properties now notify only when their value changes
  • Bindings are now refreshed independently
  • optionsCaption now HTML-encodes its output

Thursday, October 24, 2013

TypeScript 0.9 & 0.9.1– What’s Improved (flippinawesome.org)

I’ve been noodling around with Typescript for a while and enjoying the various improvements over standard Javascript. Quite a bit of this comes from ES6 improvements which Typescript incorporates (and transforms to a sensible ES3 output) – for example real classes, and this-capturing lambda expressions that help avoid the number one kick-yourself error of Javascript stupidity.

Syntactic sugar aside, there are a few reasons I like Typescript. An improved IDE experience in VS (and VS2012 is already quite good with intellisense via jsdoc comments and JS execution). Static typing improves the self-documenting nature of code, helps enforce a cleaner design, and ensures program correctness. Type definition files are available (for example, the DefinitelyTyped project maintains a good selection) for popular JS libraries to allow their use with full type information in a Typescript program, and this interoperability is huge.

In this post I’m going to discuss some of the important improvements in the recent TypeScript 0.9 and 0.9.1 releases. Read more...

Tuesday, October 15, 2013

For Best Results, Don't Initialize Variables (codinghorror.com)

I noticed on a few projects I'm currently working on that the developers are maniacal about initializing variables. That is, either they initialize them when they're declared or they initialize them in the constructor. Well, this all struck me as unnecessary work in the .NET world. Sure, maybe that's the convention in the wild and wooly world of buffer overruns C++, but this is managed code. Do we really want to play the I'm smarter than the runtime game again? Read more...

Friday, October 11, 2013

Why Registers Are Fast and RAM Is Slow (mikeash.com)

In the previous article on ARM64, I mentioned that one advantage of the new architecture is the fact that it has twice as many registers, allowing code load data from RAM less often, which is much slower. Reader Daniel Hooper asks the natural question: just why is RAM so much slower than registers? Read here...

Wednesday, October 9, 2013

Firefox Developer Tools and Firebug (hacks.mozilla.org)

If you haven’t tried the Firefox Developer Tools in the last 6 months, you owe it to yourself to take another look. Grab the latest Aurora browser, and start up the tools from the Web Developer menu (a submenu of Tools on some platforms).

The tools have improved a lot lately: black-boxing lets you treat sources as system libraries that won’t distract your debugging flow. Source maps let you debug source generated by transpilers or minimizers. The inspector has paint flashing, a new font panel, and a greatly improved style inspector with tab completion and pseudo-elements. The network monitor helps you debug your network activity. The list goes on, and you can read more about recent developments in our series of Aurora Posts. Read more...

Friday, October 4, 2013

DRM in HTML5 (bugzilla.mozilla.org)

The Director of the W3C, Tim Berners-Lee, has stated that playback of protected content (i.e. DRM) is in scope for HTML5. [1] This was further confirmed in the charter on 20th September. [2]

According to the Director,

"While the W3C Team do believe that use cases like premium content should be addressed in the Open Web Platform in order to bring it to its full potential, we're also looking forward for the HTML Working Group to address any technical concerns raised against the EME draft."
1. http://lists.w3.org/Archives/Public/public-html-admin/2013Feb/0122
2. http://lists.w3.org/Archives/Public/public-html-admin/2013Sep/0129.html

Read more

Using Katas To Improve (blog.8thlight.com)

When I joined 8th Light, I came across katas. The idea of a kata is to practice coding by doing it repetitively. You build muscle memory in the mechanics of coding -- setting up the editor, reacting to errors, letting your fingers get used to the controls. Initially I thought it was an amusing little activity. Then I started to wonder if I can do a kata on something more than coin-changer or roman numerals, something with a little more substance. I thought it could be possible to write tic-tac-toe as a kata. My main goal is to develop a workflow so I can write it under an hour. I also wanted to record myself and bought Screenflow. After all, the kata is meant to be a performance. Read more...

new UNIX implementation (groups.google.com)

Starting this Thanksgiving I am going to write a complete Unix-compatible software system called GNU (for Gnu's Not Unix), and give it away free to everyone who can use it. Contributions of time, money, programs and equipment are greatly needed.

To begin with, GNU will be a kernel plus all the utilities needed to write and run C programs: editor, shell, C compiler, linker, assembler, and a few other things. After this we will add a text formatter, a YACC, an Empire game, a spreadsheet, and hundreds of other things. We hope to supply, eventually, everything useful that normally comes with a Unix system, and anything else useful, including on-line and hardcopy documentation. Read more...

Wednesday, October 2, 2013

Firefox: MemShrink progress, week 117–120, fix saves gigabytes of memory on image-heavy pages (blog.mozilla.org)

Lots of important MemShrink stuff has happened in the last 27 days: 22 bugs were fixed, and some of them were very important indeed. Read more.

Dynamic Google Maps loading

Usually if you include script tag in head of HTML document JavaScript library is loaded at the time of page load. If you want to reduce page download time you can defer loading JavaScript library until it is required. This JavaScript technique sometimes is called “Asynchronous“ or „On demand” JavaScript loading. Here I will show you how you could defer loading of Google Maps library. In first example I will use JQuery library and plain JavaScript in second. Pay attentional to the callback parameter in the query string we use to request Google Maps service. This parameter tells library which your function it should call then library is loaded.

Here follows simple html we use in our example:

        <meta charset="utf-8" />
 <p>See the Maps API used to embed a map into an HTML page without JS errors:</p>
 <div id="google-map" style="width: 400px; height: 400px;"></div>

 <script type="text/javascript">
<!-- One of the following script variants gose here -->

Defer loading of Google Maps library by using JQuery:


function gMapsCallback() {
    var location = new google.maps.LatLng(41.890522, -87.668753);
    var options = {
        center: new google.maps.LatLng(41.890540, -87.668753),
        zoom: 14,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    var map = new google.maps.Map($('#google-map')[0], options);
    var content = '<div style="width: 200px;">Hello!!!</div>';
    var marker = new google.maps.Marker({
        position: location,
        map: map,
        title: 'DevBridge Group'
    var infowindow = new google.maps.InfoWindow();
    infowindow.open(map, marker);

Defer loading of Google Maps library by using plain JavaScript:

    var element = document.getElementById('google-map');
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = 'http://maps.google.com/maps/api/js?sensor=false&async=2&callback=gMapsCallback';
    element.parentNode.insertBefore(script, element.nextSibling);
    function gMapsCallback() {
        var location = new google.maps.LatLng(41.890522, -87.668753);
        var options = {
            center: new google.maps.LatLng(41.890540, -87.668753),
            zoom: 14,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        var mapElement = document.getElementById('google-map');
        var map = new google.maps.Map(mapElement, options);
        var content = '<div style="width: 200px;">Hello!!!</div>';
        var marker = new google.maps.Marker({
            position: location,
            map: map,
            title: 'DevBridge Group'
        var infowindow = new google.maps.InfoWindow();
        infowindow.open(map, marker);

That is all to it.

Tuesday, October 1, 2013

RyuJIT: The next-generation JIT compiler for .Net (blogs.msdn.com)

The world is moving to 64-bit computing even though it isn’t always faster or more efficient than 32-bit. A lot of programs run faster on 32-bit than on 64-bit, for a variety of reasons. One example of this is the 64-bit JIT compiler in .NET. It does a great job of making your program run fast, but it’s not a fast program itself. All that’s about to change: a new, next-generation x64 JIT compiler that compiles code twice as fast is ready to change your impressions of 64-bit .NET code. Read more....

Monday, September 30, 2013

ARM64 (mikeash.com)

Ever since the iPhone 5S was announced a couple of weeks ago, the world of tech journalism has been filled with massive quantities of misinformation. Unfortunately, good information takes time, and the world of tech journalism is more about speed than accuracy. Today, as suggested by a variety of readers, I'm going to give the rundown of just what 64-bit ARM in the iPhone 5S means for you, in terms of performance, capabilities, and development. Read more...

Thursday, September 26, 2013

A Twisty Maze of Linux Clocks, All Slightly Different (geekwhisperer.blogspot.co.uk)

Pardon me while I indulge my inner geek. I'm going to talk about how clocks work in Linux. Why am I doing this? Because you need to know. It's confusing, complicated, and not terribly well documented (yet). But mostly because I want to indulge my inner geek.

Clocks and timers can be a bit confusing. There are a lot of them, and they all seem to work slightly differently. This post describes the clocks available in Linux, from the most common (time() and gettimeofday()) to the more esoteric (clock_gettime() and the latest clock IDs. Read more...

Tuesday, September 24, 2013

What’s New in Better CMS (devbridge.com)

But let’s start from the beginning for folks who are hearing about us for the first time. Ambitious, passionate, but perhaps a little understaffed and inexperienced we were. Tens of thousands of mystical man hours later, at the five year anniversary of our organization, we are proud to present the Better CMS v1.3.0. Originally a paid product, today the open source Better CMS fills an industry gap on the .NET platform. Read more...

Rob Pike: Less is exponentially more (commandcenter.blogspot.de)

I was asked a few weeks ago, "What was the biggest surprise you encountered rolling out Go?" I knew the answer instantly: Although we expected C++ programmers to see Go as an alternative, instead most Go programmers come from languages like Python and Ruby. Very few come from C++. We—Ken, Robert and myself—were C++ programmers when we designed a new language to solve the problems that we thought needed to be solved for the kind of software we wrote. It seems almost paradoxical that other C++ programmers don't seem to care. I'd like to talk today about what prompted us to create Go, and why the result should not have surprised us like this. I promise this will be more about Go than about C++, and that if you don't know C++ you'll be able to follow along. The answer can be summarized like this: Do you think less is more, or less is less? Read more...

Monday, September 23, 2013

The Architecture of Open Source Applications: nginx (aosabook.org)

nginx (pronounced "engine x") is a free open source web server written by Igor Sysoev, a Russian software engineer. Since its public launch in 2004, nginx has focused on high performance, high concurrency and low memory usage. Additional features on top of the web server functionality, like load balancing, caching, access and bandwidth control, and the ability to integrate efficiently with a variety of applications, have helped to make nginx a good choice for modern website architectures. Currently nginx is the second most popular open source web server on the Internet. Read more...

Sunday, September 22, 2013

FreeBSD 10′s New Technologies and Features (freebsdnews.net)

FreeBSD 10 has been in the works for a while. FreeBSD 9 became available on 12 January 2012 and now 20 months later, FreeBSD 10 is shaping up nicely, with two alpha releases available for testing.

According to the Release Schedule FreeBSD 10 will receive the RELEASE status in November, but since the developers aim for quality of product over speed of release, this may slip into Dec 2013 / Jan 2014.

There has been a lot of maturing technologies in FreeBSD 10, with many new features which make this release, I think, the most exciting one in years. A lot of development has gone into virtualisation support. Virtualisation with FreeBSD Jails has been available for a long time, but not so much “full virtualisation”.

Let’s have a look at the some of the most talked about, most requested and most interesting features that have found their way into or are planned for “10.0″, but may not make the deadline. Read more

Friday, September 20, 2013

Joe Armstrong on Programmer Productivity (groups.google.com)

Once upon a very long time ago we did a project to compare the efficiency of Erlang to PLEX. We implemented "the same things" (TM) in Erlang and PLEX and counted total man hours. We did this for several different things. Erlang was "better" by a factor of 3 or 25 (in total man hours) - the weighted average was a factor 8. They asked "what is the smart programmer effect". We said "we don't know". We revised the figure 8 down to 3 to allow for "the smart programmer effect" - this was too high to be credible, so we revised it down to 1.6. (the factors 3 and 1.6 where just plucked out of the air with no justification). Experiments that show that Erlang is N times better than "something else" won't be believed if N is too high. Read more...

Edward C++Hands (bartoszmilewski.com)

I’ve been looking for a good analogy of what programming in C++ feels like and I remembered this 1990 Tim Burton movie, Edward Scissorhands.

I often have these kinds of thoughts after attending C++ conferences: this time it was Going Native 2013. The previous year, the excitement was all about the shiny new C++11 Standard. This year it was more of a reality check. Don’t get me wrong — there were many stunning dog hairdos on display (I mean C++ code that was elegant and simple) but the bulk of the conference was about how to avoid mutilation and how to deliver first aid in case of accidental amputation.

There was so much talk about how not to use C++ that it occurred to me that maybe this wasn’t the problem of incompetent programmers, but that straightforward C++ is plain wrong. So if you just learn the primitives of the language and try to use them, you’re doomed.

Read more

Thursday, September 19, 2013

Lets take a look at getting started using Grunt to compile our Sass (ryanchristiani.com)

There are a lot of new tools out there to help speed up and streamline your workflow as a developer, and to be honest they can seem a bit daunting to get into. Two new tools I have started using this year were Grunt and Sass. Grunt is a command-line JavaScript Task Runner, and Sass is a Css preprocessor that lets you write more powerful css, with the use of variables, mixins/functions and nesting! Lets take a look at getting started using Grunt to compile our Sass. Read more...

Bjarne Stroustrup - The Essence of C++: With Examples in C++84, C++98, C++11, and C++14 (msdn.com)

C++11 is being deployed and the shape of C++14 is becoming clear. This talk examines the foundations of C++. What is essential? What sets C++ apart from other languages? How do new and old features support (or distract from) design and programming relying on this essence?

I focus on the abstraction mechanisms (as opposed to the mapping to the machine): Classes and templates. Fundamentally, if you understand vector, you understand C++.

Type safety and resource safety are key design aims for a program. These aims must be met without limiting the range of applications and without imposing significant run-time or space overheads. I address issues of resource management (garbage collection is not an ideal answer and pointers should not be used as resource handles), generic programming (we must make it simpler and safer), compile-time computation (how and when?), and type safety (casts belongs in the lowest-level hardware interface). I will touch upon move semantics, exceptions, concepts, type aliases, and more. My aim is not so much to present novel features and technique, but to explore how C++’s feature set supports a new and more effective design and programming style.

Watch video...

Wednesday, September 18, 2013

There is Hope (wsj.com)

The big news is that, for the first time since these reports started coming out in 1990, the new one dials back the alarm. It states that the temperature rise we can expect as a result of man-made emissions of carbon dioxide is lower than the IPCC thought in 2007.

Admittedly, the change is small, and because of changing definitions, it is not easy to compare the two reports, but retreat it is. It is significant because it points to the very real possibility that, over the next several generations, the overall effect of climate change will be positive for humankind and the planet.


This work was created by Ferdi Rizkiyanto and is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License. H/T to deyanaus and logicman.

Web development in C: crazy? (medium.com)

In other words, if you decide to do web development in C, you’ll probably have to go it alone in building large parts of your application stack—maybe even all of it. But there are signs that that could be changing, and I think that this could be an encouraging development.

While some Lone Wolf McQuade-style developers prefer to work without frameworks (or to create their own from scratch), let’s face it: frameworks can offer enormous productivity gains. And if you use solid frameworks in a careful fashion, those productivity gains can be reaped at little detriment to things like performance and customizability. There aren’t a whole lot of frameworks for C, but there are a few that I’ve come across that are worth mentioning... Read more...

Monday, September 16, 2013

Everything .NET programmers know about Asynchronous Programming is wrong (hanselminutes.com)

Scott gets schooled by Damian and Levi on the differences between parallelism, background processing, and asynchronous programming. How does await and async change the game and what do you need to know to get started today.

Listen here...

Thursday, September 12, 2013

Qt is moving from WebKit and will base future Web engine on Chromium (digia.com)

A lot has happened with Web technologies in general since we introduced the first version of Qt WebKit in 2007. From having a couple of percent market share, the WebKit open source project nowadays has became the most widely used browser engine in the world. While the Qt port of WebKit was pretty much the first non-Apple port of WebKit, many other projects and companies joined the project over the years to follow.

The Chromium project took an especially big role in the project and became over time the biggest contributor to WebKit (followed by Apple and with Qt on the third place). The cooperation between different companies on one open source project was, however, never without difficulties, and this spring Google decided to leave the WebKit project in favor of their own fork of WebKit, Blink.

Since then, Blink, which really is a very integrated part of Chromium, and WebKit have been going separate ways, and the two code bases have been rapidly diverging. Because of this, the Digia Qt R&D WebKit team decided to have a closer look at both Chromium and WebKit to decide how we could offer the best possible Web engine for Qt in the future.

Read more here...

Wednesday, September 11, 2013

FreeBSD Is No Longer Building GCC By Default (phoronix.com)

As of last week, the GNU Compiler Collection (GCC) is no longer being compiled by default as part of the FreeBSD base system.

Going back for many months we have known that FreeBSD developers (and BSD users in general) have been pushing for a LLVM/Clang world and to limit the usage of GCC. Clang has grown in functionality for being on-par with GCC as a C/C++ compiler and it's more liberally licensed than the GPLv3 GCC and the LLVM-based feature-set continues to expand like faster and lighter compilations. This has been part of the plan for FreeBSD 10.


FreeBSD logo

Responsive Design is Not About Screen Sizes Any More (speckyboy.com)

The importance of Web performance has been slightly overlooked since the birth of responsive design. Designers and developers have been focusing on how to solve the responsive puzzle and, along their way, a new multi-bandwidth, multi-device, multi-location web is starting to come into focus. To be prepared for tomorrow’s problems, we have to include performance as an essential consideration, as the desktop-centered web is disappearing before our eyes. The mobile user is hastier and readier and won’t jump through hoops to get the content, and since more and more sites spring up every day, being fast will mean being ahead. Read more...

Android devices in various sizes.

There are hundreds of devices with different screen sizes and resolutions. (Image credit: Android Design. Used under Creative Commons license.)

Tuesday, September 10, 2013

First actual computer bug was found today, 66 years ago (grahamcluley.com)

'Software Bugs' photo (c) 2006, Martin Maciaszek - license: http://creativecommons.org/licenses/by/2.0/

66 years ago today, on the 9th September, 1947, operators of the Mark II Aiken Relay Computer being tested at Harvard University, found something curious trapped between points at Relay #70, Panel F. A moth. Read more...

Monday, September 9, 2013

This release expands PostgreSQL's reliability, availability, and ability to integrate with other databases (postgresql.org)

The PostgreSQL Global Development Group announces the release of PostgreSQL 9.3, the latest version of the world's leading open source relational database system. This release expands PostgreSQL's reliability, availability, and ability to integrate with other databases. Users are already finding that they can build applications using version 9.3 which would not have been possible before.Read more...

Sunday, September 8, 2013

In the elder days of art

In the elder days of art
Builders wrought with greatest care
Each minute and unseen part,
For the Gods are everywhere.

-- Wittegenstein

Thursday, August 29, 2013

The Web Developer's SEO Cheat Sheet 2.0 (moz.com)

It is my honor and privilege today to introduce the brand-new version of The Web Developer's SEO Cheat Sheet. This free and downloadable document covers all of the important SEO code and best practices that are needed by online marketers and developers.

Read more

Periodic Table of the HTML5 Elements (joshduck.com)

The table shows the 107 elements currently in the HTML5 working draft

Wednesday, August 28, 2013

SQLite version 3.8.0 released (sqlite.org)

SQLite version 3.8.0 might easily have been called "3.7.18" instead. However, this release features the cutover of the next generation query planner or NGQP, and there is a small chance of breaking legacy programs that rely on undefined behavior in previous SQLite releases, and so the minor version number was incremented for that reason. But the risks are low and there is a query planner checklist is available to application developers to aid in avoiding problems.

Read more

Go After 2 Years in Production (iron.io)

After running Go for two years in production at Iron.io, I wanted to share our experience/feelings about it. We were one of the first companies to use Go (golang) in production and we didn't know what to expect in the long run, but so far, so great.

I talked a little about about this in a previous post about switching to Go from Ruby, but this will go into specific things that we love about the language, the things we learned along the way. In no specific order, here they are:

  • Performance
  • Memory
  • Concurrency
  • Reliability
  • Deployment
  • Talent

Read more

Tuesday, August 27, 2013

Scaling Reddit from 1 Million to 1 Billion–Pitfalls and Lessons (infoq.com)

Jeremy Edberg is currently the Reliability Architect for Netflix, the largest video streaming service in the world. Before that he ran Reddit, an online community for sharing and discussing interesting things on the internet that does more than two billion page views a month.

Jeremy Edberg shares some of the lessons learned scaling Reddit, advising on pitfalls to avoid.

Read more here and here...

Friday, August 23, 2013

ECMAScript 6 modules: the future is now (2ality.com)

This blog post first explains how modules work in ECMAScript 6, the next version of JavaScript. It then describes tools that allow you to already use them now.

Read more

WebKit Has Implemented srcset, And It’s A Good Thing (smashingmagazine.com)

WebKit has made some serious news by finally implementing the srcset attribute. As Chair of the W3C’s Responsive Images Community Group, I’ve been alternately hoping for and dreading this moment for some time now. It turns out to be good news for all involved parties—the users browsing the Web, most of all.

As with all matters pertaining to “responsive images”: it’s complicated, and it can be hard keeping up with the signal in all the noise. Here’s what you need to know.


LESS – The Dynamic Stylesheet (designmodo.com)

You might have heard until now of LESS and you might know it has something to do with CSS and styling websites, but I am quite sure that not many people really know what LESS actually is and why is it so special that it got its own name.

Unlike CSS, LESS is an open-source dynamic stylesheet language, with its first version being written in Ruby, but replaced by JavaScript later on. LESS is more complex than CSS is, providing variables, nesting, mixins (reusable classes), operators and functions and allows real-time compilation via LESS.js by the browser in use. LESS can run on both client- and server-side and can even be compiled into normal, plain CSS.

Using LESS would allow writing CSS in a programming way instead of static, as CSS is by default.


Thursday, August 22, 2013

Firebug 1.12 New Features (mozilla.org)

Firebug team released fresh new Firebug 1.12 and here is a list of some new features we have implemented in this version.

Read more

LEAKED: German Government Warns Key Entities Not To Use Windows 8 – Links The NSA (investmentwatchblog.com)

According to leaked internal documents from the German Federal Office for Information Security (BSI) that Die Zeit obtained, IT experts figured out that Windows 8, the touch-screen enabled, super-duper, but sales-challenged Microsoft operating system is outright dangerous for data security. It allows Microsoft to control the computer remotely through a built-in backdoor. Keys to that backdoor are likely accessible to the NSA – and in an unintended ironic twist, perhaps even to the Chinese.

The backdoor is called “Trusted Computing,” developed and promoted by the Trusted Computing Group, founded a decade ago by the all-American tech companies AMD, Cisco, Hewlett-Packard, IBM, Intel, Microsoft, and Wave Systems. Its core element is a chip, the Trusted Platform Module (TPM), and an operating system designed for it, such as Windows 8. Trusted Computing Group has developed the specifications of how the chip and operating systems work together.


Wednesday, August 21, 2013

PuTTY 0.63 released, fixing SECURITY HOLES (greenend.org.uk)

PuTTY 0.63, released today, fixes four security holes in 0.62 and before:

Other than that, there are mostly bug fixes from 0.62 and a few small features.

download here...

Where the heck do I host my .NET app? (wordpress.com)

In this short series of posts, I’m looking at the various options for hosting different types of applications. I first looked at Node.js and its diverse ecosystem of providers, and now I’m looking at where to host your .NET application. Regardless of whether you think .NET is passé or not, the reality is that there are millions upon millions of .NET developers and it’s one of the standard platforms at enterprises worldwide. Obviously Microsoft’s own cloud will be an attractive place to run .NET web applications, but there may be more options than you think.


Tuesday, August 20, 2013

Crosswords don’t make you clever (economist.com)

Doing crosswords isn’t good for your brain? It is good for improving your crossword skills but does it lead on to other kinds of advanced cognitive function? No. There is no translation of the crossword skills to other skill categories. That shouldn’t discourage anyone, they are a lot of fun, but a vigorous hike will do more for your cognitive function.


Node.js incorrectly parses HTTP methods (chmod777self.com)

First, however, let's modify our server script just a bit so we can see what the Node.js server's view of the request method received is:
  http.createServer(function(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World " + request.method);
Start it up:
bash-3.2$ node server.js
Now do:
bash-3.2$ telnet 8888
Connected to localhost.
Escape character is '^]'.
GEM / HTTP/1.1
Host: example.org

HTTP/1.1 200 OK
Content-Type: text/plain
Date: Mon, 19 Aug 2013 20:48:04 GMT
Connection: keep-alive
Transfer-Encoding: chunked

Hello World GET

Read more

Monday, August 19, 2013

In Defense of JavaScript Cryptography (meadhbh.org)

Google "javascript cryptography" and you'll quickly find a fair number of people dismissing JS Crypto as a fools errand. My favorite is the Matasanto Security article entitled "JavaScript Cryptography Considered Harmful." The tone of the article seems a little alarmist to me. But... it also happens to bring up a few really great points. Its critique of the current state of web app crypto is mostly spot-on. However, the state of the art is evolving quickly and may soon make the Matasano Security article mostly irrelevant...


JavaScript Strategies at Microsoft with Scott Hanselman (javascriptjabber.com)

... I’ve been doing a lot of talks and thinking about where JavaScript fits into the world going forward. Are we in the middle of some epic shift where JavaScript’s going to do all the work and the server is just going to return JSON? Or is there a reason to render html on the server? ...


Saturday, August 17, 2013

Node.js error handling (snmaynard.com)

While building out Bugsnag I’ve had a bunch of experience with the state of error handling and thought I’d pass on what I’ve found. I’m going to discuss the various ways I’ve seen error handling done, and talk a little about what the future holds.


Friday, August 16, 2013

Go as an alternative to Node.js for Very Fast Servers (safariflow.com)

Node.js has gained acceptance in mainstream software development at an amazing pace. There are a lot of good reasons for this: everyone loves software that is Very Fast, npm is truly an excellent package management tool/ecosystem, and its release coincided with the web development community as a whole awakening to the fact that JavaScript is a Real Programming Language. However, I think there are assumptions lurking in the subtext of the conversation around Node that are false, yet have contributed greatly to the excitement around it. I’ll whine about this briefly below...


Toward Modern Web Apps with ECMAScript 6 (sencha.com)

ECMAScript, the official name for the language we all know as JavaScript, has enjoyed tremendous success over the last couple of years. With convergent standard support, performance boosts from modern JavaScript engines, as well as its foray into the server-side stack, ECMAScript has gained significant traction and redefined the scope of HTML5 applications. The final requirement for world domination is the modernization of its syntax and run-time, which is coming in ECMAScript 6 and is the subject of this post.


Gumbo - A pure-C HTML5 parser (github.com)

Gumbo is an implementation of the HTML5 parsing algorithm implemented as a pure C99 library with no outside dependencies. It's designed to serve as a building block for other tools and libraries such as linters, validators, templating languages, and refactoring and analysis tools.


Destructuring Assignment in ECMAScript 6 (fitzgeraldnick.com)

Destructuring assignment allows you to assign the properties of an array or object to variables using syntax that looks similar to array or object literals. This syntax can be extremely terse, while still exhibiting more clarity than the traditional property access...

let [first, second, third] = someArray;

TC39 (the governing committee of ECMAScript) has already reached consensus on destructuring assignment and it is part of the draft ES6 specification. Effectively what this means is that it is now up to the people writing JavaScript engines to start implementing it; SpiderMonkey (Firefox's JS engine) already has support for much of it.


Thursday, August 15, 2013

SQL Server script to adding an identity to an existing column

As every SQL Server developer knows you can't alter the existing columns for identity. But there is an work around to solve this limitation. You can create a new table with identity, then migrate data form old to new table and then drop the old table. And here follows the script snippet:



CREATE TABLE [dbo].[tmp_Projects](
 [Id] [bigint] NOT NULL IDENTITY(1,1),
 [Name] [nvarchar](250) NOT NULL,
 [WebsiteUrl] [nvarchar](200) NULL,
 [IsNew] [bit] NOT NULL,
 [CreatedOn] [datetime] NOT NULL,
 [CreatedBy] [varchar](50) NOT NULL,



SET IDENTITY_INSERT dbo.[tmp_Projects] ON

IF EXISTS ( SELECT * FROM dbo.[Projects] )
 INSERT INTO dbo.[tmp_Projects] (
 FROM dbo.[Projects] TABLOCKX

SET IDENTITY_INSERT dbo.[tmp_Projects] OFF

DROP TABLE dbo.[Projects]

Exec sp_rename 'tmp_Projects', 'Projects'

How yield will transform Node.js (alexmaccaw.com)

Node v0.11.2 was released recently, and with it support for v8 generators. Generators can be hard to grasp, but essentially they’re decorated functions that you can execute multiple times and resume execution at different points inside the function.

What this means in practice is that we can get rid of the callback hell that has plagued node applications, and write code in a synchronous style, while it’s executed asynchronously behind the scenes.


New Features of Firefox Developer Tools: Episode 25 (mozilla.org)

Firefox 25 was just uplifted to the Aurora release channel which means we are back to report about new features in Firefox Developer Tools. Here’s a list of the most exciting new features:

  • Black box libraries in the Debugger
  • Replay and edit requests in the Network Monitor
  • CSS Autocompletion in the inspector
  • Execute JS in the current paused frame
  • Import and export profiled data in the Profiler
You can read the summary of those features here, and to get the whole picture you can check the complete list of resolved bugzilla tickets.

Wednesday, August 14, 2013

A meta style guide for JavaScript (2ality.com)

Whenever you are considering a style question, ask yourself: what makes my code easier to understand? Resist the temptation to be clever and leave most of the mechanical cleverness to JavaScript engines and minifiers...


Tuesday, August 13, 2013

Isaac Schlueter on The Future of Node.js (google.com)

There's been a lot of debates, theories, and requests about Node's core API patterns on this list lately. I'd like to clarify the actual plans of the project on these points.

Callbacks will remain the de facto way to implement asynchrony. Generators and Promises are interesting and will remain a userland option...


JavaScript Promises (wildermuth.com)

No I am not talking the promise that JavaScript will fix everything if you use it. I don't even believe that ;) I am talking about the concept of a promise object that several JavaScript libraries use (including AngularJS, jQuery, Dojo and WinJS).

A promise is a pattern for handling asynchronous operations...


7 JavaScript Basics Many Developers Aren't Using (tech.pro)

JavaScript, at its base, is a simple language that we continue to evolve with intelligent, flexible patterns. We've used those patterns in JavaScript frameworks which fuel our web applications today. Lost in JavaScript framework usage, which many new developers are thrust right into, are some of the very useful JavaScript techniques that make basic tasks possible. Here are seven of those basics...


The old HTML parser is removed from Firefox tree (mozilla.org)

Many years ago, I got my start contributing to Mozilla by working on the "new" HTML parser. At the time that I was starting to contribute, there were big changes happening in Mozilla-land, most notably AOL laying off basically all of its Netscape engineers. With that stroke, the available manpower working on Gecko shrank to a shadow of its former self, leaving large portions of the codebase unowned. Naturally, this meant that the least sexy portions of the code received even less attention than before and the parser, which had not been actively worked on (except to fix critical bugs) fell even further onto the back-burner. The reasons for this abandonment were not only due to the fact that HTML parsers are not the most exciting thing in the world to work on, but also because of a few other factors...


Bug 903912 - Rip out most of the old parser

Monday, August 12, 2013

Keep Your Identity Small (paulgraham.com)

I finally realized today why politics and religion yield such uniquely useless discussions...

Most people reading this will already be fairly tolerant. But there is a step beyond thinking of yourself as x but tolerating y: not even to consider yourself an x. The more labels you have for yourself, the dumber they make you.

Read more

Friday, August 9, 2013

Crowdfunded Ubuntu Phone Will Be A Big Success, Even If It Never Happens (forbes.com)

Another day, another healthy dose of press attention for the Ubuntu Edge. This non-existent smartphone is still just a glint in the eye of its originator, billionaire and Forbes disruptor Mark Shuttleworth, but it’s back in the headlines after receiving an $80,000 crowdfunding investment from Bloomberg . (Yes, the financial news company — who’d have guessed it?) The handset has also just had a price drop, down to $695 per unit for all future campaign backers, which hasn’t hurt its exposure either.


Thursday, August 8, 2013

Ubuntu Edge Gets Its First Major Corporate Backer In Bloomberg, But Funding Still Off Needed Pace (techcrunch.com)

The Ubuntu Edge is an audacious attempt to crowdsource the next smartphone advancement. Canonical, the company behind the Edge and Ubuntu itself is seeking an exorbitant $32 million to make it happen, and gave itself only a month to raise those funds. Now, Bloomberg LP has come forward as its first major corporate backer, with a lump $80,000 contribution in exchange for 100 Ubuntu Edge devices and enterprise workshops and technical support.

Read more

Wednesday, August 7, 2013

TypeScript 0.9.1 (msdn.com)

We’re happy to announce the release of TypeScript 0.9.1. With this version we've focused on fit and finish, improving the compiler performance and rounding out the language and ASP.NET support.

Change log:

  • Improved Performance
  • Typing with 'typeof'
  • Better 'this' handling
  • No Implicit Any
  • Visual Studio support for ASP.NET projects


Hacktivist Richard Stallman takes on proprietary software, SaaS and open source (gigaom.com)

Richard Stallman, revered by some as a genius (after all, he won a McArthur “genius” grant in 1990) and derided by others as a crackpot, was in New York Monday where he warned against the dangers of using proprietary software, SaaS and even open-source software. Yes, for this famed hacktivist and creator of the free software collaborative GNU, open-source is not nearly open enough and worse, masquerades as free software. Which, he says, it most definitively is not. During the lecture, held at NYU by HackNY—a nonprofit, organized by Columbia and NYU faculty, whose mission is to “federate the next generation of hackers” —Stallman advocated the benefits of truly free software.


Tuesday, August 6, 2013

IBM opens up Power chips, ARM-style, to take on Chipzilla (theregister.co.uk)

With its embedded Power chip business under assault from makers of ARM and x86 processors – and to a lesser extent MIPS chips – and having lost the game console business to AMD, IBM had to do something dramatic to expand the addressable market for its Power processors. And that something, which Big Blue has just rolled out, is called the OpenPower Consortium. which takes a few pages from the ARM Holdings playbook to breathe some new life into the Power architecture.


An Improved DevTools Editing Workflow (chromium.org)

With Chrome DevTools our goal is to make your experience as a web developer as productive as possible. In the most recent version of Chrome we've added three major new features that will improve your authoring experience more than ever before.

Workspaces allows you to live-edit source files within DevTools with bidirectional disk persistence. CSS preprocessor mapping supports Sass file live-editing in the DevTools, allowing you to instantly see your changes. Finally snippets lets you create, edit, save and execute custom JavaScript snippets.


Monday, August 5, 2013

Announcing the release of the Windows Azure SDK 2.1 for .NET (asp.net)

Today we released the v2.1 update of the Windows Azure SDK for .NET. This is a major refresh of the Windows Azure SDK and it includes some great new features and enhancements.


Thursday, August 1, 2013

Compilers in OpenBSD (marc.info)

A long time ago, in the first few years of the *BSD projects, the only free software compiler spanning the various platforms BSD systems were targeting was gcc...

Also, gcc 2.5 (at the time) had a few bugs, but not many. You could trust it to produce working code at any optimization level, and forget about it. In other words: there was no need to put any effort in maintaining the compiler, because it was (almost) bug-free...

And then C++98 came out, as well as C99, and it was time for serious work in gcc, if only to attempt to support the new features of these standards...

As an unavoidable consequence of this, something very important in the world order changed: gcc had bugs, and you were expected to accept that and cope with them...


Wednesday, July 31, 2013

Startup Lab workshop: Web Front-End Latency (youtube.com)

If your site is slow, you'll see lower usage, faster bounces, and users who won't come back. Web performance expert Steve Souders will show you tools to measure site performance, identify bottlenecks, demonstrate automated site acceleration technologies, and review best practices for making your site scream.

Watch video...

Tuesday, July 30, 2013

Startup Lab workshop: Test-Driven Design (youtube.com)

Google Ventures Startup Lab | Testing is not about writing tests. It's about writing testable code. In this talk, Googler Vojta Jína shows us what makes code testable and why. He goes through some common design patterns such as Dependency Injection and applies them during live coding. Along the way, you will meet testing framework Jasmine and Karma - the spectacular JavaScript test runner.

Watch video...

Lifetimes of cryptographic hash functions (valerieaurora.org)

I've written some cautionary articles on using cryptographic hashes to create content-based addresses (compare-by-hash). This page brings together everything I've written and keeps an updated table of the status of popular cryptographic hash functions.


SQL Server 2014 Standard Edition Sucks, and It’s All Your Fault (brentozar.com)

Every release lately, Microsoft has been turning the screws on Standard Edition users. We get less CPU power, less memory, and few (if any) new features.

According to Microsoft, if you want to use more than $500 worth of memory in your server, you have to step up to Enterprise Edition. Seriously? Standard Edition licensing costs about $2,000 per CPU core, but it can only access 64GB of memory? That’s ridiculous.


Friday, July 26, 2013

A Universe Full of Planets (nytimes.com)

No matter how conservative or optimistic we are, the statistics tell us that something like an astonishing one out of every seven stars must harbor a planet similar in size to the Earth, and at roughly the right orbital distance to allow for the possibility of a temperate surface environment. In other words, roughly 15 percent of all suns could, in principle, be hosting a place suitable for life as we know it.

Since our galaxy contains at least 200 billion stars, this implies a vast arena for the universe’s ubiquitous carbon chemistry to play in — a process that, as here on Earth, might lead to the complex machinery of life. Indeed, there is a 95-percent confidence — give or take a few percent — that one of these worlds could be within a mere 16 light years of us. That’s a stone’s throw, practically our galactic backyard.


How Emacs changed my life (slideshare.net)

We are free to download free software. We free to read source code. I downloaded Emacs source code and investigated. Emacs was my first LISP interpreter. I learned a lot about language implementation from Emacs...

Read more

Thursday, July 25, 2013

Scientists discover what’s killing the bees and it’s worse than you thought (http://qz.com)

As we’ve written before, the mysterious mass die-off of honey bees that pollinate $30 billion worth of crops in the US has so decimated America’s apis mellifera population that one bad winter could leave fields fallow. Now, a new study has pinpointed some of the probable causes of bee deaths and the rather scary results show that averting beemageddon will be much more difficult than previously thought.


Tuesday, July 23, 2013

Can you help me understand the benefit of require.js (github.com)

I'm having trouble understanding the benefit of require.js. Can you help me out? I imagine other developers have a similar interest.

From Require.js - Why AMD: The AMD format comes from wanting a module format that was better than today's "write a bunch of script tags with implicit dependencies that you have to manually order"

I don't quite understand why this methodology is so bad. The difficult part is that you have to manually order dependencies. But the benefit is that you don't have an additional layer of abstraction.


Wednesday, July 17, 2013

Rob Pike on regular expressions in lexing and parsing (commandcenter.blogspot.com)

I should say something about regular expressions in lexing and parsing. Regular expressions are hard to write, hard to write well, and can be expensive relative to other technologies. (Even when they are implemented correctly in N*M time, they have significant overheads, especially if they must capture the output.)


Monday, July 15, 2013

Estonia publishes its e-voting source code on GitHub (arstechnica.com)

Estonia, which created the world’s first nationwide Internet-based voting system, has finally released its source code to the public in an attempt to assuage a longstanding concern by critics.


Friday, June 28, 2013

Don't aim for success (2013-06-28)

Don't aim for success if you want it; just do what you love and believe in, and it will come naturally.

- David Frost

Want to Understand Mortality? Look to the Chimps (nytimes.com)

Pansy was probably in her 50s when she died, which is pretty good for a chimpanzee. She passed in a way most of us would envy — peacefully, with her adult daughter, Rosie, and her best friend, Blossom, by her side. Thirty years earlier, Pansy and Blossom arrived together at the Blair Drummond Safari and Adventure Park near Stirling, Scotland. They raised their children together. Now, as Pansy struggled to breathe, Blossom held her hand and stroked it.


Wednesday, June 26, 2013

Lesson learned in refactoring ASP.NET MVC3 routes

What's the problem, Doc?

Typical ASP.NET MVC applications will not face performance issues related to routing. General applications will have one default route ({controller}/{action}/{id}) and several custom ones. Our own custom-built CMS catches all non-custom routes. Therefore, we added a separate and distinct route for every action. You can say that our application is not a typical one – it has a large number of custom routes (approximately 300). Why do a large number of routes lead to performance issues? Let’s find out.

Always do profiling before refactoring

Some time ago, we noticed that one of our client’s websites was getting slower. Because of this, we started investigating performance issues. The site has rather heavy client-side JavaScript logic, so we assumed that we needed to tweak our JavaScript code. However, before jumping into JavaScript optimization, we wanted to make sure that our assumption was correct. Therefore, we started profiling our web application. The results were rather surprising. The performance issue was related to server-side logic. Response time from the server was 2 to 3 seconds, even without any back-end logic. 2 to 3 seconds just to render a simple page without any content on it! After a few hours of intensive profiling, debugging, and head scratching, we finally isolated the source of the problem. Performance issues were somehow related to the MVC routing table. Profiling results showed that a large portion of CPU time was used by MVC routing methods. The profiler showed that the GetVirtualPath method in the RouteCollection class was called one hundred times while rendering one page.

Look into the sources, Luke

Last year, Microsoft released the source code of ASP.NET MVC3 to the public. We downloaded the ASP.NET MVC 3 source code and started analyzing it. The GetVirtualPath method contains a loop that iterates through all configured routes and finds the first one that returns a match. Here is the source of the GetVirtualPath method:

public VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) {
    requestContext = GetRequestContext(requestContext); 

    // Go through all the configured routes and find the first one that returns a match 
    using (GetReadLock()) { 
        foreach (RouteBase route in this) {
            VirtualPathData vpd = route.GetVirtualPath(requestContext, values); 
            if (vpd != null) {
                vpd.VirtualPath = GetUrlWithApplicationPath(requestContext, vpd.VirtualPath);
                return vpd;
    return null;

This code fragment traverses all routes in the route table to find a match. When the route table grows, the time it takes to find a match grows as well. We also searched the MVC3 source code to find places where the GetVirtualPath method was referenced. This method was used in many other places, like in common Html helpers. Here is the path from Html.ActionLink to GetVirtualPath.

LinkExtenions.cs ActionLink => HtmlHelper.cs GenerateLink => HtmlHelper.cs GenerateLinkInternal => UrlHelper.cs GenerateUrl => RouteCollection.cs GetVirtualPathForArea => RouteCollection.cs GetVirtualPath

When the number of custom routes increases, your web application starts to get slower. If you use Html helpers like ActionLink, response time increases even more. Every call to ActionLink executes the same loop in the GetVirtualPath method. The GetVirtualPath method can be executed one hundred times for one request if you use many Html helpers. Response time is also affected by the place of matched route in the routing table. The closer the route is to the beginning of the table, the quicker the match is found, and the quicker the GetVirtualPath loop terminates itself.

Give me some numbers...

I have created a simple MVC application to emulate route-related performance issues. In its essence, this application is identical to Microsoft’s VisualStudio MVC template. I have only added custom routes into the Global.asax file as needed.

public static void RegisterRoutes(RouteCollection routes)
  routes.MapRoute("browse-1", "browse/test1", new { controller = "Home", action = "Test1" });
  routes.MapRoute("browse-2", "browse/test2", new { controller = "Home", action = "Test2" });
  routes.MapRoute("browse-3", "browse/test3", new { controller = "Home", action = "Test3" });
  routes.MapRoute("browse-4", "browse/test4", new { controller = "Home", action = "Test4" });
  routes.MapRoute("browse-5", "browse/test5", new { controller = "Home", action = "Test5" });
  routes.MapRoute("browse-6", "browse/test6", new { controller = "Home", action = "Test6" });
  routes.MapRoute("browse-7", "browse/test7", new { controller = "Home", action = "Test7" });
  routes.MapRoute("browse-8", "browse/test8", new { controller = "Home", action = "Test8" });
  routes.MapRoute("browse-9", "browse/test9", new { controller = "Home", action = "Test9" });
  routes.MapRoute("browse-10", "browse/test10", new { controller = "Home", action = "Test10" });

//Add more custom routes here as needed

  routes.MapRoute("support", "support", new { controller = "Home", action = "Support" });
  routes.MapRoute("documentation", "documentation", new { controller = "Home", action = "Documentation" });
  routes.MapRoute("how-to", "how-to", new { controller = "Home", action = "HowTo" });
  routes.MapRoute("get-started", "get-started", new { controller = "Home", action = "GetStarted" });
  routes.MapRoute("about", "about", new { controller = "Home", action = "About" });

  // Default route
  routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });

I have also modified the Views/Home/Index.cshtml file and have added calls to ActionLink to it.

    ViewBag.Title = "Home Page";


To learn more about ASP.NET MVC visit http://asp.net/mvc.

  • @Html.ActionLink("Home/Test1", "Test1", "Home")
  • @Html.ActionLink("Home/Test2", "Test2", "Home")
  • @Html.ActionLink("Home/Test3", "Test3", "Home")
  • @Html.ActionLink("Home/Test4", "Test4", "Home")
  • @Html.ActionLink("Home/Test5", "Test5", "Home")
  • @Html.ActionLink("Home/Test6", "Test6", "Home")
  • @Html.ActionLink("Home/Test7", "Test7", "Home")
  • @Html.ActionLink("Home/Test8", "Test8", "Home")
  • @Html.ActionLink("Home/Test9", "Test9", "Home")
  • @Html.ActionLink("Home/Test10", "Test10", "Home")

In the first test, I added custom routes to the routing table to see how this affects response times. I have recreated a worst-case scenario: the matched route is at the end of the routing table. I have started from 5 routes and increased the number of routes by 10 for each subsequent iteration. In the last run, there were 100 routes in the routing table. In the second test, I also added calls to @Html.ActionLink helper into the index view. This is a mixed scenario, because the matched route is at the end of the routing table, but the ActionLinks in the index view points to every route in the routing table. I used the same number of routes in the routing table and helpers in the index view. I started from 5 routes and increased the number of routes by 10 for each subsequent iteration. In the last run, there were 100 custom routes in the routing table and 100 helpers in the index view.

Test setup

All tests were performed on my development machine. The test application was built in release mode and hosted on IIS server to emulate the production environment. I used Apache jMeter to generate some traffic to the test site. Here is the jMeter configuration I used for testing:

I started with the first test scenario with 5 custom routes. I ran the test five times with 5 routes and took an average value of response times. After that, I added 10 more custom routes and repeated my previous actions. For the last test in the first scenario, I ran the test with 100 custom routes in the routing table. I did the same with the second test scenario afterwards.

Test results

The graph below shows results for the first test scenario. The X axis shows the number of custom routes in the routing table. The Y axis shows response time.

The graph below shows results for the second test scenario. The X axis shows the number of custom routes in the routing table and calls to ActionLink helper. The Y axis shows response time.

The graph shows that the number of calls to ActionLink helpers also increases response time. If you have a simple page with 100 ActionLinks and a route table with 100 custom routes, the response time is almost 2 seconds. Keep in mind that this simple application has no back-end logic and only 100 links, while the response time is ~2seconds!

What can you do about it?

The most important rule – keep your route table as small as possible and use the default route as much as possible.

Find the most used routes and move them into the beginning of the routing table. This way, you will ensure that the GetVirtualPath method loop will find a match and terminate itself as soon as possible.

Find custom routes that are not visible to the user or not important for backward compatibility and remove them from the routing table.

This post is also crossposted in DevBridge Blog

WebGL, SPDY/3, New Dev Tools, & More Confirmed For IE11 In Win 8.1 (microsoft-news.com)

Microsoft released Windows Server (“Blue”) to MSDN subscribers today, ahead of the BUILD (#bldwin) conference later this week in San Francisco. The build provides us a number of clues as to what we will see in the official Windows 8.1 (Blue) preview. The server build number is 9341, the windows 8.1 preview build will be: 6.3.9431.winmain_bluemp.130615-1214. IE11 scores 351/500 + 2 bonus point, and 25/25 for WebGL. Since this is a server build, the score may be a little higher than IE11 on Win 8.1, but this confirms WebGL for IE11. IE11 WebGL Conformance Test Results: 14,748 of 20,509 tests pass (71.9%). Many things seen in the Server 2012 R2 preview will also show up in the Windows 8.1 preview.


Thursday, June 20, 2013

The real reason to fight nuclear power has nothing to do with health risks (qz.com)

Missing from the entire debate about nuclear is the most important fact of all: Nuclear is dying due to poor economics, and the debate is already over as far as the market is concerned.


Wednesday, June 19, 2013

Prominent Scientists Sign Declaration that Animals have Conscious Awareness, Just Like Us (ieet.org)

An international group of prominent scientists has signed The Cambridge Declaration of Consciousness in which they are proclaiming their support for the idea that animals are conscious and aware to the degree that humans are — a list of animals that includes all mammals, birds, and even the octopus.


Containers—Not Virtual Machines—Are the Future Cloud (linuxjournal.com)

Cloud infrastructure providers like Amazon Web Service sell virtual machines. EC2 revenue is expected to surpass $1B in revenue this year. That's a lot of VMs.

It's not hard to see why there is such demand. You get the ability to scale up or down, guaranteed computational resources, security isolation and API access for provisioning it all, without any of the overhead of managing physical servers.

But, you are also paying for lot of increasingly avoidable overhead in the form of running a full-blown operating system image for each virtual machine. This approach has become an unnecessarily heavyweight solution to the underlying question of how to best run applications in the cloud.


Friday, June 14, 2013

Don’t Hash Secrets (benlog.com)

So here it is: Don’t hash secrets. Never. No, sorry, I know you think your case is special but it’s not. No. Stop it. Just don’t do it. You’re making the cryptographers cry.

What the heck am I talking about, you say? I’ll explain. But before we get lost in the details, just remember. Don’t hash secrets. Ever. Kapish?


Wednesday, June 12, 2013

Better CMS for Developers (bettercms.com)

Better CMS is a publishing-focused and developer-friendly .NET Open Source CMS developed by DevBridge Group. The first official public release version is available, and there is a demo website to see it in action. Try it yourself!


Monday, June 10, 2013

Understanding Express.js (http://evanhahn.com)

Express.js describes itself better than I can: "a minimal and flexible node.js web application framework". It helps you build web apps. If you've used Sinatra in the Ruby world, a lot of this will be familiar.


Wednesday, June 5, 2013

Ten LINQ Myths (albahari.com)

Here are ten root causes of the most common misunderstandings—distilled from many hundreds of questions on the LINQ forums.


Tuesday, June 4, 2013

Some things I've learnt about public speaking (jgc.org)

In the past I've written a couple of blog posts titled Some things I've learnt about programming and Some things I've learnt about writing. People seem to have enjoyed those posts (judging by the page view counts and comments) and so I thought I'd write something about public speaking and specifically about conference speaking.


Thursday, May 23, 2013

Postgres 9.3 feature highlight: new flavors of IF EXISTS and IF NOT EXISTS (michael.otacoo.com)

IF EXISTS and IF NOT EXISTS are clauses allowing to return a notice message instead of an error if a DDL query running on a given object already exists or not depending on the DDL action done. If a given query tries to create an object when IF NOT EXISTS is specified, a notice message is returned to client if the object has already been created and nothing is done on server side. If the object is altered or dropped when IF EXISTS is used, a notice message is returned back to client if the object does not exist and nothing is done.

Prior to 9.3, PostgreSQL already proposed this feature with many objects: tables, index, functions, triggers, language, etc. Such SQL extensions are useful when running several times the same script several times and avoiding errors on environments already installed.

9.3 introduces some new flavors of IF [NOT] EXISTS completing a bit more the set of objects already supported.

  • Extension of DROP TABLE IF EXISTS such as it succeeds if the specified schema does not exists
  • Note also that the new materialized views are also supported with IF [NOT] EXISTS for CREATE, ALTER and DROP.


Tuesday, May 21, 2013

Native equivalents of jQuery functions (leebrimelow.com)

But if you are able to target modern browsers in your work, using the native C++ methods provided by your browser will not-surprisingly give you a tremendous performance boost in most areas.

Read more

Thursday, May 16, 2013

PostgreSQL 9.3 beta: Federated databases and more (LWN.net)

In Berkeley, California — the birthplace of PostgreSQL — it's spring: plum and cherry blossoms, courting finches and college students, new plans for the summer, and the first beta release of the database system. Every year, the first beta of the next PostgreSQL version comes out in April or May, for a final release in September. PostgreSQL 9.3 beta 1 was released to the public on May 13th, and contains a couple dozen new features both for database administrators and application developers.


Wednesday, May 15, 2013

Go and Rust — objects without class (lwn.net)

Since the advent of object-oriented programming languages around the time of Smalltalk in the 1970s, inheritance has been a mainstay of the object-oriented vision. It is therefore a little surprising that both "Go" and "Rust" — two relatively new languages which support object-oriented programming — manage to avoid mentioning it. Both the Rust Reference Manual and The Go Programming Language Specification contain the word "inherit" precisely once and the word "inheritance" not at all. Methods are quite heavily discussed, but inheritance is barely more than a "by the way".


Friday, May 3, 2013

UNICEF Tells Slacktivists: Give Money, Not Facebook Likes (theatlantic.com)

It’s easier than ever to support a good cause – all you have to do is hit the like button. The organization gets one more supporter and you get positive publicity among your friends. But even though it’s important to be liked, likes can’t fund medicine, water or food. In this campaign for Unicef Sweden, we highlight the absurdness of our blind faith in likes, to raise money for vaccine.

Read more

Wednesday, May 1, 2013

Download Google fonts to your desktop (googledevelopers.blogspot.co.uk)

The goal of Google Fonts has always been to bring beautiful, open-source fonts to the web, fast and free of cost. Starting today, you can download these fonts for offline access on your desktop. We’ve made all of the fonts from the Google Fonts directory available in SkyFonts, a tool from Monotype that allows you to install and sync fonts from the web onto your Windows or Mac OS X devices.


Friday, April 5, 2013

The Baseline Compiler Has Landed (blog.mozilla.org)

This wednesday we landed the baseline compiler on Firefox nightly. After six months of work from start to finish, we are finally able to merge the fruits of our toils into the main release stream.

Baseline (no, there is no *Monkey codename for this one) is IonMonkey’s new warm-up compiler. It brings performance improvements in the short term, and opportunities for new performance improvements in the long term. It opens the door for discarding JaegerMonkey, which will enable us to make other changes that greatly reduce the memory usage of SpiderMonkey. It makes it easier and faster to implement first-tier optimizations for new language features, and to more easily enhance those into higher-tier optimizations in IonMonkey.

Our scores on the Kraken, Sunspider, and Octane benchmarks have improved by 5-10% on landing, and will continue to improve as we continue to leverage Baseline to make SpiderMonkey better.


Thursday, April 4, 2013

Memories of Mozilla at 15 and Thoughts on Mozilla Research (brendaneich.com)

I gave a brief talk last night at the Mozilla Research Party (first of a series), which happened to fall on the virtual (public, post-Easter-holiday) celebration of Mozilla’s 15th anniversary.

Mozilla is 15. JavaScript is nearly 18. I am old. Lately I mostly just make rain and name things: Servo (now with Samsung on board) and asm.js. Doesn’t make up for not getting to name JS.


Mozilla and Samsung Collaborate on Next Generation Web Browser Engine (link)

Mozilla’s mission is about advancing the Web as a platform for all. At Mozilla Research, we’re supporting this mission by experimenting with what’s next when it comes to the core technology powering the Web browser. We need to be prepared to take advantage of tomorrow’s faster, multi-core, heterogeneous computing architectures. That’s why we’ve recently begun collaborating with Samsung on an advanced technology Web browser engine called Servo.

Servo is an attempt to rebuild the Web browser from the ground up on modern hardware, rethinking old assumptions along the way. This means addressing the causes of security vulnerabilities while designing a platform that can fully utilize the performance of tomorrow’s massively parallel hardware to enable new and richer experiences on the Web. To those ends, Servo is written in Rust, a new, safe systems language developed by Mozilla along with a growing community of enthusiasts.


Thursday, March 28, 2013

Writing an evented web server (link)

You may have heard about Node.js, and how it maximizes scalability. But what is the big innovation behind Node? HTTP servers have been around for a very long time (Apache is nearly 20 years old), what have we been missing for so long?

Let’s re-invent it together!

Mozilla is Unlocking the Power of the Web as a Platform for Gaming (link)

Mozilla, a non-profit organization dedicated to promoting openness, innovation and opportunity on the Web, is advancing the Web as the platform for high-end game development. With Mozilla’s latest innovations in JavaScript, game developers and publishers can now take advantage of fast performance that rivals native while leveraging scale of the Web, without the additional costs associated with third-party plugins. This allows them to distribute visually stunning and performance intensive games to billions of people more easily and cost effectively than before.


Wednesday, March 27, 2013

Working on TypeScript 0.9: Generics, Overload on Constants and Compiler Performance (link)

The upcoming TypeScript 0.9 release will represent the most significant changes to TypeScript since the first public release last October, bringing highly requested new language features as well as a significant re-design of the TypeScript compiler. In this post, we’ll give a first quick look at a few of the top investments for the 0.9 release. Stay tuned for further updates in the coming weeks.

Read more

A JavaScript refresh (link)

We will cover here some of the key concepts of JavaScript to get us started. If you have not checked JavaScript for the past few years or if you are new to JavaScript, I hope you find this useful.

We will start by covering the language basics like variables, functions, scope, and the different types, but we will not spend much time on the absolute basics like operators, or what is a function or a variable, you probably already know all that as a developer. We will discover JavaScript by going through simple examples and for each of these, highlight specific behaviors and approach the language from an interactive developer standpoint, coming from other technologies like Flash (ActionScript 3), Java, C# or simply native (C++).


Tuesday, March 26, 2013

What is the ServiceStack? (link)

What is the ServiceStack?


Running ASP.NET Web API services under Linux and OS X (link)

In this blog post I am going to show how you can host ASP.NET Web API services under Gentoo Linux and OS X on top of Mono’s ASP.NET implementation. I will use Nginx and FastCGI to communicate between HTTP server and Mono.

A couple of months ago I’ve experimented with running ASP.NET Web API on a Linux box, but ran into blocking issues caused by some functionality missing from Mono. I’ve decided to give it another go now when more recent versions of the runtime are available.


Saturday, March 23, 2013

GCC 4.8.0 released (link)

The GNU project and the GCC developers are pleased to announce the release of GCC 4.8.0. This release is a major release, containing new features (as well as many other improvements) relative to GCC 4.7.x.


Friday, March 22, 2013

Browser wars revisited (link)

SUMMARY: Latest status in the browser wars: Chrome up, Firefox and IE down.

R

Linux: Find Number of CPU Cores Command (link)

How do I find out the number of CPU cores available under Linux server?


Five linux distras you should check (link)

You might not have noticed, but there's more than one Linux distribution out there. In fact, there are hundreds, and the list is growing weekly.

Okay, you probably did notice, but the fact remains that the free software world is, primarily, one of choice...


Thursday, March 21, 2013

20 reasons you should switch to Linux (link)

There are hundreds of compelling reasons why Linux is better than all the rival operating systems. Here are just 20.


Wednesday, March 20, 2013

An Overview of Memory Management in Rust (link)

One of the key features of Rust that sets it apart from other new languages is that its memory management is manual—the programmer has explicit control over where and how memory is allocated and deallocated. In this regard, Rust is much more like C++ than like Java, Python, or Go, to name a few. This is an important design decision that makes Rust able to function in performance-critical domains that safe languages previously haven’t been able to—top-of-the line games and Web browsers, for example—but it adds a nontrivial learning curve to the language.

For programmers familiar with modern C++, this learning curve is much shallower, but for those who are used to other languages, Rust’s smart pointers can seem confusing and complex. In keeping with the systems-oriented nature of Rust, this post is designed to explain how Rust’s memory management works and how to effectively use it.


Tuesday, March 19, 2013

Future of Firefox DevTools(link)

10 days ago, I asked in various channels about what web developers would like to see in the Firefox DevTools. I was impressed by the amount of answers we got (especially from HackerNews and Twitter). We computed and prioritized all these inputs. Then the DevTools team met, and spent a week hacking on these different requests.


Thursday, March 14, 2013

useCapture demystified (link)

Any guesses as to which will alert first?

    window.addEventListener("click", function(){alert(1)}, false);
    window.addEventListener("click", function(){alert(2)}, true);
Answer: the second one.


Wednesday, March 13, 2013

JavaScript and Friends: CoffeeScript, Dart and TypeScript (link)

There are quite a few changes coming to JavaScript in the recent versions of the language standard, for example, see ECMAScript 6, but also simultaneously a number of languages started to appear near JavaScript that try to address the described issues. The present article is just a brief overview of the most well-known of these language and a discussion how they relate to each other and JavaScript. This is not a thorough research of all of the mentioned languages, but rather an attempt to get a feeling of what those languages are and why we should care about them.


Tuesday, February 26, 2013

IE10 for Windows 7 Globally Available (link)

We will begin auto updating Windows 7 customers to IE10 in the weeks ahead, starting today with customers running the IE10 Release Preview. With this final release, IE10 brings the same leading standards support, with improved performance, security, privacy, reliability that consumers enjoy on Windows 8, to Windows 7 customers.