<?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; HTML</title>
	<atom:link href="http://mihalytch.org.ua/tag/html/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>M/Monit: Мониторинг нескольких серверов с использованием графического интерфейса.</title>
		<link>http://mihalytch.org.ua/administration/monitoring-serverov-2-html.html</link>
		<comments>http://mihalytch.org.ua/administration/monitoring-serverov-2-html.html#comments</comments>
		<pubDate>Wed, 10 Feb 2010 20:46:26 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/?p=217</guid>
		<description><![CDATA[Приветствую тебя уважаемый читатель. Как и обещал в предыдущей статье об использовании MonIT, я расскажу как с помощью M/Monit можно [...]]]></description>
			<content:encoded><![CDATA[<p>Приветствую тебя уважаемый читатель. Как и обещал в предыдущей <a href="http://mihalytch.org.ua/administration/monitoring-serverov-1.html" >статье об использовании MonIT</a>, я расскажу как с помощью M/Monit можно следить за состоянием нескольких серверов с одного графического интерфейса.</p>
<p>На самом деле M/Monit в отличии от Monit утилита платная, но на официальном сайте доступна <a target="_blank" rel="nofollow" href="http://mihalytch.org.ua/goto//go/http://mmonit.com/download/" >бесплатная версия с ограниченным функционалом</a>.<br />
Давайте теперь подробно рассмотрим ее установку и настройку. Для этого создадим временную папку, скачаем архив с нужной нам версией, распакуем и скопируем в рабочую директорию (актуальную версию можно найти здесь: <a target="_blank" rel="nofollow" href="http://mihalytch.org.ua/goto//go/http://mmonit.com/dist/"  target="_blank">http://mmonit.com/dist/</a>):<br />
<span id="more-217"></span></p>
<pre class="brush: bash; title: ; notranslate">
# mkdir ~/distr/mmonit
# cd ~/distr/mmonit
# wget http://mmonit.com/dist/mmonit-2.1.1-linux-x86.tar.gz
# tar -xvf mmonit-2.1.1-linux-x86.tar.gz
# cd mmonit-2.0.3
# ls
bin  CHANGES  conf  db  doc  docroot  lib  logs  README  upgrade
# mkdir /usr/local/mmonit
# cp -R * /usr/local/mmonit
# chmod -R 0700 /usr/local/mmonit
</pre>
<p>Теперь нам необходимо создать базу данных и импортировать туда необходимые приложению данные. В папке /usr/local/mmonit/db/ лежат дампы для четырех типов баз данных. Мы рассмотрим случай с MySQL.<br />
Итак, создадим таблицу и выполним команды из дампа:</p>
<pre class="brush: bash; title: ; notranslate">
# mysql -u yore_username -p
mysql&gt; CREATE DATABASE `mmonit`;
mysql&gt; use mmonit
mysql&gt; source /usr/local/mmonit/db/mmonit-schema.mysql
mysql&gt; quit
</pre>
<p>После того как мы подготовили к использованию базу данных перейдем к редактированию конфигурационного файла M/Monit /usr/local/mmonit/conf/server.xml .</p>
<pre class="brush: xml; title: ; notranslate">
&lt;Service&gt;
    &lt;!-- IP адрес интерфейса, на котором мы сможем получить доступ к админке --&gt;
    &lt;Connector address=&quot;IP.FROM.ALLOW.ACCESS&quot; port=&quot;8080&quot; processors=&quot;10&quot; /&gt;
    &lt;Engine name=&quot;mmonit&quot; defaultHost=&quot;localhost&quot; fileCache=&quot;10MB&quot;&gt;
        &lt;!-- настраиваем подключение к базе --&gt;
        &lt;Realm url=&quot;mysql://DB_USER:DB_PASSWORD@DB_HOST/DB_NAME&quot;
             minConnections=&quot;5&quot;
             maxConnections=&quot;25&quot;
             reapConnections=&quot;300&quot; /&gt;
</pre>
<p>Сохраняем конфиг и запускаем /usr/local/mmonit/bin/mmonit, заходим по адресу http://IP.FROM.ALLOW.ACCESS:8080 . По умолчанию логин/пароль &#8211; admin/swordfish (настоятельно рекомендуется изменить пароль сразу после первого входа в систему;) ).</p>
<p>Теперь нам обязательно нужно настроить сервис Monit хотя бы на одном сервере, чтобы было с чего собирать статистику. Для этого открываем файл конфигурации Monit: /usr/local/etc/monitrc.d/main.conf вашим любимым редактором и дописываем в начало следующие две строчки:</p>
<p><em>set httpd port 2812 and use address XXX.XXX.XXX.XXX # где XXX.XXX.XXX.XXX &#8211; адрес интерфейса, через который MMonit будет осуществлять доступ к monit.<br />
allow monit:your_strong_password</em></p>
<p>Сохраняем конфиг, перезапускаем monit. Входим под админом в web-интерфейс M/Monit, открываем страницу Admin-&gt;Hosts-&gt;&#8221;Add a new host&#8221;. Заполняем информацию о сервере, состояние которого будем мониторить:<br />
Host Name &#8211; название сервера (выбираем имя для нашего удобства),<br />
IP-address, Monit Port &#8211; XXX.XXX.XXX.XXX и 2812 указанные в /usr/local/etc/monitrc.d/main.con,<br />
Monit user name, Monit password из того же конфига.<br />
Сохраняем изменения.</p>
<p>Чтобы увидеть информацию о состоянии сервера, нужно всего-лишь кликнуть по его имени в списке серверов на странице Admin-&gt;Hosts.</p>
<p>В следующей статье я более детально опишу, как сконфигурировать отчеты о состоянии серверов и как создать файлы для запуска/остановки/перезапуска/проверки статуса сервисов Monit и M/Monit.</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/administration/monitoring-serverov-2-html.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>Mount при загрузке</title>
		<link>http://mihalytch.org.ua/unix/mount-pri-zagruzke.html</link>
		<comments>http://mihalytch.org.ua/unix/mount-pri-zagruzke.html#comments</comments>
		<pubDate>Tue, 20 Jan 2009 16:46:45 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[UNIX`o подобные]]></category>
		<category><![CDATA[fstab]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Mount]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/unix/mount-pri-zagruzke.html</guid>
		<description><![CDATA[Часто бывает при смене/добавлении новых носителей или иных случаях необходимо изменить/добавить порядок, параметры и (или) количество устройств монтируемых при загрузке. [...]]]></description>
			<content:encoded><![CDATA[<p>Часто бывает при смене/добавлении новых носителей или иных случаях необходимо изменить/добавить порядок, параметры и (или) количество устройств монтируемых при загрузке. Все это мы можем сделать путем редактирования файла <em>/etc/fstab</em>. Толкование содержимого этого файла изложено далее. <span id="more-72"></span>Файл <em>/etc/fstab</em> содержит информацию о файловых системах для команд <em>mount(1M)</em> и <em>mountall(1M)</em>. Строки файла <em>/etc/fstab</em> содержат следующие поля:</p>
<ol>
<li><em>UUID </em>- определяет устройство, которое должно быть примонтировано (идентификатор диска).</li>
<li>Каталог, в который монтируется файловая система.</li>
<li>Тип файловой системы (например: <em>vfat </em>- FAT32).</li>
<li>Опции, показывающие как эта файловая система будет обрабатываться. Например:
<ul>
<li>&#8220;<em>default</em>&#8221; &#8211; означает, что они монтируются автоматически, доступны для чтения и записи с асинхронным <em>I/O</em> (вводом/выводом);</li>
<li><em>-r</em> &#8211; монтировать с доступом только на чтение;</li>
<li><em>-d[r]</em> &#8211; удаленный ресурс.</li>
</ul>
</li>
<li>Флаги, относящиеся к файловой системе. Первая цифра, <em>0</em> или <em>1</em>, показывает, должна ли система копироваться при помощи команды <em>dump </em>(это нужно для системных резервных копий). Вторая цифра может быть <em>0</em>,<em> 1</em> или <em>2</em>, она показывает порядок, в котором файловая система должна быть проверена при загрузке.
<ul>
<li><em>0</em> &#8211; не должна проверяться вовсе;</li>
<li><em>1</em> &#8211; должна проверяться первой и использоваться как корневая (/);</li>
<li><em>2</em> &#8211; ставится для всех остальных систем.</li>
</ul>
</li>
</ol>
<p>Поля отделяются друг от друга пробелами. Строки, начинающиеся с символа #, являются комментариями. Пустые строки игнорируются.<br />
Пример строки:</p>
<pre class="brush: bash; title: ; notranslate">

# /dev/sda1 UUID=9877-489A    /media/sda1     vfat     defaults, utf8, umask=007, gid=46     0 0
</pre>
<p>Некоторые системы (Ubuntu например) в /etc/fstab вместо названий устройств (/dev/hda1, /dev/hda2, etc) используется UUID.<br />
Чтобы узнать UUID нашего нового hdd выполняем команду:</p>
<pre class="brush: bash; title: ; notranslate">
ls -l /dev/disk/by-uuid/
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/unix/mount-pri-zagruzke.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WP Super Cache &#8211; rewrite rules для nginx</title>
		<link>http://mihalytch.org.ua/administration/wpsupercache-rewrite-rules-for-nginx.html</link>
		<comments>http://mihalytch.org.ua/administration/wpsupercache-rewrite-rules-for-nginx.html#comments</comments>
		<pubDate>Fri, 28 Nov 2008 10:47:51 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[Cookie]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[rewritecond]]></category>
		<category><![CDATA[UTF-8]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/administration/wpsupercache-rewrite-rules-for-nginx.html</guid>
		<description><![CDATA[Если вы решились прочитать это пост, значит вы решили перейти (или уже перешли, что вероятнее всего) с  apache на nginx. [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float:left; margin:5px;" src="http://mihalytch.org.ua/wp-content/nginx.gif" alt="nginx" />Если вы решились прочитать это пост, значит вы решили перейти (или уже перешли, что вероятнее всего) с  apache на nginx. Движок вашего сайта WordPress, и необходимо использовать плагин &#8220;WP Super Cache&#8221;. Текущая статья посвящена тому, как настроить rewrite rules под nginx.<span id="more-68"></span></p>
<p>Super Cache после установки и активации попросит нас сделать .htaccess доступным для записи или записать в него следующие правила:</p>
<pre class="brush: plain; title: ; notranslate">
# BEGIN WPSuperCache
&lt;IfModule mod_rewrite.c&gt;
RewriteEngine On
RewriteBase /
AddDefaultCharset UTF-8
RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{QUERY_STRING} !.*=.*
RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress|wp-postpass_).*$
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html.gz -f
RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html.gz [L]
RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{QUERY_STRING} !.*=.*
RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress|wp-postpass_).*$
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html -f
RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html [L]
&lt;/IfModule&gt;
# END WPSuperCache
</pre>
<p>Но проблема в том, что все эти правила, как и сам .htaccess, абсолютно бесполезны для nginx`a, так как все rewrite rules прописываются в nginx.conf.</p>
<p>Итак  открываем файл конфигурации nginx.conf, находим</p>
<pre class="brush: plain; title: ; notranslate">
location /путь/к/блогу/ {
...
}
</pre>
<p>&#8220;/путь/к/блогу/&#8221; &#8211; вот вместо этого, скорее всего, будет стоять просто &#8220;/&#8221;</p>
<p>и между фигурными скобочками вписываем ряд директив:</p>
<pre class="brush: plain; title: ; notranslate">
gzip_static on;
if (-f $request_filename) {
 break;
}  

set $supercache_file '';
set $supercache_uri $request_uri;  

if ($request_method = POST) {
 set $supercache_uri '';
}  

if ($query_string) {
 set $supercache_uri '';
}  

if ($http_cookie ~* &quot;comment_author_|wordpress|wp-postpass_&quot; ) {
 set $supercache_uri '';
}  

if ($supercache_uri ~ ^(.+)$) {
 set $supercache_file /blog/wp-content/cache/supercache/$http_host/$1index.html;
}  

if (-f $document_root$supercache_file) {
 rewrite ^(.*)$ $supercache_file break;
}  

if (!-e $request_filename) {
 rewrite . /blog/index.php last;
}
</pre>
<p>Сохраняем и перезапускаем сервер.</p>
<p>P.S. Если мы хотим пользоваться gzip компрессией, то необходимо будет перекомпилировать nginx с параметром &#8220;<em>–-with-http_gzip_static_module</em>&#8220;.</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/administration/wpsupercache-rewrite-rules-for-nginx.html/feed</wfw:commentRss>
		<slash:comments>0</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>Стилизированный раскрывающийся список (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>mihal</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/js/styled-drop-down-list.html</guid>
		<description><![CDATA[Ниже представлено решение на JavaScript и CSS, с помощью которого можно было бы изменить внешний вид любой части выпадающего списка. [...]]]></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 на странице и проверяет не &#8220;нажал&#8221; ли пользователь на ту или иную область выпадающего списка. Если произошло необходимое событие, и необходимо раскрыть, свернуть или выбрать необходимый элемент, скрипт применяет к элементам маркированного списка соответствующие стили и изменяет выбранное значение исходного выпадающего списка &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>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/js/styled-drop-down-list.html/feed</wfw:commentRss>
		<slash:comments>5</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>mihal</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[DATE]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/php/date-and-time-in-php.html</guid>
		<description><![CDATA[Эта статья представляет собой собрание нескольких полезных советов по манипулированию датой и временем в 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" rel="nofollow" href="http://mihalytch.org.ua/goto/http://www.php.net/manual/en/timezones.others.php" target="_blank"  title="Список временных зон">официальном сайте PHP</a>. Итак, для того чтобы установить нужную нам временную зону, необходимо вызвать функцию date_default_timezone_set в начале исполняемого скрипта.</p>
<p>Для того чтобы определить текущую временную зону в PHP есть стандартный инструмент:</p>
<pre>string <a href="http://mihalytch.org.ua/go.php?url=ua2.php.net/manual/en/function.date-default-timezone-get.php" target="_blank"  title="date_default_timezone_get">date_default_timezone_get</a>  ( void  );</pre>
<p>О <a href="http://mihalytch.org.ua/programming/php/comparison-of-dates.html" target="_blank"  title="Сравнение дат в PHP">сравнении двух дат</a> я уже упоминал ранее. Далее рассмотрим<strong> вычитание и сложение даты и времени</strong> или <strong>как определить какая дата и время были N дней X часов назад!? </strong> <img src='http://mihalytch.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Года полтора назад встречал &#8220;интересное&#8221; решение. Некий разработчик загнал в массив соответствия &#8220;номер месяца&#8221;=&gt;&#8221;количество дней&#8221;, затем парсил текущую дату и &#8220;вручную&#8221; отнимал или прибавлял количество дней, часов, минут, секунд.  Описывать подробно этот алгоритм не буду, так как не привык изобретать велосипед. Предлагаю &#8220;формулу&#8221; гораздо проще:</p>
<pre class="brush: php; title: ; notranslate">
# $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>Где &#8220;<em>Y-m-d H:i:s</em>&#8221; всего лишь шаблон времени, которое мы получим в текстовом формате.</p>
<p>Для тех, кто хочет узнать не будущее, а прошлое время &#8211; необходимо заменить вот этот плюс <em>&#8230; time()<font color="#ff0000">+</font>( $sec &#8230;</em> на минус.</p>
<p>На этой оптимистической ноте заканчиваю описание. Остальные возможности PHP предлагаю рассмотреть самостоятельно на официальном сайте php.net в качестве домашнего задания.</p>
]]></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>
		<item>
		<title>Циклическая прокрутка содержимого в блоке div</title>
		<link>http://mihalytch.org.ua/programming/js/cyclic-scrolling-of-content-in-div.html</link>
		<comments>http://mihalytch.org.ua/programming/js/cyclic-scrolling-of-content-in-div.html#comments</comments>
		<pubDate>Tue, 05 Aug 2008 12:40:39 +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/programming/js/ciklicheskaya-prokrutka-soderzhimogo-v-bloke-div.html</guid>
		<description><![CDATA[Начнем с того, что снова возникла необходимость создать плавную автоматическую прокрутку текста в DIV`е и зациклить ее. Несложно догадаться, что [...]]]></description>
			<content:encoded><![CDATA[<p>Начнем с того, что снова возникла необходимость создать плавную автоматическую прокрутку текста в DIV`е и зациклить ее. Несложно догадаться, что для этого были выбраны следующие инструменты: CSS и JavaScript.<span id="more-52"></span></p>
<p>Для начала необходимо выделить в блок сам текст:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;frame&quot;&gt;&lt;div id=&quot;animation_div&quot;&gt;&lt;div id=&quot;animate_div&quot;&gt;
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Donec vestibulum metus et nulla. Etiam at elit.
Nullam id mi eget lorem hendrerit viverra.
Fusce mi pede, tempor vitae, tristique tempus, molestie id, sem.
Cras mauris dolor, accumsan vitae, gravida a, blandit nec, massa.
&lt;br /&gt;
Morbi metus libero, pellentesque sed, tristique et, ultrices quis, nunc.
Nunc interdum vulputate sem. Donec laoreet sagittis sapien.
In interdum. Nunc tempus purus faucibus lorem.
Proin fermentum tristique nisi. Proin sed nibh ut purus sollicitudin facilisis.
Fusce imperdiet tincidunt metus. Etiam tempor ante a eros.
Curabitur blandit erat a nisl. Sed elit.
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
</pre>
<p>Затем оформим соответствующим образом с помощью каскадных таблиц стилей (CSS):</p>
<pre class="brush: css; title: ; notranslate">
div.frame {
padding: 0px;
margin: 0px;
width: 250px;     /* ширина блока */
border: 1px solid #fcc; /* рамка вокруг блока */
}

#animation_div {
position: relative;
padding: 0px;
margin: 0px;
height: 150px;    /* высота блока */
overflow: hidden;
}

#animate_div {
position: relative;
overflow: hidden;
margin:0px;
padding:3px;
/* стиль для текста внутри блока */
color: #000;
text-align: justify;
font: 10px Arial;
}
</pre>
<p>После блока в HTML коде необходимо вставить следующий JavaScript:</p>
<pre class="brush: jscript; title: ; notranslate">
var oText = document.getElementById(&quot;animate_div&quot;);
var oContainer = document.getElementById(&quot;animation_div&quot;);

var nHeight = oText.offsetHeight;
var nPos = oContainer.offsetHeight;

var bScrolling = true;

function OnScrollerMouseOver() {
bScrolling = false;
}

function OnScrollerMouseOut()  {
bScrolling = true;
}

function OnTimer() {
if(!bScrolling)
return;

oText.style.top = nPos.toString() + &quot;px&quot;;
if(--nPos &amp;lt; -nHeight)
nPos = oContainer.offsetHeight;
}

OnTimer();

oContainer.onmouseover = OnScrollerMouseOver;
oContainer.onmouseout  = OnScrollerMouseOut;

window.setInterval(OnTimer, 50); /* задержка перед каждым сдвигом */
</pre>
<p>Суть работы скрипта заключается в том, что он через заданный интервал времени сдвигает текст на 1 пиксель, потому чем больше значение задержки, тем медленнее будет прокручиваться текст.</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/js/cyclic-scrolling-of-content-in-div.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Графический checkbox с помошью JavaScript</title>
		<link>http://mihalytch.org.ua/programming/js/graph-checkbox-javascript.html</link>
		<comments>http://mihalytch.org.ua/programming/js/graph-checkbox-javascript.html#comments</comments>
		<pubDate>Mon, 23 Jun 2008 16:05:34 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/js/graph-checkbox.html</guid>
		<description><![CDATA[Работая над последним проектом, возникла надобность изменить вид элементов формы: checkbox и select. Так как велосипед изобретать мне не свойственно, [...]]]></description>
			<content:encoded><![CDATA[<p>Работая над последним проектом, возникла надобность изменить вид элементов формы: checkbox и select. Так как велосипед изобретать мне не свойственно, я решил почитать немного умных мыслей, посоветоваться с духами в он-лайне. Потратив пару часов своего времени, я нашел следущее решение.<span id="more-32"></span> Для начала качаем скрипты: <a href="http://mihalytch.org.ua/wp-content/mootools.js" title="demo-moo" >mootools</a>, <a href="http://mihalytch.org.ua/wp-content/demo-moo.js" title="demo-moo" >demo-moo</a></p>
<p>Затем пишем в таблице стилей следующий код, отвечающий за оформление чекбоксов:</p>
<pre class="brush: css; title: ; notranslate">
.f_checkbox {
background-repeat:no-repeat;
background-position:0px center;
height:16px;display:block;
cursor:pointer;
cursor:hand;
width:20px;
height:20px;
}

.checked,.selected{
color:#ddd;
}

.f_checkbox{
padding:0px;
background-color:#ccc;
}

.unchecked{
background-image:url('img/checkbox_off.gif');
}

.checked{
background-image:url('img/checkbox_on.gif');
}
</pre>
<p>В коде страницы делаем следующую запись:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!-- один из оформляемых чекбоксов --&gt;
&lt;label class=&quot;f_checkbox&quot;&gt;&lt;input type=&quot;checkbox&quot; /&gt;&lt;/label&gt;;
&lt;!-- подключаем скачанные java-скрипты --&gt;
&lt;script type='text/javascript' src='mootools.js'&gt;&lt;/script&gt;
&lt;script type='text/javascript' src='demo-moo.js'&gt;&lt;/script&gt;;
</pre>
<p>checkbox_on.gif и checkbox_off.gif изображения выбранного и не выбранного checkbox`а.</p>
<p>Теперь остается только экспериментировать =)</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/js/graph-checkbox-javascript.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Вертикальное меню</title>
		<link>http://mihalytch.org.ua/css/vertical-menu.html</link>
		<comments>http://mihalytch.org.ua/css/vertical-menu.html#comments</comments>
		<pubDate>Sat, 05 Apr 2008 13:32:08 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/web-design/css/vertical-menu.html</guid>
		<description><![CDATA[Существует множество способов создания вертикального меню. С помощью таблиц, блочной верстки, с JavaScript или без него &#8230; Ниже представлен наиболее [...]]]></description>
			<content:encoded><![CDATA[<p>Существует множество способов создания вертикального меню. С помощью таблиц, блочной верстки, с JavaScript или без него &#8230; Ниже представлен наиболее простой способ создания вертикального меню, используя списки и CSS.<span id="more-26"></span></p>
<p>Для начала создадим тело меню средствами HTML:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;v_menu&quot;&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Menu item 1&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Menu item 2/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Menu item 3/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Menu item 4/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</pre>
<p>Следующим шагом определим размер всего блока меню, границы, внутренние и внешние отступы, тип шрифта, цвет фона и цвет текста.</p>
<pre class="brush: css; title: ; notranslate">
#v_menu  {
    width: 200px;
    border: 1px solid #000;
    padding: 0 0 0 0;
    margin: 10px 0 0 0;
    font:14px Arial;
    background-color: #90bade;
    color: #333;
}
</pre>
<p>Теперь определим стили самых списков меню, которые являются элементами списка.</p>
<p>Для всего списка зададим нулевые отступы, уберем границу и маркеры списка.</p>
<pre class="brush: css; title: ; notranslate">
#v_menu ul {
    list-style: none;
    margin: 0 0 0 0;
    padding: 0 0 0 0;
    border: none;
}
</pre>
<p>Для каждого из пунктов меню (элементов списка) зададим размер, тип и цвет нижней границы и нулевой отступ.</p>
<pre class="brush: css; title: ; notranslate">
#v_menu li {
    border-bottom: 1px solid #90bade;
    margin: 0 0 0 0; }
</pre>
<p>Следующим шагом оформим сами ссылки. Зададим блочный стиль отображения ссылок (для того чтобы блок самой ссылки растянулся по ширине и высоте пункта списка), внутренние отступы, нулевую границу, цвета фона и самих ссылок, уберем подчеркивание ссылок.</p>
<pre class="brush: css; title: ; notranslate">
#v_menu li a {
    display: block;
    padding: 5px 5px 5px 5px;
    border: 0px;
    background-color: #2175bc;
    color: #fff;
    text-decoration: none;
    width: 100%;
}
</pre>
<p>Следующий стиль существует исключительно потому, что свойство  display: block не срабатывает для браузера IE под Windows.</p>
<pre class="brush: css; title: ; notranslate">
html&gt;body #v_menu li a {
    width: auto;
}
</pre>
<p>Следующий стиль описывает поведение пунктов меню при наведении на них курсора мышки. В данном случае изменяется цвет фона.</p>
<pre class="brush: css; title: ; notranslate">
#v_menu li a:hover {
    border:0px;
    background-color: #2586d7;
    color: #fff;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/css/vertical-menu.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

