<?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>nine-it &#187; php</title>
	<atom:link href="http://www.nine-it.info/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nine-it.info</link>
	<description>блоґ веб розробника</description>
	<lastBuildDate>Sun, 05 Feb 2012 17:21:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Yii: Єдина авторизація користувачів з підтримкою декількох сервісів</title>
		<link>http://www.nine-it.info/2011/10/05/yii-edyna-avtoryzatsiya-korystuvachiv-z-pidtrymkoyu-dekilkoh-servisiv/</link>
		<comments>http://www.nine-it.info/2011/10/05/yii-edyna-avtoryzatsiya-korystuvachiv-z-pidtrymkoyu-dekilkoh-servisiv/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 20:55:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[yii]]></category>
		<category><![CDATA[фічі для сайту]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[login]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[OpenID]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[yandex]]></category>
		<category><![CDATA[ВКонтакте]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=1281</guid>
		<description><![CDATA[Корисна штука яку треба буде заюзати. Про використання, установку, історію, &#8230; написано в статті. Стаття: на Хібрі: http://habrahabr.ru/blogs/yii/129804/ Код: http://code.google.com/p/yii-eauth/downloads/list Додаткові екстеншини: http://www.yiiframework.com/extension/loid http://www.yiiframework.com/extension/eoauth Вимоги: Yii 1.1+ PHP curl extension Ліцензія: New BSD License Репозіторій: svn checkout http://yii-eauth.googlecode.com/svn/trunk/ yii-eauth-read-only]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/1281.png&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>Корисна штука яку треба буде заюзати.</p>
<p>Про використання, установку, історію, &#8230; написано в статті.</p>
<p><strong>Стаття: </strong>на Хібрі: <a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://habrahabr.ru/blogs/yii/129804/"  rel="nofolow">http://habrahabr.ru/blogs/yii/129804/</a></p>
<p><strong>Код:</strong></p>
<p><a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://code.google.com/p/yii-eauth/downloads/list"  rel="nofolow">http://code.google.com/p/yii-eauth/downloads/list</a></p>
<p><span id="more-1281"></span></p>
<p><strong>Додаткові екстеншини:</strong></p>
<ul>
<li><a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://www.yiiframework.com/extension/loid"  rel="nofolow">http://www.yiiframework.com/extension/loid</a></li>
<li><a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://www.yiiframework.com/extension/eoauth"  rel="nofolow">http://www.yiiframework.com/extension/eoauth</a></li>
</ul>
<p><strong>Вимоги:</strong></p>
<ul>
<li>Yii 1.1+</li>
<li>PHP curl extension</li>
</ul>
<p><strong>Ліцензія:</strong></p>
<p><a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://www.opensource.org/licenses/bsd-license.php"  rel="nofollow">New BSD License</a></p>
<p><strong>Репозіторій:</strong></p>
<div class="codeblock">svn checkout http://yii-eauth.googlecode.com/svn/trunk/ yii-eauth-read-only</div>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2011/10/05/yii-edyna-avtoryzatsiya-korystuvachiv-z-pidtrymkoyu-dekilkoh-servisiv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Результати опитування про зарплату</title>
		<link>http://www.nine-it.info/2010/10/29/rezultaty-opytuvannya-pro-zarplatu/</link>
		<comments>http://www.nine-it.info/2010/10/29/rezultaty-opytuvannya-pro-zarplatu/#comments</comments>
		<pubDate>Fri, 29 Oct 2010 19:47:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[статистика]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[Object-C]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Phyton]]></category>
		<category><![CDATA[зарплата]]></category>
		<category><![CDATA[програмісти]]></category>
		<category><![CDATA[Україна]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=1061</guid>
		<description><![CDATA[Знайшов цікаві графіки про зарплату програмістів в Україні в різних галузях. графік тут. цікава статистика&#8230;]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/1061.png&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>Знайшов цікаві графіки про зарплату програмістів в Україні в різних галузях.<br />
<a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://www.developers.org.ua/archives/cb/2010/10/28/salary-survey-report-oct-2010/" rel="nofollow"  target="_blank">графік тут</a>.<br />
цікава статистика&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2010/10/29/rezultaty-opytuvannya-pro-zarplatu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php: бітові маски</title>
		<link>http://www.nine-it.info/2010/10/21/php-bitovi-masky/</link>
		<comments>http://www.nine-it.info/2010/10/21/php-bitovi-masky/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 16:09:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[мануали]]></category>
		<category><![CDATA[bits]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[бітові маски]]></category>
		<category><![CDATA[бітові опрації]]></category>
		<category><![CDATA[Побітове І]]></category>
		<category><![CDATA[Побітове АБО]]></category>
		<category><![CDATA[Побітове виключає АБО]]></category>
		<category><![CDATA[побітовий зсув вліво]]></category>
		<category><![CDATA[побітовий зсув вправо]]></category>
		<category><![CDATA[Унарний оператор Заперечення]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=1040</guid>
		<description><![CDATA[У мові PHP представлені гарні можливості для роботи з порозрядним операціями. Такі операції можна зустріти в коді практично будь-якого проекту, але деколи їх використання не досягає PHP. Звичайно, можна сказати, що бітові операції в основному використовуються для низкорівневого програмування апаратури, написання драйверів, програм для мережі і т.п. Але ніхто не забороняє їх використовувати і на [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/1040.jpg&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>У мові <strong>PHP</strong> представлені гарні можливості для роботи з порозрядним операціями. Такі операції можна зустріти в коді практично будь-якого проекту, але деколи їх використання не досягає PHP. Звичайно, можна сказати, що бітові операції в основному використовуються для низкорівневого програмування апаратури, написання драйверів, програм для мережі і т.п. Але ніхто не забороняє їх використовувати і на високому рівні. Їх використання не тільки поліпшить зовнішній вигляд коду, а й підвищить його ефективність, так як ці операції найшвидші.<br />
<span id="more-1040"></span><br />
Для того, щоб зрозуміти як працювати або оперувати порозрядним операціями, необхідно зрозуміти, як дані представлені в пам&#8217;яті комп&#8217;ютера. Все, незалежно від типу, дані в пам&#8217;яті зберігаються у вигляді нулів і одиниць (насправді там трохи інакше, але так це прийнято називати, тому не буду відхилятися від загальноприйнятої термінології), якими можна оперувати безпосередньо за допомогою порозрядних операцій. У PHP їх представлено аж цілих п&#8217;ять бінарних (два операнди) і одна унарна (один операнд) операція:</p>
<ol>
<li><strong>Побітове І</strong> (знак <strong>&amp;</strong>) &#8211; встановлює тільки ті біти, які встановлені в обох операндах.</li>
<li><strong>Побітове АБО</strong> (знак <strong>|</strong>) &#8211; встановлює тільки ті біти, які встановлені хоча б в одному з операндів.</li>
<li><strong>Побітове виключає АБО</strong> (знак <strong>^</strong>) &#8211; встановлює біт тільки в тому випадку, якщо в одному операнді біт встановлено, а в іншому немає.</li>
<li><strong>побітовий зсув вліво</strong> (знак <strong>«</strong>) &#8211; зсуває всі значущі біти лівого операнда на число позицій, певний правим операндом. Фактично, кожен зсув означає помножити лівий операнд на 2.</li>
<li><strong>побітовий зсув вправо</strong> (знак <strong>»</strong>) &#8211; зсуває всі значущі біти лівого операнда на число позицій, визначені в правому операнді.</li>
<li><strong>Унарний оператор Заперечення</strong> (знак <strong>~</strong>) &#8211; інвертує всі біти операнда на протилежні.</li>
</ol>
<pre>+-------+-------+-------+-------+-------+-------+
|   x   |   y   | x &amp; y | x | y | x ^ y |  ~ x  |
+-------+-------+-------+-------+-------+-------+
|   1   |   1   |   1   |   1   |   0   |   0   |
|   1   |   0   |   0   |   1   |   1   |   0   |
|   0   |   1   |   0   |   1   |   1   |   1   |
|   0   |   0   |   0   |   0   |   0   |   1   |
+-------+-------+-------+-------+-------+-------+</pre>
<p>Приклад: оголосимо дві константи CONST_X і CONST_Y і присвоїмо їм довільні значення, нехай CONST_X = 1234, а CONST_Y = 4321. Я не став брати великі числа, так як у них значящіх бітів більше, а більше їх тому, що на сучасних 32-ох та 64-ох бітних процесорах число типу integer може мати до 32-ух і до 64-ох значящих біт відповідно, тобто на 32-ох процесорної платформі знакова int (<strong>PHP не підтримує беззнакового цілого</strong>) величиною скажімо рівне 2090654925 має такий вигляд у двійковій системі числення 01111100 10011100 11011100 11001101.</p>
<p>У наведеній нижче таблиці дані всі операції, які можливі на рівні маніпуляцій з битами.</p>
<pre>+-------------------+---------------------------------------+--------------+
|                   |               BIN                     |      HEX     |
+-------------------+---------------------------------------+--------------+
|      CONST_X      |  00000000 00000000 00000100 11010010  |  0x000010e1  |
|      CONST_Y      |  00000000 00000000 00010000 11100001  |  0x000004d2  |
+-------------------+---------------------------------------+--------------+
| CONST_X &amp; CONST_Y |  00000000 00000000 00000000 11000000  |  0x000000c0  |
| CONST_X | CONST_Y |  00000000 00000000 00010100 11110011  |  0x000014f3  |
| CONST_X ^ CONST_Y |  00000000 00000000 00010100 00110011  |  0x00001433  |
|    CONST_X &lt;&lt; 5   |  00000000 00000000 10011010 01000000  |  0x00009a40  |
|    CONST_Y &gt;&gt; 3   |  00000000 00000000 00000010 00011100  |  0x0000021c  |
|      ~ CONST_Y    |  11111111 11111111 11101111 00011110  |  0xffffef1e  |
+-------------------+---------------------------------------+--------------+</pre>
<p>На підтвердження правильності наших результатів може допомогти скрипт, щоб переконатися, чи правильно я все підрахував.</p>
<p>Для унарний операції Заперечення я не став виводити значення int, так як воно стає негативним, і може все зіпсувати на цьому етапі знайомства.</p>
<pre>header("Content-type: text/plain");
define("CONST_X", 1234);
define("CONST_Y", 4321);
// Побітовий І
define("BITWISE_AND", CONST_X &amp; CONST_Y);
// Побітове АБО
define("BITWISE_OR", CONST_X | CONST_Y);
// Побітове Виключне АБО
define("BITWISE_XOR", CONST_X ^ CONST_Y);
// Побітовий зсув вліво
define("BITWISE_LSHIFT", CONST_X &lt;&lt; 5);
// Побітовий зсув вправо
define("BITWISE_RSHIFT", CONST_Y &gt;&gt; 3);

printf("-----------------------------------------------------------\r\n");
printf(" CONST_X: H=0x%08x B=%016b I=%d \r\n",
CONST_X, CONST_X, CONST_X);
printf(" CONST_Y: H=0x%08x B=%016b I=%d \r\n",
CONST_Y, CONST_Y, CONST_Y);
printf("-----------------------------------------------------------\r\n");
printf("CONST_X &amp; CONST_Y: H=0x%08x B=%016b I=%d \r\n",
BITWISE_AND, BITWISE_AND, BITWISE_AND);
printf("CONST_X | CONST_Y: H=0x%08x B=%016b I=%d \r\n",
BITWISE_OR, BITWISE_OR, BITWISE_OR);
printf("CONST_X ^ CONST_Y: H=0x%08x B=%016b I=%d \r\n",
BITWISE_XOR, BITWISE_XOR, BITWISE_XOR);
printf(" CONST_X &lt;&lt; 5: H=0x%08x B=%016b I=%d \r\n",
BITWISE_LSHIFT, BITWISE_LSHIFT, BITWISE_LSHIFT);
printf(" CONST_Y &gt;&gt; 3: H=0x%08x B=%016b I=%d \r\n",
BITWISE_RSHIFT, BITWISE_RSHIFT, BITWISE_RSHIFT);
printf("~CONST_Y: H=0x%08x B=%032b", ~CONST_Y, ~CONST_Y);</pre>
<p>Використання бітів в &laquo;повсякденному&raquo; життя веб додатків &#8211; <strong>Маски</strong>.</p>
<p>Це, звичайно, дуже глибоко філософське питання, буть чи не бути, використовувати або не використовувати&#8230; Скільки програмістів, стільки і стилів програмування. Просто хочеться сказати наступне:</p>
<ul>
<li>по-перше, БО різко зкорочують довжину коду;</li>
<li>по-друге, їх можна використовувати де душі завгодно, вони доступні завжди, не треба писати спеціальних класів;</li>
<li>по-третє, як я вже сказав, це найшвидші операції, компілятору не доведеться конвертувати значення в будь-який інший вид, щоб порівняти з чимось;</li>
<li>по-четверте, (звернути особливу увагу!), це займе всього 4 байта пам&#8217;яті як для зберігання, так і для маніпуляції;</li>
<li>і по-п&#8217;яте, це суттєво підвищить якість ваших програм, які не обов&#8217;язково написані на PHP.</li>
</ul>
<h3>Способи завдання масок</h3>
<p>Існує незліченна кількість способів представити одне число через інше. Але для початку необхідно зазначити наступне, не будь-яке число може бути унікальною маскою. Для пошуку (перевірки) збігу використовується <strong>оператор побітового І</strong>, який встановлює біт тільки в тому випадку, якщо вони встановлені в обох операндах. Значить нам необхідно задати так біти, які унікальні і не &laquo;перетинаються&raquo;, тобто в двійковій системі числення якщо їх порівнювати, вони не повинні мати встановлених біт в одному і тому ж розряді. Припустимо є число 0001 і число 0011 &#8211; вони перетинаються, тому що самий молодший біт встановлено в обох числах. Щоб уніфікувати всі маски, нам необхідно, щоб значущий біт був тільки один і у всіх масках займав різні розряди. У таблиці записані перші вісім масок, які унікальні і не перетинаються.</p>
<pre>+---------------------------+
|    0000 0000 0000 0001    |
|    0000 0000 0000 0010    |
|    0000 0000 0000 0100    |
|    0000 0000 0000 1000    |
|    0000 0000 0001 0000    |
|    0000 0000 0010 0000    |
|    0000 0000 0100 0000    |
|    0000 0000 1000 0000    |
+---------------------------+</pre>
<p>Як не важко здогадатися, кожне наступне число має встановлений біт на один розряд більше попереднього, за рахунок цього і виникає унікальність кожного числа, який претендує стати маскою. Якщо ви з легкістю можете перекладати з двійкової системи числення в десяткову, то відразу вам стане ясно, такими числами можуть бути тільки не негативні ступеня числа два.</p>
<p>Отдже <strong>спосіб перший</strong>, перерахування масок із збільшенням попереднього в два рази, починаючи з 0-го ступеня.<br />
<strong>Спосіб другий</strong>, перерахування масок, кожен з яких дорівнює числу, тобто 1,2,4,8,16,32 і т.д.<br />
<strong>Спосіб третій</strong>, використовується в основному професіоналами, в шістнадцятковому представленні, що до речі зручно. У цьому випадку процедура така: нам необхідні тільки числа 0&#215;1, 0&#215;2, 0&#215;4 і 0&#215;8, а потім ми просто нарощуємо нулі, тим самим збільшуючи розрядність значящего біта.</p>
<pre>+------------+-------------------------------------+-------------+
|    HEX     |                BIN                   |     DEC    |
+------------+-------------------------------------+-------------+
| 0x00000001 | 00000000 00000000 00000000 00000001 |  1          |
| 0x00000002 | 00000000 00000000 00000000 00000010 |  2          |
| 0x00000004 | 00000000 00000000 00000000 00000100 |  4          |
| 0x00000008 | 00000000 00000000 00000000 00001000 |  8          |
| 0x00000010 | 00000000 00000000 00000000 00010000 |  16         |
| 0x00000020 | 00000000 00000000 00000000 00100000 |  32         |
| 0x00000040 | 00000000 00000000 00000000 01000000 |  64         |
| 0x00000080 | 00000000 00000000 00000000 10000000 |  128        |
| 0x00000100 | 00000000 00000000 00000001 00000000 |  256        |
| 0x00000200 | 00000000 00000000 00000010 00000000 |  512        |
| 0x00000400 | 00000000 00000000 00000100 00000000 |  1024       |
| 0x00000800 | 00000000 00000000 00001000 00000000 |  2048       |
| 0x00001000 | 00000000 00000000 00010000 00000000 |  4096       |
| 0x00002000 | 00000000 00000000 00100000 00000000 |  8192       |
| 0x00004000 | 00000000 00000000 01000000 00000000 |  16384      |
| 0x00008000 | 00000000 00000000 10000000 00000000 |  32768      |
| 0x00010000 | 00000000 00000001 00000000 00000000 |  65536      |
| 0x00020000 | 00000000 00000010 00000000 00000000 |  131072     |
| 0x00040000 | 00000000 00000100 00000000 00000000 |  262144     |
| 0x00080000 | 00000000 00001000 00000000 00000000 |  524288     |
| 0x00100000 | 00000000 00010000 00000000 00000000 |  1048576    |
| 0x00200000 | 00000000 00100000 00000000 00000000 |  2097152    |
| 0x00400000 | 00000000 01000000 00000000 00000000 |  4194304    |
| 0x00800000 | 00000000 10000000 00000000 00000000 |  8388608    |
| 0x01000000 | 00000001 00000000 00000000 00000000 |  16777216   |
| 0x02000000 | 00000010 00000000 00000000 00000000 |  33554432   |
| 0x04000000 | 00000100 00000000 00000000 00000000 |  67108864   |
| 0x08000000 | 00001000 00000000 00000000 00000000 |  134217728  |
| 0x10000000 | 00010000 00000000 00000000 00000000 |  268435456  |
| 0x20000000 | 00100000 00000000 00000000 00000000 |  536870912  |
| 0x40000000 | 01000000 00000000 00000000 00000000 |  1073741824 |
+------------+-------------------------------------+-------------+</pre>
<p>Як видно з таблиці, в нашому розпорядженні є 31 повноцінна маска, причому унікальна, які не перетинаються між собою.</p>
<p><strong>І ще один спосіб</strong>, ним користуюся я, тому що з його допомогою я ніколи не вилажу за межі можливого. Використовується оператор побітового зсуву вліво починаючи з одиниці, і коли зсув досягає трідцаці, то все &#8211; приїхали.</p>
<pre>define("MASK_ACTION", 0x1);
define("MASK_POSTS", 0x1 &lt;&lt;1);
define("MASK_READ", 0x1 &lt;&lt;2);
define("MASK_COMMENT", 0x1 &lt;&lt;3);
//...
define("MASK_HELLO", 0x1 &lt;&lt;30);</pre>
<h3>Приклад використання масок.</h3>
<p>Припустимо від нашого Веб додатку потрібно щоб користувачеві були або не були надані певні привілеї на певні дії. Припустимо є сторінка, на якій розміщений певний текст, який:</p>
<ul>
<li>можна чи не можна читати,</li>
<li>можна чи не можна відправляти коментарі,</li>
<li>можна чи не можна видаляти коментарі.</li>
</ul>
<p>Припустимо, ці привілеї можуть бути застосовані до модератора форуму. Отже, спробуйте пограти з операторами побітового АБО і подивіться, як буде в цьому випадку вести себе додаток, обмеживши певні частини програми до відповідного if, можна з легкістю керувати доступом до певних частин вашої програми.</p>
<pre>// Оголошення привілеїв для модератора форуму
define("CAN_WRITE", 1);
define("CAN_MODERATE", 1 &lt;&lt;1);
define("CAN_DELETE", 1 &lt;&lt;2);

//Ініціалізація агрумент привілеїв модератора
$user_perms = 0x0;
/**
 * Дані привілеї можуть з легкістю зберігатися в БД
 * При цьому займаючи всього 4 байта пам'яті
 */
$user_perms | = CAN_MODERATE;
$user_perms | = CAN_WRITE;
$user_perms | = CAN_DELETE;
print ("Привелегии користувача:\r\n");
if($user_perms &amp; CAN_MODERATE)
echo "Може модерувати \r\n";
if (~$user_perms &amp; CAN_MODERATE)
echo "Не може модерувати\r\n";
if($user_perms &amp; CAN_WRITE)
echo "Може писати\r\n";
if (~$user_perms &amp; CAN_WRITE)
echo "Не може писати \r\n";
if ($user_perms &amp; CAN_DELETE)
echo "Може видаляти\r\n";
if (~$user_perms &amp; CAN_DELETE)
echo "Не може видаляти\r\n";</pre>
<p>Як видно з цього прикладу, необхідно і достатньо, просто порівняти наш аргумент з маскою, якщо в аргументі даний біт встановлений, то це поверне 1, інакше 0. Якщо знадобитися перевірити відсутність даного біта в аргументі, то з маскою необхідно буде перевірити інвертований аргумент. Це я зробив навмисно, тому що в багатьох випадках потрібно перевірити відсутність біта.</p>
<p><strong>Від граблів ніхто не застрахований &#8211; маленьке попередження.</strong></p>
<p>Під час першого тестування, коли я почав застосовувати привілеї на базі бітів, я зіткнувся з невеликою проблемою, суть полягає в наступному, <strong>PHP не має жорсткої системи типів даних</strong>, у зв&#8217;язку з цим, якщо привілеї користувача зберігаються в БД чи у файлі, незабудьте нахабно <strong>привести його тип до integer</strong> &#8230; можуть виникнути проблеми.</p>
<p>Матеріал перевірявся і тестувався на 32-ох бітній платформі.</p>
<p>переклад цієї <a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://www.rinatous.com/blog/node/1.html" rel="nofollow"  target="_blank">статті</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2010/10/21/php-bitovi-masky/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android: php для android</title>
		<link>http://www.nine-it.info/2010/07/18/android-php-dlya-android/</link>
		<comments>http://www.nine-it.info/2010/07/18/android-php-dlya-android/#comments</comments>
		<pubDate>Sun, 18 Jul 2010 21:53:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[soft]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Android Scripting Environment]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=894</guid>
		<description><![CDATA[Анонсовано проект &#171;PHP for Android&#187; в рамках якого представлена система для виконання на платформі Android додатків, написаних на мові PHP. На даний момент для телефонів на базі платформи Android підготовлений інсталяційний APK-файл, що інтегрує підтримку PHP 5.3 в створену розробниками Google підсистему Android Scripting Environment (ASE). Джерельні тексти розробки поширюються в рамках ліцензії Apache. PHP-скрипти [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/894.png&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>Анонсовано проект &laquo;<a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://www.phpforandroid.net/" rel="nofollow"  target="_blank">PHP for Android</a>&raquo; в рамках якого представлена система для виконання на платформі Android додатків, написаних на мові <a href="http://www.nine-it.info/tag/php/"  target="_blank">PHP</a>. На даний момент для телефонів на базі платформи Android підготовлений інсталяційний APK-файл, що інтегрує підтримку PHP 5.3 в створену розробниками <a href="http://www.nine-it.info/tag/google/"  target="_blank">Google</a> підсистему <a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://code.google.com/p/android-scripting/" rel="nofollow"  target="_blank">Android Scripting Environment</a> (ASE). Джерельні тексти розробки поширюються в рамках ліцензії Apache.<br />
<span id="more-894"></span><br />
PHP-скрипти можуть виконуватися в оточенні Android <strong>з командного рядка</strong>, функціонувати як <strong>фонові процеси</strong> чи виступати в ролі <strong>звичайних GUI додатків</strong>. Для використання в PHP-додатках API платформи Android в комплект входить спеціальний інтерфейсний модуль Android.php, який представляє собою обв&#8217;язку навколо стандартного JSON RPC платформи Android і дозволяє використовувати з PHP-скриптів <strong>функції телефонії</strong>, <strong>відправляти SMS</strong>, <strong>отримувати дані з GPS</strong>, <strong>web-камери</strong> і <strong>акселерометрів</strong>, <strong>обробляти події</strong>, використовувати <strong>функції синтезатора мови</strong> (text-to-speech), <strong>формувати інтерфейс користувача</strong>.</p>
<p>Приклад найпростішого програми:</p>
<div class="codeblock">require_once(&laquo;Android.php&raquo;);<br />
$droid = new Android();<br />
$name = $droid-&gt;getInput(&laquo;Hi!&raquo;, &laquo;What is your name?&raquo;);<br />
$droid-&gt;makeToast(&#8216;Hello, &#8216; . $name['result']);</p>
<p>$droid-&gt;vibrate();</p>
<p>$droid-&gt;dialogCreateAlert();<br />
$droid-&gt;dialogSetItems(range(0, 9));<br />
$droid-&gt;dialogShow();</p>
</div>
<p>Крім PHP, на даний момент підсистема <strong>Android Scripting Environment</strong> підтримує виконання скриптів на таких мовах, як Python, Perl, JRuby, Lua, BeanShell, <a href="http://www.nine-it.info/tag/js/"  target="_blank">JavaScript</a>, Tcl і shell.</p>
<p><span style="color: #c0c0c0;">За мателіалами www.opennet.ru</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2010/07/18/android-php-dlya-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php 5.3: цікавий баг</title>
		<link>http://www.nine-it.info/2010/06/06/php-5-3-tsikavyj-bah/</link>
		<comments>http://www.nine-it.info/2010/06/06/php-5-3-tsikavyj-bah/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 08:16:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php5.3]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=731</guid>
		<description><![CDATA[Сьогодні прочитав про цікавий баг PHP 5.3, який присутній у версіях від 5.3.0 до останньої 5.3.2. Причому це спостерігається і під Linux, і під Windows. У попередніх версіях PHP дана проблема не спостерігається. Отже код: &#60;?php f(0, $var); $x = 1; $y = 2; echo $x; function f($a, $b) {} ?&#62; Логічно припустити, що повинно [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/731.png&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>Сьогодні прочитав про цікавий баг PHP 5.3, який присутній у версіях від 5.3.0 до останньої 5.3.2.<br />
Причому це спостерігається і під Linux, і під Windows.<br />
У попередніх версіях PHP дана проблема не спостерігається.</p>
<p><span id="more-731"></span></p>
<p>Отже код:</p>
<div class="codeblock">&lt;?php<br />
f(0, $var);<br />
$x = 1;<br />
$y = 2;<br />
echo $x;<br />
function f($a, $b) {}<br />
?&gt;</div>
<p>Логічно припустити, що повинно бути виведено число 1. Але на жаль, це не так, виводиться 2.</p>
<p>Перевірив на своїй ситемі PHP Version =&gt; 5.3.2-1ubuntu4.2, бага повторюється:</p>
<div class="codeblock">
<div id="_mcePaste">PHP Notice:  Undefined variable: var in test.php on line 2</div>
<div id="_mcePaste">PHP Notice:  Undefined variable:  in test.php on line 2</div>
<div id="_mcePaste">2</div>
</div>
<p>бага запощена <a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://bugs.php.net/bug.php?id=52001" rel="nofollow" >http://bugs.php.net/bug.php?id=52001</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2010/06/06/php-5-3-tsikavyj-bah/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google top 1000: цікава статистика</title>
		<link>http://www.nine-it.info/2010/06/03/google-top-1000-tsikava-statystyka/</link>
		<comments>http://www.nine-it.info/2010/06/03/google-top-1000-tsikava-statystyka/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 15:00:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[статистика]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google adsens]]></category>
		<category><![CDATA[google analytics]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[www]]></category>
		<category><![CDATA[сайт]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=718</guid>
		<description><![CDATA[Google недавно опублікував список 1000 найбільш відвідуваних веб-сайтів у світі. Хлопці з Sucuri Security виявили, що список дуже цікавий і вирішили більш детально розглянути його. Ось яку статистику вони зробили: Веб-сервери які використовуються на дуже завантажених серверах; Мова програмування, які використовується; Сайти, що використовують WordPress; Сайти, що використовують Jquery; Сайти, що використовують Google Adsense; Сайти, що використовують [...]]]></description>
			<content:encoded><![CDATA[<p>Google недавно опублікував <a href="http://www.nine-it.info/2010/05/28/google-opublikuvav-rejtynh-najbilsh-vidviduvanyh-sajtiv-merezhi/" title="Google опублікував рейтинг найбільш відвідуваних сайтів Мережі"  target="_blank">список 1000 найбільш відвідуваних веб-сайтів</a> у світі. Хлопці з Sucuri Security виявили, що список дуже цікавий і вирішили більш детально розглянути його.<br />
Ось яку статистику вони зробили:</p>
<ul>
<li>Веб-сервери які використовуються на дуже завантажених серверах;</li>
<li>Мова програмування, які використовується;</li>
<li>Сайти, що використовують WordPress;</li>
<li>Сайти, що використовують Jquery;</li>
<li>Сайти, що використовують Google Adsense;</li>
<li>Сайти, що використовують Google Analytics;</li>
<li>Сайти, які не можуть працювати без WWW.</li>
</ul>
<p><span id="more-718"></span></p>
<p>Деякі з цих цифр дійсно здивували мене. Nginx, наприклад, використовується для 15% сайтів, що дуже близько до IIS &#8211; тільки 17%. Jquery використовується майже в 30% найбільш популярних сайтах, а 42% використовують Google Analytics.</p>
<p>Що стосується мови &#8211; 15% сайтів працюють на PHP і менше 1% використовують WordPress.</p>
<p><strong>Веб-сервери, які використовують</strong><br />
Apache: 59%<br />
IIS: 17.9%<br />
Nginx: 14.8%<br />
Sun One: 1.8%<br />
IBM: 1.8%<br />
<strong>Найпопулярніші мови програмування</strong><br />
PHP: 15.3%<br />
ASP.net: 14.4%<br />
Java: 1.6%<br />
<strong>Сайти які використовують WordPress</strong>: 0.8%<br />
<strong>Сайти які використовують jQuery</strong>: 29.9%<br />
<strong>Сайти які використовують Google Adsense</strong>: 5.3%<br />
<strong>Сайти які використовують Google Analytics</strong>: 42%<br />
<strong>Сайти які не можуть працювати без www</strong>: 5.8%<br />
<strong>Сайти які не працюють взагалі</strong>: 0.5%</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2010/06/03/google-top-1000-tsikava-statystyka/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Опубліковано травневий рейтинг мов програмування</title>
		<link>http://www.nine-it.info/2010/05/18/opublikovano-travnevyj-rejtynh-mov-prohramuvannya/</link>
		<comments>http://www.nine-it.info/2010/05/18/opublikovano-travnevyj-rejtynh-mov-prohramuvannya/#comments</comments>
		<pubDate>Tue, 18 May 2010 21:41:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[рейтинг мов програмування]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[програмування]]></category>
		<category><![CDATA[статистика]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=611</guid>
		<description><![CDATA[Як припускали місяць тому в квітневому рейтингу мов програмування, Apple Objective-C вдалося увійти до десятки найбільш поширених мов програмування. Про це свідчить рейтинг, щомісячно складається компанією TIOBE Software. Незважаючи на те що Objective-C додав лише 0,08%, його досягнення слід розцінювати як вражаюче, адже тільки тринадцять мов потрапляли до першої десятки, починаючи з моменту запуску індексу в [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/611.png&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>Як припускали місяць тому в <a href="http://www.nine-it.info/2010/04/15/opublikovanyj-kvitnevyj-rejtynh-mov-prohramuvannya/" title="Опублікований квітневий рейтинг мов програмування" >квітневому рейтингу мов програмування</a>, <a href="http://www.nine-it.info/tag/apple/" title="про apple" >Apple</a> Objective-C вдалося увійти до десятки найбільш поширених мов програмування. Про це свідчить рейтинг, щомісячно складається компанією TIOBE Software.</p>
<p>Незважаючи на те що Objective-C додав лише 0,08%, його досягнення слід розцінювати як вражаюче, адже тільки тринадцять мов потрапляли до першої десятки, починаючи з моменту запуску індексу в червні 2001 року.</p>
<p><span id="more-611"></span></p>
<p>Активне розширення екосистеми Objective-C пояснюється не тільки зростанням популярності мобільної платформи iPhone OS, число додатків для якої перевищила в App Store 200 тис. найменувань. Причину також слід шукати в недавніх заборонах Стіва Джобса на сторонні інструменти розробки iPhone-і iPad-програм.</p>
<table>
<tbody>
<tr>
<td>позиція в травні 2010</td>
<td>позиція в травні 2009</td>
<td>дельта позиції</td>
<td>мова програмування</td>
<td>рейтиг в травні</td>
<td>дельта рейтинг за рік</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td><span style="color: #008000;">+</span></td>
<td>C</td>
<td>18,186%</td>
<td>+2.06%</td>
</tr>
<tr>
<td>2</td>
<td>1</td>
<td><span style="color: #ff0000;">-</span></td>
<td>Java</td>
<td>17.957%</td>
<td>-1.58%</td>
</tr>
<tr>
<td>3</td>
<td>3</td>
<td>=</td>
<td>С++</td>
<td>10.378%</td>
<td>-0.69%</td>
</tr>
<tr>
<td>4</td>
<td>4</td>
<td>=</td>
<td><a href="http://www.nine-it.info/tag/php/"  target="_blank">PHP</a></td>
<td>9,073%</td>
<td>-0,85%</td>
</tr>
<tr>
<td>5</td>
<td>5</td>
<td>=</td>
<td>(Vesual) Basic</td>
<td>5.656%</td>
<td>-2.97%</td>
</tr>
<tr>
<td>6</td>
<td>7</td>
<td><span style="color: #008000;">+</span></td>
<td>C#</td>
<td>4.779%</td>
<td>+0.51%</td>
</tr>
<tr>
<td>7</td>
<td>6</td>
<td><span style="color: #ff0000;">-</span></td>
<td>Python</td>
<td>4,097%</td>
<td>-1.45%</td>
</tr>
<tr>
<td>8</td>
<td>9</td>
<td><span style="color: #008000;">+</span></td>
<td>Perl</td>
<td>3.286%</td>
<td>-0.24%</td>
</tr>
<tr>
<td>9</td>
<td>11</td>
<td><span style="color: #008000;">++</span></td>
<td>Delphi</td>
<td>2,566%</td>
<td>+0.24%</td>
</tr>
<tr>
<td>10</td>
<td>39</td>
<td><span style="color: #008000;">++++</span></td>
<td>Objective-C</td>
<td>2,.363%</td>
<td>+2.26%</td>
</tr>
<tr>
<td>11</td>
<td>10</td>
<td><span style="color: #ff0000;">-</span></td>
<td>Ruby</td>
<td>2,094%</td>
<td>-0.60%</td>
</tr>
<tr>
<td>12</td>
<td>8</td>
<td><span style="color: #ff0000;">&#8212;</span></td>
<td><a href="http://www.nine-it.info/tag/js/" title="про JavaScript (js)" >JavaScript</a></td>
<td>2.084%</td>
<td>-1.46%</td>
</tr>
<tr>
<td>13</td>
<td>12</td>
<td><span style="color: #ff0000;">-</span></td>
<td>PL/SQL</td>
<td>0,859%</td>
<td>-0.24%</td>
</tr>
<tr>
<td>14</td>
<td>13</td>
<td><span style="color: #ff0000;">-</span></td>
<td>SAS</td>
<td>0,732%</td>
<td>-0.07%</td>
</tr>
<tr>
<td>15</td>
<td>14</td>
<td><span style="color: #ff0000;">-</span></td>
<td>Pascal</td>
<td>0,728%</td>
<td>-0,05%</td>
</tr>
<tr>
<td>16</td>
<td>22</td>
<td><span style="color: #008000;">++++</span></td>
<td>Lisp/Scheme/Clojire</td>
<td>0,651%</td>
<td>+0,19%</td>
</tr>
<tr>
<td>17</td>
<td>16</td>
<td><span style="color: #ff0000;">-</span></td>
<td>ABAP</td>
<td>0,65%</td>
<td>-0,02%</td>
</tr>
<tr>
<td>18</td>
<td></td>
<td><span style="color: #008000;">+++++</span></td>
<td>Go</td>
<td>0,640%</td>
<td>+0,64%</td>
</tr>
<tr>
<td>19</td>
<td>18</td>
<td><span style="color: #ff0000;">-</span></td>
<td>MATLAB</td>
<td>0,612%</td>
<td>+0,09%</td>
</tr>
<tr>
<td>20</td>
<td>20</td>
<td>=</td>
<td>Lua</td>
<td>0,493%</td>
<td>+0,01%</td>
</tr>
</tbody>
</table>
<p>Традиційними лідерами залишаються добре відомі С, Java, C++, PHP, Visual Basic, C#, Python, Perl і Delphi. Співвідношення <strong>об&#8217;єктно орієнтованих</strong> мов до <strong>процедурних</strong> становить <strong>54,6%</strong> до <strong>40,7%</strong>. На частку <strong>функціональних</strong> і <strong>логічних мов</strong> припадає по <strong>3,2%</strong> і <strong>1,6%</strong>. Мови з <strong>статичною типізацією</strong> обганяють <strong>динамічно типізовані</strong> &#8211; <strong>62,7%</strong> до <strong>37,3%</strong>.</p>
<p>Рейтинг складається на основі інтелектуального підрахунку згадок конкретної мови програмування при пошуку в <a href="http://www.nine-it.info/tag/google/" title="про google" >Google</a>, Blogger, MSN, Yahoo!, Wikipedia і <a href="http://www.nine-it.info/tag/youtube/" title="про YouTube" >YouTube</a>. Він зачіпає тільки в Тюрінг-повні мова, не враховуючи, наприклад, SQL або <a href="http://www.nine-it.info/tag/html/" title="статті на тему html" >HTML</a>, а також асемблер зважаючи на його специфічність.</p>
<div id="attachment_617" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.nine-it.info/wp-content/uploads/2010/05/600-tiobe2.png" ><img class="size-full wp-image-617" title="Діаграма популярності мов програмування" src="http://www.nine-it.info/wp-content/uploads/2010/05/600-tiobe2.png" alt="Діаграма популярності мов програмування" width="600" height="451" /></a><p class="wp-caption-text">Діаграма популярності мов програмування безпосередньо відображає не тільки зміни в ПО-галузі, а й усю картину ІТ-промисловості.</p></div>
<p>Незважаючи на багаторічні бурхливі дискусії щодо якості та достовірності рейтингу, його значимість безперечна, тому що дозволяє не тільки виявити тенденції, але й визначити власну профпридатність девелопера в розвивається ІТ-індустрії або не помилитися у стратегічному виборі робочих інструментів при реалізації нового програмного бізнес-проекту.</p>
<p><span style="color: #c0c0c0;">за матеріалами TIOBE Software.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2010/05/18/opublikovano-travnevyj-rejtynh-mov-prohramuvannya/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Опублікований квітневий рейтинг мов програмування</title>
		<link>http://www.nine-it.info/2010/04/15/opublikovanyj-kvitnevyj-rejtynh-mov-prohramuvannya/</link>
		<comments>http://www.nine-it.info/2010/04/15/opublikovanyj-kvitnevyj-rejtynh-mov-prohramuvannya/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 05:45:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[рейтинг мов програмування]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[програмування]]></category>
		<category><![CDATA[статистика]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=480</guid>
		<description><![CDATA[Вперше за чотири з гаком роки мова Сі очолила рейтинг мов програмування, що щомісячно складається компанією TIOBE Software. Ринкова частка Сі протягом десяти років не дуже-то й змінювалася, коливаючись у межах 15-20%. Однак у квітні Сі раптом вдалося посунути з верхнього рядка Java. У цілому це відображає багаторічну тенденцію зменшення присутності Java-платформи, хоча зниження її [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/480.png&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>Вперше за чотири з гаком роки мова Сі очолила <a href="http://www.nine-it.info/category/interesting/rejtynh-mov-prohramuvannya/"  target="_blank">рейтинг мов програмування</a>, що щомісячно складається компанією TIOBE Software.</p>
<p>Ринкова частка Сі протягом десяти років не дуже-то й змінювалася, коливаючись у межах 15-20%. Однак у квітні Сі раптом вдалося посунути з верхнього рядка Java. У цілому це відображає багаторічну тенденцію зменшення присутності Java-платформи, хоча зниження її популярності можна пояснити зростанням числа девелоперів, що освоюють відносно нові інструменти, які виконуються в оточенні віртуальної Java-машини, наприклад JavaFX.</p>
<p><span id="more-480"></span></p>
<p>Бадьоро дереться вгору Apple Objective-C, що обумовлено ширятися спільнотою розробників, які створюють все більше iPhone-додатків; число останніх в App Store вже перевищило 185 тис. Вважаю, що у зв&#8217;язку з недавніми заборонами <a href="http://www.nine-it.info/tag/apple/" title="всі статті про Apple"  target="_blank">Apple</a> на сторонні інструменти розробки iPhone-програм, зовсім скоро Objective-C вдасться увійти в першу десятку найбільш популярних мов програмування.</p>
<table>
<tbody>
<tr>
<td>позиція в квітні 2010</td>
<td>позиція в квітні 2009</td>
<td>дельта позиції</td>
<td>мова програмування</td>
<td>рейтиг в квітні</td>
<td>дельта рейтинг за рік</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td><span style="color: #008000;">+</span></td>
<td>C</td>
<td>18,058%</td>
<td>+2.59%</td>
</tr>
<tr>
<td>2</td>
<td>1</td>
<td><span style="color: #ff0000;">-</span></td>
<td>Java</td>
<td>18.051%</td>
<td>-1.29%</td>
</tr>
<tr>
<td>3</td>
<td>3</td>
<td><span style="color: #008000;"><span style="color: #000000;">=</span></span></td>
<td>С++</td>
<td>9.707%</td>
<td>-1.03%</td>
</tr>
<tr>
<td>4</td>
<td>4</td>
<td><span style="color: #ff0000;"><span style="color: #000000;">=</span></span></td>
<td><a href="http://www.nine-it.info/tag/php/"  target="_blank">PHP</a></td>
<td>9,662%</td>
<td>-0,23%</td>
</tr>
<tr>
<td>5</td>
<td>5</td>
<td><span style="color: #ff0000;"><span style="color: #000000;">=</span></span></td>
<td>(Vesual) Basic</td>
<td>6.392%</td>
<td>-2.70%</td>
</tr>
<tr>
<td>6</td>
<td>7</td>
<td><span style="color: #008000;">+</span></td>
<td>C#</td>
<td>4.435%</td>
<td>+0.38%</td>
</tr>
<tr>
<td>7</td>
<td>6</td>
<td><span style="color: #ff0000;">-</span></td>
<td>Python</td>
<td>4,205%</td>
<td>-1.88%</td>
</tr>
<tr>
<td>8</td>
<td>9</td>
<td><span style="color: #008000;">+</span></td>
<td>Perl</td>
<td>3.553%</td>
<td>+0.09%</td>
</tr>
<tr>
<td>9</td>
<td>11</td>
<td><span style="color: #008000;">++</span></td>
<td>Delphi</td>
<td>2,715%</td>
<td>+0.44%</td>
</tr>
<tr>
<td>10</td>
<td>8</td>
<td><span style="color: #ff0000;">-</span></td>
<td><a href="http://www.nine-it.info/tag/js/" title="про JavaScript (js)" >JavaScript</a></td>
<td>2,.469%</td>
<td>-1.21%</td>
</tr>
<tr>
<td>11</td>
<td>42</td>
<td><span style="color: #008000;">++++</span></td>
<td>Objective-C</td>
<td>2,288%</td>
<td>+2.15%</td>
</tr>
<tr>
<td>12</td>
<td>10</td>
<td><span style="color: #ff0000;">&#8211;</span></td>
<td>Ruby</td>
<td>2.221%</td>
<td>-0.35%</td>
</tr>
<tr>
<td>13</td>
<td>14</td>
<td><span style="color: #008000;">+</span></td>
<td>SAS</td>
<td>0,771%</td>
<td>-0.07%</td>
</tr>
<tr>
<td>14</td>
<td>12</td>
<td><span style="color: #ff0000;">-</span></td>
<td>PL/SQL</td>
<td>0,710%</td>
<td>-0.38%</td>
</tr>
<tr>
<td>15</td>
<td></td>
<td><span style="color: #ff0000;"><span style="color: #008000;">++++</span></span></td>
<td>Go</td>
<td>0,710%</td>
<td>+0,710%</td>
</tr>
<tr>
<td>16</td>
<td>15</td>
<td><span style="color: #008000;"><span style="color: #ff0000;">-</span></span></td>
<td>Pascal</td>
<td>0,648%</td>
<td>-0,07%</td>
</tr>
<tr>
<td>17</td>
<td>17</td>
<td><span style="color: #ff0000;"><span style="color: #000000;">=</span></span></td>
<td>ABAP</td>
<td>0,625%</td>
<td>-0,03%</td>
</tr>
<tr>
<td>18</td>
<td>20</td>
<td><span style="color: #008000;">++</span></td>
<td>MATLAB</td>
<td>0,616%</td>
<td>+0,13%</td>
</tr>
<tr>
<td>19</td>
<td>22</td>
<td><span style="color: #008000;">++</span></td>
<td>ActionScript</td>
<td>0,545%</td>
<td>+0,09%</td>
</tr>
<tr>
<td>20</td>
<td>19</td>
<td><span style="color: #ff0000;">-</span></td>
<td>Lua</td>
<td>0,521%</td>
<td>+0,03%</td>
</tr>
</tbody>
</table>
<div id="attachment_487" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.nine-it.info/wp-content/uploads/2010/04/programs_diagram.png" ><img class="size-full wp-image-487" title="Діаграма популярності мов програмування безпосередньо відображає не тільки зміни в ПО-галузі, а й усю картину ІТ-промисловості." src="http://www.nine-it.info/wp-content/uploads/2010/04/programs_diagram.png" alt="Діаграма популярності мов програмування безпосередньо відображає не тільки зміни в ПО-галузі, а й усю картину ІТ-промисловості." width="600" height="450" /></a><p class="wp-caption-text">Діаграма популярності мов програмування безпосередньо відображає не тільки зміни в ПО-галузі, а й усю картину ІТ-промисловості.</p></div>
<p><span style="color: #c0c0c0;">за матеріалами TIOBE Software</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2010/04/15/opublikovanyj-kvitnevyj-rejtynh-mov-prohramuvannya/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Опублікований лютневий рейтинг мов програмування</title>
		<link>http://www.nine-it.info/2010/02/28/opublikovanyj-lyutnevyj-rejtynh-mov-prohramuvannya/</link>
		<comments>http://www.nine-it.info/2010/02/28/opublikovanyj-lyutnevyj-rejtynh-mov-prohramuvannya/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 15:46:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[рейтинг мов програмування]]></category>
		<category><![CDATA[цікаво]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[програмування]]></category>
		<category><![CDATA[статистика]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=361</guid>
		<description><![CDATA[Лютневі зміни в рейтингу мов програмування, який щомісячно складається компанією TIOBE Software, не дуже відрізняються від січневого огляду. Так, мова програмування Go, розроблений в лабораторіях Google, і що існує досить давно Apple Objective-C як і раніше, займають 13-у і 12-у позиції. Якщо у випадку Go популярність пояснюється його унікальними можливостями паралельного програмування для багатопоточних і багатопроцесорних [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/361.png&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>Лютневі зміни в <a href="http://www.nine-it.info/category/interesting/rejtynh-mov-prohramuvannya/"  target="_blank">рейтингу мов програмування</a>, який щомісячно складається компанією TIOBE Software, не дуже відрізняються від січневого огляду.</p>
<p>Так, мова програмування Go, розроблений в лабораторіях <a href="http://www.nine-it.info/tag/google/" title="всі статті про гугл" >Google</a>, і що існує досить давно <a href="http://www.nine-it.info/tag/apple/" title="про Apple" >Apple</a> Objective-C як і раніше, займають 13-у і 12-у позиції. Якщо у випадку Go популярність пояснюється його унікальними можливостями паралельного програмування для багатопоточних і багатопроцесорних середовищ, то успіх Objective-C обумовлений зростаючим числом девелоперів, які створюють все більше iPhone-додатків, кількість яких в січні перевищила 140 тис.</p>
<p><span id="more-361"></span></p>
<p>Лютневі підрахунки свідчать: чотири нішевих мови програмування мають всі шанси увійти до двадцятки найбільш популярних. Мова йде про навчальному дітей Scratch, функціональному Erlang і мови на базі віртуальної Java-машини (JVM) &#8211; Scala і JavaFX.</p>
<table>
<tbody>
<tr>
<td>позиція в лютому 2010</td>
<td>позиція в лютому 2009</td>
<td>дельта позиції</td>
<td>мова програмування</td>
<td>рейтиг в лютому</td>
<td>дельта рейтинг за рік</td>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td><span style="color: #000000;">=</span></td>
<td>Java</td>
<td>17,348%</td>
<td>-2.05%</td>
</tr>
<tr>
<td>2</td>
<td>2</td>
<td>=</td>
<td>C</td>
<td>16,602%</td>
<td>+0,76</td>
</tr>
<tr>
<td>3</td>
<td>5</td>
<td><span style="color: #008000;">+</span></td>
<td><a href="http://www.nine-it.info/tag/php/" title="статті про php" >PHP</a></td>
<td>10,001%</td>
<td>+1,22%</td>
</tr>
<tr>
<td>4</td>
<td>3</td>
<td><span style="color: #ff0000;">-</span></td>
<td>C++</td>
<td>9,447%</td>
<td>-0,19%</td>
</tr>
<tr>
<td>5</td>
<td>4</td>
<td><span style="color: #ff0000;">-</span></td>
<td>(Vesual) Basic</td>
<td>7,051%</td>
<td>-1,79%</td>
</tr>
<tr>
<td>6</td>
<td>6</td>
<td>=</td>
<td>C#</td>
<td>5,015%</td>
<td>-0.05%</td>
</tr>
<tr>
<td>7</td>
<td>7</td>
<td>=</td>
<td>Python</td>
<td>4,314%</td>
<td>-0,25%</td>
</tr>
<tr>
<td>8</td>
<td>8</td>
<td>=</td>
<td>Perl</td>
<td>3,600%</td>
<td>-0,52%</td>
</tr>
<tr>
<td>9</td>
<td>9</td>
<td>=</td>
<td>Delphi</td>
<td>2,656%</td>
<td>-0,97%</td>
</tr>
<tr>
<td>10</td>
<td>10</td>
<td>=</td>
<td><a href="http://www.nine-it.info/tag/js/" title="про JavaScript (js)" >JavaScript</a></td>
<td>2,636%</td>
<td>-0,90%</td>
</tr>
<tr>
<td>11</td>
<td>11</td>
<td>=</td>
<td>Ruby</td>
<td>2,439%</td>
<td>-0,84%</td>
</tr>
<tr>
<td>12</td>
<td>32</td>
<td><span style="color: #008000;">+++</span></td>
<td>Objective-C</td>
<td>1,779%</td>
<td>+1,60%</td>
</tr>
<tr>
<td>13</td>
<td>-</td>
<td><span style="color: #008000;">++++</span></td>
<td>Go</td>
<td>1,778%</td>
<td>+1,78%</td>
</tr>
<tr>
<td>14</td>
<td>14</td>
<td>=</td>
<td>SAS</td>
<td>0,771%</td>
<td>+1,78%</td>
</tr>
<tr>
<td>15</td>
<td>13</td>
<td><span style="color: #ff0000;">&#8211;</span></td>
<td>PL/SQL</td>
<td>0,738%</td>
<td>-0,25%</td>
</tr>
<tr>
<td>16</td>
<td>17</td>
<td><span style="color: #008000;">+</span></td>
<td>ABAP</td>
<td>0,661</td>
<td>+0,09%</td>
</tr>
<tr>
<td>17</td>
<td>16</td>
<td><span style="color: #ff0000;">-</span></td>
<td>Pascal</td>
<td>0,606%</td>
<td>-0,08%</td>
</tr>
<tr>
<td>18</td>
<td>18</td>
<td>=</td>
<td>ActionScript</td>
<td>0,579%</td>
<td>+0,04%</td>
</tr>
<tr>
<td>19</td>
<td>23</td>
<td><span style="color: #008000;">++</span></td>
<td>Lisp/Scheme</td>
<td>0,563%</td>
<td>+0,13%</td>
</tr>
<tr>
<td>20</td>
<td>24</td>
<td><span style="color: #008000;">++</span></td>
<td>MATLAB</td>
<td>0,536%</td>
<td>+0,12%</td>
</tr>
</tbody>
</table>
<p>З інших змін в рейтингу: переносима мова програмування Fan для платформ JVM і .NET CLR перейменований в Fantom; в списку з&#8217;явилися нові учасники &#8211; Lustre для програмування реактивних систем і Simulink для імітаційного моделювання.</p>
<p>Традиційними лідерами залишаються добре відомі Java, С, PHP, C++, Visual Basic, C#, Python, Perl, Delphi, JavaScript і Ruby. Співвідношення об&#8217;єктно орієнтованих мов до процедурних становить 53,8% до 41,7%, на частку функціональних і логічних мов припадає по 2,9% і 1,6%. Мови зі статичної типізацією обганяють динамічно типізовані &#8211; 59,4% до 40,6%.</p>
<p>Рейтинг складається на основі інтелектуального підрахунку згадок конкретної мови програмування при пошуку в Google, Blogger, MSN, Yahoo!, Wikipedia і YouTube. Він стосується тільки Тьюринг-повні мови, не враховуючи, наприклад, SQL або <a href="http://www.nine-it.info/tag/html/" title="все про html" >HTML</a>, а також асемблер зважаючи на його специфічність.</p>
<p>Незважаючи на багаторічні бурхливі дискусії щодо якості та достовірності рейтингу, його значимість безперечна, тому що дозволяє не тільки виявити тенденції, але й визначити власну профпридатність девелопера в розвитку ІТ-індустрії або не помилитися у стратегічному виборі робочих інструментів при реалізації нового програмного бізнес-проекту.</p>
<div id="attachment_363" class="wp-caption aligncenter" style="width: 610px"><a href="http://www.nine-it.info/wp-content/uploads/2010/02/600-tpci_trends.png" ><img class="size-full wp-image-363" title="Діаграма популярності мов програмування" src="http://www.nine-it.info/wp-content/uploads/2010/02/600-tpci_trends.png" alt="Діаграма популярності мов програмування безпосередньо відображає не тільки зміни в ПО-галузі, а й усю картину ІТ-промисловості." width="600" height="450" /></a><p class="wp-caption-text">Діаграма популярності мов програмування безпосередньо відображає не тільки зміни в ПО-галузі, а й усю картину ІТ-промисловості.</p></div>
<p><span style="color: #c0c0c0;">за матеріалами  TIOBE Software</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2010/02/28/opublikovanyj-lyutnevyj-rejtynh-mov-prohramuvannya/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Translate API для php</title>
		<link>http://www.nine-it.info/2010/02/11/google-translate-api-dlya-php/</link>
		<comments>http://www.nine-it.info/2010/02/11/google-translate-api-dlya-php/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 23:46:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[man]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.nine-it.info/?p=255</guid>
		<description><![CDATA[довелося поцікавитися, як можна швидко і без зайвих зусиль перекласти бабато (дуже багато, в моєму випадку близько 2 тисяч фраз) з англійської мови на &#171;киреличну&#187;. Одразу зазначу що від якості перекладу я нічого не вимагав (аби було наглядно), оскільки машинний переклад не дуже досконалий . Тому одразу почав шукати google translate api для php і [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nine-it.info/wp-content/plugins/simple-post-thumbnails/timthumb.php?src=/wp-content/thumbnails/255.jpg&amp;w=200&amp;h=150&amp;zc=1&amp;ft=png' alt='post thumbnail' /></p>
<p>довелося поцікавитися, як можна швидко і без зайвих зусиль перекласти бабато (дуже багато, в моєму випадку близько 2 тисяч фраз) з англійської мови на &laquo;киреличну&raquo;. Одразу зазначу що від якості перекладу я нічого не вимагав (аби було наглядно), оскільки машинний переклад не дуже досконалий <img src='http://www.nine-it.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  . Тому одразу почав шукати <a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://code.google.com/p/php-language-api/" rel="nofollow"  target="_blank">google translate api</a> для php і надибав гарний проект (який хоститься на code.google.com) де все грано написано, описано і показано (як перекласти з одної мови на іншу використовуючи однісіньку функцію).</p>
<p><span id="more-255"></span></p>
<p><strong>аглорим доволі простий</strong>:</p>
<ul>
<li>качаємо google language api клас;</li>
<li>підклячаємо в файлі який буде займатися перекладом;</li>
<li>перекладаємо текст за допомогою статичного методу Google_Translate_API::translate. перший атрибут &#8211; це текст для перекладу, другий &#8211; з якої мови перекладаємо і третій на яку;</li>
<li>насолоджуємося простотою роботи.</li>
</ul>
<p><strong>приклад коду для перекладу</strong>:</p>
<div class="codeblock"><code>&lt;?php<br />
// ми повинні переглядати сторінку в кодуванні UTF-8, в іншрму випадку кодування сторінки буде зіпсоване<br />
header('Content-Type: text/html; charset=utf-8');</p>
<p>// підключаємо google language api клас<br />
require_once('google.translator.php');</p>
<p></code><code>// перекладаємо текст<br />
$text = 'Welcome to my website.';<br />
$trans_text = Google_Translate_API::translate($text, 'en', 'uk');<br />
if ($trans_text !== false) {<br />
echo $trans_text;<br />
}<br />
?&gt;</code></p>
</div>
<p>цей же приклад і сам клас розмішені на <a target="_blank" rel="nofollow" href="http://www.nine-it.info/goto/http://code.google.com/p/php-language-api/" rel="nofollow"  target="_blank">сайті</a></p>
<p>P.S. на всяк випадок додам код і самого класу:</p>
<div class="codeblock"><code>&lt;?php<br />
/**<br />
* Translating language with Google API<br />
* @author gabe@fijiwebdesign.com<br />
* @version $Id$<br />
* @license - Share-Alike 3.0 (http://creativecommons.org/licenses/by-sa/3.0/)<br />
*<br />
* Google requires attribution for their Language API, please see: http://code.google.com/apis/ajaxlanguage/documentation/#Branding<br />
*<br />
*/<br />
class Google_Translate_API {<br />
/**<br />
* Translate a piece of text with the Google Translate API<br />
* @return String<br />
* @param $text String<br />
* @param $from String[optional] Original language of $text. An empty String will let google decide the language of origin<br />
* @param $to String[optional] Language to translate $text to<br />
*/<br />
function translate($text, $from = '', $to = 'en') {<br />
$url = 'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&amp;q='.rawurlencode($text).'&amp;langpair='.rawurlencode($from.'|'.$to);<br />
$response = file_get_contents(<br />
$url,<br />
null,<br />
stream_context_create(<br />
array(<br />
'http'=&gt;array(<br />
'method'=&gt;"GET",<br />
'header'=&gt;"Referer: http://".$_SERVER['HTTP_HOST']."/\r\n"<br />
)<br />
)<br />
)<br />
);<br />
if (preg_match("/{\"translatedText\":\"([^\"]+)\"/i", $response, $matches)) {<br />
return self::_unescapeUTF8EscapeSeq($matches[1]);<br />
}<br />
return false;<br />
}<br />
/**<br />
* Convert UTF-8 Escape sequences in a string to UTF-8 Bytes. Old version.<br />
* @return UTF-8 String<br />
* @param $str String<br />
*/<br />
function __unescapeUTF8EscapeSeq($str) {<br />
return preg_replace_callback("/\\\u([0-9a-f]{4})/i", create_function('$matches', 'return html_entity_decode(\'&amp;#x\'.$matches[1].\';\', ENT_NOQUOTES, \'UTF-8\');'), $str);<br />
}<br />
/**<br />
* Convert UTF-8 Escape sequences in a string to UTF-8 Bytes<br />
* @return UTF-8 String<br />
* @param $str String<br />
*/<br />
function _unescapeUTF8EscapeSeq($str) {<br />
return preg_replace_callback("/\\\u([0-9a-f]{4})/i", create_function('$matches', 'return Google_Translate_API::_bin2utf8(hexdec($matches[1]));'), $str);<br />
}<br />
/**<br />
* Convert binary character code to UTF-8 byte sequence<br />
* @return String<br />
* @param $bin Mixed Interger or Hex code of character<br />
*/<br />
function _bin2utf8($bin) {<br />
if ($bin &lt;= 0x7F) {<br />
return chr($bin);<br />
} else if ($bin &gt;= 0x80 &amp;&amp; $bin &lt;= 0x7FF) {<br />
return pack("C*", 0xC0 | $bin &gt;&gt; 6, 0x80 | $bin &amp; 0x3F);<br />
} else if ($bin &gt;= 0x800 &amp;&amp; $bin &lt;= 0xFFF) {<br />
return pack("C*", 0xE0 | $bin &gt;&gt; 11, 0x80 | $bin &gt;&gt; 6 &amp; 0x3F, 0x80 | $bin &amp; 0x3F);<br />
} else if ($bin &gt;= 0x10000 &amp;&amp; $bin &lt;= 0x10FFFF) {<br />
return pack("C*", 0xE0 | $bin &gt;&gt; 17, 0x80 | $bin &gt;&gt; 12 &amp; 0x3F, 0x80 | $bin &gt;&gt; 6&amp; 0x3F, 0x80 | $bin &amp; 0x3F);<br />
}<br />
}<br />
}<br />
?&gt;</code></div>
]]></content:encoded>
			<wfw:commentRss>http://www.nine-it.info/2010/02/11/google-translate-api-dlya-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

