﻿<?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; Firefox</title>
	<atom:link href="http://dailyffs.com/category/firefox/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>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>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>Какво ново около 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>Първа среща с Ubiquity</title>
		<link>http://dailyffs.com/2009/%d0%bf%d1%8a%d1%80%d0%b2%d0%b0-%d1%81%d1%80%d0%b5%d1%89%d0%b0-%d1%81-ubiquity/</link>
		<comments>http://dailyffs.com/2009/%d0%bf%d1%8a%d1%80%d0%b2%d0%b0-%d1%81%d1%80%d0%b5%d1%89%d0%b0-%d1%81-ubiquity/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 22:40:07 +0000</pubDate>
		<dc:creator>Lucho</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://dailyffs.com/?p=160</guid>
		<description><![CDATA[Тези дни попаднах на поредното интересно нещо от Mozilla &#8211; Ubiquity. Накратко това е плъгин, който осигурява лесно и кратко писане на команди автоматизиращи последователност от действия или предоставящи интерфейс към услуга. На разположение е терминал, в който човек избира команда, извежда се малко панелче, в което се вижда резултата&#8230; и това е в общи [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2009/%d0%bf%d1%8a%d1%80%d0%b2%d0%b0-%d1%81%d1%80%d0%b5%d1%89%d0%b0-%d1%81-ubiquity/' addthis:title='Първа среща с Ubiquity '  ><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>Тези дни попаднах на поредното интересно нещо от Mozilla &#8211; <a href="http://labs.mozilla.com/ubiquity/">Ubiquity</a>. Накратко това е плъгин, който осигурява лесно и кратко писане на команди автоматизиращи последователност от действия или предоставящи интерфейс към услуга. На разположение е терминал, в който човек избира команда, извежда се малко панелче, в което се вижда резултата&#8230; и това е в общи линий. Това с което бие bookmarklet-ите е вграденото jQuery, възможността да  има стотици команди (bookmark лентата е ограничена от към резолюция <img src='http://dailyffs.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ), предлагане на шаблонен интерфейс (попълвате дескрипшън, хелп, etc и те се появяват на правилното място в правилното време), прави Ajax заявки към произволен сървър, има разни шантави тематични аутокъмплийт списъци (nouns), notification bar-че  и още куп готини работи. Пише се на Javascript и Python (само за OS X и Linux, Windows не е стандартно с Python &#8211; така че няма как <img src='http://dailyffs.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  ) и кода излиза умопомрачително кратък, главно заради хелпърите, които идват с Ubiquity и jQuery. Част от стандартните команди, които са в инсталацията са twitter клиент, бързо търсене на различни места, локиращо по IP скриптче, което дава линк към google maps, превод in-place на фрагменти от страница, скъсяване на линкове чрез tinyurl и други.</p>
<p>Разбира се, аз като open-minded developer на какъвто се правя напоследък, няма как да пропусна възможността да напиша нещо малко и от сърце за Ubiquity, а и <a href="http://dailyffs.com/index.php/share-screen/">ScreenShotMe</a> стана толкова &#8222;популярен&#8220; (трябва да измислят четворни кавички, двойните неотразяват добре реалността в този случай), че съм готов вече на всякакви експерименти &#8211; включително и писане на Ubiquity команда, която да прави снимка на текущата страница и да я праща (в ада <img src='http://dailyffs.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ) на сървиса. След около ден рисърч и зяпане из сорсовете на Firefox, се убедих че nsITransferable неподдържа &#8222;image/bmp&#8220; data flavor &#8211; може би защото от BMP формата лъха твърде много на Microsoft, кой знае. Това директно изпотроши първоначалната ми идея юзера да цъка print screen и командата да изпраща целия екран. Но всяко зло за добро &#8211; докато разглеждах имплементацията на хелпърите на Ubiquity се натъкнах на нещо яко &#8211; начин да изрисуваш window-ски content в canvas. Това явление е тотална измишльотина на Mozilla, защото в HTML5 Canvas draft-та няма такива неща, но все пак спаси положението. Вярно &#8211; няма да записвам целия екран, но пък когато човек иска да print screen-не browser-а си, обикновено не иска да му се виждат всички табове например, така че от подобна функционалност, която да предлага снимка само на уеб страницата има смисъл, а и ще върви и под OS X (за разлика от предния път <img src='http://dailyffs.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> ).</p>
<pre class="brush: jscript; title: ; notranslate">
// Най-добре натиснете &quot;&lt;&gt;&quot; горе вдясно на страницата, за да се разшири.
// Така създаваме нов запис на команда, която да ползваме от конзолата
CmdUtils.CreateCommand({

// име, аргументи, описание, превю, хелп са задължителни
  names: [&quot;shotit&quot;],
  arguments: [{role: 'object', nountype: noun_arb_text, label: &quot;image format&quot;}],
  description: _(&quot;Publishes the current browser snapshot on the web and puts a link to it in the clipboard.&quot;),
  homepage: &quot;http://dailyffs.com/index.php/share-screen/&quot;,
  author: {name: &quot;Lucho Yankov&quot;},
  license: &quot;GPL&quot;,
// preview може и да е метод, който да започне изпълнение веднага щом селектирате командата (без да натискате enter или да я изпълнявате даже), но на мен ми трябва само статичен текст
  preview: _(&quot;Publishes the current browser snapshot on the web and puts a link to it in the clipboard.&quot;),
  help: _(&quot;To specify the image format just put 'jpeg' or 'png' as command's parameter, if no format is specified and the image is smaller than 1200KB it will be saved as PNG, otherwise the JPEG format will be used.&quot;),

// execute е кодът, който ще се изпълни при стартиране на командата
  execute: function(args) {
    var window = CmdUtils.getWindow();
// Следващите няколко реда са взаимствани до голяма степен от имплементацията на CmdUtils.getWindowSnapshot
    var canvas = CmdUtils.getHiddenWindow().document.createElementNS(&quot;http://www.w3.org/1999/xhtml&quot;, &quot;canvas&quot;);
    canvas.mozOpaque = true; // Дали canvas-ът да поддържа alpha или само солиден цвял (ускорява някои операции)
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
// Шантавият метод на canvas, който рисува прозорци - INSANE!
    canvas.getContext(&quot;2d&quot;).drawWindow(window, window.scrollX, window.scrollY, window.innerWidth, window.innerWidth, &quot;rgb(255,255,255)&quot;);
    var data = null;
// Проверка, дали има експлицитно зададен формат на изображението и ако не, дали то не е твърде голямо за да го правим на PNG и директно да го запазим като JPEG.
// Параметрите трябва да са jpeg, jpg, j, png, p
    if (/^j(pe?g)?\s*$/i.test(args.object.text)) {
        data = canvas.toDataURL(&quot;image/jpeg&quot;);
    } else if (/^p(ng)?\s*$/i.test(args.object.text)) {
        data = canvas.toDataURL(&quot;image/png&quot;);
    } else {
        data = canvas.toDataURL(&quot;image/png&quot;);
        if (data.length &gt; 1600*1024) data = canvas.toDataURL(&quot;image/jpeg&quot;);
    }
// Показваме в notification bar-а, колко данни се изпращат, за да придобие представа потребителя, дали ще чака докато остарее или повече
    displayMessage(_(&quot;Sending &quot;) + parseInt(data.length/1024+1) + &quot;KB...&quot;, this);
    MAIN_URL = &quot;http://dailyffs.com/shotme/&quot;;
// Изпращаме изображението към сървъра и когато върне като отговор ключа индексиращ картинката, сглобяваме линк и го пъхаме в клипборда и в notification bar-а
    jQuery.post(MAIN_URL, &quot;image=&quot;+data, function(key) {
        if (key == &quot;ERROR&quot;) return;
        var url = MAIN_URL + &quot;?&quot; + key;
        Utils.clipboard.text = url;
        displayMessage({text: url, onclick: function(){window.open(url);}}, this);
      }
    );
  }
});
</pre>
<p>Резултата от усилията ми е качен в Git, напълно отворен и поощрен за разширение &#8211; <a href="http://gist.github.com/192995">http://gist.github.com/192995</a> , версията на Ubiquity за която го писах е 0.5.4 (в случай, че нещо при някой невърви).</p>
<p>Ако някой има идеи, предложения или питания да заповяда &#8211; коментарите са за това <img src='http://dailyffs.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 156px; width: 1px; height: 1px;">// така създаваме нов запис на команда, която да ползваме от конзолата<br />
CmdUtils.CreateCommand({</p>
<p>// име, аргументи, описание, превю, хелп са задължителни<br />
names: ["shotit"],<br />
arguments: [{role: 'object', nountype: noun_arb_text, label: "image format"}],<br />
description: _(&#8222;Publishes the current browser snapshot on the web and puts a link to it in the clipboard.&#8220;),<br />
homepage: &#8222;http://dailyffs.com/index.php/share-screen/&#8220;,<br />
author: {name: &#8222;Lucho Yankov&#8220;},<br />
license: &#8222;GPL&#8220;,<br />
// preview може и да е метод, който да започне изпълнение веднага щом селектирате командата<br />
// (без да натискате enter или да я изпълнявате даже), но на мен ми трябва само статичен текст<br />
preview: _(&#8222;Publishes the current browser snapshot on the web and puts a link to it in the clipboard.&#8220;),<br />
help: _(&#8222;To specify the image format just put &#8216;jpeg&#8217; or &#8216;png&#8217; as command&#8217;s parameter, if no format is specified and the image is smaller than 1200KB it will be saved as PNG, otherwise the JPEG format will be used.&#8220;),</p>
<p>// execute е кода, който ще се изпълни при стартиране на командата<br />
execute: function(args) {<br />
var window = CmdUtils.getWindow();<br />
// следващите няколко реда са взаимствани до голяма степен от имплементацията на CmdUtils.getWindowSnapshot<br />
var canvas = CmdUtils.getHiddenWindow().document.createElementNS(&#8222;http://www.w3.org/1999/xhtml&#8220;, &#8222;canvas&#8220;);<br />
canvas.mozOpaque = true;<br />
canvas.width = window.innerWidth;<br />
canvas.height = window.innerHeight;<br />
// шантавият метод на canvas, който рисува прозорци &#8211; INSANE!<br />
canvas.getContext(&#8222;2d&#8220;).drawWindow(window, window.scrollX, window.scrollY, window.innerWidth, window.innerWidth, &#8222;rgb(255,255,255)&#8220;);<br />
var data = null;<br />
// проверка, дали има експлицитно зададен формат на изображението и ако не,<br />
// дали то не е твърде голямо за да го правим на PNG и директно да го запазим като JPEG.<br />
// параметрите трябва да са jpeg, jpg, j, png, p<br />
if (/^j(pe?g)?\s*$/i.test(args.object.text)) {<br />
data = canvas.toDataURL(&#8222;image/jpeg&#8220;);<br />
} else if (/^p(ng)?\s*$/i.test(args.object.text)) {<br />
data = canvas.toDataURL(&#8222;image/png&#8220;);<br />
} else {<br />
data = canvas.toDataURL(&#8222;image/png&#8220;);<br />
if (data.length &gt; 1600*1024) data = canvas.toDataURL(&#8222;image/jpeg&#8220;);<br />
}<br />
// Показваме в notification bar-а, колко данни се изпращат, за да придобие представа потребителя,<br />
// дали ще чака докато остарее или повече <img src='http://dailyffs.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
displayMessage(_(&#8222;Sending &#8222;) + parseInt(data.length/1024+1) + &#8222;KB&#8230;&#8220;, this);<br />
MAIN_URL = &#8222;http://dailyffs.com/shotme/&#8220;;<br />
// изпращаме изображението към сървъра и когато върне като отговор ключа индексиращ картинката го сглобяваме<br />
// и го пъхаме в клипборда и в notification bar-а<br />
jQuery.post(MAIN_URL, &#8222;image=&#8220;+data, function(key) {<br />
if (key == &#8222;ERROR&#8220;) return;<br />
var url = MAIN_URL + &#8222;?&#8220; + key;<br />
Utils.clipboard.text = url;<br />
displayMessage({text: url, onclick: function(){window.open(url);}}, this);<br />
}<br />
);<br />
}<br />
});</p>
</div>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2009/%d0%bf%d1%8a%d1%80%d0%b2%d0%b0-%d1%81%d1%80%d0%b5%d1%89%d0%b0-%d1%81-ubiquity/' addthis:title='Първа среща с Ubiquity '  ><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/2009/%d0%bf%d1%8a%d1%80%d0%b2%d0%b0-%d1%81%d1%80%d0%b5%d1%89%d0%b0-%d1%81-ubiquity/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Share your screen</title>
		<link>http://dailyffs.com/2009/share-your-screen/</link>
		<comments>http://dailyffs.com/2009/share-your-screen/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 00:43:00 +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[Нонсенс]]></category>

		<guid isPermaLink="false">http://dailyffs.com/?p=119</guid>
		<description><![CDATA[Напоследък съм изгубил творческата си искра, в работата се занимавам с .NET 2 (нестига, че е .NET ами и е от 2004г ) не съм почивал цяло лято и ми се ще да пиша на Ruby и Rails или Objective C за iPhone. Та сред всички тези несгоди и поради факта, че съм програмист все [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2009/share-your-screen/' addthis:title='Share your screen '  ><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>Напоследък съм изгубил творческата си искра, в работата се занимавам с .NET 2 (нестига, че е .NET ами и е от 2004г <img src='http://dailyffs.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  ) не съм почивал цяло лято и ми се ще да пиша на Ruby и Rails или Objective C за iPhone. Та сред всички тези несгоди и поради факта, че съм програмист все пак (а добрите програмисти решават проблеми ежедневно и би трябвало и своите да могат да решат!!!) предприех някои стъпки за измъкване от блатото, като една от тях беше да си пиша малко проектче за мое лично удовлетворение. Първоначалната идея изникна в главата ми по напълно случаен начин, с времето идеята се развиваше и променяше, пишех по малко код и очаквах вдъхновението ми да се върне и да ми каже какво да правя&#8230; е този момент дойде днес &#8211; тази вечер.</p>
<p>Първоначалната ми идея, с която няма да ви занимавам сега, включваше използване на HTML 5 Canvas &#8211; платно на което може да се рисува и дава пълен достъп до битмапа &#8211; красота! Естествено този стандарт е все още слабо разпространен сред браузърите, защото е нов (Microsoft-ския Trident още не го подържа изобщо, бахти изостаналата нация <img src='http://dailyffs.com/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> ). Идеята включваше и Рейлс, но прагматичното в мен победи и пожела да запълня 99% свободен bandwith на хостинга ми (да, блога ми е толкова популярен, че ползвам &lt;1% от линията <img src='http://dailyffs.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  ). Това води след себе си сравнително неприятното задължение да пиша на PHP&#8230; но няма да се лъжем, на PHP се пише много бързо, ама много, много бързо и грозно и&#8230; абе селска работа! Предните седмици, докато чаках вдъхновението, реших да проуча въпроса, как мога да взема изображение от клипборда и да го плесна на кенвъса, оказа се нетолкова лесна история, но възможна все пак. Цената не е прекалено висока &#8211; ползвам Java Applet-че, което върши цялата работа всъщност. Алтернативата е Flash, но доколкото разбрах Flash 10 налагал по-строги ограничения за боравене с клипборда, а и не обичам Flash и ActionScript (винаги ме е боляло много след интервенция с тях). Големият проблем е, че някъде при прехвърлянето на битмапа от клипборда през аплета към javascript-ския код нещата стават много бавно и това може да отнеме до няколко секунди, за по-големи изображения, но като се абстрахираме от това &#8211; ТО РАБОТИИИИ!!!! Следващото нещо, което направих е функционалност за селектиране на фрагмент от кенвъса, почти като в Paint или друг редактор&#8230; и в общи линии до тази вечер бях стигнал до тук, когато ме осени идеята &#8211; selection tool-а става на crop tool и целия проект се превръща в 3-click-screen-share. Гениално наистина, print screen, paste, [optional: crop], save и получаваш линк&#8230; а и подобно нещо не съм виждал да има досега&#8230; е друг е въпросът колко често на човек му трябва подобно нещо, но като се замисля, че иначе трябва да отваряш image editor, пък после да save-ваш, пък после да го публикуваш някъде, и накрая да пратиш линк &#8211; it is retarded!</p>
<p>Първоначалната версия на услугата е тук: <a href="http://dailyffs.com/shotme/">http://dailyffs.com/shotme/</a></p>
<p>За сега всички енджини без този на Microsoft подържат в някаква степен Canvas, като за FireFox 3.5 приложението върви на 100%. Естествено за view на изображението впоследствие не е необходимо нищо специално и всеки браузър би свършил работа, така че всички ще могат да видят скрийншота ви &#8211; спокойно <img src='http://dailyffs.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Ако някой има предложения или поне му е харесала идеята или пък го е отвратила, може да напише мнението си тук. Чуждият фийдбек е стимул, стимул за подобряване, изпипване и разширяване на идеята. Ако има интерес ще наема нов domain и ще се постарая да оправя забавянията, да сложа една четка, че да може да оградите примерно определено място от изображението, на което искате да наблегнете.</p>
<p>Хубаво е когато човек дава свобода на въображението и творчеството си, кара те да се чувстваш щастлив и да си изпълнен с идеи и енергия&#8230; даже и цената, която трябва да платиш да е малко писане на PHP <img src='http://dailyffs.com/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://dailyffs.com/2009/share-your-screen/' addthis:title='Share your screen '  ><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/2009/share-your-screen/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

