<?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>Thu, 20 May 2010 07:56:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<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>Mihalytch</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. В честь этого двойного праздника был открыт сайт 14 Days of jQuery, на котором в течении 14 дней будет анонсирована новая версия библиотеки. Скачать последнюю версию библиотеки вы можете здесь - jQuery 1.4. Следить за последними [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/img/jquery_avatar.png" class="post-thumb-left" /> Сегодня очередная годовщина jQuery. Разработчики jQuery решили приурочить к четвертому дню рождения этой замечательной библиотеки релиз новой версии 1.4. </p>
<p>В честь этого двойного праздника был открыт сайт <a href="/go/http://jquery14.com/"  target="_blank">14 Days of jQuery</a>, на котором в течении 14 дней будет анонсирована новая версия библиотеки.<br />
<span id="more-241"></span><br />
Скачать последнюю версию библиотеки вы можете здесь - <a href="/go/http://code.jquery.com/jquery-1.4.js" target="_blank">jQuery 1.4</a>. Следить за последними анонсами можно через <a target="_blank" href="/go/http://twitter.com/jquery">Твиттер</a> или подписавшись на <a target="_blank" href="/go/http://feeds.feedburner.com/The14DaysOfJquery">RSS рассылку</a>.</p>
<p>Уже доступны <a href="/go/http://futurecolors.ru/jquery/" target="_blank">онлайн</a> и <a href="/go/http://futurecolors.ru/jquery/jquery.cheatsheet.1.4.pdf" target="_blank">PDF версия для печати</a> шпаргалки для текущей версии jQuery 1.4. Также известно, что обновлен дизайн и структура <a href="/go/http://api.jquery.com/" target="_blank">jQuery API</a>.</p>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=241&type=feed" alt="" />]]></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>Mihalytch</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[Сегодня речь пойдет о создании простого скрипта для имитации эффекта бегущей строки. Для начала, придумаем, как это будет работать. По идее должен быть внешний контейнер, который определит размеры блока бегущей строки и ее положение в пространстве на странице, назовем его marquee_container. Также должен существовать блок, содержащий "бегущий" текст, наречем его - marquee_text. Теперь должно быть [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня речь пойдет о создании простого скрипта для имитации эффекта бегущей строки. Для начала, придумаем, как это будет работать. По идее должен быть внешний контейнер, который определит размеры блока бегущей строки и ее положение <span style="text-decoration: line-through;">в пространстве</span> на странице, назовем его <em>marquee_container</em>. Также должен существовать блок, содержащий "бегущий" текст, наречем его - <em>marquee_text</em>.</p>
<p>Теперь должно быть все просто, мы задаем родительскому блоку фиксированную ширину, position: relative (для того, чтобы мы могли абсолютно позиционировать блок с текстом относительно текущего), overflow: hidden (для того, чтобы "бегущий" текст скрывался за границами родительского блока). Далее пишем скрипт, который отодвигает текст вправо на ширину родительского блока (теперь он не видим) и потом перемещает его влево с заданной скоростью, пока текст не скроется полностью. И повторяем это действие снова и снова =).<span id="more-177"></span><br />
Для того, чтобы рассчитать момент, когда текст полностью скроется за левой границей, нам  нужно узнать настоящую ширину блока с текстом. Если наш текстовый блок будет содержаться  в <em>marquee_container</em> с заданной шириной, скрипт нам покажет ширину не больше нами заданной. Поэтому нам нужен еще один блок (<em>marquee_subcontainer</em>). Зададим ему ширину width:9999999px, и поместим в него текстовый блок. Теперь проблема с определением ширины решена.</p>
<p>Составим HTML код бегущей строки:</p>
<pre class="brush: xml;">
&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;">
.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;">
// текущий сдвиг текста относительно левой границы блока бегущей строки
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>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=177&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/js/begushhaya-stroka-na-javascript-svoimi-rukami.html/feed</wfw:commentRss>
		<slash:comments>21</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>Mihalytch</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 этого цикла, мы сейчас познакомимся с обработкой событий, добавлением/управлением объектами карты Google. Как для регистрации обработчиков событий DOM и пользовательских событий, так и для их запуска в Google maps API есть пространство имен GEvent.  Сейчас мы воспользуемся для примера методом addListener(source, event, handler).  [...]]]></description>
			<content:encoded><![CDATA[<p>Как я и обещал в <a title="Знакомство с Google Maps API. Часть #1" href="http://mihalytch.org.ua/programming/js/znakomstvo-s-google-maps-api-1.html" 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;">
/* Здесь мы будем хранить классы:
- 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>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=166&type=feed" alt="" />]]></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>Mihalytch</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/?p=117</guid>
		<description><![CDATA[Для того чтобы использовать карты Google на своем веб-ресурсе, необходимо получить ключ к API карте гугла. Для этого идем по этому адресу, соглашаемся с условиями использования, вводим URL своего сайта и жмем "Сгенерировать ключ к API". На следующей странице получаем ключ. Следующим шагом нам необходимо подключить саму библиотеку Google: &#60;script src=&#34;http://maps.google.com/maps?file=api&#38;v=2.x&#38;sensor=false&#38;key=[здесь_код_к_API]&#34; type=&#34;text/javascript&#34;&#62;&#60;/script&#62; Затем в HTML [...]]]></description>
			<content:encoded><![CDATA[<p>Для того чтобы использовать <strong>карты Google</strong> на своем веб-ресурсе, необходимо получить <strong>ключ к API карте гугла</strong>. Для этого <a title="Зарегистрироваться для получения ключа к API карт Google" href="/go/http://code.google.com/intl/ru_ALL/apis/maps/signup.html" target="_blank">идем по этому адресу</a>, соглашаемся с условиями использования, вводим URL своего сайта и жмем "Сгенерировать ключ к API". На следующей странице получаем ключ.</p>
<p>Следующим шагом нам необходимо <em>подключить саму библиотеку Google</em>:</p>
<pre class="brush: jscript;">
&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;">
&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;">
 /* Если браузер совместим */
 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">"initialize_map()" </span><span class="attribute-name">onunload</span>=<span class="attribute-value">"GUnload()"</span>&gt;</p>
<p>Сейчас у нас получилось отобразить <a href="http://mihalytch.org.ua/example/google-maps-api-1.html" target="_blank">карту следующим образом</a>. В следующей статье мы научим нашу карту взаимодействовать с пользователем в интерактивном режиме.</p>
<p>P.S. Для самостоятельного изучения рекомендую к прочтению <a title="Справочные материалы по API карт Google" href="/go/http://code.google.com/intl/ru/apis/maps/documentation/reference.html" target="_blank">справочные материалы по API карт Google</a>.</p>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=117&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/js/znakomstvo-s-google-maps-api-1.html/feed</wfw:commentRss>
		<slash:comments>4</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>Mihalytch</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>В нижеприведенном примере мы будем выполнять действия над вложенными объектами текущей папки, присваивать всем файлам права на чтение/запись/выполнение - 666, а папкам - 777 и выводить их список на экран.</p>
<pre class="brush: php;">
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>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=67&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/php/recursive-reading-files-on-php.html/feed</wfw:commentRss>
		<slash:comments>0</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>Mihalytch</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[У каждого, кто хоть немного задумывался об оптимизации быстродействия своего кода, возникала потребность в измерении времени исполнения всего скрипта либо его участков. Конечно, данный способ не идеален в плане точности измерения, но для грубых измерений вполне сойдет. function get_time () {         # Считываем текущее время     $mtime = microtime();         # Разделяем [...]]]></description>
			<content:encoded><![CDATA[<p>У каждого, кто хоть немного задумывался об оптимизации быстродействия своего кода, возникала потребность в измерении времени исполнения всего скрипта либо его участков. Конечно, данный способ не идеален в плане точности измерения, но для грубых измерений вполне сойдет.<span id="more-66"></span></p>
<pre class="brush: php;">
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>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=66&type=feed" alt="" />]]></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>Mihalytch</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 код необходимо вставлять следующим образом:   // Блок куда необходимо вставить html контент var our_div = document.getElementById('our_div_name');   // Непосредственно наш контент var our_text = 'our html code ...';   // Получим userAgent браузера var ua = navigator.userAgent.toLowerCase(); if (ua.indexOf(&#34;gecko&#34;) != -1) { // [...]]]></description>
			<content:encoded><![CDATA[<p>Панацея здесь.<span id="more-62"></span></p>
<p>Для любимого нами огненного лиса (Firefox) средствами JavaScript HTML код необходимо вставлять следующим образом:</p>
<pre class="brush: jscript;">
     // Блок куда необходимо вставить 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>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=62&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/js/does-not-work-innerhtml-in-firefox.html/feed</wfw:commentRss>
		<slash:comments>6</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>Mihalytch</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, с целью обработать каким либо образом сообщения об ошибке (например, через xHttprequest отправить на сервер и записать в .log файл) либо просто отключить вывод этих сообщений конечному пользователю. Реализуется эта задача очень просто. Для того чтобы просто отключить вывод сообщений об ошибках, достаточно написать одну [...]]]></description>
			<content:encoded><![CDATA[<p>Иногда все-таки возникает потребность перехватить ошибки при выполнении сценария JavaScript, с целью обработать каким либо образом сообщения об ошибке (например, через xHttprequest отправить на сервер и записать в .log файл) либо просто отключить вывод этих сообщений конечному пользователю.<span id="more-61"></span></p>
<p>Реализуется эта задача очень просто.</p>
<p>Для того чтобы просто отключить вывод сообщений об ошибках, достаточно написать одну строку  JavaScript кода:</p>
<pre class="brush: jscript;">
window.onerror=null;
</pre>
<p>Либо мы можем назначить обработчиком ошибок пользовательскую функцию:</p>
<pre class="brush: jscript;">
/* определим функцию обработки ошибок */
function onErrorHandler(msg, url, lno)  {
    /* тут тело обработчика */
   return true;
}

/* теперь  назначаем наш обработчик для события onError   */
window.onerror = onErrorHandler;
</pre>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=61&type=feed" alt="" />]]></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>
		<item>
		<title>Стилизированный раскрывающийся список (select в html)</title>
		<link>http://mihalytch.org.ua/programming/js/styled-drop-down-list.html</link>
		<comments>http://mihalytch.org.ua/programming/js/styled-drop-down-list.html#comments</comments>
		<pubDate>Wed, 10 Sep 2008 08:21:34 +0000</pubDate>
		<dc:creator>Mihalytch</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Mihalytch]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/js/styled-drop-down-list.html</guid>
		<description><![CDATA[Ниже представлено решение на JavaScript и CSS, с помощью которого можно было бы изменить внешний вид любой части выпадающего списка. При этом соблюдена кроссбраузерность, а также решена проблема, возникающая в IE 6 при перекрытии DIV`ом выпадающего списка select, который оказывался видимым при любом значении z-index. Стилизация выпадающих списков основывается на замене стандартного элемента html &#60;select&#62;  на [...]]]></description>
			<content:encoded><![CDATA[<p>Ниже представлено решение на JavaScript и CSS, с помощью которого можно было бы изменить внешний вид любой части выпадающего списка. При этом соблюдена кроссбраузерность, а также решена проблема, возникающая в IE 6 при перекрытии DIV`ом выпадающего списка select, который оказывался видимым при любом значении z-index.<span id="more-58"></span></p>
<p>Стилизация выпадающих списков основывается на замене стандартного элемента html &lt;select&gt;  на маркированный список&lt;ul&gt;, оформленный с помощью CSS необходимым нам образом.</p>
<p>JavaScript перехватывает все события onClick на странице и проверяет не "нажал" ли пользователь на ту или иную область выпадающего списка. Если произошло необходимое событие, и необходимо раскрыть, свернуть или выбрать необходимый элемент, скрипт применяет к элементам маркированного списка соответствующие стили и изменяет выбранное значение исходного выпадающего списка &lt;select&gt; (который был скрыт при загрузке страницы).</p>
<p>Ниже привожу результат стилизации (взят с реального проекта):</p>
<p style="text-align: center"><img width="454" src="/wp-content/drop-down.gif" alt="styled-drop-down" height="306" /></p>
<p>Чтобы не загромождать страницу кодом размещаю<a target="_blank" href="/wp-content/styled-drop-down.zip" title="Styled drop-down"> ссылку на архив с рабочим примером</a>.</p>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=58&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/js/styled-drop-down-list.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Время и дата в php</title>
		<link>http://mihalytch.org.ua/programming/php/date-and-time-in-php.html</link>
		<comments>http://mihalytch.org.ua/programming/php/date-and-time-in-php.html#comments</comments>
		<pubDate>Fri, 29 Aug 2008 14:36:48 +0000</pubDate>
		<dc:creator>Mihalytch</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[DATE]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Mihalytch]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/php/date-and-time-in-php.html</guid>
		<description><![CDATA[Эта статья представляет собой собрание нескольких полезных советов по манипулированию датой и временем в PHP. Для начала разберемся с установкой временной зоны. Для этого всего лишь необходимо воспользоваться функцией bool date_default_timezone_set ( string $timezone_identifier); Список временных зон (параметров для вышеописанной функции) доступен на официальном сайте PHP. Итак, для того чтобы установить нужную нам временную зону, [...]]]></description>
			<content:encoded><![CDATA[<p>Эта статья представляет собой собрание нескольких полезных советов по манипулированию датой и временем в PHP.<span id="more-55"></span></p>
<p>Для начала разберемся с <strong>установкой временной зоны</strong>. Для этого всего лишь необходимо воспользоваться функцией</p>
<pre>bool <a target="_blank" href="/go.php?url=ua2.php.net/manual/en/function.date-default-timezone-set.php" title="date_default_timezone_set">date_default_timezone_set</a> ( string <tt>$timezone_identifier</tt>);</pre>
<p>Список временных зон (параметров для вышеописанной функции) доступен на <a target="_blank" href="http://www.php.net/manual/en/timezones.others.php" title="Список временных зон">официальном сайте PHP</a>. Итак, для того чтобы установить нужную нам временную зону, необходимо вызвать функцию date_default_timezone_set в начале исполняемого скрипта.</p>
<p>Для того чтобы определить текущую временную зону в PHP есть стандартный инструмент:</p>
<pre>string <a target="_blank" href="http://mihalytch.org.ua/go.php?url=ua2.php.net/manual/en/function.date-default-timezone-get.php" title="date_default_timezone_get">date_default_timezone_get</a>  ( void  );</pre>
<p>О <a target="_blank" href="http://mihalytch.org.ua/programming/php/comparison-of-dates.html" title="Сравнение дат в PHP">сравнении двух дат</a> я уже упоминал ранее. Далее рассмотрим<strong> вычитание и сложение даты и времени</strong> или <strong>как определить какая дата и время были N дней X часов назад!? </strong>:)</p>
<p>Года полтора назад встречал "интересное" решение. Некий разработчик загнал в массив соответствия "номер месяца"=&gt;"количество дней", затем парсил текущую дату и "вручную" отнимал или прибавлял количество дней, часов, минут, секунд.  Описывать подробно этот алгоритм не буду, так как не привык изобретать велосипед. Предлагаю "формулу" гораздо проще:</p>
<pre class="brush: php;">
# $sec - разница в секундах с текущим временем;
# $min - разница в минутах с текущим временем;
# $hour - разница в часах с текущим временем;
# $days - разница в днях с текущим временем;
$need_date = date (&quot;Y-m-d H:i:s&quot;, time()+( $sec + 60*($min + 60*($hour + 24*$day))));
</pre>
<p>Где "<em>Y-m-d H:i:s</em>" всего лишь шаблон времени, которое мы получим в текстовом формате.</p>
<p>Для тех, кто хочет узнать не будущее, а прошлое время - необходимо заменить вот этот плюс <em>... time()<font color="#ff0000">+</font>( $sec ...</em> на минус.</p>
<p>На этой оптимистической ноте заканчиваю описание. Остальные возможности PHP предлагаю рассмотреть самостоятельно на официальном сайте php.net в качестве домашнего задания.</p>
<img src="http://mihalytch.org.ua/?ak_action=api_record_view&id=55&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/php/date-and-time-in-php.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
