# I have released an updated version of my HTML5 Notepad app which features a new user interface, adds support for Markdown syntax (along with a simple editor and preview) and fixes a synchronization bug which in some cases converted line breaks into text.

Please note that there could still be some bugs and the code hasn’t been polished for a production use, but it serves as a very useful example of some of the most interesting HTML5 features such as localStorage and offline cache.
You can fork it on GitHub or download from the project page.
# 
Tumblr is up almost 70% from last December, steadily gaining share. WordPress seems to have followed a similar path on par with an audience size close to Tumblr. Lastly, Blogger seems to be on a steady albeit conservative growth path.
via Round 2 of Tumblr vs. WordPress vs. Blogger: FIGHT!
# I am participating in the Dakar rally 2012 from January 1 to 15th in Argentina, Chile and Peru. We have built the world’s first electric off-road rally car OSCar eO and our aim is to win the “Alternative Energy” category.
Plugin Updates
I know that the latest WordPress update (version 3.3) broke both Widget Context and Tabbed Widgets plugins. I’ll be able to fix them only by the end of January 2012. Please check the WordPress forum for temporary fixes.
Wish you all happy holidays and don’t forget to follow us in the Dakar rally (live on dakar.com and on your TV) and see how we’re changing the perception of what electric cars can do!
# Update: There is an undocumented ID of your channel playlist which is available in the current beta version of YouTube UI as described by Federico in the comments.
For some reason YouTube doesn’t offer a simple way to embed your YouTube channel. The only official method is to manually create a playlist with all your videos and embed that. However, it requires additional work after every upload which is not cool, especially if you’re on a mobile. Here is a simple script that creates an HTML5 (iframe) player using the YouTube API:
(function() {
function createPlayer(jqe, video, options) {
var ifr = $('iframe', jqe);
if (ifr.length === 0) {
ifr = $('<iframe scrolling="no" frameborder="no">');
ifr.addClass('player');
if (options.playeropts)
ifr.attr(options.playeropts);
}
var src = 'http://www.youtube.com/embed/' + video;
if (options.playopts) {
src += '?';
for (var k in options.playopts) {
src+= k + '=' + options.playopts[k] + '&';
}
}
ifr.attr('src', src);
jqe.append(ifr);
}
var defoptions = {
autoplay: false,
user: null,
player: createPlayer,
playeropts: {},
loaded: function() {},
playopts: {
fs: 1,
showinfo: 1,
modestbranding: 1
}
};
$.fn.extend({
youTubeChannel: function(options) {
var md = $(this);
var allopts = $.extend(true, {}, defoptions, options);
$.getJSON('http://gdata.youtube.com/feeds/api/users/' + allopts.user + '/uploads?alt=jsonc&v=2', null, function(data) {
var videos = [];
var playlist = '';
$.each(data.data.items, function(i, item) {
videos.push(item.id);
if (i > 0)
playlist += item.id + ',';
});
allopts.playopts.playlist = playlist;
allopts.player(md, videos[0], allopts);
});
}
});
})();
$(function() {
$('#player').youTubeChannel({user:'kasparsdambis', playeropts: { width: 400, height: 280 }});
});
# 
On putukrejums.lv blog we use the ‘sticky’ posts to add introductory information to all category pages (see here, for example). This approach is better than using the category description field because it allows for all the usual formatting options. Read more »
# 
add_filter('wp_list_categories', 'remove_category_link_prefix');
function remove_category_link_prefix($output) {
return str_replace('View all posts filed under ', '', $output);
}
# Knowing who is talking about your blog or website on Twitter is easy — simply subscribe to the following RSS feed:
http://search.twitter.com/search.rss?q=konstruktors.com
Replace konstruktors.com with your own domain.
# Most of us learn about the importance of having and keeping regular backups only after loosing some of our important files, photos and documents. Luckily, I haven’t lost a single file and mostly because I have been lucky. Even the best hard drives crash and laptops get smashed or stolen.
My first real backup solution more than six years ago was a 120 GB external hard disk that needed a bulky power adopter to be plugged into the wall and turned on before it could be used. There was no software that would be able to sync only the modified files so I had to create folders such as jun_2006 and aug_2007 and copy everything again and again every time. USB transfer speeds were slow and it took only month to have reached the ultimate backup mess on that external disk.

Few years later I got a new external Maxtor disk that would use two USB wires to power the disk instead of the external adapter. It should have made it easier but it didn’t because the syncing software was still too slow and hard to configure to do any good. So I lived my life on the digital edge and presumably didn’t think about loosing all my client website source files, server access information, invoices and many other important files. Read more »
# 
Photo credit added automatically to every photo with a caption (via putukrejums.lv)
Crediting and linking the source of any republished photo or illustration on the web is one of the most important best practices of web publishing. Unfortunately, there isn’t a standard way of doing it in WordPress and authors are left with their own decision on how and where to credit the original author or website. Read more »
# This is a known Webkit bug — any text with @font-face applied will be rendered without anti-aliasing if there is a text element without anti-aliasing applied preceding it. Usually those are fonts smaller than 5px or monospaced fonts at small sizes which are rendered without anti-aliasing.

I noticed this bug on this page — the heading “Kāzu ABC” was rendered aliased despite having the main menu in between that heading and the logo which had font-size:1px; applied. The only way to fix this is by avoiding aliased text directly before elements that use @font-face.
Here is a live demo of the bug.