Follow me: @D_mitar

Most read posts recently



Dec 13th 2010 × Intermoo series, Part 2: Piotr “Zalun” Zalewa, jsFiddle creator

Here’s “Intermoos“, part two: we sit and talk to Piotr Zalewa, aka Zalun of jsFiddle fame. If you’ve not heard of jsFiddle or used it, you should stop reading this and visit it first, play with it and come back because you’d be missing out.

Whereas Zalun is not an official MooTools team member, his contribution to the MooTools community (and to the javascript community at large) through jsFiddle has been nothing short of outstanding. Oh, and yes, he prefers and uses MooTools. So here we go…

Name: Piotr Zalewa
Nickname: zalun
Country: Poland
Company: Mozilla
Blog: http://piotr.zalewa.info/
Website(s): http://jsfiddle.net/, http://builder.addons.mozilla.org/
Twitter: @zalun
GitHub: http://github.com/zalun
Famous for: mooshell and jsfiddle
A little bit about yourself, your background…
I am a father, an aquarist and a web developer. I enjoy designing and maintaining my never too big “nature style” aquarium. I like watching my children grow and learn. I also like free stuff a lot. That’s why I created jsFiddle and didn’t hesitate too long to join Mozilla Team.

I started programming when I was 19. It was Turbo Pascal on XT’s and AT’s. At university I realised I like Gopher, IRC and FTP. Then in our university library someone placed 3 public computers connected to the new thing called World Wide Web. I was usually not consuming the content, but looking at how it was build. Soon I had my own website…

How and when did you get involved with MooTools or javascript?
I was hired by Moving Picture Company to create an intranet tool for movie management. They gave 10 working days to find out the best technology for the front-end. On the back-end Django was set from beginning. I was investigating all possible JavaScript frameworks and MooTools was something which I found the best, although I didn’t know anything about it at day 0.
Why MooTools, what makes it special?
Classes, clean code, ability to shape things in a way developer wants. I found a lot similarities to Python which is good as I write back-end in this language. I think it’s the best tool for someone who writes code, not only uses plugins.
What are you working on at the moment (on the framework itself, related or otherwise)?
I’d like to make Accordion better. It is considered as a bad UX, but I can’t imagine jsFiddle without it. I also started to rewrite jsFiddle – beta is coming (we aim for January). There is also another launch coming at Mozilla. We would like to have the Addon Builder 1.0 ready for the Firefox 4.0.
Are there any other Open Source technologies or projects you are involved with?
FlightDeck is open-source (as whole Mozilla), otherwise nothing I could call “involved”.
You have arguably created the most useful / groundbreaking tool for online collaborative javascript / web development testing to come out recently in jsFiddle. What gave you the idea and prompted you to do it?
I needed it. I would guess it’s the most honest answer for majority of start-ups. I was on #mootools IRC channel and we were helping new users with JavaScript/MooTools issues. We were even playing who will answer first, but the rule was – code has to fit in one line. Soon there was a question which was longer then that – although we do have pastebin I wanted to check if my idea was right before posting. I thought creating file with right DocType, including files and then loading into the browser was too much trouble. The question remained unanswered, but the next day I had a working prototype.

Just as a side note – jsFiddle wouldn’t be as awesome if not help from Oskar Krawczyk who is the “front-end guy” and other members mostly around MooToos community. Thank you all very much.

