Общо показвания

декември 23, 2011

TUI status update

The Tornado UI project is now more or less in stable phase, there are some small issues here and there, but the transport layer is stable and the HTML UI is complete. Also the closure-library link for the transport layer is ready.

As of today the develop branch from the last 2 months is merged in the master, which means that it is useful as it is, no need for special setup. You can just host it anywhere and point your Tornado device to the start URL (edit the M55/M70 settings and set 'Start URL' and 'Use start URL' to true).

The one piece still missing is the picture browser, we are working to resolve the memory restriction making web-kit to crash after a while with large files. Once this is ready you will have a complete interface, fully customizable via CSS only and very easy to extend with JavaScript.

The code is available on GitHub.

The documentation is progressing well, for now it covers only the transport layer and its abstraction layers, but the plan is for it to include the UI elements as well for easier use of the source as SDK for your own AV application or even your games.

The binding for closure library will be released soon, we are still clearing some compiler warnings in strict mode with type checking. Stay tuned. Using the closure compiler brings some new features, like compilation for a particular device, cutting out large portions of the code base and making the application faster. We are also working on some nifty features like app cache and local storage for even faster loading as well as some advanced visualization features, that will run on the newer devices and will bring the cutting edge presentation layer one expects from a modern web application.

декември 22, 2011

Списание Дъга

Ако сте над 25 годишни и сте от мъжки пол (пък даже и от женски да сте..) сигурно си спомняте списание "Дъга". На мен ми беше любимото. Нещо като социалистическа версия на "комиксите". Интересното при него беше, че освен разказите съдържаше и игри и статии. Също друго, много интересно нещо бе, че различните истории се рисуваха в различен стил, което развива артистичните усещание у младежта. Нещо такова.

Та така де, всички броеве можете да разгледате или свалите от тук: списание Дъга

What is better than Glee?

Short answer: Mary Lou by Eytan Fox. 


Why? Because it treats real life and real problems and not high school imaginary drama with bunch of adults in their mids pretending to be high-school students. Yup. 

And the music is better. I like Svika Pick! And you like it too, if you like Harel Skaat. 

Attention (Anti Semites): the movie is from Israel and is in Hebrew
Attention (Anti Gays): the movie contains some homosexual imagery and transvestite imagery - nothing profane though. 

декември 16, 2011

Developing JavaScript in Vim

Vim is great for coding, anyone can tell you that. It is customizable and extendable beyond anything I have encountered. However this is not seen as s plus immediately by JavaScript developers.

In this post I will try to summarize my experience with Vim for JavaScript programming and in particular with closure tools and node.

First of course you will need Vim 7.x. You will also need exuberant ctags or gjstags. The former is preferred though (explained later) and a JavaScript hinter/linter (jsl, jshint, jslint or gjslint).

Now for the vim plugins: you will need syntactic, taglist, nerd three and writeJSDOCcommen.

ctags is used to annotate your code and while it does not have the fancy options of Aptana Studio or Eclipse (like annotation for variables in the scope of a method or the properties of an object enumerated in the Object annotation as well as properties on its prototype all arranged in a nice tree view) it has something I often fine more useful - the fact that it is able to append the annotations so when you have opened 10 files and you see only one in your editor you still see all annotations for all open files. This is especially useful when working with code you do not know well (like the vast closure library for example, did I mentioned that I struggled with a tool to help me getting better knowledge of closure).

To use ctags effectively in vim I would suggest taglist. I use the following option setting in my vimrc:

let tlist_javascript_settings = 'javascript;f:functions;c:classes;m:methods;p:properties;v:globals'


This is - I want everything annotated in JavaScript files. I also use this shortcut:

nmap :TlistToggle


In ftplugin/javascript.vim I also have:

nnoremap   :call WriteJSDocComment()

This is not extremely useful, but a time saver. This was for code annotation, not lets begin with code checking.  I used to go with node js and jshint, but the truth is it does not make sense to install node js just to run hinting on it - after all it is marketed as server side JavaScript. Hinting is actually better done with syntactic.

By default it will look for any linter installed, I tried gjslint (the closure instrumentation linter) and jsl. The former tend to be too much closire library centric so probably the later would be better if you are not developing with closure in mind. Also the gjslint executable is much slower on larger files.


The last is NERD_tree which is not JavaScript must have, but it helps a lot see and browse your files as you do in any other IDE.

What I was not able to find is help system that is able to read JSDoc annotation for JavaScript and hint the usage. If anyone knows about such, please let me know.

PS: I often switch OSes, Looks and feels, IDEs and editors, browsers etc. I like diversity. However to this day I have not found the perfect JavaScript editor. Every one out there has a feature that I like but the others lack and each one lacks multiple features I like. Looks like finding the perfect tool is a never ending quest.

октомври 14, 2011

What Is Wrong About 17259 Lines Of Code, Q&A

Web Reflection: What Is Wrong About 17259 Lines Of Code

I can answer and it is pretty simple and they have answered already by the way, you seem to just failed to read it: They have the resource and the will. Which means they can put 30 or 100 developers into something for months and even years and pay them to do something that might fail epically and still they would not mind! While the smaller companies and single developers cannot invest months into something that might fail or just be useless.

On the 'why' - it is just an experiment. The high expectations are to be the browsers that 'runs it native' and maybe they believe it will give chrome and chromeos some better user acceptance. Or maybe they really believe it is a step forward.

Anyway, just let them be. AFAIK very little number of companies are using the other attempts: GWT, Closure library, Go and so on. If we leave it alone it might become just one more project of them.

октомври 03, 2011

Node madness

I may or main not know - I make living as javaScript developer. As such I invested time and energy even beyond my 8/5 work schedule - I often fund myself involved in on-line activities related to augmenting my skills in the language I support my family with.

This said, it is explicable that I as excited when nodejs came around. I was not exactly one of the first adopters and around he time I tried it there were connect and early form of express and other middle ware and frameworks that ease the server side development. And I was relieved! Because frankly who wants to reinvent the wheel.

Yeah, node promoted itself big time in the JavaScript community, promising you the ability to write your logic once and run it anywhere, the server and the client alike. There are even companies that struggled for almost two years to reveal a large scale product based on node (like nodejitsu and cloud9). Interesting and useful (mind you!) things came to life - Socket alternative (like commet for python) at your disposal that you can code for in the language you already know well, for example. I for one was struggling once with Comet!

