teleren/devto huggingface dataset:
Get length of associative array in JavaScript
Tags: javascript
Published: 2014-01-02 12:07:00

---
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/y9hxcwi5y92j6zfcxbjx.jpg
title: Get length of associative array in JavaScript
slug: get-length-of-associative-array-in-javascript
date: 2014-01-02 12:07
tags: 
 - javascript
---
Something I learnt just now is that JavaScript is funny about arrays. Unless you're using numerical indexes, your array elements will actually become properties of the underlying object. It sucks, but it also kind of makes sense. 

What this means is that if you have a multi-dimensional array (which would be like `array[x][y]`):

    [
        a: [a, b, c],
        b: [a, b, c],
        c: [a, b, c]
    ]

Which could be built like so:

    var chars = ['a', 'b', 'c'],
        arr = [],
        x, y;

    for(x = 0; x < 3; x++) {
        arr[chars[x]] = [];
        for(y = 0; y < 3; y++) {
            arr[chars[x]][chars[y]] = true;
        }
    }

Then if you wanted to get the length of the first dimension of this array, `arr.length` isn't going to work. You'll get `0`. If you extend the `Object` prototype, you can add in a simple key counting method like so:
  
    Object.prototype.getLength = function() {
        var len = 0;
        for (var key in this) {
            if (this.hasOwnProperty(key)) {
                len++;
            }
        }  
        return len;
    }

This works perfectly, as you can see:

    > console.log(arr.length, arr.getLength());

    0, 3

Another, probably safer, way of doing this would be to put it into a function rather than extending the Object prototype:

    var getAssocArrayCount = function(array) {
        var len = 0;
        for (var key in array) {
            if (array.hasOwnProperty(key)) {
                len++;
            }
        }  
        return len;
    }

And then simply call it like so:

    > console.log(arr.length, getAssocArrayCount(arr));

    0, 3
[2013年年末記事]2013年、どんなことがあったか覚えていますか？ 月別で振り返る管理人と世の中の出来事
Published: 2018-05-16 20:27:30

---
title: [2013年年末記事]2013年、どんなことがあったか覚えていますか？ 月別で振り返る管理人と世の中の出来事
published: true
tags: 
canonical_url: http://connect.coron.tech/archives/51823601.html
---

