<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Заметки одного программиста</title>
	
	<link>http://olezhek.net</link>
	<description />
	<lastBuildDate>Tue, 07 Sep 2010 17:21:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/olezhek/feed" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="olezhek/feed" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">olezhek/feed</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Twitter обновил API</title>
		<link>http://olezhek.net/2010-09-03-twitter-obnovil-api.html</link>
		<comments>http://olezhek.net/2010-09-03-twitter-obnovil-api.html#comments</comments>
		<pubDate>Fri, 03 Sep 2010 08:56:06 +0000</pubDate>
		<dc:creator>Олег</dc:creator>
				<category><![CDATA[Интернет]]></category>
		<category><![CDATA[Технологии Веб]]></category>
		<category><![CDATA[HTC]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[Peep]]></category>
		<category><![CDATA[Seesmic]]></category>
		<category><![CDATA[t.co]]></category>
		<category><![CDATA[Tattoo]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://olezhek.net/?p=800</guid>
		<description><![CDATA[Вчера разработчики Twitter сделали два существенных обновления. Во-первых, теперь все приложения могут соединяться только посредством OAuth &#8211; новой системы авторизации. Благодаря ей, приложения больше не будут запоминать ваш логин и пароль, что, по идее, делает аккаунт более безопасным. Второе обновление &#8211; теперь по умолчанию используется собственный &#8220;сокращатор&#8221; ссылок t.co. Если со вторым все просто, то [...]]]></description>
			<content:encoded><![CDATA[<p>Вчера разработчики Twitter сделали два существенных обновления. Во-первых, теперь все приложения могут соединяться только посредством OAuth &#8211; новой системы авторизации. Благодаря ей, приложения больше не будут запоминать ваш логин и пароль, что, по идее, делает аккаунт более безопасным. Второе обновление &#8211; теперь по умолчанию используется собственный &#8220;сокращатор&#8221; ссылок <noindex><a rel="nofollow" title="t.co" href="http://olezhek.net/jexr/aHR0cDovL3QuY28=" target="_blank">t.co</a></noindex>. Если со вторым все просто, то с первым &#8211; не очень. После обновления вчера перестали работать некоторые twitter-клиенты. Прежде чем понять, что дело в программе, а не в проблемах сети (а сидел я почти в бункере и писал твит на своем Tattoo), я успел &#8220;отправить&#8221; два твита через HTC Peep. Программа &#8220;сказала&#8221; мне, что твит отправлен, но отказалась загружать список твитов и после повторного запроса, и после выхода на улицу из здания. Я запустил Seesmic, вот он и обратил мое внимание на эти апдейты, ругнувшись ошибкой авторизации. Должен отметить, что разработчики Seesmic очень быстро подсуетились вчера &#8211; после ошибки авторизации я заскочил на Market и увидел, что для Seesmic уже есть апдейт. Правда, после его установки мне пришлось удалить и по новой ввести свои данные в программу. Немного неудобно, ну да ладно &#8211; главное, что оно работает. А вот Peep пока не обновился, и потому безхозен. Буду ждать апдейта <img src='http://olezhek.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  .</p>
<p>Кстати, мне, как владельцу аккаунта на twitter, на почту пришло письмо с информацией об обновлениях &#8211; настоящий трактат:<br />
<fieldset class="spoiler">
			<legend>
				<input type="button" onclick="tiny_spoiler('Update:TwitterAppsandYouhydsnjrqgq')" id="Update:TwitterAppsandYouhydsnjrqgq_button" value="+" />
				Update: Twitter Apps and You
			</legend>
			<div id="Update:TwitterAppsandYouhydsnjrqgq">Hi @ru_tingol,</p>
<p>Over the coming weeks, we will be making two important updates that will impact how you interact with Twitter applications. We are sending this notice to all Twitter users to make sure you are aware of these changes.</p>
<p>What are applications?</p>
<p>There are over 250,000 applications built using the Twitter API. To use most applications, you first authorize the application to access your Twitter account, after which you can use it to read and post Tweets, discover new users and more. Applications come in many varieties, including desktop applications like TweetDeck, Seesmic, or EchoFon, websites such as TweetMeme, fflick, or Topsy, or mobile applications such as Twitter for iPhone, Twitter for Blackberry, or Foursquare.</p>
<p>Update 1: New authorization rules for applications</p>
<p>Starting August 31, all applications will be required to use “OAuth” to access your Twitter account.</p>
<p>What&#8217;s OAuth?</p>
<p>OAuth is a technology that enables applications to access Twitter on your behalf with your approval without asking you directly for your password.<br />
Desktop and mobile applications may still ask for your password once, but after that request, they are required to use OAuth in order to access your timeline or allow you to tweet.<br />
What does this mean for me?</p>
<p>Applications are no longer allowed to store your password.<br />
If you change your password, the applications will continue to work.<br />
Some applications you have been using may require you to reauthorize them or may stop functioning at the time of this change.<br />
All applications you have authorized will be listed at http://twitter.com/settings/connections.<br />
You can revoke access to any application at any time from the list.<br />
Update 2: t.co URL wrapping</p>
<p>In the coming weeks, we will be expanding the roll-out of our link wrapping service t.co, which wraps links in Tweets with a new, simplified link. Wrapped links are displayed in a way that is easier to read, with the actual domain and part of the URL showing, so that you know what you are clicking on. When you click on a wrapped link, your request will pass through the Twitter service to check if the destination site is known to contain malware, and we then will forward you on to the destination URL. All of that should happen in an instant.</p>
<p>You will start seeing these links on certain accounts that have opted-in to the service; we expect to roll this out to all users by the end of the year. When this happens, all links shared on Twitter.com or third-party apps will be wrapped with a t.co URL.</p>
<p>What does this mean for me?</p>
<p>A really long link such as http://www.amazon.com/Delivering-Happiness-Profits-Passion-Purpose/dp/0446563048 might be wrapped as http://t.co/DRo0trj for display on SMS, but it could be displayed to web or application users as amazon.com/Delivering- or as the whole URL or page title.<br />
You will start seeing links in a way that removes the obscurity of shortened links and lets you know where each link will take you.<br />
When you click on these links from Twitter.com or a Twitter application, Twitter will log that click. We hope to use this data to provide better and more relevant content to you over time.<br />
Thanks for reading this important update. Come and check what&#8217;s new at http://twitter.com.</p>
<p>Thanks,<br />
The Twitter Team
			</div>
		</fieldset></p>
<p>P.S.: Если у вас есть twitter-аккаунт &#8211; <a href="http://twitter.com/ru_tingol">присоединяйтесь</a> <img src='http://olezhek.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://olezhek.net/2010-09-03-twitter-obnovil-api.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>S.M.A.R.T. в Linux</title>
		<link>http://olezhek.net/2010-08-30-s-m-a-r-t-v-linux.html</link>
		<comments>http://olezhek.net/2010-08-30-s-m-a-r-t-v-linux.html#comments</comments>
		<pubDate>Mon, 30 Aug 2010 11:22:09 +0000</pubDate>
		<dc:creator>Олег</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[S.M.A.R.T.]]></category>

		<guid isPermaLink="false">http://olezhek.net/?p=794</guid>
		<description><![CDATA[Рано или поздно появляется необходимость следить за состоянием оборудования компьютера. Самая &#8220;слабая&#8221; железка в нем, как известно, жесткий диск. Для мониторинга состояния жесткого диска используются данные S.M.A.R.T. &#8211; технологии оценки состояния и диагностики жесткого диска. По хорошему, S.M.A.R.T. &#8211; нечто вроде гадания на кофейной гуще &#8211; вроде бы предсказывает, но не всегда и сбывается. Тем [...]]]></description>
			<content:encoded><![CDATA[<p>Рано или поздно появляется необходимость следить за состоянием оборудования компьютера. Самая &#8220;слабая&#8221; железка в нем, как известно, жесткий диск. Для мониторинга состояния жесткого диска используются данные S.M.A.R.T. &#8211; технологии оценки состояния и диагностики жесткого диска. По хорошему, S.M.A.R.T. &#8211; нечто вроде гадания на кофейной гуще &#8211; вроде бы предсказывает, но не всегда и сбывается. Тем не менее, наличие этой технологии в жестком диске все же лучше чем ее отсутствие &#8211; с ней, хоть и приблизительно, но все-таки можно узнать, что происходит с жестким диском. Когда дело касается не просто домашней файлопомойки с фильмами, а боевого сервера, на котором крутится нечто, приносящее деньги или доходы иного рода, размышления о точности SMART сходят на &#8220;нет&#8221;, и, для его мониторинга, на систему без разговоров &#8220;накатывается&#8221; соответствующий софт. О нем и поговорим.</p>
<p><span id="more-794"></span></p>
<p>Подробнее о S.M.A.R.T. вы можете посмотреть на <noindex><a rel="nofollow" title="http://olezhek.net/jexr/aHR0cDovL3J1Lndpa2lwZWRpYS5vcmcvd2lraS/QotC10YXQvdC+0LvQvtCz0LjRj19TTUFSVA==" href="http://olezhek.net/jexr/aHR0cDovL3J1Lndpa2lwZWRpYS5vcmcvd2lraS/QotC10YXQvdC+0LvQvtCz0LjRj19TTUFSVA==" target="_blank">википедии</a></noindex>, я заострю внимание на ПО для Linux, как одной из наиболее популярных серверных ОС.</p>
<p>Для чтения данных S.M.A.R.T. в Linux (и, кстати, в BSD тоже) предусмотрен набор инструментов под названием smartmontools. В Ubuntu он доступен из стандартных репозиториев. Устанавливаем:</p>
<pre># aptitude install smartmontools</pre>
<p>После установки необходимо узнать, доступен ли SMART на интересующем устройстве. Допустим, это /dev/sda:</p>
<pre># smartctl -i /dev/sda</pre>
<p>Параметр -i выводит информацию по указанному вслед за ним устройству. В этой информации можно узнать, поддерживает ли S.M.A.R.T. устройство, и если да, то также можно узнать, включен S.M.A.R.T. или нет:</p>
<p><a href="http://olezhek.net/wp-content/uploads/2010/08/smartctl-i.png"><img class="aligncenter size-medium wp-image-795" title="smartctl -i /dev/sda" src="http://olezhek.net/wp-content/uploads/2010/08/smartctl-i-500x260.png" alt="" width="500" height="260" /></a></p>
<p>Для управления работой S.M.A.R.T. можно делать так:</p>
<pre># smartctl -s on /dev/sda</pre>
<p>для включения, и</p>
<pre># smartctl -s off /dev/sda</pre>
<p>для выключения.</p>
<p>Для вывода полной информации по устройству можно скомандовать так:</p>
<pre># smartctl -a /dev/sda</pre>
<p>На выходе я получил много-много статистики по своему жесткому диску:</p>
<p><a href="http://olezhek.net/wp-content/uploads/2010/08/smartctl-a-dev-sda.png"><img class="aligncenter size-medium wp-image-797" title="smartctl -a /dev/sda" src="http://olezhek.net/wp-content/uploads/2010/08/smartctl-a-dev-sda-500x293.png" alt="" width="500" height="293" /></a></p>
<p>На самом деле её гораздо больше, я просто показал скриншот с самой &#8220;злободневной&#8221; информацией &#8211; эти значения могут дать вам представление о том, когда может сдохнуть жесткий диск. Однако, следует помнить о том, что выход некоторых значений за рамки заводских не всегда означает, что винту капец &#8211; единичные сбои случаются и с вполне исправным оборудованием. Так что рекомендую почитать поподробнее про саму технологию S.M.A.R.T. На деле, -a &#8211; параметр, который эквивалентен набору &#8220;-H -i -c -A -l error -l selftest -l selective&#8221; для ATA-дисков, и &#8220;-H -i -A -l error -l selftest&#8221; для SCSI-дисков (взято из man). Параметр -H выдает текущий статус устройства, составленный на основе различных тестов. -i &#8211; уже известный параметр, выдающий информацию об устройстве. -c &#8211; выдает только основные атрибуты S.M.A.R.T. &#8211; разные производители могут добавлять или убирать какие-либо атрибуты в S.M.A.R.T. -A &#8211; выдает информацию по специфическим для производителя атрибутам S.M.A.R.T. -l &#8211; выдает информацию из логов различных тестов. Для этого параметра необходимо указать значение &#8211; лог какого теста выводить.</p>
<p>Утилита smartctl хороша еще и тем, что при её помощи можно прогонять тесты жестких дисков. Однако, тут есть ограничение &#8211; единовременно можно прогонять только один тест. Для немедленного запуска теста есть параметр -t, после которого необходимо указать значение, характеризующее тест. Возможные значения &#8211; offline; short; long; conveyance; select,&lt;START_LBA&gt; &#8211; &lt;END_LBA&gt;; select,&lt;START_LBA&gt;+&lt;SIZE&gt;. Все виды тестов могут быть проведены при штатной работе устройства. Однако, и тут есть оговорки, и, <strong>поскольку ответственность за функционирование устройств и целостность хранящихся на них данных лежит только на вас, настоятельно рекомендую почитать man smartctl перед запуском тестов</strong>. Последние два теста (select &#8211; SMART Selective Self Test &#8211; тестирование определенного количества логических блоков устройства) принимают параметры &#8211; &lt;START_LBA&gt;, &lt;END_LBA&gt;, &lt;SIZE&gt;: соответственно адрес логического блока, с которого начинать, адрес логического блока, на котором заканчивать, количество блоков, которое тестировать. Использовать, например, так:</p>
<pre># smartctl -t offline -t select,0-100 /dev/sda</pre>
<p>В этой команде я указал утилите прогнать offline-тест и selective-тест с нулевого по 100-й блоки. Разумеется, они будут прогнаны последовательно.</p>
<p>Если вы сталкиваетесь с ситуацией, когда находитесь на расстоянии от сервера или терминала, в котором можно посмотреть результаты тестов S.M.A.R.T., можно настроить уведомление об ошибках тестов по электронной почте. Это можно настроить при помощи файла smartd.conf . Подробнее о том, как это сделать, читайте man smartd.conf . Вкратце ситуация обстоит так &#8211; необходимо в этом конфиге создать правило, в соответствии с которым, по расписанию, будет запускаться определенный набор тестов и, в случае возникновения ошибок, на указанный e-mail будет отправляться сообщение.</p>
<p>Вот пример.</p>
<p>Открываю /etc/smartd.conf, пишу там (предположу, что у меня SCSI-диск):</p>
<pre>/dev/sda -d scsi -m somemail@example.com -a -s L/../../1/02</pre>
<p>Что здесь что: -d &#8211; тип диска (ata,scsi и т.д., подробнее в <strong>man smartd.conf</strong>), -m &#8211; отправка сообщения с ошибками по директивам -H, -l, -f, -C, -O . Эти директивы означают различные проверки, кое-что я уже описывал выше в абзаце про smartctl (они аналогичны), кое-что вы можете прочесть в man. -m использует стандартную утилиту mail для отправки письма, таким образом можно указать в качестве получателя root@localhost, и тогда письмо будет отправлено на учетную запись администратора, его можно будет посмотреть при помощи той же утилиты mail. -a &#8211; включает вышеописанные директивы в тест. И последнее &#8211; -s &#8211; параметр, при помощи которого можно указать конкретный тест для прогона в конкретное время. В качестве значения этот параметр принимает регулярку, общая структура ее такова &#8211; T/MM/DD/d/HH , где T &#8211; тип теста (в моем случае &#8211; L &#8211; Long self-test), MM &#8211; месяц (значения от 1 до 12, если цифра у числа меньше 10, перед ней ставится 0, иначе глюки неизбежны), DD &#8211; день (1 &#8211; 31, правила те же, что и для месяца), d &#8211; день недели (1 &#8211; 7, где 1 &#8211; понедельник, 7 &#8211; воскресенье), HH &#8211; час (1 &#8211; 24, правила те же, что и для месяца). Я написал на месте месяца и дня точки &#8211; это своего рода эквивалент &#8216;*&#8217; в crontab-файле. Что получилось: я поставил правило проводить тест Long self-test каждый понедельник в два часа ночи на SCSI-диске /dev/sda с отправкой сообщения на e-mail somemail@example.com в случае возникновения ошибок после проведения теста. Добавлю также, что -m позволяет отправлять сообщение на несколько адресов &#8211; их необходимо указывать через запятую. -m отправляет сообщение единожды (по умолчанию так настроено). В случае, если требуется задать правила отправки сообщений, используется параметр -M . в качестве значений принимает once, daily, diminishing, test, exec. Это, соответственно, однажды (по умолчанию), ежедневно, дополнительные сообщения (интервал в 1, 2, 4 и т. д. дня с момента обнаружения ошибки), немедленная отправка тестового сообщения на указанный ящик для проверки, указание пути к исполняемому файлу утилиты отправки почтовых сообщений (например, exec /bin/mail).</p>
<p>Вернусь к настройке. После конфигурирования smartd.conf открываю /etc/default/smartmontools и раскомментирую (комментарий #) строку</p>
<pre>#start_smartd=yes</pre>
<p>Делаю в консоли</p>
<pre># /etc/init.d/smartmontools start</pre>
<p>Все, smartd запущен. Подчеркну, что все действия производятся из под root (я явно указал # перед текстом с командами для этого), чтобы не пришлось каждый раз набивать sudo перед командой, можно написать так:</p>
<pre>$ sudo -i</pre>
<p>Или, если у вас не установлена утилита sudo, но есть утилита su, вот так:</p>
<pre>$ su</pre>
<p>И ввести пароль. Таким образом вы откроете постоянный сеанс пользователя root внутри своего пользовательского.</p>
<p>Вот и все. Удачного вам мониторинга и количества бэдов, стремящегося к нулю <img src='http://olezhek.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://olezhek.net/2010-08-30-s-m-a-r-t-v-linux.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Сказ о том, как я продлевал домен на majordomo.ru</title>
		<link>http://olezhek.net/2010-08-03-skaz-o-tom-kak-ya-prodleval-domen-na-majordomo-ru.html</link>
		<comments>http://olezhek.net/2010-08-03-skaz-o-tom-kak-ya-prodleval-domen-na-majordomo-ru.html#comments</comments>
		<pubDate>Tue, 03 Aug 2010 19:09:47 +0000</pubDate>
		<dc:creator>Олег</dc:creator>
				<category><![CDATA[Интернет]]></category>
		<category><![CDATA[majordomo]]></category>
		<category><![CDATA[registrant]]></category>
		<category><![CDATA[домен]]></category>
		<category><![CDATA[продление]]></category>

		<guid isPermaLink="false">http://olezhek.net/?p=776</guid>
		<description><![CDATA[Все было бы банально, как и везде, если бы я не регистрировал домен через majordomo. Особенность работы с доменами через majordomo заключается в том, что у них заключен контракт с регистратором REGISTRANT (whois поле registrar &#8211; REGISTRANT-REG-RIPN). Это означает, что вы оплачиваете за домен через посредника (в моем случае &#8211; majordomo) и не можете оплачивать [...]]]></description>
			<content:encoded><![CDATA[<div>Все было бы банально, как и везде, если бы я не регистрировал домен через majordomo. Особенность работы с доменами через majordomo заключается в том, что у них заключен контракт с регистратором REGISTRANT (whois поле registrar &#8211; REGISTRANT-REG-RIPN). Это означает, что вы оплачиваете за домен через посредника (в моем случае &#8211; majordomo) и не можете оплачивать через контрольную панель REGISTRANT. Ситуация для меня осложнилась тем, что, после переезда на нового хостера я, конечно же, не оплачивал ненужные мне более услуги хостинга от majordomo, и (вот ведь какая штука) мой аккаунт они удалили. Доменное имя весьма “вкусное” и поэтому мне не хотелось рисковать его потерей в краткий промежуток времени между окончанием делегирования и новой регистрацией с помощью другого регистратора. Эта интересная принудиловка а-ля majordomo привела к необходимости принятия решения за 1 день до окончания срока делегирования домена.</div>
<div><span id="more-776"></span> Первым делом я обратился к поиску &#8211; может чего в интернете пишут. Я был прав &#8211; на searchengines.ru есть немаленький такой <noindex><a rel="nofollow" title="Топик на серче:Majordomo - отличный хостинг!" href="http://olezhek.net/jexr/aHR0cDovL2ZvcnVtLnNlYXJjaGVuZ2luZXMucnUvc2hvd3RocmVhZC5waHA/dD0yNzczODM=" target="_blank">топик</a></noindex>, посвященный этой проблеме. Я подумал, что наиболее точной информация по теме будет именно у первоисточника, и написал письмо в саппорт (support@majordomo.ru) мажордомо:</div>
<div><a href="http://olezhek.net/wp-content/uploads/2010/08/12.png"><img class="aligncenter size-medium wp-image-777" title="Отправленное письмо" src="http://olezhek.net/wp-content/uploads/2010/08/12-500x137.png" alt="" width="500" height="137" /></a>На него мне достаточно быстро пришел ответ:</div>
<div><a href="http://olezhek.net/wp-content/uploads/2010/08/add0.png"><img class="aligncenter size-medium wp-image-778" title="Письмо в ответ" src="http://olezhek.net/wp-content/uploads/2010/08/add0-500x148.png" alt="" width="500" height="148" /></a>В этом письме содержалось то руководство, которым я и воспользовался. Проблема, на первый взгляд, кроется в выборе тарифа услуг хостинга, без которого аккаунт на majordomo не завести. Однако на данный момент она легко обходится выбором бесплатного тарифа &#8220;Парковка+&#8221;. Его-то я и выбрал. Далее было необходимо добавить домен в аккаунт (Домены-&gt;Добавление/перенос домена):</div>
<div><a href="http://olezhek.net/wp-content/uploads/2010/08/add1.png"><img class="aligncenter size-medium wp-image-779" title="Добавление домена в аккаунт majordomo" src="http://olezhek.net/wp-content/uploads/2010/08/add1-500x235.png" alt="" width="500" height="235" /></a>Нужно вписать свое доменное имя, выбрать зону и пункт &#8220;Отдельный сайт&#8221; и нажать &#8220;Добавить&#8221; (кнопка осталась за пределами изображения)) ). После этого надо подтвердить свою заявку:</div>
<div><img class="aligncenter size-full wp-image-780" title="Подтверждение заявки на добавление домена в аккаунт" src="http://olezhek.net/wp-content/uploads/2010/08/add2.png" alt="" width="448" height="190" />После подтверждения заявки на почтовый адрес, <strong>указанный в whois</strong>, придет сообщение со ссылкой на подтверждение этой операции:</div>
<div><a href="http://olezhek.net/wp-content/uploads/2010/08/add2.5.png"><img class="aligncenter size-medium wp-image-781" title="Письмо со ссылкой на подтверждение о переносе домена на аккаунт" src="http://olezhek.net/wp-content/uploads/2010/08/add2.5-500x173.png" alt="" width="500" height="173" /></a>Я перешел по ссылке, и домен оказался у меня на аккаунте. После этого я пополнил счет аккаунта и написал на billing@majordomo.ru о том, что все ок и что я хочу продлить домен. Billing пнул меня обратно в аккаунт своим письмом <img src='http://olezhek.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  :</div>
<div><a href="http://olezhek.net/wp-content/uploads/2010/08/add4.png"><img class="aligncenter size-medium wp-image-782" title="Ответ от billing@majordomo.ru" src="http://olezhek.net/wp-content/uploads/2010/08/add4-500x80.png" alt="" width="500" height="80" /></a>После письма внезапно появились дополнительные пункты управления доменами (можете сравнить со снимком на 3 выше):</div>
<div><a href="http://olezhek.net/wp-content/uploads/2010/08/add5.png"><img class="aligncenter size-full wp-image-783" title="Новые возможности управления доменами :D" src="http://olezhek.net/wp-content/uploads/2010/08/add5.png" alt="" width="263" height="282" /></a></div>
<div>Вот такую процедуру мне пришлось провизвести, прежде чем продлить домен. Пока самое первое письмо от меня шло к majordomo, я написал отдельное письмо в саппорт Registrant, в котором спросил о том же самом. Вот что мне ответили:</div>
<div><a href="http://olezhek.net/wp-content/uploads/2010/08/add_registrant.png"><img class="aligncenter size-medium wp-image-784" title="Ответ от Registrant" src="http://olezhek.net/wp-content/uploads/2010/08/add_registrant-500x150.png" alt="" width="500" height="150" /></a>Разумеется, я запросил форму, и мне ее прислали. Теперь буду заниматься переносом этого домена, ибо, как говорится, нефиг &#8211; слишком много возни ради того, чтобы <strong>заплатить кому-то</strong>.</div>
<div></div>
<div></div>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://olezhek.net/2010-08-03-skaz-o-tom-kak-ya-prodleval-domen-na-majordomo-ru.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Как я обновлял WordPress с 2.9.2 до 3.0</title>
		<link>http://olezhek.net/2010-07-21-kak-ya-obnovlyal-wordpress-s-2-9-2-do-3-0.html</link>
		<comments>http://olezhek.net/2010-07-21-kak-ya-obnovlyal-wordpress-s-2-9-2-do-3-0.html#comments</comments>
		<pubDate>Wed, 21 Jul 2010 14:20:48 +0000</pubDate>
		<dc:creator>Олег</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[обновление]]></category>

		<guid isPermaLink="false">http://olezhek.net/?p=769</guid>
		<description><![CDATA[Блог, который вы читаете сейчас, изначально был развёрнут на сборке WordPress от mywordpress.ru . Почему именно на этой сборке? Причин тут несколько. Во-первых, эта сборка отличается облегчённым файлом локализации. Использование облегчённой версии ru_RU.mo уменьшает потребление ресурсов во время просмотра страниц блога. Во-вторых, эта сборка содержит пару полезных плагинов: MaxSite Russian Date для отображения дат по [...]]]></description>
			<content:encoded><![CDATA[<p>Блог, который вы читаете сейчас, изначально был развёрнут на сборке WordPress от mywordpress.ru . Почему именно на этой сборке? Причин тут несколько. Во-первых, эта сборка отличается облегчённым файлом локализации. Использование облегчённой версии ru_RU.mo уменьшает потребление ресурсов во время просмотра страниц блога. Во-вторых, эта сборка содержит пару полезных плагинов: <a title="maxsite.org/russian-date" href="http://maxsite.org/russian-date" target="_blank">MaxSite Russian Date</a> для отображения дат по российским стандартам, <noindex><a rel="nofollow" title="http://olezhek.net/jexr/aHR0cDovL215d29yZHByZXNzLnJ1L3BsdWdpbnMvcnVzdG9sYXQv" href="http://olezhek.net/jexr/aHR0cDovL215d29yZHByZXNzLnJ1L3BsdWdpbnMvcnVzdG9sYXQv" target="_blank">RusToLat</a></noindex> для транслитерации русских символов в английские (используется, например, при создании ЧПУ), <noindex><a rel="nofollow" title="http://olezhek.net/jexr/aHR0cDovL3dvcmRwcmVzcy5vcmcvZXh0ZW5kL3BsdWdpbnMvd3Atc3VwZXItY2FjaGUv" href="http://olezhek.net/jexr/aHR0cDovL3dvcmRwcmVzcy5vcmcvZXh0ZW5kL3BsdWdpbnMvd3Atc3VwZXItY2FjaGUv" target="_blank">WP Super Cache</a></noindex> для кэширования (я его не использовал), “<noindex><a rel="nofollow" title="http://olezhek.net/jexr/aHR0cDovL2xlY2FjdHVzLnJ1LzIwMDgvMTEvMjcvMzIzMi8=" href="http://olezhek.net/jexr/aHR0cDovL2xlY2FjdHVzLnJ1LzIwMDgvMTEvMjcvMzIzMi8=" target="_blank">Блокировка запросов на новые версии</a></noindex>” для ускорения работы блога (его я тоже не использовал). Особенностью сборки было то, что она обновлялась со своего сайта, а не с сайта WordPress. Новые версии выходили с небольшим опозданием от основного WordPress. Свежая версия WP &#8211; 3.0 &#8211; вышла уже давненько, но еще не появлялась обновленная сборка от mywordpress.ru, и я решил обновить движок блога руками.<span id="more-769"></span></p>
<p>Для этой процедуры мне понадобился архив с WordPress 3 и много чего от старой сборки. Во-первых, я взял облегченную версию ru_RU.mo, которую положил в /wp-content/languages. Во-вторых, конфиг wp-config.php с настройками. В-третьих, тема блога, которую я перенес на то же самое место, только уже в новой сборке &#8211; /wp-content/themes. В-четвертых, плагины. Все плагины у меня были обновлены, и я их перенес на их законное место в новый движок &#8211; /wp-content/plugins. Скомпоновав всё это дело в одну кучку, я поставил его выгружаться на сервер и пошел пить чаёк <img src='http://olezhek.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  .<br />
Изначально я предполагал, что могут возникнуть проблемы с совместимостью плагинов и готовился к тому, что что-то не будет работать после переноса. Однако, все прошло очень гладко и просто &#8211; WP подхватил настройки и базу и корректно отобразил мой блог. Когда же я обратился к админке WP, то получил вот такое сообщение:</p>
<p><img class="aligncenter size-full wp-image-770" title="Предложение обновить базу данных" src="http://olezhek.net/wp-content/uploads/2010/07/update.png" alt="" width="436" height="155" /></p>
<p>Я нажал на единственную кнопку на странице, и база быстро обновилась, WP впустил меня в админку. Обновление прошло очень легко и беспроблемно, чему я был весьма рад <img src='http://olezhek.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . После небольшого тестирования я убедился, что, вроде бы, все работает отлично. Впрочем, если вы заметили какие-либо косяки на моем сайте, вы можете отправить мне сообщение через форму на этой странице.</p>
]]></content:encoded>
			<wfw:commentRss>http://olezhek.net/2010-07-21-kak-ya-obnovlyal-wordpress-s-2-9-2-do-3-0.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>На меня ссылаются #1</title>
		<link>http://olezhek.net/2010-07-13-na-menya-ssylayutsya-1.html</link>
		<comments>http://olezhek.net/2010-07-13-na-menya-ssylayutsya-1.html#comments</comments>
		<pubDate>Tue, 13 Jul 2010 11:26:51 +0000</pubDate>
		<dc:creator>Олег</dc:creator>
				<category><![CDATA[На меня ссылаются]]></category>

		<guid isPermaLink="false">http://olezhek.net/?p=766</guid>
		<description><![CDATA[Мой блог продолжает свое существование, и, надеюсь, становится более полезным для вас, уважаемые читатели . Я решил создать новую рубрику &#8211; &#8220;На меня ссылаются&#8221;. В этой рубрике я, в качестве благодарности, буду упоминать блоги тех, кто заметил мой блог и порекомендовал своим читателям мои материалы. Итак, я начну эту рубрику с моего тезки Олега Маркарьяна. [...]]]></description>
			<content:encoded><![CDATA[<p>Мой блог продолжает свое существование, и, надеюсь, становится более полезным для вас, уважаемые читатели <img src='http://olezhek.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  .</p>
<p>Я решил создать новую рубрику &#8211; &#8220;На меня ссылаются&#8221;. В этой рубрике я, в качестве благодарности, буду упоминать блоги тех, кто заметил мой блог и порекомендовал своим читателям мои материалы.</p>
<p>Итак, я начну эту рубрику с моего тезки <a title="blogonika.ru" href="http://blogonika.ru/" target="_blank">Олега Маркарьяна</a>. Олег ведет блог &#8220;Блогоника &#8211; город блоггеров&#8221;, в котором он рассказывает о новостях в блогосфере, о SEO и многих других интересных вещах, порой не связанных с блогосферой. В общем, очень интересный и разносторонний (как и его хозяин <img src='http://olezhek.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) ресурс &#8211; рекомендую к прочтению.</p>
]]></content:encoded>
			<wfw:commentRss>http://olezhek.net/2010-07-13-na-menya-ssylayutsya-1.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Работа с SSH. Часть 1 – делаем это в Python</title>
		<link>http://olezhek.net/2010-07-06-zametki-o-python-rabotaem-s-ssh.html</link>
		<comments>http://olezhek.net/2010-07-06-zametki-o-python-rabotaem-s-ssh.html#comments</comments>
		<pubDate>Tue, 06 Jul 2010 17:41:23 +0000</pubDate>
		<dc:creator>Олег</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[paramiko]]></category>
		<category><![CDATA[sftp]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[программирование]]></category>

		<guid isPermaLink="false">http://olezhek.net/?p=612</guid>
		<description><![CDATA[Сегодня я хотел бы поведать вам о том, как можно работать с SSH в Python. SSH &#8211; Secure SHell &#8211; сетевой протокол, который позволяет производить удаленное управление операционной системой компьютера по зашифрованному соединению. При помощи SSH можно осуществлять передачу файлов. SSH применяется для соединения с удаленной операционной системой по SFTP. В Python для работы с [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня я хотел бы поведать вам о том, как можно работать с SSH в Python. SSH &#8211; Secure SHell &#8211; сетевой протокол, который позволяет производить удаленное управление операционной системой компьютера по зашифрованному соединению. При помощи SSH можно осуществлять передачу файлов. SSH применяется для соединения с удаленной операционной системой по SFTP.</p>
<p>В Python для работы с ssh используется модуль <noindex><a rel="nofollow" title="paramiko" href="http://olezhek.net/jexr/aHR0cDovL3d3dy5sYWcubmV0L3BhcmFtaWtvLw==" target="_blank">paramiko</a></noindex>. Документацию по модулю вы можете почитать <noindex><a rel="nofollow" title="тут" href="http://olezhek.net/jexr/aHR0cDovL3d3dy5sYWcubmV0L3BhcmFtaWtvL2RvY3MvcGFyYW1pa28tbW9kdWxlLmh0bWw=" target="_blank">тут</a></noindex>, ну а я покажу вам пару основных моментов, от которых вы оттолкнетесь и дальше уже будете применять то, что вам необходимо.<span id="more-612"></span></p>
<p>Paramiko присутствует в стандартных репозиториях Ubuntu и Debian, и установить его можно очень даже легко:</p>
<pre># apt-get install python-paramiko</pre>
<p>Теперь, когда модуль установлен, приступим к программированию)). Для работы с SSH в модуле предусмотрен класс &#8211; SSHClient. С него все и начинается:</p>
<pre class="python" name="code">#!/usr/bin/env python
import paramiko
ssh=paramiko.SSHClient()</pre>
<p>Я создал объект ssh класса SSHClient, и теперь могу устанавливать соединение. Модуль позволяет авторизоваться как при помощи пары &#8220;имя пользователя &#8211; пароль&#8221;, так и при помощи ключа. Во втором случае, конечно же, нужно иметь &#8220;при себе&#8221; этот самый ключ.</p>
<p>Разумеется, на разных серверах SSH настроен по разному. Важно знать, что существует 3 варианта авторизации &#8211; по имени пользователя и паролю, ключом и гибридный. По умолчанию, скажем, на Debian-based дистрибутивах включен последний вариант. Осмелюсь предположить, что это наиболее популярный вариант настроек. Что он из себя представляет? Когда вы подключаетесь к серверу по SSH, он, перед запросом логина и пароля, предлагает вам принять ключ, чтобы, позже, вы, выгрузив в директорию с ключами на сервере свой ключ, могли авторизоваться именно по ключу. Что получает пользователь? Он получает удобный диалог, на утвердительный ответ которого SSH-клиент скопирует к себе ключики сервера сам. Что получает программист? Весьма неудобную ситуацию &#8211; дело в том, что по умолчанию SSHClient настроен так, чтобы не соединяться с сервером, если у клиента нет ключа. Даже если логин и пароль правильны. Это приводит к тому, что SSHClient сбрасывает соединение, и авторизоваться не получается. К счастью, на такие случаи в Paramiko предусмотрено удобное решение:</p>
<pre class="python" name="code">ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())</pre>
<p>Ежели вам охота вернуть все обратно, можете просто не прописывать этот метод. Явно политика по умолчанию устанавливается так:</p>
<pre class="python" name="code">ssh.set_missing_host_key_policy(paramiko.RejectPolicy())</pre>
<p>Объект создан и настроен, теперь можно и подключиться:</p>
<pre class="python" name="code">ssh.connect("&lt;сервер&gt;",username="&lt;имя пользователя&gt;",password="&lt;пароль&gt;")</pre>
<p>Необходимо указать свои сервер, имя пользователя и пароль. В качестве сервера можно указать IP-адрес или доменное имя, по которому резолвится ваш сервер.</p>
<p>После успешного соединения есть два варианта работы с сервером &#8211; продолжать работать по SSH и выполнять консольные команды сервера или переключиться в режим SFTP и использовать приемы SFTP для работы с файлами. Какой метод предпочтительнее &#8211; дело ваше. Посмотрим оба варианта.</p>
<p>Вариант номер один &#8211; SFTP. Для переключения в этот режим используем такую конструкцию:</p>
<pre class="python" name="code">ftp=ssh.open_sftp()</pre>
<p>И далее работа с сервером осуществляется по SFTP. В качестве примера приведу пару команд по навигации по директориям сервера и управлению файлами:</p>
<pre class="python" name="code">fileList=ftp.listdir()
ftp.chdir("/var/log")
currentDir = ftp.getcwd()
ftp.get("sql.log","mysql.log")
ftp.put("sql.log","mysql.log")
ftp.unlink("mysql.log")
ftp.mkdir("test")
ftp.rmdir("test")</pre>
<p>В первой строке я получил список файлов. Метод listdir() возвращает кортеж, с которым я могу работать как обычно.</p>
<p>Во второй строке я осуществил переход в директорию /var/log. Таким образом можно перемещаться по директориям на сервере.</p>
<p>В третьей строке мне захотелось узнать, где я нахожусь. В результате выполнения метода getcwd я получил строку, содержащую путь к моей текущей директории.</p>
<p>Для скачивания файла использется метод get() &#8211; строка четвертая. В качестве первого параметра задается имя локального файла (куда скачивать), в качестве второго &#8211; что скачивать. Можно указывать абсолютные пути.</p>
<p>Для выгрузки файла на сервер используется метод put() &#8211; параметры аналогично get(). Стоит отметить, что ни get(), ни put() не принимают в качестве входных параметров маски (например, &#8220;*.php&#8221;).</p>
<p>Удалить файл можно при помощи метода unlink(). Параметр задается также, как и у get() и put().</p>
<p>Для создания директории можно использовать метод mkdir(), а для удаления &#8211; rmdir().</p>
<p>Вообще, если вы имели ранее дело с sftp/ftp, то, думаю, вы заметили похожесть в названиях методов и команд протоколов FTP/SFTP. Так что трудно не будет, а нюансы всегда можно найти в документации к paramiko.</p>
<p>Вариант номер два &#8211; работа с сервером по SSH. Работа с сервером не через SFTP, а через SSH отличается прежде всего тем, что можно выполнять консольные команды. Для выполнения команд по SSH служит метод exec_command(). Ниже пример (я продублировал соединение с сервером для наглядности):</p>
<pre class="python" name="code">#!/usr/bin/env python
import paramiko
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("&lt;сервер&gt;",username="&lt;имя пользователя&gt;",password="&lt;пароль&gt;")
stdin, stdout, stderr = ssh.exec_command("cat /var/log/syslog")</pre>
<p>Данный метод примечателен тем, что при выполнении команды необходимо обрабатывать три возвращаемых канала &#8211; это содержимое стандартного ввода, стандартного вывода и стандартного вывода ошибок. Например, результат выполнения вышеописанной команды, если он будет успешен, будет содержаться в stdout. Ко всем трём возвращаемым каналам можно обратиться как к файлу и, например, считать оттуда всё, что необходимо. Для получения результата выполнения всё той же команды выше (результатом будет содержимое файла), я могу просто считать его построчно из stdout:</p>
<pre class="python" name="code">result = stdout.read.splitlines()</pre>
<p>Таким образом я получил кортеж строк системного лога удаленного сервера.</p>
<p>Усложним немного. Допустим, мне понадобилось перезагрузить сервер. Команда перезагрузки доступна только для root (/sbin/reboot). Для выполнения команд, доступных только root, от обычного пользователя, можно воспользоваться утилитой sudo. Я исхожу из того, что на сервере установлена и настроена sudo, и моя учетная запись может выполнять эту утилиту (является т.н. sudoer&#8217;ом):</p>
<pre class="python" name="code">stdin, stdout, stderr = ssh.exec_command("sudo reboot")
stdin.write("&lt;пароль пользователя&gt;\n")
stdin.flush()</pre>
<p>Мои действия:</p>
<ol>
<li>выполняю команду &#8220;sudo reboot&#8221;</li>
<li>в результате выполнения мне нужно ввести пароль пользователя (настройки по умолчанию для sudo &#8211; пароль вашего пользователя). Для этого я пишу в stdin, как в обычный файл, свой пароль вместе с <strong>переносом строки</strong>, и отправляю содержимое stdin серверу.</li>
</ol>
<p>Результатом выполнения будет перезагрузка сервера <img src='http://olezhek.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . Так что для большей наглядности можете повыполнять другие команды через sudo <img src='http://olezhek.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  .</p>
<p>Это основные моменты работы с ssh в Python, для более подробной информации вы всегда можете обратиться к документации, ссылку на которую я дал в начале статьи. Удачи! <img src='http://olezhek.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://olezhek.net/2010-07-06-zametki-o-python-rabotaem-s-ssh.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Firefox: пара полезных плагинов для веб-разработчика</title>
		<link>http://olezhek.net/2010-07-02-firefox-para-poleznyx-plaginov-dlya-veb-razrabotchika.html</link>
		<comments>http://olezhek.net/2010-07-02-firefox-para-poleznyx-plaginov-dlya-veb-razrabotchika.html#comments</comments>
		<pubDate>Fri, 02 Jul 2010 07:10:42 +0000</pubDate>
		<dc:creator>Олег</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[плагины]]></category>
		<category><![CDATA[разработка]]></category>

		<guid isPermaLink="false">http://olezhek.net/?p=741</guid>
		<description><![CDATA[Сегодня я хотел бы поделиться с вами несколькими плагинами для Firefox, которые я использую при разработке и анализе web-приложений. Я использую Firefox при разработке web-приложений по нескольким причинам: это один из самых популярных браузеров; наличие плагинов, которые добавляют такие функции, которых нет в других браузерах. Итак, первый и, пожалуй, самый нужный для веб-разработчика плагин &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня я хотел бы поделиться с вами несколькими плагинами для Firefox, которые я использую при разработке и анализе web-приложений.</p>
<p style="text-align: center;"><img class="size-full wp-image-742 aligncenter" title="firefox" src="http://olezhek.net/wp-content/uploads/2010/07/firefox-logo-bus.jpg" alt="" width="460" height="302" /></p>
<p>Я использую Firefox при разработке web-приложений по нескольким причинам:</p>
<ol>
<li>это один из самых популярных браузеров;</li>
<li>наличие плагинов, которые добавляют такие функции, которых нет в других браузерах.</li>
</ol>
<p>Итак, первый и, пожалуй, самый нужный для веб-разработчика плагин<span id="more-741"></span> &#8211; <noindex><a rel="nofollow" title="Firebug" href="http://olezhek.net/jexr/aHR0cHM6Ly9hZGRvbnMubW96aWxsYS5vcmcvZW4tVVMvZmlyZWZveC9hZGRvbi8xODQzLw==" target="_blank">Firebug</a></noindex>. С его помощью можно удобно инспектировать HTML-код страницы, CSS-стили, отлаживать JavaScript. Если вы имеете дело с AJAX &#8211; для вас этот плагин просто &#8220;must-have&#8221;. Да, бесспорно, существуют аналогичные средства для разработчиков во всех современных браузерах, но они не дотягивают до функционала Firebug. Это первый плагин, который я устанавливаю после новой установки Firefox.</p>
<p>Следующая группа плагинов так или иначе связана с работой с HTTP-заголовками. Их просмотр может понадобится при анализе работы web-сервера.</p>
<p>Удобнее всего мне просматривать HTTP-заголовки при помощи плагина <noindex><a rel="nofollow" title="Live HTTP Headers" href="http://olezhek.net/jexr/aHR0cHM6Ly9hZGRvbnMubW96aWxsYS5vcmcvZW4tVVMvZmlyZWZveC9hZGRvbi8zODI5Lw==" target="_blank">Live HTTP Headers</a></noindex>. Когда плагин запущен, он, при загрузке какой либо страницы или фоновой передаче браузером данных, пишет в свое текстовое поле все переданные и полученные HTTP-заголовки. Если вы анализируете заголовки для одной страницы, лучше не производить работу в других вкладках или плагинах, работающих с сетью, иначе будет каша)).</p>
<p>Для редактирования HTTP-заголовков я обычно использую <noindex><a rel="nofollow" title="Tamper Data" href="http://olezhek.net/jexr/aHR0cHM6Ly9hZGRvbnMubW96aWxsYS5vcmcvcnUvZmlyZWZveC9hZGRvbi85NjYv" target="_blank">Tamper Data</a></noindex>. Думаю, это наиболее удобный из целой &#8220;плеяды&#8221; подобных плагинов. Этот плагин также позволяет просматривать HTTP-заголовки и может это делать по команде.</p>
<p>Следующий плагин &#8211; <noindex><a rel="nofollow" title="Modify Headers" href="http://olezhek.net/jexr/aHR0cHM6Ly9hZGRvbnMubW96aWxsYS5vcmcvZW4tVVMvZmlyZWZveC9hZGRvbi85Njcv" target="_blank">Modify Headers</a></noindex> &#8211; позволяет составлять HTTP-заголовки вручную. Плагин, будучи запущенным, отсылает составленные заголовки при обращении к какому-либо серверу при помощи Firefox.</p>
<p>И, напоследок, еще один плагин для работы с HTTP-заголовками &#8211; <noindex><a rel="nofollow" title="Poster" href="http://olezhek.net/jexr/aHR0cHM6Ly9hZGRvbnMubW96aWxsYS5vcmcvZW4tVVMvZmlyZWZveC9hZGRvbi8yNjkxLw==" target="_blank">Poster</a></noindex>. Плагин также позволяет составлять HTTP-заголовки и отправлять их какому-либо сайту. Особенность его заключается в том, что он не зависит от вкладок Firefox, т. е. у него есть свой интерфейс для получения результатов (простенький) и своя адресная строка, что может дать некоторую гибкость в работе. Штукенция весьма навороченная, хотя я чаще пользуюсь именно Tamper Data.</p>
<p>А какими плагинами/утилитами, помогающими при разработке web-приложений, пользуетесь вы?</p>
]]></content:encoded>
			<wfw:commentRss>http://olezhek.net/2010-07-02-firefox-para-poleznyx-plaginov-dlya-veb-razrabotchika.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Кнопки добавления в социальные сервисы без плагинов</title>
		<link>http://olezhek.net/2010-06-22-knopki-dobavleniya-v-socialnye-servisy-bez-plaginov.html</link>
		<comments>http://olezhek.net/2010-06-22-knopki-dobavleniya-v-socialnye-servisy-bez-plaginov.html#comments</comments>
		<pubDate>Tue, 22 Jun 2010 20:47:20 +0000</pubDate>
		<dc:creator>Олег</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[кнопки]]></category>
		<category><![CDATA[опера]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[сервисы]]></category>
		<category><![CDATA[социальные]]></category>

		<guid isPermaLink="false">http://olezhek.net/?p=712</guid>
		<description><![CDATA[Наверно, вы уже заметили небольшое усовершенствование на моем блоге &#8211; кнопки добавления статьи на социальные сервисы. Эта штука не является нововведением &#8211; до этого я использовал плагин &#8220;ОднаКнопка&#8221; для WordPress. Как-то на днях я подумал, что подгрузка js плагином со стороннего сайта может замедлить (и иногда действительно замедляла) загрузку страницы &#8211; ведь браузер с настройками [...]]]></description>
			<content:encoded><![CDATA[<p>Наверно, вы уже заметили небольшое усовершенствование на моем блоге &#8211; кнопки добавления статьи на социальные сервисы. Эта штука не является нововведением &#8211; до этого я использовал плагин &#8220;ОднаКнопка&#8221; для WordPress. Как-то на днях я подумал, что подгрузка js плагином со стороннего сайта может замедлить (и иногда действительно замедляла) загрузку страницы &#8211; ведь браузер с настройками по умолчанию (Opera, Firefox, Chrome &#8211; проверено на этих браузерах) будет ожидать полной загрузки скрипта, прежде чем рендерить дальше страницу. Далее, лишний JavaScript на странице может замедлить работу браузера (не утверждаю, что у меня много JavaScript, но для владельцев сайтов с большим количеством js это актуально). Ну и пункт 3 &#8211; известно, что чем больше плагинов установлено в WordPress, тем больше он жрет системных ресурсов. Как следствие, устанавливать ради двух строчек инклюда js на каждый пост в странице блога целый плагин, считаю немного лишним <img src='http://olezhek.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . Придя к такому заключению, я решил сделать очередную модификацию в теме своего блога<span id="more-712"></span> (это определенно минус, т.к. после смены темы придется изменять новую тему). Мне понадобилось определенное время для того, чтобы откопать методы добавления статьи в социальные сервисы через GET-запрос, и теперь я хочу поделиться ими с вами.</p>
<p>Итак, я выбрал небольшой список социальных сервисов, вот они:</p>
<ul>
<li><noindex><a rel="nofollow" title="mail.ru" href="http://olezhek.net/jexr/aHR0cDovL21haWwucnU=" target="_blank">Мой Мир mail.ru</a></noindex>;</li>
<li><noindex><a rel="nofollow" title="facebook.com" href="http://olezhek.net/jexr/aHR0cDovL2ZhY2Vib29rLmNvbQ==" target="_blank">Facebook</a></noindex>;</li>
<li><noindex><a rel="nofollow" title="delicious.com" href="http://olezhek.net/jexr/aHR0cDovL2RlbGljaW91cy5jb20=" target="_blank">Delicious</a></noindex>;</li>
<li><noindex><a rel="nofollow" title="digg.com" href="http://olezhek.net/jexr/aHR0cDovL2RpZ2cuY29t" target="_blank">Digg</a></noindex>;</li>
<li><noindex><a rel="nofollow" title="friendfeed.com" href="http://olezhek.net/jexr/aHR0cDovL2ZyaWVuZGZlZWQuY29t" target="_blank">FriendFeed</a></noindex>;</li>
<li><noindex><a rel="nofollow" title="google.com/buzz" href="http://olezhek.net/jexr/aHR0cDovL3d3dy5nb29nbGUuY29tL2J1eno=" target="_blank">Google Buzz</a></noindex>;</li>
<li><noindex><a rel="nofollow" title="twitter.com" href="http://olezhek.net/jexr/aHR0cDovL3R3aXR0ZXIuY29t" target="_blank">Twitter</a></noindex>;</li>
<li><noindex><a rel="nofollow" title="mister-wong.ru" href="http://olezhek.net/jexr/aHR0cDovL3d3dy5taXN0ZXItd29uZy5ydQ==" target="_blank">Mister-Wong</a></noindex>;</li>
<li><noindex><a rel="nofollow" title="reddit.com" href="http://olezhek.net/jexr/aHR0cDovL3JlZGRpdC5jb20=" target="_blank">Reddit</a></noindex>;</li>
<li><noindex><a rel="nofollow" title="myspace.com" href="http://olezhek.net/jexr/aHR0cDovL215c3BhY2UuY29t" target="_blank">MySpace</a></noindex>;</li>
<li><noindex><a rel="nofollow" title="orkut.com" href="http://olezhek.net/jexr/aHR0cDovL29ya3V0LmNvbQ==" target="_blank">Orkut</a></noindex>;</li>
<li><noindex><a rel="nofollow" title="slashdot.org" href="http://olezhek.net/jexr/aHR0cDovL3NsYXNoZG90Lm9yZw==" target="_blank">Slashdot</a></noindex>;</li>
<li><noindex><a rel="nofollow" title="technorati.com" href="http://olezhek.net/jexr/aHR0cDovL3RlY2hub3JhdGkuY29t" target="_blank">Technorati</a></noindex>;</li>
<li><noindex><a rel="nofollow" title="stumbleupon.com" href="http://olezhek.net/jexr/aHR0cDovL3d3dy5zdHVtYmxldXBvbi5jb20=" target="_blank">StumbleUpon</a></noindex>.</li>
</ul>
<p>Далее я нашел подходящие иконки для отображения на страницах блога. Мне очень приглянулись иконки <a title="webtreatsetc.deviantart.com" href="http://webtreatsetc.deviantart.com" target="_blank">этого</a> товарища, за них ему спасибо. Самое скучное было дальше &#8211; поиск GET-запросов к сервисам для добавления постов. Оказывается, аналогичное проделал и <a title="shakin.ru" href="http://shakin.ru/other/social-buttons.html" target="_blank">Глобатор</a>, за что ему тоже спасибо &#8211; некоторые запросы перекочевали ко мне именно из его статьи <img src='http://olezhek.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  .</p>
<p>Итак, код:</p>
<pre name="code" class="html"><!--mail.ru-->
<noindex><a target="_blank" rel="nofollow" href="http://connect.mail.ru/share?share_url=<?php the_permalink(); ?>"><img width="32" height="32" src="<?php bloginfo('template_url'); ?>/icons/mail-ru.png" title="Поделиться В Моем Мире"></a></noindex>

<!--facebook-->
<noindex><a rel="nofollow" target="_blank" href="http://www.facebook.com/sharer.php?u=<?php the_permalink(); ?>"><img width="32" height="32" src="<?php bloginfo('template_url'); ?>/icons/facebook.png" title="Поделиться в Facebook"></a></noindex>

<!--delicious-->
<noindex><a rel="nofollow" target="_blank" href="http://del.icio.us/post?url=<?php the_permalink() ?>&#038;title=<?php the_title(); ?>"><img width="32" height="32" src="<?php bloginfo('template_url'); ?>/icons/delicious.png" title="Поделиться в Delicious"></a></noindex>

<!--digg-->
<noindex><a rel="nofollow" target="_blank" href="http://digg.com/submit?phase=2&#038;url=<?php the_permalink() ?>"><img width="32" height="32" src="<?php bloginfo('template_url'); ?>/icons/digg.png" title="Поделиться в Digg"></a></noindex>

<!--friendfeed-->
<noindex><a rel="nofollow" href="http://friendfeed.com/?url=<?php the_permalink() ?>&#038;title=<?php the_title(); ?>" target="_blank"><img width="32" height="32" src="<?php bloginfo('template_url'); ?>/icons/friendfeed.png" title="Поделиться в FriendFeed"></a></noindex>

<!--buzz-->
<noindex><a rel="nofollow" target="_blank" href="http://www.google.com/buzz/post?message=<?php the_title(); ?>&#038;url=<?php the_permalink(); ?>"><img width="32" height="32" src="<?php bloginfo('template_url'); ?>/icons/google.png" title="Поделиться в Google Buzz"></a></noindex>

<!--twitter-->
<noindex><a rel="nofollow" target="_blank" href="http://twitter.com/home?status=RT @ru_tingol <?php the_title(); ?>: <?php the_permalink(); ?>" title="Добавить в Twitter"><img width="32" height="32" src="<?php bloginfo('template_url'); ?>/icons/twitter.png" title="Поделиться в Twitter"></a></noindex> 

<!--mister-wong-->
<noindex><a rel="nofollow" target="_blank" href="http://www.mister-wong.ru/index.php?action=addurl&#038;bm_url=<?php the_permalink(); ?>&#038;bm_description=<?php the_title(); ?>" title="Добавить в Mister-Wong"><img width="32" height="32" src="<?php bloginfo('template_url'); ?>/icons/mister-wong.png" title="Добавить в Mister Wong"></a></noindex>

<!--reddit-->
<noindex><a target="_blank" rel="nofollow" href="http://reddit.com/submit?url=<?php the_permalink() ?>&#038;title=<?php the_title(); ?>" ><img width="32" height="32" src="<?php bloginfo('template_url'); ?>/icons/reddit.png" title="Поделиться в Reddit"></a></noindex>

<!--myspace-->
<noindex><a target="_blank" rel="nofollow" href="http://www.myspace.com/Modules/PostTo/Pages/?u=<?php the_permalink() ?>"><img width="32" height="32" src="<?php bloginfo('template_url'); ?>/icons/myspace.png" title="Поделиться в MySpace"></a></noindex>

<!--orkut-->
<noindex><a target="_blank" rel="nofollow" href="http://promote.orkut.com/preview?nt=orkut.com&#038;tt=<?php the_title(); ?>&#038;du=<?php the_permalink() ?>"><img width="32" height="32" src="<?php bloginfo('template_url'); ?>/icons/orkut.png" title="Поделиться в Orkut"></a></noindex>

<!--./-->
<noindex><a target="_blank" rel="nofollow" href="http://slashdot.org/bookmark.pl?url=<?php the_permalink() ?>&#038;title=<?php the_title(); ?>"><img width="32" height="32" src="<?php bloginfo('template_url'); ?>/icons/slash-dot.png" title="Поделиться в Slashdot"></a></noindex>

<!--Technorati-->
<noindex><a target="_blank" rel="nofollow" href="http://technorati.com/signup/?f=favorites&#038;Url=<?php the_permalink() ?>"><img width="32" height="32" src="<?php bloginfo('template_url'); ?>/icons/technocrati.png" title="Поделиться в Technorati"></a></noindex>

<!--StumbleUpon-->
<noindex><a target="_blank" rel="nofollow" href="http://www.stumbleupon.com/submit?url=<?php the_permalink() ?>"><img width="32" height="32" src="<?php bloginfo('template_url'); ?>/icons/stumbleupon.png" title="Поделиться в StumbleUpon"></a></noindex></pre>
<p>Пара нюансов.<br />
Во-первых, необходимо поменять пути к вашим иконкам.<br />
Во-вторых, размер ваших иконок может быть другим, поэтому вам может понадобиться изменить параметры width=&#8221;32&#8243; height=&#8221;32&#8243; в теге IMG или вовсе убрать их. В последнем случае иконки будут отрисовываться со своим натуральным разрешением.<br />
Этот код необходимо прописать в файле &#8220;index.php&#8221; и/или &#8220;single.php&#8221; вашей темы после строки:</p>
<pre name="code" class="php">&lt;?php the_content(''); ?&gt;</pre>
<p>Первый файл отвечает за вывод информации на главную страницу (где, как правило, отображаются подряд несколько постов), а второй &#8211; за вывод отдельного поста &#8211; когда вы посещаете страницу, содержащую один пост. Например, эту <img src='http://olezhek.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . Можно сделать и покрасивее &#8211; сохранить приведенный выше html-код в отдельный файл и назвать его как-нибудь с расширением .php, например &#8220;services.php&#8221;. Далее, этот файл кладется в директорию с темой (можно и в любое другое место), и в вышеуказанных файлах после </p>
<pre name="code" class="php">&lt;?php the_content(''); ?&gt;</pre>
<p>пишем</p>
<pre name="code" class="php">&lt;?php include(&quot;path/to/services.php&quot;); ?&gt;</pre>
<p>Путь, конечно же, надо изменить на свой. Второй вариант хорош тем, что вам не нужно прописывать html-код со ссылками прямо в теме, вы делаете это в отдельном файле, который можно положить в любое удобное место и просто подключать (функция <noindex><a rel="nofollow" target="_blank" title="http://olezhek.net/jexr/aHR0cDovL3J1LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnJlcXVpcmUucGhw" href="http://olezhek.net/jexr/aHR0cDovL3J1LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnJlcXVpcmUucGhw">include()</a></noindex> php) там, где это нужно.<br />
Вот что у меня было:<br />
<img src="http://olezhek.net/wp-content/uploads/2010/06/knopka.png" alt="" title="Старые иконки добавления в социальные сервисы" width="231" height="26" class="aligncenter size-full wp-image-720" /><br />
А вот что стало:<br />
<img src="http://olezhek.net/wp-content/uploads/2010/06/my.png" alt="" title="Новые иконки добавления в социальные сервисы" width="503" height="32" class="aligncenter size-full wp-image-721" /><br />
По-моему, неплохо <img src='http://olezhek.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  . К тому же, оно теперь и грузится быстрее <img src='http://olezhek.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://olezhek.net/2010-06-22-knopki-dobavleniya-v-socialnye-servisy-bez-plaginov.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Постинг в блог из Google Docs</title>
		<link>http://olezhek.net/2010-06-16-posting-v-blog-iz-google-docs.html</link>
		<comments>http://olezhek.net/2010-06-16-posting-v-blog-iz-google-docs.html#comments</comments>
		<pubDate>Wed, 16 Jun 2010 07:25:13 +0000</pubDate>
		<dc:creator>Олег</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Технологии Веб]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[docs]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[MovableType]]></category>
		<category><![CDATA[Xml-RPC]]></category>
		<category><![CDATA[пост]]></category>
		<category><![CDATA[публикация]]></category>

		<guid isPermaLink="false">http://olezhek.net/?p=698</guid>
		<description><![CDATA[Я частенько пользуюсь Google Docs для написания различных документов. Инструмент этот, хоть еще и не дорос до полноценного офисного пакета, для меня все же полезен. Главным образом, за счет того, что мои документы доступны отовсюду, и при этом нет необходимости таскать с собой что-то на флешке. Во-вторых, нет необходимости в установке программного обеспечения на компьютер. [...]]]></description>
			<content:encoded><![CDATA[<p>Я частенько пользуюсь Google Docs для написания различных документов. Инструмент этот, хоть еще и не дорос до полноценного офисного пакета, для меня все же полезен. Главным образом, за счет того, что мои документы доступны отовсюду, и при этом нет необходимости таскать с собой что-то на флешке. Во-вторых, нет необходимости в установке программного обеспечения на компьютер. Ну а в-третьих, почти всё, что я пишу для блога, я пишу в Google Docs. Как-то на днях я решил пошариться в Google Docs в поисках механизма для публикации документов<span id="more-698"></span> на блоге &#8211; поднадоело мне копипастить материал оттуда каждый раз. Для того, чтобы настроить публикацию из Google Docs, мне понадобилось немного порыться в настройках публикации, которые размещены несколько необычно &#8211; нужно для их вызова отметить галочкой какой-нибудь документ, нажать большую кнопку “Дополнительные действия“ на верхней панели Google Docs, и в выпадающем меню кликнуть по пункту “Публикация“.</p>
<p><img class="aligncenter size-full wp-image-699" title="Публикация" src="http://olezhek.net/wp-content/uploads/2010/06/settings_small_1.png" alt="" width="350" height="298" />Появится такое окошко:</p>
<p><a href="http://olezhek.net/wp-content/uploads/2010/06/settings_small_2.png"><img class="aligncenter size-medium wp-image-700" title="Настройки публикации" src="http://olezhek.net/wp-content/uploads/2010/06/settings_small_2-500x258.png" alt="" width="500" height="258" /></a></p>
<p>Необходимо перейти по ссылке “задать настройки сайта блога“. Тут-то мы и найдем желаемое:</p>
<p><a href="http://olezhek.net/wp-content/uploads/2010/06/settings_small_3.png"><img class="aligncenter size-medium wp-image-701" title="Настройки публикации" src="http://olezhek.net/wp-content/uploads/2010/06/settings_small_3-500x245.png" alt="" width="500" height="245" /></a></p>
<p>Далее я привожу настройки для WordPress. Если у вас standalone-блог, выбираете “Мой собственный или указанный мною сервер“. WordPress поддерживает постинг через MovableType API, выбираем его. Заполняем URL, логин и пароль пользователя, от которого будем писать статьи. Жмем кнопочку “Проверить”, чтобы узнать, работает выбранный API, и сохраняем настройки. Единственная проблема заключается в том, что публиковать на данный момент можно документы, созданные старым редактором Google Docs, в котором нет отображения документа, как на листе, дополнительных опций форматирования и прочих функций нового редактора. Таким образом, если вы публикуете некоторые документы (неважно куда &#8211; даже просто как html-страничку), вам перед их созданием придется переводить Google Docs в старый режим работы:</p>
<p><a href="http://olezhek.net/wp-content/uploads/2010/06/dgrsxqsm_349fpbctxc5_b.png"><img class="aligncenter size-medium wp-image-702" title="Настройки редактора" src="http://olezhek.net/wp-content/uploads/2010/06/dgrsxqsm_349fpbctxc5_b-500x244.png" alt="" width="500" height="244" /></a>Для публикации вам необходимо отметить документ флажком и в меню &#8220;Дополнительные действия&#8221; выбрать пункт &#8220;Публикация&#8221; (все точно так же, как на первом снимке). Появится окошко, где вы можете кликнуть по кнопке &#8220;Поместить в блог&#8221; для публикации на блоге:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-703" title="Публикация" src="http://olezhek.net/wp-content/uploads/2010/06/dgrsxqsm_350g8f8cjfh_b.png" alt="" width="440" height="334" /></p>
<p>Вам необходимо будет перед публикацией определить стили документа, т.к. Google Docs выгружает документ со стилями, либо почистить от стилей исходный код документа (меню Изменить-&gt; Изменить HTML). Может возникнуть также ситуация, когда пост будет опубликован без названия. Скорее всего в таком случае после публикации понадобится дополнительное изменение поста в редакторе WP. Думаю, что это косяки Google Docs, а не Movabletype API, т.к. через него мне уже доводилось писать пост с мобильника, и все было в порядке. Также отмечу то, что Google Docs не позволяет сохранять документ как черновик WP, нет возможности указать категории поста и тэги. Если у вас есть несколько документов, названных одинаково, и вы публикуете один из них, то, несмотря на выделение только одного документа, будут опубликованы все документы с этим названием <img src='http://olezhek.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Google Docs &#8211; весьма сырой для публикации постов в блог инструмент, и остается наверно только ждать, когда его базовые (совсем уж базовые) функции для публикации будут расширены необходимым для комфортного написания статей. Впрочем, начать публиковать через Google Docs можно хоть сейчас, особенно если вас не останавливает его ограниченный функционал <img src='http://olezhek.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://olezhek.net/2010-06-16-posting-v-blog-iz-google-docs.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Сайт переехал</title>
		<link>http://olezhek.net/2010-06-11-sajt-pereexal.html</link>
		<comments>http://olezhek.net/2010-06-11-sajt-pereexal.html#comments</comments>
		<pubDate>Fri, 11 Jun 2010 13:15:26 +0000</pubDate>
		<dc:creator>Олег</dc:creator>
				<category><![CDATA[Мои новости]]></category>
		<category><![CDATA[olezhek.net]]></category>
		<category><![CDATA[блог]]></category>
		<category><![CDATA[домен]]></category>
		<category><![CDATA[новый]]></category>
		<category><![CDATA[переезд]]></category>

		<guid isPermaLink="false">http://olezhek.net/?p=687</guid>
		<description><![CDATA[Ну вот и новое изменение в моем блоге &#8211; я перенес его на новый домен. Теперь блог расположен здесь &#8211; http://olezhek.net/ . Уважаемые читатели, если вы добавляли сайт в закладки, обновите их, пожалуйста. Ссылка на RSS также изменилась]]></description>
			<content:encoded><![CDATA[<p>Ну вот и новое изменение в моем блоге &#8211; я перенес его на новый домен. Теперь блог расположен здесь &#8211; <a title="http://olezhek.net/" href="http://olezhek.net/">http://olezhek.net/</a> . Уважаемые читатели, если вы добавляли сайт в закладки, обновите их, пожалуйста. Ссылка на RSS также изменилась</p>
]]></content:encoded>
			<wfw:commentRss>http://olezhek.net/2010-06-11-sajt-pereexal.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
