<?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>З.П.И.</title>
	<atom:link href="http://wiki.dodex.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://wiki.dodex.org</link>
	<description>Что-то новое и интересное, найденное в интернете</description>
	<lastBuildDate>Fri, 18 Jun 2010 21:44:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ip sla, ipsec и event manager</title>
		<link>http://wiki.dodex.org/2010/06/19/ip-sla-ipsec-event-manager/</link>
		<comments>http://wiki.dodex.org/2010/06/19/ip-sla-ipsec-event-manager/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 21:38:30 +0000</pubDate>
		<dc:creator>shad</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[event manager]]></category>
		<category><![CDATA[ip sla]]></category>
		<category><![CDATA[ipsec]]></category>
		<category><![CDATA[track]]></category>

		<guid isPermaLink="false">http://wiki.dodex.org/?p=711</guid>
		<description><![CDATA[Заметку делаю для себя, чтоб не забыть.
Итак, столкнулся с тем, что track отбивает маршрут, но сессия ipsec висит. Соответственно, пока её не прибить, трафик не ходит по новому маршруту с новым тунелем.
Проблему решил с помощью event manager. Настраивалось все на 2811.

track timer interface 5
track timer ip route 5
!
track 1 ip sla 10 reachability
!
канала для сети [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wiki.dodex.org/wp-content/uploads/2009/03/cisco.gif"><img class="alignleft size-full wp-image-498" title="cisco" src="http://wiki.dodex.org/wp-content/uploads/2009/03/cisco.gif" alt="" width="110" height="73" /></a>Заметку делаю для себя, чтоб не забыть.<br />
Итак, столкнулся с тем, что track отбивает маршрут, но сессия ipsec висит. Соответственно, пока её не прибить, трафик не ходит по новому маршруту с новым тунелем.<br />
Проблему решил с помощью event manager. Настраивалось все на 2811.</p>
<p><span id="more-711"></span></p>
<blockquote><p><code><span style="color: #339966;">track timer interface 5<br />
track timer ip route 5<br />
!<br />
track 1 ip sla 10 reachability<br />
!</span></code></p></blockquote>
<p>канала для сети 192.168.125.0/24 два, оба через ipsec, основной канал по радиолинку через 10.11.12.13, и второй через инет по дефолтному маршруту.</p>
<blockquote><p><code><span style="color: #339966;">ip route 192.168.125.0 255.255.255.0 10.11.12.13 track 1<br />
ip route 0.0.0.0 0.0.0.0 10.9.8.7</span></code></p></blockquote>
<p>когда линк по радио-каналу есть, работает основной маршрут для этой сети, в отсутствие линка, работает маршрут через инет.</p>
<blockquote><p><code><span style="color: #339966;">ip sla 10<br />
&nbsp; icmp-echo 10.11.12.13 source-interface FastEthernet0/1<br />
&nbsp; timeout 2000<br />
&nbsp; threshold 2<br />
&nbsp; frequency 10<br />
ip sla schedule 10 life forever start-time now</span></code></p></blockquote>
<p>теперь собственно нужно отбить сессию ipsec, что проделывается следующим образом</p>
<blockquote><p><code><span style="color: #339966;">event manager applet app-sla-10<br />
&nbsp; description #crypto down if radio channel unav#<br />
&nbsp; event track 1 state down<br />
&nbsp; action 1.0 cli command "enable"<br />
&nbsp; action 1.1 cli command "clear crypto session remote 10.11.12.13"<br />
event manager applet app-sla-11<br />
&nbsp; description #crypto down if radio channel av#<br />
&nbsp; event track 1 state up<br />
&nbsp; action 1.0 cli command "enable"<br />
&nbsp; action 1.1 cli command "clear crypto session remote 10.9.8.6"</span></code></p></blockquote>
<p>Вот таким образом всё работает. При пропадании линка через радио-модем, маршрут через него пропадает и ipsec сессия прибивается, соответственно, поднимается новя сессия ipsec по каналу через инет и работает основной маршрут. При появлении радио-линка все возвращается на круги своя.</p>
<p>Удачи в настройках.<br />
© shadow_alone</p>
]]></content:encoded>
			<wfw:commentRss>http://wiki.dodex.org/2010/06/19/ip-sla-ipsec-event-manager/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nginx с php на CentOS</title>
		<link>http://wiki.dodex.org/2010/04/26/nginx-php-centos/</link>
		<comments>http://wiki.dodex.org/2010/04/26/nginx-php-centos/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 14:54:46 +0000</pubDate>
		<dc:creator>shad</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Операционные системы]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://wiki.dodex.org/?p=690</guid>
		<description><![CDATA[ Установим и настроем Nginx с PHP на примере CentOS 5.4. Все делается довольно быстро и просто.
Первым делом ставим репозитарий epel:
# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/$(uname -m)/epel-release-5-3.noarch.rpm
Устанавливаем nginx:
# yum install nginx

Ставим PHP и необходимые модули:
# yum install php-pear-Net-Socket php-pear php-common php-gd php-devel php php-mbstring php-pear-Mail php-cli php-imap php-snmp php-pdo php-xml php-pear-Auth-SASL php-ldap php-pear-Net-SMTP php-mysql
Ставим spawn-fcgi:
# yum install [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wiki.dodex.org/wp-content/uploads/2008/12/tux.png"><img class="size-full wp-image-468 alignright" title="tux" src="http://wiki.dodex.org/wp-content/uploads/2008/12/tux.png" alt="" width="70" height="82" /></a> Установим и настроем Nginx с PHP на примере CentOS 5.4. Все делается довольно быстро и просто.</p>
<p>Первым делом ставим репозитарий epel:</p>
<blockquote><p># rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/$(uname -m)/epel-release-5-3.noarch.rpm</p></blockquote>
<p>Устанавливаем nginx:</p>
<blockquote><p># yum install nginx</p></blockquote>
<p><span id="more-690"></span></p>
<p>Ставим PHP и необходимые модули:</p>
<blockquote><p># yum install php-pear-Net-Socket php-pear php-common php-gd php-devel php php-mbstring php-pear-Mail php-cli php-imap php-snmp php-pdo php-xml php-pear-Auth-SASL php-ldap php-pear-Net-SMTP php-mysql</p></blockquote>
<p>Ставим spawn-fcgi:</p>
<blockquote><p># yum install spawn-fcgi</p></blockquote>
<p>Скачиваем и настраиваем скрипт для init.d:</p>
<blockquote><p># wget http://andrey.org/nginx-daemon.sh.gz</p>
<p># gunzip nginx-daemon.sh.gz</p>
<p># mv nginx-daemon.sh /etc/init.d/php_cgi</p>
<p># chmod +x /etc/init.d/php_cgi</p></blockquote>
<p>Запускаем php app :</p>
<blockquote><p># /etc/init.d/php_cgi start</p></blockquote>
<p>Проверяем:</p>
<blockquote><p># netstat -tulpn | grep :9000</p></blockquote>
<p>Получаем:</p>
<p><code>tcp     0      0 127.0.0.1:9000       0.0.0.0:*      LISTEN    15196/php-cgi</code></p>
<p>Вносим изменения в <em>/etc/nginx/nginx.conf </em>:</p>
<blockquote><p>location ~ \.php$ {</p>
<p>root           html;</p>
<p>fastcgi_pass   127.0.0.1:9000;</p>
<p>fastcgi_index  index.php;</p>
<p>fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;</p>
<p>include        fastcgi_params;</p>
<p>}</p></blockquote>
<p>Рестартуем Nginx:</p>
<blockquote><p># service nginx restart</p></blockquote>
<p>Создаем тестовый файл для проверки работы php &#8211; <em>/usr/share/nginx/html/info.php</em>:</p>
<blockquote><p>&lt;?php</p>
<p>phpinfo();</p>
<p>?&gt;</p></blockquote>
<p>Проверяем в браузере. Все должно работать.</p>
<p>Удачи в настройках.</p>
<p>© shadow_alone</p>
]]></content:encoded>
			<wfw:commentRss>http://wiki.dodex.org/2010/04/26/nginx-php-centos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Изменение размеров файлов-имиджей XEN Dom-U</title>
		<link>http://wiki.dodex.org/2010/03/17/xen-resize/</link>
		<comments>http://wiki.dodex.org/2010/03/17/xen-resize/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 00:09:10 +0000</pubDate>
		<dc:creator>shad</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[stacklet.com]]></category>
		<category><![CDATA[XEN]]></category>

		<guid isPermaLink="false">http://wiki.dodex.org/?p=682</guid>
		<description><![CDATA[В случае, если, Вы пользуетесь файлами имиджей с сайта stacklet.com, все совсем просто:
Отключаем машину. Создаем пустой файл нужного размера:

dd if=/dev/zero of=Tempfile bs=1M count=10010

добавляем этот файл в конец файла-имиджа, например:

cat Tempfile &#62;&#62;ubuntu.9-10.x86.img

и изменяем размер раздела файловой системы:

resize2fs -f ubuntu.9-10.x86.img

Запускаем машину и всё.
В случае, если вы сами создавали виртуальную или паравиртуальную машину, и файл имидж содержит несколько [...]]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste"><a href="http://wiki.dodex.org/wp-content/uploads/2009/08/tux-2.png"><img class="alignleft size-full wp-image-591" title="tux-2" src="http://wiki.dodex.org/wp-content/uploads/2009/08/tux-2.png" alt="" width="100" height="111" /></a>В случае, если, Вы пользуетесь файлами имиджей с сайта <a title="http://stacklet.com/" href="http://stacklet.com/" target="_blank">stacklet.com</a>, все совсем просто:</div>
<div id="_mcePaste">Отключаем машину. Создаем пустой файл нужного размера:</div>
<blockquote>
<div id="_mcePaste">dd if=/dev/zero of=Tempfile bs=1M count=10010</div>
</blockquote>
<div id="_mcePaste">добавляем этот файл в конец файла-имиджа, например:</div>
<blockquote>
<div id="_mcePaste">cat Tempfile &gt;&gt;ubuntu.9-10.x86.img</div>
</blockquote>
<div id="_mcePaste"><span id="more-682"></span>и изменяем размер раздела файловой системы:</div>
<blockquote>
<div id="_mcePaste">resize2fs -f ubuntu.9-10.x86.img</div>
</blockquote>
<div id="_mcePaste">Запускаем машину и всё.</div>
<div>В случае, если вы сами создавали виртуальную или паравиртуальную машину, и файл имидж содержит несколько разделов, например:</div>
<blockquote>
<div id="_mcePaste">/dev/sda1	/boot</div>
<div id="_mcePaste">/dev/sda2	swap</div>
<div id="_mcePaste">/dev/sda3	/</div>
</blockquote>
<div id="_mcePaste">делаем таким образом:</div>
<div id="_mcePaste">останавливаем машину, создаем пустой файл нужного размера</div>
<blockquote>
<div id="_mcePaste">dd if=/dev/zero of=/vm/zero.img bs=1M count=5000</div>
</blockquote>
<div id="_mcePaste">добавляем этот файл в конец файла-имиджа</div>
<blockquote>
<div id="_mcePaste">cat zero.img &gt;&gt;t2.img</div>
</blockquote>
<div id="_mcePaste">потом прикручиваем получившийся файл в систему и запускаем fdisk</div>
<blockquote>
<div id="_mcePaste">/sbin/losetup /dev/loop1 /vm/t2.img</div>
<div id="_mcePaste">fdisk /dev/loop1</div>
</blockquote>
<div id="_mcePaste">()delete &#8211; удаляем наш раздел, в данном случае /dev/sda3</div>
<div id="_mcePaste">()add &#8211; добавляем раздел /dev/sda3 с таким же началом, но новым размером</div>
<div id="_mcePaste">сохраняем изменения</div>
<div id="_mcePaste">отсоединяем имидж из системы</div>
<blockquote>
<div id="_mcePaste">/sbin/losetup -d /dev/loop1</div>
</blockquote>
<div id="_mcePaste">запускаем нашу виртуальную машину и уже в ней</div>
<blockquote>
<div id="_mcePaste">resize2fs /dev/sda3</div>
</blockquote>
<div id="_mcePaste">вот и все.</div>
<div id="_mcePaste">Заметка практического характера, в свое время искал инфу, и если в первом варианте всё без проблем, то во втором надо быть осторожнее, чтоб не потерять инфу. Возможно, кому-то будет полезно.</div>
<p><span style="font-family: arial, sans; line-height: 25px; color: #222222; font-size: 14px;">© shadow_alone</span></p>
]]></content:encoded>
			<wfw:commentRss>http://wiki.dodex.org/2010/03/17/xen-resize/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Maps. Преобразование координат</title>
		<link>http://wiki.dodex.org/2010/03/16/google-maps-coordinate-convert/</link>
		<comments>http://wiki.dodex.org/2010/03/16/google-maps-coordinate-convert/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 13:44:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Скрипты]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[map]]></category>
		<category><![CDATA[карты]]></category>
		<category><![CDATA[конвертация]]></category>
		<category><![CDATA[преобразование координат]]></category>

		<guid isPermaLink="false">http://wiki.dodex.org/?p=676</guid>
		<description><![CDATA[Google Maps очень удобный инструмент для  встраивания карт в корпоративные приложения. Существует развитый API для  использования Google Maps в веб-интерфейсе на JavaScript.  Однако при попытке использовать Google Maps в иных языках  программирования может оказаться удобнее использовать простой  статический API от Google Maps.


Google Maps Static API

Принцип использования статического API предельно прост, и [...]]]></description>
			<content:encoded><![CDATA[<div><strong>Google Maps</strong> очень удобный инструмент для  встраивания карт в корпоративные приложения. Существует развитый <strong>API</strong> для  использования Google Maps в веб-интерфейсе на<strong> JavaScript</strong>.  Однако при попытке использовать Google Maps в иных языках  программирования может оказаться удобнее использовать простой  статический API от Google Maps.</div>
<div><span id="more-676"></span></div>
<div>
<h2>Google Maps Static API</h2>
</div>
<div>Принцип использования статического API предельно прост, и  заключается в общем случае в передаче в качестве параметров серверу <strong>maps.google.com</strong> координат  центра интересующей нас области (Широта-<strong>Latitude</strong>,  Долгота-<strong>Longitude</strong>), размера карты в пикселах (ширина,  высота), номера уровня-<strong>Zoom Level</strong> и некоторых  дополнительных параметров.<strong> </strong></div>
<div>Максимальный размер карты 512×512 пикселов, как указано в  документации, однако реально можно получить картинку размером <strong>640×640</strong>.</div>
<div>Параметр <strong>sensor=false</strong> указывает отсутствие датчика  местоположения, параметр этот необязательный, однако в документации на  API требуется его все равно уазывать.</div>
<div>Параметр <strong>maptype</strong> указывает на тип карты и может  принимать значения <strong>roadmap</strong> и <strong>mobile</strong>.</div>
<div>Параметр <strong>key</strong> при разработке можно не указывать,  однако через некоторое число запросов к серверу maps.google.com ваш IP  адрес может быть забанен. Рекомендуется получить официальный ключ. При  получении ключа для целей разработки указывайте адрес веб сервера как <strong>http://localhost</strong></div>
<div>Можно также указать координаты маркеров, которые будут отображены  на полученной карте. Более подробно про маркеры можно прочитать в  официальной <a href="http://code.google.com/intl/ru/apis/maps/documentation/staticmaps/"><span style="color: #0000ff;"><span style="text-decoration: underline;">документации</span></span></a> на Google Maps Static  API.</div>
<div>В ответ на запрос мы получаем картинку, которую и можем отобразить в  приложении, например, на <strong>Java</strong> или <strong>Delphi</strong>.</div>
<div>Например, выполнив такой запрос в браузере мы увидим карту <strong>Минска</strong>:</div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div><a href="http://maps.google.com/staticmap?center=53.901157,27.554741&amp;zoom=12&amp;size=500x500&amp;maptype=roadmap"><span style="font-family: Courier; color: #0000ff;"><span style="text-decoration: underline;">http://maps.google.com/staticmap?center=53.901157,27.554741&amp;zoom=12&amp;size=500×500&amp;maptype=roadmap&amp;sensor=false</span></span></a></div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div><a href="http://maps.google.com/staticmap?center=53.901157,27.554741&amp;zoom=12&amp;size=500x500&amp;maptype=roadmap&amp;sensor=false"><img src="http://www.foxbase.ru/images/162_1.jpg" alt="Карта Минска 1" hspace="1" vspace="1" width="451" height="452" /></a></div>
<div>Более подробно о <strong>Google Maps Static API</strong> можно  прочитать <a href="http://code.google.com/intl/ru/apis/maps/documentation/staticmaps/"><span style="color: #0000ff;"><span style="text-decoration: underline;">здесь, на официальном сайте Google</span></span></a>.</div>
<div>Все замечательно до тех пор, пока мы не захотим в нашем приложении  сделать что-то большее. Например, отрисовать свои объекты, не используя  маркеры Google Maps Static API. Или же вычислять координаты в градусах  по положению курсора мыши. Для этого нам необходимо выполнять  преобразования координат. Из десятичных градусов в декартову систему  координат и наоборот.</div>
<div>Далее мы рассмотрим основы, которые необходимо знать для понимания  преобразования координат, и напишем соответствующие функции на языке <strong>Java</strong>.</div>
<div>
<h2>Проекция Google Maps</h2>
</div>
<div><strong>Земля</strong> в Google Maps развернута в проекции <strong>Меркатора</strong>.  Иными словами Земля представляет собой развернутый на плоскость  цилиндр. В проекции Меркатора меридианы всегда равноудалены друг от  друга. Т.е. преобразование координат по оси X будет <strong>линейно</strong>.  Напротив, параллели в проекции Меркатора не равноудалены друг от друга и  преобразования координат по оси Y носит <strong>нелинейный</strong> характер,  что связано с особенностью цилиндрической проекции. Это первое, что нам  необходимо знать про проекцию Земли в Google Maps. Также вспомним, что  широта Земли имеет границы от -90 до 90 градусов, а долгота – от -180 до  180 градусов.</div>
<div>Следующее важное свойство Google Maps состоит в том, что Земля  разбита на <strong>20</strong> уровней масштабирования. На любом из  уровней проекция Земли размещается целиком, но уровни различаются  детализацией. Так нулевой уровень представлен квадратом (битмапом)  размерностью <strong>256×256</strong> пикселей. На втором уровне  детализация увеличивается ровно вдвое и на втором уровне проекция Земли  представлена на квадрате <strong>512×512</strong> пикселей. И так далее,  до <strong>19</strong> уровня детализации.</div>
<div>Учитывая вышесказанное, функции  преобразования координат будут  преобразовывать заданную широту и долготу в прямоугольную систему  координат на квадрате с количеством пикселов, равным заданному уровню  детализации. И наоборот.</div>
<div>
<h2>Функции преобразования координат</h2>
</div>
<div>Для ускорения вычислений определим массив, хранящий размерности  квадратов для каждого уровня.</div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div><span style="font-family: Courier;">private double[] LevelSize = new double[20];</span></div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div><span style="font-family: Courier;">LevelSize[0]=256;</span></div>
<div><span style="font-family: Courier;">LevelSize[1]=512;</span></div>
<div><span style="font-family: Courier;">LevelSize[2]=1024;</span></div>
<div><span style="font-family: Courier;">LevelSize[3]=2048;</span></div>
<div><span style="font-family: Courier;">LevelSize[4]=4096;</span></div>
<div><span style="font-family: Courier;">LevelSize[5]=8192;</span></div>
<div><span style="font-family: Courier;">LevelSize[6]=16384;</span></div>
<div><span style="font-family: Courier;">LevelSize[7]=32768;</span></div>
<div><span style="font-family: Courier;">LevelSize[8]=65536;</span></div>
<div><span style="font-family: Courier;">LevelSize[9]=131072;</span></div>
<div><span style="font-family: Courier;">LevelSize[10]=262144;</span></div>
<div><span style="font-family: Courier;">LevelSize[11]=524288;</span></div>
<div><span style="font-family: Courier;">LevelSize[12]=1048576;</span></div>
<div><span style="font-family: Courier;">LevelSize[13]=2097152;</span></div>
<div><span style="font-family: Courier;">LevelSize[14]=4194304;</span></div>
<div><span style="font-family: Courier;">LevelSize[15]=8388608;</span></div>
<div><span style="font-family: Courier;">LevelSize[16]=16777216;</span></div>
<div><span style="font-family: Courier;">LevelSize[17]=33554432;</span></div>
<div><span style="font-family: Courier;">LevelSize[18]=67108864;</span></div>
<div><span style="font-family: Courier;">LevelSize[19]=134217728;</span></div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div>Массив можно заполнить и так:</div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div><span style="font-family: Courier;">double k=256;</span></div>
<div><span style="font-family: Courier;">for (int i=0; i&lt;20; i++)</span></div>
<div><span style="font-family: Courier;">{</span></div>
<div><span style="font-family: Courier;"> LevelSize[i]=k;</span></div>
<div><span style="font-family: Courier;"> k=k*2;</span></div>
<div><span style="font-family: Courier;">}</span></div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div>Представленные далее функции предназначены для преобразования  широты и долготы в координаты пиксела на битмапе, соответствующем  заданному уровню, и наоборот. Математику приводить не будем, покажем  сразу работоспособные функции, пригодные для практического применения.  Для точности вычислений координаты пикселов не округляются, это можно  выполнить непосредственно в вашем приложении.</div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div><span style="font-family: Courier;">public double GoogleLon2BmpPix(double Lon, int  Level)</span></div>
<div><span style="font-family: Courier;">{</span></div>
<div><span style="font-family: Courier;"> return (LevelSize[Level] / 2 + Lon *  LevelSize[Level] / 360);</span></div>
<div><span style="font-family: Courier;">}</span></div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div><span style="font-family: Courier;">public double GoogleBmpPix2Lon(double x, int  Level)</span></div>
<div><span style="font-family: Courier;">{</span></div>
<div><span style="font-family: Courier;"> return (x &#8211; LevelSize[Level] / 2) /  (LevelSize[Level] / 360);</span></div>
<div><span style="font-family: Courier;">}</span></div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div><span style="font-family: Courier;">public double GoogleLat2BmpPix(double Lat, int  Level)</span></div>
<div><span style="font-family: Courier;">{</span></div>
<div><span style="font-family: Courier;"> double k = Math.sin(Lat * Math.PI / 180); </span></div>
<div><span style="font-family: Courier;"> return (LevelSize[Level] / 2 &#8211; 0.5 *  Math.log((1 + k) / (1 &#8211; k)) * LevelSize[Level] / (2 * Math.PI));</span></div>
<div><span style="font-family: Courier;">}</span></div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div><span style="font-family: Courier;">public double GoogleBmpPix2Lat(double y, int  Level)</span></div>
<div><span style="font-family: Courier;">{</span></div>
<div><span style="font-family: Courier;"> double k = (y &#8211; LevelSize[Level] / 2) / &#8211;  (LevelSize[Level] / (2 * Math.PI));</span></div>
<div><span style="font-family: Courier;"> return (2 * Math.atan(Math.exp(k)) &#8211; Math.PI  / 2) * 180 / Math.PI;</span></div>
<div><span style="font-family: Courier;">}</span></div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div>Для вычисления координат в градусах в зависимости от смещения в  пикселах можно использовать следующие функции:</div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div><span style="font-family: Courier;">public double GoogleLonPixDiff(double Lon, int  Level, int Diff)</span></div>
<div><span style="font-family: Courier;">{</span></div>
<div><span style="font-family: Courier;"> return  GoogleBmpPix2Lon(GoogleLon2BmpPix(Lon,Level)+Diff,Level); </span></div>
<div><span style="font-family: Courier;">}</span></div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div><span style="font-family: Courier;">public double GoogleLatPixDiff(double Lat, int  Level, int Diff)</span></div>
<div><span style="font-family: Courier;">{</span></div>
<div><span style="font-family: Courier;"> return  GoogleBmpPix2Lat(GoogleLat2BmpPix(Lat,Level)+Diff,Level); </span></div>
<div><span style="font-family: Courier;">}</span></div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div>
<h2>Пример использования функций преобразования координат</h2>
</div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div>Полученные функции преобразования координат позволяют нам выполнять  все необходимые вычисления. Например, для получения координат в  градусах верхнего левого угла карты, представленной в начале статьи,  необходимо получить пиксельные координаты центра карты, вычесть из этих  координат по 250 (половина ширины и высоты карты, выбранные для примера)  и преобразовать полученные значения обратно в градусы:</div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div><span style="font-family: Courier;">double Lat0 =  GoogleLatPixDiff(53.901157,12,-250); </span></div>
<div><span style="font-family: Courier;">double Lon0 =  GoogleLonPixDiff(27.554741,12,-250);</span></div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div>С учетом округления до шести знаков получим:</div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div><span style="font-family: Courier;">Lat0 = 53.951696</span></div>
<div><span style="font-family: Courier;">Lon0 = 27.468910</span></div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div>Выполним запрос с полученными значениями:</div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div><a href="http://maps.google.com/staticmap?center=53.951696,27.468910&amp;zoom=12&amp;size=500x500&amp;maptype=roadmap"><span style="font-family: Courier; color: #0000ff;"><span style="text-decoration: underline;">http://maps.google.com/staticmap?center=53.951696,27.468910&amp;zoom=12&amp;size=500×500&amp;maptype=roadmap&amp;sensor=false</span></span></a></div>
<div><span style="font-family: Courier;"><br />
</span></div>
<div>Мы видим карту, в которой верхний левый угол предыдущей карты точно  помещен теперь в центр.</div>
<div><a href="http://maps.google.com/staticmap?center=53.951696,27.468910&amp;zoom=12&amp;size=500x500&amp;maptype=roadmap&amp;sensor=false"><img src="http://www.foxbase.ru/images/162_2.jpg" alt="Карта Минска 2" hspace="1" vspace="1" width="454" height="454" /></a></div>
<div>Этот пример показал нам, каким образом получать координаты в  градусах, смещенные на заданное количество пикселов, что может быть  полезно при реализации функции смещения карты пользователем при помощи  мыши.</div>
<div>Для рисования собственных объектов на полученной картинке  необходимо получить координаты объекта в пикселах для заданного уровня и  преобразовать их к координатам в пикселах экрана отображения карты.  Необходимо заметить, что делать это нужно через вычисление <strong>смещения</strong> в  пикселах координат отображаемого объекта относительно <strong>центра  карты</strong>. Иные способы вычисления пиксельных экранных координат  (например, через вычисление координат левого верхнего угла, как это  общепринято) могут давать заметную ошибку по вертикали из-за нелинейного  преобразования, на которое мы указывали в это статье выше.</div>
<div>И еще. При вычислении координат в пикселах не следует округлять  промежуточные результаты. Округление необходимо производить над конечным  результатом, иначе также можно получить заметные визуально ошибки  преобразования.</div>
<div>
<h2>Заключение</h2>
</div>
<div>Описанные в этой статье функции для практического применения удобно  оформить в виде отдельного <strong>Java</strong> класса.</div>
<div>Представленные преобразования координат позволяют использовать <strong>Google  Maps Static API</strong> в приложениях на любых языках программирования  для решения задач различной сложности, от отрисовки собственных  объектов до организации полноценного интерактивного взаимодействия  пользователей с картами на основе <strong>Google Maps</strong>.</div>
<div>Оригинал: http://www.foxbase.ru/Java/google-maps-preobrazovanie-koordinat.htm</div>
]]></content:encoded>
			<wfw:commentRss>http://wiki.dodex.org/2010/03/16/google-maps-coordinate-convert/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Некоторые тонкости по настройке сервера под себя</title>
		<link>http://wiki.dodex.org/2010/03/09/zaduj/</link>
		<comments>http://wiki.dodex.org/2010/03/09/zaduj/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 02:00:57 +0000</pubDate>
		<dc:creator>shad</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[logwatch]]></category>
		<category><![CDATA[ssh-copy-id]]></category>
		<category><![CDATA[ssh-keygen]]></category>

		<guid isPermaLink="false">http://wiki.dodex.org/?p=664</guid>
		<description><![CDATA[Статья про то, как упростить жизнь админа. Ни в коем случай не претендует на учебное пособие, а основана на личном опыте, как и написано в топике &#8220;под себя&#8221;.
Мы получили новый сервер, не важно, арендовали, взяли на колокейшн или ставим у себя в офисе.
Я не буду вдаваться в подробности установки OS, выбора RAID и прочего, каждому [...]]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste"><a href="http://wiki.dodex.org/wp-content/uploads/2008/12/tux.png"><img class="alignleft size-full wp-image-468" title="tux" src="http://wiki.dodex.org/wp-content/uploads/2008/12/tux.png" alt="" width="100" height="117" /></a>Статья про то, как упростить жизнь админа. Ни в коем случай не претендует на учебное пособие, а основана на личном опыте, как и написано в топике &#8220;под себя&#8221;.</div>
<div id="_mcePaste">Мы получили новый сервер, не важно, арендовали, взяли на колокейшн или ставим у себя в офисе.</div>
<div id="_mcePaste">Я не буду вдаваться в подробности установки OS, выбора RAID и прочего, каждому свое. Так же я не буду здесь описывать как установить LAMP или тому подобное.</div>
<div id="_mcePaste">В данном примере будет рассмотрена изначальная настройка CentOS, на сегодняшний день актуальная версия 5.4. Писать буду от первого лица.</div>
<div><span id="more-664"></span></div>
<div id="_mcePaste">И так, есть сервер, есть %admin%, приступим:</div>
<div id="_mcePaste">Первым долгом, упрощаю себе работу с консолью, я предпочитаю bash, хотя и знаю о всех прелестях zsh.</div>
<blockquote>
<div id="_mcePaste"># vim ~/.inputrc</div>
</blockquote>
<div id="_mcePaste">и добавляем туда пару строчек</div>
<blockquote>
<div id="_mcePaste">&#8220;\e[A&#8221;:history-search-backward</div>
<div id="_mcePaste">&#8220;\e[B&#8221;:history-search-forward</div>
</blockquote>
<div id="_mcePaste">сохраняем файл и закрываем</div>
<div id="_mcePaste">Эти настройки существенно упростят работу с консолью, при наборе начала комманды и нажитии стрелок (вверх-вниз), будут проявляться уже набранные команды начинающиеся с набранного начала (каломбур какой-то получился).</div>
<div id="_mcePaste">далее ставим очень нужный репозиторий отсюда - <a title="RPMforge" href="https://rpmrepo.org/RPMforge/Using" target="_blank">RPMforge</a> и обновляем систему:</div>
<blockquote>
<div id="_mcePaste"># yum update</div>
</blockquote>
<div id="_mcePaste">Следующим этапом меняем порт на ssh-сервер, для этого, редактирум файл <em>/etc/ssh/sshd_config</em> :</div>
<blockquote>
<div id="_mcePaste">#меняем на понравившийся Вам порт. например 3522</div>
<div id="_mcePaste">Port 3522</div>
<div id="_mcePaste">#отключаем возможность захода по ssh из под root</div>
<div id="_mcePaste">PermitRootLogin no</div>
<div id="_mcePaste">#Разрешаем вход по ssh только user (если нужно несколько пользователей пускать по ssh, то лучше для этого создать отдельную группу, добавить этих пользователей в нее и сделать AllowGroups)</div>
<div id="_mcePaste">AllowUsers user</div>
<div id="_mcePaste">#Проверяем что не разрешен вход с пустым паролем (по умолчанию отключено)</div>
<div id="_mcePaste">PermitEmptyPasswords no</div>
</blockquote>
<div id="_mcePaste">сохраняем и закрываем</div>
<div id="_mcePaste">перезагружаем ssh-сервер</div>
<blockquote>
<div id="_mcePaste"># /etc/init.d/sshd restart</div>
</blockquote>
<div id="_mcePaste">выходим из системы и заходим заного по новому порту. Здесь надо быть внимательным, чтоб не остаться без доступа к серваку, вдруг файрволом закрыт этот порт. Проверяйте заранее.</div>
<div id="_mcePaste">проверяем что у нас в правилах firewall</div>
<blockquote>
<div id="_mcePaste"># iptables -L -n -v &#8211;line-numbers (так нагляднее)</div>
</blockquote>
<div id="_mcePaste">обычно изначально правила пусты, сейчас будем их добавлять:</div>
<blockquote>
<div id="_mcePaste">iptables -A INPUT -s ваш_IP -j ACCEPT # разрешаем полный доступ себе, если конечно ip постоянный</div>
<div id="_mcePaste">iptables -A INPUT -m state &#8211;state ESTABLISHED -j ACCEPT # разрешаем уже имеющиеся соединения</div>
<div id="_mcePaste">iptables -A INPUT -m state &#8211;state RELATED -j ACCEPT</div>
<div id="_mcePaste">iptables -A -i lo -j ACCEPT # разрешаем соединения с локально интерфейса</div>
<div id="_mcePaste"># далее небольшая махинация с входом по ssh, защищает от попытки перебора паролей</div>
<div id="_mcePaste"># разрешаем попытки входа по ssh не более 3-х, если привысило, IP заблокируется на 60 сек, заодно логируем и метим,удобно видеть в логах</div>
<div id="_mcePaste">iptables -A INPUT -p tcp &#8211;dport 3522 -m recent &#8211;set &#8211;name SEC &#8211;syn -m state &#8211;state NEW -j ACCEPT</div>
<div id="_mcePaste">iptables -A INPUT -p tcp &#8211;dport 3522 -m recent &#8211;update &#8211;seconds 60 &#8211;hitcount 3 &#8211;rttl &#8211;name SEC -j LOG &#8211;log-prefix &#8220;BRUTE FORCE &#8220;</div>
<div id="_mcePaste">iptables -A INPUT -p tcp &#8211;dport 3522 -m recent &#8211;update &#8211;seconds 60 &#8211;hitcount 3 &#8211;rttl &#8211;name SEC -j DROP</div>
<div id="_mcePaste"># далее, надо открыть порты которые будут у нас доступны из-вне</div>
<div id="_mcePaste">iptables -A INPUT -p tcp -m tcp &#8211;dport 80 -j ACCEPT # http-сервер</div>
<div id="_mcePaste">iptables -A INPUT -p tcp -m tcp &#8211;dport 110 -j ACCEPT # pop3-сервер</div>
<div id="_mcePaste">iptables -A INPUT -p tcp -m tcp &#8211;dport 25 -j ACCEPT # smtp-сервер</div>
<div id="_mcePaste"># короче открываем кому что надо.</div>
<div id="_mcePaste"># ну и в конце, поставим на цепочки DROP по умолчинию</div>
<div id="_mcePaste">iptables -P INPUT DROP</div>
<div id="_mcePaste">iptables -P FORWARD DROP</div>
<div id="_mcePaste"># цепочку OUTPUT я оставляю в ACCEPT</div>
</blockquote>
<div id="_mcePaste">теперь все это сохраним:</div>
<blockquote>
<div id="_mcePaste"># iptables-save &gt;/etc/sysconfig/iptables</div>
</blockquote>
<div id="_mcePaste">В будущем мы можем отредактировать файл /etc/sysconfig/iptables, добавив что понадобиться, и перезагрузить файрвол:</div>
<blockquote>
<div id="_mcePaste"># /etc/init.d/iptables restart</div>
</blockquote>
<div id="_mcePaste">Надеюсь не надо объяснять что пароли нужно делать как можно более сложными, лично я их не использую вообще, вход по ключам. Для этого на домашней машине:</div>
<blockquote>
<div id="_mcePaste"># ssh-keygen</div>
<div id="_mcePaste"># ssh-copy-id &#8220;-p 3522 ip_вашего сервера&#8221;</div>
</blockquote>
<div id="_mcePaste">наберете пароль, и key окажеться на сервере в разрешенных, после этого не придеться каждый раз набирать пароль.</div>
<div id="_mcePaste">Ну, вроде с безопастностью всё.</div>
<div id="_mcePaste">При наличии кучи серверов, а у меня их около полусотни в целом, просто не имеется физической возможности отслеживать все, и даж заходить на каждый хотя бы раз в день. А следить за всем как-то ведь надо. Для этого прикручиваем logwatch, который будет слать на мыло отчеты за сутки. В итоге мы получим около 50-и писем в день, но просмотреть их одним глазком легче чем заходить на сам сервер. Я приблизительно знаю размеры приходящих логов с каждого сервера, и потому при увеличении или уменьшени размера, просматриваю данный лог более тщательно и при необходимости уже захожу на сервер, чтоб исправить что-то, если это необходимо. Итак</div>
<blockquote>
<div id="_mcePaste"># yum install logwatch</div>
<div id="_mcePaste"># cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/</div>
</blockquote>
<div id="_mcePaste">правим файл под себя</div>
<blockquote>
<div id="_mcePaste"># vim /etc/logwatch/conf/logwatch.conf</div>
<div id="_mcePaste">MailTo = ваш_email</div>
<div id="_mcePaste">MailFrom = Logwatch_server_name #(чтоб нагляднее было по приходу писем)</div>
<div id="_mcePaste">Detail = High #(чтоб подробнее было)</div>
</blockquote>
<div id="_mcePaste">сохраняем и закрываем файл.</div>
<div id="_mcePaste">проверить работу logwatch можно так:</div>
<blockquote>
<div id="_mcePaste">/etc/cron.daily/0logwatch</div>
</blockquote>
<div id="_mcePaste">отчет сформируется и придет Вам на почту</div>
<div id="_mcePaste">С логами вроде тож разобрались</div>
<div id="_mcePaste">Если на сервере есть FTP, то необходимо открыть возможность работы с ним в файрволе, но тут есть некоторая тонкость, если FTP в пассивном режиме, используються высшие порты, поэтому лучше в демоне ftp указать эти порты конкретно, количество портов расчитывается согласно использованию демона, в данном случае выделяется 236 портов:</div>
<div id="_mcePaste">для proftpd, в секции &lt;Global&gt;:</div>
<blockquote>
<div id="_mcePaste">PassivePorts  60000 60235</div>
</blockquote>
<div id="_mcePaste">для vsftpd:</div>
<blockquote>
<div id="_mcePaste">pasv_min_port=60000</div>
<div id="_mcePaste">pasv_max_port=60235</div>
</blockquote>
<div id="_mcePaste">далее, открываем всё это дело на файрволе:</div>
<blockquote>
<div id="_mcePaste">iptables -A INPUT -p tcp -m tcp &#8211;dport 21 -j ACCEPT # ftp-сервер</div>
<div id="_mcePaste">iptables -A INPUT -p tcp -m tcp &#8211;dport 20 -j ACCEPT # ftp-data для активного режима</div>
<div id="_mcePaste">iptables -A INPUT -p tcp -m tcp &#8211;dport 60000:60235 -j ACCEPT</div>
</blockquote>
<div id="_mcePaste">не забываем сохранить:</div>
<blockquote>
<div id="_mcePaste"># iptables-save &gt;/etc/sysconfig/iptables</div>
</blockquote>
<p><span style="font-family: arial, sans; line-height: 25px; color: #222222;"> </span></p>
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-family: arial, sans; font-size: 14px; padding: 0px;">Вот и все. Далее уже можно ставить необходимое программное обеспечение. Удачи в настройках.</p>
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; font-family: arial, sans; font-size: 14px; padding: 0px;">© shadow_alone</p>
]]></content:encoded>
			<wfw:commentRss>http://wiki.dodex.org/2010/03/09/zaduj/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CDP на Linux</title>
		<link>http://wiki.dodex.org/2010/03/08/cdp-%d0%bd%d0%b0-linux/</link>
		<comments>http://wiki.dodex.org/2010/03/08/cdp-%d0%bd%d0%b0-linux/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 14:31:25 +0000</pubDate>
		<dc:creator>shad</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[cdp]]></category>
		<category><![CDATA[cdpr]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[lldp]]></category>

		<guid isPermaLink="false">http://wiki.dodex.org/?p=650</guid>
		<description><![CDATA[Всем известно про замечательный протокол CDP (Cisco Discovery Protocol) для Cisco. Оказывается что и для Linux тоже есть возможность использовать его прелести. Есть проект LLDP, который нам в этом и поможет.
Для тех, кто в танке: на cisco можно посмотреть соседей с включенным CDP коммандой sh cdp nei. Комманда выведет оборудование которое подключено, на каком порту [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wiki.dodex.org/wp-content/uploads/2008/12/tux.png"><img class="alignleft size-full wp-image-468" title="tux" src="http://wiki.dodex.org/wp-content/uploads/2008/12/tux.png" alt="" width="100" height="117" /></a>Всем известно про замечательный протокол CDP (Cisco Discovery Protocol) для Cisco. Оказывается что и для Linux тоже есть возможность использовать его прелести. Есть проект <a title="LLDP" href="https://trac.luffy.cx/lldpd/" target="_blank">LLDP</a>, который нам в этом и поможет.</p>
<p>Для тех, кто в танке: на cisco можно посмотреть соседей с включенным CDP коммандой<em> sh cdp nei</em>. Комманда выведет оборудование которое подключено, на каком порту и т.д., более подробно <em>sh cdp ent Device_ID</em>, уже по конкретному девайсу.</p>
<p>Так вот, мы сейчас попробуем включить это и в Linux, в данном, конкретном случае, настраивать будем на CentOS 5.4, на Debian-подобных дистрах почти тож самое, за исключением процесса сборки и расположения файлов.</p>
<p><span id="more-650"></span></p>
<div id="_mcePaste">Для начала скачаем <a title="src.rpm" href="http://www.luffy.cx/lldpd/lldpd-0.4.0-1.fc10.src.rpm" target="_blank">src.rpm</a>, установим его:</div>
<blockquote>
<div id="_mcePaste"># rpm -Uhv lldpd-0.4.0-1.fc10.src.rpm</div>
</blockquote>
<div id="_mcePaste">появится файл спецификаций /usr/src/redhat/SPECS/lldpd.spec, кому нужно, может его править по своему усмотрению, если надо.</div>
<div id="_mcePaste">Далее нам собственно надо собрать сам пакет:</div>
<blockquote>
<div id="_mcePaste"># rpmbuild -bb /usr/src/redhat/SPECS/lldpd.spec</div>
</blockquote>
<div id="_mcePaste">устанавливаем вновь собранный пакет:</div>
<blockquote>
<div id="_mcePaste"># rpm -Uhv /usr/src/redhat/RPMS/i386/lldpd-0.4.0-1.i386.rpm</div>
</blockquote>
<p>настраиваем опции запуска демона, открываем файл:</p>
<blockquote><p># vim /etc/sysconfig/lldpd</p></blockquote>
<p>и правим</p>
<blockquote><p>OPTIONS=&#8221;-v -c&#8221;</p></blockquote>
<p><strong>-v</strong> &#8211; включаем поддержку vlan если они у Вас есть на машине с Linux</p>
<p><strong>-c</strong> &#8211; включаем протокол CDP</p>
<p>более подробную информацию можно посмотреть по man lldpd</p>
<p>запускаем демон:</p>
<blockquote><p># /etc/init.d/lldpd start</p></blockquote>
<p>после запуска, в файле /var/log/messages мы увидим приблизительно такие строки:</p>
<blockquote><p>lldpd[30206]: lldpd_decode: switching to CDPv2 on port eth1<br />
lldpd[30206]: lldpd_decode: switching to CDPv2 on port eth0</p></blockquote>
<p>всё в порядке, демон стартанул.</p>
<p>Чтоб все работало, на оборудовании с другой стороны, на порту, должен быть включен CDP, то есть не должно стоять no cdp enable на интерфейсе.</p>
<p>Собственно, осталось только проверить как все работает и получить информацию.</p>
<blockquote><p># lldpctl</p></blockquote>
<pre>получаем:
-------------------------------------------------------------------------------
    LLDP neighbors
-------------------------------------------------------------------------------
Interface: eth0
 ChassisID: sw-b-48 (local)
 SysName:   sw-b-48
 SysDescr:
   cisco WS-C2960-48TT-L running on
   Cisco IOS Software, C2960 Software (C2960-LANBASE-M)
   Copyright (c) 1986-2007 by Cisco Systems, Inc.
   Compiled Thu 19-Jul-07 20:06 by nachen
 MgmtIP:    172.16.25.48
 Caps:      Bridge(E)
 PortID:    FastEthernet0/4 (ifName)
 PortDescr: FastEthernet0/4
-------------------------------------------------------------------------------</pre>
<p>видим , что на другой стороне у нас свитч C2960, версию IOS, порт свитча, к которуму подключена машина с Linux.</p>
<p>Для остроты ощущений, посмотрим вывод на cisco, у нас там появилось:</p>
<blockquote><p>my.linux.machine<br />
Fas 0/4           92             R       Linux     eth0</p></blockquote>
<p>то есть, опять таки , видим, что у нас на порту fa0/4 подключена машина с Linux, сетевое имя машины, и её сетевушка eth0.</p>
<p><em>Добавлю</em>: можно собрать пакет из сорсов tar.gz и самому, но в моем случае это не true-way, все должно быть упорядочено. В Debian-подобных дистрах, файл настройки демона расположен в /etc/default/</p>
<p>стоит отметить еще утилиту cdpr, но с её помощью можно только получать информацию по CDP, а не обмениваться ей, для RH-дистров она есть в репозитарии rpmforge.</p>
<p>Вот и все. Удачи в настройках.</p>
<p>© shadow_alone<br />
это мой крос-пост с <a title="qwerty.az" href="http://qwerty.az/blog/linux/863.html" target="_blank">qwerty</a> и <a href="http://shadowalone.habrahabr.ru/blog/86773/">habr.ru</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wiki.dodex.org/2010/03/08/cdp-%d0%bd%d0%b0-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Упрощение пользовательского интерфейса.</title>
		<link>http://wiki.dodex.org/2009/10/25/minimizing-complexity-in-user-interfaces/</link>
		<comments>http://wiki.dodex.org/2009/10/25/minimizing-complexity-in-user-interfaces/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 06:36:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Дизайн]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[навигация]]></category>
		<category><![CDATA[юзабилити]]></category>

		<guid isPermaLink="false">http://wiki.dodex.org/?p=621</guid>
		<description><![CDATA[Чистый. Легкий в использовании. Дружествнный. Интуитивный. Эта мантра произносится многими, но часто теряет смысл при переводе. Виновник: сложность. Сложный интерфейс может запутать пользователя в простом случае и полностью оттолкнет его в более сложном случае. Но если вы изначально уменьшите общую сложность, а так же сложность восприятия, пользователь будет удовлетворен.
Недавно мы столкнулись с такой задачей, проектируя [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-630" style="margin-left: 10px; margin-right: 10px;" title="screenr" src="http://wiki.dodex.org/wp-content/uploads/2009/10/screenr-150x150.jpg" alt="screenr" width="150" height="150" />Чистый. Легкий в использовании. Дружествнный. Интуитивный. Эта мантра произносится многими, но часто теряет смысл при переводе. Виновник: сложность. Сложный интерфейс может запутать пользователя в простом случае и полностью оттолкнет его в более сложном случае. Но если вы изначально уменьшите общую сложность, а так же сложность восприятия, пользователь будет удовлетворен.<br />
Недавно мы столкнулись с такой задачей, проектируя два веб-приложения, включающих систему управления контентом уровня предприятия. Ниже приводятся несколько методов которые помогли нам упросить приложения и предоставить пользователю простой интерфейс.</p>
<p><span id="more-621"></span></p>
<h2>Рубите с плеча.</h2>
<p>Первое оружие для борьбы с злом сложности &#8211; топор. Исследования показали, что 80% пользователей используют лишь 20% функционала програмного обеспечения. А всякие штучки не только увеличивают время разработки, но и отнимают, а не прибавляют ценности делая приложение сложнее в использовании. Это приложения, которые стараются сделать все, вместо того, чтобы стараться делать что то одно хорошо. Успешное приложение, это узконаправленое приложение: решает одну проблему, но на отлично.<br />
Лучшим способом получить узконаправленое приложение &#8211; урезать функционал. Когда решаете нужен ли вам определенный функционал, ответом по умолчанию должен быть &#8211; &#8220;нет&#8221;. Создайте настоящую конкуренцию между функционалом, только самый нужный будет включен. Если он не помогает большинсву пользователей решить свои задачи, тогда он должен быть исключен. Можете говорить, что махать топором &#8211; это просто, зато когда клиенты начнут петь диферамбы о том как удобно и просто ваше приложение, можете оставить себе эту благодарность.</p>
<h2>Спрячте сложность.</h2>
<p>Если вы не можете уничтожить сложный функционал, следующая полезная мысль &#8211; спрятать его. Очень часто, редко используемый функционал отнимает больше пространства, чем часто используемый простой функционал. Это неправильно. Хороший пользовательский интерфейс выставляет часто используемый функционал, и прячет редкоиспользуемый, так, чтобы он не мешал.</p>
<p>Когда мы делали редизайн КМС, мы не могли избавится от функционала пакетного редактирования.В предыдущей версии КМС для этого была отведена целая колонка на экране. Это занимало около 30% поверхности экрана, однако, как оказалось, редко кто использовал данный функционал. Наше решение было в отображении одной иконки, рядом с которой выводилась цифра, показыващая количество элементов в группе. при нажатии на пиктограмму модально отображался список элементов. Это экономит кучу места и не отвлекает пользователей от их задач.</p>
<p><img class="alignleft size-full wp-image-623" title="bulkedit_1" src="http://wiki.dodex.org/wp-content/uploads/2009/10/bulkedit_1.png" alt="bulkedit_1" width="260" height="173" /> <img class="alignleft size-full wp-image-624" title="bulkedit_2" src="http://wiki.dodex.org/wp-content/uploads/2009/10/bulkedit_2.png" alt="bulkedit_2" width="260" height="173" /></p>
<p>Если говорить словами гуру дизайна Джона Маеда &#8211; &#8220;Когда маленький и скромный объект, превосходит все наши ожидания, это не только удивительно, но и приятно&#8221;</p>
<h2>Уменьшайте визуальный шум.</h2>
<p>Итак мы обсудили урезание и сокрытие функционала. Но уменьшение сложности &#8220;восприятия&#8221; ничуть не менее важно. &#8220;Количество визуального шума в интерфейсе, сильно осложняет восприятие последнего.&#8221; &#8211; Брендон Волкин. Сведение визуально зашумленности к минимуму сделает интерфейс кажущемся проще для восприятия. Двумя основными инструментами для уменьшения шума явлются: свободное пространство и контраст.</p>
<p>Свободное пространсво, по определению марка Болтона, это &#8220;пространство между элементами в композиции&#8221;. Свободное пространство должно быть инструментом по умолчаю при разметке. Одно правило: никогда не вводите дизайнерски элемент, если вы можете получить тот же результат используя свободное пространство. Вы будите приятно удивлены тем, как много можно сделать используя свободное пространство.</p>
<p>В то время как свободное пространство должно быть в изобилии, контрастом лучше не злоупотреблять. Дизайнер-теоретик Эдвард Тафт, автор понятия &#8220;наименьшей эффективной разницы&#8221;, призывает дизайнеров к использованию небольших визуальных отличий требуемых для эффективной подачи идеи. Фактически это означает: подчернуть то, что важно и затенить все остальное.</p>
<p>Для илюстрации обеих идей, посмотрите на ценовую таблицу с TypeKit и ее измененную версию:</p>
<p><img class="size-full wp-image-633  alignleft" title="typekit_modified" src="http://wiki.dodex.org/wp-content/uploads/2009/10/typekit_modified.png" alt="typekit_modified" width="540" height="176" /></p>
<p><em>Измененная версия.</em></p>
<p><em><img class="alignnone size-full wp-image-634" title="typekit_original" src="http://wiki.dodex.org/wp-content/uploads/2009/10/typekit_original.png" alt="typekit_original" width="540" height="176" /></em></p>
<p><em>Оригинал<br />
</em></p>
<p>Вы наверное заметили, что в измененной версии присутсвует темная &#8220;тяжелая&#8221; рамка. Какая из версий менее зашумлена? (Ответ, естейственно, оригинал). Много свободного пространства и слабый контраст уменьшают визуальный шум и делают ваше приложение проще.</p>
<h2>Уменьшайте, используйте повторно.</h2>
<p>Как только приложение обретает форму, появляются проблемы, которые часто повторяются в различных его частях. И переодически появляющиеся проблемы, как правило, имеют схожие решения. Необходимо икать способы повторного использования элементов интерфейса.</p>
<p>Повторное использование элементов имеет два приимущества: уменьшает время разработки и делает приложение более понятным для понимания. Так, если пользователь может решить одну задачу, то применив этот опыт может решить и вторую, так как применяются схожие элементы.</p>
<p>В процессе разработки CMS мы потратили много времени на совершенствование валидации форм. Мы обвели ошибочные поля красным и добавили кружки красного цвета показывающие сколько ошибок в каждой изсекции формы.</p>
<p>В процессе, к списку требований добавилась функция сравнения версий. Вместо создания совершенно нового механизма, мы использовали комбинацию с фреймворком для валидации. Поля формы, которые были изменены, подсвечивались голубым, и использовались синие кружки для указания количесва измененных полей секций. Внедрить такое было несложно и быстро, а интерфейс уже знаком пользователям.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-635" title="validation" src="http://wiki.dodex.org/wp-content/uploads/2009/10/validation.png" alt="validation" width="540" height="266" /></p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-636" title="version_compare" src="http://wiki.dodex.org/wp-content/uploads/2009/10/version_compare.png" alt="version_compare" width="540" height="266" /></p>
<p>Повторное использование элементов интерфейса, это еще один путь для уменьшения сложности приложения, так как пользователи быстрее обучаются работе с ним, и знают чего от него ожидать.</p>
<h2>Заполненная пустота.</h2>
<p>Пустым, является такое состояние, при котором не имеется данных, например когда кто-то использует приложение в первый раз. Как дизайнеры, мы тратим много времени на то, чтобы представить содержимое, и слишком часто забываем, что порой содержимого не бывает.<br />
Крайне важно правильно представить отсутствие информации. Так как такое состояние, зачастую, первое что видит пользователь, то что создает первое впечатление о приложении, и возможно определяет вероятность дальнейшего его использования.<br />
Неплохо в таких ситуациях указывать какие первые шаги может сделать пользователь приложения.</p>
<p style="text-align: center;"><img class="size-full wp-image-637 aligncenter" title="versions" src="http://wiki.dodex.org/wp-content/uploads/2009/10/versions.gif" alt="versions" width="498" height="452" /></p>
<p>Люди работавшие над Versions (клиент Subversion для Mac), очевидно думали над этой проблемой. Приложение акцентирует внимание на двух основных действиях, которые может совершить пользователь используя клиент в первый раз.</p>
<p>Стоит повторить: не забывайте о ситуации с отсутствием содержимого!</p>
<h2>Примеры.</h2>
<p>Итак мы рассмотрели различные способы уменьшея сложножни интерфеса, ниже несколько реальных примеров.</p>
<p>Invoice Machine &#8211; это минимализм в интерфейсе в его лучшем виде. Приложение уделяет внимание деталям, а не словам.</p>
<p><img class="alignnone size-full wp-image-628" title="invoicemachine" src="http://wiki.dodex.org/wp-content/uploads/2009/10/invoicemachine.jpg" alt="invoicemachine" width="435" height="290" /></p>
<p>С Freckle так и хочется отслеживать расход своего времени. Удобный интерфейс с яркими цветами, превращает обычную задачу во что интересное.</p>
<p><img class="alignnone size-full wp-image-626" title="freckle" src="http://wiki.dodex.org/wp-content/uploads/2009/10/freckle.jpg" alt="freckle" width="435" height="290" /></p>
<p>Image Spark сочетает в себе черно-белые градиенты с элегантной типографикой. Интерфейс имеет несколько элементов управления, позволяющих с легкостью работать с приложением.</p>
<p><img class="alignnone size-full wp-image-627" title="imagespark" src="http://wiki.dodex.org/wp-content/uploads/2009/10/imagespark.jpg" alt="imagespark" width="435" height="290" /></p>
<p>У Ballpark четкие элементы управления и незагроможденный интерфейс.</p>
<p><img class="alignnone size-full wp-image-622" title="ballpark" src="http://wiki.dodex.org/wp-content/uploads/2009/10/ballpark.jpg" alt="ballpark" width="435" height="290" /></p>
<p>Krop, по сути, состоит из двух полей. Он позволяет буквально за пять секунд найти нужное объявление.</p>
<p><img class="alignnone size-full wp-image-629" title="krop" src="http://wiki.dodex.org/wp-content/uploads/2009/10/krop.jpg" alt="krop" width="435" height="290" /></p>
<p>Fever’s, в целом, создан для уменьшения барьера между вами и и интересными вам постами в блоге. Выполняет он эту задачу с помощью простого и уникального интерфейса.</p>
<p><img class="alignnone size-full wp-image-625" title="feedfever" src="http://wiki.dodex.org/wp-content/uploads/2009/10/feedfever.jpg" alt="feedfever" width="435" height="290" /></p>
<p>Screenr является очень удобным приложением для записи скринкастов и дальнейшим размещении их на Twitter.</p>
<p><img class="alignnone size-full wp-image-630" title="screenr" src="http://wiki.dodex.org/wp-content/uploads/2009/10/screenr.jpg" alt="screenr" width="435" height="290" /></p>
<p>Squarespace проделал огромную работу по уменьшению сложности. Несмотря на то, что приложение является полнофункциональной издательской платформой, вся ее мощь скрыта за простым и понятным интерфейсом.</p>
<p><img class="alignnone size-full wp-image-632" title="squaredspace" src="http://wiki.dodex.org/wp-content/uploads/2009/10/squaredspace.jpg" alt="squaredspace" width="435" height="290" /></p>
<h2>В заключение.</h2>
<p>Во-первых уменьшайте сложность за счет устранения лишнего функционала, а то что не сможете устранить &#8211; спрячте. Во вторых уменьшайте сложность восприятия путем сведения к минимуму зашумленности и повторного использования элементов. И наконец не забывайте о ситуации отсутсвием контента.<br />
Сведение сложности к минимуму, позволит пользователям быстрее ознакомиться с вашим приложением, использовать его более эффективно и при этом оставаться  довольными. Как сказал джазовый музыкант Чарли Мингус: &#8220;Сделать из простого сложное &#8211; обычное дело, а сделать сложное простым &#8211; творчество&#8221;.</p>
<p>Оригинал статьи взят с: <a title="http://www.smashingmagazine.com/2009/10/07/minimizing-complexity-in-user-interfaces/" href="http://www.smashingmagazine.com/2009/10/07/minimizing-complexity-in-user-interfaces/" target="_blank">http://www.smashingmagazine.com/2009/10/07/minimizing-complexity-in-user-interfaces/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wiki.dodex.org/2009/10/25/minimizing-complexity-in-user-interfaces/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XEN в CentOS</title>
		<link>http://wiki.dodex.org/2009/10/18/xen-%d0%b2-centos/</link>
		<comments>http://wiki.dodex.org/2009/10/18/xen-%d0%b2-centos/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 11:56:17 +0000</pubDate>
		<dc:creator>shad</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Операционные системы]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[qemu]]></category>
		<category><![CDATA[XEN]]></category>

		<guid isPermaLink="false">http://wiki.dodex.org/?p=603</guid>
		<description><![CDATA[В общих чертах про установку XEN и вирутальных машин под CentOS.
Начнем с того, поддерживает ли процессор виртуализацию:
если у Вас Интел (VT-x), то
# grep -i vmx /proc/cpuinfo
если АМД (SVM), то
# grep -i svm /proc/cpuinfo

ну и наконец, на предмет HVM, уже после того как загрузились с ядром XEN
# grep -i hvm /sys/hypervisor/properties/capabilities
Если поддержка есть, то можно использовать [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-592" title="tux-3" src="http://wiki.dodex.org/wp-content/uploads/2009/08/tux-3.png" alt="tux-3" width="100" height="111" />В общих чертах про установку XEN и вирутальных машин под CentOS.<br />
Начнем с того, поддерживает ли процессор виртуализацию:<br />
если у Вас Интел (VT-x), то<br />
# <em>grep -i vmx /proc/cpuinfo</em><br />
если АМД (SVM), то<br />
# <em>grep -i svm /proc/cpuinfo</em></p>
<p><em></em><span id="more-603"></span><br />
ну и наконец, на предмет HVM, уже после того как загрузились с ядром XEN<br />
# <em>grep -i hvm /sys/hypervisor/properties/capabilities</em></p>
<p><span style="background-color: #ffffff;">Если поддержка есть, то можно использовать полноценную виртуализацию, если нет, не отчаивайтесь, можно использовать паравиртуализацию.</span></p>
<p>И так, приступим.</p>
<p>Устанавливаем XEN-новское ядро и сам XEN<br />
# <em>yum install kernel-xen xen</em></p>
<p>правим /boot/grub/menu.lst на предмет того, чтоб грузилось именно XEN-новское ядро (можно и руками конечно выбрать при загрузке).</p>
<p>ставим всю группу виртуализации (необязательно)<br />
# <em>yum groupinstall &#8220;Virtualization&#8221;</em></p>
<p>ставим QEMU<br />
# <em>yum install qemu</em></p>
<p>перезагружаемся с новым ядром. при выводе uname -r, должны получить примерно такое 2.6.18-164.el5xen.</p>
<blockquote>
<pre>теперь посмотрим <em>xm list</em> , получим следующее:
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     1398     2 r-----   1048.5</pre>
</blockquote>
<p>Создадим папку для имеджей виртуальных машин<br />
#<em> mkdir /vm</em><br />
Можно использовать не файлы имиджей , а LVM тома.</p>
<p>Теперь можно переходить к установке виртуальной машины. Сначала будем устанавливать машину с CentOS в режиме паравиртуализации. Установка будет по сети.</p>
<p># <em>virt-install</em><br />
и отвечаем на вопросы, примерно так</p>
<p>Would you like a fully virtualized guest (yes or no)? This will allow you to run unmodified operating systems. &lt;&#8211; <span style="color: #0000ff;">no</span> (отказываемся от полной виртуализации)</p>
<p>What is the name of your virtual machine? &lt;&#8211; <span style="color: #0000ff;">v1</span> (имя виртуальной машины) How much RAM should be allocated (in megabytes)? &lt;&#8211; <span style="color: #0000ff;">384</span> (количество памяти)</p>
<p>What would you like to use as the disk (file path)? &lt;&#8211; <span style="color: #0000ff;">/vm/v1.img</span> (файл имиджа на диске или LVM-том)</p>
<p>How large would you like the disk (/vm/v1.img) to be (in gigabytes)? &lt;&#8211; <span style="color: #0000ff;">10</span> (размер диска в Гб)</p>
<p>Would you like to enable graphics support? (yes or no) &lt;&#8211; no (поддержка графического режима) What is the virtual CD image, CD device or install location? &lt;&#8211; <span style="color: #0000ff;">http://mirror.centos.org/centos/5.3/os/i386</span> (откуда собственно будем ставить)</p>
<p>Если нет у вас хороший, то ждать придеться не очень долго, в противном случае запаситесь терпением, заминка на stage2 (чуть больше 100 Мб)</p>
<p>Далее вы попадете в консоль устанавливаемой машины, где начнется установка в текстовом режиме, в псевдографике. Само-собой ставим только минимальный набор, все равно потом обновляться из сети.</p>
<p>Выйти из консоли данной машины можно по <em>Ctrl-]</em>, а попасть обратно</p>
<p># <em>xm console v1</em></p>
<p>Следует заметить, что при такой установке, сетевая карта в создаваемой машине садиться бриджем на ваш первый интерфейс, можно поменять настройки в файле /etc/xen/xend-config.sxp<br />
например , мне нужно было, что б виртуальные машины были бриджом не с eth0, а с eth1, правим параметр<br />
<em> (network-script &#8216;network-bridge netdev=eth1&#8242;) </em></p>
<p>Вообще в этом файле много интересных настроек, так что, внимательно читаем примеры.</p>
<p>После того как машина установилась, перезагружаемся (имею ввиду виртуальную машину), и если вы при установке правильно настроили сеть, можем зайти на нее уже по ssh. В противном случае, заходим в консоль<br />
# <em>xm console v1</em><br />
заходим рутом, настраиваем сеть.</p>
<blockquote>
<pre>#<em> xm list</em>
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     1398     2 r-----   1052.3
v1                                        42      384     2 r-----      2.3</pre>
</blockquote>
<p>Наша машина запущена и работает. Советую посмотреть вывод команды <em>xm -h</em>, тогда вы будете знать как запустить и остановить виртуальную машину :)</p>
<p>В принципе, ничего сложного, все должно получиться без проблем.<br />
Мы установили гостевую машину в режиме паравиртуализации. Теперь приступим к установке машины в режиме полной виртуализации, а это значит, что можно установить даже винду :), но это только в том случае, если ваш процессор поддерживает это (см. начало статьи).</p>
<p>Подготовим iso-образ инсталяционного диска w2k3, положим его в /root/w2k3.iso<br />
Нам понадобиться так же vncviewer (у каждого на свой вкус и цвет). Я настраивал все это на удаленной машине, а на локальной для подключение во vnc использовал Vinagre.<br />
Правим файл /etc/xen/xend-config.sxp на предмет:<br />
(vnc-listen &#8216;0.0.0.0&#8242;) &#8211; чтоб слушало на всех интерфейсах, по дефолту 127.0.0.1<br />
(vncpasswd &#8216;pipec_parol&#8217;) &#8211; пароль<br />
запускаем установку:<br />
# <em>virt-install &#8211;noautoconsole &#8211;cdrom /root/w2k3.iso</em><br />
отвечаем на вопросы:</p>
<pre>Would you like a fully virtualized guest (yes or no)? <span style="background-color: #ffffff;">
This will allow you to run unmodified operating systems. &lt;-- <span style="color: #0000ff;">yes</span> </span></pre>
<pre>What is the name of your virtual machine? &lt;-- <span style="color: #0000ff;">w2k</span> (имя виртуальной машины)
How much RAM should be allocated (in megabytes)? &lt;-- <span style="color: #0000ff;">768</span> (количество памяти)
What would you like to use as the disk (file path)? &lt;-- <span style="color: #0000ff;">/vm/w2k.img</span>
How large would you like the disk (/vm/v1.img) to be (in gigabytes)? &lt;-- <span style="color: #0000ff;">10</span>
Would you like to enable graphics support? (yes or no) &lt;-- <span style="color: #0000ff;">yes</span> (графический режим)</pre>
<p>Начнеться установка. Теперь надо подключиться к этому процесу по vnc. порты назначаються на первый свободный начиная с 5900, можно посмотреть, какой порт слушает родительсткая машина по netstat.</p>
<p>Подключаемся, видем процесс установки, отвечаем на вопросы, разбиваем диск и т.д. Начнеться копирование файлов, после которого будет перезагрузка и &#8230;.. не стоит отчаиваться все ни так уже и плохо, во первых просто поменялся порт vnc на +1 (опять таки посмотреть можно по netstat), во вторых винда сказала, что мля нет диска в cdrom и она не может продолжить установку. Не беда. Останавливаем машину<br />
# <em>xm shutdown w2k</em><br />
правим файл /etc/xen/w2k</p>
<blockquote><p><strong> было</strong>: <em>disk = [ "file:/vm/w2k.img,hda,w", ",hdc:cdrom,r" ]</em><br />
<strong> стало</strong>: <em>disk = [ "file:/vm/w2k.img,hda,w", "file:/root/w2k3.iso,hdc:cdrom,r" ]</em></p></blockquote>
<p>и запускам машину опять<br />
# <em>xm create w2k</em><br />
подключаемся по vnc и продолжаем установку.<br />
После удачной установки, настраиваем сеть, ставим на винду радмин или разрешаем терминальный доступ, кому как удобно. Выключаем машину. Возвращаем на место:</p>
<blockquote><p><strong> было</strong>: <em>disk = [ "file:/vm/w2k.img,hda,w", "file:/root/w2k3.iso,hdc:cdrom,r" ]</em> &#8211;  вы теперь занете как подключить к винде iso-образ<br />
<strong> стало</strong>: <em>disk = [ "file:/vm/w2k.img,hda,w", ",hdc:cdrom,r" ]</em></p></blockquote>
<p><em></em>комментируем<br />
# <em>vnc = 1</em><br />
# <em>vncunused = 1</em><br />
нам не понадобиться больше vnc<br />
Запускаем машину<br />
# <em>xm create w2k</em><br />
Подключаемся к ней терминалкой или радмином.<br />
Чтоб виртуальные машины автоматически загружались, при загрузке родительской, создаем символические ссылки:</p>
<blockquote><p>#<em> ln -s /etc/xen/w2k /etc/xen/auto/<br />
<span style="font-style: normal;"># </span>ln -s /etc/xen/v1 /etc/xen/auto/</em></p></blockquote>
<p>Вот и все. Удачи в настройках.<br />
© shadow_alone</p>
]]></content:encoded>
			<wfw:commentRss>http://wiki.dodex.org/2009/10/18/xen-%d0%b2-centos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Полезные классы PHP</title>
		<link>http://wiki.dodex.org/2009/10/08/%d0%bf%d0%be%d0%bb%d0%b5%d0%b7%d0%bd%d1%8b%d0%b5-%d0%ba%d0%bb%d0%b0%d1%81%d1%81%d1%8b-php/</link>
		<comments>http://wiki.dodex.org/2009/10/08/%d0%bf%d0%be%d0%bb%d0%b5%d0%b7%d0%bd%d1%8b%d0%b5-%d0%ba%d0%bb%d0%b0%d1%81%d1%81%d1%8b-php/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 08:14:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[классы]]></category>
		<category><![CDATA[полезность]]></category>
		<category><![CDATA[скрипты]]></category>

		<guid isPermaLink="false">http://wiki.dodex.org/?p=600</guid>
		<description><![CDATA[Ниже перечислен список, с кратким описанием, PHP-классов, которые облегчат работу разработчика в той или иной сфере.

В данной статье, я &#8211; это не я, а реальный автор, ссылка на которого в конце поста. Хотя во многом я с ним согласен.
PHP PSD Reader

Несколько недель назад, я написал статью о этом PHP-скрипте, который позволяет вам отображать любой PSD-файл [...]]]></description>
			<content:encoded><![CDATA[<p>Ниже перечислен список, с кратким описанием, PHP-классов, которые облегчат работу разработчика в той или иной сфере.</p>
<p><span id="more-600"></span></p>
<p><em>В данной статье, я &#8211; это не я, а реальный автор, ссылка на которого в конце поста.</em> <em>Хотя во многом я с ним согласен</em>.</p>
<h2>PHP PSD Reader</h2>
<p><!-- BODY { FONT-FAMILY:Tahoma; FONT-SIZE:10pt } P { FONT-FAMILY:Tahoma; FONT-SIZE:10pt } DIV { FONT-FAMILY:Tahoma; FONT-SIZE:10pt } TD { FONT-FAMILY:Tahoma; FONT-SIZE:10pt } --></p>
<p>Несколько недель назад, я написал статью о этом PHP-скрипте, который позволяет вам отображать любой PSD-файл на экране. Очень полезный для создания превьюшек PSD созданных для ваших клиентов, например. Этот класс может быть использован для открытия изображений формата Photoshop PSD. Он создает GD труколор изображение и рендерит на него изображение из PSD. Функция agecreatefrompsd() предоставлена для упрощения создания изображений из PSD.<br />
<a title="http://www.phpclasses.org/browse/package/3627.html" href="http://www.phpclasses.org/browse/package/3627.html" target="_blank">http://www.phpclasses.org/browse/package/3627.html</a></p>
<h2>Browser detect</h2>
<p>Одна из наиболее частых (и скучных) проблем для разработчиков фронт-энда это кросс-браузерная совместимость. Данный PHP-класс определит любой браузер и упростит вашу работу связанную с кросс-браузерностью.<br />
<a title="http://www.phpclasses.org/browse/package/2827.html" href="http://www.phpclasses.org/browse/package/2827.html" target="_blank">http://www.phpclasses.org/browse/package/2827.html</a></p>
<h2>Akismet</h2>
<p>Помните денечки без спама? Если ваш сайт атакуют спамеры, Akismet вероятно сможет помочь. При получении нового комментария, трекбяка, или пингбяка, появляющихся на вашем сайте, они отправляются веб-сервису Akismet, который запускает сотни тестов и отвечает вам: добро или нет, т.е. является ли текст спамом или нет.<br />
<a title="http://phpclasses.linuxpourtous.com/browse/package/4401.html" href="http://phpclasses.linuxpourtous.com/browse/package/4401.html" target="_blank">http://phpclasses.linuxpourtous.com/browse/package/4401.html</a></p>
<h2>ADOdb</h2>
<p>Огрромное количество сайтов и веб-приложений используют базы данных для храния различных типов данных. ADOdb это библиотека для PHP, абстрагирующая разработчика от конкретной реализации базы данных, поддерживающая MySQL, PostgreSQL, Interbase, Firebird, Oracle, MS SQL и другие СУБД. ADOdb очень прост в изучении, и имеет ряд других приятных особенностей таких как широкая поддержка переносимости, скорость, BSD-лицензирование.<br />
<a title="http://adodb.sourceforge.net/" href="http://adodb.sourceforge.net/" target="_blank">http://adodb.sourceforge.net/</a></p>
<h2>HTML Purifier</h2>
<p>Как говорит его название, HTML Purifier &#8211; это PHP- класс созданный для помощи в написании &#8220;красивого&#8221; кода. HTML Purifier может удалять вредоносный код и гарантирует соответсвие вашего кода стандартам. Хороший интсрумент для любого разработчика<br />
<a title="http://htmlpurifier.org/" href="http://htmlpurifier.org/" target="_blank">http://htmlpurifier.org/</a></p>
<h2>Google charts API</h2>
<p>Графики очень нужны и часто требуются клиентам, но на создание их требуется уйма времени. Помню как несколько лет назад я и мой друг создавали графики каждую неделю на фотошопе, для одного из его клиентов. Эти времена ушли навсегда. С Google charts API, простой график может быть создан и отображен на экране используя всего 4 строчки кода.<br />
<a title="http://luddep.se/notebook/2008/04/13/charts-php-and-google-charts-api/" href="http://luddep.se/notebook/2008/04/13/charts-php-and-google-charts-api/" target="_blank">http://luddep.se/notebook/2008/04/13/charts-php-and-google-charts-api/</a></p>
<h2>pChart</h2>
<p>pChart &#8211; это другой класс для создания графиков, и так же хорош как предыдущий. Данные могут быть легко получены SQL-запросами, из CSV-файлов, а могут быть предоставлены вручную.<br />
<a title="http://pchart.sourceforge.net/index.php" href="http://pchart.sourceforge.net/index.php" target="_blank">http://pchart.sourceforge.net/index.php</a></p>
<h2>PHP Excel</h2>
<p>Экзеловские документы очень популярны в корпоративном мире. Учитывая этот факт, имеется высокая вероятность того, что когда нибудь ваш клиент попросит вас создать экзеловский документ в PHP.<br />
К счастью, движек PHP Excel позволяет вам с легкость создавать и манипулировать различными типами файлов, таких как Excel 2007, Open XML, PDF.<br />
<a title="http://www.codeplex.com/PHPExcel" href="http://www.codeplex.com/PHPExcel" target="_blank">http://www.codeplex.com/PHPExcel</a></p>
<h2>Country from IP</h2>
<p>Некоторые сайты могут определить ваше местоположение и автоматически отобразить информацию на вашем языке. Как они делают это? Да очень просто, они используют ваш IP-адрес для определения вашего местонахождения. Класс Country from IP прост в использовании и позволит вам получить информацию о стране исходя из IP-адреса.<br />
<a title="http://phpclasses.linuxpourtous.com/browse/package/2363.html" href="http://phpclasses.linuxpourtous.com/browse/package/2363.html" target="_blank">http://phpclasses.linuxpourtous.com/browse/package/2363.html</a></p>
<h2>Cache Manager</h2>
<p>Если вы работаете над высоконагруженным сайтом, то несомненно вам требуется кешировать файлы, для увеличения производительности. Это очень легко сделать используя данный класс. Одназначто маст-хяв, на мой взгляд.<br />
<a title="http://phpclasses.linuxpourtous.com/browse/package/2860.html" href="http://phpclasses.linuxpourtous.com/browse/package/2860.html" target="_blank">http://phpclasses.linuxpourtous.com/browse/package/2860.html</a></p>
<h2>WPGet</h2>
<p>Насколько я знаю, у многих из вас имеется WordPress-блог, и я просто не могу закончить статью не рассмотрев отличный инструмент для нашего любимого блогового движка. WPGet это PHP-класс который позволит вам с легкостью получать информацию из базы даныых ВордПресса 2.Х. Иначе говоря, он позволяет вам получать посты, комменты, и др. инфу из ВордПресс-блога, на не ВордПресс сайте. Великолепно, не так ли?<br />
<a title="http://phpclasses.linuxpourtous.com/browse/package/3328.html" href="http://phpclasses.linuxpourtous.com/browse/package/3328.html" target="_blank">http://phpclasses.linuxpourtous.com/browse/package/3328.html</a></p>
<p>Ссылка на оригинал статьи: <a title="http://www.catswhocode.com/blog/10-extremely-useful-php-classes" href="http://www.catswhocode.com/blog/10-extremely-useful-php-classes" target="_blank">http://www.catswhocode.com/blog/10-extremely-useful-php-classes</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wiki.dodex.org/2009/10/08/%d0%bf%d0%be%d0%bb%d0%b5%d0%b7%d0%bd%d1%8b%d0%b5-%d0%ba%d0%bb%d0%b0%d1%81%d1%81%d1%8b-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Горячие клавиши в вебе, давайте обсудим.</title>
		<link>http://wiki.dodex.org/2009/10/08/%d0%b3%d0%be%d1%80%d1%8f%d1%87%d0%b8%d0%b5-%d0%ba%d0%bb%d0%b0%d0%b2%d0%b8%d1%88%d0%b8-%d0%b2-%d0%b2%d0%b5%d0%b1%d0%b5-%d0%b4%d0%b0%d0%b2%d0%b0%d0%b9%d1%82%d0%b5-%d0%be%d0%b1%d1%81%d1%83%d0%b4%d0%b8/</link>
		<comments>http://wiki.dodex.org/2009/10/08/%d0%b3%d0%be%d1%80%d1%8f%d1%87%d0%b8%d0%b5-%d0%ba%d0%bb%d0%b0%d0%b2%d0%b8%d1%88%d0%b8-%d0%b2-%d0%b2%d0%b5%d0%b1%d0%b5-%d0%b4%d0%b0%d0%b2%d0%b0%d0%b9%d1%82%d0%b5-%d0%be%d0%b1%d1%81%d1%83%d0%b4%d0%b8/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 07:49:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Скрипты]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[горячие клавиши]]></category>
		<category><![CDATA[скрипты]]></category>

		<guid isPermaLink="false">http://wiki.dodex.org/?p=596</guid>
		<description><![CDATA[Под катом описывается технология использования горячих клавиш в вашем JavaScript

Одна из важнейших вещей, над которой стоит подумать при реализации горячих клавиш на JavaScript для веб-приложения, это исключить переопределение клавиш предоставляемых клиентским браузером. Представьте себе, что вы используете некое веб-приложение, и вам понадобилось закрыть вкладку надав Ctrl+W, но при этом вкладка не зарывается, а отрабатывает некоторое [...]]]></description>
			<content:encoded><![CDATA[<p>Под катом описывается технология использования горячих клавиш в вашем JavaScript<br />
<span id="more-596"></span></p>
<p>Одна из важнейших вещей, над которой стоит подумать при реализации горячих клавиш на JavaScript для веб-приложения, это исключить переопределение клавиш предоставляемых клиентским браузером. Представьте себе, что вы используете некое веб-приложение, и вам понадобилось закрыть вкладку надав Ctrl+W, но при этом вкладка не зарывается, а отрабатывает некоторое действие приложение, только потому, что разработчик переопределил горячую клавишу используемую вашим браузером. Какая досада. По этой причине рекомендую с осторожностью использовать клавиши Ctrl (Windows) или Cmd (Mac) в ваших приложениях. Вместо некоторых комбинаций можно использовать иные функциональные клавиши, напримр F1.  Вероятно вам известно, что JavaScript имеет множество полезных обработчиков событий. Для горячих клавиш мы будем использовать onkeyup, который позволит выполнить действие при нажатии на клавишу. Нам только требуется сравнить возвращаемое значение от onkeyup с кодом клавиши используемой в какой либо из наших клавиатурных комбинаций. Клавиатурные коды это простые коды состоящие из 2 или 3 цифр. Какждая клавиша клавиатуры имеет свой собственный код. Например код клавиши Ctrl &#8211; 17.</p>
<p>Полная таблица кодов клавиш приведена в конце поста.</p>
<h2>Примеры</h2>
<p>В приведенном ниже примере, мы просто проверяем какая клавиша нажата пользователем. Если это Ctrl + S, функция срабатывает.<br />
Первый код без использования JQuery.</p>
<blockquote>
<pre>var isCtrl = false;
document.onkeyup=function(e) {
    if(e.which == 17) isCtrl=false;
}document.onkeydown=function(e){
    if(e.which == 17) isCtrl=true;
    if(e.which == 83 &amp;&amp; isCtrl == true) {
         alert('Keyboard shortcuts are cool!');
         return false;
    }
}</pre>
</blockquote>
<p>Пример с использованием JQuery фреймворка.</p>
<blockquote>
<pre>var isCtrl = false;$(document).keyup(function (e) {
if(e.which == 17) isCtrl=false;
}).keydown(function (e) {
    if(e.which == 17) isCtrl=true;
    if(e.which == 83 &amp;&amp; isCtrl == true) {
        alert('Keyboard shortcuts + JQuery are even more cool!');
 	return false;
 }
});</pre>
</blockquote>
<p>В этих примерах, мы начинаем с проверки: нажата ли клавиша Ctrl. Если да, то начальное значение переменной isCtrl устанавливается в true. Если Ctrl отпущен, то isCtrl снова становиться false.<br />
После этого мы должны убедиться, что вторая нажатая клавиша &#8211; это S. Так как это комбинация клавишь, мы должны проверить, что isCtrl все еще true.<br />
Если все в порядке, то мы можем запустить функцию и показать наше сообщение. Естейственно, в реальном приложении вы будете использовать более полезную функцию.</p>
<p>Оригинал статьи: <a title="http://www.catswhocode.com/blog/using-keyboard-shortcuts-in-javascript" href="http://www.catswhocode.com/blog/using-keyboard-shortcuts-in-javascript" target="_blank">http://www.catswhocode.com/blog/using-keyboard-shortcuts-in-javascript</a></p>
<h2>Keyboard codes reference</h2>
<table border="0" width="600">
<tbody>
<tr style="text-align: left;">
<th width="200">Key</th>
<th width="400">Keyboard code</th>
</tr>
<tr>
<td>Backspace</td>
<td>8</td>
</tr>
<tr>
<td>Tab</td>
<td>9</td>
</tr>
<tr>
<td>Enter</td>
<td>13</td>
</tr>
<tr>
<td>Shift</td>
<td>16</td>
</tr>
<tr>
<td>Ctrl</td>
<td>17</td>
</tr>
<tr>
<td>Alt</td>
<td>18</td>
</tr>
<tr>
<td>Pause</td>
<td>19</td>
</tr>
<tr>
<td>Capslock</td>
<td>20</td>
</tr>
<tr>
<td>Esc</td>
<td>27</td>
</tr>
<tr>
<td>Page up</td>
<td>33</td>
</tr>
<tr>
<td>Page down</td>
<td>34</td>
</tr>
<tr>
<td>End</td>
<td>35</td>
</tr>
<tr>
<td>Home</td>
<td>36</td>
</tr>
<tr>
<td>Left arrow</td>
<td>37</td>
</tr>
<tr>
<td>Up arrow</td>
<td>38</td>
</tr>
<tr>
<td>Right arrow</td>
<td>39</td>
</tr>
<tr>
<td>Down arrow</td>
<td>40</td>
</tr>
<tr>
<td>Insert</td>
<td>45</td>
</tr>
<tr>
<td>Delete</td>
<td>46</td>
</tr>
<tr>
<td>0</td>
<td>48</td>
</tr>
<tr>
<td>1</td>
<td>49</td>
</tr>
<tr>
<td>2</td>
<td>50</td>
</tr>
<tr>
<td>3</td>
<td>51</td>
</tr>
<tr>
<td>4</td>
<td>52</td>
</tr>
<tr>
<td>5</td>
<td>53</td>
</tr>
<tr>
<td>6</td>
<td>54</td>
</tr>
<tr>
<td>7</td>
<td>55</td>
</tr>
<tr>
<td>8</td>
<td>56</td>
</tr>
<tr>
<td>9</td>
<td>57</td>
</tr>
<tr>
<td>a</td>
<td>65</td>
</tr>
<tr>
<td>b</td>
<td>66</td>
</tr>
<tr>
<td>c</td>
<td>67</td>
</tr>
<tr>
<td>d</td>
<td>68</td>
</tr>
<tr>
<td>e</td>
<td>69</td>
</tr>
<tr>
<td>f</td>
<td>70</td>
</tr>
<tr>
<td>g</td>
<td>71</td>
</tr>
<tr>
<td>h</td>
<td>72</td>
</tr>
<tr>
<td>i</td>
<td>73</td>
</tr>
<tr>
<td>j</td>
<td>74</td>
</tr>
<tr>
<td>k</td>
<td>75</td>
</tr>
<tr>
<td>l</td>
<td>76</td>
</tr>
<tr>
<td>m</td>
<td>77</td>
</tr>
<tr>
<td>n</td>
<td>78</td>
</tr>
<tr>
<td>o</td>
<td>79</td>
</tr>
<tr>
<td>p</td>
<td>80</td>
</tr>
<tr>
<td>q</td>
<td>81</td>
</tr>
<tr>
<td>r</td>
<td>82</td>
</tr>
<tr>
<td>s</td>
<td>83</td>
</tr>
<tr>
<td>t</td>
<td>84</td>
</tr>
<tr>
<td>u</td>
<td>85</td>
</tr>
<tr>
<td>v</td>
<td>86</td>
</tr>
<tr>
<td>w</td>
<td>87</td>
</tr>
<tr>
<td>x</td>
<td>88</td>
</tr>
<tr>
<td>y</td>
<td>89</td>
</tr>
<tr>
<td>z</td>
<td>90</td>
</tr>
<tr>
<td>0 (numpad)</td>
<td>96</td>
</tr>
<tr>
<td>1 (numpad)</td>
<td>97</td>
</tr>
<tr>
<td>2 (numpad)</td>
<td>98</td>
</tr>
<tr>
<td>3 (numpad)</td>
<td>99</td>
</tr>
<tr>
<td>4 (numpad)</td>
<td>100</td>
</tr>
<tr>
<td>5 (numpad)</td>
<td>101</td>
</tr>
<tr>
<td>6 (numpad)</td>
<td>102</td>
</tr>
<tr>
<td>7 (numpad)</td>
<td>103</td>
</tr>
<tr>
<td>8 (numpad)</td>
<td>104</td>
</tr>
<tr>
<td>9 (numpad)</td>
<td>105</td>
</tr>
<tr>
<td>*</td>
<td>106</td>
</tr>
<tr>
<td>+</td>
<td>107</td>
</tr>
<tr>
<td>-</td>
<td>109</td>
</tr>
<tr>
<td>.</td>
<td>110</td>
</tr>
<tr>
<td>/</td>
<td>111</td>
</tr>
<tr>
<td>F1</td>
<td>112</td>
</tr>
<tr>
<td>F2</td>
<td>113</td>
</tr>
<tr>
<td>F3</td>
<td>114</td>
</tr>
<tr>
<td>F4</td>
<td>115</td>
</tr>
<tr>
<td>F5</td>
<td>116</td>
</tr>
<tr>
<td>F6</td>
<td>117</td>
</tr>
<tr>
<td>F7</td>
<td>118</td>
</tr>
<tr>
<td>F8</td>
<td>119</td>
</tr>
<tr>
<td>F9</td>
<td>120</td>
</tr>
<tr>
<td>F10</td>
<td>121</td>
</tr>
<tr>
<td>F11</td>
<td>122</td>
</tr>
<tr>
<td>F12</td>
<td>123</td>
</tr>
<tr>
<td>=</td>
<td>187</td>
</tr>
<tr>
<td>Coma</td>
<td>188</td>
</tr>
<tr>
<td>Slash /</td>
<td>191</td>
</tr>
<tr>
<td>Backslash \</td>
<td>220</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://wiki.dodex.org/2009/10/08/%d0%b3%d0%be%d1%80%d1%8f%d1%87%d0%b8%d0%b5-%d0%ba%d0%bb%d0%b0%d0%b2%d0%b8%d1%88%d0%b8-%d0%b2-%d0%b2%d0%b5%d0%b1%d0%b5-%d0%b4%d0%b0%d0%b2%d0%b0%d0%b9%d1%82%d0%b5-%d0%be%d0%b1%d1%81%d1%83%d0%b4%d0%b8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
