<?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>CTAPbIu_MABP&#039;s BLOG &#187; hate</title>
	<atom:link href="http://mabp.kiev.ua/tag/hate/feed/" rel="self" type="application/rss+xml" />
	<link>http://mabp.kiev.ua</link>
	<description>энтузиазм = 1/опыт © Старый Мавр</description>
	<lastBuildDate>Thu, 26 Jan 2012 10:34:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>kb-2534366</title>
		<link>http://mabp.kiev.ua/2011/05/11/kb-2534366/</link>
		<comments>http://mabp.kiev.ua/2011/05/11/kb-2534366/#comments</comments>
		<pubDate>Wed, 11 May 2011 12:40:27 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[hate]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1360</guid>
		<description><![CDATA[Обновил себе W7 сегодня... ну то есть как обычно: сначала аларм "обновление детектед", потом скачивание, загрузка и аларм "перезвгрузка нидед", который надо все время убирать... ну, ок, перезагрузился и хуяк - перестал работать drag'n'drop на файлах. Вот не пиздец а? Опытным путем узнал что это было то самое обновление.]]></description>
			<content:encoded><![CDATA[<p>Обновил себе W7 сегодня... ну то есть как обычно: сначала аларм "обновление детектед", потом скачивание, загрузка и аларм "перезвгрузка нидед", который надо все время убирать... ну, ок, перезагрузился и хуяк - перестал работать drag'n'drop на файлах. Вот не пиздец а? Опытным путем узнал что это было то самое обновление.</p>
<span id="more-1360"></span>
<div style="text-align:center;"><img src="http://mabp.kiev.ua/content/img/install-ie9.jpg" alt="windows update"/></div>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2011/05/11/kb-2534366/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Альтернатива</title>
		<link>http://mabp.kiev.ua/2010/10/07/alternative/</link>
		<comments>http://mabp.kiev.ua/2010/10/07/alternative/#comments</comments>
		<pubDate>Thu, 07 Oct 2010 13:29:26 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[Голоса в голове]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[hate]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1267</guid>
		<description><![CDATA[По поводу graceful degradation и прочих версий сайтов для калек и инвалидов с ie6. Альтернатива для пользователе без javascript - FIDO. Я хожу в интернет с отключенным javascript, и поверьте мне, меня не парит тот факт, что у меня на каком-то сайте не работает меню. Потому что я обычно смотрю на сайте одну страницу. Если [...]]]></description>
			<content:encoded><![CDATA[<p>По поводу graceful degradation и прочих версий сайтов для калек и инвалидов с ie6.</p>
<span id="more-1267"></span>
<blockquote>Альтернатива для пользователе без javascript - FIDO.</blockquote>

<p>Я хожу в интернет с отключенным javascript, и поверьте мне, меня не парит тот факт, что у меня на каком-то сайте не работает меню. Потому что я обычно смотрю на сайте одну страницу. Если мне очень захочеться я включаю javascript конкретно для текущего домена и продолжаю игнорировать всякие рекламные сервисы.</p>

<p>Еще раз подчеркиваю, что люди которые отрубают скрипты скорее всего делают это намеренно. Сейчас не осталось браузеров которы не поддерживают javascript, даже на телефонах. Люди же которые используют Lynx (текстовые браузеры) знают на что идут и зачем это делают.</p>

<p>Тоже самое с флешом. Заказчик орет чтобы ролик был скомпилин под версию 8, чтобы вся страница вместе с роликом не занимала больше мегобайта при этом вешает на сайт огромный баннер. Я сегодня качал фильм размером 8 гигов и мне посрать весит ли сайт 1 метр или 10, главное чтобы там была инфа за которой я пришел.</p>

<p>Как-то использовал google cdn для подключения jquery. Вы знаете что эти мудаки сделали?</p>
<pre><code class="html">
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
// Ensure that jQuery is installed even if the Google CDN is down.
if (typeof jQuery === "undefined") {
var script = document.createElement('script');
var attr = document.createAttribute('type');
attr.nodeValue = 'text/javascript';
script.setAttributeNode(attr);
attr = document.createAttribute('src');
attr.nodeValue = '/tbmb/_assets/scripts/jquery-1.3.2.js';
script.setAttributeNode(attr);
document.getElementsByTagName('head')[0].appendChild(script);
}
&lt;/script&gt;
</code></pre>
<p><a href="https://my.kyivstar.ua/tbmb/login/show.do" rel="nofollow external">Пруфлинк</a></p> 

<p>Заказчик негодует по поводу валидности по W3C. На сайте использовался </p> 
<pre><code class="html">
&lt;link disabled="disabled"/&gt;
</code></pre>
<p>который везде работает, но не валиден. Чтобы сайт стал валидным потратили день, никак не могли понять как сразу отключить стиль иным образом. Можно было скриптом, но надо было ждать загрузки страницы и потом отключать, но при этом страница мигала. Из положения вышли оригинальным образом</p> 
<pre><code class="html">
&lt;!--[if IE]/&gt;&lt;link disabled="disabled"/&gt;&lt;![endif]--/&gt;
</code></pre>
<p>Данунах! И добавили еще один js файл для того чтобы это заработало в нормальных браузерах.</p>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2010/10/07/alternative/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Google Analytics for WordPress</title>
		<link>http://mabp.kiev.ua/2010/09/12/google-analytics-for-wordpress/</link>
		<comments>http://mabp.kiev.ua/2010/09/12/google-analytics-for-wordpress/#comments</comments>
		<pubDate>Sun, 12 Sep 2010 15:28:35 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[hate]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1254</guid>
		<description><![CDATA[Плагин, блядь, такой есть Google Analytics for WordPress. Авторы - уебки, мудОфилы и ебут гусей. История вопроса началась тут, когда свеже-написанный скрипт вдруг почему-то не заработал у читателей. Я потратил 2 часа пока перебрал скрипт на локальной машине. Честно говоря первых пол часа я потерял из-за своей собственной тупости, я забыл что flowplayer работает тока [...]]]></description>
			<content:encoded><![CDATA[<p>Плагин, блядь, такой есть <a href="http://yoast.com/wordpress/google-analytics/" rel="nofollow external">Google Analytics for WordPress</a>. Авторы - уебки, мудОфилы и ебут гусей.</p>

<span id="more-1254"></span>

<p>История вопроса началась <a href="http://mabp.kiev.ua/2010/09/11/flowplayer/">тут</a>, когда свеже-написанный скрипт вдруг почему-то не заработал у читателей. Я потратил 2 часа пока перебрал скрипт на локальной машине. Честно говоря первых пол часа я потерял из-за своей собственной тупости, я забыл что flowplayer работает тока с сервера, сука. Все это время я отлаживал в фаербаге, в том числе и на сайте где скрипт и так работал, это была роковая ошибка. Потом я как-то начал дебажить в Opera через Dragonfly и о чудо, заметил строку которая меня повергла в полный ахуй.</p>

<pre>
Uncaught exception: TypeError: 'jQuery("#videoDialog").dialog' is not a function

Error thrown at line 3, column 1 in <anonymous function>($) in http://mabp.kiev.ua/content/examples/flowplayer.js:
    var player = $f("player", 
called from line 19, column 41125 in <anonymous function: ready>() in http://mabp.kiev.ua/wp-includes/js/jquery/jquery.js?ver=1.3.2:
    this.call(document,o)
called via Function.prototype.call() from line 12, column 15654 in <anonymous function: each>(G, K, F) in http://mabp.kiev.ua/wp-includes/js/jquery/jquery.js?ver=1.3.2:
    for(var J=G[0];H<I&#038;&K.call(J,H,J)!==false;J=G[++H])
called via Function.prototype.call() from line 19, column 41019 in <anonymous function: ready>() in http://mabp.kiev.ua/wp-includes/js/jquery/jquery.js?ver=1.3.2:
    o.each(o.readyList,function(){this.call(document,o)});
called from line 19, column 41621 in <anonymous function>() in http://mabp.kiev.ua/wp-includes/js/jquery/jquery.js?ver=1.3.2:
    o.ready()
</pre>

<p>Сначала я воспользовался <a href="http://ru.wikipedia.org/wiki/Бритва_Хэнлона" rel="nofollow external">Бритвой Хэнлона</a> и подумал что у меня не загрузился jQuery IU. Попробовал загрузить руками - не вышло. Перебрал все скрипты на сайте по очереди отключая все. Хуй!</p>

<p>Перечитал ошибку еще раз и понял что меня наебали: какой-то наглый, говнокодистый, плагин подключает на сайт jquery.js?ver=1.3.2 из админки. Я просто брызнул лучами поноса во все стороны от такой наглости. Еще буквально пол часа и гадкий, богомерзкий плагин Google Analytics for WordPress был вычислен.</p>

<p>Код был закомментирован а плагин публично обосран в блоге и наступило счастье.</p>
<pre><code class="javascript">
//line 67
wp_enqueue_script('jquery');

// line 1280+
function track_comment_form_head() {
    if (is_singular()) {
        global $post;
        $yoast_ga_options = get_option('Yoast_Google_Analytics');
        if ( yoast_ga_do_tracking() &#038;& $yoast_ga_options["trackcommentform"] &#038;& ('open' == $post->comment_status) )
            wp_enqueue_script('jquery');    
    }
}
add_action('wp_print_scripts','track_comment_form_head');
</code></pre>

<p>Для тех кто не понял почему у меня работало в FF - я был залогинен под админом, а админу подключать этот скрипт не надо.</p>

<p>Авторы этой хуеты, если вы читаете этот наполненный гневом и ненавистью пост подумайте о следующем: не все на свете тупые обезьяны тыкающие карандашиком в клавиатуру, некоторые уже подключили себе jQuery, если уж сильно приспичило его использовать, побеспокойтесь что бы проверить может он уже есть, и если он слишком старый подгрузите новый аккуратно в замыкании используя noConflict чтобы не попортить людям сайт.</p>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2010/09/12/google-analytics-for-wordpress/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Feedback</title>
		<link>http://mabp.kiev.ua/2010/09/11/feedback/</link>
		<comments>http://mabp.kiev.ua/2010/09/11/feedback/#comments</comments>
		<pubDate>Sat, 11 Sep 2010 21:57:38 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[Голоса в голове]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[hate]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1253</guid>
		<description><![CDATA[Ну может не очень правильно назвал но смысл вот в чем: Я пишу этот блог чтобы можно было всегда открыть и посмотреть на уже готовое решение. Я считаю (возможно наивно), что я хороший специалист в том что делаю и стараюсь описывать сложные вопросы, глубокую теорию и жестокую практику. Я пробовал делать лирические отступления и писать [...]]]></description>
			<content:encoded><![CDATA[<p>Ну может не очень правильно назвал но смысл вот в чем:</p>

<span id="more-1253"></span>

<p> Я пишу этот блог чтобы можно было всегда открыть и посмотреть на уже готовое решение. Я считаю (возможно наивно), что <a href="http://lurkmore.ru/ОБВМ" rel="nofollow external">я хороший специалист</a> в том что делаю и стараюсь описывать <a href="http://mabp.kiev.ua/2009/08/10/presentation-from-coffee-n-code/">сложные вопросы</a>, <a href="http://mabp.kiev.ua/2010/02/07/eventify/">глубокую теорию</a> и <a href="http://mabp.kiev.ua/2009/10/13/hardware-js/">жестокую практику</a>. Я пробовал делать <a href="http://mabp.kiev.ua/2008/04/30/ctapbiu_mabp/">лирические отступления</a> и писать <a href="http://mabp.kiev.ua/2009/04/10/sitereview-vebmasters-freedom-of-speech/">про других блогеров</a> или <a href="http://mabp.kiev.ua/2008/04/27/travian/">про игры</a>, но это похоже не моё. А раз не мое - не берусь.</p>

<p>С другой стороны люди которые пишут про то что <a href="http://tema.livejournal.com/" rel="nofollow external">они посрали</a> или описывают <a href="http://bolknote.ru/" rel="nofollow external">какой вес штанги взяли</a> собирают больше комментариев от посетителей чем люди которые <a href="http://ejohn.org/blog/" rel="nofolow external">задают курс будущему развитию технологии</a> или пишут о <a href="http://webreflection.blogspot.com/" rel="nofolow external">глубокой эзотерике</a>. И если Тёма просто великий маркетроллог (я же правильно сократил тролль-маркетолог?) то Болк скорее подтверждение, того что людям больше нравиться читать о личной жизни. Особенно если своя не удалась. А пока код работает, его никто и <a href="http://mabp.kiev.ua/2008/04/08/autocomplete/">не прокомментирует</a>, а просто будут открывать и пользоваться.</p>

<p>А вот и сказочке конец и перелинковочке тоже :)</p>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2010/09/11/feedback/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Flowplayer</title>
		<link>http://mabp.kiev.ua/2010/09/11/flowplayer/</link>
		<comments>http://mabp.kiev.ua/2010/09/11/flowplayer/#comments</comments>
		<pubDate>Sat, 11 Sep 2010 17:34:42 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Видео]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[hate]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jqueryUI]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1251</guid>
		<description><![CDATA[Сегодня я пролью свои лучи поноса ненависти на Flowplayer. В двух словах - редкостная хуета! Дальше кодом... А забыл описать задачу. Нужен плеер в попапе, плейлист на странице в виде html (но если надо пара секунд переделать под ajax), у плеера есть две кнопки (вперед, назад) с превьюшками видео. Погнали. Пример разметки одного элемента списка [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня я пролью свои лучи <del>поноса</del> <a href="http://mabp.kiev.ua/tag/hate/">ненависти</a> на Flowplayer.</p>

<p>В двух словах - редкостная хуета! Дальше кодом... А забыл описать задачу. Нужен плеер в попапе, плейлист на странице в виде html (но если надо пара секунд переделать под ajax), у плеера есть две кнопки (вперед, назад) с превьюшками видео. Погнали.</p>

<span id="more-1251"></span>

<script type="text/javascript" src="/content/source/flowplayer/flowplayer-3.2.4.min.js"></script>
<script type="text/javascript" src="/content/js/flowplayer.js"></script>

<p>Пример разметки одного элемента списка</p>
<pre><code class="html">
&lt;div style="float:left; text-align:center; margin:5px;"&gt;
	&lt;a class="progress" href="${video_link}.flv" title="${title}"&gt;
		&lt;img src="${thrumbnail_link}" alt="${title}"&gt;
	&lt;/a&gt;
	&lt;a class="progress" href="${video_link}.png" title="${title}"&gt;
		${title}
	&lt;/a&gt;
&lt;/div&gt;
</code></pre>

<p>Конфигурация плеера с комментариями</p>

<pre><code class="javascript">
$(document).ready(function(){

	// конфигурация плеера
	var player = $f("player", 
	{
		// сам плеер 
		src : "/content/source/flowplayer/flowplayer-3.2.4.swf", 
		// и дополнительные параметры
		wmode: 'transparent'
	}, 
	{
		//debug : true,
		
		// стандартный клип
		clip : {
			// можно не указывать если полный путь прописан в html
			baseUrl: 'http://blip.tv/file/get/',
			// сразу при запуске не играем
			autoPlay: false,
			// но закачиваем
			autoBuffering: true,
			// растягиваем видео
			scaling : 'scale',
			// перед проигрыванием
			onBeforeBegin : function(clip){
				// если вместо видео картинка контролы не показываем
				if  (clip.type == "image"){
					this.getControls().hide();
				}
				
				// вычисляем позицию в списке воспроизведения
				var clip = this.getClip(),
					list = this.getPlaylist(),
					current = $.inArray(clip, list),
					left = current - 1  &gt;= 0 ? current - 1 : list.length - 1,
					right = current + 1 &lt;= list.length - 1 ? current + 1 : 0;
				
				// обновляем кнопки вперед-назад
				this.getPlugin("leftButton")
					.setHtml("&lt;p&gt;"+list[left].title+"&lt;/p&gt;")
					.css({
						background : "transparent url("+list[left].thumbnail+") no-repeat 20 20",
					});
					
				this.getPlugin("rightButton")
					.setHtml("&lt;p&gt;"+list[right].title+"&lt;/p&gt;")
					.css({
						background : "transparent url("+list[right].thumbnail+") no-repeat 20 20",
					});
			}
		},
		
		// список у нас береться из html
		// поэтому тут пусто
		playlist: [	],
		
		// рисуем кнопки
		// поскольку плеер очень убогий, для рисования кнопки
		// которая сначала видна чуть-чуть а при наведении мышьки 
		// расширяется и становиться видно превьюшку следующего видео
		// надо рисовать две кнопки одна маленькая, видна всегда и не меняется,
		// а вторая находиться поверх нее и собственно все события висят на ней
		plugins:  {
			
			// левая маленькая кнопка
			leftFake : {
				url: '/content/source/flowplayer/flowplayer.content-3.2.0.swf',
				top: 130,
				right : 0,
				width : 20,
				height : 100,
				zIndex : 1,
				opacity : 1,
				borderRadius : 0,
				background : "url(/content/source/flowplayer/mp_leftArrow.png) no-repeat 0 0"
			},
			
			// правая маленькая кнопка
			rightFake : {
				url: '/content/source/flowplayer/flowplayer.content-3.2.0.swf',
				top: 130,
				left : 0,
				width : 20,
				height : 100,
				zIndex : 1,
				opacity : 1,
				borderRadius : 0,
				background : "url(/content/source/flowplayer/mp_rightArrow.png) no-repeat 0 0"
			},
			
			controls: {
				//playlist: true,
		
				// ссылка на плагин
				url: '/content/source/flowplayer/flowplayer.controls-3.2.2.swf', 
				// показывать все элементы управления
				all: false,
				// играть
				play: false,
				// ползунок
				scrubber: true,
				// громкость
				volume: true,   
				// тонкая настройка ползунка и громкости
				scrubberHeightRatio: 0.3,
				scrubberBarHeightRatio: 0.2,
				volumeSliderHeightRatio: 0.2,
				// убирать с экрана при бездействии
				autoHide: 'always',
				// еще раз прячем контролы если смотрим на картинку,
				// потому что он (контрол) тупой и с первого раза не понял
				onBeforeShowed : function(){
					if (this.getPlayer().getClip().type == "image"){
						return false;
					}
				},
				onBeforeHidden : function(){
					if (this.getPlayer().getClip().type == "image"){
						return false;
					}
				}
			},

			// рисуем настоящую большую кнопку
			leftButton : {
				// ссылка на плагин
				url:'/content/source/flowplayer/flowplayer.content-3.2.0.swf',
				// какойто CSS
				top: 130,
				left:0,
				width: 20,
				height: 100,
				zIndex : 5,
				opacity: 1,
				padding : 20,
				borderRadius : 10,
				style: {
					p : {
						fontSize:14,
						fontWeight:"bold",
						color:"#000000"
					}
				},
				// задаем анимацию при наведении мыши
				onMouseOver: function() {
					this.animate({width:140}, 500);
				},
				onMouseOut: function() {
					this.animate({width:20}, 500); 
				},
				// играем следующий клип при клике
				onClick : function(){
					var clip = this.getPlayer().getClip(),
						list = this.getPlayer().getPlaylist(),
						current = $.inArray(clip, list),
						index = current - 1  &gt;= 0 ? current - 1 : list.length - 1;
					
					this.getPlayer().play(index);
				}
			},
			
			// тут все тоже самое только для правой кнопки
			rightButton : {
				url: '/content/source/flowplayer/flowplayer.content-3.2.0.swf',
				top: 130,
				right: 0,
				width: 20,
				height: 100,
				zIndex : 5,
				opacity: 1,
				padding : 20,
				borderRadius : 10,
				style: {
					p : {
						fontSize:14,
						fontWeight:"bold",
						color:"#000000"
					}
				},
				onMouseOver: function() {
					this.animate({width:140}, 500);
				},
				onMouseOut: function() {
					this.animate({width:20}, 500); 
				},
				onClick : function(){
					var clip = this.getPlayer().getClip(),
						list = this.getPlayer().getPlaylist(),
						current = $.inArray(clip, list),
						index = current + 1 &lt;= list.length - 1 ? current + 1 : 0;
			
					this.getPlayer().play(index)
				}, 
			},
		},
		
		// при наведении мыши на плеер показываем все кноки
		onMouseOver : function(){
			var plugins = ["leftButton","rightButton","leftFake","rightFake"];
			for(var i in plugins){
				this.getPlugin(plugins[i]).show();
			}
		},
		
		// а при бездействии - убираем
		onMouseOut : function(){
			var plugins = ["leftButton","rightButton","leftFake","rightFake"];
			for(var i in plugins){
				this.getPlugin(plugins[i]).hide();
			}
		},
		
		// ну и еще пара проверок при загрузке
		onLoad : function(){
			var list = this.getPlaylist(),
				left = list.length - 1,
				right = 1;
			
			// если короткий список воспроизведения не показываем кнопуки
			if (list.length&lt;2){
				this.getPlugin("leftButton").hide();
				this.getPlugin("rightButton").hide();
			}else{
				this.getPlugin("leftButton")
					.setHtml("&lt;p&gt;"+list[left].title+"&lt;/p&gt;")
					.css({
						background : "transparent url("+list[left].thumbnail+") no-repeat 20 20",
					});
					
				this.getPlugin("rightButton")
					.setHtml("&lt;p&gt;"+list[right].title+"&lt;/p&gt;")
					.css({
						background : "transparent url("+list[right].thumbnail+") no-repeat 20 20",
					});
			}
		}		
	}),
	
	// обычный JUI диалог
	dialog = $("#videoDialog").dialog({
		//modal:true,
		title:"dialog title",
		resizable:false,
		bgiframe:true,
		draggable:true,
		autoOpen: false,
		width:600,
		height:400,
		minHeight:0,
		open:function(){
			// при открытии диалога загружаем плеер
			player.load();
			// и меняем плейлист
			// для вызова события onPlaylistReplace
			player.play(list);
		},
		close:function(){
			player.unload();
		}
	}),
	
	list = [],
	index = 0;
	
	// вызываеться при смене списка воспроизведения
	// например ajax'ом новый подгрузили
	player.onPlaylistReplace(function(list) {
		// чтото без таймаута не пашет :(
		setTimeout(function(){
			player.play(index);
		},100);
	});
	
	// при старте клипа меняем заголовок диалога
	player.onStart(function() {
		dialog.prev().find(".ui-dialog-title").text(this.getClip().title)
	});
	
	// меняет список воспроизведения
	function getNewPlaylist(){
		list = [];
		// парсит html
		$("#playlist").children().each(function(){
			var self = $(":first",this);
			list.push({
				"url": self.attr("href"),
				"title": self.attr("title"),
				"thumbnail" : self.find("img").attr("src")
			});
		});
		
		// гасим ссылки
		$("#playlist a").click(function(){
			$(this).parent().click();
			return false;
		});
		
		// открываем плеер и играем нужное видео
		$("#playlist").children().click(function(){
			if (!dialog.dialog("isOpen")){
				dialog.dialog("open");
			}
			index = $(this).index();
		});
		
	}
	
	// загружаем список в плеер
	getNewPlaylist();

});
</code></pre>

<p>И немного пощупать что получилось</p>

<div id="videoDialog">
	<a id="player" class="player">&nbsp;</a>
</div>

<div id="playlist" style="margin:auto; width: 440px;">
	<div style="float:left; text-align:center; margin:5px;">
		<a class="progress" href="http://blip.tv/file/get/KimAronson-TwentySeconds59483.flv" title="Palm trees and the sun">
			<img src="http://mabp.kiev.ua/content/source/flowplayer/palm.png">
		</a>
		<a class="progress" href="http://blip.tv/file/get/KimAronson-TwentySeconds59483.flv" title="Palm trees and the sun">
			Palm trees and the sun
		</a>
	</div>

	<div style="float:left; text-align:center; margin:5px;">
		<a class="progress" href="http://blip.tv/file/get/KimAronson-TwentySeconds58192.flv" title="Happy feet in a car">
			<img src="http://mabp.kiev.ua/content/source/flowplayer/feet.png">
		</a>
		<a href="http://blip.tv/file/get/KimAronson-TwentySeconds58192.flv" title="Happy feet in a car">
			Happy feet in a car
		</a>
	</div>

	<div style="float:left; text-align:center; margin:5px;">
		<a href="http://blip.tv/file/get/KimAronson-TwentySeconds63617.flv" title="People jogging">
			<img src="http://mabp.kiev.ua/content/source/flowplayer/park.png">
		</a>
		<a href="http://blip.tv/file/get/KimAronson-TwentySeconds63617.flv" title="People jogging">
			People jogging in park
		</a>
	</div>
</div>

<br clear="both">
]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2010/09/11/flowplayer/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>bey-bey IntelliJ IDEA Community Edition</title>
		<link>http://mabp.kiev.ua/2010/03/02/bey-bey-intellij-idea-community-edition/</link>
		<comments>http://mabp.kiev.ua/2010/03/02/bey-bey-intellij-idea-community-edition/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 15:32:00 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[Голоса в голове]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[hate]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1218</guid>
		<description><![CDATA[Еще один ненависти псот. Я долгое время использовал IntelliJ IDEA, чтоб не спиздеть с 5ой наверное версии. Сначала крякнутую потом перешел на EAP, это что-то типа программы по которой ты можешь пользовать бэтку за то что отсылаешь багрепорты. Но с девятой версии лавочку прикрыли. Теперь и для EAP нужна лицензия. Дома то понятно что я [...]]]></description>
			<content:encoded><![CDATA[<p>Еще один ненависти псот.</p>
<span id="more-1218"></span>
<p>Я долгое время использовал IntelliJ IDEA, чтоб не спиздеть с 5ой наверное версии. Сначала крякнутую потом перешел на EAP, это что-то типа программы по которой ты можешь пользовать бэтку за то что отсылаешь багрепорты. Но с девятой версии лавочку прикрыли. Теперь и для EAP нужна лицензия. Дома то понятно что я не отказываю себе в удовольствии использовать крякнутую ultimate Edition но на работе низя :( Пришлось поставить Community Edition. Блять настолько уебищной IDE я не видел, проще в Notepad++ писать, потому что эта убогая хуйня не подсвечивает даже JS в HTML, не включили они поддержку code-injection во free-ware версию.</p>
<p>Да ну ладно похуй на подсветку и автокомплит, можно вынести JS и CSS в отдельные файлы, так даже правильнее. Но это ж пиздец, нельзя создать новый спринг модуль, ни наконфигурировать томкат, да вообще модулей наконфигурировать нельзя. Хорошо хоть <a href="http://mabp.kiev.ua/2009/04/09/install-maven-2/">мавен</a> работает. Вобщем я устал от этой хуеты и раз уж у меня на фирме все поголовно используют Eclipse пожалуй перейду ка я на него.</p>
<p>В каментах прошу оставить пару твиков и новн ишуес для эклипса, чтоб переход тяжелым не был. А то первый же затык был на выделении места под кучу, вот и пригодилась <a href="http://greenmice.info/ru/node/143" rel="nofollow external">статья из ридера</a>.</p>

<p>ЗЫ: завел новый тэг - <a href="http://mabp.kiev.ua/tag/hate/">HATE</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2010/03/02/bey-bey-intellij-idea-community-edition/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Col/Colgroup</title>
		<link>http://mabp.kiev.ua/2010/03/02/col-colgroup/</link>
		<comments>http://mabp.kiev.ua/2010/03/02/col-colgroup/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 10:04:57 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[hate]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1217</guid>
		<description><![CDATA[Это еще один псот ненависти к IE, и родился он из первой же задачи на новом проекте. Смысл задачи в том что надо сделать скроллер у таблицы, тоесть есть табличка в которой 10 столбиков но показывать надо только 3 и есть кнопочка вперед/назад которая меняет видимые столбики. Ну на мой любимый затык с математикой и [...]]]></description>
			<content:encoded><![CDATA[<p>Это еще один псот ненависти к IE, и родился он из первой же задачи на новом проекте. Смысл задачи в том что надо сделать скроллер у таблицы, тоесть есть табличка в которой 10 столбиков но показывать надо только 3 и есть кнопочка вперед/назад которая меняет видимые столбики. Ну на мой любимый затык с математикой и крайними случаями у меня ушло всего два часа :( FAIL! А вот на то чтобы заставить исчезать столбики целых два дня.</p>
<span id="more-1217"></span>
<p>Как обычно я решил использовать самый современные технологии, например тэг COL для управления колонками, казалось бы что тут такого страшного, <a href="http://www.quirksmode.org/css/columns.html" rel="nofollow external">все его поддерживают</a>, да не все могут скрыть, ну да ладно в IE8 работает и этого достаточно. Набросал скриптик на <a href="http://mabp.kiev.ua/tag/jquery">jquery</a> вроде такого</p>

<pre><code class="javascript">
$("#myTbl")
    .find("col")
    .css({visibility:"collapse"})
    .slice(firstVisible, firstVisible + columns)
    .css({visibility:""})
</code></pre>

<p>я решил что все уже позади, но не тут то было. Во-первых <a href="http://mabp.kiev.ua/tag/jquery/">jquery</a> не может различить видимые и невидимые колонки, о чем я оставил камент на странице описания селектора :visible , но похоже разработчики посчитали что это <a href="http://forum.jquery.com/topic/visible-selector" rel="nofollow external">баг репорт</a> и удалили его. Во-вторых чертов IE8 хоть и умеет прятать колонки не может их правильно отрисовать после этого, получаеться что текст всех скрытых колонок отображаеться под текстом первой видимой в несколько слоев, это легко убрать всего лишь нажав ctrl+A, но сами понимаете - это не выход.</p>
<p>Результатом всех этих мучений стало то, что пришлось итерироваться по всем ячейкам таблицы и скрывать неугодные.</p>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2010/03/02/col-colgroup/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Raphaël</title>
		<link>http://mabp.kiev.ua/2009/12/08/raphael/</link>
		<comments>http://mabp.kiev.ua/2009/12/08/raphael/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 22:27:46 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[2d]]></category>
		<category><![CDATA[hate]]></category>
		<category><![CDATA[Raphaël]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1145</guid>
		<description><![CDATA[Предисловие: мне поднакопилось что сказать, так что если я не успею высказать все мысли за одну статью, а так скорее всего и будет, то разбор примера по косточкам будет в следующей статье. Я использовал достаточно много сторонних библиотек для построения примера, думаю что все обсуждать не буду но обо всех скажу хоть слово. Дело началось [...]]]></description>
			<content:encoded><![CDATA[<p>Предисловие: мне поднакопилось что сказать, так что если я не успею высказать все мысли за одну статью, а так скорее всего и будет, то разбор примера по косточкам будет в <a href="http://mabp.kiev.ua/2009/12/08/advanced-theory-of-plugin-creation/">следующей статье</a>. Я использовал достаточно много сторонних библиотек для построения примера, думаю что все обсуждать не буду но обо всех скажу хоть слово.</p>
<span id="more-1145"></span>

<p>Дело началось не так давно, когда заказчик высказал идею что на сайте должен быть виджет позволяющий рисовать по верх картинки линии как в MS Paint. Более того линии которые ты нарисовал, нужно выделить, и в табличке рядом заполнить дополнительные параметры. У меня перед глазами пронеслись все <del>прожитые годы</del> библиотеки векторной и растровой графики для <a href="http://mabp.kiev.ua/category/programming/javascript/">javascript</a>. Сначала я думал что я буду использовать что-то на основе <a href="http://mabp.kiev.ua/tag/canvas/">canvas</a>, хорошо хоть опыт уже есть, но потом понял что в голове крепко засела мысль о Raphaël. Ну и хорошо, я давно хотел с ней (библиотекой) поработать, но не было реального примера.</p>

<p>В двух словах <a href="http://raphaeljs.com/" rel="nofollow external">Raphaël</a> - это библиотека которая умеет рисовать векторную графику в формате SVG во всех нормальных браузерах, в остальных она умеет рисовать в формате VML. Как она умеет это делать меня интересует мало, главное что она предоставляет более менее удобное и совершенно недокументированное API. Почему я говорю недокументированное?! Потому что глядя на <a href="http://raphaeljs.com/reference.html" rel="nofollow external">официальный мануал</a> я чуть не заплакал, там <del>нихуя нет</del> ничего нельзя понять. Ну я решил раз в мануале нет, пох, я тут код <a href="http://mabp.kiev.ua/tag/jquery/">jQuery</a> читаю нормально, что мне какой-то Raphaël, но был сильно не прав потому как в коде творится <del>полный пиздец</del> кромешный ужас летящий на крыльях ночи.</p>

<p>Нет, я прекрасно понимаю когда кто-то считает координаты <a href="http://ru.wikipedia.org/wiki/Кривая_Безье" rel="nofollow external">кривой Безье</a> второго порядка он должен писать нечто вроде</p>

<pre><code class="javascript">
Math.sqrt(Math.abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x)))
</code></pre>

<p>Тут даже можно догадаться что rx2 это произведение R (радиуса) на X (координаты по иксу) в квадрате</p>

<p>Я могу понять регулярное выражение которое проверяет валидность записи цвета в трех форматах (hex, rgb, <a href="http://ru.wikipedia.org/wiki/HSV_(цветовая_модель)" rel="nofollow external">hsb и hsl</a> можно считать как один)</p>

<pre><code class="javascript">
/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgb\(\s*([\d\.]+\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|rgb\(\s*([\d\.]+%\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\)|hs[bl]\(\s*([\d\.]+\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|hs[bl]\(\s*([\d\.]+%\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\))\s*$/i
</code></pre>

<p>Но, блядь, я не понимаю каким надо быть <a href="http://tema.livejournal.com/481967.html" rel="nofollow external">мудОфилом</a>, что бы писать вот так:</p>

<pre><code class="javascript">
path = ["C"][concat](a2c[apply](0, [d.x, d.y][concat](path.slice(1))))
now = [+from[attr][0] + pos * ms * diff[attr][0], +from[attr][1] + pos * ms * diff[attr][1], (2 in to[attr] ? to[attr][2] : E), (3 in to[attr] ? to[attr][3] : E)][join](S)
</code></pre>

<p>Я для особо "тупых" переведу: вот эти [concat] и [apply] это всего лишь вызов соответствующих методов, но почему же, блядь, не [slice] ?</p>

<pre><code class="javascript">
["C"].concat(a2c.apply(0, [d.x, d.y].concat(path.slice(1))))
</code></pre>

<p>а вот эти "2 in to[attr]" это ничто иное как</p>

<pre><code class="javascript">
if(to[attr] &#038;& to[attr][2])
	return to[attr][2]
else 
	return E // E = 2.71
</code></pre>

<p>Тут возникает вопрос почему так сложно, потому что если to[attr] == null, то to[attr][2] вызовет ошибку и прервет исполнение функции. С таким подходом код становиться нечитабельным и плохо сопровождаемым, но я понимаю что <a href="http://dmitry.baranovskiy.com/" rel="nofollow external">Дмитрия Барановского</a> все устраивает, поэтому он пишет еще такое:</p>

<pre><code class="javascript">
~~double
</code></pre>

<p>Оператор ~~ приводит double или строку вида "3.14" к integer, то есть к целому, то есть к 3.</p>

<pre><code class="javascript">
javascript:(function(){alert(~~(""+Math.PI))})()
</code></pre>

<p>Ну и последние - это сокращенные записи if-else, но не такие ?: а такие &#038;&|| , хотя насмотревшись на его код я и сам пару раз такое использовал</p>

<pre><code class="javascript">
if(c) b = c else b = d;
b = c ? c : d;
b = c &#038;& c || d;
</code></pre>

<p>На чём я закончил, перед тем как отвлечься на порыв ненависти к разработчику Raphaël?! Ах да я рассказывал <del>какая это классная библиотека</del> как искал описание API. После бесполезного чтения мануала и безрезультатного просмотра исходников я открыл примеры и начал заниматься реверс инженерингом, та еще радость, но это единственное что помогло. Потом еще в гугле нашелся удачный <a href="http://jeremyslade.com/2008/12/implementing-a-ruler-with-raphael-and-jquery/" rel="nofollow external">пример</a> который дал мне толчок для написания своего плагина.</p>

<p>Дальше больше...</p>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2009/12/08/raphael/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>PBank</title>
		<link>http://mabp.kiev.ua/2009/09/05/pbank/</link>
		<comments>http://mabp.kiev.ua/2009/09/05/pbank/#comments</comments>
		<pubDate>Sat, 05 Sep 2009 19:00:09 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[hate]]></category>
		<category><![CDATA[pbank]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1108</guid>
		<description><![CDATA[Несмотря на то что я люто-бешено ненавижу Приват Банк за их бюрократию и прочую хуйню многократно описаную на просторах интернета, я тут взялся написать одно приложение для них. Ну не дял них а для себя, ну не для себя а на продажу... но взялся написать и пишу. Смысл вот в чем: на прошлой недели появилось [...]]]></description>
			<content:encoded><![CDATA[<p>Несмотря на то что я люто-бешено ненавижу Приват Банк за их бюрократию и прочую хуйню многократно описаную на просторах <a href="http://google.com" rel="nofollow external">интернета</a>, я тут взялся написать одно приложение для них.</p>
<span id="more-1108"></span>
<p>Ну не дял них а для себя, ну не для себя а на продажу... но взялся написать и пишу. Смысл вот в чем: на прошлой недели появилось вот такое забавное <a href="https://liqpay.com/">API</a>. По сути обычный клент-банк, ничего особенного. Единственное что появилось оно только на прошлой недели! Этим я и решил воспользоватся. У них есть родное приложение для iPhone, а я решил написать приложение для Android'a. С одной стороны реальный опыт писания под телефон с другой может даже что-то заработаю. В результате двух дней работы моё приложение умеет показывать главную менюшку, имеет настройку мерчанта, и может показывать баланс. Пока все но это еще даже на альфу не претендует.</p>
<p>Вот пара скриншотов для затравки.</p>
<div style="text-align:center"><img src="/content/img/pbank/main.jpg" alt="Главное меню" /></div>
<div style="text-align:center"><img src="/content/img/pbank/preference.jpg" alt="Настройки мерчанта" /></div>
<div style="text-align:center"><img src="/content/img/pbank/balance.jpg" alt="Баланс" /></div>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2009/09/05/pbank/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>32 марта</title>
		<link>http://mabp.kiev.ua/2009/04/01/32-march/</link>
		<comments>http://mabp.kiev.ua/2009/04/01/32-march/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 12:20:49 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[Голоса в голове]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[hate]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=971</guid>
		<description><![CDATA[Ну это ж пиздец, новости читать нельзя, все нагло врут. ВикиПоиск закроют, Encarta тоже. Исходники ЛОРа будут доступны под GPL. Из ядра linux удалят ext2/3/4 , из FreeBSD - gcc. БАШ и тот на белорусский перевели, а гисметео обещает -20 на выходные. Да ебитесь вы все конем! Ненавижу массовые народные гуляния, особенно новый год, народ [...]]]></description>
			<content:encoded><![CDATA[<p>Ну это ж пиздец, новости читать нельзя, все нагло врут. ВикиПоиск закроют, Encarta тоже. Исходники ЛОРа будут доступны под GPL. Из ядра linux удалят ext2/3/4 , из FreeBSD - gcc. БАШ и тот на белорусский перевели, а гисметео обещает -20 на выходные. Да ебитесь вы все конем! Ненавижу массовые народные гуляния, особенно <a href="http://mabp.kiev.ua/2008/12/31/happy-new-year-200/">новый год</a>, народ становиться особо тупым.</p>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2009/04/01/32-march/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

