<?xml version="1.0" encoding="windows-1251"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
  <channel>
    <title>Chiffa.in.ua</title>
    <link>http://chiffa.in.ua/</link>
    
    <language>ru</language>
    <description />
   
    <lastBuildDate>Sat,  4 Apr 2009 23:11:38 +0200</lastBuildDate>
       	<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Chiffa" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="chiffa" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Как добавить свой блог в GoogleBuzz</title>
		<pubDate>Wed, 31 Mar 2010 08:29:06 +0200</pubDate>
				<description>Пошаговую HowTo для идиотов с ходу нагуглить не получилось. Поэтому пришлось покопаться и вывести формулу самостоятельно. Учитывая что фид, как и весь блог, самописный и корявый, получилось не сразу.
		<![CDATA[<p>Чтобы Ваш поток сознания попадал прямиком в Buzz (Живую ленту), Вам нужен сайт с рабочим atom и/или rss фидом и гугл аккаунт. Ага, спасибо, кэп!:) Что самое интересное, именно так и написано в большинстве руководств, которые попадались мне на глаза. Самой полезной оказалась <a target="_blank" href="http://code.google.com/apis/buzz/documentation/#connect">официальная документация</a>. А теперь по-порядку, исходя из моего печального и не очень опыта.</p><p>Требования к Вашему сайту:</p><p /><ul><li>Ссылка в head-e главной на фид.
<pre><code>&lt;link rel=&quot;alternate&quot; type=&quot;application/rss+xml&quot; title=&quot;Feed&quot; href=&quot;http://link.to.feed&quot; /&gt;</code></pre>
Проверкой что всё правильно служит значок &quot;Subscribe to this page...&quot; в адресной строке браузера
<img style="vertical-align: middle;" src="http://chiffa.in.ua/content/articles/snapshot4.png" /><br />
В моем случае, именно отстутствие этой ссылки было камнем преткновения. Полагаю, в большинстве бложных движков этот момент учтен и не требует вмешательства.</li><li>Ссылка там же на Ваш гугло-профиль.
<pre><code>&lt;link rel=&quot;me&quot; type=&quot;text/html&quot; href=&quot;http://www.google.com/profiles/#YourUsername#&quot;/&gt;</code></pre>
</li></ul><p>
</p>
<p>В google профиле:</p><p /><ul><li>В <a target="_blank" href="http://www.google.com/profiles/me/editprofile?edit=t#about">редактировании профиля</a>, в разделе Links, добавить ссылку на свой блог. <img style="vertical-align: middle;" src="http://chiffa.in.ua/content/articles/snapshot3.png" /><br />Теперь гугл знает, что у Вас есть блог <img style="vertical-align: middle;" src="http://chiffa.in.ua/content/articles/snapshot2.png" /> </li>
<li>И предлагает подключить его в Connected Sites
<img style="vertical-align: middle;" src="http://chiffa.in.ua/content/articles/snapshot5.png" />
</li>
</ul><p>Вот и вся премудрость. Вот Вам и введение в <a target="_blank" href="http://code.google.com/apis/socialgraph/">Social Graph API</a> :)</p>
		]]></description>
		<link>http://chiffa.in.ua/main/smokingroom/rubric/4/artic/22/</link>
		<guid isPermaLink="true">http://chiffa.in.ua/main/smokingroom/rubric/4/artic/22/</guid>
		
	</item>
	<item>
		<title>jQuery+jQueryUI: Всплывающее оповещение</title>
		<pubDate>Thu,  4 Mar 2010 12:59:10 +0200</pubDate>
				<description>Долгими зимними вечерами делала я интернет-магазин. Задача: при добавлении товара в корзину должно появляться привлекающее внимание оповещение. Внизу экрана по центру. И висеть там, как бы пользователь ни прокручивал страницу, до тех пор, пока он сам, ручками, оповещалку не закроет.&lt;br/&gt;Мое решение:
		<![CDATA[<script type="text/javascript">
function hide() {$('#basketPopUp').hide();}
function bounce(){var itemTitle = "Какая-то фиговина";   //заглушка на месте реального названия товара
var popupText = '<div style="text-align:center; border: 2px solid #3F5600; background:#FBFEFA; padding:7px">Товар <b>' + itemTitle + '</b> добавлен в корзину!<br/> <a href="#">Оформить заказ</a> | <a href="#" onclick="hide(); return false;">Закрыть</a></div>'; 
$('#basketPopUp').empty().append(popupText);

//высчитываем координаты
CalculatePosition();

//показываем с "прыгающим" эфектом
$('#basketPopUp').show("bounce", {}, 500);  
 
//координаты оповещалки будут пересчитываться каждый раз, как пользователь скролит страницу
$(window).scroll(function() { CalculatePosition(); });
}   function CalculatePosition(){

    var centerX = parseInt($(window).width() / 2) + $(window).scrollLeft();
    var centerY = $(window).height() + $(window).scrollTop(); 
    
    //горизонтально - по-центру
    var left = centerX - ( $('#basketPopUp').width() / 2); left +='px';
    //вертикально - 5 пикселей до нижней границы
    var top = centerY -  $('#basketPopUp').height() - 5; top += 'px';
    
    $('#basketPopUp').css('left', left); 
    $('#basketPopUp').css('top',  top); 
}</script><div id="basketPopUp" style="position: absolute;"> </div>
Где-то в html-коде заготовлен контейнер для будущей всплывалки. С абсолютным позиционированием, иначе &quot;кина не будет&quot;.<pre><code>&lt;div id=&quot;basketPopUp&quot; style=&quot;position:absolute;&quot;&gt;&amp;nbsp;&lt;/div&gt;   </code></pre>
<p>Показываем оповещение, когда товар добавлен в корзину. Например, в callback-функции ajax-запроса, этот товар добавляющего:</p><div style="overflow: hidden; width: 700px;"><pre><code class="javascript">var itemTitle = &quot;Какая-то фиговина&quot;;   //заглушка на месте реального названия товара<br />var popupText = 'Товар ' + itemTitle + 'добавлен в заказ! &lt;a href=&quot;#&quot;&gt;Оформить заказ&lt;/a&gt; | &lt;a href=&quot;javascript:closeBasketPopUp()&quot;&gt;Закрыть&lt;/a&gt;'; <br />$('#basketPopUp').empty().append(popupText);<br /><br />//высчитываем координаты<br />CalculatePosition();<br /><br />//показываем с &quot;прыгающим&quot; эфектом<br />$('#basketPopUp').show(&quot;bounce&quot;, {}, 500);  <br /> <br />//координаты оповещалки будут пересчитываться каждый раз, как пользователь скролит страницу<br />$(window).scroll(function() { CalculatePosition(); });<br /> </code></pre></div><p>Расположить див basketPopUp нужно внизу видимой части экрана и горизонтально выровнять по центру. Для этого получаем высоту и ширину клиентской области, зачения вертикального и горизонтального скроллов; вычисляем координаты центра экрана. И уже относительно центра рассчитываем left и top для нашего дива:</p><pre><code>function CalculatePosition(){<br />    //центр видимой области экрана<br />    var centerX = parseInt($(window).width() / 2) + $(window).scrollLeft();<br />    var centerY = $(window).height() + $(window).scrollTop(); <br />    <br />    //горизонтально - по-центру<br />    var left = centerX - ( $('#basketPopUp').width() / 2) + 'px';<br />    //вертикально - 5 пикселей до нижней границы<br />    var top = centerY -  $('#basketPopUp').height() - 5 + 'px';<br />    <br />    $('#basketPopUp').css('left', left); <br />    $('#basketPopUp').css('top',  top); <br />}</code></pre><div style="text-align: center;"><input type="button" value="Что получается?" onclick="bounce()" /></div><p>З.Ы. Замечен странный баг: если, не дождавшись пока див отпрыгает свое в рамках bounce эфекта, начать прокручивать страницу, его проглючивает и на пару секунд он улетает вправо. В коде самого эфекта не рылась за неимением времени. Если кто в курсе чё так, подскажите.</p>
		]]></description>
		<link>http://chiffa.in.ua/main/programming/rubric/1/artic/21/</link>
		<guid isPermaLink="true">http://chiffa.in.ua/main/programming/rubric/1/artic/21/</guid>
		
	</item>
	<item>
		<title>Miranda IconPack for Qutim</title>
		<pubDate>Thu, 18 Feb 2010 13:18:45 +0200</pubDate>
				<description>А вот и мой первый вклад в дело OpenSource. Красивых qt-приложений я писать не умею, художник из меня вообще никакой. По-сему, как говорится, от каждого по способностям: натырить и перепаковать. Всегда пожалуйста!
		<![CDATA[<div align="justify">
Акту вандализма подверглось пожалуй единственное виндовое приложение, за которым я буду скучать - Miranda IM. Путем несложных магических ухищений в мой Qutim перекочевала большая часть привычных иконок. В отличии от &quot;родных&quot; кутимовских, равно как и широко распостраненных квиповских, они не просто не раздражают, а таки нравятся:)
</div><div align="justify"> </div><div>
<table id="stat_img">
<tbody><tr>
<td style="padding-right: 3px; "><img src="http://chiffa.in.ua/lab/qutim/icq-stat.png" />
</td>
<td style="padding-right: 3px; "><img src="http://chiffa.in.ua/lab/qutim/jabber-stat.png" />
</td>
<td style="padding-right: 3px; "><img src="http://chiffa.in.ua/lab/qutim/x-status.png" />
</td>
</tr>
</tbody></table><table>
</table>
</div>
<div align="justify"></div><div align="justify">Если кому-то тоже приглянулись - 
<a href="/lab/qutim/MirandaIconPack_byChiffa.tar"> делюсь!</a><br />
Папку из архива нужно выложить в <code>~/.config/qutim/systemicons</code>. А затем выбрать в User interface settings =&gt; System icon theme.
<br />З.Ы. Права на иконки принадлежат тем, кто их рисовал. Ни в коем случае не претендую!</div>
		]]></description>
		<link>http://chiffa.in.ua/main/linux/rubric/6/artic/19/</link>
		<guid isPermaLink="true">http://chiffa.in.ua/main/linux/rubric/6/artic/19/</guid>
		
	</item>
	<item>
		<title>Buzzz...</title>
		<pubDate>Mon, 15 Feb 2010 22:39:30 +0200</pubDate>
				<image>
		    <url>http://chiffa.in.ua/content/articles/1266261800_sm.png</url>
		    <title>Buzzz...</title>
		    <link>http://chiffa.in.ua/main/review/rubric/5/artic/20/</link>
		</image>
				<description>Кто еще не в ГуглоТвиттере, а? Всё, попали мы, граждане. Теперь без ведома Гугла ни вздохнуть, ни... ну, сами знаете. Утверждение о том, что интернет - одно большое палево, в очередной раз утвердило свои позиции.
		<![CDATA[<p align="justify">Владельцы айФонов и прочих андроидов, в дополнение, имеют счастливую возможность палить свои координаты на карте. Трепещите, неверные!</p><p align="justify">Я, конечно, стебусь и ёрничаю. Не всё так страшно. Совсем не обязательно включать весь комплект сервисов и поминутно изливать душу <strike>гуглу</strike> интренету. Лично я пока использую buzz как шарилку понравившихся статей из ридера. Я, кстати, не одна такая, так что информационный поток, льюшийся на мою глупую голову моментально вырос в разы. Святые Угодники, я и свой-то ридер вычитывать не успеваю...</p><p align="justify">А вообще, отличный сервис. Думаю, каждый со временем сможет найти ему применение. Остается надееться только на адекватность моего контакт-листа, и на то, что мне не прийдется постоянно читать о том, что &quot;идет дождь, я пью зеленый чай, думая о любви и смерти...&quot;<br>Со своей стороны, обещаю не постить аналогичную муру.</p><p align="justify">Всем приятного бузззения!:)</p><p />
		]]></description>
		<link>http://chiffa.in.ua/main/review/rubric/5/artic/20/</link>
		<guid isPermaLink="true">http://chiffa.in.ua/main/review/rubric/5/artic/20/</guid>
		
	</item>
	<item>
		<title>kUbuntu 9.10</title>
		<pubDate>Wed,  3 Feb 2010 00:00:22 +0200</pubDate>
				<image>
		    <url>http://chiffa.in.ua/content/articles/1265061622_sm.png</url>
		    <title>kUbuntu 9.10</title>
		    <link>http://chiffa.in.ua/main/linux/rubric/6/artic/17/</link>
		</image>
				<description>Поставила на работе. С сегодняшнего дня меня можно считать окончательно "опингвиненой" - дома &lt;a href="http://www.opensuse.org/" target="_blank"&gt;OpenSuse 11.1&lt;/a&gt;. Теперь винда мне нужна только чтобы заливать музыку через гребаный iTunes в гребаный iPod. А, и любимую, годами настраиваемую Миранду жалко, да...
		<![CDATA[<p align="justify">
Изначально, когда в офисе пошли разговоры о повальном переходе на Линукс, я собралась ставить <a href="http://fedoraproject.org/" target="_blank">Fedora 12</a>. Скачала дистрибутив, попыталась записать iso-шник, запорола три болванки, плюнула и свалила на выходные. А на выходных осенила меня важная мысль, что это, дескать, Рабочая Машина. Соответсвтенно, надо будет быстро разобраться и начать работать и времени на пляски с бубном вокруг незнакомой системы не будет. А рядом со мной уже сидит чувак с Убунтой. Так что не буду выпендриваться.</p><p align="justify">&quot;Сокращенная&quot; пляска с бубном заняла полтора рабочих дня... С перерывами на работу -перезагрузками в винду и обратно. ATI-шная карточка и два монитора: страшная сказка со счастливым концом. Идеальный xorg.conf выглядит вот так:</p><div style="overflow: hidden; width: 700px;"><pre><code>Section &quot;Screen&quot;
	Identifier	&quot;Default Screen&quot;
	DefaultDepth	24
        SubSection &quot;Display&quot;
	   Depth 24
	   Virtual 3200 2000
        EndSubSection
EndSection

Section &quot;Monitor&quot;
	Identifier   &quot;AcerMonitor-1&quot;
	Modeline &quot;1280x1024&quot;  138.54  1280 1368 1504 1728  1024 1025 1028 1069  -HSync +Vsync
	Option   &quot;PreferredMode&quot; &quot;1280x1024&quot;
	Option	 &quot;DPMS&quot; &quot;true&quot;
EndSection

Section &quot;Monitor&quot;
	Identifier   &quot;AcerMonitor-2&quot;
	Modeline &quot;1280x1024&quot;  138.54  1280 1368 1504 1728  1024 1025 1028 1069  -HSync +Vsync
	Option   &quot;PreferredMode&quot; &quot;1280x1024&quot;
	Option 	 &quot;RightOf&quot; &quot;AcerMonitor-1&quot;
	Option	 &quot;DPMS&quot; &quot;true&quot;
EndSection

Section &quot;Module&quot;
	Load	&quot;glx&quot;
EndSection

Section &quot;Device&quot;
	Identifier	&quot;Default Device&quot;
	Driver	        &quot;fglrx&quot;
	BusID           &quot;PCI:1:0:0&quot;
        Option          &quot;Monitor-CRT1&quot; &quot;AcerMonitor-1&quot;
        Option          &quot;Monitor-CRT2&quot;  &quot;AcerMonitor-2&quot;
EndSection</code></pre></div>
<p>Я его бляха распечатаю, заламинирую и повешу на стенку в рамочку, в память о моих страданиях.</p><p>Ну а дальше всё пошло своим ходом. По крайней мере с &quot;мониторным геморроем&quot; ни в какое сравнение не идет.</p><p>Так что теперь у меня:</p><p /><ul><li><a href="http://kde.org/" target="_blank">KDE 4.3</a></li><li>файловый менеджер - <a href="http://www.krusader.org/" target="_blank">Krusader</a></li><li>icq и qtalk - <a href="http://qutim.org/" target="_blank">Qutim</a></li><li>браузеры - <a href="http://www.google.com.ua/chrome" target="_blank">Chrome</a> и <a href="http://www.mozilla.com/" target="_blank">Firefox</a> (ну и Konqueror)</li><li>среда разработки - <a href="http://www.eclipse.org/" target="_blank">Eclipse</a></li><li>плеер - <a href="http://amarok.kde.org/" target="_blank">Amarok2</a></li><li>смотрелка видео - <a href="http://www.videolan.org/vlc/" target="_blank">VLC</a></li></ul>Хочу заметить, что с точки зрения &quot;из коробки всё зашибись&quot; Ubuntu гораздо более &quot;вылизаный&quot; дистрибутив чем та же OpenSuse. И обилие хаутушек в интернете несказанно порадовало. Осталось только привыкнуть к apt с его .deb-ами, который, в отличии от yast-а и .rpm-ов, мне совершенно не понравился.<br /><p>
</p><p>&quot;Земля, прощай! В добрый путь!&quot; © мультфильм &quot;Летучий корабль&quot;</p>
		]]></description>
		<link>http://chiffa.in.ua/main/linux/rubric/6/artic/17/</link>
		<guid isPermaLink="true">http://chiffa.in.ua/main/linux/rubric/6/artic/17/</guid>
		
	</item>
	<item>
		<title>jQuery: создание DOM-элементов "на лету"</title>
		<pubDate>Wed, 27 Jan 2010 12:48:03 +0200</pubDate>
				<description>Напоминалка самой себе, что бы не забыть как это делается. Есть соответствующие плагины, но не всегда есть смысл их подключать. Ну и уметь работать с "чистой" jQuery полезно и правильно. Плагинов-то любой дурак нацеплять может!
		<![CDATA[<p>Способ был обнаружен в ходе выполнения тестового задания во время поиска новой работы. Классная, кстати, была задачка - всеобъемлющая и интересная с точки зрения самообразования.</p><p>Возьмем известный пример - загрузка произвольного количества файлов одним махом. Есть формочка с двумя полями: файл и комментарий; и есть ссылка &quot;еще одну фотку &quot;:</p><div style="overflow: hidden; width: 700px;"><pre><code>&lt;div id=&quot;content&quot;&gt;    <br />    &lt;form id=&quot;img_upload&quot; name=&quot;img_upload&quot; method=&quot;POST&quot;  enctype=&quot;multipart/form-data&quot;  action=&quot;upload.php&quot;&gt;<br />        &lt;div id=&quot;img_0&quot; class=&quot;imgField&quot;&gt;<br />            &lt;div&gt;&lt;span&gt;Image&lt;small class=&quot;req&quot;&gt;*&lt;/small&gt;&lt;/span&gt;&lt;input type=&quot;file&quot; name=&quot;file_0&quot; id=&quot;file_0&quot;&gt;&lt;/div&gt;<br />            &lt;div&gt;Description&lt;/div&gt;<br />            &lt;textarea name=&quot;descr_0&quot; id=&quot;descr_0&quot;&gt;&lt;/textarea&gt;<br />        &lt;/div&gt;<br />        &lt;input type=&quot;submit&quot; value=&quot;Upload&quot;&gt;<br />    &lt;/form&gt;<br />    &lt;div&gt;&lt;a href=&quot;javascript:moreFields()&quot;&gt;one more image &amp;raquo;&lt;/a&gt;&lt;/div&gt;<br />&lt;/div&gt;</code></pre></div><p>
Задача moreFields() - создать еще один div класса imgField со всем его содержимым. Ну и конечно, надо учесть уникальные атрибуты name и id для полей формы, чтоб потом всё это корректно отправилось. На самом деле всё просто, как угол дома. Но почему-то эта очевидная идея стала для меня откровением:) Так что, хозяйке на заметку:</p><pre><code class="javascript">var fieldCounter = 0;<br />function moreFields(){<br />    fieldCounter++;<br />    <br />    $('#img_upload').prepend(<br />        $('&lt;div/&gt;')<br />            .addClass('imgField')<br />            .attr('id','img_'+fieldCounter)<br />            .append(<br />                $('&lt;div/&gt;')<br />                    .append(<br />                        $('&lt;span/&gt;')<br />                        .text('Image')<br />                        .append(<br />                            $('&lt;small/&gt;')<br />                                .addClass('req')<br />                                .text('*')<br />                        )<br />                    )<br />                    .append(<br />                        $('&lt;input/&gt;')<br />                            .attr('type', 'file')<br />                            .attr('name', 'file_'+fieldCounter)<br />                            .attr('id', 'file_'+fieldCounter)<br />                    )<br />            )<br />            .append(<br />                $('&lt;div/&gt;')<br />                    .text('Description')<br />            )<br />            .append(<br />                $('&lt;textarea/&gt;')<br />                    .attr('name', 'descr_'+fieldCounter)<br />                    .attr('id', 'descr_'+fieldCounter)<br />            )<br />    );<br />}</code></pre>
<p>В результате получается вот такая формочка:</p>
<style>
	#example{
	    padding: 10px 0px 10px 25px;
            width: 300px;
           border: medium ridge lavender;
	}
        #example textarea{   
            width: 256px;
       
	}
	.imgField div{
	    padding:3px;
	}
	.imgField :first-child span{
	    margin-right:32px;
	}
	.imgField :last-child span{
	    margin-right:5px;
	}
	.req{color:red}