What technologies power jsFiddle? How is it holding up with the huge attention and traffic it is getting, particularly due to MooTools and jQuery adopting it as the de-facto platform for testing and case building / examples?
Back-end is all Django, MySQL and memcache. It still uses Apache, but I think beta will run from within Nginx or something similar. On the front-end we do use MooTools with a bunch of plugins such as ClientCide. CodeMirror is highlighting the code.
jsFiddle started off from mooShell, a tool initially MooTools specific and Open Sourced. Does that mean that mooShell development has now ended and do you have any plans for Open Sourcing jsFiddle?
Yes – mooShell will be closed when jsFiddle beta will start. It is currently in read only mode. I am still uncertain what type of license should I use for the new jsFiddle. It is a rewrite… I’d like to make it open source, but the business model I have in mind might be against it.
What future plans can you reveal about changes and growth for jsFiddle? Anything exciting you would like to share? That ‘business model’, perhaps?
I think the most awaited is user profile with ability to personalize jsFiddle – change editor application (there is a choice now!), the way it displays code, manage the framework drop down, etc. We will also add PRO accounts with many features around private fiddles.
What requirements do you have for accepting a new framework and how should development teams approach you about getting added?
This is a hard question – it’s mostly the community behind the project. We tried to add every framework which is a “must have”. There are few exceptions (like Processing js or Raphael which aren’t even frameworks), which we simply wanted to use. Beta version will be more specified and with the ability to tweak the “hot list” we will be able to implement much more frameworks. Some will be simply hidden by default. I am also adding the “Framework manager” badge. Users with such privileges will be able to maintain the framework – upload/link new versions, add best plugins, etc. More power for the users.
If time and resources were not an issue, what new features or changes would you like to change or refactor and why?
The way the dependencies and frameworks are bond together is wrong – this is invisible for the end-user, but adding new version of the framework is currently a pain.

On the front-end side – it would be fixing the layout for small touch screen devices.

If you had not been involved in jsFiddle, what do you think you’d be doing instead? I know you are currently working for Mozilla on JetPack, would you like to comment on that and give us an overview?
I had a few other ideas in mind, but these needed much more work on the beginning, which is a pain for free projects – not enough hype.

“Jetpack” is a working name for the new Firefox add-ons type. Firefox 4 will have it build in. It allows to install add-ons without restarting and is really easy to write. CommonJS style. SDK currently uses Python (I think it will use NodeJS in the future) and involves some work to be done to install on the developers computer. Mozilla thought it would be good to make this a lot easier and the idea for Addon Builder aka FlightDeck arised. It could be name jsFiddle for Firefox Addons. Users are able to edit and test addons without leaving the browser.

If you could give one tip to new javascript developers, what would it be?
JavaScript developer to me is a person who writes the code – classes, plugins. The knowledge of vanilla JavaScript is essential. So the tip would be – learn vanilla JavaScript. If I would be able to give another it would be: read framework’s code. It is interesting and enlightening.
Your top 5 resources for web developers (can be websites like jsfiddle, IDEs, tutorials, CSS frameworks like boilerplate, etc)
Github, documentation sites from framework developers, VIM, IRC, Linux, Twitter. I don’t need much :)
If you want to share some examples of your work…
It would be http://webdev.zalewa.info/. It’s a really old site, half of the examples there are from the time when I thought I could be a web designer, but clearly I’m not made for it. I guess you’ll find quite a few 404 on it as well.

Thank you for your time!


Jul 19th 2010 × summer outdoor sandals blues

This is nothing to do with javascript but I am on a holiday, after all…

Bit gutted to find that my otherwise excellent Newport Sandals by Keen have started to pack it in after 2 seasons of tear and wear – it seems they were not as water resistant as I was initially led to believe. Nasty side effect – the leather now stinks so bad (due to getting wet a few times) I cannot wear them inside my car. Such a shame, I really really really liked them…

keen newport sandals

What to buy now or do I just order another pair? Hrm…


Mar 31st 2010 × mooSelecta – an accessible mootools select/dropdown element replacement

Don’t you just love how different browsers style (or rather, don’t style) select and option elements? One of the things I dread most as a developer is when the design team come in and produce forms with controls that are totally bespoke and unobtainable due to the browser limitations.

This prompted me to write a mootools class that replaces the existing select items on the page with custom style-able controls through CSS as a progressive enhancement. Here is an example of what the resulting dropdowns can look like:

mooSelecta dropdowns screenshot

