<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-221544032771498191</atom:id><lastBuildDate>Sat, 16 Feb 2013 15:56:16 +0000</lastBuildDate><category>linux</category><category>moc</category><category>last.fm</category><category>music</category><category>vim</category><category>ubuntu</category><category>django</category><category>python</category><category>software</category><category>pysmell</category><category>RAID</category><title>Hi, I'm flop</title><description>sometimes about programming</description><link>http://blog.flop.im/</link><managingEditor>noreply@blogger.com (flop)</managingEditor><generator>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-221544032771498191.post-5412682855521055192</guid><pubDate>Sun, 09 Oct 2011 21:06:00 +0000</pubDate><atom:updated>2011-10-09T14:06:12.430-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>last.fm</category><category domain='http://www.blogger.com/atom/ns#'>vim</category><category domain='http://www.blogger.com/atom/ns#'>python</category><category domain='http://www.blogger.com/atom/ns#'>music</category><category domain='http://www.blogger.com/atom/ns#'>ubuntu</category><category domain='http://www.blogger.com/atom/ns#'>moc</category><title>Уведомления с помощью pynotify для moc player</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-srhpyq0HAwk/TpIMiVOPXzI/AAAAAAAAAF4/30Vdqkf-Hec/s1600/mocnotify.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-srhpyq0HAwk/TpIMiVOPXzI/AAAAAAAAAF4/30Vdqkf-Hec/s1600/mocnotify.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Во время работы я люблю слушать своё любимое радио &lt;a href="http://www.sky.fm/smoothjazz/"&gt;sky.fm/smoothjazz&lt;/a&gt;, которое благотворно влияет на творческий процесс. Как видно из заголовка слушаю его в плеере moc, мне он нравится по нескольким причинам: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;он маленький, а справляется с задачами «взрослого» плеера;&lt;/li&gt;&lt;li&gt;можно запустить его в бэкграунде (в режиме сервера);&lt;/li&gt;&lt;li&gt;следовательно отдавать команды из консоли;&lt;/li&gt;&lt;li&gt;у него клевый консольный пользовательский интерфейс, управление в котором построено на горячих клавишах.&lt;/li&gt;&lt;/ul&gt;Но вот незадача, каждый раз писать mocp --info если заиграл неизвестный трек , а тем более держать постоянно открытым окно пользовательского интерфейса — неудобно.  Хочется как у «взрослого» плеера, какое нибудь всплывающее окошко с текущим треком, исполнителем и обложкой к этому альбому.&lt;br /&gt;&lt;br /&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;С всплывающими окошками проблемы не возникло — ОС Ubuntu использует сервер уведомлений Notify OSD, на который и возложим задачи вывода интересующей нас информации, а вот откуда взять обложку к альбому? Первое что мне пришло на ум — это использовать &lt;a href="http://www.albumart.org/"&gt;albumart.org&lt;/a&gt; и парсить непосредственно html страницы выдачи результата. Но вовремя опомнился, ведь есть прекрасный API от &lt;a href="http://last.fm/"&gt;last.fm&lt;/a&gt;, на котором я зависал несколько лет назад, который покрывает своими возможностями мои потребности чуть больше чем полностью. &lt;/div&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Первое и вполне логичное действие — это как то «выдернуть» название трека и исполнителя, что бы потом отдать их last.fm. Помните я говорил про консольные возможности moc, так вот, что бы узнать какой трек сейчас играет достаточно набрать  moc --info, вывод этой команды выглядит так: &lt;br /&gt;&lt;blockquote&gt;State: PLAY&lt;br /&gt;File: http://72.26.204.18:6606&lt;br /&gt;Title: Brian Simpson - Paradise Island&lt;br /&gt;Artist: &lt;br /&gt;SongTitle: Brian Simpson - Paradise Island&lt;br /&gt;Album: &lt;br /&gt;CurrentTime: 26:16&lt;br /&gt;CurrentSec: 1576&lt;br /&gt;Bitrate: 39kbps&lt;br /&gt;AvgBitrate: 0kbps&lt;br /&gt;Rate: 44kHz&lt;/blockquote&gt;Поскольку это все же радио поток, то информация о треке предоставляется не совсем удобно, одной строкой, и располагается в двух строчках Title и SongTitle. Поэтому воспользуемся утилитой sed чтобы «вырезать» нужные нам данные(автор и название песни). &lt;br /&gt;&lt;blockquote&gt;mocp --info | sed -n 's/^Title:\s//p' &lt;/blockquote&gt;Проверили, работает? Замечательно, значит можно открыт vim и набросать первый метод который предоставит данные для дальнейшей работы. &lt;br /&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;br /&gt;def _get_moc_info():&lt;br /&gt;    """ получаем информацию о треке в эфире """&lt;br /&gt;    moc_str = os.popen("mocp --info | sed -n 's/^Title:\s//p'").read()&lt;br /&gt;    moc_str = moc_str.strip(' \n')&lt;br /&gt;    to_list = re.split(' - ', moc_str)&lt;br /&gt;&lt;br /&gt;    _get_album(to_list)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;В результате работы этого метода имеем на выходе список вида ['Artist', 'Song title']. Отлично, теперь открываем &lt;a href="http://www.lastfm.ru/api"&gt;LFM API&lt;/a&gt; в поисках нужного нам метода, чтобы чрезмерно не утомлять сразу скажу что это track.getInfo, но безусловно обилее возможностей last.fm поражает. Этот метод вернет нам xml файл определенного содержания, в котором помимо альбома к треку будет содержаться, барабанная дробь, естественно и обложка, причем разных размеров. Дело за малым, сформировать запрос и получить ответ: &lt;br /&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;br /&gt;def _get_album(song_info):&lt;br /&gt;    """ ищем альбом исполнителя по автору и названию песни &lt;br /&gt;        используя LFM api track.getInfo &lt;br /&gt;    """&lt;br /&gt;    request = {'api_key':API_KEY, 'artist':song_info[0], 'track':song_info[1], 'method':'track.getInfo'}&lt;br /&gt;    lfm_request = urllib.unquote(urllib.urlencode(request))&lt;br /&gt;&lt;br /&gt;    connect = httplib.HTTPConnection(LFM_URL)&lt;br /&gt;    connect.request('GET', '/2.0/?' + lfm_request)&lt;br /&gt;    result = connect.getresponse()&lt;br /&gt;    to_parse = result.read()&lt;br /&gt;&lt;br /&gt;    _get_song_image(to_parse, song_info)&lt;br /&gt;    connect.close()&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Словарик request — это тело запроса, в котором содержится ключ для доступа к  API, исполнитель, название песни и вызываемый метод. Функция urllib приводит тело запроса в надлежащий вид, а httplib отправит запрос по нужному нам адресу.  &lt;/div&gt;&lt;br /&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Теперь посмотрим на ответ от &lt;a href="http://ws.audioscrobbler.com/2.0/?method=track.getinfo&amp;amp;api_key=b25b959554ed76058ac220b7b2e0a026&amp;amp;artist=the+rippingtons&amp;amp;track=bandol"&gt;last.fm&lt;/a&gt; в поисках нужных нам данных, а имеено обложки к альбому, если таковая конечно имеется. Для парсинга xml использую &lt;a href="http://www.crummy.com/software/BeautifulSoup/"&gt;BeautifulSoup&lt;/a&gt;, тут к гадалке не ходи, идеальная библиотека для парсинга html xml данных. Искать будем по тагу &lt;b&gt;image&lt;/b&gt;, их будет несколько, в зависимости от размера обложки, внутри которого будет урл до картинки. &lt;br /&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;br /&gt;def _get_song_image(string, song_info):&lt;br /&gt;    """ парсим результат в поисках обложки к альбому """&lt;br /&gt;    parse_str = BeautifulSoup.BeautifulStoneSoup(string)&lt;br /&gt;    if parse_str.find('image', size='small') == None:&lt;br /&gt;        return ERROR_IMG&lt;br /&gt;    else:&lt;br /&gt;        try:&lt;br /&gt;            img = parse_str.find('image', size='small').text&lt;br /&gt;            show_notify(img, song_info)&lt;br /&gt;        except:&lt;br /&gt;            ERROR_IMG&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Отлично, осталось все это вывести на экран, для этого понадобиться pynotify, python обертка для Notify OSD: &lt;br /&gt;&lt;pre&gt;&lt;code class="python"&gt;&lt;br /&gt;def show_notify(image, song_info):&lt;br /&gt;    tmpimg = urllib.urlretrieve(image)&lt;br /&gt;    if not pynotify.init("moc-notify"):&lt;br /&gt;        sys.exit(1)&lt;br /&gt;&lt;br /&gt;    moc_notify = pynotify.Notification(song_info[0], song_info[1], tmpimg[0])&lt;br /&gt;    moc_notify.show()&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;На этом пока я остановился, минимально-аскетичный функционал заложен, что предстоит сделать: &lt;br /&gt;&lt;b&gt;Todo&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Привести код к надлежащему виду;&lt;/li&gt;&lt;li&gt;Если обложка не найдена вывести картинку-заглушку;&lt;/li&gt;&lt;li&gt;Предусмотреть отступ от другого оповещения, а не ждать завершения его показа;&lt;/li&gt;&lt;li&gt;Придумать монитор для отслеживания состояния смены трека;&lt;/li&gt;&lt;li&gt;Так же предусмотреть показ обложки не только для радио потока;&lt;/li&gt;&lt;li&gt;Ну и для conky то же можно предусмотреть вывод, и да, я знаю про &lt;a href="https://launchpad.net/covergloobus"&gt;coverglobus&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;Весь код можно найти у меня в &lt;a href="https://bitbucket.org/flop/moc-notify/"&gt;bitbucket&lt;/a&gt; репозитории.  &lt;/div&gt;&lt;br /&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b&gt;Что почитать?&lt;/b&gt;&lt;br /&gt;&lt;a href="https://wiki.ubuntu.com/NotifyOSD"&gt;NotifyOSD&lt;/a&gt;&lt;br /&gt;&lt;a href="https://wiki.ubuntu.com/NotificationDevelopmentGuidelines"&gt;NotificationDevelopmentGuidelines&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.crummy.com/software/BeautifulSoup/documentation.html"&gt;Beautiful Soup Documentation&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://blog.flop.im/2011/10/pynotify-moc-player.html</link><author>noreply@blogger.com (flop)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-srhpyq0HAwk/TpIMiVOPXzI/AAAAAAAAAF4/30Vdqkf-Hec/s72-c/mocnotify.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-221544032771498191.post-3871885824882107428</guid><pubDate>Sun, 21 Aug 2011 19:41:00 +0000</pubDate><atom:updated>2012-12-04T08:54:03.757-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>vim</category><category domain='http://www.blogger.com/atom/ns#'>django</category><category domain='http://www.blogger.com/atom/ns#'>python</category><category domain='http://www.blogger.com/atom/ns#'>pysmell</category><category domain='http://www.blogger.com/atom/ns#'>ubuntu</category><title>Pysmell для Python/Django в Vim Ubuntu</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-jP8vGhcYApY/TlFe1ePr0gI/AAAAAAAAAFc/eGehdfwm2VQ/s1600/vim-editor_logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-jP8vGhcYApY/TlFe1ePr0gI/AAAAAAAAAFc/eGehdfwm2VQ/s1600/vim-editor_logo.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Vim поистене мощный текстовый редактор, а программировать в нем одно удовольствие. Встроенное автодополнение кода - omni completion, не уступающее IntelliSense в VisualStudio 20xx, всплывающий pydoc в отдельном буфере, но есть одна маленькая проблемка, omni completion не очень хорошо работает со сторонними библиотека. Если точнее то отказывается дополнять их код. Поэтому на помощь приходит великолепный проект &lt;a href="https://github.com/orestis/pysmell/"&gt;PySmell&lt;/a&gt;.Если цитировать разработчиков то &lt;br /&gt;&lt;blockquote&gt;PySmell is a python IDE completion helper. It tries to statically analyze Python source code, without executing it, and generates information about a project's structure that IDE tools can use.&lt;br /&gt;There is currently support for Vim, Emacs and TextMate. Feel free to contribute your own favourite editor bindings, or to improve the existing ones.&lt;/blockquote&gt;Так чем же он сможет помочь для нашей задачи?&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Для начала установим его используя pyhton — setup tools:&lt;br /&gt;&lt;blockquote&gt;sudo easy_install pysmell&lt;br /&gt;или&lt;br /&gt;sudo pip install pysmell &lt;/blockquote&gt;либо установить из исходников:&lt;br /&gt;&lt;blockquote&gt;git clone https://github.com/orestis/pysmell.git&lt;br /&gt;cd pysmell&lt;br /&gt;sudo python setup.py install&lt;/blockquote&gt;Для продолжения настройки необходимо скачать архив с сайта, файл pysmell.vim поместить в директорию ~/.vim/plugin &lt;br /&gt;Если Вы установили pysmell из репозитория, то в этом же каталоге скопируйте pysmell.vim в ~/.vim/plugin&lt;br /&gt;Осталось только вызвать командой &lt;br /&gt;&lt;blockquote&gt;:setlocal omnifunc=pysmell#Complete&lt;/blockquote&gt;или сразу прописать в .vimrc строчку &lt;br /&gt;&lt;blockquote&gt;autocmd FileType python setlocal omnifunc=pysmell#Complete&lt;/blockquote&gt;&lt;br /&gt;Теперь осталось только сгенерировать таги для дальнейшего использования. Очень хороший пошаговый мануал есть на &lt;a href="http://stackoverflow.com/questions/978643/vim-python-and-django-autocompletion-pysmell"&gt;stackoverflow&lt;/a&gt;, который я за некоторым исправлением переведу сдесь.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Устанавливаем PySmell используя команду setup.py install (это мы уже сделали).&lt;/li&gt;&lt;li&gt;Генерируем для django PYSMELLTAGS файл, для этого перейдем в каталог dist-packeges/django: &lt;blockquote&gt;cd /usr/local/lib/python2.7/dist-packeges/django/&lt;/blockquote&gt;и выполняем команду: &lt;blockquote&gt;pysmell . -o ~/PYSMELLTAGS.django&lt;/blockquote&gt;ни кто не запрещает сразу же помещать файл с тагами в Вашу директорию с проектом, то есть: &lt;blockquote&gt;pysmell . -o ~/path/to/your/django/project/PYSMELLTAGS.django&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Теперь генерируем PYSMELLTAGS файл для рабочего проекта &lt;blockquote&gt;pysmell .&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Осталось убедиться что pysmell находится в нашем PYTHONPATH &lt;blockquote&gt;export PYTHONPATH=${PYTHONPATH}:/path/to/pysmell/&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Запускаем vim&lt;/li&gt;&lt;li&gt;Устанавливаем pysmell.vim &lt;blockquote&gt;:source /path/to/pysmell/pysmell.vim&lt;/blockquote&gt;(мы это уже сделали скопировав pysmell.vim в каталог plugin)&lt;/li&gt;&lt;li&gt;Устанавливаем функцию автодополнения &lt;blockquote&gt;:set omnifunc=pysmell#Complete &lt;/blockquote&gt;(это мы то же сделали)&lt;/li&gt;&lt;li&gt;Все, должно работать. &lt;/li&gt;&lt;/ol&gt;Мой пример работы PySmell:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-VfR911RpHYw/TlFetyKyoMI/AAAAAAAAAFM/Yp2ngggW2CM/s1600/pysmell-crop.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/-VfR911RpHYw/TlFetyKyoMI/AAAAAAAAAFM/Yp2ngggW2CM/s640/pysmell-crop.png" width="517" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Pt0Ldln_Pio/TlFet4NBeYI/AAAAAAAAAFU/4D4wXr9GyBI/s1600/pysmell-crop1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://4.bp.blogspot.com/-Pt0Ldln_Pio/TlFet4NBeYI/AAAAAAAAAFU/4D4wXr9GyBI/s640/pysmell-crop1.png" width="519" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</description><link>http://blog.flop.im/2011/08/pysmell-pythondjango-vim-ubuntu.html</link><author>noreply@blogger.com (flop)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-jP8vGhcYApY/TlFe1ePr0gI/AAAAAAAAAFc/eGehdfwm2VQ/s72-c/vim-editor_logo.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-221544032771498191.post-8537331617432982138</guid><pubDate>Thu, 14 Jul 2011 18:04:00 +0000</pubDate><atom:updated>2011-07-14T11:21:45.701-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>linux</category><category domain='http://www.blogger.com/atom/ns#'>RAID</category><category domain='http://www.blogger.com/atom/ns#'>software</category><category domain='http://www.blogger.com/atom/ns#'>ubuntu</category><title>Домашний RAID 1 в ubuntu</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-oBvMJDZkTs8/Tca3dQwCcmI/AAAAAAAAABQ/u12fiU0yEPk/s1600/RAID1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" class="alignnone" height="482" src="http://1.bp.blogspot.com/-oBvMJDZkTs8/Tca3dQwCcmI/AAAAAAAAABQ/u12fiU0yEPk/s400/RAID1.jpg" width="600" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Прекрасным весенним утром, я проснувшись понял, что потеря данных в результате выхода из строя жёсткого диска, для меня дороже стоимости жесткого диска. Поэтому решил на своём домашнем\рабочем компьютере использовать  RAID массив. Конечно это не панацея, ведь вероятность одновременного сбоя всех дисков массива всегда имеет место быть, но данная вероятность гораздо ниже выхода из строя одного диска, что дает моральное и душевное спокойствие о сохранности своих данных. Что такое RAID и какие бывают уровни можно прочесть &lt;a href="http://ru.wikipedia.org/wiki/Raid"&gt;тут&lt;/a&gt; и &lt;a href="http://rhd.ru/docs/manuals/enterprise/RHEL-4-Manual/sysadmin-guide/s1-raid-levels.html"&gt;тут&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;В качестве ОС у меня выступает Ubuntu, поэтому дальнейшее описание процесса создания массива и установки на него операционной системы осуществляется для нее, но на моё субъективное мнение, разительных отличий при выборе другой операционной системы возникнуть не должно. &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Первым делом, неискушённый пользователь начнет устанавливать desktop-версию доступную на сайте ubuntu по умолчанию и неминуемо столкнется с рядом неявных моментов. Поэтому я рекомендую выбирать в качестве установщика alternate-версию, но на бескрайних просторах глобальной сети «Интернет» выловил хорошую статью по установке как раз &lt;a href="http://blog.foobaria.com/2010/05/installing-ubuntu-1004-desktop-with.html"&gt;desktop-версии Ubuntu на software RAID&lt;/a&gt;. Поэтому я и решил перевести данное how — to, забегая чуть — чуть вперед, так же приведу пример установки alternate-версии, который окажется много проще первого способа.&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Установка Desktop - версии.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;И так, приступим:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Загружаемся с Live CD (или USB) и выбираем пункт «Попробовать» без установки;&lt;/li&gt;&lt;li&gt;Используя Gparted (System → Administration → Gparted) создаем разделы нужного нам размера. Стоит обратить внимание на то, что создаваемые разделы должны иметь одинаковый размер. То есть, например размер раздела /home на первом жестком диске должен быть равен размеру /home на втором жестком диске итд;&lt;/li&gt;&lt;li&gt;Теперь используя apt-get, необходимо установить mdadm (незабудем выполнить apt-get update перед установкой). Вместе с mdadm будет предложен к установке postfix (mail server), для его конфигурирования выберем опцию Local only и ответим на вопросы;&lt;/li&gt;&lt;li&gt;Это простой, но самый важный шаг, сейчас мы будем создавать наш массив. Выполним следующую команду:&lt;br /&gt;&lt;blockquote&gt;# mdadm --create /dev/md1 --verbose --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1&lt;/blockquote&gt;Расшифровка команд:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;--create создает массив /dev/md1;&lt;/li&gt;&lt;li&gt;--verbose дает подсказку в случае ошибки;&lt;/li&gt;&lt;li&gt;--level=1 уровень массиава, в данном случае уровень 1;&lt;/li&gt;&lt;li&gt;--raid-devices=2 количество устройств в массиве;&lt;/li&gt;&lt;li&gt;/dev/sda1 и /dev/sdb1 устройства из которых создан массив&lt;/li&gt;&lt;/ul&gt;После выполнения команды вы должны увидеть сообщение:&lt;br /&gt;&lt;blockquote&gt;mdadm: /dev/sda1 appears to contain an ext2fs file system &lt;br /&gt;size=3927860K mtime=Thu Jan 1 01:00:00 1970 &lt;br /&gt;mdadm: size set to xxxxxxxK &lt;br /&gt;Continue creating array?&lt;/blockquote&gt;Набираем «yes», и наш массив должен быть создан.&lt;br /&gt;&lt;br /&gt;Соответственно применяем эту команду для всех разделов созданных на жестких дисках. У меня это:&lt;br /&gt;&lt;blockquote&gt;# mdadm --create /dev/md2 --verbose --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2&lt;/blockquote&gt;&lt;blockquote&gt;# mdadm --create /dev/md3 --verbose --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3&lt;/blockquote&gt;То есть, для каждого раздела (/, swap, /home) по массиву.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Теперь необходимо отформатировать созданные массивы в ту файловую систему какую вам удобнее. Я выбрал ext4, но вы можете использовать ext3, ext2, xfs итд:&lt;br /&gt;&lt;blockquote&gt;# mkfs.ext4 /dev/md1&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Откроем установщик Ubuntu используя ярлык на рабочем столе. И далее по накатанной выбираем язык установки, временную зону, раскладку клавиатуры. После вышеописанного на шаге 4 перейдем к работе с жестким диском. Выберем пункт «ручной\Другой вариант». Выбираем RAID массивы на которые укажем что монтировать. В моем случае в /dev/md1 использую для / (root), /dev/md2 — swap и /dev/md3 — home раздел. После, нажимаем «Установить сейчас».&lt;/li&gt;&lt;li&gt;Ждем пока завершится процесс установки.&lt;br /&gt;Следующие шаги самые сложные и мне потребовалось некоторое время чтобы выявить их. В новом установщике Ubuntu нет mdadm, и поэтому когда вы пытаетесь загрузиться с не собранного массива, очевидно вы не можете загрузится вообще. То есть придется установить mdadm.&lt;/li&gt;&lt;li&gt;Монтируем установщик (а так же proc, sys, и dev) и chroot в директории:&lt;br /&gt;&lt;blockquote&gt;# mount /dev/md1 /target/&lt;br /&gt;# mount --bind /dev/ /target/dev/&lt;br /&gt;# mount --bind /sys/ /target/sys/&lt;br /&gt;# mount --bind /proc/ /target/proc/&lt;br /&gt;# chroot /target&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Устанавливаем mdadm (так же как мы делали в шаге 3):&lt;br /&gt;&lt;blockquote&gt;# apt-get update&lt;br /&gt;# apt-get install mdadm &lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;На этом шаге вы должны загрузится в свеже установленную систему, но СТОП, Ubuntu устанавливает GRUB только на один диск, если он выйдет из строя то мы не сможем загрузиться и заменить его, вернее заменить сможем, а вот загрузиться в ОС нет. Исправим это:&lt;br /&gt;&lt;blockquote&gt;# grub-install /dev/sda&lt;br /&gt;# grub-install /dev/sdb&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Все, перезагружаемся.&lt;/li&gt;&lt;/ol&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Установка Alternate - версии.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Теперь простой вариант установки alternate-версии Ubuntu. Стандартно отвечаем на все вопросы установщика плавно доходя до пункта выбора разметки жестких дисков:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Выбираем ручной метод разметки&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-iwHdUoGhLMg/Th8MPH8Z-mI/AAAAAAAAADM/WuZSrZtnYdc/s1600/1-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://3.bp.blogspot.com/-iwHdUoGhLMg/Th8MPH8Z-mI/AAAAAAAAADM/WuZSrZtnYdc/s640/1-1.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Создаем файловые системы на каждом диске&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-lMMA2QoNxPM/Th8Mc_oHsOI/AAAAAAAAADU/8UqwrWBAQJg/s1600/2-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="475" src="http://4.bp.blogspot.com/-lMMA2QoNxPM/Th8Mc_oHsOI/AAAAAAAAADU/8UqwrWBAQJg/s640/2-2.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-JxSMb4i9WBQ/Th8QKiFOOTI/AAAAAAAAADk/R8Knyuipz-U/s1600/3-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://2.bp.blogspot.com/-JxSMb4i9WBQ/Th8QKiFOOTI/AAAAAAAAADk/R8Knyuipz-U/s640/3-3.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Я разбил каждый диск на три раздела, у меня это разделы для /, swap и /home соответственно. Не забываем на каждом корневом разделе указать загрузочную метку «вкл»;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-so6H6QsNQTk/Th8P6C4EsjI/AAAAAAAAADc/3Ewwwy9Bdzg/s1600/4-4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="476" src="http://2.bp.blogspot.com/-so6H6QsNQTk/Th8P6C4EsjI/AAAAAAAAADc/3Ewwwy9Bdzg/s640/4-4.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;В качестве файловой системы выбираем физический уровень RAID&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-TXPlz1lZfNo/Th8SW3Hp8rI/AAAAAAAAADs/TwTqXB-izCk/s1600/5-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://2.bp.blogspot.com/-TXPlz1lZfNo/Th8SW3Hp8rI/AAAAAAAAADs/TwTqXB-izCk/s640/5-5.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Сохраняем изменения&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-0VPWD_I6eOg/Th8SeVdAy4I/AAAAAAAAAD0/s52J5Qgz4J4/s1600/6-6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://3.bp.blogspot.com/-0VPWD_I6eOg/Th8SeVdAy4I/AAAAAAAAAD0/s52J5Qgz4J4/s640/6-6.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Переходим в раздел настройка программного RAID и создаем новое устройство,&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-0XOsiNivpEk/Th8Sm76N99I/AAAAAAAAAD8/ok1V98yF8AA/s1600/7-7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="482" src="http://2.bp.blogspot.com/-0XOsiNivpEk/Th8Sm76N99I/AAAAAAAAAD8/ok1V98yF8AA/s640/7-7.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;выбираем нужный нам уровень массива.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-f44UOPgePv0/Th8Sw5A5JiI/AAAAAAAAAEE/CQbBJG_GeXE/s1600/8-8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="476" src="http://2.bp.blogspot.com/-f44UOPgePv0/Th8Sw5A5JiI/AAAAAAAAAEE/CQbBJG_GeXE/s640/8-8.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-2ZA4pTovH-M/Th8TRW_IaWI/AAAAAAAAAEM/HdJQqGtgg2U/s1600/9-9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="484" src="http://3.bp.blogspot.com/-2ZA4pTovH-M/Th8TRW_IaWI/AAAAAAAAAEM/HdJQqGtgg2U/s640/9-9.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-PRuUaW1YGXg/Th8TRoZOlXI/AAAAAAAAAEU/yeo3Dzv4b2Y/s1600/10-10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://2.bp.blogspot.com/-PRuUaW1YGXg/Th8TRoZOlXI/AAAAAAAAAEU/yeo3Dzv4b2Y/s640/10-10.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;В моем случае это уровень 1, число активных и резервных разделов (2 и 0) оставляем по умолчанию. Далее выбираем разделы которые будут включены в массив. Важно отметить, что разделы должны быть одного размера, в моем случае md0=sda1+sdb1, md1=sda2+sdb2, md2=sda3+sdb3. Выделение нужных разделов производится нажатием клавиши пробел, причем последовательно, то есть выбрали разделы sda1 и sdb1 нажали продолжить, и так пока все массивы не будут созданы.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Теперь необходимо задать файловые системы нашим массивам:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-37GBTzb5y-g/Th8WFSDKppI/AAAAAAAAAEc/U1ZqMIlC9Kw/s1600/11-11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://1.bp.blogspot.com/-37GBTzb5y-g/Th8WFSDKppI/AAAAAAAAAEc/U1ZqMIlC9Kw/s640/11-11.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-h-t2iRRTjws/Th8WFvY8JbI/AAAAAAAAAEk/nq39w_y6C40/s1600/12-12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://4.bp.blogspot.com/-h-t2iRRTjws/Th8WFvY8JbI/AAAAAAAAAEk/nq39w_y6C40/s640/12-12.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Zp-dyqvhDTM/Th8WFrlEx-I/AAAAAAAAAEs/14r37b7glxo/s1600/13-13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://4.bp.blogspot.com/-Zp-dyqvhDTM/Th8WFrlEx-I/AAAAAAAAAEs/14r37b7glxo/s640/13-13.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Завершаем установку и  записываем изменения на диск:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-MJp58w2Jgpg/Th8WRp2yooI/AAAAAAAAAE0/dKIBe3e4M8Y/s1600/15-15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="484" src="http://2.bp.blogspot.com/-MJp58w2Jgpg/Th8WRp2yooI/AAAAAAAAAE0/dKIBe3e4M8Y/s640/15-15.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Устанавливаем GRUB. Во время установки GRUB автоматически предложит установить себя так же и на второй диск, на тот случай если первый выйдет из строя:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-QqPVfDiSrfk/Th8WcR0qoUI/AAAAAAAAAE8/YmWtTsH131o/s1600/17-17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="478" src="http://1.bp.blogspot.com/-QqPVfDiSrfk/Th8WcR0qoUI/AAAAAAAAAE8/YmWtTsH131o/s640/17-17.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-fodRX2Xqaso/Th8WccGEtXI/AAAAAAAAAFE/UAa35MJiQss/s1600/18-18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="476" src="http://3.bp.blogspot.com/-fodRX2Xqaso/Th8WccGEtXI/AAAAAAAAAFE/UAa35MJiQss/s640/18-18.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;После установки.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Посмотрим что же получилось :&lt;/div&gt;&lt;blockquote&gt;fl@virtual-ubuntu:~$ grep /dev/md /etc/fstab &lt;br /&gt;# / was on /dev/md0 during installation&lt;br /&gt;# /home was on /dev/md1 during installation&lt;br /&gt;# swap was on /dev/md2 during installation&lt;/blockquote&gt;&lt;blockquote&gt;fl@virtual-ubuntu:~$ df -h / /home&lt;br /&gt;Файловая система            Разм  Исп  Дост  Исп% смонтирована на&lt;br /&gt;/dev/md0                   6,2G  2,8G  3,2G  47% /&lt;br /&gt;/dev/md1                   2,8G   71M  2,6G   3% /home&lt;/blockquote&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Статус всех RAID устройств можно проверить в файле /proc/mdstat , где md(n) устройство содержит два sd(x,n) диска и каждый md(n) должен иметь статус «2/2» и «UU». Более подробную информацию предоставить утилита mdadm:&lt;/div&gt;&lt;blockquote&gt;fl@virtual-ubuntu:~$ cat /proc/mdstat &lt;br /&gt;Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] &lt;br /&gt;md1 : active raid1 sdb2[1] sda2[0]&lt;br /&gt;2929600 blocks [2/2] [UU]&lt;br /&gt;&lt;br /&gt;md2 : active raid1 sdb5[1] sda5[0]&lt;br /&gt;1010624 blocks [2/2] [UU]&lt;br /&gt;&lt;br /&gt;md0 : active raid1 sda1[0] sdb1[1]&lt;br /&gt;6542272 blocks [2/2] [UU]&lt;/blockquote&gt;&lt;blockquote&gt;fl@virtual-ubuntu:~$ sudo mdadm --query --detail /dev/md1&lt;br /&gt;/dev/md1:&lt;br /&gt;Version : 00.90&lt;br /&gt;Creation Time : Thu Jul  7 20:19:42 2011&lt;br /&gt;Raid Level : raid1&lt;br /&gt;Array Size : 2929600 (2.79 GiB 3.00 GB)&lt;br /&gt;Used Dev Size : 2929600 (2.79 GiB 3.00 GB)&lt;br /&gt;Raid Devices : 2&lt;br /&gt;Total Devices : 2&lt;br /&gt;Preferred Minor : 1&lt;br /&gt;Persistence : Superblock is persistent&lt;br /&gt;&lt;br /&gt;Update Time : Wed Jul 13 18:00:07 2011&lt;br /&gt;State : clean&lt;br /&gt;Active Devices : 2&lt;br /&gt;Working Devices : 2&lt;br /&gt;Failed Devices : 0&lt;br /&gt;Spare Devices : 0&lt;br /&gt;&lt;br /&gt;UUID : 202c108c:faad7fbf:e24ab7c2:c0e59284&lt;br /&gt;Events : 0.34&lt;br /&gt;&lt;br /&gt;Number   Major   Minor   RaidDevice State&lt;br /&gt;0       8        2        0      active sync   /dev/sda2&lt;br /&gt;1       8       18        1      active sync   /dev/sdb2&lt;/blockquote&gt;Для полноты эффекта с эмулируем отказ одного из жестких дисков, система загрузится, но /proc/mdstat покажет, что /dev/sdb1 /dev/sdb2 и /dev/sdb3 исчезли, а /dev/md(n) примет статус «degraded».&lt;br /&gt;&lt;blockquote&gt;fl@virtual-ubuntu:~$ cat /proc/mdstat &lt;br /&gt;Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] &lt;br /&gt;md2 : active raid1 sda5[0]&lt;br /&gt;1010624 blocks [2/1] [U_]&lt;br /&gt;&lt;br /&gt;md1 : active raid1 sda2[0]&lt;br /&gt;2929600 blocks [2/1] [U_]&lt;br /&gt;&lt;br /&gt;md0 : active raid1 sda1[0]&lt;br /&gt;6542272 blocks [2/1] [U_]&lt;/blockquote&gt;Заменяем жесткий диск на новый, теперь его надо подготовить для добавления в рейд, для этого копируем разметку с живого жесткого диска на новый:&lt;br /&gt;&lt;blockquote&gt;fl@virtual-ubuntu:~$ sudo sfdisk -d /dev/sda | sfdisk /dev/sdb&lt;/blockquote&gt;&amp;nbsp;И убедимся в идентичности разметки дисков:&lt;br /&gt;&lt;blockquote&gt;# fdisk -l&lt;/blockquote&gt;Теперь добавим новый диск в массив:&lt;br /&gt;&lt;blockquote&gt;fl@virtual-ubuntu:~$ sudo mdadm --add /dev/md0 /dev/sdb1&lt;br /&gt;mdadm: added /dev/sdb1&lt;/blockquote&gt;&lt;blockquote&gt;fl@virtual-ubuntu:~$ sudo mdadm --add /dev/md1 /dev/sdb2&lt;br /&gt;mdadm: added /dev/sdb1&lt;/blockquote&gt;&lt;blockquote&gt;fl@virtual-ubuntu:~$ sudo mdadm --add /dev/md2 /dev/sdb3&lt;br /&gt;mdadm: added /dev/sdb1&lt;/blockquote&gt;Смотрим результат восстановления:&lt;br /&gt;&lt;blockquote&gt;fl@virtual-ubuntu:~$ cat /proc/mdstat&lt;br /&gt;md2 : active raid1 sda5[0]&lt;br /&gt;1010624 blocks [2/1] [U_]&lt;br /&gt;resync=DELAYED&lt;br /&gt;&lt;br /&gt;md1 : active raid1 sdb2[2] sda2[0]&lt;br /&gt;2929600 blocks [2/1] [U_]&lt;br /&gt;resync=DELAYED&lt;br /&gt;&lt;br /&gt;md0 : active raid1 sdb1[2] sda1[0]&lt;br /&gt;6542272 blocks [2/1] [U_]&lt;br /&gt;[===&gt;.................]  recovery = 15.7% (1033280/6542272) finish=3.2min speed=27881K/sec&lt;br /&gt;&lt;br /&gt;unused devices: &lt;none&gt;&lt;/blockquote&gt;&lt;/div&gt;</description><link>http://blog.flop.im/2011/07/raid-1-ubuntu.html</link><author>noreply@blogger.com (flop)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-oBvMJDZkTs8/Tca3dQwCcmI/AAAAAAAAABQ/u12fiU0yEPk/s72-c/RAID1.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-221544032771498191.post-5082828224022968641</guid><pubDate>Tue, 05 Apr 2011 19:01:00 +0000</pubDate><atom:updated>2011-07-05T13:48:51.462-07:00</atom:updated><title>Переезд</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-LXNhE2dMtC4/TZtlm6V2Q9I/AAAAAAAAABA/NGxOXaOvWrI/s1600/green-moving-tips.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" class="alignnone" src="http://1.bp.blogspot.com/-LXNhE2dMtC4/TZtlm6V2Q9I/AAAAAAAAABA/NGxOXaOvWrI/s1600/green-moving-tips.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Доброго времени суток всем, наконец то я более или менее привел свои дела в порядок и смог засесть за свои записи. Почти год я ничего не писал, в литературном смысле конечно же, на это был целый ряд причин о которых я скорее всего упомяну в своем лытдыбр — ом бложике. Почему не здесь? Все просто, решил что не стоит мешать эмоции и тематический материал, а тем у меня накопилось достаточное количество.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;Как Вы все заметили изменения коснулись прежде всего платформы, смена отдельно хостящегося Wordpress на облачный Blogger. Wordpress  безусловно отличная платформа для ведения блога, но его раздутость, местами полная неадекватность при обновлении от версии к версии, стала тяжелым испытанием для моих нервов. Если честно, то к Blogger я приглядывался давно, да же пару раз использовал его как блокнотик для записей коротких житейских заметок, теперь же для этого я использую posterous.com . Шаблон решил адаптировать от wordpress темы и тут то меня ждало первое испытание в виде своеобразного, а местами да же своенравного, шаблонизатора платформы Blogger. Пришлось делать несколько финтов ушами,  не все и не везде заводилось из коробки, некоторые элементы интерфейса выглядят не так как планировалось. В ближайшее время доведу внешний вид до ума, прикреплю подсветку синтаксиса, и потихонечку начну заполнять блог в силу своих навыков. Так что далеко не расходимся, будет интересно.&lt;/div&gt;</description><link>http://blog.flop.im/2011/04/blog-post.html</link><author>noreply@blogger.com (flop)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-LXNhE2dMtC4/TZtlm6V2Q9I/AAAAAAAAABA/NGxOXaOvWrI/s72-c/green-moving-tips.jpg' height='72' width='72'/><thr:total>0</thr:total></item></channel></rss>