</style>

<script type="text/javascript">
var fieldCounter = 0;
function moreFields(){
	fieldCounter++;
	
	$('#img_upload').prepend(
	    $('<div/>')
	        .addClass('imgField')
	        .attr('id','img_'+fieldCounter)
	        .append(
				$('<div/>')
			    	.append(
			        	$('<span/>')
						.	text('Image')
						.append(
					    	$('<small/>')
					        	.addClass('req')
					        	.text('*')
						)
		    		)
				    .append(
				        $('<input/>')
							.attr('type', 'file')
							.attr('name', 'file_'+fieldCounter)
							.attr('id', 'file_'+fieldCounter)
				    )
	        )
	        .append(
	        	$('<div/>')
	        		.text('Description')
	        )
	        .append(
	        	$('<textarea/>')
	        		.attr('name', 'descr_'+fieldCounter)
	        		.attr('id', 'descr_'+fieldCounter)
	        )
	);
}
</script>

<div id="example">	
	<form id="img_upload" name="img_upload" method="POST" enctype="multipart/form-data" action="http://chiffa.in.ua/cms/upload.php">
	    <div id="img_0" class="imgField">
	        <div><span>Image<small class="req">*</small></span><input type="file" name="file_0" id="file_0" /></div>
	        <div>Description</div>
	        <textarea name="descr_0" id="descr_0">	  </textarea>
	    </div>
	    <input type="submit" value="Upload" />
	</form>
	<div><a href="javascript:moreFields()">one more image »</a></div></div>
		]]></description>
		<link>http://chiffa.in.ua/main/programming/rubric/1/artic/16/</link>
		<guid isPermaLink="true">http://chiffa.in.ua/main/programming/rubric/1/artic/16/</guid>
		
	</item>
	<item>
		<title>"Саламалейкум, садык! Зайе ссаха?"</title>
		<pubDate>Thu, 31 Dec 2009 21:42:01 +0200</pubDate>
				<description>Каждый уважающий себя представитель &lt;a href="http://lurkmore.ru/%D0%9E%D1%84%D0%B8%D1%81%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BB%D0%B0%D0%BD%D0%BA%D1%82%D0%BE%D0%BD"&gt;ОП&lt;/a&gt; должен отдохнуть в Египте и Турции. Факт. Боян.&lt;br&gt;