The idea of skinnable dropdowns is nothing new but not many solutions are done in a way that mimics the select element’s behaviour and events correctly. Here is what mooSelecta does feature:

  • support for any type of skins, all through CSS
  • support for native element events (will work with scripting)
  • support for keyboard look-ups when dropdown is open
  • support for input labels
  • support for tabindex

Have a look on the mooSelecta example page or on the mootools forge page for the plug-in itself (download etc).

One thing you need to be aware of is that if you want to dynamically change the selected value of a skinned select, you need to fire it’s onChange event for mooSelecta to update. For example, if you have a dropdown with id=”country” and class=”selecta”:

new mooSelecta({
    selector: "selecta"
});

// change default selected value via js later:
$("country").set("value", "United Kingdom").fireEvent("change");
// the event will make mooSelecta update

Aside from that, it’s fine, tested and working in IE6, IE7, IE8, Firefox 2, Firefox 3.6, Safari 4, Chrominum 5. Known issues with Opera keyboard events not being raised as expected. Enjoy!


Feb 17th 2010 × Site optimisations, CDN and the hidden bandwith costs of cookies

Around Christmas we tend to get a LOT of web traffic at work, so much so that we exceed our agreed bandwith a allocation with RackSpace and end up having to pay huge excess fees. Not wanting to be caught out for a second year in a row, I had a look at various ways of conserving bandwith and alleviating from the CPU load on the webserver. This is when I noticed something odd–there was a lot of traffic we were being charged for that was not showing up through the Apache logs. After a lot of head scratching and many coffees later, it hit me: cookies. Consider this: an average user on our site has something between 300bytes and 1k in cookie data (a lot, I know). The cookies are being sent alongside with every resource that the client browser requests, be it a HTML file, an image, a CSS stylesheet or a .js file. I did some rough maths and it transpired we waste between 10 and 20GB of traffic each month in cookies alone!

Additionally, the CPU usage was abnormally high and no amount of MySQL tweaking was cutting the load times enough to make a sizeable difference. The sheer amount of files accessed and served was taking its toll and limited CSS spriting was just not going to fix that. The clincher came from Google who announced that site speed is to be playing a role in the search engine results pages from 2010–it was time to introduce a content delivery network (CDN) and fix things.

I had a look around at what CDN providers were around but since we are a relatively small and lean startup, we could not justify the expense of signing up for a enterprise scale solution just yet and yet we needed real-time updates. We elected to just get a cheap collocation server instead with no bandwith quota and setup a sub-domain cdn.ourdomain.com which was to remain cookieless. I then reconfigured the site templates to always reference images, css and js through the CDN URL instead and setup an rsync partnership with the new box. And boy, did that make a difference!

First thing you notice now is how much more responsive the site is, how quick it loads and how much faster the browser renders the content due to the increased threading capability. The CPU load times dropped from an average of 1.40 to 0.30. Out bandwith use subsided from well in excess of 200GB a month to a little over 100GB, well within our quota. And that’s through a ‘pseudo’ CDN, or should I call it a CDB (content delivery box). I imagine the user experience will improve even further when we can roll out a proper solution in the near future, one that will use CDN zoning to provide the fastest download speed to clients through geolocation.

In the meanwhile, I was approached by the folks at MaxCDN who kindly offered to sponsor my blog and provide it with a CDN. I thought, what better chance to test the experience and find out about what’s on offer than to try it for free…

I was uncertain as to how easy it would be to implement within WordPress but it turned out to be a walk in the park through the plug-in W3 Total Cache that they provide and support. The whole setup involved all of 5 minutes of work and no changes to my template files (so long as they all reference the native WP functions for URLs). The plugin takes care of sync and you really have nothing to do than to worry about caching. I am still getting to grips with the options here and weighing in what further bits can be exported to maxcdn in addition to my static content. Other than that, it’s been a breeze and has probably sped up my blog a fair bit too. It’s also surprisingly affordable, especially when you consider what Akamai, EdgeCast or Limelight tend to charge. Even cheaper than CacheFly for the basic package without rsync functionality. MaxCDN’s site, control panel and support are also nothing but excellent.

