Oh, Hi…

Hello and welcome to my web log. On this site I will write my thoughts and ideas relating to front‐end web development. I would like to share my experiences and will be more than happy to receive feedback and questions.

One Amazing Business Card

Mon, 07 Jul 2008 11:26:00

Want to share my little excitement: my business card made it in “70 Amazing Business Cards”. That was a bit of surprise, because I am not a designer, and my cards are very cheap indeed.

My WebDU 2008 Presentation

Wed, 02 Jul 2008 15:38:56
I uploaded slides from my WebDU presentation on “Advanced JavaScript™ Techniques” to SlideShare. Not really as valuable without verbal part, but still could be useful.

Simple Cycle

Wed, 02 Jul 2008 11:11:35

In continuation of my previous post here is my implementation of times method of then Number object.

Number.prototype.times = function (f) {
    (function (i) {
        i && arguments.callee(--i) && f(i);
        return true;
    })(this);
};

The idea is that you should be able to write code like this one:

var a = [4, 2, 6, 1, 8, 0];
a.length.times(function (i) {
    alert(a[i]);
});

JavaScript Without “if”

Tue, 01 Jul 2008 16:45:28

For some reason I have a question in my head: “Could I write code in JavaScript without ‘if’ statements at all?” Inspired by Chris Owen’s presentation on SmallTalk I created this implementation of SmallTalk-like pattern for working with boolean objects:

Boolean.prototype.ifTrue = function (f) {
    this && f();
    return this;
};
Boolean.prototype.ifFalse = function (f) {
    this || f();
    return this;
};

// so you can write

(4 < 5).ifTrue(function () {
    alert("It is true.");
}).ifFalse(function () {
    alert("It isn’t true.");
});

This example doesn’t have any practical usage, but from academic point of view this is an interesting example.

Web Directions South ’08

Wed, 28 May 2008 14:58:00
Web Directions

I am pleased to announce that I am going to speak at Web Directions South this year. I am very excited because it is first time I will share stage with such a web stars as Jeffrey Veen and Douglas Crockford. Not mention other 18 speakers.

I am happy to give you a promo code that takes $50 off the ticket price. “WDS08-DBA”. See you at Web Directions!

JavaScript Nuance

Tue, 27 May 2008 12:56:00

I would like to describe yet another JavaScript weirdness. Fortunately I didn’t face it before and was absolutely sure that function a(){} is equal to var a = function (){}.

I was wrong. There is a huge difference. Lets see the example:

var a = 5;
if (a == 5) {
    var b = function () {
        return "obvious";
    };
} else {
    var b = function () {
        return "never";
    };
}

if (a == 5) {
    function c() {
        return "expected";
    }
} else {
    function c() {
        return "surprise!";
    }
    function d() {
        return "how come?";
    }
}

alert(b());
alert(c());
alert(d());

You probably guessed; the output will be “obvious”, “surprise!” and “how come?”. This will be everywhere, but Firefox. If you define a named function it is defined in the current scope by runtime compiler will process it wherever it appears in the code. So beware of such a constructions and don’t forget to test in other browsers.

P.S. The other difference is that function c has a property name equal to “c”:

c.name == "c";
b.name == "";

Firefox Table Bug Workaround

Fri, 09 May 2008 11:35:00

Reminder to myself. Workaround for the bug: Bug 155955.

table {
    border-collapse: collapse;
    border-spacing: 0;
}
:root table {
    border-collapse: separate;
}

One Pixel Rounded Corners

Thu, 08 May 2008 10:32:00

After reading blog post of CSS Guy about one pixel rounded corners at Google Analytics web site which is done by using some additional <b> tags I realize that I was using this technique long time ago, but without additional elements. Here is the HTML code:

<ul>
    <li>
        <a href="#">One</a>
    </li>
    <li>
        <a href="#">Two</a>
    </li>
    <li>
        <a href="#">Three</a>
    </li>
</ul>

And here is the CSS:

ul {
    padding: 0;
    margin: 0;
    width: 20%;
}
li {
    background: #000;
    border-bottom: solid 1px #ccc;
    border-top: solid 1px #ccc;
    list-style: none;
    margin: .3em;
    padding: 0 1px;
    position: relative;
}
li a {
    background: #e5e5e5;
    border-bottom: solid 1px #000;
    border-top: solid 1px #000;
    display: block;
    margin: -1px 0;
    padding: .2em;
}