Но когда у вас на работе жопа, на душе камень, в голове дурные мысли, а на улице декабрьский холодрюндель... А тут вам на голову сваливается возможность оказаться там, где лето, солце и можно ни о чем не думать. Согласитесь, трудно отказать себе в удовольствии :)
		<![CDATA[<p align="justify">
И вот, Египет на Рождество. Про то, что &quot;из зимы в лето&quot; и &quot;санта клаусы с дедами морозами под пальмой&quot;, это все конечно же банально. Но... впечатляет, черт побери!</p><p align="justify">Утром 22 декабря я проснулась дома в хреновом настроении, прикидывая как бы угробить оставшиеся дни уходящего года. А 23-го примерно в то же самое время самолет с моей бренной тушкой на борту приземлился в городе Хургаде. Добираться до отеля по 25-градусной жаре в зимних сапогах то еще удовольствие, но сам отель вполне порадовал. Для человека, привыкшего отдыхать в Крыму &quot;у бабы Нюры&quot;, так и вовсе культурный шок.</p><p align="justify">
<table><tbody><tr>
<td style="padding-right: 4px;"><img src="/content/egypt/IMG_9280.JPG" /></td><td><img src="http://chiffa.in.ua/content/egypt/IMG_9230.JPG" /></td>
</tr></tbody></table> </p><p align="justify" /><p align="justify">На этом культурный шок временно закончился, потому что там все сцуко говорят по-русски! И отдыхающие и персонал. Я тщетно напрягала слух в попытках уловить обрывки английской, немецкой или хотябы польской речи. Шиш! Правда ближе к Новому Году начали появляться иностранцы - немцы, поляки, итальянцы и вроде бы даже англичане. И я радовалась за Египет как за родной - ездят все таки сюда европейцы, не гнушаются!:)</p><p align="justify">Ввиду горящести путевки и горячечности поездки бюджет был ограничен вплоть до &quot;к чёрту всё, что не в all inclusive&quot;. Но проваляться тюленихой на пляже все 7 дней тоже не вариант, так что пару экскурсий осилить все же удалось.</p><p align="justify">Покатушки по пустыне на джипах</p>
<table><tbody><tr>
<td style="padding-right: 4px;"><img src="/content/egypt/IMG_8843.JPG" /></td><td><img src="http://chiffa.in.ua/content/egypt/IMG_8846.JPG" /></td>
</tr></tbody></table>
<p align="justify">квадроциклах</p><p align="justify"><img src="/content/egypt/IMG_8829.JPG" style="padding-left: 50px;" /></p><p align="baseline">и еще какой-то фиговине</p><p align="justify"><img style="padding-left: 50px;" src="/content/egypt/IMG_8877.JPG" /></p><p align="justify">в Сочельник католического Рождества. Квадроциклы мне понравились:) Правда медленно... Народ собрался разный, отнють не все лихачи. А какая-то тётка всю дорогу пыталась потерять управление и выехать из колонны или хоть кого-нибуть затаранить. Сама я буквально оскорбилась, когда при выезде из гаража ко мне моментально подсел месный инструктор и начал помогать крутить руль и озабочено переспрашивать всё ли у меня в порядке. Как нам объяснили, именно девочки моей комплекции чаще всего не справляются с машиной. Но у меня, хвала аллаху, никаких трудностей не возникло. Хотя я наверное и выгляжу на квадроцикле как пятилетний ребенок на велосипеде &quot;Украина&quot;.</p><p align="justify">Потом было посещение бедуинской деревни, где живут странные, но похоже вполне довольные жизнью предприимчивые люди</p><table><tbody><tr>
<td style="padding-right: 4px;"><img src="/content/egypt/IMG_9006.JPG" /></td><td><img src="http://chiffa.in.ua/content/egypt/IMG_9005.JPG" /></td>
</tr></tbody></table> <p align="baseline">Нас покатали на верблюдах и содрали &quot;ван доляр&quot; за сьемку девочки с предыдущей фотки.</p><p align="justify"><img style="padding-left: 50px;" src="/content/egypt/IMG_8984.JPG" /></p><p align="justify">На следующий день скатались в саму Хургаду, где наконец-то был обнаружен месный колорит</p><table><tbody><tr>
<td style="padding-right: 4px;"><img src="/content/egypt/IMG_9156.JPG" /></td><td><img src="http://chiffa.in.ua/content/egypt/IMG_9180.JPG" /></td>
</tr></tbody></table><p align="justify">большая мечеть</p>
<table><tbody><tr>
<td style="padding-right: 4px;"><img src="/content/egypt/IMG_9162.JPG" /></td><td><img src="http://chiffa.in.ua/content/egypt/IMG_9167.JPG" /></td>
</tr></tbody></table><p align="justify">и главный закон египетского малого и среднего бизнеса: продать русскоговорящему туристу нахрен ему не нужное говно за одни доллар любым способом. Особенно популярен прием &quot;товар в лицо&quot; - это когда предлагаемую хню вам тычут под нос, заступив дорогу, и хрена с два быстро отобьешься. С первого раза &quot;Нет, спасибо&quot; практически никто не понимает, а &quot;Пошел на х*й!&quot; всё таки не дипломатично:) К вечеру мой северный темперамент не выдержал месного накала торгашеских страстей и я начала порыкивать в ответ.</p><p align="justify">Короче. В Хургаде есть HardRock Cafe. Наконец-то побывали!:)</p><table><tbody><tr>
<td style="padding-right: 4px;"><img src="/content/egypt/IMG_9185.JPG" /></td><td><img src="http://chiffa.in.ua/content/egypt/IMG_9194.JPG" /></td>
</tr></tbody></table><p align="justify">Последнее и самое приятное впечатление от экскурсии. Так то...</p><p align="justify">Пирамидам пришлось отказать. Ибо далеко, дорого и, по отзывам, утомительное ниочем. Но совсем забить на египетские древности тоже нехорошо и глупо. Поэтому был Луксор. С посещением Эль Карнака</p>
<table><tbody><tr>
<td style="padding-right: 4px;"><img src="/content/egypt/IMG_9441.JPG" /></td><td><img src="http://chiffa.in.ua/content/egypt/IMG_9401.JPG" /></td>
</tr></tbody></table><p align="justify">дворца царицы Хатшепсут</p>
<table><tbody><tr>
<td style="padding-right: 4px;"><img src="/content/egypt/IMG_9546.JPG" /></td><td><img src="http://chiffa.in.ua/content/egypt/IMG_9566.JPG" /></td>
</tr></tbody></table><p align="justify">и Долины Царей (фоток нет). Еще одна особенность нашего туриста: &quot;Ваша первая мысль, когда вы видите перечеркнутый фотоаппарат или камеру?&quot; -&quot;О, точно - фотик!&quot;. Еще в автобусе всех предупредили, что снимать в гробницах нельзя. При входе в каждую гробницу висит соответствующее предупреждение, в том числе по-русски. Но! Есть же еще мобильный телефон! Чем не применул воспользоваться некий особо умный и талантливый мальчонка из нашей группы, устроив тем самым скандал с секъюрити и нервотрепку гиду. Наш народ непобедим, блять!</p><p align="justify">Чесно говоря, мне, пускавшей восторженные слюни на всех лекциях по египтологии в универе, было интересно не только прослушать краткую экскурсию и быстренько пофоткаться на фоне храмов. Но времени было очень в обрез и всё приходилось осматривать буквально на бегу.</p><table><tbody><tr>
<td style="padding-right: 4px;"><img src="/content/egypt/IMG_9370.JPG" /></td><td><img src="http://chiffa.in.ua/content/egypt/IMG_9378.JPG" /></td>
</tr></tbody></table><p align="justify">В ходе поездки было выявлено лекарство от &quot;Адын долляр, дрюг!&quot; - великий и могучий английский язык (немецки и французкий тоже подходят, но на них я не умею уверенно огрызаться). Заставив продавца однодолларовой хренотени усомниться в своей принадлежности к пост-советскому пространству, получаем моментальное отставание или, в крайнем случае, пару секунд на смыться. Вообще странно... Платежеспособность европейцев значительно выше, вот им бы и парили.</p><p align="baseline">Но общее впечатление от недели в Египте - мегапозитивное. Погода прекрасная, море чистое, кормят вкусно, месные напитки вполне приличные (зря нас так пугали). Недостатка отметила всего два: 1) почему в пятизвездочном блин отеле нет в ванной шампуня и зубной пасты?! 2) безбожно дорогой инет - 12 баксов в час (!!!). Впрочем, первое раздражало меня только потому, что пасту и шампунь я забыла дома, а второе нафиг мне там не было нужно - по-большому счету:)</p><p align="justify"><img style="padding-left: 50px;" src="/content/egypt/IMG_9269.JPG" /></p><p align="justify">P.S. И, конечно же, большое спасибо киевскому аеропорту за новогодний подарок - сутки в Хургаде на шару. :)</p><p align="justify">P.P.S. &quot;Саламалейкум, садык! Зайе ссаха?&quot; - &quot;Привет, друг! Как дела?&quot; Фраза, которую приходилось чаще всего слышать от месного населения. За правильность транскрипции не отвечаю)</p><p />
		]]></description>
		<link>http://chiffa.in.ua/main/smokingroom/rubric/9/artic/15/</link>
		<guid isPermaLink="true">http://chiffa.in.ua/main/smokingroom/rubric/9/artic/15/</guid>
		
	</item>
	<item>
		<title>Логотип на фотках</title>
		<pubDate>Fri,  4 Dec 2009 13:20:26 +0200</pubDate>
				<description>Покажу пример функции, с помощью которой можно реализовать наложение логотипа на загружаемую фотогафию. Я ее использую в своей фотогалерее, которая сейчас находится в стадии "мучительного дописывания". Для того, чтобы использовать этот пример потребуется поддрежка GD. Так же  не помешает немного художественного таланта для создания приличного логотипа:)
		<![CDATA[<p>
&quot;Клеймо&quot; для фоток будет представлять собой картинку в формате *.png, высотой 25-45px (можно больше, но получится громоздко; можно меньше, но будет мелкое ни о чем), на прозрачном фоне. Желательно саму надпись тоже сделать полупрозрачной.</p><p /><div style="background-color: black; text-align: center; "><img hspace="0" vspace="0" border="0" align="absmiddle" src="http://chiffa.in.ua/img/chiffa.png" /></div>
<p /><p>Художник из меня, как... эээ... ну вобщем никакой, так что, не мудрствуя лукаво, сделала вот такую надпись - 45*178, примерно 25% прозначности.</p><p>И теперь при загрузке фотографии, обработаем её такой вот функцией, которой передаем путь к свежезагруженной фотке и, опционально, путь к желаемой &quot;вотермарке&quot;:    </p><pre><code>    function insertLogoToImage ($filename, $pathToLogo='') {<br />        if(!$pathToLogo) $pathToLogo = ROOT_HTML_PATH.&quot;img/chiffa.png&quot;;<br /><br />        $logoSize = getimagesize($pathToLogo);<br /><br />        $imgSize = getimagesize($filename);<br />        $file_info = pathinfo($filename);<br />        $ext = $file_info[&quot;extension&quot;];<br /><br />        if(function_exists('imagecreatefrompng')) {<br />            $imgLogo = imagecreatefrompng($pathToLogo);<br />        }<br /><br />        if ( ($ext == 'jpg' || $ext == 'jpeg') &amp;&amp; function_exists('imagecreatefromjpeg') ) {<br />            $img = imagecreatefromjpeg($filename);<br />        }<br />        elseif ($ext == 'png' &amp;&amp; function_exists('imagecreatefrompng')) {<br />            $img = imagecreatefrompng($filename);<br />        }<br />        elseif ($ext == 'gif' &amp;&amp; function_exists('imagecreatefromgif')) {<br />            $img = imagecreatefromgif($filename);<br />        }<br />        else {<br />            return false;<br />        }<br /><br />        if (!$img) return false;<br /><br />        if(function_exists('imagecopy')) {<br />            $xDst = $imgSize[0]-$logoSize[0]-3;<br />            $yDst = $imgSize[1]-$logoSize[1]-3;<br />            imagecopy ($img, $imgLogo, $xDst, $yDst, 0, 0, $logoSize[0], $logoSize[1]);<br />        }<br />        else return false;<br /><br />        if ( ($ext == 'jpg' || $ext == 'jpeg') &amp;&amp; function_exists('imagejpeg') ) {<br />            $img = imagejpeg($img, $filename, 90);<br />        }<br />        elseif ($ext == 'png' &amp;&amp; function_exists('imagepng')) {<br />            $img = imagepng($img, $filename);<br />        }<br />        elseif ($ext == 'gif' &amp;&amp; function_exists('imagegif')) {<br />            $img = imagegif($img, $filename);<br />        }<br />        else {<br />            return false;<br />        }<br />    }</code>  </pre>  Место логотипа на картинке, в нашем случае - правый нижний угол с отступом по 3 пикселя от краев:<pre><code> $xDst = $imgSize[0]-$logoSize[0]-3;<br /> $yDst = $imgSize[1]-$logoSize[1]-3;</code></pre>
<p>При желани можно впаять хоть в центр</p><pre><code> $xDst = $imgSize[0]/2-$logoSize[0]/2;<br /> $yDst = $imgSize[1]/2-$logoSize[1]/2;</code></pre>
<p align="baseline">В результате получится что-то вроде</p>
<p><img src="http://chiffa.in.ua/lab/dsc_0524.jpg" /></p>
<p align="center"><b>Было</b></p>
<p><img src="http://chiffa.in.ua/content/gallery/1259922401.jpg" /></p><p align="center"><b>Стало</b></p><p>
</p>
		]]></description>
		<link>http://chiffa.in.ua/main/programming/rubric/2/artic/9/</link>
		<guid isPermaLink="true">http://chiffa.in.ua/main/programming/rubric/2/artic/9/</guid>
		
	</item>
	<item>
		<title>ООП vs. switch-case</title>
		<pubDate>Wed, 22 Jul 2009 00:21:43 +0200</pubDate>
				<description>Все началось с идеологического спора на работе о целесообразности блока switch-case длинной в 3 экрана и необходимости заменить его красивым паттерном.