[![wqdwqd](http://livedoor.blogimg.jp/cv_k/imgs/e/d/ed2e3ce8-s.jpg)](http://livedoor.blogimg.jp/cv_k/imgs/e/d/ed2e3ce8.jpg "wqdwqd")  

2013年、皆さんにとってどんな一年でしたか？  
どんなことがあったか覚えていますか？  

  
Connect : 本年の年末記事はこの1年を身近な出来事から面白い出来事、そしてそれ以外にも多くの出来事について2013年がどのようなことがあった年なのかを振り返ります。  
  
続きは以下からどうぞ。[続きを読む](http://connect.coron.tech/archives/51823601.html) ![](http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=2732114&name=cv_k&pid=51823601)
Circular images with CSS
Tags: css
Published: 2013-12-19 09:04:00

---
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/y9hxcwi5y92j6zfcxbjx.jpg
title: Circular images with CSS
slug: circular-images-with-css
date: 2013-12-19 09:04
tags: 
 - css
---
A trend which, while it has been around for a while, seems to be showing up more and more these days is circular images. These are quite easy to do using `border-radius`, and below you can see how. You can either use a `background-image` in CSS, or add the `border-radius` to an `img` tag, which I prefer.

We'll use this picture of [William Shakespeare](http://i.imgur.com/jZN7xit.jpg).

    .circular {
        width: 300px;
        height: 300px;
        border-radius: 150px;
        -webkit-border-radius: 150px;
        -moz-border-radius: 150px;
    }


    <!-- regular image -->
    <img src="http://i.imgur.com/jZN7xit.jpg">

    <!-- circular image -->
    <img src="http://i.imgur.com/jZN7xit.jpg" class="circular">

And the output:

![Circular images with CSS](http://i.imgur.com/UgACoIw.png)

One thing to bear in mind is that **the border-radius must be half the height and width** in order to make the image circular. Width & height equal 300px, border-radius equals 150px. Width & height equal 600px, border-radius equals 300px.
ハイレゾって何? ZX1の音質はどれくらい凄い? ソニー ウォークマン NW-ZX1 レビュー ハイレゾ解説&音質評価編
Published: 2018-05-16 20:26:50

---
title: ハイレゾって何? ZX1の音質はどれくらい凄い? ソニー ウォークマン NW-ZX1 レビュー ハイレゾ解説&音質評価編
published: true
tags: 
canonical_url: http://connect.coron.tech/archives/51821097.html
---

[![IMG_0301](http://livedoor.blogimg.jp/cv_k/imgs/b/f/bf848306-s.jpg)](http://livedoor.blogimg.jp/cv_k/imgs/b/f/bf848306.jpg "IMG\_0301")  

2年前のウォークマンSシリーズと音質比較  

  
ウォークマンZX1が発売されてから1週間以上が過ぎましたが、現在でも各店舗で品薄または品切れ状況が続いているようです。今までのソニーのウォークマンとは音質に関しての力の入れようが違うといったことが徐々に各店舗で試せるようになってきて消費者の方にも実感できる状態になってきたことが大きいのかなと思います。7万円以上もする本製品が売れまくりというのはちょっとソニーも想定していなかったでしょうけれども...。  
  
というわけで、今回は前回の開封&ファーストインプレ的レビューではなくこのウォークマンZX1の音質について迫っていきたいと思います。本当はXシリーズかZシリーズが用意できればよかったのですが管理人所持している他のウォークマンは2年前のSシリーズとCDウォークマンしかないので2年前のウォークマンSシリーズと比較します。  
  
続きは以下からどうぞ。  
[続きを読む](http://connect.coron.tech/archives/51821097.html) ![](http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=2732114&name=cv_k&pid=51821097)
Replace anchor tags with square bracket format
Tags: regex, csharp
Published: 2013-12-18 13:02:00

---
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/y9hxcwi5y92j6zfcxbjx.jpg
title: Replace anchor tags with square bracket format
slug: replace-anchor-tags-with-square-bracket-format
date: 2013-12-18 13:02
tags:
 - regex
 - csharp
---
For reason I won't go into, I have just found myself needing to replace a *lot* of anchor tags with square bracket format anchor tags, like so:

    // from
    <a href="#">link</a>

    // to
    [a href="#"]link[/a]

Obviously, we need to use RegEx here, and for future reference mainly for myself, here are the matching and replacing patterns:

    // match
    <a .*?href=['""](.+?)['""].*?>(.+?)</a>

    // replace
    [a href="$1"]$2[/a]

May as well put in the reverse as well:

    // match
    \[a .*?href=['""](.+?)['""].*?\](.+?)\[/a\]

    // replace
    <a href="$1">$2</a>

And then if you're doing this in C#, just use this method:

    string Regex.Replace(string input, string match, string replace)

There we go, saved myself about a year of tedious work!
Detect when ng-options has finished rendering
Tags: javascript, angular
Published: 2013-12-10 12:50:00

---
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/y9hxcwi5y92j6zfcxbjx.jpg
title: Detect when ng-options has finished rendering
slug: detect-when-ng-options-has-finished-rendering
date: 2013-12-10 12:50
tags: 
 - javascript
 - angularjs
---
If you want to fire an event when `ng-options` finishes rendering options, you can do so by watching the model with `scope.$watch` and then queuing up the event code to fire on the next digest cycle with `scope.$evalAsync`. Like so:

    scope.$watch(model, function() {
        scope.$evalAsync(function() {
            // event
        });
    });

If you have a directive that encapsulates a select and ng-options, and for example, you want to fire some jQuery code to turn the select into a multiselect box once ng-options has executed, then you could do something like this:

    .directive('ngMultiselect', function () {
        return {
            replace: true,
            restrict: 'E',
            scope: false,
            template: function (element, attrs) {
                console.log('template');
                return '<div><select class="multiselect" name="' + attrs.name + 
                    '" ng-model="' + attrs.ngModel + '" ng-options="' + attrs.optexp + 
                    '"' + ((attrs.required) ? ' required' : '') + '></select></div>';
            },
            link: function(scope, element, attrs) {
                scope.$watch(attrs.ngModel, function() {
                    scope.$evalAsync(function() {
                        $('.multiselect').multiselect();
                    });
                });
            }
        }   
    });

Bear in mind that every change to the model would fire the event, so you might need to put some sort of check in there, but in terms of firing after render, works perfect.

One way of cleanly making sure you only fire once is like so:

    link: function(scope, element, attrs) {
        scope.$watch(attrs.ngModel, function() {
            if (!angular.isDefined(scope.multiselectInitialized)) {
                scope.multiselectInitialized = true;
                scope.$evalAsync(function() {
                    $('.multiselect').multiselect();
                });
            }
        });
    }

**Update:** Here is some sample HTML for the directive. I also have a bunch of CSS for it but I don't think that is relevant.

    <p>availableOptions: `{{availableOptions}}`</p>
    <p>selectedOptions: `{{selectedOptions}}`</p>

    <ng-multiselect 
        multiple="true"
        ng-model="selectedOptions"
        options="o.label for o in availableOptions"
        change="selected()">
    </ng-multiselect>
未体験の、心震える感動を。 高級感あふれる、ソニー ウォークマン NW-ZX1 レビュー
Published: 2018-05-16 20:25:31

---
title: 未体験の、心震える感動を。 高級感あふれる、ソニー ウォークマン NW-ZX1 レビュー
published: true
tags: 
canonical_url: http://connect.coron.tech/archives/51818927.html
---

[![IMG_0143](http://livedoor.blogimg.jp/cv_k/imgs/4/7/47ef57ae-s.jpg)](http://livedoor.blogimg.jp/cv_k/imgs/4/7/47ef57ae.jpg "IMG\_0143")  

“未体験の、心震える感動を”  

  
2013年12月07日、ついにあのウォークマン ZX1が発売されました。管理人はソニーストアにて注文をしていましたのでクロネコヤマトが届けに来るのを待っていました。12時11分頃に到着しましたが・・・  
  
続きは以下からどうぞ。[続きを読む](http://connect.coron.tech/archives/51818927.html) ![](http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=2732114&name=cv_k&pid=51818927)
Remove params from URL in JavaScript
Tags: regex, javascript
Published: 2013-12-03 12:26:00

---
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/y9hxcwi5y92j6zfcxbjx.jpg
title: Remove params from URL in JavaScript
slug: remove-params-from-url-in-javascript
date: 2013-12-03 12:26
tags: 
 - regex
 - javascript
---
Let us say the param we want to remove is `session` and our URL is `http://www.example.com/?session=lasgfnasolgnasgn&id=500&other=100`. We can remove it like so:

    var oldUrl = "http://www.example.com/?session=lasgfnasolgnasgn&id=500&other=100";
    var newUrl = oldUrl.replace(/&?session=([^&]$|[^&]*)/gi, "");
    console.log(newUrl);

    http://www.example.com/?id=500&other=100

Now let's say we also want to remove other from that URL, we can do that like this: 

    var oldUrl = "http://www.example.com/?session=lasgfnasolgnasgn&id=500&other=100";
    var newUrl = oldUrl.replace(/&?((session)|(other))=([^&]$|[^&]*)/gi, "");
    console.log(newUrl);

    http://www.example.com/?id=500

Excellent.
Stuff and things
Tags: net, ffxiv, ssl, webapi
Published: 2018-08-27 20:56:23

---
title: Stuff and things
published: true
tags: .net,ffxiv,ssl,web api
canonical_url: https://kritner.blogspot.com/2013/11/stuff-and-things.html
---

So we've been doing a lot of .net development lately at the ol' shop.  I'm now certified in MS SQL 2008 development, next up is .net! :)  
  
Been trying to learn a bit more about api and ajaxy type stuff - though it's been around for quite some time, with the stuff I've been exposed to at work and in school I haven't had much chance to learn the \*new\* old stuff.  
  
I am currently working on an API that will help with unspoiled node tracking for the MMORPG Final Fantasy 14.  So far I have gotten the in game clock time calculation worked into the API.  
  
Next up on the learning agenda is to figure out authentication and authorization when it comes to api.  I noticed that with the new web api 2 provided by .net there are new built in functions to make it easier, but still quite a learning process for me.  Once I get the authorization set up on the API, I'll have to figure out how to authenticate from my website hosted on a separate subdomain.  
  
Speaking of domains and subdomains, I have purchased a domain from GoDaddy.com for the purpose of attempting to get an SSL certificate in order to encrypt data for use with the web api.  
  
When I'm not working on the web api, you can usually find me on the hyperion server as "Kritner Swiffertail" in FFXIV.
Create EML file from System.Net.Mail.MailMessage
Tags: eml, csharp, mailmessage, dotnet
Published: 2020-11-05 10:21:31

---
title: Create EML file from System.Net.Mail.MailMessage
published: true
date: 2013-11-23 08:00:00 UTC
tags: eml,csharp,mailmessage,dotnet
canonical_url: 
---

> For a project I was working on, I needed to create an EML file from the standard MailMessage class which exists in the System.Net.Mail namespace. I came across an [article](http://www.codeproject.com/Articles/32434/Adding-Save-functionality-to-Microsoft-Net-Mail-Ma) which describes how to extend the save functionality on the MailMessage class. Using the same technique I created an extension method which is able to save the MailMessage class as EML.

With this extension method in your solution you can create an EML file like this:

{% gist https://gist.github.com/robinvanderknaap/44d611653570f03265cf00a24718f15a.js %}

The extension method is implemented like this:

{% gist https://gist.github.com/robinvanderknaap/3811cd71e3a21a5a8a829db04c70035b %}

#### Conclusion

EML files are perfect for storing the email message on your file system or in the database. The EML file contains all the data from the email, including attachments. You can open the EML in most mail clients and view the email.
Cloning objects in JavaScript
Tags: javascript, jquery
Published: 2013-11-22 09:17:00

---
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/y9hxcwi5y92j6zfcxbjx.jpg
title: Cloning objects in JavaScript
slug: cloning-objects-in-javascript
date: 2013-11-22 09:17
tags: 
 - javascript
 - jquery
---
Just a quick snippet post today. 

A great way to clone objects in JavaScript and break references is to serialize and deserialize the object. The process of converting it to a JSON string and back into an object severs any references. Unfortunately, it also breaks certain types such as `Date` and probably `RegEx` too.

    var clone = JSON.parse(JSON.stringify(original));

A better way (I've found) to clone objects while retaining types is to use [`jQuery.extend`](http://api.jquery.com/jQuery.extend/).

    // Shallow copy
    var newObject = jQuery.extend({}, oldObject);

    // Deep copy
    var newObject = jQuery.extend(true, {}, oldObject);

There are other, quicker ways, but when you can run [120,000 deep copies a second](http://jsperf.com/cloning-an-object/2), is that extra microsecond really worth it?
Invoke callbacks with unknown arguments
Tags: javascript
Published: 2013-11-14 14:06:00

---
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/y9hxcwi5y92j6zfcxbjx.jpg
title: Invoke callbacks with unknown arguments
slug: invoke-callbacks-with-unknown-arguments
date: 2013-11-14 14:06
tags: 
 - javascript
---
Whilst working on some instrumentation code, I had need to pass a function and an unknown number of arguments to another function which would then time the execution of that function. This turned out to be quite easy using `fn.prototype.apply`.

Let's say that we want to call a function but execute some other code, we'd do that here:

    function invokeCallback(callback) {
      var params = Array.prototype.slice.call(arguments, 1);
      return callback.apply(null, params);
    }

And here are our three varied functions:

    function action() {
        console.log('action');
    }

    function greet(msg) {
        console.log(msg);
    }

    function nameage(name, age) {
        var msg = 'My name is ' + name + ' and my age is ' + age;
        console.log(msg);
    }

And here is how we can call them dynamically without invokeCallback having to know anything about them:

    invokeCallback(action);
    invokeCallback(greet, 'Hello!');
    invokeCallback(nameage, 'Bob', '20');

Amazing.
Pushover
Published: 2021-01-28 21:45:24

---
title: Pushover
published: true
date: 2013-10-10 12:00:00 UTC
tags: 
canonical_url: 
---

About 2 month ago, I found a nice service going by the name of pushover.net.

> Pushover makes it easy to send real-time notifications to your Android and iOS devices.

I had a look around for a decent PHP library, but could not find one. Most of them either had way too much code for such a simple task (it's basically a curl call), or where totally untested.

The library I built is very easy to use, and easy to setup. Below you can see an example of how to send a push notification:

```
include __DIR__. '/vendor/autoload.php';

$pushover = new \Scottymeuk\Pushover\Client(['token' => '']);
$pushover->message = 'testing';

// Push Single
$push = $pushover->push($token);

// Push Multiple
$push = $pushover->pushMultiple([
    $token1,
    $token2
]);

```

The only downside to pushover.net is that the [app](https://pushover.net/clients) costs, but with the amount of things I use it for, its been worth it.

If you wish to try out the library, then you can view it on [Github](https://github.com/scottrobertson/pushover).

Can't think of a use case? I built a quick CLI tool using the library to make it easy to push things to your mobile from your desktop. You can view that on [Github](https://github.com/scottrobertson/push) too.

If you do happen to use any of these, please let me know in the comments below.

<!--kg-card-end: markdown-->
The joy of calc()
Published: 2022-05-09 13:59:21

---
title: The joy of calc()
published: true
date: 2013-11-03 00:00:00 UTC
tags: 
canonical_url: https://carl-topham.com//articles/joy-of-calc
---

`calc()` is a modern css function that allows you to do basic maths in a css file. You can use it to make semi fluid layouts with great ease. This means that you can have layouts with 1 fixed width column (or more) and the rest fluid. It doesn't just stop at columns, but that is the easiest and quickest example to discuss.

The setup of calc is very simple. If we take a 2 column layout as an example, the side column always has 200px of width, the main will take up the rest, so 100% less 200px!

```
/* Fixed columns */ 
.side { width: calc (200px); } 
.main { width: calc (100% - 200px); }

```

The only minor issue is [support](http://caniuse.com/#search=calc) , which extends to almost all browsers except Android and Opera Mini which currently have no support and Blackberry which has partial. IE9+ all have full support.

So using it responsibly just needs some simple fallbacks. There are some compromises, but these are the same as any pre calc fluid layout.

```
/* Fixed columns with fallback */ 
.side { width: 20%; width: calc (200px); } 
.main { width: 80%; width: calc (100% - 200px); }

```

Now any browsers that don't understand calc will use the percentage values, and the smarter browsers will over-ride the percentages with the new calc values.

The examples above are for creating a fresh design, however updating an existing layout is as simple as adding in calc() values on the next lines.

Other uses for calc() range from setting fixed gutters on a fluid layout, having fixed height headers and scrolling content within a container, setting background images a certain number of pixels from the right or bottom.

```
/* Gutters */ 
.column { width: calc(25% - 10px); margin-right: 10px; } 
/* Background image at bottom right */ 
.container { background-position: calc(100% - 10px) calc(100% - 10px); } 
/* Fixed headers */ 
.container { height: 300px; }
.container-header { height: 50px; } 
.container-content { height: calc(100% - 50px); }

```

I'm sure there are also far more creative uses for using` calc()` however even the above are fantastically useful from day to day. I did start messing about to see if I could use nth-child and `calc()` but that didn't want to play ball!

```
/* Code that will never work! */ 
.steps-for-fun:nth-child(n) { width: calc(n * 10px;);
 /* doubt this will ever work! */ 
} 

```
No MediaTypeFormatter is available
Tags: aspnet, webapi
Published: 2013-10-24 19:58:00

---
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/y9hxcwi5y92j6zfcxbjx.jpg
title: No MediaTypeFormatter is available
slug: no-mediatypeformatter-is-available
date: 2013-10-24 19:58
tags: 
 - asp-net
 - webapi
---
You may have come across the error message `No MediaTypeFormatter is available to read an object of type T from content with media type 'text/plain'.` during your adventures in ASP.NET Web API. Tonight it was my turn to be faced with this bothersome little 'issue'.

I was attempting to post `{Username:"testuser", Password:"testpass"}` to an API controller which received a ViewModel like so:

    public class UserViewModel
    {
        public string Username { get; set; }
        public string Password { get; set; }
    }

    public HttpResponseMessage Post(UserViewModel value)
    {
        // do something
    }

The only problem was that it just wasn't finding the controller action. Spitting out error messages and generally being counter-productive.

After going through lots of StackOverflow posts and dismissing them, it turned out the first one was actually relevant. I was using a Chrome extension (Postman) to help with REST calls and even though I had selected JSON, it was still sending requests as `plain/text`, and not `application/json`.

I set the `Content-type` header to `application/json` and it started working.
Konsep synchronous dan asynchronous
Tags: async
Published: 2020-02-17 07:09:26

---
title: Konsep synchronous dan asynchronous
published: true
date: 2013-10-12 13:02:21 UTC
tags: async
canonical_url: https://lumochift.org/posts/async-concept/
---

Dalam postingan pertama ini saya akan sedikit mengulas tentang konsep asynchronous dalam analogi sederhana sehingga bisa memudahkan pembaca dalam memahaminya.

Sebelum itu perlu kita ketahui ada proses synchronous dan asynchronous, apa bedanya? Mari kita simak analogi sederhana berikut.

Untuk penjelasan selanjutnya saya menggunakan istilah sync untuk proses synchronous dan async untuk proses asynchronous.

Pertama-tama akan saya gambarkan dalam bentuk proses yg berurutan:

## State awal

1. Kondisi awal, sedang main DOTA 2. Lagi seru-serunya nih, dapet hero favorit juga.
2. Perut udah dangdutan gara-gara seharian belum makan dan di dapur semua makan ludes, apesnya lagi sendiri juga dirumah.

## proses sync

1. Demi kesehatan akhirnya meninggalkan peperangan dan pergi ke toko terdekat beli mie instant (kira-kira butuh waktu 10 menit, maklum jalan kaki cuy).
2. Sesampainya dirumah langsung masak mie (butuh waktu 10 menit), udah dicacat-cacatin temen nih di chat T\_T
3. Akhirnya bisa makan juga, meski dengan penuh pengorbanan 1 match. :(
4. Setelah makan balik ngadep PC dan memelas serta minta maaf ke anggota clan. Maaf ane leave gan.

## Proses async

1. Disaat lapar pun tetap tenang dan dengan sigap ambil hape trus pesen makanan cepat saji, dan diakhir pembicaraan dengan lantang bilang “ga pake lama ya mbak :3”. (ga sampai 1 menit)
2. Lanjut main DOTA deh sambil nunggu pesenan datang.
3. Ting tong bunyi bel rumah bunyi. Alhamdulillah pesenan dah dateng dan pas match baru aja selesai.
4. Ambil pesenan dan ga lupa bayar. Trus makan deh.
5. Setelah makan balik WAR lagi. uyeaah.

> Dari cuplikan proses diatas dapat diambil kesimpulan pada saat proses sync, tiap proses harus diselesaikan terlebih dahulu agar bisa melanjutkan ke proses selanjutnya dan harus berurutan.

Berbeda dengan async proses, pada async proses masih tetap bisa pada state awal tetapi dalam kondisi menunggu proses yang berjalan diluar system seperti proses masak makanan cepat saji sampai makanan sampai di rumah. Dan pada saat proses lain tersebut selesai ia akan memberi tanda bahwa proses sudah selesai.

Dalam konteks async diatas, notifikasi atau tanda jika proses lain adalah bel rumah berbunyi berarti tanda kurir makanan cepat saji sudah datang. Notifikasi seperti ini dalam bahasa pemrograman disebut callback yang berisi informasi proses dan proses tambahan seperti mbayar makanan. :p

Semoga sedikit kisah ga jelas tersebut bisa membantu memahami konsep asynchronous.
1024+ Seconds of JS Wizardry
Tags: shares, videos, dev
Published: 2020-07-07 09:31:57

---
title: 1024+ Seconds of JS Wizardry
published: true
date: 2013-10-06 10:30:28 UTC
tags: Shares,Videos,dev
canonical_url: https://blog.pitermarx.com/2013/10/martin-kleppe-1024-seconds-of-js-wizardry/
---

{% youtube RTxtiLp1C8Y %}

Martin Kleppe: 1024+ Seconds of JS Wizardry – JSConf EU 2013 (por [JSConf](http://www.youtube.com/watch?v=RTxtiLp1C8Y))