<?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>Mihalytch personal blog &#187; Programming</title>
	<atom:link href="http://mihalytch.org.ua/programming/feed" rel="self" type="application/rss+xml" />
	<link>http://mihalytch.org.ua</link>
	<description>Все о высоких технологиях</description>
	<lastBuildDate>Mon, 05 Dec 2011 16:05:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Алгоритм P: Перемешивание массива</title>
		<link>http://mihalytch.org.ua/programming/php/algoritm-p-peremeshivanie-massiva.html</link>
		<comments>http://mihalytch.org.ua/programming/php/algoritm-p-peremeshivanie-massiva.html#comments</comments>
		<pubDate>Sun, 17 Apr 2011 19:45:02 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[алгоритм]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/?p=348</guid>
		<description><![CDATA[Приветствую друзья. Сегодня речь пойдет о перемешивании одномерно массива. Будем пользоваться Алгоритмом P, описанным Дональдом Кнутом (Искусство программирования. Том 2, [...]]]></description>
			<content:encoded><![CDATA[<p>Приветствую друзья.</p>
<p>Сегодня речь пойдет о <strong>перемешивании одномерно массива</strong>. Будем пользоваться Алгоритмом P, описанным Дональдом Кнутом (Искусство программирования. Том 2, с.163).</p>
<p>Для начала процитируем описание алгоритма.</p>
<p><strong>Алгоритм P (Перемешивание)</strong>. Пусть X1, X2, &#8230;, Xt &#8211; множество t чисел для перемешивания.</p>
<p><strong>P1</strong>. &#8220;Инициализация&#8221;. Присвоить j &lt;- t.</p>
<p><strong>P2</strong>. &#8220;Генерация U&#8221;. Генерировать случайное число U, равномерно распределенное между 0 и 1.</p>
<p><strong>P3</strong>. &#8220;Замена&#8221;. Присвоить j &lt;- round(j*U) + 1, где round() &#8211; операция округления до целого числа. Заменим Xk &lt;-&gt; Xj.</p>
<p><strong>P4</strong>. &#8220;Уменьшение j&#8221;. Уменьшить j на 1. Если j&gt;1, возвратиться к шагу <strong>P2</strong>.</p>
<p><span id="more-348"></span><br />
А теперь перейдем к реализации данного алгоритма на PHP.</p>
<pre class="brush: php; title: ; notranslate">
# Приведем Алгоритм Р от Кнута в действие
function ShuffleP(&amp;$X) {
$N = count($X); // Кол-во элементов массива

# P1: Инициализация
$j = $N-1; // Индекс последнего элемента массива

do {
# P2: Генерация U, равномерно распределенного между 0 и j
$U = rand(0, $j);

# P3: Округлить U до целого и присвоить k. Переставить местами Xk &lt;-&gt;Xj
$k = round($U);

$tmp = $X[$k];
$X[$k] = $X[$j];
$X[$j] = $tmp;
unset($tmp);

# P4: Уменьшить j на 1. Если j&gt;0: вернуться к P2
$j--;
} while($j&gt;0);
}
</pre>
<p>Исходный код со скриптом для демонстрации работы функции можно скачать по ссылке <a href="http://mihalytch.org.ua/download/alg.shuffle.zip" >alg.shuffle.zip</a> .</p>
<p>Спасибо за внимание!</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/php/algoritm-p-peremeshivanie-massiva.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Меняем значение переменных местами</title>
		<link>http://mihalytch.org.ua/programming/c/menyaem-znachenie-peremennyx-mestami.html</link>
		<comments>http://mihalytch.org.ua/programming/c/menyaem-znachenie-peremennyx-mestami.html#comments</comments>
		<pubDate>Fri, 03 Dec 2010 23:16:17 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[магия]]></category>
		<category><![CDATA[С]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/?p=320</guid>
		<description><![CDATA[Забавный факт. Сегодня узнал, что для того чтобы поменять значения двух переменных местами не обязательно пользоваться конструкцией: Можно просто выполнить [...]]]></description>
			<content:encoded><![CDATA[<p>Забавный факт. Сегодня узнал, что для того чтобы поменять значения двух переменных местами не обязательно пользоваться конструкцией:</p>
<pre class="brush: cpp; title: ; notranslate">
tmp = var1;
var1 = var2;
var2 = tmp;
</pre>
<p>Можно просто выполнить три операции поразрядного исключающего ИЛИ:</p>
<pre class="brush: cpp; title: ; notranslate">
var1 ^= var2;
var2 ^= var1;
var1 ^= var2;
</pre>
<p>P.S. Вспомнив азы булевой алгебры, проверил на листочке бумаги, таки работает =)</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/c/menyaem-znachenie-peremennyx-mestami.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>С днем рождения jQuery или релиз версии 1.4</title>
		<link>http://mihalytch.org.ua/programming/js/jquery/jquery-1-4-release.html</link>
		<comments>http://mihalytch.org.ua/programming/js/jquery/jquery-1-4-release.html#comments</comments>
		<pubDate>Thu, 14 Jan 2010 14:37:54 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/?p=241</guid>
		<description><![CDATA[Сегодня очередная годовщина jQuery. Разработчики jQuery решили приурочить к четвертому дню рождения этой замечательной библиотеки релиз новой версии 1.4. В [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня очередная годовщина jQuery. Разработчики jQuery решили приурочить к четвертому дню рождения этой замечательной библиотеки релиз новой версии 1.4.</p>
<p>В честь этого двойного праздника был открыт сайт <a target="_blank" rel="nofollow" href="http://mihalytch.org.ua/goto//go/http://jquery14.com/"  target="_blank">14 Days of jQuery</a>, на котором в течении 14 дней будет анонсирована новая версия библиотеки.<br />
<span id="more-241"></span><br />
Скачать последнюю версию библиотеки вы можете здесь &#8211; <a target="_blank" rel="nofollow" href="http://mihalytch.org.ua/goto//go/http://code.jquery.com/jquery-1.4.js"  target="_blank">jQuery 1.4</a>. Следить за последними анонсами можно через <a target="_blank" rel="nofollow" href="http://mihalytch.org.ua/goto//go/http://twitter.com/jquery"  target="_blank">Твиттер</a> или подписавшись на <a target="_blank" rel="nofollow" href="http://mihalytch.org.ua/goto//go/http://feeds.feedburner.com/The14DaysOfJquery"  target="_blank">RSS рассылку</a>.</p>
<p>Уже доступны <a target="_blank" rel="nofollow" href="http://mihalytch.org.ua/goto//go/http://futurecolors.ru/jquery/"  target="_blank">онлайн</a> и <a target="_blank" rel="nofollow" href="http://mihalytch.org.ua/goto//go/http://futurecolors.ru/jquery/jquery.cheatsheet.1.4.pdf"  target="_blank">PDF версия для печати</a> шпаргалки для текущей версии jQuery 1.4. Также известно, что обновлен дизайн и структура <a target="_blank" rel="nofollow" href="http://mihalytch.org.ua/goto//go/http://api.jquery.com/"  target="_blank">jQuery API</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/js/jquery/jquery-1-4-release.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Бегущая строка на JavaScript своими руками</title>
		<link>http://mihalytch.org.ua/programming/js/begushhaya-stroka-na-javascript-svoimi-rukami.html</link>
		<comments>http://mihalytch.org.ua/programming/js/begushhaya-stroka-na-javascript-svoimi-rukami.html#comments</comments>
		<pubDate>Tue, 28 Jul 2009 09:38:59 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/?p=177</guid>
		<description><![CDATA[Сегодня речь пойдет о создании простого скрипта для имитации эффекта бегущей строки. Для начала, придумаем, как это будет работать. По [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня речь пойдет о создании простого скрипта для имитации эффекта бегущей строки. Для начала, придумаем, как это будет работать. По идее должен быть внешний контейнер, который определит размеры блока бегущей строки и ее положение <span style="text-decoration: line-through;">в пространстве</span> на странице, назовем его <em>marquee_container</em>. Также должен существовать блок, содержащий &#8220;бегущий&#8221; текст, наречем его &#8211; <em>marquee_text</em>.</p>
<p>Теперь должно быть все просто, мы задаем родительскому блоку фиксированную ширину, position: relative (для того, чтобы мы могли абсолютно позиционировать блок с текстом относительно текущего), overflow: hidden (для того, чтобы &#8220;бегущий&#8221; текст скрывался за границами родительского блока). Далее пишем скрипт, который отодвигает текст вправо на ширину родительского блока (теперь он не видим) и потом перемещает его влево с заданной скоростью, пока текст не скроется полностью. И повторяем это действие снова и снова =).<span id="more-177"></span><br />
Для того, чтобы рассчитать момент, когда текст полностью скроется за левой границей, нам  нужно узнать настоящую ширину блока с текстом. Если наш текстовый блок будет содержаться  в <em>marquee_container</em> с заданной шириной, скрипт нам покажет ширину не больше нами заданной. Поэтому нам нужен еще один блок (<em>marquee_subcontainer</em>). Зададим ему ширину width:9999999px, и поместим в него текстовый блок. Теперь проблема с определением ширины решена.</p>
<p>Составим HTML код бегущей строки:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;marquee-container&quot; id=&quot;marquee_container&quot;&gt;
    &lt;div class=&quot;marquee-subcontainer&quot; id=&quot;marquee_subcontainer&quot;&gt;
        &lt;div class=&quot;marquee-text&quot; id=&quot;marquee_text&quot;&gt;
            Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Теперь составим таблицу CSS стилей в соответствии с нашими рассуждениями:</p>
<pre class="brush: css; title: ; notranslate">
.marquee-container {
    position: relative; /* см. UPD 1 */
    border-right:1px dotted #d8cfc2;
    height:30px;
    width:200px;
    overflow: hidden;
    border:2px solid #f00;
    margin:0px auto;
}

.marquee-subcontainer {
    position: relative;
    width:9999999px;
    height:30px;
    margin:0px;
}

.marquee-text {
    position: absolute;
    margin: 0px;
    top:0px;
    left:0px;
    height:30px;
    font: bold 16px Arial Georgia;
    color:#000;
}
</pre>
<p>Когда все предварительные приготовления сделали, можно приступить к написанию JS кода.</p>
<pre class="brush: jscript; title: ; notranslate">
// текущий сдвиг текста относительно левой границы блока бегущей строки
var craw_line_offset;

// функция инициализации бегущей строки
function enableCrawLine () {
    craw_line_offset = 0;

    // ширина текстового блока
    var craw_line_width = document.getElementById('marquee_text').offsetWidth;

    moveCrawLine (craw_line_width);
}

// функция пошагового сдвига
function moveCrawLine (w) {
    var lefttime;
    var container_width = document.getElementById('marquee_container').offsetWidth;
    // шаг (в пикселях), с которым будем перемещать текст
    var step = 1;
    // задержка между перемещениями на step пикселей
    var tdelay = 50;

    // ширина текстового блока
    w = parseInt(w);

    // если блок не &quot;заехал&quot; за левую границу
    if (craw_line_offset&lt;(w+container_width)) {
        // сдвигаем блок на шаг влево
        craw_line_offset = craw_line_offset + step;
    } else {
        // иначе начинаем все с начала
        craw_line_offset = 0;
    }

    // изменяем позицию текстового блока
    document.getElementById('marquee_text').style.left = parseInt(container_width-craw_line_offset)+'px';

    // рекурсивно вызываем функцию сдвига с заданной задержкой
    setTimeout('moveCrawLine ('+w+');', tdelay);
}

// вызов инициализирующей функции
enableCrawLine ();
</pre>
<p>Теперь можем ознакомиться с <a href="http://mihalytch.org.ua/example/marquee-javascript.html" >рабочим примером</a>.</p>
<p><a name="upd-1">UPD 1</a>: В IE6 не корректно срабатывал overlow: hidden для родительского блока. Дочерний див с position:absolute отображался полностью, не зависимо от границ родительского блока. Оказалось нужно просто добавить свойство position: relative и блоку с overflow:hidden.</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/js/begushhaya-stroka-na-javascript-svoimi-rukami.html/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Знакомство с Google Maps API. Часть #2</title>
		<link>http://mihalytch.org.ua/programming/js/znakomstvo-s-google-maps-api-2.html</link>
		<comments>http://mihalytch.org.ua/programming/js/znakomstvo-s-google-maps-api-2.html#comments</comments>
		<pubDate>Fri, 24 Apr 2009 16:21:23 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/?p=166</guid>
		<description><![CDATA[Как я и обещал в первой части Знакомства с Google Maps API этого цикла, мы сейчас познакомимся с обработкой событий, [...]]]></description>
			<content:encoded><![CDATA[<p>Как я и обещал в <a href="http://mihalytch.org.ua/programming/js/znakomstvo-s-google-maps-api-1.html" title="Знакомство с Google Maps API. Часть #1"  target="_blank">первой части Знакомства с Google Maps API</a> этого цикла, мы сейчас познакомимся с обработкой событий, добавлением/управлением объектами <strong>карты Google</strong>.</p>
<p>Как для регистрации обработчиков событий DOM и пользовательских событий, так и для их запуска в Google maps API есть пространство имен <strong>GEvent</strong>.  Сейчас мы воспользуемся для примера методом <em>addListener(source, event, handler)</em>.  Этот метод регистрирует пользовательское событие <em>event </em>в источнике объекта <em>source</em> и вызывает обработчик <em>handler.</em><span id="more-166"></span></p>
<p>Теперь назначим событию <em>click</em> обработчик, который будет <strong>создавать метки на карте</strong>. Затем мы научим эти метки позиционироваться путем перетаскивания их мышкой по самой карте и назначим удаление их из карты по даблклику по метке.</p>
<p>Теперь перейдем от теории к практической части:</p>
<pre class="brush: jscript; title: ; notranslate">
/* Здесь мы будем хранить классы:
- GMap2 для создания карты;
- GClientGeocoder для получения геокодов для пользовательских адресов
*/
var map, geocoder;

function initialize_map () {
    /* Если браузер совместим */
    if (GBrowserIsCompatible()) {
        /* Создадим объект карты */
        map = new GMap2(document.getElementById(&quot;google_canvas&quot;));
        geocoder = new GClientGeocoder();

        /* Установим координаты центра карты и начальный масштаб */
        map.setCenter(new GLatLng(37.4419, -122.1419), 5);

        /* Добавим элементы управления картой, воспользовавшись конструктором GLargeMapControl из класса GControl  */
        map.addControl(new GLargeMapControl());

        /* Добавим мини-карту обзора в углу основной карты */
        map.addControl(new GOverviewMapControl());

        /* Назначаем  onClickForMap() обработчиком события click  */
        GEvent.addListener(map, &quot;click&quot;, onClickForMap);
    }
}

/* При нажатии на карту  */
function onClickForMap(overlay, latlng) {
    /* Если определен входной аргумент */
    if (latlng != null) {
        /* Определим координаты точки, в которой было вызвано событие  */
        geocoder.getLocations(latlng, addPointToMap);
    }
}

/* Непосредственно добавление точки с маркером на карту */
function addPointToMap (response) {
    /* Если произошла какая-либо ошибка при определении координат - выведем ошибку */
    if (!response || response.Status.code != 200) {
        alert(&quot;Status Code:&quot; + response.Status.code);
    } else {
        /* Получим координаты */
        place = response.Placemark[0];
        /* Создадим точку на карте */
        point = new GLatLng(place.Point.coordinates[1],
        place.Point.coordinates[0]);

        /* Создадим маркер в этой точке */
        var marker = new GMarker(
            point,
            /* разрешим пользователю перетаскивать мышкой этот маркер  */
            {draggable: true}
        );

        /* При двойном клике по маркеру */
        GEvent.addListener(marker, &quot;dblclick&quot;, function() {
            /* Вызовем метод  hide() который скроет маркер */
            this.hide();
        });

        /* Нанесем созданный нами объект на полотно карты */
        map.addOverlay(marker);
    }
}

initialize_map ();
</pre>
<p>То что из этого получиться вы можете посмотреть <a href="http://mihalytch.org.ua/example/google-maps-api-2.html"  target="blank_">в примере</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/js/znakomstvo-s-google-maps-api-2.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Знакомство с Google Maps API. Часть #1</title>
		<link>http://mihalytch.org.ua/programming/js/znakomstvo-s-google-maps-api-1.html</link>
		<comments>http://mihalytch.org.ua/programming/js/znakomstvo-s-google-maps-api-1.html#comments</comments>
		<pubDate>Wed, 22 Apr 2009 10:55:53 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/?p=117</guid>
		<description><![CDATA[Для того чтобы использовать карты Google на своем веб-ресурсе, необходимо получить ключ к API карте гугла. Для этого идем по [...]]]></description>
			<content:encoded><![CDATA[<p>Для того чтобы использовать <strong>карты Google</strong> на своем веб-ресурсе, необходимо получить <strong>ключ к API карте гугла</strong>. Для этого <a target="_blank" rel="nofollow" href="http://mihalytch.org.ua/goto//go/http://code.google.com/intl/ru_ALL/apis/maps/signup.html" title="Зарегистрироваться для получения ключа к API карт Google"  target="_blank">идем по этому адресу</a>, соглашаемся с условиями использования, вводим URL своего сайта и жмем &#8220;Сгенерировать ключ к API&#8221;. На следующей странице получаем ключ.</p>
<p>Следующим шагом нам необходимо <em>подключить саму библиотеку Google</em>:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script src=&quot;http://maps.google.com/maps?file=api&amp;v=2.x&amp;sensor=false&amp;key=[здесь_код_к_API]&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p><span id="more-117"></span>Затем в HTML коде страницы <em>необходимо определить блок</em>, в котором будет отображаться карта и стили для него.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;style&gt;
div#google_canvas {
 height:300px;
 width: 500px;
 margin:0px auto;
}
&lt;/style&gt;
&lt;div id=&quot;google_canvas&quot;&gt;&lt;/div&gt;
</pre>
<p>Теперь пишем <em>функцию инициализации карты Google</em>:</p>
<pre class="brush: jscript; title: ; notranslate">
 /* Если браузер совместим */
 if (GBrowserIsCompatible()) {
 /* Создадим объект карты */
 var map = new GMap2(document.getElementById(&quot;google_canvas&quot;));

 /* Установим координаты центра карты и начальный масштаб */
 map.setCenter(new GLatLng(37.4419, -122.1419), 5);

 /* Добавим элементы управления картой воспользовавшись конструктором GLargeMapControl из класса GControl  */
 map.addControl(new GLargeMapControl());

 /* Добавим мини-карту обзора в углу основной карты */
 map.addControl(new GOverviewMapControl());
 }
</pre>
<p>И самое главное, нам нужно запустить эту функцию при загрузке страницы и выгрузить при закрытии:</p>
<p>&lt;<span class="start-tag">body</span><span class="attribute-name"> onload</span>=<span class="attribute-value">&#8220;initialize_map()&#8221; </span><span class="attribute-name">onunload</span>=<span class="attribute-value">&#8220;GUnload()&#8221;</span>&gt;</p>
<p>Сейчас у нас получилось отобразить <a href="http://mihalytch.org.ua/example/google-maps-api-1.html"  target="_blank">карту следующим образом</a>. В следующей статье мы научим нашу карту взаимодействовать с пользователем в интерактивном режиме.</p>
<p>P.S. Для самостоятельного изучения рекомендую к прочтению <a target="_blank" rel="nofollow" href="http://mihalytch.org.ua/goto//go/http://code.google.com/intl/ru/apis/maps/documentation/reference.html" title="Справочные материалы по API карт Google"  target="_blank">справочные материалы по API карт Google</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/js/znakomstvo-s-google-maps-api-1.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Получаем список всех вложеных файлов и папок на php</title>
		<link>http://mihalytch.org.ua/programming/php/recursive-reading-files-on-php.html</link>
		<comments>http://mihalytch.org.ua/programming/php/recursive-reading-files-on-php.html#comments</comments>
		<pubDate>Tue, 18 Nov 2008 10:12:17 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[chmod]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/php/recursive-reading-files-on-php.html</guid>
		<description><![CDATA[Начнем как всегда с постановки задачи. Нам необходимо получить список всех вложенных директорий и файлов, находящихся в конкретной папке, и [...]]]></description>
			<content:encoded><![CDATA[<p>Начнем как всегда с постановки задачи. Нам необходимо получить список всех вложенных директорий и файлов, находящихся в конкретной папке, и выполнить некоторые действия над ними. Для этого напишем функцию, которая будет получать список всех файлов и папок, отделять эти две категории, обрабатывать отдельно и в случае нахождения вложенных папок будет вызывать себя рекурсивно.<span id="more-67"></span></p>
<p>В нижеприведенном примере мы будем выполнять действия над вложенными объектами текущей папки, присваивать всем файлам права на чтение/запись/выполнение &#8211; 666, а папкам &#8211; 777 и выводить их список на экран.</p>
<pre class="brush: php; title: ; notranslate">
function rdir ($path2dir) {
    $d = dir ($path2dir);  

    while (false !== ($entry = $d-&gt;read())) {  

        if ($entry!='.' &amp;&amp; $entry!='..' &amp;&amp; $entry!='' ) {
            $all_path = $path2dir.$entry;
            $new_path = go ($all_path, is_file($all_path));  

            if (!is_file($all_path)) {
                if (!rdir ($new_path)) {
                    return false;
                }
            }
        }
    }  

    return true;
}

function go ($path2file, $is_file = true) {  

    if ($is_file) {  

        # выполняем операцию над файлом
        # выведем относительный путь к обрабатываемому файлу
        echo $path2file,&quot;\n&quot;;  

        # установим необходимые права на файл
        if (!chmod($path2file,0666)) {
            return false;
        }  

    } else {  

        # выполняем операцию над папкой
        $path2file = $path2file.'/';  

        # выведем относительный путь к обрабатываемой директории
        echo &quot;\n\n&quot;,$path2file,&quot;\n&quot;;  

        # установим необходимые права на папку
        if (!chmod($path2dir,0777)) {
            return false;
        }
    }  

    return $path2file;
}

# начинаем с текущей папки
$folder = './';  

# непосредственно вызываем функцию
if (rdir ($folder)) {
    echo 'DONE';
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/php/recursive-reading-files-on-php.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Время выполнения php скрипта</title>
		<link>http://mihalytch.org.ua/programming/php/the-time-of-php-script.html</link>
		<comments>http://mihalytch.org.ua/programming/php/the-time-of-php-script.html#comments</comments>
		<pubDate>Tue, 11 Nov 2008 10:08:06 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[time]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/php/the-time-of-php-script.html</guid>
		<description><![CDATA[У каждого, кто хоть немного задумывался об оптимизации быстродействия своего кода, возникала потребность в измерении времени исполнения всего скрипта либо [...]]]></description>
			<content:encoded><![CDATA[<p>У каждого, кто хоть немного задумывался об оптимизации быстродействия своего кода, возникала потребность в измерении времени исполнения всего скрипта либо его участков. Конечно, данный способ не идеален в плане точности измерения, но для грубых измерений вполне сойдет.<span id="more-66"></span></p>
<pre class="brush: php; title: ; notranslate">
function get_time () {
        # Считываем текущее время
    $mtime = microtime();
        # Разделяем секунды и миллисекунды
    $mtime = explode(&quot; &quot;,$mtime);
        # Составляем одно число из секунд и миллисекунд
    $mtime = $mtime[1] + $mtime[0];
        # Возвращаем текущее время в переменную
    return $mtime;
}  

function end_time ($start_time) {
        # Записываем текущее время в переменную
    $end_time = get_time ();
        # Вычисляем разницу
    $total_time = ($end_time - $start_time);
        # Выводим не экран
    echo 'Страница сгенерирована за ',$total_time,' секунд !';
}  

    # Записываем в переменную время на начало измерения
$start_time = get_time ();  

    # некоторый участок кода
for ($i=0; $i&amp;lt;1000000; $i++) {
    #
}  

    # Выводим результат
end_time ($start_time);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/php/the-time-of-php-script.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>В Firefox`е не работает innerHTML ?</title>
		<link>http://mihalytch.org.ua/programming/js/does-not-work-innerhtml-in-firefox.html</link>
		<comments>http://mihalytch.org.ua/programming/js/does-not-work-innerhtml-in-firefox.html#comments</comments>
		<pubDate>Tue, 21 Oct 2008 11:48:47 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[innerHTML]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/js/does-not-work-innerhtml-in-firefox.html</guid>
		<description><![CDATA[Панацея здесь. Для любимого нами огненного лиса (Firefox) средствами JavaScript HTML код необходимо вставлять следующим образом:]]></description>
			<content:encoded><![CDATA[<p>Панацея здесь.<span id="more-62"></span></p>
<p>Для любимого нами огненного лиса (Firefox) средствами JavaScript HTML код необходимо вставлять следующим образом:</p>
<pre class="brush: jscript; title: ; notranslate">
     // Блок куда необходимо вставить html контент
    var our_div = document.getElementById('our_div_name');

     // Непосредственно наш контент
    var our_text = 'our html code ...';

     // Получим userAgent браузера
    var ua = navigator.userAgent.toLowerCase();

    if (ua.indexOf(&quot;gecko&quot;) != -1) {
        // Если браузер Mozilla, или Firefox, или Netscape
        var range = div_preview.ownerDocument.createRange();
        range.selectNodeContents(our_div);

        // Очистим внутренности нашего блока
        range.deleteContents();
        var fragment = range.createContextualFragment(our_text); //&amp;lt;-- dies here

        // Теперь наполним необходимым контентом
        our_div.appendChild(fragment);
    }  else  {
        // Для остальных браузеров
        our_div.innerHTML = our_text;
    }
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/js/does-not-work-innerhtml-in-firefox.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Перехват (обработка, отключение) ошибок в JavaScript</title>
		<link>http://mihalytch.org.ua/programming/js/interception-of-errors-in-javascript.html</link>
		<comments>http://mihalytch.org.ua/programming/js/interception-of-errors-in-javascript.html#comments</comments>
		<pubDate>Thu, 16 Oct 2008 15:37:42 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[xHttprequest]]></category>
		<category><![CDATA[ошибка]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/js/interception-of-errors-in-javascript.html</guid>
		<description><![CDATA[Иногда все-таки возникает потребность перехватить ошибки при выполнении сценария JavaScript, с целью обработать каким либо образом сообщения об ошибке (например, [...]]]></description>
			<content:encoded><![CDATA[<p>Иногда все-таки возникает потребность перехватить ошибки при выполнении сценария JavaScript, с целью обработать каким либо образом сообщения об ошибке (например, через xHttprequest отправить на сервер и записать в .log файл) либо просто отключить вывод этих сообщений конечному пользователю.<span id="more-61"></span></p>
<p>Реализуется эта задача очень просто.</p>
<p>Для того чтобы просто отключить вывод сообщений об ошибках, достаточно написать одну строку  JavaScript кода:</p>
<pre class="brush: jscript; title: ; notranslate">
window.onerror=null;
</pre>
<p>Либо мы можем назначить обработчиком ошибок пользовательскую функцию:</p>
<pre class="brush: jscript; title: ; notranslate">
/* определим функцию обработки ошибок */
function onErrorHandler(msg, url, lno)  {
    /* тут тело обработчика */
   return true;
}

/* теперь  назначаем наш обработчик для события onError   */
window.onerror = onErrorHandler;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/js/interception-of-errors-in-javascript.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

