<?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>yAnTar блог - про подорожі, відпочинок, моє життя &#187; Інтернет</title>
	<atom:link href="http://yablog.org.ua/category/internet/feed/" rel="self" type="application/rss+xml" />
	<link>http://yablog.org.ua</link>
	<description></description>
	<lastBuildDate>Mon, 21 May 2012 21:45:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Посилка з dealexreme</title>
		<link>http://yablog.org.ua/2011/08/21/posylka-z-dealexreme/</link>
		<comments>http://yablog.org.ua/2011/08/21/posylka-z-dealexreme/#comments</comments>
		<pubDate>Sun, 21 Aug 2011 14:48:25 +0000</pubDate>
		<dc:creator>yAnTar</dc:creator>
				<category><![CDATA[Інтернет]]></category>
		<category><![CDATA[Покупки]]></category>
		<category><![CDATA[dealextreme.com]]></category>
		<category><![CDATA[всяка всячина]]></category>

		<guid isPermaLink="false">http://yablog.org.ua/?p=4979</guid>
		<description><![CDATA[Від знайомого недавно дізнався про такий магазин як dealextreme.com і вирішив зробити пробну покупку в цьому магазині. Зробив віртуальну картку Visa в Укрсоцбанку (між іншим, безкоштовно), законектив її до Paypal і зробив перше замовлення. Час від оформлння замовлення до доставки додому 23 дні. Вартість доставки з цього магазину по всьому світу безкоштовна, а деякі речі [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="lightbox" href="http://yablog.org.ua/wp-content/uploads/2011/08/IMGP6711.jpg"><img align="left" title="IMGP6711" src="http://yablog.org.ua/wp-content/uploads/2011/08/IMGP6711-150x150.jpg" alt="IMGP6711" width="150" height="150" /></a>Від <a href="http://dyoma.pp.ua/tag/dealextreme/">знайомого</a> недавно дізнався про такий магазин як <a href="http://www.dealextreme.com">dealextreme.com</a> і вирішив зробити пробну покупку в цьому магазині. Зробив віртуальну картку Visa в Укрсоцбанку (між іншим, безкоштовно), законектив її до Paypal і зробив перше замовлення. Час від оформлння замовлення до доставки додому 23 дні. Вартість доставки з цього магазину по всьому світу безкоштовна, а деякі речі продаються взагалі за смішну ціну (чим і користуються бариги &#8211; якась китайська приблуда до айфона у нас коштує в 10 раз дорожче, ніж на dealextreme). Як для першого разу &#8211; то замовляв собі різні дрібнички, плюс знайомому чехол і плівку для ipada. <span id="more-4979"></span></p>
<p>Список, що замовляв з лінками на цьому магазині і коротким описом лоту.<br />
1. <a rel="nofollow" href="http://www.dealextreme.com/p/infrared-ir-shutter-remote-for-pentax-digital-cameras-cr2025-battery-included-18006"><strong>Пульт для фотоапарату Pentax k-r</strong></a> &#8211; у нас ціна на оригінал в районі 200 грн, тут 4.80 USD &#8211; пробував з <a href="http://yablog.org.ua/2011/05/24/pentax-k-r-body/">фотоапаратом</a> &#8211; все працює (хоча що там може не працювати &#8211; всього одна кнопка).<br />
2. <a rel="nofollow" href="http://www.dealextreme.com/p/carbon-steel-manual-release-folding-knife-with-clip-20cm-full-length-18256"><strong>Туристичний ніж</strong></a> &#8211; на сайті було багато позитивних відгуків про нього &#8211; так і є &#8211; досить добротний і дуже гострий ніж (першого дня порізались ним вдома). Написано made in Solingen &#8211; хоча я впевнений на 100%, що made in China. Найдорожчий лот з цієї посилки &#8211; 8.44 USD.<br />
3. <a rel="nofollow" href="http://www.dealextreme.com/p/vintage-board-game-wanted-38221"><strong>Настільна гра Wanted</strong></a> &#8211; колода карт, з не дуже якісною паперовою упаковкою (якість самої колоди більш-менш нормальна). Правила тільки на китайській мові (але там правила елементарні, в інтернеті повно перекладів). Напишу окремо про цю настільну гру.<br />
4. Ще одна настільна гра &#8211; <a rel="nofollow" href="http://www.dealextreme.com/p/vintage-board-game-saboteur-38224"><b>Saboteur</b></a> про гномів і шкідників. На відміну від попередньої &#8211; коробка нормальна, картам не вистачає яскравості, правила на 2 мовах &#8211; китайській (зразу попали в смітник) і англійській. Також напишу окремо про цю настільну гру.<br />
5. <a rel="nofollow" href="http://www.dealextreme.com/p/6031-professional-sharp-metal-darts-for-dart-game-silver-gold-black-3-piece-46068"><strong>Металеві дротики для дартсу</strong></a> &#8211; через пару місяців, після того, як я купив <a href="http://yablog.org.ua/2010/05/14/darts/">дартс</a> стандартні дротики затупились і ними було важко попадати і я взагалі забив на дартс. Купив тут 3 металеві дротики за 3.20 USD<br />
6. <a rel="nofollow" href="http://www.dealextreme.com/p/magic-ball-sphere-puzzle-brain-teaser-iq-toy-45251"><strong>Головоломка Magic sphere</strong></a>. Колись давно тато купував різні головоломки типу кубика-рубика. Вирішив купити тут подібну штуку. Головоломка не дуже сподобалась і якість виконання не на висоті. 5.30 USD.<br />
7. І останнє, що я купив і зараз не знаю, як заюзати &#8211; це <a rel="nofollow" href="http://www.dealextreme.com/p/trustfire-18650-3-7v-2500mah-rechargeable-lithium-batteries-2-pack-19770">Li-ion 2500 mAh акумулятори</a>. До цього часу я не знав, що крім формату пальчиків АА і ААА є ще багато інших форматів, зокрема, ті, які я і купив &#8211; TR18650. 6.60 USD.</p>
<p>Якщо вас цікавлять покупки з Китаю &#8211; можливо вас зацікавить <a href="http://www.biznes-china.ru/poisk-postavshikov/">Поиск поставщиков в Китае</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://yablog.org.ua/2011/08/21/posylka-z-dealexreme/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Спам-фільтр Google і Google+</title>
		<link>http://yablog.org.ua/2011/07/25/spam-filter-and-google-plus/</link>
		<comments>http://yablog.org.ua/2011/07/25/spam-filter-and-google-plus/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 18:26:35 +0000</pubDate>
		<dc:creator>yAnTar</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[спам-фільтр]]></category>

		<guid isPermaLink="false">http://yablog.org.ua/?p=5146</guid>
		<description><![CDATA[Недавно Google запустив свою наступну (першою була wave, яка почила в Бозі) соціальну мережу Google+. Я не буду писати про особливості цієї соціальної мережі, так як майже нею не користуюся. Час від часу приходили повідомлення від Google+, що хтось додав мене до своїх кіл. А сьогодні, передивляючись папку спам (деколи туди потрапляє важливий лист) побачив, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://yablog.org.ua/wp-content/uploads/2011/07/nospam.gif" alt="" align="left" />Недавно Google запустив свою наступну (першою була wave, яка почила в Бозі) соціальну мережу Google+. Я не буду писати про особливості цієї соціальної мережі, так як майже нею не користуюся. Час від часу приходили повідомлення від Google+, що хтось додав мене до своїх кіл. А сьогодні, передивляючись папку спам (деколи туди потрапляє важливий лист) побачив, що туди попав лист з Google+, тобто алгоритми Google визначили лист від Google+, як спам.</p>
]]></content:encoded>
			<wfw:commentRss>http://yablog.org.ua/2011/07/25/spam-filter-and-google-plus/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Хак для watermark reloaded</title>
		<link>http://yablog.org.ua/2011/07/17/hak-dlya-watermark-reloaded/</link>
		<comments>http://yablog.org.ua/2011/07/17/hak-dlya-watermark-reloaded/#comments</comments>
		<pubDate>Sun, 17 Jul 2011 15:41:56 +0000</pubDate>
		<dc:creator>yAnTar</dc:creator>
				<category><![CDATA[Інтернет]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[watermark reloaded]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[плагін]]></category>

		<guid isPermaLink="false">http://yablog.org.ua/?p=5102</guid>
		<description><![CDATA[Вирішив для тих рисунків, що додаю на блог ставити watermark (водяний знак). Скачав плагін для вордпреса, який при аплоді фотографій автоматично ставить watermark (в принципі можна було би і заюзати якусь прогу, що ставить для всіх фото в папці водяний знак, але зупинився саме на плагіні). Для цього підійшов плагін watermark reloaded &#8211; робить все [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://yablog.org.ua/wp-content/uploads/2011/07/wordpress.png" alt="" width="150" align="left" />Вирішив для тих рисунків, що додаю на блог ставити watermark (водяний знак). Скачав плагін для вордпреса, який при аплоді фотографій автоматично ставить watermark (в принципі можна було би і заюзати якусь прогу, що ставить для всіх фото в папці водяний знак, але зупинився саме на плагіні). Для цього підійшов плагін watermark reloaded &#8211; робить все автоматом, є багато налаштувань. Тільки одне, чого не було &#8211; це, щоб можна було використовувати альфа-канал в кольорі тексту. Але, щоб це поправити &#8211; вистачило 5 хвилин &#8211; знайти у файлі виклик функції imagecolorallocate і замінити її на imagecolorallocatealpha.<span id="more-5102"></span>Отже, відкриваємо файл /wp-content/plugins/watermark-reloaded/watermark-reloaded.php знаходимо метод imageColorAllocateHex (рядок 239) і міняємо рядок</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw1">return</span> <a rel="nofollow" href="http://www.php.net/imagecolorallocate"><span class="kw3">imagecolorallocate</span></a><span class="br0">&#40;</span><span class="re0">$image</span><span class="sy0">,</span><br />
0xFF <span class="sy0">&amp;</span> <span class="br0">&#40;</span><span class="re0">$int</span> <span class="sy0">&gt;&gt;</span> 0&#215;10<span class="br0">&#41;</span><span class="sy0">,</span><br />
0xFF <span class="sy0">&amp;</span> <span class="br0">&#40;</span><span class="re0">$int</span> <span class="sy0">&gt;&gt;</span> 0&#215;8<span class="br0">&#41;</span><span class="sy0">,</span><br />
0xFF <span class="sy0">&amp;</span> <span class="re0">$int</span><span class="br0">&#41;</span></div>
</div>
<p>на такий</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw1">return</span> <a rel="nofollow" href="http://www.php.net/imagecolorallocatealpha"><span class="kw3">imagecolorallocatealpha</span></a><span class="br0">&#40;</span><span class="re0">$image</span><span class="sy0">,</span><br />
0xFF <span class="sy0">&amp;</span> <span class="br0">&#40;</span><span class="re0">$int</span> <span class="sy0">&gt;&gt;</span> 0&#215;10<span class="br0">&#41;</span><span class="sy0">,</span><br />
0xFF <span class="sy0">&amp;</span> <span class="br0">&#40;</span><span class="re0">$int</span> <span class="sy0">&gt;&gt;</span> 0&#215;8<span class="br0">&#41;</span><span class="sy0">,</span><br />
0xFF <span class="sy0">&amp;</span> <span class="re0">$int</span><span class="sy0">,</span><br />
<span class="nu0">90</span><span class="br0">&#41;</span></div>
</div>
<p>тобто змінюємо метод на такий, що дозволяє юзати параметр альфа-каналу і додаємо цей параметр. Параметр може бути від 0 до 127 (я в себе поставив 90). Якщо комусь треба &#8211; можу зробити цей хак повноцінним &#8211; додати можливість міняти його в налаштуваннях, а не напряму через файл.</p>
]]></content:encoded>
			<wfw:commentRss>http://yablog.org.ua/2011/07/17/hak-dlya-watermark-reloaded/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google images search</title>
		<link>http://yablog.org.ua/2011/06/22/google-images-search/</link>
		<comments>http://yablog.org.ua/2011/06/22/google-images-search/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 18:07:44 +0000</pubDate>
		<dc:creator>yAnTar</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Різне]]></category>
		<category><![CDATA[google images]]></category>

		<guid isPermaLink="false">http://yablog.org.ua/?p=4975</guid>
		<description><![CDATA[ Недавно Google ввів нову фічу в google images &#8211; тепер рисунки можна шукати не тільки по слову, але і по самому рисунку. Для цього достатньо перетягнути в текстове поле файл зображення, який потрібно знайти (у Firefox або Chrome). Трохи погрався з цією фічею &#8211; як видно по результатах порівняння йде по кольорах &#8211; тому [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://yablog.org.ua/wp-content/uploads/2009/01/google.gif" alt="" align="left" /> Недавно Google ввів нову фічу в google images &#8211; тепер рисунки можна шукати не тільки по слову, але і по самому рисунку. Для цього достатньо перетягнути в текстове поле файл зображення, який потрібно знайти (у Firefox або Chrome). Трохи погрався з цією фічею &#8211; як видно по результатах порівняння йде по кольорах &#8211; тому результати можуть бути як гарні , так і зовсім погані. Ну я думаю, що Google ще докрутить цей функціонал і він буде працювати суперово.</p>
]]></content:encoded>
			<wfw:commentRss>http://yablog.org.ua/2011/06/22/google-images-search/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Приватбанк мерчант</title>
		<link>http://yablog.org.ua/2011/04/17/pryvatbank-merchant/</link>
		<comments>http://yablog.org.ua/2011/04/17/pryvatbank-merchant/#comments</comments>
		<pubDate>Sun, 17 Apr 2011 13:55:16 +0000</pubDate>
		<dc:creator>yAnTar</dc:creator>
				<category><![CDATA[Інтернет]]></category>
		<category><![CDATA[Приколи]]></category>
		<category><![CDATA[ламерство]]></category>
		<category><![CDATA[Приватбанк]]></category>

		<guid isPermaLink="false">http://yablog.org.ua/?p=4594</guid>
		<description><![CDATA[Зроблю ще маленьку рекламу улюбленому банку. Десь 2 місяці назад потрібно було привязати до одного сайту систему оплати Приват24. Прописав мерчант_ід, включив тестовий режим, все як має бути, проводжу тестовий платіж, в результаті Приват видає повідомлення Платёж выполнен. Ошибка: test ok. Тобто ніби все ок, але в той же час є помилка, хоча вона також [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://yablog.org.ua/wp-content/uploads/2011/04/privatbank.jpg" rel="lightbox"><img align="left" title="privatbank" src="http://yablog.org.ua/wp-content/uploads/2011/04/privatbank-150x150.jpg" alt="privatbank" width="150" height="150" /></a>Зроблю ще маленьку рекламу улюбленому банку. Десь 2 місяці назад потрібно було привязати до одного сайту систему оплати Приват24. Прописав мерчант_ід, включив тестовий режим, все як має бути, проводжу тестовий платіж, в результаті Приват видає повідомлення Платёж выполнен. Ошибка: test ok. Тобто ніби все ок, але в той же час є помилка, хоча вона також ok <img src='http://yablog.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . Наскільки я зрозумів це слово мало би означати статус транзакції, або забули зробити перевірку на існування помилки. Скрін клікабельний.</p>
]]></content:encoded>
			<wfw:commentRss>http://yablog.org.ua/2011/04/17/pryvatbank-merchant/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Скасувати чи &#8230; скасувати</title>
		<link>http://yablog.org.ua/2011/02/12/cancel-or-cancel/</link>
		<comments>http://yablog.org.ua/2011/02/12/cancel-or-cancel/#comments</comments>
		<pubDate>Sat, 12 Feb 2011 15:11:09 +0000</pubDate>
		<dc:creator>yAnTar</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Earth]]></category>
		<category><![CDATA[баг]]></category>

		<guid isPermaLink="false">http://yablog.org.ua/?p=4439</guid>
		<description><![CDATA[Всім відомий сервіс від гугла &#8211; Google Earth. У 2004 році гугл зробив фурор цим продуктом, та й зараз це дуже зручний інструмент. Так ось до чого я веду, помітив ще раніше цікавий баг, при закриванні сторінки програма пропонує 3 кнопки &#8211; на 2 з яких однакові надписи &#8211; скасувати і скасувати. 2 кнопка мала [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="lightbox" href="http://yablog.org.ua/wp-content/uploads/2011/02/cancel_cancel.jpg"><img src="http://yablog.org.ua/wp-content/uploads/2011/02/cancel_cancel-150x150.jpg" alt="Скасувати чи скасувати" title="Скасувати чи скасувати" width="150" height="150" align="left" /></a>Всім відомий сервіс від гугла &#8211; Google Earth. У 2004 році гугл зробив фурор цим продуктом, та й зараз це дуже зручний інструмент. Так ось до чого я веду, помітив ще раніше цікавий баг, при закриванні сторінки програма пропонує 3 кнопки &#8211; на 2 з яких однакові надписи &#8211; скасувати і скасувати. 2 кнопка мала б називатись не зберігати.</p>
]]></content:encoded>
			<wfw:commentRss>http://yablog.org.ua/2011/02/12/cancel-or-cancel/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Це таки сталось. Codeigniter 2.0 вийшов</title>
		<link>http://yablog.org.ua/2011/01/29/tse-taky-stalos-codeigniter-2-0-vyjshov/</link>
		<comments>http://yablog.org.ua/2011/01/29/tse-taky-stalos-codeigniter-2-0-vyjshov/#comments</comments>
		<pubDate>Sat, 29 Jan 2011 21:01:40 +0000</pubDate>
		<dc:creator>yAnTar</dc:creator>
				<category><![CDATA[Інтернет]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://yablog.org.ua/?p=4418</guid>
		<description><![CDATA[Більше року тому почав працювати з цим фреймворком, версія поточна була 1.7.3 і дуже довго фреймворк не розвивався. На базі цього фреймворку виріс інший фреймворк Kohana, ходили чутки, що CodeIgniterу вже прийшов кінець  і далі він розвиватись не буде. Але вчора це сталось вийшла версія 2.0.0 Codeigniter&#8217;а. Зараз мінімальною версією PHP, з якою працює фреймворк [...]]]></description>
			<content:encoded><![CDATA[<p><img title="code-igniter" src="http://yablog.org.ua/wp-content/uploads/2010/10/code-igniter-150x150.jpg" alt="code-igniter" width="150" align="left" />Більше року тому почав працювати з цим фреймворком, версія поточна була 1.7.3 і дуже довго фреймворк не розвивався. На базі цього фреймворку виріс інший фреймворк Kohana, ходили чутки, що CodeIgniterу вже прийшов кінець  і далі він розвиватись не буде. Але вчора це сталось вийшла версія 2.0.0 Codeigniter&#8217;а.<span id="more-4418"></span> Зараз мінімальною версією PHP, з якою працює фреймворк є версія 5.1 (ну і правильно на PHP 4 потрібно було вже давно забити). З двіжка були вилучені плагіни (зараз можна юзати тільки хелпери), хоча істотної різниці між плагінами і хелперами я не відчував.<br />
Додано новий тип бібліотек &#8211; драйвери (ще не розібрався, для чого), змінено трохи структуру файлів (папки cache i logs винесені з папки system, application також винесли на рівень вгору), вилучено клас валідації, додано драйвер кеша для APC i memcached, зроблено роутинг для 404 сторінки ($route[‘404_override’), щоб можна було перенаправити на відповідний контролер (раніше щоб викликати необхідний контролер &#8211; робили через модифікацію класа Router.php) та ін. &#8211; всього більше 50 багфіксів і більше 20 різних фіч.</p>
]]></content:encoded>
			<wfw:commentRss>http://yablog.org.ua/2011/01/29/tse-taky-stalos-codeigniter-2-0-vyjshov/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Qwiki</title>
		<link>http://yablog.org.ua/2011/01/27/qwiki/</link>
		<comments>http://yablog.org.ua/2011/01/27/qwiki/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 16:06:41 +0000</pubDate>
		<dc:creator>yAnTar</dc:creator>
				<category><![CDATA[Інтернет]]></category>
		<category><![CDATA[Qwiki]]></category>
		<category><![CDATA[пошукова система]]></category>

		<guid isPermaLink="false">http://yablog.org.ua/?p=4351</guid>
		<description><![CDATA[Сьогодні знайомий кинув посилання на пошукову систему Qwiki (запущена 24 січня в альфа-режимі). Вводжу пошуковий запит і одержує мультимедійну презентацію  &#8211; озвучується текст і зразу ж відображається на екрані (поки тільки на англійській мові, але так зручно вчити англійську мову) по цьому слову і список пов&#8217;язаних статей (в мультимедійному форматі). Внизу шкала, на якій [...]]]></description>
			<content:encoded><![CDATA[<p><img title="qwiki" src="http://yablog.org.ua/wp-content/uploads/2011/01/qwiki.jpg" alt="qwiki" width="150" height="150" align="left" />Сьогодні знайомий кинув посилання на пошукову систему <a href="http://www.qwiki.com/q/#!/PHP">Qwiki</a> (запущена 24 січня в альфа-режимі). Вводжу пошуковий запит і одержує мультимедійну презентацію  &#8211; озвучується текст і зразу ж відображається на екрані (поки тільки на англійській мові, але так зручно вчити англійську мову) по цьому слову і список пов&#8217;язаних статей (в мультимедійному форматі). Внизу шкала, на якій зображається, в який момент часу було згадування відповідного слова. Як кажуть &#8211; краще один раз побачити, ніж 100 раз почути. Можливо скоро Google купить цю систему, хоча там засновники (один з них &#8211; Луї Моньє &#8211; засновник Altavista) так просто її не продадуть.</p>
]]></content:encoded>
			<wfw:commentRss>http://yablog.org.ua/2011/01/27/qwiki/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Кеш в CodeIgniter. Частина 2</title>
		<link>http://yablog.org.ua/2010/11/03/cache-v-codeigniter-part-2/</link>
		<comments>http://yablog.org.ua/2010/11/03/cache-v-codeigniter-part-2/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 22:05:35 +0000</pubDate>
		<dc:creator>yAnTar</dc:creator>
				<category><![CDATA[Інтернет]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[кеш]]></category>

		<guid isPermaLink="false">http://yablog.org.ua/?p=3798</guid>
		<description><![CDATA[Недавно я писав про те, як краще організувати роботу кеша в CodeIgniter, а саме як зробити &#8220;читабельні&#8221; файли кеша. Стало набагато зручніше, коли потрібно очистити кеш для однієї сторінки. Але в ході розвитку проекту кешованих файлів з&#8217;явилось багато і це також стало незручністю. Чому б не організувати кеш по папкам (де папкою буде виступати ім&#8217;я [...]]]></description>
			<content:encoded><![CDATA[<p><img title="code-igniter" src="http://yablog.org.ua/wp-content/uploads/2010/10/code-igniter-150x150.jpg" alt="code-igniter" width="150" align="left" /><a href="http://yablog.org.ua/2010/10/01/cache-v-codeigniter/">Недавно</a> я писав про те, як краще організувати роботу кеша в CodeIgniter, а саме як зробити &#8220;читабельні&#8221; файли кеша. Стало набагато зручніше, коли потрібно очистити кеш для однієї сторінки. Але в ході розвитку проекту кешованих файлів з&#8217;явилось багато і це також стало незручністю. Чому б не організувати кеш по папкам (де папкою буде виступати ім&#8217;я контролера). Так і зробив &#8211; нижче деякі правки в коді, які потрібно зробити, щоб файли кеша зберігались структуровано по папкам.<span id="more-3798"></span><br />
Відкриваємо файл system/libraries/Output.php (або створюємо новий файл system/application/libraries/Output.php).<br />
1. В класі CI_Output створюємо метод _transform_path</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">function</span> _transform_path<span class="br0">&#40;</span><span class="re0">$uri</span><span class="sy0">,</span> <span class="re0">$cache_path</span><span class="sy0">,</span> <span class="re0">$verify_create_dir</span> <span class="sy0">=</span> 0<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$uri</span> <span class="sy0">=</span> <a rel="nofollow" href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$uri</span><span class="sy0">,</span> 1<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$controller</span> <span class="sy0">=</span> <a rel="nofollow" href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$uri</span><span class="sy0">,</span> 0<span class="sy0">,</span> <a rel="nofollow" href="http://www.php.net/strpos"><span class="kw3">strpos</span></a><span class="br0">&#40;</span><span class="re0">$uri</span><span class="sy0">,</span> <span class="st0">&quot;/&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$uri</span> <span class="sy0">=</span> <a rel="nofollow" href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="re0">$controller</span> <span class="sy0">.</span> <span class="st0">&quot;/&quot;</span> <span class="sy0">,</span> <span class="st0">&quot;&quot;</span><span class="sy0">,</span> <span class="re0">$uri</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$verify_create_dir</span> <span class="sy0">&amp;&amp;</span> <span class="sy0">!</span><a rel="nofollow" href="http://www.php.net/is_dir"><span class="kw3">is_dir</span></a><span class="br0">&#40;</span><span class="re0">$cache_path</span> <span class="sy0">.</span> <span class="re0">$controller</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a rel="nofollow" href="http://www.php.net/mkdir"><span class="kw3">mkdir</span></a><span class="br0">&#40;</span><span class="re0">$cache_path</span> <span class="sy0">.</span> <span class="re0">$controller</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="re0">$pattern_delete</span> <span class="sy0">=</span> <span class="st_h">&#8216;#[^a-zA-Z0-9]#&#8217;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$uri</span> <span class="sy0">=</span> <a rel="nofollow" href="http://www.php.net/preg_replace"><span class="kw3">preg_replace</span></a><span class="br0">&#40;</span><span class="re0">$pattern_delete</span><span class="sy0">,</span> <span class="st0">&quot;-&quot;</span><span class="sy0">,</span> <span class="re0">$uri</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$uri</span> <span class="sy0">=</span> <span class="re0">$controller</span> <span class="sy0">.</span> <span class="st0">&quot;/&quot;</span> <span class="sy0">.</span> <span class="re0">$uri</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$uri</span> <span class="sy0">==</span> <span class="st_h">&#8216;/&#8217;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$uri</span> <span class="sy0">=</span> <span class="st0">&quot;main&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="re0">$uri</span> <span class="sy0">.=</span> <span class="st_h">&#8216;.tmp&#8217;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$uri</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Метод приймає 3 параметри &#8211; URI, шлях до папки кешу і параметр, для перевірки &#8211; чи створена папка.<br />
1-3 рядки &#8211; витягуємо з урла контролер.<br />
4-6 рядки &#8211; перевіряємо чи існує папка, якщо не існує &#8211; створюємо її<br />
7-9 рядки &#8211; формуємо імя файлу для кеша (вилучаємо всі &#8220;ліві&#8221; символи)<br />
10-12 рядки &#8211; особливий випадок &#8211; якщо на головній сторінці &#8211; то задаємо імя для файлу main<br />
13 рядок &#8211; додаємо до файлу розширення, щоб не було конфлікту з папками (example.com/video &#8211; щоб лінк такого типу зберігався у файлі video.tmp)</p>
<p>2. В методах _write_cache i _display_cache замінюємо</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="re0">$uri</span> <span class="sy0">=</span> &nbsp; &nbsp;<span class="re0">$CI</span><span class="sy0">-&gt;</span><span class="me1">config</span><span class="sy0">-&gt;</span><span class="me1">item</span><span class="br0">&#40;</span><span class="st_h">&#8216;base_url&#8217;</span><span class="br0">&#41;</span><span class="sy0">.</span><br />
<span class="re0">$CI</span><span class="sy0">-&gt;</span><span class="me1">config</span><span class="sy0">-&gt;</span><span class="me1">item</span><span class="br0">&#40;</span><span class="st_h">&#8216;index_page&#8217;</span><span class="br0">&#41;</span><span class="sy0">.</span><br />
<span class="re0">$CI</span><span class="sy0">-&gt;</span><span class="me1">uri</span><span class="sy0">-&gt;</span><span class="me1">uri_string</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>і</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="re0">$uri</span> <span class="sy0">=</span> &nbsp; &nbsp;<span class="re0">$CFG</span><span class="sy0">-&gt;</span><span class="me1">item</span><span class="br0">&#40;</span><span class="st_h">&#8216;base_url&#8217;</span><span class="br0">&#41;</span><span class="sy0">.</span><br />
<span class="re0">$CFG</span><span class="sy0">-&gt;</span><span class="me1">item</span><span class="br0">&#40;</span><span class="st_h">&#8216;index_page&#8217;</span><span class="br0">&#41;</span><span class="sy0">.</span><br />
<span class="re0">$URI</span><span class="sy0">-&gt;</span><span class="me1">uri_string</span><span class="sy0">;</span></div>
</div>
<p>відповідно на</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="re0">$path</span> <span class="sy0">=</span> <span class="re0">$CI</span><span class="sy0">-&gt;</span><span class="me1">config</span><span class="sy0">-&gt;</span><span class="me1">item</span><span class="br0">&#40;</span><span class="st_h">&#8216;cache_path&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>і</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="re0">$uri</span> <span class="sy0">=</span> &nbsp; &nbsp;<span class="re0">$URI</span><span class="sy0">-&gt;</span><span class="me1">uri_string</span><span class="sy0">;</span></div>
</div>
<p>щоби в іменах файлів не було назви домену.<br />
а також в цих самих методах замінюємо</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="re0">$cache_path</span> <span class="sy0">.=</span> <a rel="nofollow" href="http://www.php.net/md5"><span class="kw3">md5</span></a><span class="br0">&#40;</span><span class="re0">$uri</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>на</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="re0">$cache_path</span> <span class="sy0">.=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span>_transform_path<span class="br0">&#40;</span><span class="re0">$uri</span><span class="sy0">,</span> <span class="re0">$cache_path</span><span class="sy0">,</span> 1<span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>3. Створюємо метод clean_cache &#8211; для очищення необхідної сторінки з кеша</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">function</span> clean_cache<span class="br0">&#40;</span><span class="re0">$uri</span><span class="sy0">=</span><span class="kw4">null</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">global</span> <span class="re0">$CFG</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="re0">$uri</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$CI</span> <span class="sy0">=&amp;</span> get_instance<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$uri</span> <span class="sy0">=</span> <span class="re0">$CI</span><span class="sy0">-&gt;</span><span class="me1">uri</span><span class="sy0">-&gt;</span><span class="me1">uri_string</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="re0">$cache_path</span> <span class="sy0">=</span> <span class="br0">&#40;</span><span class="re0">$CFG</span><span class="sy0">-&gt;</span><span class="me1">item</span><span class="br0">&#40;</span><span class="st_h">&#8216;cache_path&#8217;</span><span class="br0">&#41;</span> <span class="sy0">==</span> <span class="st_h">&#8221;</span><span class="br0">&#41;</span> ? BASEPATH<span class="sy0">.</span><span class="st_h">&#8216;cache/&#8217;</span> <span class="sy0">:</span> <span class="re0">$CFG</span><span class="sy0">-&gt;</span><span class="me1">item</span><span class="br0">&#40;</span><span class="st_h">&#8216;cache_path&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$filepath</span> <span class="sy0">=</span> <span class="re0">$cache_path</span> <span class="sy0">.</span> <span class="re0">$this</span><span class="sy0">-&gt;</span>_transform_path<span class="br0">&#40;</span><span class="re0">$uri</span><span class="sy0">,</span> <span class="re0">$cache_path</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="sy0">@</span><a rel="nofollow" href="http://www.php.net/unlink"><span class="kw3">unlink</span></a><span class="br0">&#40;</span><span class="re0">$filepath</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://yablog.org.ua/2010/11/03/cache-v-codeigniter-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Кеш в CodeIgniter</title>
		<link>http://yablog.org.ua/2010/10/01/cache-v-codeigniter/</link>
		<comments>http://yablog.org.ua/2010/10/01/cache-v-codeigniter/#comments</comments>
		<pubDate>Fri, 01 Oct 2010 13:48:25 +0000</pubDate>
		<dc:creator>yAnTar</dc:creator>
				<category><![CDATA[Інтернет]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[кеш]]></category>

		<guid isPermaLink="false">http://yablog.org.ua/?p=3520</guid>
		<description><![CDATA[Є такий PHP Framework CodeIgniter. Особисто мені він дуже подобається &#8211; простий, швидкий, дуже гарна документація (в т.ч. на російській мові). Робив я декілька проектів на ньому і не використовував кеш фреймворка. А в одному проекті кеш був обов&#8217;язковим. І тут я стикнувся з двома неприємними особливостями реалізації кеша у цьому фреймворку -
1) щоб очистити [...]]]></description>
			<content:encoded><![CDATA[<p><img title="code-igniter" src="http://yablog.org.ua/wp-content/uploads/2010/10/code-igniter-150x150.jpg" alt="code-igniter" width="150" align="left" />Є такий PHP Framework CodeIgniter. Особисто мені він дуже подобається &#8211; простий, швидкий, дуже гарна документація (в т.ч. на російській мові). Робив я декілька проектів на ньому і не використовував кеш фреймворка. А в одному проекті кеш був обов&#8217;язковим. І тут я стикнувся з двома неприємними особливостями реалізації кеша у цьому фреймворку -<br />
1) щоб очистити кеш для сторінки треба руками очищувати файл<br />
2) файл має вигляд md5($url)<span id="more-3520"></span></p>
<p>Це є досить незручно, відкриваємо файл system/libraries/Output.php (або створюємо новий файл system/application/libraries/Output.php)<br />
і вносимо такі правки<br />
1. В класі CI_Output створюємо метод _transform_path</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">function</span> _transform_path<span class="br0">&#40;</span><span class="re0">$uri</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<span class="re0">$uri</span> <span class="sy0">=</span> <a rel="nofollow" href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;http://&quot;</span><span class="sy0">,</span> <span class="st0">&quot;&quot;</span><span class="sy0">,</span> <span class="re0">$uri</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$pattern_delete</span> <span class="sy0">=</span> <span class="st_h">&#8216;#[^a-zA-Z0-9]#&#8217;</span><span class="sy0">;</span><br />
<span class="re0">$uri</span> <span class="sy0">=</span> <a rel="nofollow" href="http://www.php.net/preg_replace"><span class="kw3">preg_replace</span></a><span class="br0">&#40;</span><span class="re0">$pattern_delete</span><span class="sy0">,</span> <span class="st0">&quot;-&quot;</span><span class="sy0">,</span> <span class="re0">$uri</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$uri</span> <span class="sy0">.=</span> <span class="st0">&quot;-&quot;</span><span class="sy0">;</span><br />
<span class="kw1">return</span> <span class="re0">$uri</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>2. В цьому ж класі створюємо метод clean_cache для очистки кеша (якщо викликати його з відповідного контролера без параметру &#8211; кеш для цього контролера буде вилучатись, якщо буде параметр &#8211; для того параметру).</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">function</span> clean_cache<span class="br0">&#40;</span><span class="re0">$uri</span><span class="sy0">=</span><span class="kw4">null</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">global</span> <span class="re0">$CFG</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="re0">$uri</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$CI</span> <span class="sy0">=&amp;</span> get_instance<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$uri</span> <span class="sy0">=</span> &nbsp;<span class="re0">$CI</span><span class="sy0">-&gt;</span><span class="me1">config</span><span class="sy0">-&gt;</span><span class="me1">item</span><span class="br0">&#40;</span><span class="st_h">&#8216;base_url&#8217;</span><span class="br0">&#41;</span><span class="sy0">.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$CI</span><span class="sy0">-&gt;</span><span class="me1">config</span><span class="sy0">-&gt;</span><span class="me1">item</span><span class="br0">&#40;</span><span class="st_h">&#8216;index_page&#8217;</span><span class="br0">&#41;</span><span class="sy0">.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$CI</span><span class="sy0">-&gt;</span><span class="me1">uri</span><span class="sy0">-&gt;</span><span class="me1">uri_string</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="re0">$cache_path</span> <span class="sy0">=</span> <span class="br0">&#40;</span><span class="re0">$CFG</span><span class="sy0">-&gt;</span><span class="me1">item</span><span class="br0">&#40;</span><span class="st_h">&#8216;cache_path&#8217;</span><span class="br0">&#41;</span> <span class="sy0">==</span> <span class="st_h">&#8221;</span><span class="br0">&#41;</span> ? BASEPATH<span class="sy0">.</span><span class="st_h">&#8216;cache/&#8217;</span> <span class="sy0">:</span> &nbsp; &nbsp; <span class="re0">$CFG</span><span class="sy0">-&gt;</span><span class="me1">item</span><span class="br0">&#40;</span><span class="st_h">&#8216;cache_path&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$filepath</span> <span class="sy0">=</span> <span class="re0">$cache_path</span> <span class="sy0">.</span> <span class="re0">$this</span><span class="sy0">-&gt;</span>_transform_path<span class="br0">&#40;</span><span class="re0">$uri</span><span class="br0">&#41;</span> <span class="sy0">.</span> <a rel="nofollow" href="http://www.php.net/md5"><span class="kw3">md5</span></a><span class="br0">&#40;</span><span class="re0">$uri</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="sy0">@</span><a rel="nofollow" href="http://www.php.net/unlink"><span class="kw3">unlink</span></a><span class="br0">&#40;</span><span class="re0">$filepath</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>3. В методі _write_cache замінюємо рядок</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="re0">$cache_path</span> <span class="sy0">.=</span> <a rel="nofollow" href="http://www.php.net/md5"><span class="kw3">md5</span></a><span class="br0">&#40;</span><span class="re0">$uri</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>на</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="re0">$cache_path</span> <span class="sy0">.=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span>_transform_path<span class="br0">&#40;</span><span class="re0">$uri</span><span class="br0">&#41;</span> <span class="sy0">.</span> <a rel="nofollow" href="http://www.php.net/md5"><span class="kw3">md5</span></a><span class="br0">&#40;</span><span class="re0">$uri</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>Все, відтепер файли кешу будуть мати більш зручну назву<br />
example.com-5ababd603b22780302dd8d83498e5172.php<br />
замість<br />
5ababd603b22780302dd8d83498e5172.php</p>
]]></content:encoded>
			<wfw:commentRss>http://yablog.org.ua/2010/10/01/cache-v-codeigniter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 7.002 seconds -->