All-in-all, I am a happy chappy and would recommend CDN use as it’s become a lot more accessible (to my surprise).


Feb 16th 2010 × Download great new free fonts

A nice blog post that samples 35 great fonts free to download, some are actually rather good. Head to Instant Shift to check them out.


Feb 14th 2010 × wtfjs – some of the ‘bad parts’ that can ruin your code

Just found this enjoyable collection of javascript statements that don’t make any sense, such as:

"string" instanceof String; // false.
[] == false; // true
"" == false; // true
null == false; // false, that's more like it
typeof null // object
null === Object // false

for these and more WTF moments in javascript, head over to wtfjs.com.

no

Jan 10th 2010 × The mootools plugins repository ‘forge’ is now live, at last

Long time without updates but I have been away since mid December. Long story short, went to Bulgaria with the best of intentions to ski a little and ended up “enjoying” the warmest winter this country has had in over 20 years instead. Meanwhile, folks back home in London reported to be freezing their privates in some serious sub-zero temperatures. Figures…

Anyway, things of consequence since my departure start with the advent of the mootools forge – finally a meaningful way to distribute plugins for the framework. I should see if any of my code snippets are worth releasing (can’t all be David Walsh, can it…)

Another notable addition to my bookmarks has been jsfiddle – it’s basically like Zalun’s mooshell but on steroids – adding support for all major frameworks you can fiddle with out there, most excellent and handy when refactoring between mootools and jquery and vice versa.

Finally, there has been a great compatibility layer for upgrading mootools 1.11 to 1.2.x – check out the official blog post here. I am now officially out of _technical_ excuses to do with upgradingand refactoring all the javascript at webtogs, so it’s going to be a manner of time after I get back.

The biggest joke of the year thus far has been the realisation that this little page (fragged.org) has now become the 2-nd listing on the google SERPs for ‘mootools blog’, trailing the official team blog only. Take that, David Walsh! Oh yeah, and a shiny new PR4 out of the blue, not a bad end to the year. With mootools 1.3 in the pipelines as well as mootools 2.0 – 2010 promises to be an quite exciting as well, looking forward to it.

P.S. Here’s another new ‘#mootools heavy blog’ just launched by a person I have come to respect a great deal over on the mootools mailing list check out Ryan Florence’s blog


Nov 24th 2009 × Lemmings javascript sprite animation with pseudo parallax (through mootools)

This was supposed to be my Friday Fun post but it got to where it’s at on the following Monday instead. Having never tackled sprite animation before, this has been a learning experience anyway (on the principles of animation also).

I think the result is fairly adequate – a moving lemming in a world that changes atmospheric effects dependent on the time of day, complete with parallax-like effect relative as counter to the lemming’s movement.

Oh, yes. The lemming can also be quite moody–hates being bothered. Which is fine, you can blow him up too. Enjoy and click below:
lemmings parallax animation screenshot

P.S. This will feature as the header of fragged.org’s new wordpress theme which is almost completed now. So, a little taster of things to come…
P.P.S. Thanks to crisp for the original DHTML lemmings and to holy.pt for his vigorous testing and advice.


Nov 18th 2009 × Snow flakes for your site? Try mooSnow – a javascript class that just snows

Just pulled out the old textSnow class foer 1.11 and rewrote it for 1.2.4. Anyway, head over to the demo page, it has all the info you need.


Nov 4th 2009 × CubeCart 4 security vulnerability: is your store at risk?

Whilst reading on XSS attacks today, I found this recently reported exploit in CubeCart 4 that can gain an attacker full administrative access to the store.

Not only that, it can help them dump your entire store DB – products, cats, users, orders, the works. Anyway, you get the idea. “CubeCart responded and informed their customers about this vulnerability” – as technical advisor for a site that runs on CC4, I can testify to the fact that the site owners were not informed of any such. Nice.