﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Дневна доза нонсенс... &#187; html5</title>
	<atom:link href="http://dailyffs.com/tag/html5-2/feed/" rel="self" type="application/rss+xml" />
	<link>http://dailyffs.com</link>
	<description>Софтуерно-инженерна му работа</description>
	<lastBuildDate>Tue, 03 Jan 2012 01:34:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Game of Life (javascript + html5&#8242;s canvas)</title>
		<link>http://dailyffs.com/2011/game-of-life-javascript-html5/</link>
		<comments>http://dailyffs.com/2011/game-of-life-javascript-html5/#comments</comments>
		<pubDate>Sun, 24 Jul 2011 20:55:57 +0000</pubDate>
		<dc:creator>Lucho</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[game of life]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://dailyffs.com/?p=907</guid>
		<description><![CDATA[Тези дни отново ме загриза съвестта, че не работя по някакъв сайд-проект - мой собствен или open source и за това днес реших да почета и понапиша Game of Life.<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2011/game-of-life-javascript-html5/' addthis:title='Game of Life (javascript + html5&#8242;s canvas) '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p>Тези дни отново ме загриза съвестта, че не работя по някакъв сайд-проект &#8211; мой собствен или open source и за това днес реших да почета и понапиша <a href="http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">Game of Life</a>.</p>
<p>Оказа се доста прост алгоритъм с доста интересна история, която и сами може да си прочетете <img src='http://dailyffs.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Демо може да видите тук: <a href="http://dailyffs.com/life/">http://dailyffs.com/life/</a></p>
<p>Сорсът е тук: <a href="https://gist.github.com/1102964">https://gist.github.com/1102964</a></p>
<p>Коментарът към сорса от страна на @skanev е тук: <a href="https://twitter.com/skanev/status/95213748092026880">https://twitter.com/skanev/status/95213748092026880</a></p>
<p>Това, което искам да кажа в тази статия е, че колкото и да са бързи съвремените Javascript engine-и и колкото и разни светила и икони на браузър вендорите да се хвалят, че производителността скача многократно от версия до версия, това не значи че не може да забързате всичко още <del>малко</del> много. Цената на &#8222;забързването&#8220; е &#8222;угрозняване&#8220; и оптимизиране на кода. В моя конкретен случай &#8211; на една функция, която се вика 60000 пъти на преизчисление.</p>
<p>Въпросната фунцкия:</p>
<pre class="brush: jscript; title: ; notranslate">

function getLiveNeighbours(id, data) {
  var x = id % canvas.width;
  var y = parseInt(id / canvas.width);

  var cnt = 0;
  for (var i = -1; i &lt; 2; i++) {
    for (var j = -1; j &lt; 2; j++) {
      if ((i != 0 || j != 0) &amp;&amp;
        !(x+i &lt; 0 || x+i &gt;= canvas.width || y+j &lt; 0 || y+j &gt;= canvas.height) &amp;&amp;
        data.data[4*((y+j)*canvas.width+(x+i))] != THE_BLACK) {
        cnt++;
      }
    }
  }
  return cnt;
}
</pre>
<p>Простата оптимизация на кода включва:</p>
<ol>
<li>Премахване на извикването на функцията (тялото на функцията се ползва директно) &#8211; спестява 60000 извиквания и времето за изпълнение на една итерация пада от 500ms на 270ms</li>
<li>Заменяне на двата вложени цикъла проверяващи за броя на съседни клетки &#8211; от 270ms на 150ms</li>
<li>Опростяване на пресмятанията (премахване на умножения) &#8211; от 150ms на 60ms</li>
<li>Създаване на локални референции към често използваните данни (вместо постоянни извиквания от типа &#8222;obj.data&#8220; при изчисленията се създава и използва локална променлива) &#8211; от 60ms на 50ms</li>
</ol>
<pre class="brush: jscript; title: ; notranslate">
// (4)
var width = canvas.width*4;
var d = data.data;
var nd = newdata.data;
var cw = canvas.width;
var ch = canvas.height;
var base = 0;

for (var i = 0; i &lt; d.length/4; i++) {
  var x = i % cw;
  var y = parseInt(i / cw);

  var cnt = 0;
  // (1), (2), (3)
  if (x &gt; 0 &amp;&amp; d[base-4] != THE_BLACK) cnt++;
  if (x &lt; cw-1 &amp;&amp; d[base+4] != THE_BLACK) cnt++;
  if (x &gt; 0 &amp;&amp; y &gt; 0 &amp;&amp; d[base-4-width] != THE_BLACK) cnt++;
  if (y &gt; 0 &amp;&amp; d[base-width] != THE_BLACK) cnt++;
  if (x &lt; cw-1 &amp;&amp; y &gt; 0 &amp;&amp; d[base+4-width] != THE_BLACK) cnt++;
  if (x &gt; 0 &amp;&amp; y &lt; ch-1 &amp;&amp; d[base-4+width] != THE_BLACK) cnt++;
  if (y &lt; ch-1 &amp;&amp; d[base+width] != THE_BLACK) cnt++;
  if (x &lt; cw-1 &amp;&amp; y &lt; ch-1 &amp;&amp; d[base+4+width] != THE_BLACK) cnt++;
  ...
</pre>
<p>В крайна сметка производителността скочи 10 пъти, макар логиката на кода да изглежда по-зле от преди. Не, че преди изглеждаше много красива, но все пак <img src='http://dailyffs.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Разбира се има и още един доста по-умен начин за техническа оптимизация &#8211; Web Workers. Те са панацеята на всички проблеми, началото и края, давид и голиат, содом и гомор, ин и ян&#8230; за тях може да почетете тази статия -<a href="../2011/mandelbrot-web-workers/" rel="bookmark"> Mandelbrot + Web Workers</a></p>
<p><em>Забележка: </em></p>
<ul>
<li><em>става дума за проста техническа оптимизация на кода, а не за подобрения на алгоритъма!</em></li>
<li><em>вероятно оптимизациите в javascript engine-ите не се фокусират върху случаи на извикване на функция 60 хиляди пъти&#8230; а би трябвало.</em></li>
</ul>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2011/game-of-life-javascript-html5/' addthis:title='Game of Life (javascript + html5&#8242;s canvas) '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://dailyffs.com/2011/game-of-life-javascript-html5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mandelbrot + Web Workers</title>
		<link>http://dailyffs.com/2011/mandelbrot-web-workers/</link>
		<comments>http://dailyffs.com/2011/mandelbrot-web-workers/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 19:28:20 +0000</pubDate>
		<dc:creator>Lucho</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[mandelbrot]]></category>
		<category><![CDATA[webworkers]]></category>

		<guid isPermaLink="false">http://dailyffs.com/?p=860</guid>
		<description><![CDATA[Обичам фрактална графика и поради липса на по-смислено занимание тези дни, реших да напиша визуализатор за Mandelbrot. Имплементацията ползва готините Web Workers, за да се справи с тоновете сметки и Canvas за да изобрази резултатът на екрана.

48 web worker-a се борят да запълнят 800х600 пиксела пространство и да си призная се справят по-добре от очакваното... е, все още си е бавно, но е 48 пъти по-добре отколкото без възможност за паралелно изпълнение на алгоритъма :D.<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2011/mandelbrot-web-workers/' addthis:title='Mandelbrot + Web Workers '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://dailyffs.com/mandelbrot/"><img class="aligncenter" title="Mandelbrot + Web Workers" src="http://screenshoot.me/Ao7vyS" alt="" width="531" height="422" /></a></p>
<p>Обичам фрактална графика и поради липса на по-смислено занимание тези дни, реших да напиша визуализатор за <a href="http://en.wikipedia.org/wiki/Mandelbrot_set">Mandelbrot</a>. Имплементацията ползва готините <a href="http://www.whatwg.org/specs/web-workers/current-work/">Web Workers</a>, за да се справи с тоновете сметки и <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html">Canvas</a> за да изобрази резултатът на екрана.</p>
<p>48 web worker-a се борят да запълнят 800х600 пиксела пространство и да си призная се справят по-добре от очакваното&#8230; е, все още си е бавно, но е 48 пъти по-добре отколкото без възможност за паралелно изпълнение на алгоритъма <img src='http://dailyffs.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
<p><strong>Резултатът може да видите тук &#8211; <a href="http://dailyffs.com/mandelbrot/">http://dailyffs.com/mandelbrot/</a></strong></p>
<p><strong>А кодът е достъпен тук &#8211; <a href="https://gist.github.com/1023445">https://gist.github.com/1023445</a></strong></p>
<p><em>Забележка: работи само с Firefox, защото другите браузъри или нямат web workers или не поддържат предаването на по-сложни обекти от/към worker-ите. </em></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2011/mandelbrot-web-workers/' addthis:title='Mandelbrot + Web Workers '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://dailyffs.com/2011/mandelbrot-web-workers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ontwik</title>
		<link>http://dailyffs.com/2011/ontwik/</link>
		<comments>http://dailyffs.com/2011/ontwik/#comments</comments>
		<pubDate>Tue, 11 Jan 2011 09:38:30 +0000</pubDate>
		<dc:creator>Lucho</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[Конференция]]></category>

		<guid isPermaLink="false">http://dailyffs.com/?p=720</guid>
		<description><![CDATA[Ако сте мързелив програмист и не обичате да четете книги или пък харесвате dev конференции и искате да слушате лекции на любимите си гурута, то на драго сърце ще ви препоръчам Ontwik.<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2011/ontwik/' addthis:title='Ontwik '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p>Ако сте мързелив програмист и не обичате да четете книги или пък харесвате dev конференции и искате да слушате лекции на любимите си гурута, то на драго сърце ще ви препоръчам <a href="http://ontwik.com/" target="_blank">Ontwik</a>.</p>
<p><a href="http://dailyffs.com/wp-content/uploads/2011/01/ontwik.png"><img class="aligncenter size-full wp-image-721" title="ontwik" src="http://dailyffs.com/wp-content/uploads/2011/01/ontwik.png" alt="" width="481" height="152" /></a></p>
<p><a href="http://ontwik.com/" target="_blank">Ontwik</a> е сайт, който събира в себе си записи от различни конференции на web тематика и дава възможност на всеки да ги гледа&#8230; безплатно. Темите, които следя са предимно Javascript, Ruby, Rails, Python, Django, Git, HTML5, но има още много други. Голямата част от лекциите са наистина качествени и интересни, като има записи на web гурута като David Hansson &#8211; създателят на Rails,  Tom Werner &#8211; един от създателите на Github, Линус Торвалдс, Brendan Eich &#8211; създателят на Javascript, и още много други.</p>
<p>Оставям ви с една много готина презентация на David Hansson:<br />
<iframe src="http://player.vimeo.com/video/17420638" width="601" height="338" frameborder="0"></iframe>
<p><a href="http://vimeo.com/17420638">&#8222;Why Ruby?&#8220; &#8211; RubyConf X Keynote</a> from <a href="http://vimeo.com/user2454935">David Heinemeier Hansson</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2011/ontwik/' addthis:title='Ontwik '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://dailyffs.com/2011/ontwik/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Firefox 4 идва без WebSockets</title>
		<link>http://dailyffs.com/2010/firefox-4-comes-without-websockets/</link>
		<comments>http://dailyffs.com/2010/firefox-4-comes-without-websockets/#comments</comments>
		<pubDate>Wed, 08 Dec 2010 11:49:50 +0000</pubDate>
		<dc:creator>Lucho</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[WebSockets]]></category>

		<guid isPermaLink="false">http://dailyffs.com/?p=695</guid>
		<description><![CDATA[За съжаление най-якият фичър на HTML5 - WebSockets ще бъде изключен по подразбиране от Firefox 4. Причините са евентуални пробиви на сигурността в проксита и всичко, което е между браузъра и крайния сървър.<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/firefox-4-comes-without-websockets/' addthis:title='Firefox 4 идва без WebSockets '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p>За съжаление най-якият фичър на HTML5 &#8211; WebSockets ще бъде изключен по подразбиране от Firefox 4. Причините са евентуални пробиви на сигурността в проксита и всичко, което е между браузъра и крайния сървър.</p>
<p>Тестове показват, че е напълно възможно да се създаде proxy cache poisoning (да се вкара вреден код в кеша на проксито), защото прокситат не разбират от Upgrade handshake-а, който WebSockets ползва. Това дефакто е проблем на прокситата, а не на протокола на WebSocket-ите, но за жалост не е възможно да се оправят всички прокси сървъри по света <img src='http://dailyffs.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> , за това се налага да се префасонира протокола на сокетите <img src='http://dailyffs.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> . Препоръката за сега е да се промени стандарта и да се полза CONNECT handshake-a вместо Upgrade handshake, тъй като прокситата го интерпретират правилно.</p>
<p>Най-вероятно няма да видим WebSocket-и във Firefox скоро, поне докато проблемът не бъде разрешен и стандартът не дефинира нов метод за handshake.</p>
<p>Повече подробности може да прочетете на <a href="http://www.0xdeadbeef.com/weblog/2010/12/disabling-websockets-for-firefox-4/" target="_blank">http://www.0xdeadbeef.com/weblog/2010/12/disabling-websockets-for-firefox-4/</a> и <a href="http://www.ietf.org/mail-archive/web/hybi/current/msg04744.html" target="_blank">http://www.ietf.org/mail-archive/web/hybi/current/msg04744.html</a></p>
<p><strong>Update:</strong> Opera спира поддръжката на WebSockets също &#8211; <a href="http://annevankesteren.nl/2010/12/websocket-protocol-vulnerability" target="_blank">http://annevankesteren.nl/2010/12/websocket-protocol-vulnerability</a></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/firefox-4-comes-without-websockets/' addthis:title='Firefox 4 идва без WebSockets '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://dailyffs.com/2010/firefox-4-comes-without-websockets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenFest 2010</title>
		<link>http://dailyffs.com/2010/openfest-2010/</link>
		<comments>http://dailyffs.com/2010/openfest-2010/#comments</comments>
		<pubDate>Thu, 04 Nov 2010 12:30:10 +0000</pubDate>
		<dc:creator>Lucho</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[OpenFest]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[Конференция]]></category>

		<guid isPermaLink="false">http://dailyffs.com/?p=648</guid>
		<description><![CDATA[На 20-и и 21-и Ноември в Интерпред (София) ще се проведе OpenFest 2010 и ако сте от хората, които обичат отворения код и семинарите, значи със сигурност ще сте там!<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/openfest-2010/' addthis:title='OpenFest 2010 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://openfest.org/"><img class="aligncenter" title="openfest" src="http://openfest.org/images/logo-header.png" alt="" width="375" height="90" /></a></p>
<p>На <strong>20-и и 21-и Ноември в Интерпред</strong> (София) ще се проведе <a href="http://openfest.org/" target="_blank">OpenFest 2010</a> и ако сте от хората, които обичат отворения код и семинарите, значи със сигурност ще сте там!</p>
<p><a href="http://openfest.org/" target="_blank">OpenFest</a> се провежда за 8-ми пореден път, като тази година в програмата е включена сесия с Lightning Talks</p>
<blockquote><p>Освен „стандартните“ презентации обаче, тази година се надяваме да обагатим програмата на OpenFest и с една сесия Lightning Talks – изказвания, които по правило продължават по не повече от 5 минути всяко и следват непосредствено едно след друго. Освен че са изключително интересни и забавни за присъстващите, тези кратки презентации предоставят незаменима възможност за нови участници да се представят за първи път, без да е необходимо да изнасят цяла лекция.</p></blockquote>
<p>Така че ако имате нещо интересно, което да споделите за 5 минути с феновете на отворения код &#8211; тогава е времето.</p>
<p><em>Аз лично обмислям няколко теми за HTML5 &#8211; &#8222;HTML5 и (сигурната смърт на) Flash&#8220;, &#8222;Историята на HTML5 в 5 минути&#8220; и &#8222;Бъдещият HTML5 в днешния уеб&#8220;</em></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/openfest-2010/' addthis:title='OpenFest 2010 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://dailyffs.com/2010/openfest-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mozilla Labs &#8211; Game On 2010</title>
		<link>http://dailyffs.com/2010/mozilla-labs-game-on-2010/</link>
		<comments>http://dailyffs.com/2010/mozilla-labs-game-on-2010/#comments</comments>
		<pubDate>Sun, 03 Oct 2010 13:29:10 +0000</pubDate>
		<dc:creator>Lucho</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[Mozilla Labs]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://dailyffs.com/?p=560</guid>
		<description><![CDATA[Тези дни хората от Mozilla Labs стартираха конкурс за разработка на изцяло уеб базирана игра. Състезанието се казва "Game On 2010" и дава възможност на всички гейм или уеб разработчици да покажат на какво са способни, но... само с HTML(5)/Javascript/CSS. <div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/mozilla-labs-game-on-2010/' addthis:title='Mozilla Labs &#8211; Game On 2010 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="https://gaming.mozillalabs.com/" target="_blank"><img class="aligncenter" title="Game On 2010" src="http://screenshoot.me/game_on" alt="" width="381" height="355" /></a></p>
<p>Тези дни хората от Mozilla Labs стартираха конкурс за разработка на изцяло уеб базирана игра. Състезанието се казва <a href="https://gaming.mozillalabs.com/" target="_blank">Game On 2010</a> и дава възможност на всички гейм или уеб разработчици да покажат на какво са способни, но&#8230; само с HTML(5)/Javascript/CSS.</p>
<p>Да &#8211; правилно прочетохте! Flash, Applet-и и други плъгини не са позволени, защото основната идея на конкурса е да покаже на какво са способни модерните браузъри. А те наистина са способни! HТML5 &amp; Friends докараха на белия свят доста новости и купища ексцентрични API-та &#8211; Canvas елементът,  SVG (директно в html кода), WebGL, <a href="http://dailyffs.com/2010/the-future-web-sockets/" target="_blank">Web Sockets</a> (двупосочна свързаност), няколко API-та за data storing, Video елементът и още много интересни благинки.</p>
<p>В конкурса могат да участват както индивидуални разработчици, така и екипи. Естествено и за награди е помислено, като за сега от Лаба са обявили само наградата за първо място &#8211; два билета за <a href="http://www.gdconf.com/" target="_blank">Game Development Conference 2011</a> в Сан Франциско, с включен път, хотел и храна. Награди ще има и за още дузина категории, така че запретвайте ръкави <img src='http://dailyffs.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Крайният срок за участие е 11.01.2011г.</p>
<p>Успех на всички <img src='http://dailyffs.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><em>П.П. Аз лично смятам да се включа и съм навит за обединяване на усилията с други ентусиасти.</em></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/mozilla-labs-game-on-2010/' addthis:title='Mozilla Labs &#8211; Game On 2010 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://dailyffs.com/2010/mozilla-labs-game-on-2010/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ScreenShootMe на 1 година</title>
		<link>http://dailyffs.com/2010/screenshootme-on-1/</link>
		<comments>http://dailyffs.com/2010/screenshootme-on-1/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 20:25:28 +0000</pubDate>
		<dc:creator>Lucho</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Нонсенс]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[ScreenShootMe]]></category>
		<category><![CDATA[screenshot]]></category>
		<category><![CDATA[webtool]]></category>

		<guid isPermaLink="false">http://dailyffs.com/?p=440</guid>
		<description><![CDATA[Преди около година сътворих едно малко уеб-туулче, което да позволява бързо качване на скрийншот в мрежата - ScreenShootMe. Очакванията ми да стана свръх богат и да задмина Facebook по потребители не се сбъднаха, но и първоначалната ми идея никога не е била тази, де. Подбудите да го създам тогава бяха, че такъв инструмент ми е нужен и има смисъл от него. Виждам смисъл в него и сега - 1 година по-късно. <div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/screenshootme-on-1/' addthis:title='ScreenShootMe на 1 година '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Преди около година сътворих едно малко уеб-туулче, което да позволява бързо качване на скрийншот в мрежата &#8211; <a href="http://screenshoot.me/" target="_blank">ScreenShootMe</a>. Очакванията ми да стана свръх богат и да задмина Facebook по потребители не се сбъднаха, но и първоначалната ми идея никога не е била тази, де. Подбудите да го създам тогава бяха, че такъв инструмент ми е нужен и има смисъл от него. Виждам смисъл в него и сега &#8211; 1 година по-късно. Първата му версия беше функционална &#8211; имаше това което исках, но нямаше това, което искаха останалите хора &#8211; хубав вид. За това докато пътувах в автобуса от Созопол към София с изтощена батерия на телефона и празен поглед забит в хоризонта, реших да подобря творението си &#8211; да го направя &#8222;красиво&#8220;. И не просто реших, ами помислих сериозно какво искам, помислих за всеки детайл, за цветове, разположение &#8211; за всичко. Когато се прибрах веднага започнах работа по него и след 4-5 дни бях завършил всичко, което ми се въртеше в главата докато пътувах в автобуса. Всички промени касаят клиентската част &#8211; нищо по сървърната част или в Applet-а не е пипано, което беше и първоначалната идея &#8211; все пак е само фейслифтинг.</p>
<p style="text-align: center;"><img class="aligncenter" title=" " src="http://dailyffs.com/shotme/jlczJE" alt="" width="587" height="468" /></p>
<p style="text-align: left;">Ето и списък с промените:</p>
<ul style="text-align: justify;">
<li>Разположението &#8211; меню с всички бутони и контроли в ляво, до менюто е платното, а под тях е информативен текст.</li>
<li>Менюто се дели на 4 части &#8211; бутони с основни функции, бутон и контроли за crop, бутон и контроли за рисуване върху платното (избор на дебелина и цвят на четката), поле за въвеждане на специфичен ключ (ключа се ползва в URL-a с изображението).</li>
<li>Информативния текст се дели да две паралелни колони, като в лявата има информация за функциите на уеб-туулчето, а в дясната има текст с общо предназначение.</li>
<li>Състоянието на кенвъса по подразбиране трябва да има рекламен вид &#8211; да казва колко е лесно и полезно туулчето.</li>
<li>Цветовете: Тъмно синьо, жълто, оранжево и бяло (за текста). Топлите и студени цветове, някак си противно на логиката, си паснаха. Тъмно синьото и бялото бяха първите два избрани цвят, които да си призная, разбрах че си пасват благодарение на това лого &#8211; <a href="http://screenshoot.me/7r04fQ" target="_blank">http://screenshoot.me/7r04fQ</a> . За оранжавото знаех, че е енергичен цвят, а за жълтото че прави много добър контраст с черно и тъмни цветове (освен това ми е любим). И така от цялата каша се роди една палитра, която е <strong>ЕДИНСТВЕНАТА </strong>свястна палитра, която някога съм подбирал.</li>
<li>Бутоните и контролите представляват Canvas елементи и са изцяло генерирани от Javascript. Един ден ще бъдат заменени от HTML5 Web Forms.</li>
<li>Наех домейн за уеб-туулчето &#8211; screenshoot.me</li>
<li style="text-align: justify;">Donation бутонче &#8211; домейнът струва пари <img src='http://dailyffs.com/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </li>
<li style="text-align: justify;">Футър</li>
<li style="text-align: justify;">Undo &#8211; в случай, че нещо се обърка тотално.</li>
</ul>
<p style="text-align: justify;">Това &#8222;разкрасяване&#8220; за пореден път подтвърди мнението ми, че хубавията дизайн се постига много по-трудно отколкото самата функционалност. Дано поне да си е заслужавало труда  и парите за домейн и да привлече повече потребители <img src='http://dailyffs.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p style="text-align: justify;">
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="580" height="360" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/wTlIOdL8kLI&amp;hl=en_US&amp;fs=1?rel=0&amp;border=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="580" height="360" src="http://www.youtube.com/v/wTlIOdL8kLI&amp;hl=en_US&amp;fs=1?rel=0&amp;border=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/screenshootme-on-1/' addthis:title='ScreenShootMe на 1 година '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://dailyffs.com/2010/screenshootme-on-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HTML5 &#8211; Предисторията</title>
		<link>http://dailyffs.com/2010/html5-story/</link>
		<comments>http://dailyffs.com/2010/html5-story/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 12:44:48 +0000</pubDate>
		<dc:creator>Lucho</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[WebSockets]]></category>
		<category><![CDATA[WHATWG]]></category>
		<category><![CDATA[предистория]]></category>

		<guid isPermaLink="false">http://dailyffs.com/?p=398</guid>
		<description><![CDATA[С течение на времето стандарта става все по-голям и по-разнообразен като до 2010 година в него вече влизат функционалности за запис и възпроизвеждане на видео и звук, няколко варианта за двупосочна връзка между потребителския клиент и уеб сървъра, няколко вида офлайн съхранение на данни в браузъра (вкл. и с база данни), възможност за чертаене на екрана, възможност за директно внасяне на MathML и SVG код в HTML документа<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/html5-story/' addthis:title='HTML5 &#8211; Предисторията '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><em>Тази публикация е първата от поредица статии за HTML5. Пиша ги  основно по две причини &#8211; обичам HTML5 стандарта и искам да помогна за  популяризирането му. Дано ви харесат и приятни занимания с HTML5 <img src='http://dailyffs.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </em></p>
<p><img class="aligncenter" title="HTML5" src="http://dailyffs.com/shotme/?2qoP6V" alt="" width="395" height="137" /></p>
<div>
<p style="text-align: justify;">Веднага след като <a href="http://www.w3.org/" target="_blank">W3C</a> завършиха стандарта HTML 4, се заеха с разработката на напълно нов уеб  език &#8211; XHTML 2, който макар и да е &#8222;XHTML&#8220; няма нищо общо с XHTML 1.0  или 1.1, а на всичкото отгоре не е съвместим и с тези предни версии. По  този начин браузър-вендорите трябваше рано или късно да започнат да  поддържат два езика за структуриране и представяне на уеб страници,  които нямат много общо по между си. Естествено никой не се съгласи на  това безумие и след като до 2004 година, никой от водещите браузъри не  беше имплементирал абсолютно нищо от XHTML 2, a <a href="http://www.w3.org/" target="_blank">W3C </a> не желаеше да отстъпи и да прекрати разработката на стандарта,  производителите на браузъри (Microsoft, Apple, Mozilla и Opera) просто  се оттеглиха и създадоха собствен работна група - <a href="http://www.whatwg.org/" target="_blank">WHATWG</a>, чиято цел бе да разработи нов HTML стандарт,  който да е съвместим с предни версии и да предлага нови  функционалности, достъп до периферни устройства и по-лесно и уеднаквено  разработване на уеб приложения. Няколко години след това <a href="http://www.w3.org/" target="_blank">W3C</a> най-накрая забелязват, че никой не се вълнува от съдбата на  XHTML 2, но пък <a href="http://www.whatwg.org/" target="_blank">WHATWG</a> доста  напредват с новия неофициален стандарт, и след като самият <a href="http://en.wikipedia.org/wiki/Tim_Berners-Lee" target="_blank">Тим Бърнърс-Лий</a> пише в блога си, че нещата около XHTML 2 не вървят, <a href="http://www.w3.org/" target="_blank">W3C </a> най-накрая се вразумяват. През 2007 година <a href="http://www.w3.org/" target="_blank">W3C </a>официално решават да прекратят работа по XHTML 2 и да се обединят  с <a href="http://www.whatwg.org/" target="_blank">WHATWG</a>, за да разработят заедно новия стандарт &#8211; <strong>HTML5</strong>.</p>
<p style="text-align: justify;"><a href="http://dailyffs.com/wp-content/uploads/2010/06/html5.jpg"><img class="alignleft" title="html5" src="http://dailyffs.com/wp-content/uploads/2010/06/html5.jpg" alt="" width="103" height="109" /></a>С течение на времето стандарта става  все по-голям и по-разнообразен като до 2010 година в него вече влизат  функционалности за запис и възпроизвеждане на видео и звук, няколко  варианта за двупосочна връзка между потребителския клиент и уеб сървъра,  няколко вида офлайн съхранение на данни в браузъра (вкл. и с база  данни), възможност за чертаене на екрана, възможност за директно внасяне  на MathML и SVG код в HTML документа, полета за въвеждане на специфични  данни (например телефон или e-mail), един куп нови елементи, подобрена  семантика в структурата на уеб страниците, нов стандартизиран начин за  токенезиране и построяване на дървото от елементи в браузъра. Последното  ще накара производителите на браузъри да не си измислят сами как да се  интерпретира невалидния HTML5 код, а да следват ясно зададен алгоритъм,  така че страниците да изглеждат еднакви на всички браузъри.</p>
<p style="text-align: justify;">До тук всичко е повече от красиво, но следва една обезпокоителна  новина &#8211; HTML5 ще бъде записан като задължителен стандарт през 2022  година, а като препоръчителен стандарт едва през 2012. Това значи, че на  теория производителите на браузъри могат да си седят кротко и да се  ослушват до 2022 година, с което да пречат на цялата работа по  внедряването на стандарта в уеб пространството. Реално обаче това не е  така, тъй като  всяка нова версия на популярните браузъри поддържа все  повече и повече от новия стандарт. Очакванията са, че паралелно с  официалното завършване на HTML5 (2012г.) повечето браузъри ще са го  имплементирали. Това е напълно разбираемо, защото в  крайна сметка хората, които пишат стандарта са хората, които правят и  уеб браузърите.</p>
<p style="text-align: justify;"><a href="http://dailyffs.com/wp-content/uploads/2010/06/screenshoot.jpg"><img class="alignleft" title="screenshoot" src="http://dailyffs.com/wp-content/uploads/2010/06/screenshoot.jpg" alt="" width="141" height="82" /></a>Аз се запалих по HTML5 лятото на  2009 година, когато за първи път видях частична поддръжка на стандарта (Canvas елемента) в  Firefox 3.5. Бях меко казано изненадан от това, което предлагаше и реших  да експериментирам с едно малко уеб приложение - <a href="http://dailyffs.com/shotme/" target="_blank">ScreenShotMe</a>,  което да предлага минимална редакция и ъплоуд на изображение от  клипборда. Написването на кода (макар и без много примери в нета) беше  лесно, като в резултат с малко код се постигна прилична функционалност.  Следващото нещо, което ми направи силно впечатление бе появата на <a href="http://en.wikipedia.org/wiki/WebSockets" target="_blank">WebSocket-ите</a> в Google Chrome през декември 2009, като те предлагаха дуплексна връзка  между клиента и сървъра. Opera пък поддържат HTML5 Forms &#8211; нови  потребителски контроли като слайдер, color picker и др. Само тези  няколко нови функционалности загатват за десетките нови онлайн  приложения, които може да видим скоро на белия свят. Например директна  редакция на снимките във Facebook, Skype в браузъра, офлайн достъп до  електронната поща и др.</p>
<p style="text-align: justify;">Макар че HTML5 e още чернова и e далеч от поява на белия свят, горещо  препоръчвам уеб дивелопърите да не чакат 2012 или 2022 година, за да се  запознаят по-детайлно с HTML5, защото този нов стандарт ще отвори  вратите за един куп нови и интерактивни уеб приложения!</p>
</div>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/html5-story/' addthis:title='HTML5 &#8211; Предисторията '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://dailyffs.com/2010/html5-story/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Какво ново около Firefox 4.0 и HTML5</title>
		<link>http://dailyffs.com/2010/firefox-4-0-html5/</link>
		<comments>http://dailyffs.com/2010/firefox-4-0-html5/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 20:02:40 +0000</pubDate>
		<dc:creator>Lucho</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://dailyffs.com/?p=296</guid>
		<description><![CDATA[В последно време покрай изпити, състезания и разни други неща изпуснах дирята на развитие на HTML5 съпортa от страна на Firefox. За всеобща радост обаче, Twitter ме осведомява прилично тъй като следвам доста Firefox контрибютъри. Та, от там знам че от скоро вече има работещo Web Socket API в нощните билдове на браузъра. Това значи [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/firefox-4-0-html5/' addthis:title='Какво ново около Firefox 4.0 и HTML5 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://dailyffs.com/wp-content/uploads/2010/06/Firefox_3.5_logo.png"><img class="alignleft size-full wp-image-297" title="Firefox_3.5_logo" src="http://dailyffs.com/wp-content/uploads/2010/06/Firefox_3.5_logo.png" alt="" width="128" height="128" /></a>В последно време покрай изпити, състезания и разни други неща изпуснах дирята на развитие на HTML5 съпортa от страна на Firefox. За всеобща радост обаче, Twitter ме осведомява прилично тъй като следвам доста Firefox контрибютъри. Та, от там знам че от скоро вече има работещo Web Socket API в нощните билдове на браузъра. Това значи че за FF4.0 (да, FF3.7 няма да има), който излиза през ноември 2010, ще можем да се поздравим с едно от най-нужните неща в съвременния web &#8211; истинска двупосочна връзка. С това огнената лисица ще стане втория браузър след Chrome, който поддържа Web Socket-и и мисля, че няма нужда да ви казвам колко много развързва ръцете на дивелопърите наличието на <a href="http://dailyffs.com/index.php/2010/the-future-web-sockets/">дуплексна връзка</a>!</p>
<p style="text-align: justify;">С това обаче добрите вести не свършват, оказва се че и по HTML5 Forms работата върви с пълна пара, но какво точно ще видим в следващата версия на браузъра е трудно да се каже на този етап.  Пълен списък с прогреса по различните елементи и атрибути има тук: <a href="https://wiki.mozilla.org/User:Mounir.lamouri/HTML5_Forms" target="_blank">https://wiki.mozilla.org/User:Mounir.lamouri/HTML5_Forms</a></p>
<p style="text-align: justify;">Последното нещо, с което ще ви занимая е един доста впечатляващ експеримент &#8211; <a href="http://smokescreen.us/" target="_blank">Smoke Screen</a> . Накратко това дава възможност на вашия HTML5 браузър да показва Flash анимации без да ползва Flash player&#8230; ъ-ъ-ъ странно нали <img src='http://dailyffs.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  . В случая цялата работа се извършва от Javascript + Canvas  елемент и преди да възкликнете &#8222;За какво би било полезно това, при положение че Flash плейърът е фрий&#8220;, ще ви напомня че  много съвременни смартфони не поддържат Flash (iPhone) и някои от CEO-тата на компаниите производители (Стив Джобс) публично се заклеха, че съпорт за Flash няма да има НИКОГА!</p>
<p style="text-align: justify;">Та така, Web-a си върви, кучетата си лаят и определено ни чакат интересни месеци до излизането на Firefox 4.0 <img src='http://dailyffs.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/firefox-4-0-html5/' addthis:title='Какво ново около Firefox 4.0 и HTML5 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://dailyffs.com/2010/firefox-4-0-html5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Бъдещето на телекомуникациите &#8211; Web Sockets</title>
		<link>http://dailyffs.com/2010/the-future-web-sockets/</link>
		<comments>http://dailyffs.com/2010/the-future-web-sockets/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 12:06:13 +0000</pubDate>
		<dc:creator>Lucho</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[WebSockets]]></category>

		<guid isPermaLink="false">http://dailyffs.com/?p=263</guid>
		<description><![CDATA[Най-голямата спънка при разработката на богати уеб приложения до сега е липсата на двупосочна връзка &#8211; от клиента към сървъра и от сървъра към клиента. Решението на този проблем винаги е било голяма болка и страдания, като най-общо се ползват чести запитвания към сървъра, на които той в 90% от времето  връща празен response или [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/the-future-web-sockets/' addthis:title='Бъдещето на телекомуникациите &#8211; Web Sockets '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="alignleft" title=" " src="http://farm1.static.flickr.com/77/207253914_d4b38c5006.jpg" alt="" width="91" height="126" />Най-голямата спънка при разработката на богати уеб приложения до сега е липсата на двупосочна връзка &#8211; от клиента към сървъра и от сървъра към клиента. Решението на този проблем винаги е било голяма болка и страдания, като най-общо се ползват чести запитвания към сървъра, на които той в 90% от времето  връща празен response или <a href="http://en.wikipedia.org/wiki/Comet_%28programming%29">Comet</a> (познато още като long polling най-общо). И двата начина са тромави и ресурсоемки&#8230; даже бих ги определил като законни <a href="http://en.wikipedia.org/wiki/Denial-of-service_attack">DoS</a> атаки. И всичко това за да се симулира нещо подобно на двупосочна връзка.<br />
Е, дните на безсмислени request-и и празни response-и отминаха, защото HTML5 предлага няколко варианта за решение на този казус. Ще се спра само на един от тях, на тъй наречените <a href="http://dev.w3.org/html5/websockets/">Web Socket</a>-и. Както сигурно се досещате става въпрос за сокет съединения, макар и леко модифицирани и орязани, които могат да се създават и управляват чрез Javascirpt. Освен че тези web socket-и могат само да започват връзка, но не и да стоят и да слушат за постъпване на такава, те имат и собствен допълнителен протокол, с който си комуникират със сървърното приложение. Важното в случая е че дуплексна връзка има и то на много ниска цена (от към писане на код). При създаване на сокет се оказват callback функции за четене, възникване на грешка и отваряне/затваряне на връзката, така че когато някое от изборените събития се случи, тези callback функции се извикват и обработката на данни пада във вашите ръце. Това намалява драстично главоболията породени от блокиращи/неблокиращи сокети, безкрайни цикли, exception-и и какво ли още не.<br />
От сървърна гледна точка нещата също са прости, кодът който е нужен за успешна комуникация с клиента е съвсем стандартен за сървърно сокет приложение, с изключение на едни служебни съобщения, които Web Socket-ите очакват и от които не може да се бяга.</p>
<p style="text-align: justify;">Понеже всичко до сега звучи прекалено хубаво, ще се наложи да ви приземя малко, защото Web Socket-и за сега се поддържат само от Google Chrome, но рано или късно и другите browser vendor-и ще се усетят откъде духа вятъра. И понеже вече се приземихте ето и едно примерно приложение, което сглобих &#8211; <a href="http://gist.github.com/339983">MultiDraw</a>. Идеята е чрез HTML5 Canvas елемента и Web Socket-и да се постигне паралелно рисуване от множество клиенти върху платно. Сървърната част е на Python 2.6 и ползва модула <a href="http://docs.python.org/library/asyncore.html">asyncore</a> от стандартната библиотека, който симулира асинхронно четене и писане от сокети.</p>
<p>Ето кодът, който се отнася до web socket-ите при клиента:</p>
<pre class="brush: jscript; title: ; notranslate">
var s = new WebSocket(&quot;ws://&quot; + document.location.host + &quot;:6789/&quot;);
// създаване на сокет съединение на порт 6789
s.onopen = function(e) { document.title = 'MultiDraw - Online'; }
// функция, която да се изпълни при установена връзка
s.onclose = function(e) { document.title = 'MultiDraw - Offline'; }
// функция, която да се изпълни при прекратяване на връзка
s.onmessage = function(e) {
// функция, която да се изпълни при пристигане на съобщение (съобщението е в e.data)
    var data = e.data.split(&quot; &quot;); // обработваме съобщението...
    draw(data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7]); // ... и чертаем върху Canvas-а
}
...
s.send([x, y, e.pageX, e.pageY, color, brushSize, lineCap, lineJoin].join(' ')); // изпращане на съобщение
</pre>
<p>При сървъра, единственото по-екзотично е хендшейк съобщението и това, че всяко съобщение започва с нулев байт и завършва с 0xFF (може да го видите в кода на сървъра).</p>
<p style="text-align: justify;">Кодът на клиента и сървъра е тук &#8211; <a href="http://gist.github.com/339983">http://gist.github.com/339983</a> .</p>
<p style="text-align: justify;">Happy Web Socketing <img src='http://dailyffs.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p style="text-align: justify;">
<p style="text-align: justify;"><em>P.S. Незнам дали забелязахте, ама редакторът на спецификацията за Web Socket-ите е &#8222;<a href="mailto:ian@hixie.ch">Ian Hickson</a>, Google, Inc.&#8220;, така че няма нищо странно, че  тези чудесии се появяват именно в Chrome за първи път <img src='http://dailyffs.com/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </em></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2010/the-future-web-sockets/' addthis:title='Бъдещето на телекомуникациите &#8211; Web Sockets '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://dailyffs.com/2010/the-future-web-sockets/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

