<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[..::: ASAKASINSKY | blog :::..]]></title>
  <link href="http://asakasinsky.ru/atom.xml" rel="self"/>
  <link href="http://asakasinsky.ru/"/>
  <updated>2013-10-20T20:48:05+04:00</updated>
  <id>http://asakasinsky.ru/</id>
  <author>
    <name><![CDATA[asakasinsky]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[О нумерации ночных часов]]></title>
    <link href="http://asakasinsky.ru/2013/10/20/o-numieratsii-nochnykh-chasov/"/>
    <updated>2013-10-20T19:04:00+04:00</updated>
    <id>http://asakasinsky.ru/2013/10/20/o-numieratsii-nochnykh-chasov</id>
    <content type="html"><![CDATA[<p>Сегодня понял справедливость идеи Ильи Бирмана <a href="http://ilyabirman.ru/meanwhile/2007/06/01/2/">«О нумерации ночных часов»</a>. Я веду отчёт о реализованных планах за прошедший день. Отчётность сугубо личная, и никто кроме меня её не видит. Нужна она для анализа узких мест в планировании.</p>

<p>Отчёт за вчера выставлял за полночь. То есть сегодня ночью. Время отчёта за вчера относится уже к дню следующему, и, когда я буду смотреть в общем списке записей, его не будет видно. Зато в следующих сутках отчётов будет аж целых два.</p>

<p>Странная ситуация. Можно конечно скорректировать время, но это нарушит сам принцип системы, то, ради чего я её и веду. Поменять число тоже бы означало нарушение порядка следования записей.
Тут меня и осенило, как было бы клёво, если бы Day One позволял ввести «неправильное» время. Сразу всё стало бы на свои места. Визуально было понятно какой отчёт за какой день, и было бы понятно среди записей этого числа, что что я отклонился от намеченного графика, так как отчётная запись была бы с временной меткой, и пусть в этой метке было бы значение 24:34. Я бы понял.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Пасхалка от Apple]]></title>
    <link href="http://asakasinsky.ru/2013/08/27/paskhalka-ot-apple/"/>
    <updated>2013-08-27T10:41:00+04:00</updated>
    <id>http://asakasinsky.ru/2013/08/27/paskhalka-ot-apple</id>
    <content type="html"><![CDATA[<p>Как известно, в iOS6 присутствует помощник Siri (или помощница, если угодно). Также известно, что по-русски она ни в зуб ногой. Зато с ней можно упражнятся в английском произношении в отсутствии рядом носителя языка, что, собственно, весьма и весьма интересный вариант. К чему это я клоню? К тому, что дернул меня лукавый отдать ей команду: &ndash; Ok, glass.<br/>
Siri: &ndash; I&rsquo;m not Glass. And i&rsquo;m just fine with that.<br/>
Меня это удивило, и я повторил:  &ndash; Ok, glass.<br/>
Siri: &ndash; very funny, Василий. I mean, not funny &ldquo;ha-ha&rdquo;, but funny<br/>
Эта фраза просто убила меня. Я полез в интернет, и оказалось, что сегодня (именно сегодня, блин) таким умным и находчивым был не только я. И об этом за последние *дцать часов уже не написал, наверно только самый ленивый. Вот так вот.</p>

<p>P.S Случай с «юморящей» Siri напомнил мне публичное открытие Яндекс-переводчика. Стыдно, конечно признаться, но одной из первых фраз, переведенных ради теста была «..ал я ваш яндекс», на что я получил ответ переводчика что-то вроде «I fucked your yahoo».</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[HTML - атрибут rel]]></title>
    <link href="http://asakasinsky.ru/2013/08/22/html-atribut-rel/"/>
    <updated>2013-08-22T05:05:00+04:00</updated>
    <id>http://asakasinsky.ru/2013/08/22/html-atribut-rel</id>
    <content type="html"><![CDATA[<p>Внезапно открыл что атрибут тэга «a» — «rel» является <a href="http://www.w3.org/TR/2012/WD-html5-20121025/links.html#attr-hyperlink-rel"><em>space-separated set</em></a>. А значит это, что мы вполне можем использовать несколько значений, разделенных пробелом.<br/>
Пример:</p>

<pre><code>&lt;a href="http://asakasinsky.ru/chapter/1" rel="chapter next prefetch"&gt;Глава первая&lt;/a&gt;
</code></pre>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Нашел «пасхалку» от Яндекс]]></title>
    <link href="http://asakasinsky.ru/2013/06/14/nashiel-paskhalku-ot-iandieks/"/>
    <updated>2013-06-14T01:01:00+04:00</updated>
    <id>http://asakasinsky.ru/2013/06/14/nashiel-paskhalku-ot-iandieks</id>
    <content type="html"><![CDATA[<p>В связи с выходом iOS7 понадобилось мне понаблюдать за результатами выдачи поисковиков по запросу «ios7 css3». Люблю я понаблюдать за полётом мыслей у верстальщиков. Из них можно узнать весьма много интересного и полезного.</p>

<!--more-->


<p>В течении двух дней наблюдал вручную, пришёл к выводу, что дело это весьма рутинное, так как картина выдачи в течении этого времени практически не менялась. Процентов 70 выдачи занято <a href="http://recombu.com/mobile/interactive/iphone-5s-ios7-concept/">вот этим концептом</a> , построенном на чистом css, html и js. Интересного пока мало. Например, в сообществе jQuery-mobile уже задумались над соответствующей кастомизацией внешнего вида, а на StackOverflow появился вопрос  о том, как можно сделать блюр, как в iOS7.</p>

<p>Вернёмся к рутине. На мой взгляд ничто лучше python для помощи в рутинной работе нет. И, для тренировочки, чтобы вспомнить как разбирать html, я замутил небольшой скриптик, берущий погоду с Яндекса. Очень сильно удивился, когда получил ошибку связанную с кодировкой и полез смотреть в заголовки, передаваемые сервером Яндекса чтобы узреть эту самую кодировку. А как в Python это сделать? Правильно, вывести на печать содержимое &ldquo;content-type
&rdquo; ответа, полученного с помощью urllib2.  И тут я тоже удивился, так как в содержимом явного указания кодировки не было. Чёрт! Пришлось распечатать весь список, содержащий заголовки.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>import urllib2
</span><span class='line'>page = urllib2.urlopen('http://pogoda.yandex.ru/moscow/')
</span><span class='line'>print list(page.headers)</span></code></pre></td></tr></table></div></figure>


<p>Получил</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>['transfer-encoding', 'set-cookie', 'expires', 'server', 'connection', 'date', 'x-konkurentam', 'content-type']</span></code></pre></td></tr></table></div></figure>


<p>Видно пасхалку? Нет? Давайте распечатаем заголовок &lsquo;x-konkurentam&rsquo;.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>print page.headers['x-konkurentam']</span></code></pre></td></tr></table></div></figure>


<p>Получаем:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>Preved</span></code></pre></td></tr></table></div></figure>


<p>Это напомнило мне байку про приглашение на работу в заголовках telnet или smtp сервера Яндекс.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Zepto. Подборка плагинов]]></title>
    <link href="http://asakasinsky.ru/2013/05/22/zepto-podborka-plaghinov/"/>
    <updated>2013-05-22T21:20:00+04:00</updated>
    <id>http://asakasinsky.ru/2013/05/22/zepto-podborka-plaghinov</id>
    <content type="html"><![CDATA[<p>На этой странице размещены ссылки на плагины, имеющие отношение к <a href="https://github.com/madrobby/zepto">Zepto</a>. Список будет пополняться по мере нахождения оных.</p>

<!--more-->


<p><a href="https://github.com/HenrikJoreteg/ICanHaz.js">ICanHaz.js</a>
A clean solution for templating with Mustache.js and jQuery or Zepto</p>

<p><a href="https://github.com/tomlongo/Flickable.js">Flickable.js</a>
Flickable: A Zepto Plugin to Enable Touch Gestures on Any HTML Element</p>

<p><a href="https://github.com/james2doyle/zepto-dragswap">zepto-dragswap</a>
a micro plugin for having swappable/dragable/sortable lists and grids</p>

<p><a href="https://github.com/dgileadi/zepto-page-transitions">zepto-page-transitions</a>
HTML5 Page Transitions similar to JQuery Mobile page transitions, but standalone (13k) and using Zepto.js</p>

<p><a href="https://github.com/suprMax/ZeptoScroll">ZeptoScroll</a>
Zepto window scroll plugin</p>

<p><a href="https://github.com/jcemer/zepto-range">zepto-range</a>
Input range implementation to works with touch using Zepto</p>

<p><a href="https://github.com/dcompute/Zepto-Cookie">Zepto-Cookie</a>
Zepto plugin for reading, setting, and deleting cookies.</p>

<p><a href="https://github.com/ConradIrwin/zepto-ghostclick">zepto-ghostclick</a>
A Zepto plugin to help avoid ghost clicks</p>

<p><a href="https://github.com/gokercebeci/canvasResize">canvasResize</a>
Javascript Canvas Resize Plugin. It can work both with jQuery and Zepto. It&rsquo;s compatible with iOS6 and Android 2.3+</p>

<p><a href="https://github.com/mkuklis/zepto.dragdrop.js">zepto.dragdrop.js</a>
Drag &amp; Drop for Zepto with touch and mouse events.</p>

<p><a href="https://github.com/incuna/zepto.labelsFix">zepto.labelsFix</a>
Zepto plugin to ensures that labels will highlight the correct input when touched</p>

<p><a href="https://github.com/ptech/zepto-tooltip">zepto-tooltip</a>
Responsive and Mobile-Friendly Tooltip</p>

<p><a href="https://github.com/dcompute/Zepto-CSRF">Zepto-CSRF</a>
Zepto plugin to set X-CSRFToken request header prior to making AJAX requests.</p>

<p><a href="https://github.com/vineel-adusumilli/zepto-console">zepto-console</a>
Zepto.js version of Chris Done&rsquo;s jquery-console</p>

<p><a href="https://github.com/kenvunz/zepto-deviceready">zepto-deviceready</a>
&ldquo;deviceready&rdquo; plugin for Zepto</p>

<p><a href="https://github.com/dcompute/Zepto-Detect">Zepto-Detect</a>
Detect modern browser and device features.</p>

<p><a href="https://github.com/slawekkolodziej/Highcharts-Zepto">Highcharts-Zepto</a>
Zepto.JS adapter for Highcharts</p>

<p><a href="https://github.com/netotaku/zepto-drag-and-drop.js">zepto-drag-and-drop.js</a>
Drag &amp; Drop for Zepto ( or jQuery ) designed for touch but works with mouse events ( work in progress )</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[grunt-recess ошибка Parser error]]></title>
    <link href="http://asakasinsky.ru/2013/05/19/grunt-recess-oshibka-parser-error/"/>
    <updated>2013-05-19T00:13:00+04:00</updated>
    <id>http://asakasinsky.ru/2013/05/19/grunt-recess-oshibka-parser-error</id>
    <content type="html"><![CDATA[<p><strong>Проблема</strong>: grunt-recess споткнулся на строчке</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=0,OffY=1,Color=#ccffffff,Positive=true);</span></code></pre></td></tr></table></div></figure>


<p>Ошибка <em>Parser error</em>. Путём проб выявил неприязнь линтера к использованию альфа-канала в HEX-формате цвета. Нашёл решение на <a href="https://github.com/cloudhead/less.js/issues/734">https://github.com/cloudhead/less.js/issues/734</a></p>

<p><strong>Решение</strong>:</p>

<p>Заставить линтер LESS пропустить значение <em>filter</em>.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>filter:~"progid:DXImageTransform.Microsoft.dropshadow(OffX=0,OffY=1,Color=#ccffffff,Positive=true)";</span></code></pre></td></tr></table></div></figure>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Emulate Touch Events]]></title>
    <link href="http://asakasinsky.ru/2013/04/19/emulate-touch-events/"/>
    <updated>2013-04-19T00:16:00+04:00</updated>
    <id>http://asakasinsky.ru/2013/04/19/emulate-touch-events</id>
    <content type="html"><![CDATA[<p>Оказывается в Chrome вполне себе можно проверять работу веб-приложений.</p>

<ol>
<li>Открываем Инструменты Разработчика ( Developer Tools ), в правом нижнем углу жмём на шестеренку, и выбираем вкладку Overrides</li>
<li>Видим, что можно включить поддержку Touch, сменить User-Agent на нужный, указать разрешение и пр.</li>
</ol>


<p>Впрочем от необходимости иметь устройства этот способ вовсе не освобождает. Например, при разработке одного приложения мной было замечено уменьшение ширины viewport на 10пикс. Может из-за того, что для разработки использую Chrome Canary, а может где в коде накосячил, но на iPhone всё было ок.
Вывод простой: для черновой проработки и разработки самое то. Хотя есть ещё нюанс: ширина браузера. Chrome не даст изменить ширину окна до 320пикс, тулбар мешает. Решение простое, открыть окно, как Popup. В этом режиме тулбара нет. Идём <a href="https://chrome.google.com/webstore/detail/ncppfjladdkdaemaghochfikpmghbcpc">сюда</a> и ставим расширение «Open-as-Popup». Оно и даст возможность открывать вкладки как поп-апы.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Подготовка рабочего окружения на Mac OS X Mountain Lion для веб разработчика]]></title>
    <link href="http://asakasinsky.ru/2012/11/11/podghotovka-rabochiegho-okruzhieniia-na-mac-os-x-mountain-lion-dlia-vieb-razrabotchika/"/>
    <updated>2012-11-11T01:36:00+04:00</updated>
    <id>http://asakasinsky.ru/2012/11/11/podghotovka-rabochiegho-okruzhieniia-na-mac-os-x-mountain-lion-dlia-vieb-razrabotchika</id>
    <content type="html"><![CDATA[<p><img class="center" src="http://screenshots.en.sftcdn.net/en/scrn/3340000/3340291/mountain-lion-skin-pack-01-100x100.png" title="Mac OS X Mountain Lion" alt="Mac OS X Mountain Lion"></p>

<h1>Внимание! Статья устарела!</h1>

<p>Актуальные правки по мере возможности ведутся мной <a href="https://github.com/asakasinsky/Development-book">тут</a>. По окончанию редактуры будет оформлен отдельный пост.</p>

<blockquote><p>Эта статья что-то вроде памятки, потому многое не развернуто. Если возникнут вопросы, задавайте в комментариях, отвечу.</p></blockquote>

<!--more-->


<h2>Приложения</h2>

<ul>
<li>Chrome</li>
<li>Firefox</li>
<li>Opera</li>
<li>iTerm</li>
<li>FileZilla</li>
<li>ImageOptim</li>
</ul>


<h2>Редактор</h2>

<figure class='code'><figcaption><span>«Sublime Text» — делаем запуск из терминала. </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># Нам нужен будет доступ к этой папке.   </span>
</span><span class='line'>sudo chown -R <span class="sb">`</span>whoami<span class="sb">`</span> /usr/local
</span><span class='line'><span class="c"># Проверяем работу CLI  </span>
</span><span class='line'>open /Applications/Sublime<span class="se">\ </span>Text<span class="se">\ </span>2.app/Contents/SharedSupport/bin/subl
</span><span class='line'><span class="c"># Если открылся Sublime Text, значит все ОК. Создадим симлинк на subl:  </span>
</span><span class='line'>sudo ln -s /Applications/Sublime<span class="se">\ </span>Text<span class="se">\ </span>2.app/Contents/SharedSupport/bin/subl /usr/local/bin/sublime
</span><span class='line'><span class="c"># Мягко примем изменения:  </span>
</span><span class='line'>touch ~/.bashrc
</span><span class='line'>open ~/.bashrc
</span><span class='line'><span class="c"># Вносим  в файл  </span>
</span><span class='line'><span class="c"># --------------------------------------  </span>
</span><span class='line'><span class="nb">export </span><span class="nv">PATH</span><span class="o">=</span>/usr/local/bin:<span class="nv">$PATH</span>
</span><span class='line'><span class="c"># --------------------------------------  </span>
</span><span class='line'><span class="c"># Примем изменения, не выходя из системы  </span>
</span><span class='line'><span class="nb">source</span> ~/.bashrc
</span><span class='line'>sudo chmod 0777 /usr/local/bin
</span><span class='line'><span class="c"># Тестируем  </span>
</span><span class='line'>sublime имя-файла-или-каталога
</span></code></pre></td></tr></table></div></figure>


<h2>Переключаемся на Zshell</h2>

<figure class='code'><figcaption><span>Zshell </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh
</span><span class='line'>touch ~/.zshrc
</span><span class='line'>sublime ~/.zshrc
</span><span class='line'><span class="c"># Вносим в файл</span>
</span><span class='line'><span class="c"># --------------------------------------  </span>
</span><span class='line'><span class="nv">ZSH</span><span class="o">=</span><span class="nv">$HOME</span>/.oh-my-zsh
</span><span class='line'><span class="nv">ZSH_THEME</span><span class="o">=</span><span class="s2">&quot;kphoen&quot;</span>
</span><span class='line'><span class="nv">plugins</span><span class="o">=(</span>git osx rails ruby github node npm brew<span class="o">)</span>
</span><span class='line'><span class="nb">source</span> <span class="nv">$ZSH</span>/oh-my-zsh.sh
</span><span class='line'><span class="nb">export</span>&amp;nbsp;PATH<span class="o">=</span>/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/mysql/bin:/usr/X11/bin
</span><span class='line'><span class="c"># --------------------------------------</span>
</span></code></pre></td></tr></table></div></figure>


<h2>Устанавливаем Xcode Command Line Tools</h2>

<p>Xcode > Preferences > Downloads > Command Line Tools</p>

<figure class='code'><figcaption><span>Command Line Tools </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># Проверяем:   </span>
</span><span class='line'>gcc --version
</span><span class='line'><span class="c"># Если видим 686-apple-darwin…., то все ОК</span>
</span></code></pre></td></tr></table></div></figure>


<h2>Ставим X11</h2>

<p><a href="http://xquartz.macosforge.org/trac/wiki">Качаем</a> инсталлятор и ставим.</p>

<figure class='code'><figcaption><span>X11 </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># Ставим симлинк:  </span>
</span><span class='line'>sudo ln -s /opt/X11 /usr/X11
</span></code></pre></td></tr></table></div></figure>


<h2>Ставим Homebrew — пакетный менеджер</h2>

<p><code>
ruby &lt;(curl -fsSk <a href="https://raw.github.com/mxcl/homebrew/go">https://raw.github.com/mxcl/homebrew/go</a>)
</code><br/>
Следуем инструкциям</p>

<p><code>
brew doctor
</code><br/>
Если получаем <strong>Your system is raring to brew</strong>, то все ОК.</p>

<h2>Ставим Git</h2>

<figure class='code'><figcaption><span>Git </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>brew install git
</span><span class='line'><span class="c"># Проверяем:</span>
</span><span class='line'>which git
</span><span class='line'>
</span><span class='line'><span class="c"># Конфиг:  </span>
</span><span class='line'>touch ~/.gitconfig
</span><span class='line'>sublime ~/.gitconfig
</span><span class='line'><span class="c"># Вносим в файл</span>
</span><span class='line'><span class="c"># --------------------------------------  </span>
</span><span class='line'><span class="o">[</span>user<span class="o">]</span>
</span><span class='line'>  <span class="nv">name</span> <span class="o">=</span> Имя, на латинице
</span><span class='line'>  <span class="nv">email</span> <span class="o">=</span> email
</span><span class='line'><span class="o">[</span>github<span class="o">]</span>
</span><span class='line'>  <span class="nv">user</span> <span class="o">=</span> ваше имя на github
</span><span class='line'><span class="o">[</span>core<span class="o">]</span>
</span><span class='line'>  <span class="nv">editor</span> <span class="o">=</span> sublime -w
</span><span class='line'><span class="o">[</span>color<span class="o">]</span>
</span><span class='line'>  <span class="nv">ui</span> <span class="o">=</span> <span class="nb">true</span>
</span><span class='line'><span class="c"># --------------------------------------</span>
</span></code></pre></td></tr></table></div></figure>


<h2>Ставим RVM для Ruby 1.9.3</h2>

<figure class='code'><figcaption><span>RVM </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>curl -L https://get.rvm.io | bash -s stable --ruby
</span><span class='line'><span class="c"># Вбиваем:</span>
</span><span class='line'><span class="nb">type </span>rvm | head -1
</span><span class='line'>
</span><span class='line'><span class="c"># Если не видим rvm is a function, то</span>
</span><span class='line'><span class="nb">echo</span> <span class="s1">&#39;[[ -s &quot;$HOME/.rvm/scripts/rvm&quot; ]] &amp;&amp; . &quot;$HOME/.rvm/scripts/rvm&quot; # Load RVM function&#39;</span> &gt;&gt; ~/.zlogin
</span><span class='line'><span class="nb">source</span> ~/.zlogin
</span><span class='line'>
</span><span class='line'><span class="c">#Проверяем: </span>
</span><span class='line'><span class="nb">type </span>rvm | head -1
</span></code></pre></td></tr></table></div></figure>


<h2>Ставим Ruby 1.9.3</h2>

<figure class='code'><figcaption><span>Ruby </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># Обновляем RVM до последней версии:</span>
</span><span class='line'>rvm get head
</span><span class='line'>
</span><span class='line'><span class="c">#Подготовка и установка:</span>
</span><span class='line'>rvm requirements
</span><span class='line'>brew update
</span><span class='line'>brew install libksba
</span><span class='line'>brew tap homebrew/dupes
</span><span class='line'>brew install autoconf automake apple-gcc42
</span><span class='line'>rvm pkg install openssl
</span><span class='line'>rvm install 1.9.3 <span class="c"># или rvm reinstall all --force если у вас уже установлен Ruby)</span>
</span><span class='line'>
</span><span class='line'>sudo ln -s /usr/local/bin/gcc-4.2 /usr/bin/gcc-4.2
</span><span class='line'><span class="c"># Говорим, чтобы использовалась именно эта версия:</span>
</span><span class='line'>rvm use 1.9.3 --default
</span><span class='line'>
</span><span class='line'><span class="c">#Проверяем:</span>
</span><span class='line'>ruby -v
</span></code></pre></td></tr></table></div></figure>


<h2>Сразу поставим Octopress</h2>

<figure class='code'><figcaption><span>Octopress </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nb">cd</span> путь/к/директории-куда-хотим-поставить-octopress
</span><span class='line'>git clone git://github.com/imathis/octopress.git octopress
</span><span class='line'>rvm --create use 1.9.3@octopress
</span><span class='line'>rvm use 1.9.3@octopress
</span><span class='line'><span class="nb">cd </span>octopress
</span><span class='line'><span class="c"># На вопрос доверять ли файлу .rvmrc говорим &#39;y&#39; или &#39;yes&#39;</span>
</span><span class='line'>gem install bundler
</span><span class='line'>bundle install
</span><span class='line'><span class="c"># Устанавливаем текущую тему Octopress</span>
</span><span class='line'>rake install
</span></code></pre></td></tr></table></div></figure>


<h2>Ставим нужные пакеты</h2>

<p><code>brew install mc git ack wget curl memcached libmemcached readline sqlite gdbm pkg-config</code></p>

<h2>Ставим Python</h2>

<figure class='code'><figcaption><span>Python </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>brew install python --framework --universal
</span><span class='line'>sublime ~/.zshrc <span class="c"># Вносим в файл</span>
</span><span class='line'><span class="c"># --------------------------------------</span>
</span><span class='line'>  <span class="nb">export </span><span class="nv">PATH</span><span class="o">=</span>/usr/local/share/python:<span class="nv">$PATH</span>
</span><span class='line'>    <span class="k">if</span> <span class="o">[</span> -d <span class="s2">&quot;$HOME/bin&quot;</span> <span class="o">]</span> ; <span class="k">then</span>
</span><span class='line'><span class="k">      </span><span class="nb">export </span><span class="nv">PATH</span><span class="o">=</span><span class="s2">&quot;$HOME/bin:$PATH&quot;</span>
</span><span class='line'>    <span class="k">fi</span>
</span><span class='line'><span class="c"># --------------------------------------</span>
</span><span class='line'><span class="c"># Меняем симлинки</span>
</span><span class='line'><span class="nb">cd</span> /System/Library/Frameworks/Python.framework/Versions
</span><span class='line'>sudo rm Current
</span><span class='line'>sudo ln -s /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/Current
</span><span class='line'><span class="c"># Ставим pip и virtualenv</span>
</span><span class='line'>easy_install pip
</span><span class='line'>pip install virtualenv
</span><span class='line'>pip install virtualenvwrapper
</span><span class='line'><span class="nb">source</span> /usr/local/share/python/virtualenvwrapper.sh
</span></code></pre></td></tr></table></div></figure>


<h2>Ставим MongoDB</h2>

<figure class='code'><figcaption><span>MongoDB </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>brew install mongodb
</span><span class='line'>mkdir -p ~/Library/LaunchAgents
</span><span class='line'>ln -s /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents/
</span><span class='line'>launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
</span><span class='line'>
</span><span class='line'><span class="c"># Проверка:</span>
</span><span class='line'>mongo
</span></code></pre></td></tr></table></div></figure>


<h2>Ставим MySQL</h2>

<p><code>brew install mysql</code>
Далее следуем инструкции</p>

<h2>Ставим PHP</h2>

<p>Несмотря на наличие интерпретатора PHP в «коробочной поставке» OSX, будем собирать версию PHP из исходников.</p>

<p>Причины:</p>

<ul>
<li>Последняя версия</li>
<li>64-бит</li>
<li><a href="http://habrahabr.ru/post/154663/">mysqlnd</a></li>
<li>Нативная поддержка Юникода</li>
<li>Механизм мониторинга процесса загрузки файла на сервер</li>
<li>Опыт</li>
</ul>


<figure class='code'><figcaption><span>PHP 5.4 </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
<span class='line-number'>59</span>
<span class='line-number'>60</span>
<span class='line-number'>61</span>
<span class='line-number'>62</span>
<span class='line-number'>63</span>
<span class='line-number'>64</span>
<span class='line-number'>65</span>
<span class='line-number'>66</span>
<span class='line-number'>67</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># Необходимые пакеты:  </span>
</span><span class='line'>brew install gmp gettext icu4c libmcrypt libjpeg libxml2
</span><span class='line'>
</span><span class='line'><span class="nb">cd</span> ~/Downloads/
</span><span class='line'>wget http://ru2.php.net/get/php-5.4.6.tar.bz2/from/ru2.php.net/mirror
</span><span class='line'>mv mirror php-5.4.6.tar.bz2
</span><span class='line'>bunzip2 php-5.4.6.tar.bz2 <span class="o">&amp;&amp;</span> tar xvf php-5.4.6.tar
</span><span class='line'><span class="nb">cd </span>php-5.4.6
</span><span class='line'>
</span><span class='line'>env <span class="nv">EXTRA_LIBS</span><span class="o">=</span><span class="s2">&quot;-lstdc++&quot;</span> ./configure <span class="se">\</span>
</span><span class='line'>--prefix<span class="o">=</span>/usr/local/php <span class="se">\</span>
</span><span class='line'>--with-apxs2<span class="o">=</span>/usr/sbin/apxs <span class="se">\</span>
</span><span class='line'>--with-layout<span class="o">=</span>GNU <span class="se">\</span>
</span><span class='line'>--enable-calendar <span class="se">\</span>
</span><span class='line'>--enable-ftp <span class="se">\</span>
</span><span class='line'>--enable-bcmath <span class="se">\</span>
</span><span class='line'>--enable-mbstring <span class="se">\</span>
</span><span class='line'>--with-icu-dir<span class="o">=</span>/usr/local/Cellar/icu4c/49.1.2 <span class="se">\</span>
</span><span class='line'>--enable-intl <span class="se">\</span>
</span><span class='line'>--enable-sockets <span class="se">\</span>
</span><span class='line'>--enable-soap <span class="se">\</span>
</span><span class='line'>--with-gettext<span class="o">=</span>/usr/local/Cellar/gettext/0.18.1.1 <span class="se">\</span>
</span><span class='line'>--with-bz2 <span class="se">\</span>
</span><span class='line'>--with-zlib <span class="se">\</span>
</span><span class='line'>--enable-zip <span class="se">\</span>
</span><span class='line'>--with-gd <span class="se">\</span>
</span><span class='line'>--with-jpeg-dir <span class="se">\</span>
</span><span class='line'>--with-png-dir<span class="o">=</span>/usr/X11 <span class="se">\</span>
</span><span class='line'>--with-xpm-dir <span class="se">\</span>
</span><span class='line'>--with-freetype-dir<span class="o">=</span>/usr/X11 <span class="se">\</span>
</span><span class='line'>--enable-exif <span class="se">\</span>
</span><span class='line'>--with-gmp <span class="se">\</span>
</span><span class='line'>--with-mcrypt <span class="se">\</span>
</span><span class='line'>--with-mysql<span class="o">=</span>mysqlnd <span class="se">\</span>
</span><span class='line'>--with-mysqli<span class="o">=</span>mysqlnd <span class="se">\</span>
</span><span class='line'>--with-pdo-mysql<span class="o">=</span>mysqlnd <span class="se">\</span>
</span><span class='line'>--with-mysql-sock<span class="o">=</span>/usr/local/var/mysql/mysqld.sock <span class="se">\</span>
</span><span class='line'>--with-curl <span class="se">\</span>
</span><span class='line'>--with-openssl <span class="se">\</span>
</span><span class='line'>--with-libxml-dir<span class="o">=</span>/usr/local/Cellar/libxml2/2.8.0 <span class="se">\</span>
</span><span class='line'>--with-xsl<span class="o">=</span>/usr <span class="se">\</span>
</span><span class='line'>--with-xmlrpc <span class="se">\</span>
</span><span class='line'>--enable-shmop <span class="se">\</span>
</span><span class='line'>--enable-pcntl <span class="se">\</span>
</span><span class='line'>--enable-sysvmsg <span class="se">\</span>
</span><span class='line'>--enable-sysvsem <span class="se">\</span>
</span><span class='line'>--enable-sysvshm
</span><span class='line'>
</span><span class='line'>make <span class="o">&amp;&amp;</span> sudo make install
</span><span class='line'>
</span><span class='line'><span class="c"># Будет предложено сделать тесты, можно согласится</span>
</span><span class='line'>
</span><span class='line'><span class="c"># Переименовываем старую версию</span>
</span><span class='line'>sudo mv /usr/bin/php /usr/bin/osx-php
</span><span class='line'>sudo mv /usr/bin/phar /usr/bin/osx-phar
</span><span class='line'>sudo mv /usr/bin/php-config /usr/bin/osx-php-config
</span><span class='line'>sudo mv /usr/bin/phpize /usr/bin/osx-phpize
</span><span class='line'>
</span><span class='line'><span class="c"># Для удобства создаем символьные ссылки в /usr/local/bin.</span>
</span><span class='line'>
</span><span class='line'>ln -s /usr/local/php/bin/php /usr/local/bin/php ln -s /usr/local/php/bin/pear /usr/local/bin/pear ln -s /usr/local/php/bin/pecl /usr/local/bin/pecl ln -s /usr/local/php/bin/phar.phar /usr/local/bin/phar ln -s /usr/local/php/bin/php-config /usr/local/bin/php-config ln -s /usr/local/php/bin/phpize /usr/local/bin/phpize
</span><span class='line'>
</span><span class='line'><span class="c"># Редактируем php.ini</span>
</span><span class='line'><span class="c"># По этой ссылке </span>
</span><span class='line'><span class="c"># https://gist.github.com/4052783</span>
</span><span class='line'><span class="c"># Находится мой php.ini</span>
</span><span class='line'>sublime /etc/php.ini
</span></code></pre></td></tr></table></div></figure>


<h2>Настраиваем Apache2</h2>

<figure class='code'><figcaption><span>Apache2 </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># Настраиваем виртуальные хосты</span>
</span><span class='line'><span class="c"># Сайтам на локальной машине будет отведена доменная зона .dev</span>
</span><span class='line'><span class="c"># Чуть позже настроим dns сервер, обслуживающий эту доменную зону</span>
</span><span class='line'><span class="c"># Сайты будут располагаться в папке ~/Workspace</span>
</span><span class='line'><span class="c"># Document Root будет в папке ~/Workspace/САЙТ/htdocs</span>
</span><span class='line'><span class="c"># В папку сайта будут складываться логи</span>
</span><span class='line'><span class="c"># Образец моего файла находится тут</span>
</span><span class='line'><span class="c"># https://gist.github.com/4052809</span>
</span><span class='line'>touch ~/Workspace/httpd-vhosts.conf
</span><span class='line'>sublime ~/Workspace/httpd-vhosts.conf
</span><span class='line'>sudo ln -s ~/Workspace/httpd-vhosts.conf /etc/apache2/other
</span><span class='line'>
</span><span class='line'><span class="c"># Чуть-чуть меняем настройки Apache</span>
</span><span class='line'><span class="c"># Образец моего файла находится тут</span>
</span><span class='line'><span class="c"># https://gist.github.com/4052795</span>
</span><span class='line'>sublime <span class="s2">&quot;/etc/apache2/httpd.conf&quot;</span>
</span><span class='line'>
</span><span class='line'><span class="c"># Тестируем конфигурацию</span>
</span><span class='line'>sudo apachectl configtest
</span><span class='line'>sudo apachectl restart <span class="c"># или sudo apachectl graceful</span>
</span></code></pre></td></tr></table></div></figure>


<h2>Настраиваем SSH</h2>

<figure class='code'><figcaption><span>SSH </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># Генерируем rsa-ключи. Полученные публичный и приватный ключи </span>
</span><span class='line'><span class="c"># будут лежать в пап­ке ~/.ssh</span>
</span><span class='line'>ssh-keygen -t rsa -C <span class="s2">&quot;мой-email@mail-bla-bla.com&quot;</span>
</span><span class='line'>
</span><span class='line'><span class="c"># До­ба­вим rsa-ключ аген­ту аутен­ти­фи­ка­ции ssh-agent.</span>
</span><span class='line'>ssh-add ~/.ssh/id_rsa
</span><span class='line'>
</span><span class='line'><span class="c"># Правим права</span>
</span><span class='line'>chmod 700 ~/.ssh
</span><span class='line'>chmod 600 ~/.ssh/id_rsa
</span><span class='line'>chmod 644 ~/.ssh/id_rsa.pub
</span><span class='line'>chmod 644 ~/.ssh/authorized_keys
</span><span class='line'>chmod 644 ~/.ssh/known_hosts
</span><span class='line'>
</span><span class='line'><span class="c"># Выводим на консоль публичный ключ</span>
</span><span class='line'><span class="c"># В настройках GitHub добавляем его содержимое</span>
</span><span class='line'>cat ~/.ssh/id_rsa.pub
</span><span class='line'>
</span><span class='line'><span class="c"># Тестируем соединение</span>
</span><span class='line'><span class="c"># GitHub должен поприветствовать нас, если все получилось</span>
</span><span class='line'>ssh -T git@github.com
</span><span class='line'>
</span><span class='line'><span class="c"># Для удобства добавления ключей на сервера </span>
</span><span class='line'><span class="c"># существует утилита ssh-copy-id, но в OSX она </span>
</span><span class='line'><span class="c"># отсутствует, ставим ее</span>
</span><span class='line'>curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
</span><span class='line'>chmod +x /usr/local/bin/ssh-copy-id
</span><span class='line'>
</span><span class='line'><span class="c"># Теперь можно с легкостью добавлять публичный ключ на сервера (потребуется ввод пароля)</span>
</span><span class='line'>ssh-copy-id user@server <span class="c"># user - имя пользователя (логин), </span>
</span><span class='line'>                        <span class="c"># и server - либо IP сервера, либо доменное имя </span>
</span><span class='line'>
</span><span class='line'><span class="c"># Входим по SSH (ура, без пароля!!!). </span>
</span><span class='line'>ssh user@server         <span class="c"># user - имя пользователя (логин), </span>
</span><span class='line'>                        <span class="c"># и server - либо IP сервера, либо доменное имя </span>
</span></code></pre></td></tr></table></div></figure>


<h2>Настраиваем функцию отправки почты</h2>

<figure class='code'><figcaption><span>Mail </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>sudo mkdir /Library/Server /Library/Server/Mail /Library/Server/Mail/Data /Library/Server/Mail/Data/spool /Library/Server/Mail/Data/spool/maildrop
</span><span class='line'>sudo chown postfix:postdrop /Library/Server/Mail/Data/spool/maildrop
</span><span class='line'>sudo chmod 777 /Library/Server/Mail/Data/spool/maildrop
</span><span class='line'>
</span><span class='line'><span class="c"># Создадим Simple Authentication and Security Layer (SASL) файл.</span>
</span><span class='line'>sudo nano /etc/postfix/sasl_passwd
</span><span class='line'><span class="c"># Вносим в файл, подставляя свои данные</span>
</span><span class='line'><span class="c"># --------------------------------------</span>
</span><span class='line'>smtp.gmail.com:587 your.name@gmail.com:your.password
</span><span class='line'><span class="c"># --------------------------------------</span>
</span><span class='line'>
</span><span class='line'><span class="c"># Сообщаем Postfix, где искать SASL.</span>
</span><span class='line'>sudo postmap /etc/postfix/sasl_passwd
</span><span class='line'>
</span><span class='line'><span class="c"># Конфигурируем службу Postfix</span>
</span><span class='line'>sudo nano /etc/postfix/main.cf
</span><span class='line'><span class="c"># Просто добавляем в конец файла эти строки</span>
</span><span class='line'><span class="c"># --------------------------------------</span>
</span><span class='line'><span class="c"># Minimum Postfix-specific configurations. mydomain_fallback = localhost mail_owner = postfix setgid_group = postdrop relayhost=smtp.gmail.com:587</span>
</span><span class='line'>
</span><span class='line'><span class="c"># Enable SASL authentication in the Postfix SMTP client. smtp_sasl_auth_enable=yes smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd smtp_sasl_security_options=</span>
</span><span class='line'>
</span><span class='line'><span class="c"># Enable Transport Layer Security (TLS), i.e. SSL. smtp_use_tls=yes smtp_tls_security_level=encrypt tls_random_source=dev:/dev/urandom</span>
</span><span class='line'><span class="c"># --------------------------------------</span>
</span><span class='line'>
</span><span class='line'><span class="c"># Запускаем службу Postfix</span>
</span><span class='line'>sudo postfix start
</span><span class='line'>
</span><span class='line'><span class="c"># Если ловим ошибку, то исправляем ее в main.cf (в сообщении будет видно, в какой строке ошибка)</span>
</span><span class='line'><span class="c"># И перезагружаем  службу</span>
</span><span class='line'>sudo postfix reload
</span><span class='line'>
</span><span class='line'><span class="c"># Тестируем</span>
</span><span class='line'>date | mail -s <span class="nb">test </span>your.name@gmail.com
</span></code></pre></td></tr></table></div></figure>


<h2>Установка и настройка DNS сервера dnsmasq</h2>

<figure class='code'><figcaption><span>dnsmasq </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>brew install dnsmasq
</span><span class='line'>
</span><span class='line'>mkdir /usr/local/etc
</span><span class='line'>cp <span class="k">$(</span>brew --prefix dnsmasq<span class="k">)</span>/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf
</span><span class='line'>
</span><span class='line'><span class="c"># Настраиваем на обслуживание доменной зоны .dev</span>
</span><span class='line'>nano /usr/local/etc/dnsmasq.conf
</span><span class='line'><span class="c"># Просто добавляем в конец файла эти строки</span>
</span><span class='line'><span class="c"># --------------------------------------</span>
</span><span class='line'><span class="nv">address</span><span class="o">=</span>/dev/127.0.0.1
</span><span class='line'>listen-address<span class="o">=</span>127.0.0.1
</span><span class='line'><span class="c"># --------------------------------------</span>
</span><span class='line'>
</span><span class='line'><span class="c"># Обеспечиваем автозапуск</span>
</span><span class='line'>sudo cp <span class="k">$(</span>brew --prefix dnsmasq<span class="k">)</span>/homebrew.mxcl.dnsmasq.plist /Library/LaunchDaemons
</span><span class='line'><span class="c"># Загружаем демон</span>
</span><span class='line'>sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
</span><span class='line'><span class="c"># Затачиваем систему</span>
</span><span class='line'>sudo -s
</span><span class='line'>sudo mkdir -p /etc/resolver
</span><span class='line'>sudo <span class="nb">echo</span> <span class="s1">&#39;nameserver 127.0.0.1&#39;</span> &gt; /etc/resolver/dev
</span><span class='line'><span class="c"># Очищаем DNS кэш</span>
</span><span class='line'>dscacheutil -flushcache
</span><span class='line'><span class="c"># Смотрим вывод следующей команды, в резолверах должен появится и наш, dev</span>
</span><span class='line'>scutil --dns
</span></code></pre></td></tr></table></div></figure>


<h2>Ставим Nodejs и grunt с плагинами</h2>

<p><a href="http://habrahabr.ru/post/148274/">grunt.js</a></p>

<figure class='code'><figcaption><span>Nodejs и grunt </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>brew install node
</span><span class='line'>git clone http://github.com/isaacs/npm.git
</span><span class='line'><span class="nb">cd </span>npm
</span><span class='line'>make install
</span><span class='line'>
</span><span class='line'>sublime ~/.zshrc
</span><span class='line'><span class="c"># Вносим в файл</span>
</span><span class='line'><span class="c"># --------------------------------------</span>
</span><span class='line'><span class="nb">export </span><span class="nv">PATH</span><span class="o">=</span>/usr/local/lib/node:/usr/local/share/npm/bin:<span class="nv">$PATH</span>
</span><span class='line'><span class="c"># --------------------------------------</span>
</span><span class='line'>
</span><span class='line'><span class="nb">source</span> ~/.zshrc
</span><span class='line'>
</span><span class='line'>npm install -g grunt npm install grunt-recess
</span><span class='line'>
</span><span class='line'><span class="c"># Или просто копируем заготовку</span>
</span></code></pre></td></tr></table></div></figure>


<h2>Ставим оптимизатор изображений Imgo и плагин для grunt</h2>

<figure class='code'><figcaption><span>Imgo и плагин для grunt </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>brew install exiftool imagemagick optipng libjpeg gifsicle
</span><span class='line'>brew install <span class="s2">&quot;https://raw.github.com/imgo/imgo-tools/master/Formula/pngout.rb&quot;</span>
</span><span class='line'>brew install <span class="s2">&quot;https://raw.github.com/imgo/imgo-tools/master/Formula/defluff.rb&quot;</span>
</span><span class='line'>brew install <span class="s2">&quot;https://raw.github.com/imgo/imgo-tools/master/Formula/cryopng.rb&quot;</span>
</span><span class='line'>brew install <span class="s2">&quot;https://raw.github.com/imgo/imgo-tools/master/Formula/imgo.rb&quot;</span>
</span><span class='line'>npm install -g grunt-imgo
</span></code></pre></td></tr></table></div></figure>



]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Установка OSX Mountain Lion на Acer Aspire 5750g 2414g50]]></title>
    <link href="http://asakasinsky.ru/2012/11/11/ustanovka-osx-mountain-lion-na-acer-aspire-5750g-2414g50/"/>
    <updated>2012-11-11T00:37:00+04:00</updated>
    <id>http://asakasinsky.ru/2012/11/11/ustanovka-osx-mountain-lion-na-acer-aspire-5750g-2414g50</id>
    <content type="html"><![CDATA[<p><strong>Update#1</strong>: Перед установкой прочитайте статью полностью. Со временем выявилась одна интересная вещь: отказался работать iMessage. Почему, не знаю. <strong>iMessage</strong> выдаёт следующую ошибку: <em>«Сервер столкнулся с ошибкой при обработке регистрации»</em>. Решение: обновить <a href="http://asakasinsky.ru/files/2012-11-11/Chameleon-2.2svn-r2170.zip">Chameleon</a> (а в моём рецепте ставилась Chimera) и установить модуль <a href="http://asakasinsky.ru/files/2012-11-11/FileNVRAM.dylib.zip">FileNVRAM.dylib</a>
Посмотреть можно в статье <a href="http://routerjockey.com/2013/01/23/fixing-imessage-on-hackintosh/">Fixing iMessage on Hackintosh</a>.
В принципе, установку Chameleon можно проводить из Chameleon Wizard, главное, чтобы версия Chameleon была не менее 2170.</p>

<hr />

<p><strong>Update#2</strong>: <a href="http://asakasinsky.ru/files/2012-11-11/All_You_Need.zip">Необходимый набор</a> для установки. В комплекте:</p>

<ul>
<li>Chameleon Wizard</li>
<li>Chameleon-2.1-r2069</li>
<li>Chimera 1.11.1</li>
<li>FakeSMC_3.3_all_rev705</li>
<li>Kext Wizard</li>
<li>UniBeast</li>
<li>Необходимый набор Kexts. <strong>Читать статью перед применением!</strong></li>
<li>Моя папка Extra со всем содержимым. Серийник в SMBios.plist поменял</li>
<li>Набор для модификации BIOS &ndash; Modded BIOS &ndash; P5WE0120-UEFI-Power-Advanced-By Akbar</li>
<li>Клавиатурная раскладка для тех, кому нужна тильда на прежнем месте. Сделал с помощью
<a href="http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&amp;id=ukelele">Ukulele</a>. Положить в папку ~/Библиотеки/Keyboard Layouts. Попасть в неё можно через верхнее меню Finder — нажать «Переход»
одновременно с нажатием Alt (Options)</li>
</ul>


<hr />

<p>Для установки потребуется:</p>

<ul>
<li>флеш­ка на 8Гб (бе­рем в бли­жай­шем ма­га­зине)</li>
<li>уста­но­воч­ный об­раз Mountain Lion 10.8 из AppStore.</li>
<li><a href="http://www.tonymacx86.com/downloads.php?do=cat&amp;id=3">UniBeast &ndash; Mountain Lion</a></li>
<li>ра­бо­та­ю­щий Мак или Хак. Ну­жен для под­го­тов­ки флеш­ки. В ин­тер­не­те есть ра­бо­та­ю­щие ре­ше­ния из­го­тов­ле­ния уста­но­воч­ной флеш­ки из под Windows 7.</li>
</ul>


<p>Со­би­ра­ем все ком­по­нен­ты, и, скре­стив паль­цы, на­чи­на­ем.</p>

<!--more-->


<blockquote><p>В этом при­ме­ре под си­сте­му от­да­ем весь жест­кий диск. Для «DualBoot», прак­ти­че­ски все то­же са­мое, но есть неболь­шой ге­мор­рой с Ubuntu.</p></blockquote>

<h2>ВНИМАНИЕ! ВСЕ ДЕЙСТВИЯ В ШАГЕ ПЕРВОМ ПРОВОДЯТСЯ В OSX</h2>

<h3>Шаг 1: «Готовим» установочную флешку</h3>

<ol>
<li>Монтируем образ Mountain Lion, и установщик копируем в «Программы»</li>
<li>Вставляем флешку</li>
<li>Запускаем «Дисковую утилиту»</li>
<li>Слева, в списке дисков и разделов выбираем флешку</li>
<li>Справа, в основном рабочем поле выбираем вкладку «Раздел диска»</li>
<li>Кликаем по списку «Схема разделов» и выбираем «Раздел: 1»</li>
<li>Кликаем «Параметры» и выбираем пункт «Основная загрузочная запись»</li>
<li>В поле «Имя» пишем «OS Mountain Lion»</li>
<li>«Формат» — выбираем «Mac OS Extended (журнальный)»</li>
<li>Жмем «Применить»</li>
<li>Запускаем UniBeast</li>
<li>Жмем «Продолжить», «Продолжить», «Продолжить»</li>
<li>Место установки, естественно, флешка</li>
<li>Выбираем пункт «Laptop Support» если ставим на ноутбук</li>
<li>Вводим пароль администратора и устанавливаем</li>
</ol>


<p>Обя­за­тель­но ждем до кон­ца. Уста­нов­ка за­ни­ма­ет ми­нут 25, и в опре­де­лен­ный мо­мент мо­жет по­ка­зать­ся, что уста­нов­щик за­вис. Ждем!</p>

<h3>Шаг 2: Устанавливаем OS X Mountain Lion</h3>

<p>В боль­шин­стве слу­ча­ев все очень про­сто. За­хо­дим в BIOS, вы­би­ра­ем AHCI ре­жим ра­бо­ты же­сто­го дис­ка. У ме­ня он уже был вы­бран. Ре­ко­мен­ду­ет­ся об­но­вить биос для по­лу­че­ния воз­мож­но­сти от­клю­че­ния дис­крет­ной ви­део­кар­ты. Для это­го по­се­ща­ем сайт Acer, где в раз­де­ле под­держ­ка вы­би­ра­ем нуж­ную мо­дель и ка­ча­ем биос. Для про­шив­ки по­тре­бу­ет­ся ли­бо Windows, ли­бо гуг­лим, как на флеш­ку по­ста­вить DOS и ка­ча­ем «про­ши­валь­щик» для DOS.</p>

<blockquote><p>Я шел немно­го дру­гим пу­тем, ко­то­рый опи­шу чуть ни­же. Я про­шил BIOS мо­ди­фи­ци­ро­ван­ной тре­тьим ли­цом про­шив­кой. Вза­мен по­лу­чил раз­бло­ки­ро­ван­ный BIOS (вла­дель­цы этой мо­де­ли в кур­се про уре­зан­ность BIOS «из ко­роб­ки»), и воз­мож­ность ис­поль­зо­ва­ния «род­ных», не мо­ди­фи­ци­ро­ван­ных кек­стов(драй­ве­ров) под­си­сте­мы управ­ле­ния пи­та­ни­ем. За­чем? Спя­щий ре­жим.</p></blockquote>

<p>Так­же в BIOS вы­би­ра­ем за­груз­ку с USB.</p>

<ol>
<li>За­гру­жа­ем­ся и в экране за­груз­чи­ка Chimera вы­би­ра­ем флеш­ку.</li>
<li>Ждем.</li>
<li>Вы­би­ра­ем рус­ский язык.</li>
<li>В верх­ней па­не­ли вы­би­ра­ем «Дис­ко­вую ути­ли­ту»</li>
<li>Спра­ва, в ос­нов­ном ра­бо­чем по­ле вы­би­ра­ем вклад­ку «Раз­дел дис­ка»</li>
<li>Кли­ка­ем по спис­ку «Схе­ма раз­де­лов» и вы­би­ра­ем «Раз­дел: 1»</li>
<li>Кли­ка­ем «Па­ра­мет­ры» и вы­би­ра­ем пункт «Схе­ма раз­де­лов GUID»</li>
<li>В по­ле «Имя» пи­шем «Mountain Lion HD»</li>
<li>«Фор­мат» — вы­би­ра­ем «Mac OS Extended (жур­наль­ный)»</li>
<li>Жмем «При­ме­нить»</li>
<li>За­кры­ва­ем «Дис­ко­вую ути­ли­ту»</li>
<li>Те­перь уста­нав­ли­ва­ем си­сте­му.</li>
<li>Про­сто сле­ду­ем ука­за­ни­ям</li>
<li>Пе­ре­за­гру­жа­ем­ся</li>
<li>В экране за­груз­чи­ка Chimera вы­би­ра­ем «Mountain Lion HD».</li>
</ol>


<h3>Шаг 3: Настраиваем OS X Mountain Lion</h3>

<ol>
<li>Копируем в корень раздела папку Extra</li>
<li>Запускаем «Kext Wizard»</li>
<li>На вкладке «Установка» добавляем кексты</li>
<li>Расположение — System/Library/Extensions</li>
<li>Диск — «Mountain Lion HD»</li>
<li>Устанавливаем</li>
<li>Вкладка «Сервис»</li>
<li>Extra — Восстановить права</li>
<li>System/Library/Extensions — Восстановить права</li>
<li>Диск — «Mountain Lion HD»</li>
<li>Кликаем «Начать»</li>
<li>Устанавливаем Chimera</li>
<li>Перезагружаемя</li>
</ol>


<h3>Шаг 4: Лечим ошибку boot0 Error</h3>

<ol>
<li>Загружаемся и в экране загрузчика Chimera выбираем флешку.</li>
<li>Ждем.</li>
<li>Выбираем русский язык.</li>
<li>В верхней панели выбираем «Дисковую утилиту»</li>
<li>Выбираем раздел «Mountain Lion HD» и жмем «Отключить»</li>
<li>Закрываем «Дисковую утилиту»</li>
<li>В верхней панели выбираем «Терминал»</li>
<li>Вводим:
<code>diskutil list</code></li>
<li>Ищем раздел «Mountain Lion HD» и запоминаем(записываем) номер раздела. (у меня это — disk0s2)</li>
<li>Вводим:  <code>dd if=/Volumes/НАЗВАНИЕ-РАЗДЕЛА-ФЛЕШКИ/usr/standalone/i386/boot1h of=/dev/НОМЕР-РАЗДЕЛА-Mountain Lion HD</code></li>
<li>То есть в мо­ем слу­чае:
<code>dd if=/Volumes/OS\ Mountain\ Lion/usr/standalone/i386/boot1h of=/dev/disk0s2</code></li>
<li>Выходим из терминала</li>
<li>Перезагружаемся.</li>
</ol>


<h2>Модифицированный BIOS</h2>

<p>На­сто­я­щая часть пред­став­ля­ет со­бой пе­ре­вод <a href="http://www.tonymacx86.com/mountain-lion-laptop-support/73041-acer-aspire-5750g-mountain-lion-unibeast.html#post454779">это­го ком­мен­та­рия</a></p>

<p>Всем при­вет!</p>

<p>Это пол­ное ру­ко­вод­ство по про­хож­де­нию кве­ста «Как мо­е­му Acer Aspire 5750g по­лу­чить об­нов­ку от Apple».</p>

<blockquote><p>ПОМНИТЕ, ВЫ ИСПОЛЬЗУЕТЕ ЭТО РУКОВОДСТВО НА СВОЙ СТРАХ И РИСК. ДАЖЕ ЕСЛИ В РЕЗУЛЬТАТЕ ВАШИХ ДЕЙСТВИЙ ГОРОД ВЗЛЕТИТ НА ВОЗДУХ, ОТВЕТСТВЕННОСТЬ НЕСЕТЕ ТОЛЬКО ВЫ</p></blockquote>

<p>Ве­щи, ко­то­рые ра­бо­та­ют:</p>

<ul>
<li>Wi-Fi: Atheros 9285 &ndash;> С по­мо­щью DSDT</li>
<li>Ethernet: Broadcom BCM57785 &ndash;> С по­мо­щью кек­ста</li>
<li>Звук и встро­ен­ный мик­ро­фон: Realtek ALC269 &ndash;> С по­мо­щью кек­ста (нет зву­ка через HDMI)</li>
<li>Та­ч­пад и кла­ви­а­ту­ра:

<ul>
<li>Synaptics &ndash;> С по­мо­щью кек­ста (Дву­паль­це­вые же­сты)</li>
<li>Elan &ndash;> Ис­поль­зо­ва­ние это­го кек­ста (не вхо­дит в мой па­кет) (Же­сты до че­ты­рех паль­цев)</li>
</ul>
</li>
<li>Ре­гу­ли­ров­ка яр­ко­сти &ndash;> С по­мо­щью DSDT</li>
<li>Веб-ка­ме­ра &ndash;> «Род­ная» под­держ­ка</li>
<li>Card Reader &ndash;> «Род­ная» под­держ­ка</li>
<li>Ре­жим сна &ndash;> С по­мо­щью кек­ста или мо­ди­фи­ци­ро­ван­но­го BIOS</li>
<li>Ин­те­гри­ро­ван­ная аидео­кар­та и HDMI-вы­ход: Intel HD3000 &ndash;> «Род­ная» под­держ­ка (что оче­вид­но)</li>
</ul>


<p>Ве­щи, ко­то­рые не ра­бо­та­ют и из­вест­ные про­бле­мы:</p>

<ul>
<li>Bluetooth (Atheros AR3011 0489: E02C) (Мо­жет быть, я де­лаю что-то не так, да­же ес­ли из­ме­нить PID и VID в этом кек­сте, он не за­гру­жа­ет­ся при за­пус­ке, и ес­ли я ис­поль­зую kextload, он по­яв­ля­ет­ся в &ldquo;От­че­те о си­сте­ме&rdquo;, но до сих пор так и не за­вел­ся)</li>
<li>USB 3: Renesas μPD720200 (Ес­ли при ис­поль­зо­ва­нии это­го кек­ста под­клю­чить что-ли­бо, то вся си­сте­ма за­ви­са­ет).</li>
<li>VGA вы­ход (Так как на­сто­я­щие Ма­ки не име­ют на бор­ту VGA вы­хо­да, то не пред­став­ля­ет­ся воз­мож­ным за­ве­сти его. Впро­чем воз­мож­на аль­тер­на­ти­ва в ви­де ис­поль­зо­ва­ния HDMI вы­хо­да)</li>
<li>Звук через HDMI (Воз­мож­но за­ве­сти его, про­смот­ри­те <a href="http://www.tonymacx86.com/lion-laptop-support/51019-update-alc-269-patch-applehda-may-work-idea-others.html">эту те­му</a>)</li>
<li>Со сня­тым ак­ку­му­ля­то­ром си­сте­ма го­во­рит: «Ис­точ­ник пи­та­ния: ак­ку­му­ля­тор». (Есть прав­да <a href="http://www.tonymacx86.com/hp-probook/69472-battery-manager-fix-boot-without-batteries.html">тред</a>, об­суж­да­ю­щий ре­ше­ние по­доб­ной про­бле­мы в раз­де­ле о HP Probook, но он ока­зал­ся слож­ным для ме­ня!)</li>
</ul>


<p>Преж­де все­го, пе­рей­ди­те в на­строй­ки BIOS и от­клю­чи­те дис­крет­ную ви­део­кар­ту (нуж­но вы­брать встро­ен­ную), а за­тем про­сто уста­но­ви­те Mountain Lion. Ес­ли вы не зна­е­те, как это сде­лать, вос­поль­зуй­тесь <a href="http://www.tonymacx86.com/61-unibeast-install-os-x-mountain-lion-any-supported-intel-based-pc.html">этим ру­ко­вод­ством</a> (до ша­га 4); И ра­ди Бо­га, по­жа­луй­ста, не прибегайте к помощи ка­ких-то ле­вых сбо­рок, так как в слу­чае воз­ник­но­ве­ния ошиб­ки, ее неве­ро­ят­но слож­но бу­дет ис­пра­вить.</p>

<h3>Не ис­поль­зуй­те Multibeast!</h3>

<blockquote><p>Ес­ли вы хо­ти­те вве­сти свой иден­ти­фи­ка­тор Apple в мо­мент пер­вой за­груз­ки ML, вам по­на­до­бит­ся Wi-Fi. Чтобы иметь WiFi, нуж­но иметь DSDT. По­это­му, пе­ред уста­нов­кой ОС и по­сле раз­мет­ки жест­ко­го дис­ка, от­крой­те тер­ми­нал и с по­мо­щью ко­ман­ды CP ко­пи­руй­те DSDT.aml на ваш жест­кий диск. На­при­мер, ес­ли вы хо­ти­те уста­но­вить OS X на раз­дел под на­зва­ни­ем «OSX» и у вас есть DSDT на раз­де­ле под на­зва­ни­ем «UNIBEAST», нуж­но бу­дет сде­лать так:
<code>cd /Volumes/OSX</code>
<code> mkdir /Extra </code>
<code> cp /Volumes/UNIBEAST/DSDT.aml /Volumes/OSX/Extra </code></p></blockquote>

<p>Уста­нав­ли­ва­ем, пе­ре­за­гру­жа­ем­ся. Так как еще нет за­груз­чи­ка, поль­зу­ем­ся для за­пус­ка си­сте­мы на­шей флеш­кой с Unibeast.</p>

<p>Те­перь, что бы все за­ра­бо­та­ло, нам нуж­но уста­но­вить кек­сты.</p>

<h4>НО, у вас есть два ва­ри­ан­та:</h4>

<ol>
<li><p><strong>Ис­поль­зо­ва­ние ори­ги­наль­но­го BIOS:</strong></p>

<p> При вы­бо­ре это­го ва­ри­ан­та вам ну­жен NullCpuPowerManagement.kext, ис­поль­зо­ва­ние ко­то­ро­го ло­ма­ет на­прочь спя­щий ре­жим, так что вам при­дет­ся ис­поль­зо­вать SleepEnabler.kext, чтобы вклю­чить его об­рат­но.
 Са­мым боль­шим недо­стат­ком яв­ля­ет­ся то, что вы не смо­же­те поль­зо­вать­ся TurboBoost (тех­но­ло­гия TurboBoost до­ступ­на толь­ко на i5 и i7 про­цес­со­рах, про­цес­со­ры i3 ее не име­ют).</p>

<p> Ес­ли вас это пол­но­стью устра­и­ва­ет, то ставь­те все кек­сты, что я вам при­го­то­вил. Ста­вят­ся они с по­мо­щью kextutility или лю­бой дру­гой по­доб­ной ути­ли­ты. Уста­но­ви­те по­след­нюю <a href="http://www.projectosx.com/forum/index.php?showforum=165">FakeSMC</a>, за­груз­чик (Chameleon / Chimera, до­ступ­ны на osx86.net) и, на­ко­нец, на­строй­те па­ра­мет­ры за­груз­ки и SMBios.plist с по­мо­щью Chameleon Wizard или лю­бо­го дру­го­го по­доб­но­го про­грамм­но­го обес­пе­че­ния. (MacBookPro 8.1)</p></li>
<li><p><strong>Ис­поль­зо­ва­ние мо­ди­фи­ци­ро­ван­но­го BIOS (ко­то­рый сде­лан akbar102):</strong></p>

<p> Та­ким об­ра­зом, ваш Hackintosh смо­жет ис­поль­зо­вать «род­ной» AppleIntelCPUPowerManagement.kext, та­ким об­ра­зом, по­явит­ся под­держ­ка TurboBoost (что при­ба­вить ~1000 пунк­тов в про­хо­де­нии те­ста Geekbench) и «спя­ще­го ре­жи­ма». Кро­ме то­го, BIOS бу­дет раз­бло­ки­ро­ван, и бу­дут до­ступ­ны пе­ре­до­вые функ­ции, та­кие как за­груз­ка UEFI. Имей­те в ви­ду, что ес­ли вы вы­би­ра­е­те этот ме­тод, вам ну­жен SSDT (ко­то­рый вхо­дит в ком­плект по­став­ки), в про­тив­ном слу­чае вы по­лу­чи­те kernel panic.</p>

<p> Ес­ли вы НА СВОЙ РИСК ре­ши­ли мо­ди­фи­ци­ро­вать ваш BIOS, спер­ва най­ди­те SSDT.aml с при­креп­лен­ным фай­лом и ско­пи­руй­те его в пап­ку «Extra» на ва­шем жест­ком дис­ке. За­тем уста­но­ви­те мо­ди­фи­ци­ро­ван­ный BIOS:</p>

<ul>
<li>с по­мо­щью Windows</li>
<li>или ко­пи­руй­те P5WE0x64.fd на флеш­ку, вставь­те его в но­ут­бук, вы­клю­чи­те его. На­жми­те fn+esc и, удер­жи­вая на­жа­тые кла­ви­ши, вклю­чи­те его.</li>
</ul>


<p> Те­перь за­гру­зи­тесь в OS X, и на­чи­най­те уста­нав­ли­вать кек­сты с по­мо­щью kextutility или лю­бой дру­гой по­доб­ной ути­ли­ты. ВНИМАНИЕ!!! Ста­вим все кек­сты, кро­ме NullCPUPowerManagement И SleepEnabler. Уста­но­ви­те по­след­нюю <a href="http://www.projectosx.com/forum/index.php?showforum=165">FakeSMC</a>, за­груз­чик (Chameleon / Chimera, до­ступ­ны на osx86.net) и, на­ко­нец, на­строй­те па­ра­мет­ры за­груз­ки и SMBios.plist с по­мо­щью Chameleon Wizard или лю­бо­го дру­го­го по­доб­но­го про­грамм­но­го обес­пе­че­ния. (MacBookPro 8.1)</p></li>
</ol>


<h3>ВАЖНО: Ес­ли вы ис­поль­зу­е­те 10.8.2, не уста­нав­ли­вай­те OemSMBIOS.kext из па­ке­та FakeSMC, это вы­зо­вет kernel panic</h3>

<p>И, на­ко­нец, ис­правьте ошиб­ку boot0 (по­гуг­ли­те это), и за­гру­жай­тесь в OS X с по­мо­щью за­груз­чи­ка, уста­нов­лен­но­го на ваш жест­кий диск.</p>

<h3>Уда­чи!</h3>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[MIME type для JSON]]></title>
    <link href="http://asakasinsky.ru/2012/11/10/mime-type-dlia-json/"/>
    <updated>2012-11-10T21:40:00+04:00</updated>
    <id>http://asakasinsky.ru/2012/11/10/mime-type-dlia-json</id>
    <content type="html"><![CDATA[<p>Знаете ли вы, к какому MIME типу отнести JSON?</p>

<p>Варианты ответов:</p>

<ol>
<li>application/json</li>
<li>application/x-javascript</li>
<li>text/javascript</li>
<li>text/x-javascript</li>
<li>text/x-json</li>
<li>text/json</li>
</ol>


<!--more-->


<p>Согласно <a href="http://www.ietf.org/rfc/rfc4627.txt">RFC 4627</a> – правильный ответ под номером один.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[HMVC и Sparks заработали вместе!!!]]></title>
    <link href="http://asakasinsky.ru/2012/06/24/hmvc-i-sparks-zarabotali-vmiestie/"/>
    <updated>2012-06-24T00:50:00+04:00</updated>
    <id>http://asakasinsky.ru/2012/06/24/hmvc-i-sparks-zarabotali-vmiestie</id>
    <content type="html"><![CDATA[<p>Ура! HMVC и&nbsp;Sparks за­ра­бо­та­ли вме­сте. <a href="http://getsparks.org/set-up-mx">Офи­ци­аль­ное ре­ше­ние про­бле­мы</a> у&nbsp;ме­ня так и&nbsp;не&nbsp;при­жи­лось, а&nbsp;от­вет на­шел­ся&nbsp;на <a href="http://stackoverflow.com/questions/10214785/codeigniter-2-1-sparks-hmvclatest-cannot-load-libraries-sparks">stack<strong>overflow</strong></a>. Вро­де все ра­бо­та­ет.</p>

<p><strong>Update #1:</strong>
Ан&nbsp;нет, не&nbsp;все. <!--more-->При уста­нов­ке ion_auth в&nbsp;ви­де спар­ка, в&nbsp;HMVC мо­ду­ле вы­лез­ла ошиб­ка о&nbsp;недо­ступ­но­сти язы­ко­во­го фай­ла. При­чем при ис­поль­зо­ва­нии обыч­но­го MVC кон­трол­ле­ра все ра­бо­та­ет. Ре­ше­ние на­шел на&nbsp;stack<strong>overflow</strong>:</p>

<p>В&nbsp;фай­ле <code>sparks/ion_auth/2.2.4/libraries/Ion_auth.php</code> про­из­во­дим та­кую за­ме­ну.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>-$this-&gt;lang-&gt;load('ion_auth', 'english');
</span><span class='line'>+$this-&gt;lang-&gt;load('ion_auth', 'english', FALSE, TRUE, 'sparks/ion_auth/2.2.4/');</span></code></pre></td></tr></table></div></figure>


<p>По­сле это­го вы­лез­ла еще од­на ошиб­ка, гла­ся­щая, что недо­ступ­на ion_auth_model. Ошиб­ка то­же воз­ни­ка­ет при ис­поль­зо­ва­нии HMVC. Ре­шил гряз­ным, но&nbsp;ра­бо­чим ха­ком&nbsp;— пе­ред объ­яв­ле­ни­ем клас­са под­клю­ча­ем фай­лы:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>require_once BASEPATH.'core/Model.php';
</span><span class='line'>require_once FCPATH.'sparks/ion_auth/2.2.4/models/ion_auth_model.php';</span></code></pre></td></tr></table></div></figure>


<p>В&nbsp;кон­тек­сте клас­са объ­яв­ля­ем свой­ство $ion_auth_model, ко­то­рое на­сле­ду­ем от&nbsp;клас­са Ion_auth_model.</p>

<p>Чи­тал слу­хи о&nbsp;том, что Sparks и&nbsp;HMVC со­би­ра­ют­ся сде­лать ча­стью яд­ра. Бы­ло&nbsp;бы кле­во, а&nbsp;то&nbsp;я&nbsp;по­смат­ри­ваю в&nbsp;сто­ро­ну Yii или Laravel.</p>

<p>При­во­жу патч пол­но­стью.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>/**
</span><span class='line'> * file: sparks/ion_auth/2.2.4/libraries/Ion_auth.php
</span><span class='line'> */
</span><span class='line'>
</span><span class='line'>@@ -19,6 +19,8 @@
</span><span class='line'> *
</span><span class='line'> */
</span><span class='line'> 
</span><span class='line'>+require_once BASEPATH.'core/Model.php';
</span><span class='line'>+require_once FCPATH.'sparks/ion_auth/2.2.4/models/ion_auth_model.php';
</span><span class='line'> class Ion_auth
</span><span class='line'> {
</span><span class='line'>  /**
</span><span class='line'>@@ -42,6 +44,8 @@
</span><span class='line'>   **/
</span><span class='line'>  public $_extra_set = array();
</span><span class='line'> 
</span><span class='line'>+ public $Ion_auth_model = '';
</span><span class='line'>+
</span><span class='line'>  /**
</span><span class='line'>   * __construct
</span><span class='line'>   *
</span><span class='line'>@@ -53,8 +57,9 @@
</span><span class='line'>      $this->load->config('ion_auth', TRUE);
</span><span class='line'>      $this->load->library('email');
</span><span class='line'>      $this->load->library('session');
</span><span class='line'>-     $this->lang->load('ion_auth');
</span><span class='line'>-     $this->load->model('ion_auth_model');
</span><span class='line'>+     $this->lang->load('ion_auth', 'english', FALSE, TRUE, 'sparks/ion_auth/2.2.4/'); 
</span><span class='line'>+     //$this->load->model('ion_auth_model');
</span><span class='line'>+     $this->ion_auth_model = new Ion_auth_model();
</span><span class='line'>      $this->load->helper('cookie');
</span><span class='line'> 
</span><span class='line'>      //auto-login the user if they are remembered</span></code></pre></td></tr></table></div></figure>



]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Виртуальное окружение Python на хостинге]]></title>
    <link href="http://asakasinsky.ru/2012/06/23/virtual%27noie-okrujenie-python-na-khostinghie/"/>
    <updated>2012-06-23T02:26:00+04:00</updated>
    <id>http://asakasinsky.ru/2012/06/23/virtual&#8217;noie-okrujenie-python-na-khostinghie</id>
    <content type="html"><![CDATA[<p>Бы­ло у&nbsp;вас так, что на&nbsp;shared-хо­стин­ге не&nbsp;ока­за­лось необ­хо­ди­мых вам python-па­ке­тов? У&nbsp;ме­ня бы­ло. Так как я&nbsp;про­по­ве­дую прин­цип&nbsp;— «Ско­рее все­го эта про­бле­ма уже воз­ни­ка­ла у&nbsp;дру­гих лю­дей, и, ско­рее все­го есть ре­ше­ние», Гугл до­воль­но быст­ро вы­вел ме­ня на&nbsp;virtualenv. В&nbsp;мо­ем слу­чае все ока­за­лось до­ста­точ­но про­сто.</p>

<p>За­хо­дим по&nbsp;SSH на&nbsp;хо­стинг, ка­ча­ем све­жий ар­хив с&nbsp;virtualenv.</p>

<figure class='code'><figcaption><span>virtualenv</span><a href='http://pypi.python.org/pypi/virtualenv'>&#8220;источник&#8221; </a></figcaption> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='html'><span class='line'>wget http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.7.2.tar.gz
</span></code></pre></td></tr></table></div></figure>




<!--more-->


<p>Рас­па­ко­вы­ва­ем, за­хо­дим в&nbsp;по­лу­чен­ную пап­ку и&nbsp;со­зда­ем вир­ту­аль­ное окру­же­ние в&nbsp;пап­ке <code>~/myvenv</code>. В&nbsp;этой пап­ке, бу­дут на­хо­дит­ся уста­нов­лен­ные Python-па­ке­ты.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>tar xzf ~/virtualenv-1.7.2.tar.gz
</span><span class='line'>cd ~/virtualenv-1.7.2
</span><span class='line'>python virtualenv.py ~/myvenv</span></code></pre></td></tr></table></div></figure>


<p>Теперь нужно активировать виртуальное окружение.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>source ~/myvenv/bin/activate</span></code></pre></td></tr></table></div></figure>


<p>Про­ве­рить ра­бо­ту мож­но с&nbsp;по­мо­щью ко­ман­ды <code>which python</code>, она долж­на вы­дать путь к&nbsp;Python на­хо­дя­ще­му­ся в&nbsp;ва­шем вир­ту­аль­ном окру­же­нии. Ес­ли нуж­но де­ак­ти­ви­ро­вать окру­же­ние, ис­поль­зо­вать Python, уста­нов­лен­ный в&nbsp;си­сте­ме, нуж­но вве­сти в&nbsp;кон­со­ли <code>deactivate</code>. При­ме­чу, что у&nbsp;ме­ня пе­ре­клю­че­ние ре­жи­мов вид­но в&nbsp;кон­со­ли сле­ва пе­ред име­нем те­ку­ще­го поль­зо­ва­те­ля. Мо­жет ока­зать­ся по­лез­ным вклю­че­ние ко­ман­ды ак­ти­ва­ции вир­ту­аль­но­го окру­же­ния в <code>~/.bashrc</code>.</p>

<p>С&nbsp;ма­ги­ей virtualenv мож­но озна­ко­мит­ся с&nbsp;по­мо­щью <code>man virtualenv</code>. На­при­мер:</p>

<figure class='code'><figcaption><span>&#8220;перевод некоторых строк из man virtualenv&#8221; </span></figcaption>
<div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>--no-site-packages
</span><span class='line'>           Полностью вас изолирует от глобальных библиотек системы
</span><span class='line'>
</span><span class='line'>--relocatable
</span><span class='line'>           Делает виртуальное окружение относительным, то есть вы
</span><span class='line'>           сможете перемещать ваше виртуальное окружение.
</span><span class='line'>
</span><span class='line'>--clear
</span><span class='line'>           Полностью вычищает виртуальное окружение от установленных
</span><span class='line'>           пакетов и настроек.</span></code></pre></td></tr></table></div></figure>


<p>Если заглянуть в папку <code>~/myvenv/bin</code>, то увидим следующее:</p>

<figure class='code'><figcaption><span>&#8220;структура ~/myvenv/bin&#8221; </span></figcaption>
<div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>bin
</span><span class='line'>├── activate
</span><span class='line'>├── easy_install
</span><span class='line'>├── pip
</span><span class='line'>├── python
</span><span class='line'>└── ...</span></code></pre></td></tr></table></div></figure>


<p>Зна­чит это, что у&nbsp;нас в&nbsp;рас­по­ря­же­нии изо­ли­ро­ван­ные ути­ли­ты easy_install и&nbsp;pip, с&nbsp;по­мо­щью ко­то­рой мож­но уста­нав­ли­вать нуж­ные па­ке­ты прак­ти­че­ски от­ку­да угод­но. Вот так:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>pip install some_package
</span><span class='line'># или
</span><span class='line'>pip install -e svn+http://svn.somesite.com/trunk/
</span><span class='line'>
</span><span class='line'># ещё есть отличная возможность установки пакетов 
</span><span class='line'># в окружение, не активируя его.
</span><span class='line'>pip install -E ~/myvenv/ some_package</span></code></pre></td></tr></table></div></figure>


<p>Практический пример работы с pip:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
</pre></td><td class='code'><pre><code class=''><span class='line'># установим django.
</span><span class='line'>pip install django
</span><span class='line'># и, к примеру SQLAlchemy ORM
</span><span class='line'>pip install sqlalchemy
</span><span class='line'># причём, прошу заметить можно устанавливать пакеты какой-то
</span><span class='line'># определенной версии
</span><span class='line'>
</span><span class='line'># совершенно полезнючая штука - формируем список установленных пакетов
</span><span class='line'>pip freeze > packages.txt
</span><span class='line'>
</span><span class='line'># допустим мы передали этот список другому разработчику
</span><span class='line'># и он устанавливает эти пакеты у себя
</span><span class='line'>pip install -r packages.txt</span></code></pre></td></tr></table></div></figure>



]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Сказ о том, как на сервера по SSH ходить]]></title>
    <link href="http://asakasinsky.ru/2012/06/12/skaz-o-ssh/"/>
    <updated>2012-06-12T02:50:00+04:00</updated>
    <id>http://asakasinsky.ru/2012/06/12/skaz-o-ssh</id>
    <content type="html"><![CDATA[<p>Пом­ню, как-то в&nbsp;столь­ном Москва-гра­де я&nbsp;и&nbsp;Алё­ха, сын по­па со­бор­но­го, за­шли в&nbsp;трак­тир за­мор­ский с&nbsp;чуд­ны́м на­зва­ни­ем на&nbsp;м.&nbsp;Яст­ва и&nbsp;на­пит­ки при­шлось са­мим нести, юро­ди­вые лишь пла­ту взи­ма­ют, за­мор­щи­на, од­ним сло­вом. Си­дим, обе­да­ем, в&nbsp;но­ут­бу­ки пя­лим­ся, ка­нал Wi-Fi был дю­же бес­пла­тен и&nbsp;быстр. Алё­ха все ржал, ро­няя крош­ки на&nbsp;бо­ро­ду и&nbsp;при­го­ва­ри­вал:<br/>
—&nbsp;Пи­сарь&nbsp;— адской диа­вол!<br/>
Оно и&nbsp;по­нят­но, Алё­ха-то на&nbsp;ле­пи­лу сай­тов учил­ся, и&nbsp;во­пре­ки вто­рой за­по­ве­ди не&nbsp;де­лать се­бе ку­ми­ра, со­тво­рил его се­бе-та­ки из&nbsp;од­но­го дво­ря­ни­на мос­ков­ско­го по&nbsp;име­ни Ар­те­мий. Ар­те­мий на&nbsp;сво­ей стра­ни­це ле­по гла­го­лил о&nbsp;без­ру­ких и&nbsp;без­гла­зых сай­то­де­лах. Бы­ва­ло, пи­шет та­кой сай­то­дел, мол, Ар­те­мий, ба­тюш­ка, зе­ло че­лом бью, рас­ска­жи, по­ве­дай, что не&nbsp;так я&nbsp;нера­зум­ный со­тво­рил на&nbsp;этой стра­ни­це. А&nbsp;Ар­те­мий, про­стым ро­счер­ком ему в&nbsp;от­вет, гов­но, мол это все, и&nbsp;ве­се­ло так мо­ти­ви­ру­ет. Алё­ха, зна­чит ржал, а&nbsp;мне зе­ло скуч­но ста­ло, и&nbsp;ре­шил я&nbsp;то­гда про­ве­рить ка­нал вай­фай­ный. От­крыл кис­ме́туш­ку и&nbsp;по­нес­лось&hellip;</p>

<!--more-->


<p>Да&nbsp;вру, ко­неч­но )))<br/>
На&nbsp;са­мом де­ле всё бы­ло не&nbsp;так. Мы&nbsp;с&nbsp;од­ним мо­им зна­ко­мым ре­ши­ли про­ве­сти аудит Wi-Fi се­ти в&nbsp;од­ном из&nbsp;«Мак­даков». За&nbsp;то&nbsp;вре­мя, что мы&nbsp;си­де­ли и&nbsp;ели, к&nbsp;мо­е­му удив­ле­нию, пой­ма­ли две па­ры ло­гин:па­роль от&nbsp;FTP. Я&nbsp;огля­дел­ся во­круг, вро­де обыч­ные по­се­ти­те­ли, ни­че­го в&nbsp;них не&nbsp;вы­да­ва­ло лю­дей, адми­ня­щих сай­ты. Но&hellip; Ре­зуль­тат на&nbsp;ли­цо, как го­во­рить­ся.<br/>
<code>В хо­де экс­пе­ри­мен­та ни один сайт не по­стра­дал.</code></p>

<p><span class='pullquote-right' data-pullquote='SSH (англ. Secure SHell&nbsp;— «без­опас­ная обо­лоч­ка»)'>
Это&nbsp;я&nbsp;к&nbsp;че­му? А&nbsp;к&nbsp;то­му, что небез­опас­но хо­дить на&nbsp;сер­ве­ра по&nbsp;FTP или Telnet. Все ва­ши дан­ные вид­ны за­ин­те­ре­со­ван­ным ли­цам со&nbsp;все­ми вы­те­ка­ю­ще­ми по­след­стви­я­ми. Вы­ход про­стой, поль­зо­вать­ся SSH (англ. Secure SHell&nbsp;— «без­опас­ная обо­лоч­ка»). SSH шиф­ру­ет весь тра­фик и&nbsp;па­ро­ли впри­да­чу. В&nbsp;на­ше вре­мя есть на&nbsp;лю­бом хо­стин­ге, и&nbsp;в&nbsp;90&nbsp;про­цен­тах слу­ча­ев за&nbsp;его ис­поль­зо­ва­ние не&nbsp;бе­рут де­нег.В об­щем, пра­виль­ные па­ца­ны ис­поль­зу­ют SSH.
</span></p>

<h3>Все действие происходит в Ubuntu</h3>

<p>Генерируем rsa-ключи.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>ssh-keygen -t rsa</span></code></pre></td></tr></table></div></figure>


<p>В&nbsp;ре­зуль­та­те бу­дет ге­не­ра­ция пуб­лич­но­го и&nbsp;пер­со­наль­но­го клю­чей. Они бу­дут на­хо­дить­ся в&nbsp;пап­ке <code>~/.ssh</code>. До­ба­вим rsa-ключ аген­ту аутен­ти­фи­ка­ции ssh-agent.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>ssh-add ~/.ssh/id_rsa</span></code></pre></td></tr></table></div></figure>


<p>Со­об­ща­ем сер­ве­ру наш пуб­лич­ный ключ (по­тре­бу­ет­ся ввод па­ро­ля).</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>ssh-copy-id user@server # user - имя пользователя (логин), 
</span><span class='line'>                        # и server - либо IP сервера, либо доменное имя</span></code></pre></td></tr></table></div></figure>


<p>Входим по SSH (ура, без пароля!!!).</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>ssh user@server         # user - имя пользователя (логин), 
</span><span class='line'>                        # и server - либо IP сервера, либо доменное имя</span></code></pre></td></tr></table></div></figure>


<p>Как видим, не так это и сложно.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Как установить Octopress на Ubuntu]]></title>
    <link href="http://asakasinsky.ru/2012/06/11/kak-ustanovit%27-octopress-na-ubuntu/"/>
    <updated>2012-06-11T18:01:00+04:00</updated>
    <id>http://asakasinsky.ru/2012/06/11/kak-ustanovit&#8217;-octopress-na-ubuntu</id>
    <content type="html"><![CDATA[<p>Итак, се­го­дня моя речь пой­дет о&nbsp;том, как по­ста­вить <a href="http://octopress.org/">Octopress</a> на&nbsp;Ubuntu.</p>

<blockquote><p>Оговорюсь, что посмотреть актуальную версию Ruby можно посмотреть тут, <a href="http://octopress.org/docs/setup/">в документации.</a>
На&nbsp;мо­ем но­ут­бу­ке уста­нов­ле­на Ubnutu&nbsp;10.04, но&nbsp;ре­цепт бу­дет ра­бо­тать и&nbsp;на&nbsp;12.04. Сна­ча­ла под­го­то­вим­ся к&nbsp;уста­нов­ке Ruby&nbsp;1.9.2, так как имен­но эта вер­сия на&nbsp;дан­ный мо­мент необ­хо­ди­ма Octopress.</p></blockquote>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>aptitude install curl bison build-essential zlib1g zlib1g-dev openssl libssl-dev libreadline5 libreadline5-dev libreadline6 libreadline6-dev libxml2-dev git-core libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake</span></code></pre></td></tr></table></div></figure>




<!--more-->


<p><span class='pullquote-right' data-pullquote='gem /dʒem/&nbsp;— дра­го­це́нный ка́мень.'>
Для уста­нов­ки Ruby и со­зда­ния необ­хо­ди­мо­го на­бо­ра gem’ов (вот сло­веч­ко-то узнал, по­ка раз­би­рал­ся: gem /dʒem/&nbsp;— дра­го­це́нный ка́мень.) по­ста­вим RVM &ndash; ме­не­джер вер­сий Ruby. Он за­од­но и за­ви­си­мо­сти дол­жен под­тя­нуть. В об­щем вся ру­ти­на на нем. Де­ла­ем все в тер­ми­на­ле. Кста­ти со­зда­те­ли Octopress&#8217;а по­зи­ци­о­ни­ру­ют свой фрейм­ворк, как <em>&ldquo;A blogging framework for hackers.&rdquo;</em>. Все из-за ис­поль­зо­ва­ния тер­ми­на­ла, в ко­то­ром и блог уста­но­вишь и ста­тью на­бро­са­ешь и на сер­вер опуб­ли­ку­ешь.
</span></p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>bash -s stable &lt; &lt;(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)</span></code></pre></td></tr></table></div></figure>


<p>Да­лее мы&nbsp;про­сто до­бав­ля­ем две строч­ки в&nbsp;файл ва­ше­го про­фи­ля в&nbsp;bash. Это нуж­но для то­го, чтобы Ruby за­пус­кал­ся ав­то­ма­ти­че­ски каж­дый раз, ко­гда от­кры­ва­ем bash. С&nbsp;по­мо­щью ко­ман­ды source мы&nbsp;за­ста­вим си­сте­мы при­нять из­ме­не­ния немед­лен­но.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bashrc
</span><span class='line'>source .bashrc</span></code></pre></td></tr></table></div></figure>


<p>Пе­ре­за­пус­ка­ем кон­соль.<br/>
На­би­ра­ем.<br/>
<code> type rvm | head -n1 </code><br/>
В&nbsp;от­вет получаем.<br/>
<code>rvm яв­ля­ет­ся функ­ци­ей</code><br/>
Ес­ли это так, то&nbsp;зна­чит уста­нов­ка RVM со­сто­я­лась успеш­но. Го­то­вим окру­же­ние и&nbsp;ста­вим Ruby.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>rvm pkg install openssl
</span><span class='line'>rvm pkg install iconv
</span><span class='line'>rvm install 1.9.2 -C --with-openssl-dir=$HOME/.rvm/usr,--with-iconv-dir=$HOME/.rvm/usr
</span><span class='line'>rvm use 1.9.2 --default
</span><span class='line'>rvm reload
</span><span class='line'>rvm rubygems latest
</span><span class='line'>gem install bundler</span></code></pre></td></tr></table></div></figure>


<p><span class='pullquote-right' data-pullquote='Пап­ку мо­же­те на­звать как угод­но'>
Кло­ни­ру­ем ре­по­зи­то­рий <a href="https://github.com/imathis/octopress">Octopress</a>. Тут нуж­но по­яс­нить, что кло­ни­ру­ем мы&nbsp;его в&nbsp;пап­ку octopress. В&nbsp;ней и&nbsp;бу­дет про­ис­хо­дить вся ма­гия ва­ше­го бло­га. Пап­ку мо­же­те на­звать как угод­но, ра­бо­тать с&nbsp;ней вам, но&nbsp;в&nbsp;этом при­ме­ре мы&nbsp;на­зо­вем её&nbsp;имен­но так&nbsp;— «octopress».
</span></p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>git clone git://github.com/imathis/octopress.git octopress</span></code></pre></td></tr></table></div></figure>


<p>Переходим в эту папку.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>cd octopress/</span></code></pre></td></tr></table></div></figure>


<p>И&hellip; Оп-п-па, по­явит­ся за­прос от&nbsp;RVM. Ска­жи­те ему&nbsp;да, то&nbsp;есть yes.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>==============================================================================
</span><span class='line'>= NOTICE                                                                     =
</span><span class='line'>==============================================================================
</span><span class='line'>= RVM has encountered a new or modified .rvmrc file in the current directory =
</span><span class='line'>= This is a shell script and therefore may contain any shell commands.       =
</span><span class='line'>=                                                                            =
</span><span class='line'>= Examine the contents of this file carefully to be sure the contents are    =
</span><span class='line'>= safe before trusting it! ( Choose v[iew] below to view the contents )      =
</span><span class='line'>==============================================================================
</span><span class='line'>Do you wish to trust this .rvmrc file? (/home/asakasinsky/octopress/.rvmrc)
</span><span class='line'>y[es], n[o], v[iew], c[ancel]> yes</span></code></pre></td></tr></table></div></figure>


<p>Ставим Octopress.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>bundle install
</span><span class='line'>bundle update
</span><span class='line'>rake install</span></code></pre></td></tr></table></div></figure>


<p>Все! Octopress уста­нов­лен! Для ав­то­ма­ти­че­ско­го де­п­лой­мен­та уста­но­вим rsync.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>sudo apt-get install rsync</span></code></pre></td></tr></table></div></figure>


<p>Да­лее <a href="http://asakasinsky.ru/2012/06/12/skaz-o-ssh/">на­стра­и­ва­ем SSH</a> и&nbsp;кон­фи­гу­ри­ру­ем наш блог, точ­нее в&nbsp;фай­ле Rakefile в&nbsp;пап­ке на­ше­го бло­га из­ме­ня­ем сле­ду­ю­щие зна­че­ния в&nbsp;со­от­вет­ствии с&nbsp;на­строй­ка­ми SSH.</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>ssh_user       = "user@domain.com"
</span><span class='line'>document_root  = "~/public_html/"
</span><span class='line'>rsync_delete   = true
</span><span class='line'>deploy_default = "rsync"</span></code></pre></td></tr></table></div></figure>


<p>Все важ­ные на­строй­ки на­хо­дят­ся в&nbsp;од­ном фай­ле <code>_config.yml</code>. Обя­за­тель­но от­ре­дак­ти­руй­те его, там мно­го на­стро­ек по&nbsp;умол­ча­нию.</p>

<p>Краткий набор команд:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>rake generate    # генерирует статический сайт
</span><span class='line'>
</span><span class='line'>rake preview     # можно запустить после генерации, 
</span><span class='line'>                 # чтобы посмотреть на локальной машине.
</span><span class='line'>                 # Сайт будет доступен по адресу: localhost:4000
</span><span class='line'>                 # просто вбейте его в адресную строку браузера.
</span><span class='line'>
</span><span class='line'>rake deploy      # Отсылает файлы сайта на сервер с помощью rsync
</span><span class='line'>
</span><span class='line'>rake new_post["Name of your post"] # создает новый пост
</span><span class='line'>rake new_page["Name of your page"] # создает новую страницу</span></code></pre></td></tr></table></div></figure>



]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Описание Octopress]]></title>
    <link href="http://asakasinsky.ru/2012/06/03/opisaniie-octopress/"/>
    <updated>2012-06-03T19:02:00+04:00</updated>
    <id>http://asakasinsky.ru/2012/06/03/opisaniie-octopress</id>
    <content type="html"><![CDATA[<p>Со­дер­жи­мое этой ста­тьи пред­став­ля­ет со­бой воль­ный пе­ре­вод глав­ной стра­ни­цы сай­та <a href="http://octopress.org/">Octopress.org</a> для тех, у&nbsp;ко­го с&nbsp;ан­глий­ским не&nbsp;очень.</p>

<h2>Что это?</h2>

<p>Oktopress&nbsp;— это фрейм­ворк для <a href="http://github.com/mojombo/jekyll">Jekyll</a>, ге­не­ра­то­ра ста­ти­че­ских сай­тов&nbsp;на <a href="http://pages.github.com/">Github Pages</a>. Чтобы со­здать сайт с&nbsp;по­мо­щью чи­сто­го Jekyll, вам при­шлось&nbsp;бы на­чать с&nbsp;со­зда­ния соб­ствен­но­го шаб­ло­на на&nbsp;HTML, CSS и&nbsp;Javascript. С&nbsp;Octopress все го­раз­до про­ще, он&nbsp;предо­ста­вит го­то­вые те­мы и&nbsp;кон­фи­гу­ра­цию для Jekyll.</p>

<!--more-->


<h2>Комплектация</h2>

<p>«Иc&nbsp;ка­роп­ки» мы&nbsp;по­лу­ча­ем:</p>

<ul>
<li>се­ман­ти­че­ски вер­ный шаб­лон на&nbsp;ос­но­ве стан­дар­та HTML5;</li>
<li>адап­тив­ный шаб­лон. По­про­буй­те из­ме­нить раз­мер бра­у­зе­ра или по­кру­тить его на&nbsp;мо­биль­ном устрой­стве, вы&nbsp;са­ми все пой­мё­те;</li>
<li>пла­ги­ны для под­держ­ки ра­бо­ты с&nbsp;Twitter, Google Plus One, Disqus Comments, Pinboard, Delicious, and Google Analytics;</li>
<li>очень про­стую стра­те­гию раз­вер­ты­ва­ния сай­та с&nbsp;ис­поль­зо­ва­ни­ем Github pages или Rsync;</li>
<li>встро­ен­ную под­держ­ку сер­ве­ров POW и&nbsp;Rack;</li>
<li>про­стую ра­бо­ту с&nbsp;те­ма­ми с&nbsp;по­мо­щью Compass and Sass;</li>
<li>ве­ли­ко­леп­ную под­свет­ку син­так­си­са в&nbsp;сти­ле <a href="http://ethanschoonover.com/solarized">Solarized</a>.</li>
</ul>


<p>Для бо­лее по­дроб­но­го пред­став­ле­ния до­ста­точ­но про­сто про­смот­реть <a href="http://octopress.org/docs">до­ку­мен­та­цию</a>.<br/>
<code><em>По­верь­те, Goggle-пе­ре­вод­чи­ка там вполне хва­тит.</em></code></p>

<h2>Плагины</h2>

<p>Боль­шин­ство из&nbsp;по­став­ля­е­мых пла­ги­нов бы­ли раз­ра­бо­та­ны спе­ци­аль­но для Octopress, но&nbsp;часть из&nbsp;них по­сле до­ра­бот­ки при­шли из&nbsp;со­об­ще­ства Jekyll.</p>

<ul>
<li><a href="http://octopress.org/docs/plugins/video-tag">HTML5 Video Tag</a>&nbsp;— про­стой спо­соб пуб­ли­ка­ции mp4-ви­део­ро­ли­ков на&nbsp;HTML5, име­ю­щий на&nbsp;вся­кий слу­чай flash player в&nbsp;ка­че­стве ре­зерв­но­го.</li>
<li><a href="http://octopress.org/docs/plugins/codeblock">Code Block</a>&nbsp;— пла­гин для про­сто­го спо­со­ба раз­ме­щать бло­ки ко­да в&nbsp;по­стах.<br/>
<code><em>Ши­кар­ный пла­гин!</em></code></li>
<li><a href="http://octopress.org/docs/plugins/include-code">Include Code</a>&nbsp;— спо­соб раз­ме­ще­ния бло­ков ко­да в&nbsp;по­стах с&nbsp;по­мо­щью им­пор­та пря­мо из&nbsp;фай­ло­вой си­сте­мы.</li>
<li><a href="http://octopress.org/docs/plugins/gist-tag">Gist Tag</a>&nbsp;— ав­то­ма­ти­че­ская скач­ка и&nbsp;встра­и­ва­ние бло­ков ко­да с&nbsp;Github gists.</li>
<li><a href="http://octopress.org/docs/plugins/image-tag">Image Tag</a>&nbsp;— про­стой и&nbsp;офи­ген­ный спо­соб пуб­ли­ка­ции изоб­ра­же­ний.</li>
<li><a href="http://octopress.org/docs/plugins/render-partial">Render Partial</a>&nbsp;— ес­ли по­ста­рать­ся ска­зать про­ще, то&nbsp;этот пла­гин поз­во­ля­ет при сбор­ке стра­ни­цы ис­поль­зо­вать ча­сти дру­гих стра­ниц.</li>
<li><a href="http://octopress.org/docs/plugins/blockquote">Blockquote</a>&nbsp;— ге­не­ри­ру­ет кра­си­вые внешне и&nbsp;се­ман­ти­че­ски пра­виль­ные внут­ри ци­та­ты.</li>
<li><a href="http://octopress.org/docs/plugins/pullquote">Pullquote</a>&nbsp;— ге­не­ри­ру­ет ци­та­ты-врез­ки с&nbsp;по­мо­шью чи­сто­го CSS.<br/>
<code><em>Очень кра­си­во. Я&nbsp;люб­лю этот при­ем в&nbsp;ти­по­гра­фи­ке. Обя­за­тель­но по­смот­ри­те при­мер!</em></code></li>
<li><a href="http://octopress.org/docs/plugins/category-generator">Category Generator</a>&nbsp;— ге­не­ри­ру­ет ар­хив­ные стра­ни­цы для каж­дой из&nbsp;руб­рик бло­га.</li>
</ul>


<p>Мо­же­те по­се­тить бо­лее пол­ный <a href="http://octopress.org/docs/plugins">спи­сок пла­ги­нов</a>.</p>

<h2>Ре­ши­ли по­про­бо­вать?</h2>

<p>Octopress прост в&nbsp;уста­нов­ке, на­строй­ке и&nbsp;раз­вер­ты­ва­нии. Нач­ни­те с&nbsp;этой <a href="http://asakasinsky.ru/2012/06/11/kak-postavit%27-octopress-na-ubuntu/">ин­струк­ции по уста­нов­ке Octopress на&nbsp;Ubuntu</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Переезд на Octopress]]></title>
    <link href="http://asakasinsky.ru/2012/06/01/pierieiezd-na-octopress/"/>
    <updated>2012-06-01T17:36:00+04:00</updated>
    <id>http://asakasinsky.ru/2012/06/01/pierieiezd-na-octopress</id>
    <content type="html"><![CDATA[<p>Ура! Ура! Ура! Я-та­ки пе­ре­брал­ся на&nbsp;до­мен вто­ро­го уров­ня, опре­де­лил­ся с&nbsp;движ­ком сво­е­го бло­га. Ста­рые за­пи­си пе­ре­но­сить не&nbsp;бу­ду. В&nbsp;ка­че­стве движ­ка ис­поль­зую <a href="http://octopress.org/">Octopress</a>.</p>

<p>По­яс­ню, по­че­му все это. На&nbsp;<a href="http://blogger.com/">Blogger</a> ты&nbsp;силь­но за­ви­сишь от&nbsp;его вла­дель­цев и&nbsp;их&nbsp;по­ли­ти­ки. На­при­мер, я&nbsp;до&nbsp;сих пор по­сле сме­ны шаб­ло­нов не&nbsp;знаю как их&nbsp;ре­дак­ти­ро­вать. Боль­ше все­го неудоб­ства до­став­ля­ло от­сут­ствие вме­ня­е­мых ме­ха­низ­мов до­бав­ле­ния и&nbsp;управ­ле­ния сти­ля­ми. На­при­мер для пуб­ли­ка­ции участ­ков ко­да. Я&nbsp;хо­чу кон­тро­ли­ро­вать отоб­ра­же­ние ин­фор­ма­ции на&nbsp;экране и&nbsp;прин­те­ре. Не&nbsp;по­нят­но, как ра­бо­та­ет ста­ти­сти­ка. Да­ле­ко не&nbsp;иде­аль­ная си­сте­ма ком­мен­та­ри­ев.</p>

<!--more-->


<p>В&nbsp;Octopress я&nbsp;на­шел все, что мне не&nbsp;до­ста­ва­ло. Гиб­кий, лег­ко ка­сто­ми­зи­ру­е­мый, с&nbsp;нуж­ны­ми пла­ги­на­ми пря­мо из&nbsp;ко­роб­ки. Непло­хая те­ма по&nbsp;умол­ча­нию. Да, она ещё и&nbsp;<a href="http://ru.wikipedia.org/wiki/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B5%D0%B1-%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD">адап­тив­ная</a>. Са­мый ве­сё­лый мо­мент&nbsp;— это&nbsp;то, что Octopress яв­ля­ет­ся ге­не­ра­то­ром ста­тич­но­го кон­тен­та (сайт пред­став­ля­ет со­бой на­бор html-фай­лов). Зна­чит это, что мне не&nbsp;ну­жен ин­тер­пре­та­тор php или python. Да­же от&nbsp;сер­ве­ра не&nbsp;за­ви­шу. Нет про­блем с&nbsp;на­груз­кой или по­то­ка­ми. Я&nbsp;про­сто за­пол­нил кон­фи­гу­ра­ци­он­ные фай­лы, за­тем ло­ка­ли­зо­вал (пе­ре­вел) шаб­ло­ны. И&nbsp;на­чал пи­сать эту ста­тью. Кста­ти ста­тью пи­шу в&nbsp;Sublime. Де­ло в&nbsp;том, что тут нет <a href="http://ru.wikipedia.org/wiki/WYSIWYG">wysiwyg</a>, толь­ко <a href="http://ru.wikipedia.org/wiki/Markdown">markdown</a>, вслед­ствии че­го бу­дет пред­ска­зу­е­мый и&nbsp;пра­виль­ный ре­зуль­тат в&nbsp;HTML. Я&nbsp;за­кон­чу этот аб­зац, за­тем за­пу­щу ге­не­ра­цию кон­тен­та и&nbsp;его де­п­лой, и&nbsp;кон­тент ока­жет­ся на&nbsp;сер­ве­ре. Все про­сто. Есть ко­неч­но ми­нус в&nbsp;от­сут­ствии воз­мож­но­сти ре­дак­ти­ро­ва­ния кон­тен­та с&nbsp;мо­биль­но­го те­ле­фо­на. Но&nbsp;это неваж­но. Чест­но.</p>
]]></content>
  </entry>
  
</feed>