Demo is here.

AJA* (AJAX, AJAH, AJAJ, etc)

Tue, 06 May 2008 14:55:43
I am sick of all this AJA* things (AJAX, AJAH, AJAJ, etc). If I can dictate the fashion I say “Call it AJEX—Asynchronous JavaScript-based EXchange” or something as generic. AJAJ just sound stupid.

Australian English in Mac OS

Fri, 02 May 2008 12:00:00

Just to remember this next time I will set up new environment: terminal command to force spell checker to respect australian English.

defaults write -g NSPreferredSpellServerLanguage "en_AU"

HTML 5 & JavaScript

Thu, 01 May 2008 14:19:26
Why the hell we have JavaScript code inside HTML spec? Canvas sub-spec in HTML 5 spec

Fibonacci function

Fri, 18 Apr 2008 09:57:00

I have requests to publish answers to my JavaScript questions. And surprisingly most requested was Fibonacci function, so here we go. My vision of this function:

function fibonacci() {
    if (!("numbers" in arguments.callee)) {
        arguments.callee.numbers = [0, 1];
        return 0;
    }
    var len = arguments.callee.numbers.length;
    arguments.callee.numbers.push(arguments.callee.numbers[len - 1] +
        arguments.callee.numbers[len - 2]);
    return arguments.callee.numbers[len - 1];
}

The most important thing is to remember that function could be anonymous.

Optimus 0.5.3

Thu, 17 Apr 2008 12:17:00
After long discussion at µf mailing list it looks like people came to decision about JSON format for µf parsers. So, I am trying to follow here. Optimus hits 0.5.3 with improved JSON support.

Optimus 0.5.2

Tue, 15 Apr 2008 10:35:27
Today morning I was fixing two bugs in Optimus: one is huge and one is small. I started with small, fix it and turn my head to the big one. And for my big surprise it was fixed by the fix of small one. Amazing. I love such a moments. So, Optimus has been updated to 0.5.2 version.

JavaScript Tasks

Mon, 31 Mar 2008 00:00:00

Recently I did a small workshop in the company I am working. I thought it could be interesting for someone to take a look at Javascript tasks I created for my colleagues. It was a bit of challenge for me, because all of them are pretty experienced in Java already. Here are some of them:

  • Find the biggest element in the array of numbers. Use function Math.max for this;
  • Transform array of numbers to array of functions that will alert that digits;
  • Sort array of objects by number of object properties;
  • Write a function which will return you first two times 1, then 2, then 3, then 5 and so on (Fibonacci numbers). Don’t use any global variables.
  • Make this syntax possible: var a = (5).plus(3).minus(6); //2
  • Make this syntax possible: var a = add(2)(3); //5

If you know the answers, located in Sydney and looking for a job, drop me a line.

Optimus

Mon, 08 Oct 2007 00:00:00

All right, after some hard hours and debugging I could introduce you Optimus—microformats transformer. In short, it transforms HTML to XML or JSON. I would like to send special thanks to John Allsopp for inspiration, support and hosting, Brian Suda for idea with XSLT and Cameron Adams and Kevin Yank for inspirational speach at Web Directions ’06.

WebDU, WebJam & More

Fri, 04 May 2007 00:00:00

I haven’t written a thing on my blog for ages, a bit slack I agree. But don’t think life has passed me by during this time. Actually, a lot has been happening. WebJam 2 for instance. I presented my latest JavaScript game (IE ignored) and my Flickr™ bookmarklet to those who attended. It was a great event… Pity I didn’t win again… :( Making matter worse is Lachlan just announced another WebJam which, unfortunately I cannot attend. It’s a shame.

In other news:

At the recent WebDU 2007 Web Developers conference I had the honour of giving a presentation on Microformats. You can view the presentation as a PDF. Surprisingly my talk received a lot of interest among peeps and as a result I met a couple of great guys.

As part of the conference WebJam 2½ was organised and was quite funny, frankly it was the funniest WebJam so far. I presented my Conference Schedule Creator which fitted in well with my Microformats speech the day before.

Upcoming Events:

As I mentioned previously I won’t be able to attend the next WebJam, but fear not my friends, I will be updating my blog with something that is sure to amaze.

On August 1st–3rd I will be giving a talk at the Open Publish Conference about mushups, APIs and stuff like that, hope to see you there.