This however must come to an end. Why? Well, the thing is node might be great for some subset of application cases, I for one have never had one of those however. Node still does not have great SQL linkage (unlike any other server side language you still cannot reliably use stored procedure in the SQL server and have reliable return values in your JavaScript, I my practice we had to modify the procedures to have only one SELECT to be able to parse the results correct in mysql-node.

And today I read this article that says it well : node js is cancer. Why? Because it is over praised and use for "everything", while its niche is in fact pretty small. The fact that get to use language on the server that you already know might be tempting, but the thing is - it is not necessarily appropriate for everything. And while you applications logic start requiring ultra dynamic server side + client side mix of JavaScript it will never be!  I mention that because there are good projects out there that allow you to call server side JavaScript objects and method and this sounds very tempting to me, as on the server I can rely heavily on standards (V8 for example) this is mostly not the case in browser environments. On the other side this is somewhat simplified work around for cases where server side calls are performed and executed in other languages - i.e. the client side does not need to care about the server side implementation, which IMO makes this somewhat pointless, unless you need to write the server side logic as well.

My disclaimer: I have release exactly one web project completed entirely in node.js environment. And to tell you the truth - very simple one. And I gave it all up. Why? Because this is simply bull shit! I had to re-create in JavaScript functionality that was build and ready to use for years in pretty much any other server side language. And on top of that I had to learn new tools for server side deployment, 'forever', node set-up, npm set up and other things just to get this one web site going. And mind you  - the idea and implementation there was easy! The most simple thing, sending emails, took me a day and a half to start working properly. Not because I don't know the language, just because out of the 8 implementations in npm only one was able to do what it is supposed to to - everything else made the main server dislike us. Try this in any other language, be it java, python or php or really anything server side and you will see - it will just work.

So you see, I am not against node.js. I am against using it as general purpose server implementation.

Yet another thing I have to confess: I use node applications to JSLint my client side code, I use jade executable to compile my client side templates and I use uglify JS to minify my code. I sometimes also use requirejs with node to minify and compile the client side code before deployment. But notice - those are only tools. I would never use those on server side application.

How I see the future? I think most useful it would be to just make node work as library on top of apache like the python interpreter is. And use it only where needed!

октомври 01, 2011

Project shift evaluation (Target: Closure library)

I have given another though on closure library + compiler + templates.

I have downloaded the source, the compiler and template utilities. The source is really well documented.

Unfortunately I have issues with the fact that the compiler understands only certain subset of the JavaScript language, which means that I as developer need to restrain my work to those limitations for the only purpose to be able to compile the code to a usable size once development is completed.

I have tried to compile some of code as it is - it mostly did not work:
if (!window.console.group) {...}
resulted in:
if (!window.console.a){..} 
which is actually pointless. To avoid this I have to write:
if(!window.console['group']){..}
which is then compiler to
if(!window.console.group){...}

I find this exercise to be tedious for the developer; if a statement is valid JavaScript compilation should NOT break it.

I likes the name spaces idea nice, however the module pattern is equally nice to me.

Now about the templates. Our design guys make the prototypes in plain html. It seem fairly easy for a developer to translate this in closure template. However the fact that I need to use it with closure compiler throws it under the bus. Indeed the generated JavaScript is fast and compact, but fast and compact javascript is generate for jade templates also (and probably other templates for the node platform, those can be 'browserified'. The overhead of translating the HTML markup to Jade markup is not that bug as the Jade is fairly simple.

As of the compilation always valid code with minification is produced by uglify.

I was hoping for some more advances when dealing with UI, for example loading the css, the template and the logic of widget on demand. Nothing like that, at least not at first glance was found in Closure.  Seems we will continue handling the css manually and loading the modules with our JavaScript module implementation.

Before anyone gets this personally and start explaining the numerous advantages of Closure, let me tell you, I even went as far as reading "Closure: The definitive guide". I did not found the answer to our problem there. So it might be the greatest of them all, it still relies on coding style, which we do not have and there is no currently plan to port 100000 lines of code to another coding style so that closure compiler can handle it. Maybe one day when it can handle any code we will move on.

Conclusion: The main motivation behind this attempt with closure was the fact it makes maintainability much simpler. For example if we rely on Google to update the core and keep the API, we can assure the longevity of our code.Our code base grew enormous for the last year and we want to support only that, forgetting about browser inconsistencies, we would want to NOT back-port new versions of libraries, we do not like libraries that alter/augment native and host objects and we want either the namespace pattern or the module pattern. We want to be able to minify. Still we have not found all those in one project.

Our current approach is:
  • requirejs for module loading
  • jade for templating
  • css for styling - no processing
  • simple build process that minifies all scripts and then runs the requirejs optimizer. We minify all scripts because most of them are dynamically loaded and the optimizer cannot see them. 
  • documentation is built by an in-house developed script reading the source (comment based as with YUIdoc, however much simpler).
  • development environments are created with scripts that produces the base of the library, the project structures and a test server with local and remote debug server that compiles the templates on the fly.
  • deployment is created with script and is complemented by a build from the development 
  • versioning is done with git flow

септември 27, 2011

Transformers (3)

Най-тъпият филм, който съм гледал, с най-неясните ефекти. Това което виждах на екрана беше онова, което виждам като пусна миксера - нещо метално се върти. Толкова. Нищо друго. Гений на компютърните анимации или болен мозък!?

Второто.

Повече никакви трансформатори!

септември 26, 2011

Домашен сладкиш

Ето какво похапваме за "заслаждане" последните дни с Мартин:

Домашен кейк с домашна глазура
Кексчето е много лесно, разбива се без миксер и може да му се правят вариации с плодове:

1 чаша захар
2 чаши брашно
1 бакпулвер
1 ванилия
1/2 чаша мазнина (олио примерно)

Разбивате с бъркалка и изсипвате в намазнена и поръсена с брашно формичка. Печете на силна фурна, както обикновен кекс.

Тук е момента да спомена, че ползвахме пълнозърнесто ръжено брашно, кафява тръстикова захар и зехтин. Това са вариации по неволя, нямахме друго просто. Стремим се в кухнята ни да няма много изкушения.

Консистенцията на изпечения кейк не е като на традиционния кекс, не е така пухкав и мек, прилича повече на плътен хляб. Ето защо след като изстине го нарязвате по удобен начин, според формата за печене, която сте ползвали и намазвате хубаво със смес от добре изцедено мляко и домашно сладко (ние ползвахме от череши, освен това минахме сладкото малко през миксера и оставихме само няколко цели череши вътре, за украса). Оставяте леко да поеме влага и е готово за хапване.

Докато сме на въпроса с десертите, отцеденото кисело мляко е страхотна основа за всякакви вкусни сладкиши. Ние ползваме 1.5% или 2% мляко и го отцеждаме за няколко часа. Водата ползваме като айран, доста е солена между другото, вероятно купуваме мляко, в което добавят сол, макар да не е означено на етикетите.

След като е отцедено разбиваме млякото с нещо сладко, често това е мед или домашно сладко от ягоди, череши или друг леснодостъпен от село плод. Плътният сладък вкус доста добре подтиска глада за млечен шоколад. Ако пък обичате ядки, може да се добавят в сместа, става доста добре, но аз лично не обичам никакви ядки. Консумирам ги само много фино смлени в мюсли или в смеси като тази.

Освен че има по-малко мазнини от обикновения шоколад (калориите в такава смес са около 2 пъти по-малко от колкото в шоколад със същия грамаж, това разбира се не означава да ядем два пъти повече от млечните смески), по-голяма част от калориите са за сметка на протеина, от колкото в шоколадите. При някои хора поемането на протеини подтиска глада за по-дълго време. Простата истина е, че след определена възраст повечето българи просто приемат твърде много калории. Дори и да спортуват, стегнатите мускули са покрити с мазни слоеве. А колко от нас всъщност спортуват до толкова, че да поемат по 500+ калории на ден над норматива си. Аз не!

септември 16, 2011

what good is youtube

Recent check on my old blog (in livejournal) fir 'music' tagged posts reveals the following: 80% ot the linked YoutTube videos are now gone. So what good is youtuube then - you share something from the site and you cannot know how long it will be there! So it is good only for sharing stupid hoe videos, like the kid after dentist appointment! Fuck youtube!

септември 12, 2011

Смотан педал в ефир

Става дума за Миро в предаването "Гласът на България".
Само за една вечер малоумните му коментари минават всяка граница:

Коментар номер 1: "сигурен съм че това зпълнение направи едни "щастливи" хора още по-щастливи (за песен на Лили Иванова)

Коментар номер 2: (към Марто) Неудобно ли ти стана (след като на сцената танцуваха двама полуголи красавци за "украса" на песента на Lady Gaga.

Сценка (не е коментар но си е номер 3): Какви бяха тия заигравки с девойката, опипвания, въздишки и тн? Горещо му станало. Таратанци.

Мирославе! Гей с гей такъв! Престани да се правиш на мъжкар, че вече всички ни е гнус от поведението ти. Водиш по гнусотия дори пред тая кокошка Мариана с нейното "Ами щом хората го харесваааат... аз нямам коментар". Що нямаш? Щото туркиня изпя българска песен за това ли нямаш? Ами за Александър, който изпя турска имаше ли? Тъпа пача. Много разбира от музика вече. Онзи път когато пя с другите ученици видяхме колко струваш. Най-зле пееше от всичките!

Изобщо в България всички са големи разбирачи и разбират от всичко и смятат че трябва да се покажат колко са ербап по национална телевизия. Аз знам, че Мирослава е тъпа овсъ, достатъчно обикаля педерастките чатове, та е налитала и на мои познати. Ама то бива наглост бива... всичко си има граници!

Decision making and MLM

Recently I was about to attend a presentation by Zepter about their Steam vacuum system.

I decided not to attend and instead take the decision in favour or not or the purchase on my own time and by my own means. What I mean by that is the known fact of decision fatigue: this is, when you are tired of comparing options at the end you just give up and you make no rational decision. Which is exactly what the sales representatives want. Of course this post is not to blame them, as anyone has to make their living and does it by its means. However, knowing about the facts on how we make decisions is very important.

I need to clarify that I do use and I do like Zepter products, I have used several and I am very happy with my purchases, I am using the company just as an example here because of their direct marketing strategy which is working partially by pressing the potential buyer into a purchase, part of the methods used derive from decision taking fatigue.

More about the studies can be found here.

How is this performed for Zepter presentations. First of all you are seated for at least one hour, during this time probably someone is cooking something which will be given to taste at the end of the presentation. During this time you are constantly bombarded with "facts" (I put those in commas because the real name of those is "claims", not facts, for example Zepter claim that during cooking all vitamins are preserved in the food which cannot be physically not chemically true, unless during cooking the food is transferred in a parallel universe where the vitamins are not destroyed by the high temperature, for this to be fact there should be some real measurement done by certified laboratory and the data from the tests as well as how the tests were performed should be available to the buyer, this is never the case! Even if it was the case, how many potential buyers would have the possibility to check on th laboratory credentials in this one hour time frame?)

As the products are described one after another and sometimes marvellous qualities and functions are imagined and described with great confidence you start to think that Zepter is selling everything that you need, and mostly what they sell is what you need indeed. As mentioned in the disclaimer above I do use their products, still I am not in agreement with their methods of selling it! At the end you are presented with the astronomically high prices and you have to make the decision. You are now really hungry,  (see reference link) and you have to choose from so many wonderful things! Now is the time when the consultant/manager/whatever uses its powers over you - to push you into a contract. They know what you came for (usually you are invited by a friend or colleague and they know why you are there) and subtly guide you into purchasing it. The beauty of it is that a day later you know you have spent too much money on something you might not really need, buy you are completely sure you have made the right decision. As to quote from the NYT magazine: "By the end, you could have talked me into anything".

Notice that not "decision" fatigue  is the reason you buy, but the slight guidance from the person who sells you the stuff. Also notice that the less money (i.e. less options you have on purchasing everything you liked on a presentation) the easier is to be pushed into making a certain purchase. This is a well known also, rarely people with lots of money attend those parties, unless they are "in the game". If you have the option to purchase anything you could hardly be rushed into purchasing anything. This comes from the fact that we are constantly bombarded with money decisions and we just do not want more of those. Each time you have to think of money it is a decision making. To purchase this or that!? But the money is not the only object, when you do not have enough to make mistakes (i.e. buy the one you randomly choose at the moment, then decide if you like it or not and possibly purchase another one with similar capabilities/qualities).

If you want to go to a presentation on a MLM - go. Here everything you want to hear, take notes and then go home. And forget about it. After a month re-open the notes taken and check all claims (you could start online - it is cheap and easy). Then compare products! Always compare products. Then check your needs. Often you are lead to believe you need all functions/capabilities of a product - usually you do not! Why would you need 2 vacuum cleaners?! Also be aware of the "additional purchase" - if you are offered to buy an item for 1000EU but if you decide to take a second item with face value of 300EU the whole purchase will be 1100EU. This is an easy way to sell things that are actually much cheaper - for the example with the vacuum cleaned you get an ironing board/ladder. Which is priced at 320EURO!! Excuse me! No thanks, I just want the freaking vacuum machine.

Let me tell you a trick in the marketing. Lets say I am seller 1 and I have an item priced at 100$. Exactly the same item is priced at 95$ at seller 2's shop. Now, you can come to me and say: hey, seller 2 sells it for 95$. I will tell - well, okay tell you what, you could pay 100$ here but you get a second item for free, which otherwise would be 15$. So for 100$ you actually get items for 110$!!

And here is the trick. The item actually costs me and seller 2 60$. If you buy it from seller 2 he gets less but I get nothing. So i am offering a second item, which is often with even bigger earning points: lets say 5$ and I put face value of 15$ on it. In the final calculation I have made bigger profit than seller 2 anyway and you get a completely useless second item (a simple example would be a new PC as item 1  and item 2 would be "stereo speakers" - with awful sound quality which is hard to sell anyway).

Lesson number 1: never, ever make the purchase on place. take your notes at home and check out the competitive products. Compare everything you can think of. Then if you doubt about a certain aspect of the product contact the sales person again. And demand for concrete details, not some vague answer like "Ooh, don't worry, it never happens with our products".

Lesson number 2: always refuse the additional products, no matter the "saving" you get. If they are so eager to sell you the expensive item try to negotiate lower price on it instead of taking the "free item".


Lesson number 3: Do not get involved! If you happen to make the purchase anyway and you happen to like the product do not fanatically start to buy anything the company has to offer! And do NOT recommend it blindly. Instead advise the people seeking recommendation to repeat the same process you just read about. For their case this might not be the right purchase.

Lesson number 4: do not over-think it. If you think about a purchase for longer than 3 months you probably can go without it anyway. Also, consider future possibilities. Simple example in those MLMs is introduction of a new product (same example - Zepter vacuum) - price at introduction - 1500Euro. Price after a month 1950Euro. This is a SIGNIFICANT price difference! If you can wait for 3 or more months for a product you can go without it for a while longer and wait for a better deal on it. And no, the new, better model is not from other space. Think how would you have felt if you bought the old model and a month after that there is a new one! Much better. Nah...

So this is it. I hope you think twice next time on those presentation parties. I still do not understand why they call them parties. No one seem to have fun there...

септември 11, 2011

Dietary adjustments

След като се установи, че съм качил, вместо да съм свалил това лято дойде време да се направят няколко промени в храненето и спорта.

Започваме с храненето. Явно ядките на закуска не са най-добрият вариант за човек със седяща работа, независимо колко спортува привечер, а аз не спортувам много. Ядките явно отпадат от плодовите миксове, вместо тях залагам на нискомасленото кисело мляко, къде с "жизненоважните бактерии"® къде без....

Закуска с мляко и плодове
Ето примерна рецепта:
⅓ нискомаслено кисело мляко (обезмасленото има странен вкус, за това не го ползвам)
3 сини сливи, без костилките
1 малка ябълка от сладък сорт, без семките
1 шепа малини
1 лъжица мед (може и стафиди, за повече фибри!)

Смесвам всичко в блендера и voilà!

Ако предпочитате охладен вариант може всичко да е престояло в хладилника, получава се доста приличен "сладолед". Аз не обичам студени храни и напитки, така че го правя със стайна температура. Според мен много ще върви с малко мента тази смес, но нямах и не съм го пробвал.

Освен промяната в закуските мисля да пробвам и промяна в обядите, вместо вуглехидтрати със зърнен произход, ще опитам такива, като картофи и други нещестени зеленчуци. Ще оставя обаче кафевия ориз, защото много го обичам. Мисля да увелича леко и зехтина. Рибата 2 пъти седмично и месото два пъти седмично остават, но напоследък не ме кефи пилешкото, мисля да заложа на телешко този месец.

Мисля да измервам резултата по-строго вече, с взимане на мерки през ден и записване в таблица не само началния и краен резултат, но и междинните такива.

септември 08, 2011

Shareable future?

Alex Steffen talked about shareable future for our cities. At one point of his talk he points out:
The denser the city the lesser the footprint
While this is certainly true the following is also true:
The denser the city the worse the mental health of its residents.
This contrast is easily explained: while we reduce the carbon footprint we endorse the 'people' noise and the stress. Car alarms, crying babies, loud music in the neighbours, a party bellow you, piano player above you, someone making renovation somewhere in the nearby building or worse - in your building. All those things tend to build up and destroy our sense of equilibrium and the more sensible to this stress people (like me) reach a point where everything bothers them! Every little noise, every little nuance with the neighbours, with the loud people walking on the street and so on.

So mr. Steffen, before we can stop stealing your future, you should first propose a viable solution. Because the one you are proposing right now it not good. Increasing the density of the cities is NOT what we need!

(link to the TED video (mp4))

септември 05, 2011

Javascript client-side templates

How to use jade templates on the client side with requireJS.

I am working on a rather big project targeting webkit embedded environment and I was looking for client side templates that can be loaded at runtime (i.e. dynamically) and do not require the loading of iframe (because of some internal requirements posed by an C++/JS extension in the environment ).

I was using jade on node server for some time and I like the clean syntax, I never ever liked HTML syntax.

To use the jade format on the client side you need the jade code:

$ git clone git://github.com/visionmedia/jade.git
Compile the minified or the regular version as needed:

$ cd jade && make jade[.min].js
The compiled version however leaks the 'require' function in the global name space and as we are using requireJS for the project (I recommend it - a lot!) we had to enclose the resulting jade code in a define:
$ echo -n "define(function(){" > requirejs-jade.js && cat jade.min.js >> requirejs-jade.js && echo -n "return require('jade.js');});" >> requirejs-jade.js && mv require-jade.js jade.js
 After that we were able to allow each module to define its own template(s) at load time and use lazy load of all modules as usual:

//module that can be loaded whenever the envoronment needs it
define(['jade.js' , '!text/templates/atemplate.jade'], function(jade, jadetpl) {
    var tpl = jade.compile(jadetpl);
    var data = {/*some data*/};
    $('#container').innerHTML = tpl(data);
    return {/*module's public interface*/};
});
The pre-compiled to JS functions modules can be loaded from the server also! This was tested in Firefox and webkit as those are the environments targeted. I will update once I test it in IE also.

UPDATE:
I have tested it in IE, of course it fails miserably, however the pre-compiled templates work (of course you need to fix the runtime.js as it contains schims for Arrya.isArray and Object.keys which seem to not have been tested (I have reported this in github, the author will fix it soon probably)). If you are looking for working with client side templates in IE environment you will probably need to pre-compile your templates on the server (done only once) and it will turn them into javascript functions. If you want to use those with requireJS you will need to decorate them a little bit, here is my decoration (this is done 'live' on the server as we are still in development phase and we change the templates a lot, so we provide a compiled template on request instead of pre-compiling them all, the pre-compilation should be done in the build however, before deploying):

var a = jade.compile(data, {
      compileDebug: false,
      client: true
});
a = 'define(["support/runtime"],function(jade){' + a.toString() + 'return { render: anonymous }; });';
res.send(a);
And then on the client:

require(['tpl/tplname'], funcrion(tpl) { var html = tpl.render(data)});

As seen, the returned fragment will be requireJS compliant js script, the dependency (runtime.js) also was altered so it does not leak in global namespace (i.e. I made it also requireJS compliant).

In brief: it is possible to use client side templates (regular jade or pre-compiled, depending on how much you are willing to trace the issues in IE). On the performance side I have not yet completed the tests, regardless of the tests however the flexibility templates provide will compensate the slow down, especially with pre-compiled templates (those are very simple scripts and look a lot like the usual string concatenation method).

Happy birthday, Freddie!

Google tribute to Freddie!

freddie doodle

септември 02, 2011

My favourite Firefox add-ons

Over the years I have read many lists of recommended and/or favourite add-ons. For a while I have been using Chrome browser for my everyday browsing, however its lack of support for browsing habits that include 50+ tabs at a time, single window/multiple work spaces (i.e. panorama in Firefox) and other small details like the fact that there is no way I can make chrome open links in new background tab by default (very useful in Google Reader when items are opened with the 'v' shortcut) made me run back to Firefox. And made me look for nice add-ons to make my web experience more pleasant. So here goes my list. Notice that I have installed many many add-ons just to try them and those are the one that stuck.

AdBlock plus: this one should be installed by default with every Firefox installation IMO. It not only blocks ads, it also does good job with unwanted flash ads, which at this point in my browsing habits makes flash block unneeded. However FlashBlock is also great.

Fast dial: One feature I miss from Chrome is the 'app' shortcuts (i.e. not really applications with off-line cache and stuff, but instead simple bookmarks to a URL on the web. Fast dial goes close enough, it is not that pretty (i.e. it does not display the supplied icon, instead it makes a screen grab of the web page by default, which might be a plus or a minus. For example I have had 3 apps in chrome that used the same google reader icon, which is confusing. On the other hand the icons look much nicer.) but does essentially the same thing. And you do not need to go to a web store. It comes very handy when you have multiple very similar bookmarks (like the example above with google reader and google reader player). Fast dial supports icons also, but you need to provide the URL for the icon manually.

Pixlr grabber: Pixlr is a great image editor (much better than the one used by Google Images (aka Picassa). This add-on lets you grab part of any page and edit it in pixlr with one click. Similar to Awesome Screenshot for Chrome and Firefox, but provides much better editing tools. On the other hand if you simple need to make annotations (like pointing out rendering issues to your web designer) awesome screenshot is the better choice.

Quick translator: I use 6 human languages day to day, however I am not so good at all of them and sometimes I need a bit of help with a word or a phrase. Instead of opening new tab with google translate and copy/paste the word I use this tool. Also notice to Chrome - instead of offering to translate each page allow the user to select a text to be translated - less intrusive. Besides google translate is their product also.

New scrollbars
Stylish: I use it a lot to change the fonts in often visited sites mostly, I use it also to change web applications appearance (Perfect dark google reader is awesome! I swear!) I use it also to change the scrollbars of Firefox because I like smaller ones than those provided by the OS. The ones I currently use are displayed on the image.

ScrapBook: this one is probably the most useful for me, as it allows me to do most work. I use dropbox folder (actually encrypted dropbox folder but this is entirely different story) to synchronize my scrapbook across my computers, it would have been nice to have another option for this, for example using google account or other service, but dropbox is just fine for now, providing they do not loose my files. What I like about scrap book is that it allows me to annotate the saved pieces of document, it allows me to keep an entire document, it keeps link to the original URL so I can visit and check for updates (like on forums or blogs) and I have a copy of the content locally, so even if it disappears from the web I can still access it. It allows for folders, exports and other nifty tricks and it more useful than anything I have found thus far. For once I do not need to keep bookmarks to developer sites just to check 3 line of codes I keep forgetting. I just save the parts I like and I can go back to the URL whenever I need to check for updates.


I also use firebug a lot, but this is related too my job. I also use greasemonkey but I write my own scripts, I rarely even search for scripts for domains. Probably I am just happy with what I use as web applications right now.

юли 26, 2011

One bg

Омръзна ми от регистрации и пароли.

След като jobs.bg са били така велики да създадат one.bg  с цел разширяване на моите бизнес и професионални контакти и са ми написали е-мейл, уведомявайки ме, че съм им присърце, задето ползвам jobs.bg, защо ги е домързяло да направят import линк към one.bg, така че да не се налага на ново да пиша кой съм, с какво се занимавам, къде живея, в коя сфера работя и тям подобни. Нали уж сте едно, какво пречи да се внесат тези данни от другата платформа? Или твърде сложно ви става заданието?

Мързел? Недодяланост? Безхаберие?

Ами няма да се запиша в новия ви сайт! Оправете си го и може да си помисля. Може би, ама надали!

Особено предвид, че наскоро ме накарахте да се регистрирам на ново за да ми се обнови профила към новата ви система!

юли 22, 2011

On script loaders

There is a lot of discussion going on on JavaScript loaders recently.

It is a bit unclear to me how the authors and supporters of this or that loader claim theirs is best, while none of them is doing something more than loading files that are previously 'required'.

Here is what I am talking about:

Usually a loader library/script is used like this:

  • Describe my dependencies 
  • Require my dependencies
  • Run a script when my dependencies are loaded
This is exactly the same as just stating your dependencies in JSON format and load them one after another if you know your stuff (i.e. you know which file depends on which, this is usually the case by the way, because you need to know this to describe the dependencies in the first place). All those fancy loaders come down to simple iteration over list of files and loading them. Some of them try to be smarter and try to load "dependencies" and even check if the dependency is met when the file is loaded (RequireJS for example). Still, this is exactly the same because most developers do not separate each function in a file, instead the functionality is grouped. You end up with a big big description of global objects and its structures for 3 or 4 files. Too much work.

What I really expect to see coming is a loader, that based on actual usage loads the required module(s). This would mean:
  • load scripts only when they are used (and not at the start, in some cases they might never be used in the application if its runtime)
  • catch missing object references and postpone the execution for the time when the module is loaded, then re-run it
This is of course more complicated, but still would be really nice. Maybe some day.

юли 06, 2011

Make your Apple products nicer

If you, for some reason, have been insanely stupid lately and purchased an Apple laptop or tablet, still you can make most of it. By using these stickers!



The last one is probably the original, but I like the zombie ones! You can purchase them on Etsy

юни 13, 2011

юни 07, 2011

Chromium OS

After the official announcement of ChromeBook on Google IO, I decided it was time to give the chromium OS another try.


This post comes from Chromium OS 0.14.607.2011_06_06_1630.


I have to be honest - it is very buggy, first of all the network is not working as it should be, it connects okay to my router but then the browser says it is not connected, I have to disable the wifi and re-enable it and if it by chance connects to my neighbor's router it works...


The audio is still not working, I cannot watch a thing on youtube, however html video is now supported, which is good. Not that it is of much use without the sound. The sound controlling buttons on my HP mini however display the audio adjustment controls. Lol.


Apart from that they seem to have a very big problem with the system in general! Believe it or not it is working SLOWER than chrome browser on fedora 14 on this very same netbook! This is really very discouraging! I don't know why is that, maybe the OS is tweaked for the Samsung chromebook, but still it is linux bellow the browser... I guess. 


Other than that the brightness control works fine, sleep 


(and at this point I have tried the sleep/resume trick and it failed me... so I am finishing this post from my Fedora running Chrome)


is NOT working at least on the HP Mini.

I still think somehow believe that the idea to NOT have an OS to worry about and constantly upgrade is great, however they do not seem to be there yet.

Chrome OS: -1



And while laughing at Apple...

Apple catching up

Oh wow, yawn... Apple finally found the cloud. I think Google just laughed really loud.

Watching the iCloud presentation it is like watching a Google video from a year ago. Shame on you Apple:)

май 31, 2011

JavaScript mixins

Oh and while chilling at the beach is great fun, boosts your vitamin D production and so on, it also stimulates you to think more. Not completely related, take a look at the Angus'es post about JavaScript mixins. Very well written and well comprehensible. Good post for any JavaScript developer.

By the way, being a JavaScript developer, do you happen to dream about the day when you would not have to worry about the 'Internet Explorer perks'? Because I do. Dream on, dream on...

Why you should work in Varna

For one - just because you can spend your lunch break at the beach!
Lunch break at the beach!
There probably exists better ways to spend the lunch break, but I don't know about those. If you do, let me know!

май 25, 2011

Pictures

Some pictures I have collected on my phone that have not been seen until now. My stills are not very good (the camera while 8Mpix is not that great on Xperia X10i).

Kaylaka:
I was in Pleven for the previous four days off ( the ones that are related to Easter celebration, for my great luck I am not religious so I just take the days off and go somewhere instead of spending the time in preparation for Christianity's insanity ).
On Sunday we went for a long hike  in Kaylaka, very beautiful place. I really like Varna, but their park ( near Pleven ) is much better than the Sea garden in Varna. However if you come from the shore lines be warned, the air is very very dry in the country, I have had big issue with my respiratory system. even with that it was a great experience.

Small green area near Mall Varna:
This was a few weeks ago, if you look at the right direction and you are deaf you can almost imagine you are in a nice place to live. Anyways just a few meters on the right there is a lot of traffic.

Seaside Observatory:
Last week I moved to my new place, some 400 meters from the sea garden in Varna. A walk in it is always pleasant at all time of the day or night. Still I would suggest you to start around the 'golden' hour and continue from there on until the sunset is complete. It is adorable.

Last one: the beach at 8AM this morning:
South beach at 8AM
It is still May, so there were almost no people on the beach at 8AM (of course there were some, there always are some, even in the winter), but the bars and bbqs around the beach are still closed so it is quiet and calm and you can just lay down on the sand, close your eyes and listen to the birds. I have not notices before but some birds are singing very complex melodies, I was surprised nicely by it. It will remind you of some classical compositions, which is not wonder, many classical melodies have been inspired by the nature. Note that at this time (today) it is still a bit cold on the beach at 8 AM, so you might want to stay with your clothes on. Or not, depending on how well you tolerate the cold wind. I took my clothes off but I felt cold almost all the time, up until I left around 9:20

Here is also a short video, this is a garden people living in a densely populated area made for themselves to enjoy the wonders of nature in the spring, it is really beautiful. An old woman approached me while I was making the video and said:

It is very beautiful, make a video and put it on the Internet.

So this is what I am doing. You can glance her in the video, for only a bit of a second.

май 18, 2011

The evolution of Javascript

During the weekend I ended up cleaning up a mess at my parents' house and I dug in a pile of old books. One of those books was 'Programming with JavaScript' I have bought in 2001. Out of curiosity I sat for a little while and turned the pages to see what was the level of language description in such a book circa 2001.

The author is left unnamed (actually the authorship is signed as 'collective work by SoftPress team).

The rudimentary level of the language description is not surprising, nor the fact that constructor function methods as defined as global functions and then assigned to the object (which is at least a bad practice). What surprises me is the development suggested for javascript. Pretty much all of the examples lead to one exclusive usage for the language and it is form validation. Even today, ten years later no one relies on javascript for form validation just because anyone can skip it, even 10 years old. Why then it was so accented in this small book and why it was suggested that this is the only practical usage of the language?

I can only guess that the engines in IE5/Netscape3/4 were so slow it really was the only practical usage of the language.

Today it took me only 5 minutes to convert a slider application from jQuery to Mootools. Complete with animation and all. It is working in Firefox 3, 3.5, 3.6, 4, Chrome 7-12, Internet Explorer 7,8 and 9. I wonder, how much time will it take to write the same thing, working across browsers, 10 years ago?

I also remembered that I saw my first javascript driven animation in the browser around that time, it was working only in IE and it was timeout driven style altering algorithm (basically the same thing we do today) and it was written very expressively with one main function in global scope and several function inside the main function scope, it was using closures and it was using native type augmentation, which I think was very advances for that age.

Anyways, don't buy this book, it is worthless these days. One advantage it has over the modern books is that is explains in details the CGI metaphor very clearly and provides details on the internal working of a program using this interface, something you can learn today but not in a javascript book!

Talking of books I took a brief (but complete) look at Pro JavaScript with MooTools. Unfortunately there is nothing 'Pro' in the book itself. It starts with too in depth introduction of the types in javascript, somewhat deep look at the functions and objects and then complex code is thrown at the reader without even explaining it all, just 'the interesting and important' parts of it, which I find rude and unprofessional, a code example should ALWAYS be explained in details and the whole of it, otherwise it is waste of book space to use examples if just a single row in it will be important and explained. Other than that the book only covers the class system and briefly mentions the different mixin types in mootools, something you can read and understand from the docs and it takes only 5 rows, not a whole chapter. After that it gets boring until the end of the book, Element, Style and other parts of the toolkit are depicted in unnecessary details, details that one can easily fond in the documentation. Also there is nothing advanced in the book itself and I don;t see how any advanced technique can be learned from it, providing there is not a single example demonstrating such technique. All in all the book is not worth reading if you do not know javascript, it is not meant to be a learning tool for javascript. However if you know javascript and can read English you should not read it either as it does not provide any new information regarding neither javascript nor mootools. Actually the only interesting part in the whole book is the mention and explanation of the 'parent' property of the extended 'classes'. However this can be read on so many places online, so the book is rendered completely useless. Oh and by the way the last chapter is also completely insane, birds eyes look at the server side javascript programing without any real life examples nor advices. Really annoying.

So, how did the language evolved? Well, the language did not, the browser evolved. And today it is a really great tool as well as really really great development platform, I encourage you to learn javascript and use a solid framework ( regardless of what you read online (that the micro frameworks are the future) they are not - most of those (like 90%) are not working correctly across browsers, the top class libraries are tested and do work! ) like jQuery or MooTools (I am not sure which to recommend because I do not speak jquery, I only speak pure JavaScript and MooTools) and just explore the possibilities of a modern browser. Yes, it is true that your application might not work in IE or Opera or some old Safari browser. But hey! I wrote a music player in 20 minutes in chrome!! So can you! And endless other applications! And it is really easy! For fun and for profit, javascript is your friend and is here to stay! So take the time and learn a bit about it.

май 10, 2011

Нотово 'риалити шоу'


Така. Новото риалити шоу се нарича 'Фермер търси жена'.
Коментар на жената*:
-Значи така, а? Аз ще ходя да му копая, да ора, да сера във външната тоалетна и да се къпя в коритото в кухнята! Няма да стане!

Мисля, че това е един шедьовър на краткия анализ!

PS: *ролята на жената е изиграна от моята майка, Дочка.

май 08, 2011

Coud9 beautify

Just a small demo of the dev branch beautifier in cloud9. By the way it does not preserve the indentation as you can see in the video but I do not think it is a big problem. I think it is awesome.

cloud9 local and alsa equalizer

I am very pleased with recent cloud9 service (very nice thing is integration with github and the fact it is running fast enough with my new browser of choice (Chrome)). However it is kind of impossible for me to host all my projects on github and constantly sync the files to local file system just to test the code on local embedded device (the device mounts the files over NFS, there is no way I would make a change on Cloud9 service, git push to github, git pull to local copy for every simple change in the code I made, it is just too much work). I needed a way to run the editor somewhere on the local network.

For a while now it does not play well with node 0.4. Today I asked Google if there is a way around that. It happened so that there is a very simple way. You can follow the instructions from here (I have tested it and it all worked well).

I have also added some features to the music player in the browser, but I have more ideas (I hope it will not ravels into full fledged enormous memory hog it can easily become if I get carried away).

I had a problem with the music playback though, I dislike basses so I wanted to lower them. Maybe there is a way to do this in JavaScript with the audio API, but it sounds like too much work. Instead I wanted to regulate the playback tone volumes globally, so I used AlsaEqual. The installation is very simple and works well, just follow the instructions. I used the global setting because I hate basses on everything, including movies and I was not sure if Chrome can play back sound on selected card. You can adjust the tones in the console: alsamixer -D equal will do the trick.

Oh and by the way on cloud9 development there is a great feature - JS beautify! It works great, helps with very complex code (like the one I use to write when creating complex html with Element in mootools) and is configurable. Try it out!

май 07, 2011

How to write yourself a music player in 20 minutes

I am working as JavaScript developer.
I spend most of my work day in the browser (now days 'the browser' being Chrome).
I read my emails.
I read my news.
I talk to my colleagues, friends and family.
I do research.
I code.
I entertain myself.
All in the browser.

However I like to listen to music sometimes. I have a big collection of my favorite music collected over the past 12 years, however to be able to filter it and listen to it I need a separate program, a 'music player'. I asked myself: 'Why should I use an application I cannot modify. Isn't it in the spirit of OpenSource to be able to use something you can read, change and use however you like?'.

I do use open source music player, however it is written in C++ and GTK, language and library I do not understand very well. It does not decode the stream, and I am not really interested in that part. Chrome can decode audio in at least mp3 and ogg formats, so why not use the browser to play back my files. But then again I should be able to display my collection and filter it. How hard could that be to do in the browser.

Not hard at all. Enter OmniGrid. It is able to display your data in a table, sort it and filter it, all it require is that your data is loaded as JSON valid object. My regular music player is Rhythmbox, so I can download the xml file, convert the data with DOM however I like it and load it in the grid view, then filter it. It is very simple and straight forward. I will also need an audio tag and pause button.

So here it is:



OmniGrid requires mootools and mootools-more (of course not the whole of them, you can custom build for it), but it makes the application code very very small! Mine is 117 rows only and most o it is to create the tags and bind events to it because I do not like writing html files, I like creating them with JS on domready.

I encourage you try and write whatever you use on your desktop that is not available yet as web application and share it, so we can finally move on from the desktop paradigm and be able to live online and on whatever laptop/computer we are currently having.

I for example feel pretty awful when my laptop breaks or need to be taken for cleaning, this whole thing can be painless if my digital life was stored on a server and accessible from a web interface, then all i would need would be a browser. Kind of the idea behind 'Chrome OS'. I like it. I agree that maybe not all our data should be on Google's cloud, but I have my own server. I could just store my things on my server. On an encrypted partition. Yeah... and then I could just use any laptop. Any that is not with key loggers on it though...

UPDATE: The code for this small App is available here. It cannot be used as it is, because it assumes you have your rhythmbox DB file in the same directory and assumes the directly structure and your system user name, however it is pretty easy to modify. Enjoy.

май 01, 2011

This is the time we live in


First
I'd like to mention the inspirations for this post, number one being of course late Carl Sagan, the first face of the science I have met when I was very young, barely understanding English (my first language being Bulgarian). I was then hooked by this, in my opinion, most profound and wide introduction to the scientific world, the most interesting and important for a kid enlisting of all the achievements made for such a short period of time, considering the thousands of years we have been around. It was then when I knew I want to be part of this scientific advancement, I wanted to see us, human race, wandering trough the stars, exploring, looking for anything that awaits up there in the vastness of space and time. It was Sagan, who lighted up my mind and calibrated my point of view for this world, wonderful an magical even without the superstition and spirituality and 'real' magic that floats aroun
d us, obscuring so many real and great ways we can admire and contribute to the miracles of science!

I like to thank also Jill Tarter, the passionate researcher, who has devoted her career to SETI. I was amazed and inspired by her TED talk few years back and I truly believe it takes courage and passion in science to constrain your life to such a wonderful idea as to find the proof that we are not alone in this enormous universe. I hope the institute will get back on its feet, I hope there are still people who are willing to help considering the immense importance of the work those dedicated scientist are doing, regardless of the fact that more and more pressure is building up against spending money on such research, I still believe that even more money is wasted on stupid things, much more money, which used otherwise would have improved our lives beyond anything imaginable. Yet those people having those resource are not willing to help, so I urge anyone who can help to do it now, because as Carl said it - we need to take a look in the future, we need to embrace our unimportance and have the tiniest vision of tomorrow.

I also would like to thank the people behind the wonderful adaptation of Sagan's Contact for the wide screen, which inspired me to give a second thought on mathematics and physics, two disciplines I was not very interested in when I was in high school and in the university, I was barely understanding it, as much as to pass my exams. Now I understand the beauty and importance of those and without blaming it to the teachers and assistants trying to inspire us I now recognize it was a big mistake to just presenting the scientific knowledge without first trying to present its role and importance and beauty and application to the young minds. I am certainly hoping this will change soon and will produce a new generation of passionate scientists. Meanwhile I hope we will see more positive scientists as main characters in movies.

Next are all people that are tributing Carl Sagan all over the Internet, especially the wonderful clips from the young fellow over Milky Way Musings made me such a great impression. If you have the time and you like Sagan, please go and watch the clips.

I also want to thank the people behind the chrome and firefox projects for making the web experience such a joy as to allow me and countless other people to use the World wide web as easily and enjoyable as possible, which on the other hand inspired us to contribute in any way possible. It would have been a terrible experience without your work and I would have not discovered so much without it, so thank you guys and gals for your hard work!

април 30, 2011

SETI shutting down



The news is all over the Internet - SETI is shutting down ATA (Allen Telescope Array) due to lack of funding.
I know at least one great (dead) person that would be really upset because of this - Carl Sagan.
I happen to liked the idea and while some other (great) men (you know I am talking about you, Hawking!) are warning us to stop looking for trouble, I still think it is right inside your genes to be adventurous and look for the answers. Spirituality and religion did not bring it up, so maybe the ETI would? But first we need to find at least a single tiny minuscule proof of its existence. And maybe then we all can realize our real place in the vastness of the cosmos, our insignificance and awe in admiration to the miracles of the universe. And yet we have not succeeded in it. Instead mostly we are worried about the rising of the food prices and gas prices and all sort of other prices.
They need 5 million US dollars. This is not even half the price of the house of some asshole actor in some shitty production designed to distract us for less than two hours. And yet we prefer the distraction. Sometimes I think even such finding as proofs of extra-terrestrial intelligence will not be sufficient to unite us.
Still the solace remains that thanks to the technological and scientific advancements we get to live twice as long as our great great great parents. Maybe we will use this time wisely and start thinking more about other things, other than the rising prices....

април 29, 2011

שקוף

Such a sweet song and such a sweet voice. Hen Aharoni:

Точно ти!

Значи, ходя си аз из Плевен (за това - някой друг път) и дочувам от някъде (явно хитът) песничка на София Маринова и Устата (тях вече не мога да ги сбъркам, известни са един вид). Честно си казвам - хареса ми се.

Днес реших да си я пусна, пиша 'Софи Маринова Устата' в кученцето (a.k.a. Google) и първият резултат е 'Точно ти' във vbox7 - "конкурентния" видео сайт.

Няма да казвам, че качеството на клипчето е отвратително, то се подразбира, ние (българите) като крадем идеи, винаги ги осираме. Направи ми впечатление обаче че песента е със "субтитри" (явно за глухите почитатели на Софи Маринова) и какво бе смайването ми когато текста на субтитрите се оказа нещо съвсем различно от това, което всъщност пее Софи. Следва пример:

точно ти, с горчиво вкусни с грешни дни ненаситни устни
Пример 2:
Влюбена в пустиня и летни дни, ето ме
И си викам : "абе да не би глухите фенове на Софи да са писали субтитрите?". После се досещам, че макар да няма смисъл на български така написаното изречение, може пък ромската общност в България да си го разбира така. Но всъщност предполагам, че авторите на субтитрите просто не мислят, а карат по слух, като преводачите едно време. А текста пък е както следва:
точно ти, със горчиво-вкусни, с грешни и ненаситни устни
Влюбена в усмихнати летни дни, ето ме
Поне на нормален български де. И хич да не е, Софи може да не е с перфектен български, но така или иначе едва ли си пише текстовете сама. Но пък е талантлива, на мен ми харесва как пее а и песничката е забавна. Това, което не е забавно е, как на национално ниво се изпростява. Но да не ви дреме, нали ще сме в 5* хотел и ще си мислим за любов...

А да, и клипчето е яко. Няма да го сложа от Vbox защото са олигофрени, вместо това, ето го в YouTube. Даже ако сте се записали да гледате webm/mp4 видео, вече така е ви излезе директно на страницата, без флаш. Яко а:)


април 21, 2011

Ode to the Brain

The amazing Ode to the brain from Symphony of Science!


I really enhoyed it, musically it sounds better than most of the previous videos published by this project.