Покажу мой простой пример замены этой громоздкой конструкции в PHP. Об удобстве использовния и читабельности обоих решений можно спорить, но думаю мой пример имеет право на жизнь и возможно будет кому-нибуть полезен.
		<![CDATA[<p>Идея такова: есть класс - DecisionTaker.class.php, который регистрирует обрабочики событий и хранит их в массиве формата [событие] =&gt;[действие]. И при наступлении конкретного события вызывает соответствующий обработчик посредством метода Execute().</p><pre><code><br /><span class="keyword">class</span> DecisionTaker{<br />    <br /><span class="keyword">private static</span> <span class="variable">$actionsArr</span> = <span class="keyword">array</span>();<br />        <br /><span class="keyword">public function</span> RegisterHandler(<span class="variable">$action</span>, <span class="variable">$handler</span>){<br />        <span class="tag">if</span>(isset(<span class="variable">$this</span>-&gt;actionsArr[$action]) || $this-&gt;actionsArr[$action] &gt; ''){<br />            <span class="tag">echo</span><span class="string"> 'Fail to register handler. The action with such name already exists'</span>;<br />            <span class="keyword">return</span> <span class="tag">false</span>;     <br />        }<span class="tag">else</span>{<br />            <span class="variable">$this</span>-&gt;actionsArr[<span class="variable">$action</span>] = <span class="variable">$handler</span>;<br />        }<br />}<br />    <br /><span class="keyword">public function</span> Execute(<span class="variable">$action</span>, <span class="variable">$item_id</span>){<br />        <span class="tag">if</span>(isset(<span class="variable">$this</span>-&gt;actionsArr[<span class="variable">$action</span>]) || <span class="variable">$this</span>-&gt;actionsArr[<span class="var">$action</span>] &gt; <span class="string">''</span>)<br />           <span class="variable">$this</span>-&gt;actionsArr[<span class="variable">$action</span>](<span class="variable">$id</span>);        <br />    }<br />}</code></pre>
<p>В отдельном файле handlers.php опишем и зарегистрируем пару тестовый функций.<br />

</p>
<pre><code><br /><span class="variable">$actionManager</span> = <span class="tag">new</span> DecisionTaker();<br /><span class="keyword">function</span> editItem(<span class="variable">$item_id</span>){<br />    <span class="tag">echo</span> <span class="string">'Editing item №'</span>.<span class="variable">$item_id</span>;<br />}<br /><br /><span class="variable">$actionManager</span>-&gt;RegisterHandler(<span class="string">'edit'</span>, <span class="string">'editItem'</span>);<br /><br /><span class="keyword">function</span> deleteThisShit(<span class="variable">$item_id</span>){<br />    <span class="tag">echo</span> <span class="string">'Deleting item №'</span>.<span class="variable">$item_id</span>;<br />}<br /><span class="variable">$actionManager</span>-&gt;RegisterHandler(<span class="string">'delete'</span>, <span class="string">'deleteThisShit'</span>);</code></pre>
<p> 
Конечно, в случае с двумя функциями выгоды мало. А вот если их 10 и более, вместо неуклюжего блока switch-case просто отдаем  actionManager-у $_GET['action' ] и $_GET['item'], а он решает что дальше делать.</p>
<pre><code><br /><span class="keyword">include_once</span> <span class="string">'DecisionTaker.class.php'</span>;<br /><span class="keyword">include</span> <span class="string">'handlers.php'</span>;<br /><br /><span class="tag">if</span>(isset(<span class="variable">$_GET</span>[<span class="string">'action'</span>]) &amp;&amp; isset(<span class="variable">$_GET</span>[<span class="string">'id'</span>]) &amp;&amp; <span class="variable">$_GET</span>[<span class="string">'id'</span>]&gt;<span class="string">''</span> &amp;&amp; <span class="variable">$_GET</span>[<span class="string">'action'</span>]&gt;<span class="string">''</span>)<br />	<span class="variable">$actionManager</span>-&gt;Execute(<span class="variable">$_GET</span>[<span class="string">'action'</span>], <span class="variable">$_GET</span>[<span class="string">'id'</span>]);</code></pre>
<p>Класс, естественно, требует доработки. Да и не класс это вовсе. Так, эскиз решения. Которое, возможно, как-нибуть прийдется ко двору.</p><p>З.Ы. Спасибо ребятам с <a target="_blank" href="http://pyha.ru">пыха.ру</a> за помощь в нахождении глупых ошибок:)</p>
		]]></description>
		<link>http://chiffa.in.ua/main/programming/rubric/2/artic/10/</link>
		<guid isPermaLink="true">http://chiffa.in.ua/main/programming/rubric/2/artic/10/</guid>
		
	</item>
	<item>
		<title>Amarok 2.1.1 - наконец-то обновилась!</title>
		<pubDate>Wed, 24 Jun 2009 13:22:00 +0200</pubDate>
				<image>
		    <url>http://chiffa.in.ua/content/articles/1245878623_sm.png</url>
		    <title>Amarok 2.1.1 - наконец-то обновилась!</title>
		    <link>http://chiffa.in.ua/main/linux/rubric/6/artic/13/</link>
		</image>
				<description>Некоторое время назад мне пришлось вернуться на старый Амарок 1.4. Так как пакет kde4-amarok чудесным образом пропал из моих репозитариев. Как оказалось, к версии 2.1 ребята из amarok team переименовали пакеты, а yast их маневра не понял. Приурочить переустановку я собиралась к обновлению системы до 11.1, но руки так и не дошли... И вот, буквально пару часов назад, разгребая rss-ленты, наткнулась на сообщение о релизие. Решила попробовать поставить и - о чудо! - поняла откуда были все мои предыдущие проблемы. Так что, ориентированный на третьи "кеды" 1.4 Амарок ушел в топку, а его место занял свежий 2.1.1 aka "Oceania"
		<![CDATA[<p align="justify">Итак, Amarok 2.1.1 под кодовым названием &quot;Oceania&quot;. Первый, так сказать, &quot;сервис-пак&quot; для ветки 2.1. Замечу, что торжественный релиз 2.1 я благополучно профукала. Так что сравнивать буду с 2.0.2, последней версией, имевшей честь послужить моим меломанским нуждам:)<br />Официальные пресс-релизы можно найти на сайте <a target="_blank" href="http://amarok.kde.org/">Amarok</a>, на английском и немецком. Заниматься здесь тупым переводом я не намеренна. Аудиоплеер - вещь в хозяйстве необходимая, если не сказать пероочередная, так что собственных претензий и пожеланий у меня набралось достаточно. Тому, насколько оправдались мои ожидания и будет посвящена эта заметка.</p><p><a href="http://chiffa.in.ua/content/articles/screen4.png"><img hspace="0" border="0" vspace="0" align="baseline" src="http://chiffa.in.ua/content/articles/screen4_min.png" /></a></p><p align="justify">Самый важный на мой взгляд багфикс - снова видится ВСЯ коллекция. Когда в 2.0.2 Амароке начинали отваливаливаться целые альбомы, а у некоторых композиций упорно показывалось время звучания 00:00,  это доводило меня до иссупленной истерики. Хвала богам, после обновления снова все на месте, разве что обложки некоторые пришлось перезагрузить. При попытке закинуть в плейлист всю локальную коллекцию перестал сыпаться всякий невнятный мусор, включающий звуки аськи и какую-то попсу с винды, которую с моего ноута слушали на старой работе. И еще один обрадовавший момент. Когда я меняю теги, или любую другую информацию о дороже, дерево коллекции (на скриншоте слева) не сворачивается в изначальный вид, и нет необходимости прокручивать и проклацывать до нужного места, если мне нужна следующая дорожка. Это долгожданный позитив, но без неприятных сюрпризов тоже не обошлось...</p><p align="justify">Заколебавшая проблема: при попытке снять пометку  &quot;показывать в категории 'Различные исполнители'&quot; крашимся к чертям - никуда не делась. Печально, но не критично.  Появившаяся начиная с 2.0 &quot;область апплетов&quot; (центральня зеленая часть), которая до этого просто безбожно глючила, теперь окончательно безполезный кусок зелененького ниочем. Нажимаем &quot;добавить апплеты&quot; - видим красный крестик и зеленую стрелку. Жмем на крестик - они изчезают, жмем на стрелку - крашимся... Чудненько. Нашла возможность как &quot;схлопнуть&quot; и забыть ненужную область.</p><p align="justify">Напоследок хотелось бы отметить пару не ожидаемых, но порадовавших &quot;плюшек&quot;. Среди многочисленных интернет-сервисов, входящих в комплект, я активно использую только один - last.fm. Так вот работу с ластом в новой версии сделали гораздо симпатичней. Теперь это выглядит почти как &quot;родной&quot; скробблер, отсылка тегов происходит корректнее, как и положено - где-то на середине песни, плюс кнопочку Love it! вверху рядом с основыными кнопками управления прикрутили. Пользую редко, но за заботу спасибо.</p><p><a href="http://chiffa.in.ua/content/articles/screen5.png"><img src="http://chiffa.in.ua/content/articles/screen5_min.png" /></a></p><p align="justify">Общее впечатление - лучше, гораздо лучше. Уже почти то, что надо. Общее пожелание - вместо того чтоб фичи новые наворачивать, вылизали бы сущестующий функционал до блеска, а?</p><p /><p>
</p>
		]]></description>
		<link>http://chiffa.in.ua/main/linux/rubric/6/artic/13/</link>
		<guid isPermaLink="true">http://chiffa.in.ua/main/linux/rubric/6/artic/13/</guid>
		
	</item>
  <media:rating>adult</media:rating></channel>
</rss>

