<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
    <title>Sergey Lymar</title>
    <link>http://www.lymar.ru</link>
    <description><![CDATA[]]></description>
    <language>ru</language>
    <managingEditor>sergey.lymar@gmail.com</managingEditor>
    <generator>lymar.ru</generator>
    <lastBuildDate>Tue, 01 Apr 2014 12:51:03 +0000</lastBuildDate>

            <item>
            <title><![CDATA[Hastache 0.6.0. Новый мейнтейнер]]></title>
            <guid isPermaLink="true">http://www.lymar.ru/hastache%200.6.0</guid>
            <link>http://www.lymar.ru/hastache%200.6.0</link>

            <comments
            >http://www.lymar.ru/hastache%200.6.0/#disqus_thread</comments>

            <description><![CDATA[<p>
    Вы&shy;шла но&shy;вая вер&shy;сия <a href="http://hackage.haskell.org/package/hastache-0.6.0">has&shy;tache 0.6.0</a>. Са&shy;мое за&shy;мет&shy;ное из&shy;ме&shy;не&shy;ние — пе&shy;ре&shy;ход от ис&shy;поль&shy;зо&shy;ва&shy;ния <a href="http://hackage.haskell.org/package/bytestring">ByteString</a> к ис&shy;поль&shy;зо&shy;ва&shy;нию <a href="http://hackage.haskell.org/package/text">Text</a>.
</p>
<p>
А са&shy;мое за&shy;мет&shy;ное из&shy;ме&shy;не&shy;ние для меня са&shy;мо&shy;го в том, что те&shy;перь у has&shy;tache но&shy;вый мейн&shy;тей&shy;нер, ко&shy;то&shy;рый вот эту но&shy;вую вер&shy;сию и вы&shy;пу&shy;стил. Это <a href="http://covariant.me/">Dani&shy;il Fru&shy;min</a>. Я ото&shy;шел от раз&shy;ра&shy;бот&shy;ки has&shy;tache про&shy;сто по при&shy;чине от&shy;сут&shy;ствия у меня ак&shy;тив&shy;ных про&shy;ек&shy;тов с его ис&shy;поль&shy;зо&shy;ва&shy;ни&shy;ем, а лю&shy;дям надо, кто-то поль&shy;зу&shy;ет&shy;ся, вот Dani&shy;il и по&shy;про&shy;сил&shy;ся на эту роль. Те&shy;перь у меня та&shy;кое стран&shy;ное чув&shy;ство по это&shy;му по&shy;во&shy;ду. С од&shy;ной сто&shy;ро&shy;ны при&shy;ят&shy;но, что там что-то та&shy;кое на&shy;пи&shy;сал, а вот те&shy;перь оно со&shy;всем сво&shy;ей жиз&shy;нью за&shy;жи&shy;ло. С дру&shy;гой сто&shy;ро&shy;ны, эх вре&shy;ме&shy;ни бы мне немно&shy;го сво&shy;бод&shy;но&shy;го, сесть и пе&shy;ре&shy;пи&shy;сать все со&shy;всем по дру&shy;го&shy;му, по пра&shy;виль&shy;но&shy;му, API мож&shy;но еще немно&shy;го обоб&shy;щить, пар&shy;сер пе&shy;ре&shy;пи&shy;сать...
</p>
]]></description>

            <pubDate>Tue, 01 Apr 2014 12:30:00 +0000</pubDate>
        </item>
            <item>
            <title><![CDATA[Большие данные]]></title>
            <guid isPermaLink="true">http://www.lymar.ru/Big%20Data</guid>
            <link>http://www.lymar.ru/Big%20Data</link>

            <comments
            >http://www.lymar.ru/Big%20Data/#disqus_thread</comments>

            <description><![CDATA[<a href="http://www.mann-ivanov-ferber.ru/books/paperbook/big_data/"><img src="http://www.lymar.ru/Big%20Data/98f9ed4800470277c3ea892b1e4c9bdab9c1f0198674424c89fb19abe32e06bc/BIG_DATA_3D_340.jpg" width="229" height="340" class="rightImg"></img></a>
<p>
    Недав&shy;но ко мне об&shy;ра&shy;ти&shy;лась пред&shy;ста&shy;ви&shy;тель&shy;ни&shy;ца из&shy;да&shy;тель&shy;ства <a href="http://www.mann-ivanov-ferber.ru/">«Манн, Ива&shy;нов и Фер&shy;бер»</a> с пред&shy;ло&shy;же&shy;ни&shy;ем про&shy;чи&shy;тать и на&shy;пи&shy;сать от&shy;зыв об од&shy;ной из их но&shy;вых книг. Тема пред&shy;ло&shy;жен&shy;ной кни&shy;ги мне была не ин&shy;те&shy;рес&shy;на и в от&shy;вет на мой от&shy;каз, она пред&shy;ло&shy;жи&shy;ла вы&shy;брать для об&shy;зо&shy;ра лю&shy;бую из из&shy;дан&shy;ных этим из&shy;да&shy;тель&shy;ством книг. Я вы&shy;брал кни&shy;гу <a href="http://www.mann-ivanov-ferber.ru/books/paperbook/big_data/">«Боль&shy;шие дан&shy;ные»</a>. Тут надо сде&shy;лать неболь&shy;шое от&shy;ступ&shy;ле&shy;ние: из рус&shy;ско&shy;языч&shy;ных из&shy;да&shy;тельств «МИФ» мне нра&shy;вить&shy;ся, по&shy;жа&shy;луй, боль&shy;ше всех, так что силь&shy;но упра&shy;ши&shy;вать меня не при&shy;ш&shy;лось. (Бро&shy;сить все это про&shy;грам&shy;ми&shy;ро&shy;ва&shy;ние? Стать из&shy;вест&shy;ным ли&shy;те&shy;ра&shy;тур&shy;ным кри&shy;ти&shy;ком?)
</p>
<p>
    Сле&shy;ду&shy;ет сра&shy;зу сде&shy;лать неболь&shy;шое за&shy;ме&shy;ча&shy;ние ка&shy;са&shy;е&shy;мо са&shy;мо&shy;го это&shy;го тер&shy;ми&shy;на «боль&shy;шие дан&shy;ные». Лич&shy;но для меня это было но&shy;во&shy;стью. Ав&shy;то&shy;ры кни&shy;ги пи&shy;шут что под сло&shy;вом «боль&shy;шие» сле&shy;ду&shy;ет по&shy;ни&shy;мать не столь&shy;ко объ&shy;ем дан&shy;ных, сколь&shy;ко пол&shy;но&shy;ту вы&shy;бор&shy;ки («N = все»). В до&shy;ком&shy;пью&shy;тер&shy;ную эпо&shy;ху для ана&shy;ли&shy;за ка&shy;ких-то дан&shy;ных необ&shy;хо&shy;ди&shy;мо было для на&shy;ча&shy;ла вы&shy;пол&shy;нить из них слу&shy;чай&shy;ную вы&shy;бор&shy;ку та&shy;ко&shy;го объ&shy;е&shy;ма, ко&shy;то&shy;рый еще под&shy;да&shy;ет&shy;ся руч&shy;но&shy;му ана&shy;ли&shy;зу. На ос&shy;но&shy;ве ана&shy;ли&shy;за это&shy;го неболь&shy;шо&shy;го объ&shy;е&shy;ма де&shy;ла&shy;лось пред&shy;по&shy;ло&shy;же&shy;ние о всех дан&shy;ных це&shy;ли&shy;ком (это и сей&shy;час ак&shy;ту&shy;аль&shy;но, на&shy;при&shy;мер, для со&shy;цио&shy;ло&shy;ги&shy;че&shy;ских ис&shy;сле&shy;до&shy;ва&shy;ний, толь&shy;ко тут слож&shy;ность в са&shy;мом сбо&shy;ре дан&shy;ных). Ко&shy;гда мы вхо&shy;дим в мир боль&shy;ших дан&shy;ных, то уже нет необ&shy;хо&shy;ди&shy;мо&shy;сти де&shy;лать пред&shy;ва&shy;ри&shy;тель&shy;ный от&shy;бор из все&shy;го их объ&shy;е&shy;ма, мы ана&shy;ли&shy;зи&shy;ру&shy;ем все це&shy;ли&shy;ком. В кни&shy;ге при&shy;во&shy;дить&shy;ся при&shy;мер вы&shy;яв&shy;ле&shy;ния до&shy;го&shy;вор&shy;ных боев в япон&shy;ской борь&shy;бе сумо с по&shy;мо&shy;щью ста&shy;ти&shy;сти&shy;че&shy;ско&shy;го ана&shy;ли&shy;за. Весь вход&shy;ной объ&shy;ем дан&shy;ных, это все&shy;го чуть боль&shy;ше 64000 по&shy;един&shy;ков — со&shy;вер&shy;шен&shy;но смеш&shy;ной объ&shy;ем для того что мы при&shy;вык&shy;ли под&shy;ра&shy;зу&shy;ме&shy;вать под тер&shy;ми&shy;ном «боль&shy;шие дан&shy;ные». Од&shy;на&shy;ко, с точ&shy;ки зре&shy;ния ав&shy;то&shy;ров кни&shy;ги, это боль&shy;шие дан&shy;ные и есть, ведь для ана&shy;ли&shy;за были ис&shy;поль&shy;зо&shy;ва&shy;ны ре&shy;зуль&shy;та&shy;ты всех боев (N = все) за мно&shy;го лет.
</p>
<p>
    Нет смыс&shy;ла пе&shy;ре&shy;ска&shy;зы&shy;вать об&shy;ла&shy;сти при&shy;ме&shy;не&shy;ния боль&shy;ших дан&shy;ных, ко&shy;то&shy;рые упо&shy;мя&shy;ну&shy;ты в кни&shy;ге&nbsp;— луч&shy;ше ее про&shy;сто про&shy;чи&shy;тать. Там мно&shy;го при&shy;ме&shy;ров. А для ин&shy;те&shy;ре&shy;су&shy;ю&shy;щих&shy;ся те&shy;мой сей&shy;час во&shy;об&shy;ще вре&shy;мя хо&shy;ро&shy;шее: боль&shy;шие дан&shy;ные в моде, в но&shy;во&shy;стях по&shy;сто&shy;ян&shy;но опи&shy;сы&shy;ва&shy;ют все но&shy;вые их при&shy;ме&shy;не&shy;ния.
</p>
<p>
    Эпо&shy;ха боль&shy;ших дан&shy;ных — это не что-то та&shy;кое, к чему надо го&shy;то&shy;вить&shy;ся, это уже наша объ&shy;ек&shy;тив&shy;ная ре&shy;аль&shy;ность, став&shy;шая воз&shy;мож&shy;ной бла&shy;го&shy;да&shy;ря по&shy;все&shy;мест&shy;ной да&shy;ти&shy;фи&shy;ка&shy;ции (пе&shy;ре&shy;во&shy;да ин&shy;фор&shy;ма&shy;ции в при&shy;год&shy;ный для ана&shy;ли&shy;за циф&shy;ро&shy;вой вид). И как у лю&shy;бой мощ&shy;ной тех&shy;но&shy;ло&shy;гии у нее есть две сто&shy;ро&shy;ны.
</p>
<p>
    С од&shy;ной сто&shy;ро&shy;ны, боль&shy;шие дан&shy;ные бук&shy;валь&shy;но спа&shy;са&shy;ют жиз&shy;ни. На&shy;при&shy;мер непре&shy;рыв&shy;ный мо&shy;ни&shy;то&shy;ринг ме&shy;ди&shy;цин&shy;ских по&shy;ка&shy;за&shy;ний недо&shy;но&shy;шен&shy;ных мла&shy;ден&shy;цев, с уче&shy;том ра&shy;нее про&shy;ана&shy;ли&shy;зи&shy;ро&shy;ван&shy;ных за&shy;ме&shy;ров, поз&shy;во&shy;ля&shy;ет рас&shy;по&shy;знать на&shy;ча&shy;ло раз&shy;ви&shy;тия ин&shy;фек&shy;ции, ко&shy;гда ни&shy;ка&shy;ких внеш&shy;них при&shy;зна&shy;ков еще нет. В дан&shy;ных ин&shy;фек&shy;ция уже за&shy;мет&shy;на, и ле&shy;че&shy;ние мож&shy;но на&shy;чать сра&shy;зу.
</p>
<p>
    С дру&shy;гой сто&shy;ро&shy;ны, боль&shy;шие дан&shy;ные бро&shy;са&shy;ют вы&shy;зов со&shy;хра&shy;не&shy;нию кон&shy;фи&shy;ден&shy;ци&shy;аль&shy;но&shy;сти и при&shy;ват&shy;но&shy;сти. Ана&shy;ли&shy;зи&shy;руя по&shy;треб&shy;ле&shy;ния элек&shy;тро&shy;энер&shy;гии че&shy;ло&shy;ве&shy;ком мож&shy;но мно&shy;гое узнать о его при&shy;выч&shy;ках. Или срав&shy;ни&shy;вая по&shy;ве&shy;де&shy;ние лю&shy;дей на сай&shy;тах скры&shy;ва&shy;ю&shy;щих ре&shy;аль&shy;ные име&shy;на и сай&shy;тах где ре&shy;аль&shy;ные име&shy;на из&shy;вест&shy;ны, мож&shy;но с до&shy;ста&shy;точ&shy;но вы&shy;со&shy;кой точ&shy;но&shy;стью иден&shy;ти&shy;фи&shy;ци&shy;ро&shy;вать кон&shy;крет&shy;но&shy;го че&shy;ло&shy;ве&shy;ка (в кни&shy;ге есть при&shy;мер рас&shy;кры&shy;тия ре&shy;аль&shy;ных имен поль&shy;зо&shy;ва&shy;те&shy;лей на ос&shy;но&shy;ве ано&shy;ни&shy;ми&shy;зи&shy;ро&shy;ван&shy;ных дан&shy;ных с сер&shy;ви&shy;са про&shy;ка&shy;та филь&shy;мов <a href="https://www.netflix.com">Net&shy;flix</a> при срав&shy;не&shy;нии их с ре&shy;аль&shy;ны&shy;ми име&shy;на&shy;ми поль&shy;зо&shy;ва&shy;те&shy;лей сай&shy;та <a href="http://www.imdb.com/">IMDb</a>).
</p>
<p>
    Та&shy;к&shy;же есть риск за&shy;хо&shy;да со&shy;всем уже на тем&shy;ную сто&shy;ро&shy;ну. Ска&shy;жем мо&shy;жет по&shy;явить&shy;ся ис&shy;ку&shy;ше&shy;ние про&shy;гно&shy;зи&shy;ро&shy;ва&shy;ния бу&shy;ду&shy;ще&shy;го по&shy;ве&shy;де&shy;ния че&shy;ло&shy;ве&shy;ка, для пре&shy;се&shy;че&shy;ния воз&shy;мож&shy;ных пра&shy;во&shy;на&shy;ру&shy;ше&shy;ний, до их непо&shy;сред&shy;ствен&shy;но&shy;го со&shy;вер&shy;ше&shy;ния. Про&shy;сто по&shy;то&shy;му, что ана&shy;лиз дан&shy;ных по&shy;ка&shy;зал вы&shy;со&shy;кую ве&shy;ро&shy;ят&shy;ность та&shy;ких со&shy;бы&shy;тий. Ан&shy;ти&shy;уто&shy;пия в чи&shy;стом виде — че&shy;ло&shy;век еще ни&shy;че&shy;го не сде&shy;лал, но про&shy;бле&shy;мы у него уже есть.
</p>
<p>
    Важ&shy;но по&shy;ни&shy;мать, боль&shy;шие дан&shy;ные по&shy;ка&shy;зы&shy;ва&shy;ют нам что-то на ос&shy;но&shy;ве того что уже было. Пред&shy;ска&shy;зать нечто прин&shy;ци&shy;пи&shy;аль&shy;но но&shy;вое они не в со&shy;сто&shy;я&shy;нии. Так что мир че&shy;ло&shy;ве&shy;че&shy;ско&shy;го ин&shy;тел&shy;лек&shy;та, твор&shy;че&shy;ства, про&shy;зре&shy;ний, изоб&shy;ре&shy;та&shy;тель&shy;но&shy;сти оста&shy;ют&shy;ся, к сча&shy;стью, за нами, несмот&shy;ря на весь про&shy;гресс в ги&shy;га&shy;гер&shy;цах, те&shy;ра&shy;бай&shy;тах и ал&shy;го&shy;рит&shy;мах.
</p>
]]></description>

            <pubDate>Sun, 23 Mar 2014 14:00:00 +0000</pubDate>
        </item>
            <item>
            <title><![CDATA[Про удаленную работу]]></title>
            <guid isPermaLink="true">http://www.lymar.ru/REMOTE</guid>
            <link>http://www.lymar.ru/REMOTE</link>

            <comments
            >http://www.lymar.ru/REMOTE/#disqus_thread</comments>

            <description><![CDATA[<a href="http://37signals.com/remote/"><img src="http://www.lymar.ru/REMOTE/395668160f4148018c2a905825e8bcf1b854e03f9c23f593e20712d06953c6e1/remote_front.png" width="200" height="302" width="300" class="rightImg"></img></a>
<p>
Про&shy;чи&shy;тал книж&shy;ку <a href="http://37signals.com/remote/">RE&shy;MOTE</a> от 37sig&shy;nals. Книж&shy;ка по&shy;свя&shy;ще&shy;на во&shy;про&shy;сам ор&shy;га&shy;ни&shy;за&shy;ции уда&shy;лен&shy;ной ра&shy;бо&shy;ты. На&shy;пи&shy;са&shy;на на их соб&shy;ствен&shy;ном опы&shy;те су&shy;ще&shy;ство&shy;ва&shy;ния в усло&shy;ви&shy;ях ко&shy;гда боль&shy;шая часть шта&shy;та ком&shy;па&shy;нии гео&shy;гра&shy;фи&shy;че&shy;ски на&shy;хо&shy;дит&shy;ся да&shy;ле&shy;ко друг от дру&shy;га. Книж&shy;ку ре&shy;ко&shy;мен&shy;дую, мне очень по&shy;нра&shy;ви&shy;лась.
</p><p>
В этом де&shy;каб&shy;ре ис&shy;пол&shy;ни&shy;лось 6 лет как я сам ра&shy;бо&shy;таю из дома, и чем даль&shy;ше тем боль&shy;ше мне это нра&shy;вит&shy;ся. Опы&shy;та ру&shy;ко&shy;вод&shy;ства гео&shy;гра&shy;фи&shy;че&shy;ски рас&shy;пре&shy;де&shy;лен&shy;ных ко&shy;манд у меня нет, но опыт ра&shy;бо&shy;ты в та&shy;ких ко&shy;ман&shy;дах есть, и вот в честь юби&shy;лея моей до&shy;маш&shy;ней ра&shy;бо&shy;ты (10 в ше&shy;сти&shy;рич&shy;ной си&shy;сте&shy;ме счис&shy;ле&shy;ния, в сле&shy;ду&shy;ю&shy;щем году бу&shy;дет 10 в се&shy;ми&shy;рич&shy;ной, очень удоб&shy;но) я бы хо&shy;тел по&shy;де&shy;лит&shy;ся сво&shy;им опы&shy;том.
</p>

<h2>
    Про сто&shy;я&shy;ние с кну&shy;том
</h2>

<p>
По мо&shy;е&shy;му опы&shy;ту, боль&shy;шин&shy;ство по&shy;тен&shy;ци&shy;аль&shy;ных ме&shy;не&shy;дже&shy;ров за&shy;ду&shy;мы&shy;ва&shy;ю&shy;щих&shy;ся об ор&shy;га&shy;ни&shy;за&shy;ции уда&shy;лен&shy;ной ра&shy;бо&shy;ты, боль&shy;ше все&shy;го пе&shy;ре&shy;жи&shy;ва&shy;ют что без сто&shy;я&shy;ще&shy;го над ду&shy;шой на&shy;чаль&shy;ни&shy;ка с кну&shy;том ра&shy;бо&shy;та во&shy;об&shy;ще сде&shy;ла&shy;на не бу&shy;дет. Гос&shy;по&shy;да, ну это пол&shy;ная ерун&shy;да, как буд&shy;то в офи&shy;се мало воз&shy;мож&shy;но&shy;сти ни&shy;че&shy;го не де&shy;лать. Даже по&shy;пыт&shy;ки за&shy;кры&shy;вать до&shy;ступ к раз&shy;ным там од&shy;но&shy;класс&shy;ни&shy;кам и вкон&shy;так&shy;там при&shy;во&shy;дит про&shy;сто к ро&shy;сту до&shy;сту&shy;па к ним с мо&shy;биль&shy;ных. Сей&shy;час, я так по&shy;ни&shy;маю, доля та&shy;ких поль&shy;зо&shy;ва&shy;те&shy;лей соц&shy;се&shy;тей из&shy;ме&shy;ря&shy;ет&shy;ся де&shy;сят&shy;ка&shy;ми про&shy;цен&shy;тов. И там очень мно&shy;го вот как раз та&shy;ких, ра&shy;бо&shy;та&shy;ю&shy;щих в ком&shy;па&shy;ни&shy;ях с огра&shy;ни&shy;чен&shy;ным ин&shy;тер&shy;не&shy;том. До&shy;ду&shy;ма&shy;лись ли где-то уже от&shy;би&shy;рать со&shy;то&shy;вые в на&shy;ча&shy;ле ра&shy;бо&shy;че&shy;го дня я не знаю. Но ра&shy;бов к га&shy;ле&shy;ре луч&shy;ше все&shy;го сра&shy;зу це&shy;пью при&shy;ко&shy;вы&shy;вать.
</p><p>
Вы&shy;пол&shy;не&shy;ние со&shy;вре&shy;мен&shy;ной ра&shy;бо&shy;ты, осо&shy;бен&shy;но в IT, осо&shy;бен&shy;но у про&shy;грам&shy;ми&shy;стов, со&shy;вер&shy;шен&shy;но три&shy;ви&shy;аль&shy;но от&shy;сле&shy;жи&shy;ва&shy;ет&shy;ся про&shy;сто по фак&shy;ту вы&shy;пол&shy;не&shy;ния нуж&shy;ной ра&shy;бо&shy;ты. За эти 6 лет ни разу ни&shy;ко&shy;го не за&shy;ин&shy;те&shy;ре&shy;со&shy;ва&shy;ло в ка&shy;кое вре&shy;мя я ра&shy;бо&shy;таю или сколь&shy;ко ча&shy;сов про&shy;во&shy;жу за мо&shy;ни&shy;то&shy;ром или как ча&shy;сто за&shy;хо&shy;жу в соц&shy;се&shy;ти. Во&shy;прос был толь&shy;ко один — как дви&shy;жет&shy;ся ра&shy;бо&shy;та.
</p>

<h2>
    Про са&shy;мо&shy;мо&shy;ти&shy;ва&shy;цию
</h2>

<p>
    Об&shy;рат&shy;ная сто&shy;ро&shy;на преды&shy;ду&shy;щей ме&shy;да&shy;ли. «Если меня не пи&shy;нать по&shy;сто&shy;ян&shy;но, я и де&shy;лать ни&shy;че&shy;го не буду», — рас&shy;про&shy;стра&shy;нен&shy;ная мысль мно&shy;гих на&shy;ем&shy;ных ра&shy;бот&shy;ни&shy;ков. Это, на са&shy;мом деле, до&shy;воль&shy;но се&shy;рьез&shy;ная про&shy;бле&shy;ма. Раз&shy;би&shy;рай&shy;тесь за&shy;чем вам нуж&shy;на ра&shy;бо&shy;та и ка&shy;кая она долж&shy;на быть, мо&shy;жет удаст&shy;ся най&shy;ти хоть ка&shy;кую-то по&shy;ло&shy;жи&shy;тель&shy;ную мо&shy;ти&shy;ва&shy;цию чтоб ее вы&shy;пол&shy;нять, или сме&shy;нить ра&shy;бо&shy;ту на ту что боль&shy;ше по душе. С мо&shy;ти&shy;ва&shy;ци&shy;ей ос&shy;но&shy;ван&shy;ной на стра&shy;хе жить не очень при&shy;ят&shy;но. Как кра&shy;е&shy;вед го&shy;во&shy;рю.
</p>

<h2>
    Про на&shy;сто&shy;я&shy;щие труд&shy;но&shy;сти
</h2>

<p>
    Един&shy;ствен&shy;ная боль&shy;шая про&shy;бле&shy;ма с ко&shy;то&shy;рой лич&shy;но я столк&shy;нул&shy;ся за эти годы — это де&shy;фи&shy;цит об&shy;ще&shy;ния. Если из дома вы&shy;хо&shy;дишь толь&shy;ко в ма&shy;га&shy;зин, да еще и до&shy;маш&shy;ние куда-ни&shy;будь разъ&shy;е&shy;ха&shy;лись, на&shy;чи&shy;на&shy;ешь на&shy;ту&shy;раль&shy;но ди&shy;чать. В офи&shy;се хоть кол&shy;ле&shy;ги есть, и по пути на ра&shy;бо&shy;ту и с ра&shy;бо&shy;ту ка&shy;кое-ни&shy;ка&shy;кое об&shy;ще&shy;ние, жи&shy;вых лю&shy;дей ви&shy;дишь. А тут надо се&shy;рьез&shy;но ду&shy;мать что де&shy;лать. По&shy;мо&shy;га&shy;ют раз&shy;ные там хоб&shy;би, я, на&shy;при&shy;мер, два&shy;жды в неде&shy;лю со&shy;би&shy;раю неболь&shy;шую груп&shy;пу за&shy;ни&shy;ма&shy;ю&shy;щих&shy;ся ци&shy;гун у себя дома, вме&shy;сте за&shy;ни&shy;ма&shy;ем&shy;ся, по&shy;том чай пьем. И поль&shy;за от ци&shy;гу&shy;на и поль&shy;за от об&shy;ще&shy;ния.
</p>

<h2>
    Про фи&shy;зи&shy;че&shy;скую на&shy;груз&shy;ку
</h2>

<p>
    Это тоже про&shy;бле&shy;ма. Ко&shy;гда рас&shy;сто&shy;я&shy;ние кро&shy;вать-кух&shy;ня-ком&shy;пью&shy;тер в сум&shy;ме мет&shy;ров 20, фи&shy;зи&shy;че&shy;ская фор&shy;ма сами по&shy;ни&shy;ма&shy;е&shy;те ка&shy;кая ста&shy;но&shy;вит&shy;ся. 37sig&shy;nals пи&shy;шут, что они даже ком&shy;пен&shy;си&shy;ру&shy;ют рас&shy;хо&shy;ду на фит&shy;нес клу&shy;бы для сво&shy;их ра&shy;бот&shy;ни&shy;ков — за&shy;ме&shy;ча&shy;тель&shy;ная идея.
</p><p>
    Тут мне, надо ска&shy;зать, нечем по&shy;хва&shy;стать&shy;ся, я что-то де&shy;лаю в смыс&shy;ле спор&shy;та, но это&shy;го явно мне недо&shy;ста&shy;точ&shy;но. Про&shy;дол&shy;жаю ра&shy;бо&shy;тать над этим во&shy;про&shy;сом.
</p>

<h2>
    Про ор&shy;га&shy;ни&shy;за&shy;цию ра&shy;бо&shy;че&shy;го ме&shy;ста
</h2>

<p>
    Тут мне на&shy;ту&shy;раль&shy;но по&shy;вез&shy;ло, у меня есть воз&shy;мож&shy;ность дома одну ком&shy;на&shy;ту за&shy;нять под ка&shy;би&shy;нет где я и ра&shy;бо&shy;таю. В RE&shy;MOTE пе&shy;ре&shy;чис&shy;ля&shy;ют&shy;ся раз&shy;ные ва&shy;ри&shy;ан&shy;ты где мож&shy;но еще ра&shy;бо&shy;тать: кафе, ко&shy;вор&shy;кинг цен&shy;тры и т.п. Я пока не про&shy;бо&shy;вал, мне дома нор&shy;маль&shy;но.
</p><p>
    С ин&shy;тер&shy;не&shy;том сей&shy;час тоже все за&shy;ме&shy;ча&shy;тель&shy;но. Пе&shy;ри&shy;о&shy;ди&shy;че&shy;ски я в де&shy;рев&shy;ню уез&shy;жаю, там нет воды в кране (как и са&shy;мо&shy;го кра&shy;на), нет ка&shy;на&shy;ли&shy;за&shy;ции, до&shy;рог тоже мож&shy;но ска&shy;зать что нет, но быст&shy;рый ин&shy;тер&shy;нет в те&shy;ле&shy;фоне там есть, та&shy;кой вот из&shy;гиб тех&shy;ни&shy;че&shy;ско&shy;го про&shy;грес&shy;са.
</p>

<h2>
    Про плю&shy;сы
</h2>

<p>
    Мно&shy;го вре&shy;ме&shy;ни вы&shy;сво&shy;бож&shy;да&shy;ет&shy;ся. Ни&shy;ка&shy;ко&shy;го пе&shy;ре&shy;пол&shy;нен&shy;но&shy;го об&shy;ще&shy;ствен&shy;но&shy;го транс&shy;пор&shy;та (или сто&shy;я&shy;ния в проб&shy;ках), где и те&shy;ря&shy;ют&shy;ся эти 1-2-3-… часа в день у офис&shy;ных ра&shy;бот&shy;ни&shy;ков.
</p><p>
    Ра&shy;бо&shy;чее ме&shy;сто ор&shy;га&shy;ни&shy;зо&shy;ва&shy;на как угод&shy;но по соб&shy;ствен&shy;но&shy;му вку&shy;су. Хо&shy;ро&shy;ший мо&shy;ни&shy;тор, кла&shy;ви&shy;а&shy;ту&shy;ра, крес&shy;ло.
</p><p>
    Ра&shy;бо&shy;чее вре&shy;мя вы&shy;би&shy;ра&shy;ет&shy;ся по вку&shy;су. Мож&shy;но хоть в 6 утра на&shy;чать ра&shy;бо&shy;тать и к обе&shy;ду все пе&shy;ре&shy;де&shy;лать, мож&shy;но рано утром часть ра&shy;бо&shy;ты, по&shy;том еще немно&shy;го ве&shy;че&shy;ром. В се&shy;ре&shy;дине дня мож&shy;но в ма&shy;га&shy;зин схо&shy;дить, а не тол&shy;кать&shy;ся там в 19 ча&shy;сов ко&shy;гда туда все по&shy;сле офис&shy;но&shy;го ра&shy;бо&shy;че&shy;го дня при&shy;хо&shy;дят.
</p><p>
    С се&shy;мьей боль&shy;ше вре&shy;ме&shy;ни про&shy;во&shy;дишь. Папа ко&shy;неч&shy;но днем за&shy;нят и ра&shy;бо&shy;та&shy;ет, но ино&shy;гда от&shy;влечь мож&shy;но.
</p><p>
    Пи&shy;тать&shy;ся мож&shy;но вкус&shy;ной до&shy;маш&shy;ней толь&shy;ко что при&shy;го&shy;тов&shy;лен&shy;ной едой, а не в непо&shy;нят&shy;ных ка&shy;феш&shy;ках и сто&shy;ло&shy;вых.
</p>

<h2>
    Про хо&shy;ро&shy;шо
</h2>

<p>
    Я, как и ав&shy;то&shy;ры книж&shy;ки RE&shy;MOTE, счи&shy;таю что чем даль&shy;ше тем боль&shy;ше лю&shy;дей бу&shy;дет уда&shy;лен&shy;но ра&shy;бо&shy;тать. Плю&shy;сов мно&shy;го, ми&shy;ну&shy;сов мало.
</p><p>
    Если вы ра&shy;бо&shy;то&shy;да&shy;тель, про&shy;чи&shy;тай&shy;те RE&shy;MOTE и по&shy;ду&shy;май&shy;те об ор&shy;га&shy;ни&shy;за&shy;ции уда&shy;лен&shy;ной ра&shy;бо&shy;ты у себя.
</p><p>
    Если вы ра&shy;бот&shy;ник, про&shy;чи&shy;тай&shy;те RE&shy;MOTE и аги&shy;ти&shy;руй&shy;те сво&shy;е&shy;го ра&shy;бо&shy;то&shy;да&shy;те&shy;ля на&shy;чать ор&shy;га&shy;ни&shy;за&shy;цию уда&shy;лен&shy;ной ра&shy;бо&shy;ты. Мож&shy;но вот как раз с вас.
</p>

<p>
    <strong>UPD:</strong> В из&shy;да&shy;тель&shy;стве «Манн, Ива&shy;нов и Фер&shy;бер» вы&shy;шел <a href="http://www.mann-ivanov-ferber.ru/books/paperbook/remote_office_not_required/">рус&shy;ский пе&shy;ре&shy;вод кни&shy;ги</a>.
</p>
]]></description>

            <pubDate>Fri, 06 Dec 2013 09:15:00 +0000</pubDate>
        </item>
            <item>
            <title><![CDATA[Резервное копирование с BitTorrent Sync]]></title>
            <guid isPermaLink="true">http://www.lymar.ru/btsync-backup</guid>
            <link>http://www.lymar.ru/btsync-backup</link>

            <comments
            >http://www.lymar.ru/btsync-backup/#disqus_thread</comments>

            <description><![CDATA[<h2>
    Что за зверь?
</h2>

<a href="http://www.bittorrent.com/sync"><img src="http://www.lymar.ru/btsync-backup/bfc20ca70abc457223a0d5b2e814a5b36cb09968176d0bf94da7070a57c64135/sync_anywhere.png" width="289" height="133" class="rightImg"></img></a>
<p>
    <a href="http://www.bittorrent.com/sync">Bit&shy;Tor&shy;rent Sync</a> — со&shy;вер&shy;шен&shy;но за&shy;ме&shy;ча&shy;тель&shy;ный сер&shy;вис, за&shy;пу&shy;щен&shy;ный ав&shy;то&shy;ра&shy;ми все&shy;ми нами лю&shy;би&shy;мо&shy;го про&shy;то&shy;ко&shy;ла Bit&shy;Tor&shy;rent в ап&shy;ре&shy;ле 2013. Это сер&shy;вис син&shy;хро&shy;ни&shy;за&shy;ции фай&shy;лов, при этом син&shy;хро&shy;ни&shy;за&shy;ция по воз&shy;мож&shy;но&shy;сти про&shy;ис&shy;хо&shy;дит на&shy;пря&shy;мую меж&shy;ду устрой&shy;ства&shy;ми, без ис&shy;поль&shy;зо&shy;ва&shy;ния цен&shy;траль&shy;но&shy;го сер&shy;ве&shy;ра для пе&shy;ре&shy;да&shy;чи (т. е. по тех&shy;но&shy;ло&shy;гии <a href="http://en.wikipedia.org/wiki/Peer_to_peer">peer-to-peer</a>). P2P при&shy;ро&shy;да дает одно се&shy;рьез&shy;ное пре&shy;иму&shy;ще&shy;ство пе&shy;ред сер&shy;ви&shy;са&shy;ми об&shy;лач&shy;но&shy;го хра&shy;не&shy;ния фай&shy;лов (Drop&shy;box, Ян&shy;декс.Диск, Google Drive) ко&shy;то&shy;рые мно&shy;гие ис&shy;поль&shy;зу&shy;ют для син&shy;хро&shy;ни&shy;за&shy;ции сво&shy;их устройств: в P2P мы ни&shy;как не огра&shy;ни&shy;че&shy;ны объ&shy;е&shy;ма&shy;ми син&shy;хро&shy;ни&shy;зи&shy;ру&shy;е&shy;мых дан&shy;ных, нуж&shy;но пе&shy;ре&shy;дать те&shy;ра&shy;байт дан&shy;ных, на здо&shy;ро&shy;вье, хва&shy;ти&shy;ло бы про&shy;пуск&shy;ной спо&shy;соб&shy;но&shy;сти сети и объ&shy;е&shy;ма дис&shy;ков на син&shy;хро&shy;ни&shy;зи&shy;ру&shy;е&shy;мых ма&shy;ши&shy;нах. В об&shy;лач&shy;ных сер&shy;ви&shy;сах все&shy;гда есть ка&shy;кое-то не очень боль&shy;шое огра&shy;ни&shy;че&shy;ние объ&shy;е&shy;ма, и за его уве&shy;ли&shy;че&shy;ние нуж&shy;но до&shy;пла&shy;чи&shy;вать. Ми&shy;ну&shy;сом же P2P син&shy;хро&shy;ни&shy;за&shy;ции мож&shy;но на&shy;звать необ&shy;хо&shy;ди&shy;мость од&shy;но&shy;вре&shy;мен&shy;но&shy;го при&shy;сут&shy;ствия в сети син&shy;хро&shy;ни&shy;зи&shy;ру&shy;е&shy;мых устройств.
</p>
<p>
    Уви&shy;дев анонс Bit&shy;Tor&shy;rent Sync я сра&shy;зу его по&shy;про&shy;бо&shy;вал в деле и остал&shy;ся очень до&shy;во&shy;лен: под&shy;дер&shy;жи&shy;ва&shy;ет все нуж&shy;ные мне плат&shy;фор&shy;мы, син&shy;хро&shy;ни&shy;зи&shy;ру&shy;ет быст&shy;ро. Я даже уда&shy;лил за даль&shy;ней&shy;шей нена&shy;доб&shy;но&shy;стью свой ак&shy;ка&shy;унт в Drop&shy;Box.
</p>

<h2>
    Ис&shy;поль&shy;зо&shy;ва&shy;ние для ре&shy;зерв&shy;но&shy;го ко&shy;пи&shy;ро&shy;ва&shy;ния.
</h2>

<p>
    Со&shy;зда&shy;ние ре&shy;зерв&shy;ных ко&shy;пий Важ&shy;ных Дан&shy;ных это все&shy;гда ин&shy;те&shy;рес&shy;но. Для себя я с по&shy;мо&shy;щью BT&shy;Sync со&shy;ору&shy;дил та&shy;кую шту&shy;ку: за&shy;вел сер&shy;вер на <a href="http://aws.amazon.com/">Ama&shy;zon Web Ser&shy;vices</a> и по&shy;ста&shy;вил на него BT&shy;Sync. Дан&shy;ные хра&shy;нят&shy;ся в <a href="http://aws.amazon.com/ebs/">Elas&shy;tic Block Store</a>. Этот са&shy;мый EBS име&shy;ет функ&shy;цию со&shy;зда&shy;ния ин&shy;кре&shy;мен&shy;таль&shy;ных сним&shy;ков фай&shy;ло&shy;вой си&shy;сте&shy;мы. «Ин&shy;кре&shy;мен&shy;таль&shy;ные» зна&shy;чит что со&shy;хра&shy;ня&shy;ют&shy;ся толь&shy;ко из&shy;ме&shy;не&shy;ния, а не все дан&shy;ные це&shy;ли&shy;ком, т. е. если от преды&shy;ду&shy;ще&shy;го сним&shy;ка те&shy;пе&shy;реш&shy;ний от&shy;ли&shy;ча&shy;ет&shy;ся толь&shy;ко до&shy;бав&shy;ле&shy;ни&shy;ем пары ме&shy;га&shy;байт то и за&shy;ни&shy;мать этот но&shy;вый сни&shy;мок бу&shy;дет тоже толь&shy;ко эти два ме&shy;га&shy;бай&shy;та, неза&shy;ви&shy;си&shy;мо от объ&shy;е&shy;ма все&shy;го хра&shy;ни&shy;ли&shy;ща.
</p>
<p>
    И те&shy;перь по кро&shy;ну раз в час на этом уда&shy;лен&shy;ном сер&shy;ве&shy;ре у меня за&shy;пус&shy;ка&shy;ет&shy;ся со&shy;зда&shy;ние но&shy;во&shy;го сним&shy;ка EBS. Сей&shy;час я хра&shy;ню сним&shy;ки с ча&shy;со&shy;вым раз&shy;ре&shy;ше&shy;ни&shy;ем за трое су&shy;ток, и су&shy;точ&shy;ные в те&shy;че&shy;нии 15 дней, для меня это со&shy;вер&shy;шен&shy;но до&shy;ста&shy;точ&shy;но, даже с из&shy;быт&shy;ком чест&shy;но го&shy;во&shy;ря.
</p>
<p>
    В ка&shy;че&shy;стве бо&shy;ну&shy;са у меня есть ко&shy;пия дан&shy;ных не при&shy;вя&shy;зан&shy;ная к моим устрой&shy;ствам, эда&shy;кий ана&shy;лог об&shy;лач&shy;но&shy;го хра&shy;ни&shy;ли&shy;ща по силь&shy;но бо&shy;лее низ&shy;ким це&shy;нам чем у об&shy;лач&shy;ных про&shy;вай&shy;де&shy;ров.
</p>
<p>
    Ни&shy;че&shy;го из на&shy;пи&shy;сан&shy;но&shy;го и на&shy;стро&shy;ен&shy;но&shy;го вы&shy;кла&shy;ды&shy;вать не буду, пока по край&shy;ней мере, там все та&shy;кое, мммм... на&shy;деж&shy;но скле&shy;ен&shy;ное изо&shy;лен&shy;той и на за&shy;би&shy;тых мо&shy;лот&shy;ком шу&shy;ру&shy;пах, нель&shy;зя та&shy;кое лю&shy;дям по&shy;ка&shy;зы&shy;вать. Од&shy;на&shy;ко если кто же&shy;ла&shy;ет по&shy;вто&shy;рить для себя та&shy;кую кон&shy;струк&shy;цию и упрет&shy;ся в ка&shy;кую-то непо&shy;нят&shy;ность, ми&shy;ло&shy;сти про&shy;шу в ком&shy;мен&shy;та&shy;рии.
</p>
]]></description>

            <pubDate>Tue, 19 Nov 2013 17:15:00 +0000</pubDate>
        </item>
            <item>
            <title><![CDATA[Математические формулы ТеX в SVG]]></title>
            <guid isPermaLink="true">http://www.lymar.ru/tex2svg%3A%20dvisvgm</guid>
            <link>http://www.lymar.ru/tex2svg%3A%20dvisvgm</link>

            <comments
            >http://www.lymar.ru/tex2svg%3A%20dvisvgm/#disqus_thread</comments>

            <description><![CDATA[<p>
    Ока&shy;зы&shy;ва&shy;ет&shy;ся во&shy;все не обя&shy;за&shy;тель&shy;но встав&shy;лять <img class="mathImg" src="http://www.lymar.ru/tex2svg%3A%20dvisvgm/608771d21d9f26b0435c658a2dc76860181628722c0b543df425c7255d2d432e/math_ba6098294be26a4f00dafb0bf37da67bf151c3260197448e11940aacbd5d52a9.svg" style="width:21.8612pt; height:10.7833pt;" '>-ов&shy;скую ма&shy;те&shy;ма&shy;ти&shy;ку в вебе та&shy;к&shy;же как это де&shy;ла&shy;лось в 1999 году — в виде ги&shy;фов с про&shy;зрач&shy;ным фо&shy;ном. Бу&shy;ду&shy;щее уже дав&shy;но на&shy;сту&shy;пи&shy;ло, те&shy;перь мож&shy;но ис&shy;поль&shy;зо&shy;вать век&shy;тор&shy;ный <a href="http://ru.wikipedia.org/wiki/SVG">SVG</a>.
</p>
<p>
    Это я вот к чему. Недав&shy;но, об&shy;за&shy;ве&shy;дясь Мак&shy;бу&shy;ком с Reti&shy;na-дис&shy;пле&shy;ем про&shy;бле&shy;ма раст&shy;ро&shy;вой гра&shy;фи&shy;ки в вебе у меня всплы&shy;ла в пол&shy;ный рост: если рань&shy;ше, ко&shy;гда часть ка&shy;кой-ни&shy;будь стра&shy;нич&shy;ки была от&shy;ри&shy;со&shy;ва&shy;на, ска&shy;жем, фо&shy;то&shy;шо&shy;пом, а часть сред&shy;ства&shy;ми CSS, то про&shy;сто глаз слег&shy;ка спо&shy;ты&shy;кал&shy;ся на этой раз&shy;ни&shy;це, но тер&shy;пи&shy;мо было. А на ре&shy;тине раз&shy;ни&shy;ца ста&shy;но&shy;вит&shy;ся уже жут&shy;кой — раст&shy;ро&shy;вые ча&shy;сти сай&shy;тов вы&shy;гля&shy;дят как на&shy;бор боль&shy;ших пик&shy;се&shy;лей.
</p>
<p>
    И если на дру&shy;гих сай&shy;тах это про&shy;бле&shy;мы их со&shy;зда&shy;те&shy;лей, то на моем соб&shy;ствен&shy;ном бло&shy;ге (да, да, пишу я в него реже чем ко&shy;вы&shy;ряю его дви&shy;жок и ди&shy;зайн) меня та&shy;кая раз&shy;ни&shy;ца не устра&shy;и&shy;ва&shy;ла со&shy;вер&shy;шен&shy;но, и боль&shy;ше все&shy;го у меня она вид&shy;на как раз на встав&shy;лен&shy;ных ма&shy;те&shy;ма&shy;ти&shy;че&shy;ских фор&shy;му&shy;лах.
</p>
<p>
    По&shy;лез раз&shy;би&shy;рать&shy;ся как бы ма&shy;те&shy;ма&shy;ти&shy;ку в SVG рен&shy;де&shy;рить, ока&shy;за&shy;лось что че&shy;ло&shy;ве&shy;че&shy;ство эту про&shy;бле&shy;му дав&shy;но ре&shy;ши&shy;ло, и есть ути&shy;лит&shy;ка <a href="http://dvisvgm.sourceforge.net/">dvisvgm</a> ров&shy;но для это&shy;го и пред&shy;на&shy;зна&shy;чен&shy;ная. Я вы&shy;зы&shy;ваю ее так:
</p>
<p>
<div class="sourceCodeWrap"><table class="sourceCode"><tr><td class="nums"><pre><code></code></pre></td><td class="sourceCode"><pre class="sourceCode"><code><span class="NormalTok">latex some.tex</span><br /><span class="NormalTok">dvisvgm --no-fonts some.dvi</span><br /></code></pre></td></tr></table></div></p>
<p>
    Все, на вы&shy;хо&shy;де some.svg за&shy;ме&shy;ча&shy;тель&shy;но вы&shy;гля&shy;дя&shy;щий на ре&shy;тине.
</p>
<p>
    На&shy;гляд&shy;ная раз&shy;ни&shy;ца меж&shy;ду рас&shy;тром и век&shy;то&shy;ром для ма&shy;те&shy;ма&shy;ти&shy;ки (при&shy;вет всем вла&shy;дель&shy;цам ре&shy;ти&shy;на-дис&shy;пле&shy;ев). Растр:
</p>
<p>
    <img src="http://www.lymar.ru/tex2svg%3A%20dvisvgm/608771d21d9f26b0435c658a2dc76860181628722c0b543df425c7255d2d432e/math.png" width="133" height="114" class="mathImg centerImg"></img>
</p>
<p>
    Век&shy;тор:
</p>
<p>
    <img src="http://www.lymar.ru/tex2svg%3A%20dvisvgm/608771d21d9f26b0435c658a2dc76860181628722c0b543df425c7255d2d432e/math.svg" width="133" height="114" class="mathImg centerImg"></img>
</p>
<p>
    Кста&shy;ти, чтоб два раза не вста&shy;вать, сэко&shy;ном&shy;лю кому-ни&shy;будь пару ча&shy;сов на раз&shy;би&shy;ра&shy;тель&shy;ство.  У всей ма&shy;те&shy;ма&shy;ти&shy;ки у меня в бло&shy;ге вот та&shy;кой шаб&shy;лон:
</p>
<p>
<div class="sourceCodeWrap"><table class="sourceCode"><tr><td class="nums"><pre><code>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></code></pre></td><td class="sourceCode"><pre class="sourceCode"><code><span class="NormalTok">\documentclass[12pt]{article}</span><br /><span class="NormalTok">\pagestyle{empty}</span><br /><span class="NormalTok">\usepackage{amsmath}</span><br /><span class="NormalTok">\usepackage{sfmath}</span><br /><span class="NormalTok">\begin{document}</span><br /><br /><span class="NormalTok">$E=mc^2$</span><br /><br /><span class="NormalTok">\end{document}</span><br /></code></pre></td></tr></table></div></p>]]></description>

            <pubDate>Wed, 26 Jun 2013 15:30:00 +0000</pubDate>
        </item>
            <item>
            <title><![CDATA[Конвертация репозитория Bazaar в Git]]></title>
            <guid isPermaLink="true">http://www.lymar.ru/bzr2git</guid>
            <link>http://www.lymar.ru/bzr2git</link>

            <comments
            >http://www.lymar.ru/bzr2git/#disqus_thread</comments>

            <description><![CDATA[<p>Мо&shy;жет кому-то по&shy;на&shy;до&shy;бит&shy;ся. Кон&shy;вер&shy;ти&shy;ру&shy;ем ре&shy;по&shy;зи&shy;то&shy;рий Bazaar в Git:
</p><p>
1. Де&shy;ла&shy;ем ре&shy;зерв&shy;ную ко&shy;пию ис&shy;ход&shy;но&shy;го ре&shy;по&shy;зи&shy;то&shy;рия.
</p><p>
2. Уста&shy;нав&shy;ли&shy;ва&shy;ем bzr-fastim&shy;port:
</p><p>
<div class="sourceCodeWrap"><table class="sourceCode"><tr><td class="nums"><pre><code></code></pre></td><td class="sourceCode"><pre class="sourceCode"><code><span class="NormalTok">sudo apt-get install bzr-fastimport</span><br /></code></pre></td></tr></table></div></p><p>
3. Кон&shy;вер&shy;ти&shy;ру&shy;ем:
</p><p>
<div class="sourceCodeWrap"><table class="sourceCode"><tr><td class="nums"><pre><code></code></pre></td><td class="sourceCode"><pre class="sourceCode"><code><span class="NormalTok">git init</span><br /><span class="NormalTok">bzr fast-export `pwd` | git fast-import</span><br /><span class="NormalTok">rm -r .bzr</span><br /><span class="NormalTok">git reset HEAD</span><br /></code></pre></td></tr></table></div></p>]]></description>

            <pubDate>Thu, 30 May 2013 10:30:00 +0000</pubDate>
        </item>
            <item>
            <title><![CDATA[Аттрактор Лоренца]]></title>
            <guid isPermaLink="true">http://www.lymar.ru/Lorenz</guid>
            <link>http://www.lymar.ru/Lorenz</link>

            <comments
            >http://www.lymar.ru/Lorenz/#disqus_thread</comments>

            <description><![CDATA[<p>
Раз&shy;вле&shy;ка&shy;юсь с ани&shy;ма&shy;ци&shy;ей на <a href="http://ru.wikipedia.org/wiki/Canvas_(HTML)">HTML5 can&shy;vas</a>. На&shy;пи&shy;сал вот та&shy;кую чу&shy;дес&shy;ную ви&shy;зу&shy;а&shy;ли&shy;за&shy;цию ат&shy;трак&shy;то&shy;ра Ло&shy;рен&shy;ца:
</p>
<p>
<iframe class="centerFrame bordered" src="http://www.lymar.ru/Lorenz/68950acceb3025e3d5a2cf1ad7e12b4eb0fe6a2ddf96018ac5f7718ebb29ee03/Lorenz.html" width="700" height="550"></iframe>
</p>
<p class="centerPar">
    <a href="http://www.lymar.ru/Lorenz/68950acceb3025e3d5a2cf1ad7e12b4eb0fe6a2ddf96018ac5f7718ebb29ee03/Lorenz.html" target="_blank">
        От&shy;крыть в но&shy;вом окне</a>
</p>
<p>
При от&shy;кры&shy;ва&shy;нии в но&shy;вом окне, не за&shy;будь&shy;те что бра&shy;у&shy;зер мож&shy;но пе&shy;ре&shy;ве&shy;сти в пол&shy;но&shy;экран&shy;ный ре&shy;жим, на&shy;жав F11. Так смот&shy;рит&shy;ся ещё луч&shy;ше.
</p>
<p>
То что вы тут ви&shy;ди&shy;те, пред&shy;став&shy;ля&shy;ет со&shy;бой ани&shy;ма&shy;цию ре&shy;ше&shy;ния си&shy;сте&shy;мы сле&shy;ду&shy;ю&shy;щих диф&shy;фе&shy;рен&shy;ци&shy;аль&shy;ных урав&shy;не&shy;ний:
</p>
<p>
<img class="mathImg" src="http://www.lymar.ru/Lorenz/68950acceb3025e3d5a2cf1ad7e12b4eb0fe6a2ddf96018ac5f7718ebb29ee03/math_bb253ad88f6abed9b9132eb5b62baf182db905764598a4a5d8455f512ef54cab.svg" style="width:96.8086pt; height:82.0485pt;" '></p>

<p>
Где <img class="mathImg" src="http://www.lymar.ru/Lorenz/68950acceb3025e3d5a2cf1ad7e12b4eb0fe6a2ddf96018ac5f7718ebb29ee03/math_38a0d4cd05f8163dc28c81f54383f5cd25244e37e53c3a23ee5cb6495396929c.svg" style="width:6.47591pt; height:5.33332pt;" '>, <img class="mathImg" src="http://www.lymar.ru/Lorenz/68950acceb3025e3d5a2cf1ad7e12b4eb0fe6a2ddf96018ac5f7718ebb29ee03/math_ae67657b721564f204c4f0daa75e857587d754b11574b603f73d48477434317e.svg" style="width:6.67175pt; height:7.66665pt;" '>, <img class="mathImg" src="http://www.lymar.ru/Lorenz/68950acceb3025e3d5a2cf1ad7e12b4eb0fe6a2ddf96018ac5f7718ebb29ee03/math_dc0701efbdcce9ddeed815d928249c6219b2b5ba9dcd74c0451f1d20a9b0904b.svg" style="width:6.15995pt; height:5.33332pt;" '> — те&shy;ку&shy;щее со&shy;сто&shy;я&shy;ние си&shy;сте&shy;мы, <img class="mathImg" src="http://www.lymar.ru/Lorenz/68950acceb3025e3d5a2cf1ad7e12b4eb0fe6a2ddf96018ac5f7718ebb29ee03/math_6eeba054012839fd1c2c1c54fff5f10537522e4ca5e3211c7bde0430dac4a72b.svg" style="width:5.11552pt; height:6.85717pt;" '> — вре&shy;мя, <img class="mathImg" src="http://www.lymar.ru/Lorenz/68950acceb3025e3d5a2cf1ad7e12b4eb0fe6a2ddf96018ac5f7718ebb29ee03/math_65b53accd07b9afe8b8e434d300986876bf2a2afda1b98f933575a73cb68d7b8.svg" style="width:7.10897pt; height:5.16668pt;" '>, <img class="mathImg" src="http://www.lymar.ru/Lorenz/68950acceb3025e3d5a2cf1ad7e12b4eb0fe6a2ddf96018ac5f7718ebb29ee03/math_2ef03bc15f773aedcb5856d87228b3647862d893f70280f24660ed48605525c5.svg" style="width:6.06037pt; height:7.5pt;" '>, <img class="mathImg" src="http://www.lymar.ru/Lorenz/68950acceb3025e3d5a2cf1ad7e12b4eb0fe6a2ddf96018ac5f7718ebb29ee03/math_55a2001e3e36a65c24bf5ef79b96a6ed60913984211939baa2df80fba26ea39d.svg" style="width:7.29855pt; height:10.6666pt;" '> — па&shy;ра&shy;мет&shy;ры си&shy;сте&shy;мы.
</p>
<p>
В моём при&shy;ме&shy;ре:
</p>
<p>
<img class="mathImg" src="http://www.lymar.ru/Lorenz/68950acceb3025e3d5a2cf1ad7e12b4eb0fe6a2ddf96018ac5f7718ebb29ee03/math_c3f3667fc3bbdeca302ca67fb2a47b3935ed3ea37adff72712997ac7e201929a.svg" style="width:56.1524pt; height:97.1611pt;" '></p>

<p>
Для каж&shy;дой ли&shy;нии (пред&shy;став&shy;ля&shy;ю&shy;щей со&shy;бой от&shy;дель&shy;ное ре&shy;ше&shy;ния урав&shy;не&shy;ния) я вы&shy;би&shy;раю на&shy;чаль&shy;ное зна&shy;че&shy;ние с до&shy;бав&shy;ле&shy;ни&shy;ем неболь&shy;шо&shy;го слу&shy;чай&shy;но&shy;го чис&shy;ла. Та&shy;ким об&shy;ра&shy;зом очень хо&shy;ро&shy;шо за&shy;ме&shy;тен «эф&shy;фект ба&shy;боч&shy;ки»: незна&shy;чи&shy;тель&shy;ное воз&shy;му&shy;ще&shy;ние си&shy;сте&shy;мы («взмах кры&shy;ла ба&shy;боч&shy;ки») при&shy;во&shy;дят к очень боль&shy;шим из&shy;ме&shy;не&shy;ни&shy;ям в даль&shy;ней&shy;шем, ли&shy;нии «вы&shy;ле&shy;та&shy;ю&shy;щие» из очень близ&shy;ких то&shy;чек вско&shy;ре на&shy;чи&shy;на&shy;ют де&shy;мон&shy;стри&shy;ро&shy;вать со&shy;вер&shy;шен&shy;но раз&shy;ное по&shy;ве&shy;де&shy;ние.
</p>




]]></description>

            <pubDate>Thu, 29 Nov 2012 09:00:00 +0000</pubDate>
        </item>
            <item>
            <title><![CDATA[Новый движок моего блога]]></title>
            <guid isPermaLink="true">http://www.lymar.ru/static%20blog%20engine</guid>
            <link>http://www.lymar.ru/static%20blog%20engine</link>

            <comments
            >http://www.lymar.ru/static%20blog%20engine/#disqus_thread</comments>

            <description><![CDATA[<p>
В оче&shy;ред&shy;ной раз пе&shy;ре&shy;де&shy;лал дви&shy;жок сво&shy;е&shy;го бло&shy;га. Те&shy;перь у меня чи&shy;сто ста&shy;ти&shy;че&shy;ский блог, ле&shy;жа&shy;щий в <a href="http://aws.amazon.com/s3/">Ama&shy;zon S3</a>. <a href="http://www.lymar.ru/new%20engine/">Преды&shy;ду&shy;щая вер&shy;сия</a> бла&shy;го&shy;по&shy;луч&shy;но и без еди&shy;но&shy;го на&shy;ре&shy;ка&shy;ния от&shy;ра&shy;бо&shy;та&shy;ла свои год и 9 ме&shy;ся&shy;цев. Те&shy;перь на&shy;ста&shy;ло вре&shy;мя пе&shy;ре&shy;мен.
</p>
<p>
Мне ка&shy;жет&shy;ся, что сум&shy;мар&shy;ное вре&shy;мя, ко&shy;то&shy;рое я тра&shy;чу на про&shy;грам&shy;ми&shy;ро&shy;ва&shy;ние движ&shy;ков сво&shy;е&shy;го бло&shy;га, уже пре&shy;вы&shy;ша&shy;ет вре&shy;мя на то что&shy;бы что-то сюда пи&shy;сать. И уж во вся&shy;ком слу&shy;чае это явно срав&shy;ни&shy;мые ве&shy;ли&shy;чи&shy;ны.
</p>
<p>
Окон&shy;ча&shy;тель&shy;ным толч&shy;ком к пе&shy;ре&shy;хо&shy;ду на чи&shy;сто ста&shy;ти&shy;че&shy;ский блог по&shy;слу&shy;жи&shy;ло недав&shy;нее по&shy;яв&shy;ле&shy;ние у Ama&shy;zon S3 функ&shy;ции <a href="http://docs.amazonwebservices.com/AmazonS3/latest/dev/how-to-page-redirect.html">ре&shy;ди&shy;рек&shy;тов</a>, без ре&shy;ди&shy;рек&shy;тов всё-таки слож&shy;но обой&shy;тись. Та&shy;к&shy;же, для та&shy;ко&shy;го про&shy;сто&shy;го сай&shy;та как лич&shy;ный блог, дер&shy;жать це&shy;лый сер&shy;вер, базу дан&shy;ных, как-то всё это ад&shy;ми&shy;ни&shy;стри&shy;ро&shy;вать — яв&shy;ное пе&shy;ре&shy;услож&shy;не&shy;ние. В по&shy;след&shy;нее вре&shy;мя я боль&shy;ше скло&shy;ня&shy;юсь к про&shy;стым ре&shy;ше&shy;ни&shy;ям.
</p>
<p>
Для ин&shy;те&shy;ре&shy;су&shy;ю&shy;щих&shy;ся неко&shy;то&shy;рые тех&shy;ни&shy;че&shy;ские по&shy;дроб&shy;но&shy;сти:
</p>

<h2>Ге&shy;не&shy;ра&shy;тор</h2>

<p>
Тут для меня без ва&shy;ри&shy;ан&shy;тов — <a href="http://www.haskell.org">Haskell</a>. Са&shy;мый глав&shy;ный дей&shy;ству&shy;ю&shy;щий пер&shy;со&shy;наж тоже по&shy;ня&shy;тен — <a href="http://www.lymar.ru/tag/Hastache/">Has&shy;tache</a>, не зря же я его пи&shy;сал.
</p>

<h2>Ор&shy;га&shy;ни&shy;за&shy;ция</h2>


<p>
Тех&shy;ни&shy;че&shy;ски каж&shy;дая за&shy;пись в бло&shy;ге вы&shy;гля&shy;дит так: от&shy;дель&shy;ная ди&shy;рек&shy;то&shy;рия с име&shy;нем типа «2011-02-28 16:03 new en&shy;gine», внут&shy;ри ле&shy;жит файл def.json с за&shy;го&shy;лов&shy;ком и те&shy;га&shy;ми этой за&shy;пи&shy;си, файл text.html с тек&shy;стом, и ка&shy;кие-ни&shy;будь до&shy;пол&shy;ни&shy;тель&shy;ные фай&shy;лы (если они в этой за&shy;пи&shy;си нуж&shy;ны). Та&shy;кие вот ра&shy;кет&shy;ные тех&shy;но&shy;ло&shy;гии бло&shy;го&shy;стро&shy;е&shy;ния. Text.html — это не про&shy;сто чи&shy;стый html, это ещё и кое-ка&shy;кая до&shy;пол&shy;ни&shy;тель&shy;ная раз&shy;мет&shy;ка, на&shy;при&shy;мер для встав&shy;ки ма&shy;те&shy;ма&shy;ти&shy;че&shy;ских фор&shy;мул (<img class="mathImg" src="http://www.lymar.ru/static%20blog%20engine/26fa7f722215adcd3e5318c108eeeb5f6bb5079b8bfa0dd5a0c2e00fb0108532/math_d475cc176833ac6cb4ebd3957c769e9458a8d5c3a6d04ca23f362f6973fe31f9.svg" style="width:21.8612pt; height:10.7833pt;" '> ру&shy;лит) или  ис&shy;ход&shy;но&shy;го кода с под&shy;свет&shy;кой син&shy;так&shy;си&shy;са (<a href="http://hackage.haskell.org/package/highlighting-kate">high&shy;light&shy;ing-kate</a>). До&shy;пол&shy;ни&shy;тель&shy;ная раз&shy;мет&shy;ка боль&shy;шей ча&shy;стью пред&shy;став&shy;ле&shy;на сек&shy;ци&shy;я&shy;ми Has&shy;tache.</p>

<h2>Ти&shy;по&shy;гра&shy;фи&shy;ка</h2>

<p>
Ммм, это пря&shy;мо моя пре&shy;лесть. Не по&shy;ни&shy;маю чего ни&shy;кто пе&shy;ре&shy;но&shy;сов в вебе не де&shy;ла&shy;ет, на&shy;мно&shy;го ведь при&shy;ят&shy;ней вы&shy;гля&shy;дит, осо&shy;бен&shy;но если текст рас&shy;тя&shy;нут по ши&shy;рине. Тех&shy;ни&shy;че&shy;ски сами пе&shy;ре&shy;но&shy;сы уже сто лет как до&shy;ступ&shy;ны во всех бра&shy;у&shy;зе&shy;рах. У меня те&shy;перь всё с пе&shy;ре&shy;но&shy;са&shy;ми, кра&shy;со&shy;та да и толь&shy;ко. Пе&shy;ре&shy;но&shy;сы рас&shy;став&shy;ля&shy;ет са&shy;мо&shy;пи&shy;сан&shy;ная биб&shy;лио&shy;те&shy;ка (ра&shy;бо&shy;та&shy;ет по ал&shy;го&shy;рит&shy;му Ляна-Кну&shy;та), я её на&shy;пи&shy;сал для <a href="http://www.qrmania.ru/">qr&shy;ma&shy;nia.ru</a>, и вот опять при&shy;го&shy;ди&shy;лась. Надо бы  вы&shy;ло&shy;жить в Hack&shy;age, но пока QA-от&shy;дел в моей го&shy;ло&shy;ве это&shy;го не поз&shy;во&shy;ля&shy;ет.
</p>

<h2>Ра&shy;бо&shy;та с S3</h2>

<p>
Сна&shy;ча&shy;ла ду&shy;мал обой&shy;дусь <a href="http://s3tools.org/s3cmd">s3cmd</a>, но в ито&shy;ге на&shy;пи&shy;сал соб&shy;ствен&shy;ный син&shy;хро&shy;ни&shy;за&shy;тор для S3, бла&shy;го для Haskell есть биб&shy;лио&shy;те&shy;ка <a href="http://hackage.haskell.org/package/aws">aws</a>. Кста&shy;ти, я в неё за&shy;ком&shy;ми&shy;тил ра&shy;бо&shy;ту с ре&shy;ди&shy;рек&shy;та&shy;ми S3, но эта вер&shy;сия в на&shy;сто&shy;я&shy;щий мо&shy;мент ещё не вы&shy;ло&shy;же&shy;на в Hack&shy;age, кому сроч&shy;но надо бе&shy;ри&shy;те пря&shy;мо с <a href="https://github.com/aristidb/aws">GitHub</a>.
</p>
<p>
<img class="centerImg bordered" src="http://www.lymar.ru/static%20blog%20engine/26fa7f722215adcd3e5318c108eeeb5f6bb5079b8bfa0dd5a0c2e00fb0108532/screenshot.jpg" width="700" height="624"></img>
</p>]]></description>

            <pubDate>Mon, 26 Nov 2012 16:00:00 +0000</pubDate>
        </item>
            <item>
            <title><![CDATA[Доступ к элементам списка по номеру в Hastache]]></title>
            <guid isPermaLink="true">http://www.lymar.ru/hastache-0.4.1</guid>
            <link>http://www.lymar.ru/hastache-0.4.1</link>

            <comments
            >http://www.lymar.ru/hastache-0.4.1/#disqus_thread</comments>

            <description><![CDATA[<p>Это ко&shy;неч&shy;но очень при&shy;ят&shy;но ко&shy;гда что-то по&shy;лез&shy;ное де&shy;ла&shy;ешь. Поль&shy;зо&shy;ва&shy;те&shy;лей <a href="http://www.lymar.ru/hastache">Has&shy;tache</a> в мире мо&shy;жет и не очень мно&shy;го, но они точ&shy;но есть. Вот недав&shy;но <a href="https://github.com/christiaanb">Chris&shy;ti&shy;aan Baaij</a> при&shy;слал со&shy;об&shy;ще&shy;ние о функ&shy;ции ко&shy;то&shy;рая есть во мно&shy;гих ре&shy;а&shy;ли&shy;за&shy;ци&shy;ях шаб&shy;ло&shy;ни&shy;за&shy;то&shy;ра <a href="http://mustache.github.com/">Mus&shy;tache</a>, а в Has&shy;tache нет. Это об&shy;ра&shy;ще&shy;ние к эле&shy;мен&shy;там спис&shy;ка по но&shy;ме&shy;ру, т.е. как-то так:
</p><p>

<div class="sourceCodeWrap"><table class="sourceCode"><tr><td class="nums"><pre><code></code></pre></td><td class="sourceCode"><pre class="sourceCode"><code><span class="NormalTok">{{heroes.1.name}}</span><br /><span class="NormalTok">{{heroes.0.name}}</span><br /></code></pre></td></tr></table></div></p><p>

По&shy;лез&shy;ная шту&shy;ка, мне ни разу пока не при&shy;го&shy;ди&shy;лась (по&shy;это&shy;му и не сде&shy;лал), од&shy;на&shy;ко лег&shy;ко мож&shy;но при&shy;ду&shy;мать ей при&shy;ме&shy;не&shy;ние и кому-то та&shy;кое точ&shy;но по&shy;на&shy;до&shy;бит&shy;ся.
</p><p>

Поль&shy;зо&shy;вать&shy;ся так:
</p><p>

<div class="sourceCodeWrap"><table class="sourceCode"><tr><td class="nums"><pre><code>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br /></code></pre></td><td class="sourceCode"><pre class="sourceCode"><code><span class="StringTok">#!/usr/local/bin/runhaskell</span><br /><span class="OtherTok">{-# LANGUAGE DeriveDataTypeable #-}</span><br /><span class="KeywordTok">import </span><span class="DataTypeTok">Text.Hastache</span><br /><span class="KeywordTok">import </span><span class="DataTypeTok">Text.Hastache.Context</span><br /><span class="KeywordTok">import qualified</span> <span class="DataTypeTok">Data.ByteString.Lazy</span> <span class="KeywordTok">as</span> <span class="DataTypeTok">LZ</span><br /><span class="KeywordTok">import </span><span class="DataTypeTok">Data.Data</span><br /><span class="KeywordTok">import </span><span class="DataTypeTok">Data.Generics</span><br /><br /><span class="NormalTok">main </span><span class="FunctionTok">=</span> <span class="NormalTok">mapM_ (\(template,context) </span><span class="OtherTok">-&gt;</span><br />    <span class="NormalTok">hastacheStr defaultConfig (encodeStr template) context </span><span class="FunctionTok">&gt;&gt;=</span> <span class="NormalTok">LZ.putStrLn)</span><br />        <span class="NormalTok">[(template1, mkStrContext context1),</span><br />         <span class="NormalTok">(template1, context2),</span><br />         <span class="NormalTok">(template3, context3)]</span><br /><br /><span class="NormalTok">names </span><span class="FunctionTok">=</span> <span class="NormalTok">[</span><span class="StringTok">&quot;Безымянный&quot;</span><span class="NormalTok">,</span><span class="StringTok">&quot;Небо&quot;</span><span class="NormalTok">,</span><span class="StringTok">&quot;Сломанный Меч&quot;</span><span class="NormalTok">,</span><span class="StringTok">&quot;Летящий Снег&quot;</span><span class="NormalTok">,</span><span class="StringTok">&quot;Цинь Шихуанди&quot;</span><span class="NormalTok">]</span><br /><br /><span class="NormalTok">template1 </span><span class="FunctionTok">=</span> <span class="NormalTok">concat [</span><br />    <span class="StringTok">&quot;{{heroes.1.name}}\n&quot;</span><span class="NormalTok">,</span><br />    <span class="StringTok">&quot;{{heroes.0.name}}\n&quot;</span><span class="NormalTok">]</span><br /><br /><span class="CommentTok">-- Руками написанный контекст в виде функции</span><br /><span class="NormalTok">context1 </span><span class="StringTok">&quot;heroes&quot;</span> <span class="FunctionTok">=</span> <span class="DataTypeTok">MuList</span> <span class="FunctionTok">$</span> <span class="NormalTok">map (mkStrContext </span><span class="FunctionTok">.</span> <span class="NormalTok">mkListContext) names </span><span class="KeywordTok">where</span><br />    <span class="NormalTok">mkListContext name </span><span class="FunctionTok">=</span> <span class="NormalTok">\</span><span class="StringTok">&quot;name&quot;</span> <span class="OtherTok">-&gt;</span> <span class="DataTypeTok">MuVariable</span> <span class="NormalTok">name</span><br /><span class="NormalTok">context1 _ </span><span class="FunctionTok">=</span> <span class="DataTypeTok">MuNothing</span><br /><br /><span class="CommentTok">-- Контекст с помощью Generics</span><br /><span class="KeywordTok">data</span> <span class="DataTypeTok">Hero</span> <span class="FunctionTok">=</span> <span class="DataTypeTok">Hero</span> <span class="NormalTok">{</span><span class="OtherTok"> name ::</span> <span class="DataTypeTok">String</span> <span class="NormalTok">} </span><span class="KeywordTok">deriving</span> <span class="NormalTok">(</span><span class="DataTypeTok">Data</span><span class="NormalTok">, </span><span class="DataTypeTok">Typeable</span><span class="NormalTok">)</span><br /><span class="KeywordTok">data</span> <span class="DataTypeTok">Heroes</span> <span class="FunctionTok">=</span> <span class="DataTypeTok">Heroes</span> <span class="NormalTok">{</span><span class="OtherTok"> heroes ::</span> <span class="NormalTok">[</span><span class="DataTypeTok">Hero</span><span class="NormalTok">] } </span><span class="KeywordTok">deriving</span> <span class="NormalTok">(</span><span class="DataTypeTok">Data</span><span class="NormalTok">, </span><span class="DataTypeTok">Typeable</span><span class="NormalTok">)</span><br /><br /><span class="NormalTok">context2 </span><span class="FunctionTok">=</span> <span class="NormalTok">mkGenericContext </span><span class="FunctionTok">$</span> <span class="DataTypeTok">Heroes</span> <span class="FunctionTok">$</span> <span class="NormalTok">map </span><span class="DataTypeTok">Hero</span> <span class="NormalTok">names</span><br /><br /><span class="CommentTok">-- Контекст с помощью Generics (другой вариант)</span><br /><span class="NormalTok">template3 </span><span class="FunctionTok">=</span> <span class="NormalTok">concat [</span><br />    <span class="StringTok">&quot;{{heroName.3}}\n&quot;</span><span class="NormalTok">,</span><br />    <span class="StringTok">&quot;{{heroName.2}}\n&quot;</span><span class="NormalTok">]</span><br /><br /><span class="KeywordTok">data</span> <span class="DataTypeTok">HeroesStr</span> <span class="FunctionTok">=</span> <span class="DataTypeTok">HeroesStr</span> <span class="NormalTok">{</span><span class="OtherTok"> heroName ::</span> <span class="NormalTok">[</span><span class="DataTypeTok">String</span><span class="NormalTok">] } </span><span class="KeywordTok">deriving</span> <span class="NormalTok">(</span><span class="DataTypeTok">Data</span><span class="NormalTok">, </span><span class="DataTypeTok">Typeable</span><span class="NormalTok">)</span><br /><br /><span class="NormalTok">context3 </span><span class="FunctionTok">=</span> <span class="NormalTok">mkGenericContext </span><span class="FunctionTok">$</span> <span class="DataTypeTok">HeroesStr</span> <span class="NormalTok">names</span><br /></code></pre></td></tr></table></div></p><p>

Ре&shy;зуль&shy;тат:
</p><p>

<div class="sourceCodeWrap"><table class="sourceCode"><tr><td class="nums"><pre><code></code></pre></td><td class="sourceCode"><pre class="sourceCode"><code><span class="NormalTok">Небо</span><br /><span class="NormalTok">Безымянный</span><br /><span class="NormalTok"></span><br /><span class="NormalTok">Небо</span><br /><span class="NormalTok">Безымянный</span><br /><span class="NormalTok"></span><br /><span class="NormalTok">Летящий Снег</span><br /><span class="NormalTok">Сломанный Меч</span><br /></code></pre></td></tr></table></div></p>]]></description>

            <pubDate>Thu, 12 Jul 2012 06:00:00 +0000</pubDate>
        </item>
            <item>
            <title><![CDATA[Алгоритм Ахо-Корасик на Haskell]]></title>
            <guid isPermaLink="true">http://www.lymar.ru/AhoCorasick</guid>
            <link>http://www.lymar.ru/AhoCorasick</link>

            <comments
            >http://www.lymar.ru/AhoCorasick/#disqus_thread</comments>

            <description><![CDATA[<p>Вы&shy;ло&shy;жил в open source свою ре&shy;а&shy;ли&shy;за&shy;цию ал&shy;го&shy;рит&shy;ма <a href="http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%90%D1%85%D0%BE_%E2%80%94_%D0%9A%D0%BE%D1%80%D0%B0%D1%81%D0%B8%D0%BA">Ахо-Ко&shy;рас&shy;ик</a> на Haskell. <a href="https://github.com/lymar/AhoCorasick">Код на GitHub</a>. <a href="http://hackage.haskell.org/package/AhoCorasick">Па&shy;кет в Hack&shy;ageDB</a>.
</p><p>

Ал&shy;го&shy;ритм Ахо-Ко&shy;рас&shy;ик — ал&shy;го&shy;ритм по&shy;ис&shy;ка под&shy;строк, со&shy;здан&shy;ный Аль&shy;фре&shy;дом Ахо и Мар&shy;га&shy;рет Ко&shy;рас&shy;ик в 1975 году. Этот ал&shy;го&shy;ритм пред&shy;на&shy;зна&shy;чен для од&shy;но&shy;вре&shy;мен&shy;но&shy;го по&shy;ис&shy;ка сра&shy;зу боль&shy;шо&shy;го ко&shy;ли&shy;че&shy;ства под&shy;строк. Ал&shy;го&shy;ритм со&shy;сто&shy;ит из двух фаз: сна&shy;ча&shy;ла стро&shy;ит&shy;ся ко&shy;неч&shy;ный ав&shy;то&shy;мат по всем под&shy;стро&shy;кам ко&shy;то&shy;рые нуж&shy;но бу&shy;дет ис&shy;кать, и даль&shy;ше че&shy;рез этот по&shy;стро&shy;ен&shy;ный ав&shy;то&shy;мат про&shy;пус&shy;ка&shy;ет&shy;ся текст, в ко&shy;то&shy;ром эти под&shy;стро&shy;ки нуж&shy;но най&shy;ти.
</p><p>

Моя ре&shy;а&shy;ли&shy;за&shy;ция обоб&shy;ще&shy;на для лю&shy;бых по&shy;сле&shy;до&shy;ва&shy;тель&shy;но&shy;стей зна&shy;че&shy;ний, для ко&shy;то&shy;рых ре&shy;а&shy;ли&shy;зо&shy;ван тайп-класс <a href="http://hackage.haskell.org/packages/archive/hashable/1.1.2.3/doc/html/Data-Hashable.html#t:Hashable">Hash&shy;able</a> (т.е. ис&shy;кать мож&shy;но не толь&shy;ко стро&shy;ки, но и, ска&shy;жем, по&shy;сле&shy;до&shy;ва&shy;тель&shy;ность из чи&shy;сел).
</p><p>
<h2>
           При&shy;ме&shy;ры ис&shy;поль&shy;зо&shy;ва&shy;ния
</h2>

Са&shy;мый про&shy;стой вы&shy;зов:
</p><p>

<div class="sourceCodeWrap"><table class="sourceCode"><tr><td class="nums"><pre><code></code></pre></td><td class="sourceCode"><pre class="sourceCode"><code><span class="NormalTok">example1 </span><span class="FunctionTok">=</span> <span class="NormalTok">mapM_ print </span><span class="FunctionTok">$</span> <span class="NormalTok">findAll simpleSM </span><span class="StringTok">&quot;ushers&quot;</span> <span class="KeywordTok">where</span><br />    <span class="NormalTok">simpleSM </span><span class="FunctionTok">=</span> <span class="NormalTok">makeSimpleStateMachine [</span><span class="StringTok">&quot;he&quot;</span><span class="NormalTok">,</span><span class="StringTok">&quot;she&quot;</span><span class="NormalTok">,</span><span class="StringTok">&quot;his&quot;</span><span class="NormalTok">,</span><span class="StringTok">&quot;hers&quot;</span><span class="NormalTok">]</span><br /></code></pre></td></tr></table></div>
<div class="sourceCodeWrap"><table class="sourceCode"><tr><td class="nums"><pre><code></code></pre></td><td class="sourceCode"><pre class="sourceCode"><code><span class="DataTypeTok">Position</span> <span class="NormalTok">{pIndex </span><span class="FunctionTok">=</span> <span class="DecValTok">1</span><span class="NormalTok">, pLength </span><span class="FunctionTok">=</span> <span class="DecValTok">3</span><span class="NormalTok">, pVal </span><span class="FunctionTok">=</span> <span class="StringTok">&quot;she&quot;</span><span class="NormalTok">}</span><br /><span class="DataTypeTok">Position</span> <span class="NormalTok">{pIndex </span><span class="FunctionTok">=</span> <span class="DecValTok">2</span><span class="NormalTok">, pLength </span><span class="FunctionTok">=</span> <span class="DecValTok">2</span><span class="NormalTok">, pVal </span><span class="FunctionTok">=</span> <span class="StringTok">&quot;he&quot;</span><span class="NormalTok">}</span><br /><span class="DataTypeTok">Position</span> <span class="NormalTok">{pIndex </span><span class="FunctionTok">=</span> <span class="DecValTok">2</span><span class="NormalTok">, pLength </span><span class="FunctionTok">=</span> <span class="DecValTok">4</span><span class="NormalTok">, pVal </span><span class="FunctionTok">=</span> <span class="StringTok">&quot;hers&quot;</span><span class="NormalTok">}</span><br /></code></pre></td></tr></table></div></p><p>


К ис&shy;ко&shy;мым стро&shy;кам мож&shy;но при&shy;вя&shy;зать про&shy;из&shy;воль&shy;ные дан&shy;ные:
</p><p>

<div class="sourceCodeWrap"><table class="sourceCode"><tr><td class="nums"><pre><code></code></pre></td><td class="sourceCode"><pre class="sourceCode"><code><span class="NormalTok">example2 </span><span class="FunctionTok">=</span> <span class="NormalTok">mapM_ print </span><span class="FunctionTok">$</span> <span class="NormalTok">findAll sm </span><span class="StringTok">&quot;ushers&quot;</span> <span class="KeywordTok">where</span><br />    <span class="NormalTok">sm </span><span class="FunctionTok">=</span> <span class="NormalTok">makeStateMachine [(</span><span class="StringTok">&quot;he&quot;</span><span class="NormalTok">,</span><span class="DecValTok">0</span><span class="NormalTok">),(</span><span class="StringTok">&quot;she&quot;</span><span class="NormalTok">,</span><span class="DecValTok">1</span><span class="NormalTok">),(</span><span class="StringTok">&quot;his&quot;</span><span class="NormalTok">,</span><span class="DecValTok">2</span><span class="NormalTok">),(</span><span class="StringTok">&quot;hers&quot;</span><span class="NormalTok">,</span><span class="DecValTok">3</span><span class="NormalTok">)]</span><br /></code></pre></td></tr></table></div>
<div class="sourceCodeWrap"><table class="sourceCode"><tr><td class="nums"><pre><code></code></pre></td><td class="sourceCode"><pre class="sourceCode"><code><span class="DataTypeTok">Position</span> <span class="NormalTok">{pIndex </span><span class="FunctionTok">=</span> <span class="DecValTok">1</span><span class="NormalTok">, pLength </span><span class="FunctionTok">=</span> <span class="DecValTok">3</span><span class="NormalTok">, pVal </span><span class="FunctionTok">=</span> <span class="DecValTok">1</span><span class="NormalTok">}</span><br /><span class="DataTypeTok">Position</span> <span class="NormalTok">{pIndex </span><span class="FunctionTok">=</span> <span class="DecValTok">2</span><span class="NormalTok">, pLength </span><span class="FunctionTok">=</span> <span class="DecValTok">2</span><span class="NormalTok">, pVal </span><span class="FunctionTok">=</span> <span class="DecValTok">0</span><span class="NormalTok">}</span><br /><span class="DataTypeTok">Position</span> <span class="NormalTok">{pIndex </span><span class="FunctionTok">=</span> <span class="DecValTok">2</span><span class="NormalTok">, pLength </span><span class="FunctionTok">=</span> <span class="DecValTok">4</span><span class="NormalTok">, pVal </span><span class="FunctionTok">=</span> <span class="DecValTok">3</span><span class="NormalTok">}</span><br /></code></pre></td></tr></table></div></p><p>


Со&shy;здан&shy;ный ав&shy;то&shy;мат мож&shy;но за&shy;пус&shy;кать по ша&shy;гам (если ну&shy;жен по&shy;иск не по спис&shy;кам, а по чему-ни&shy;будь дру&shy;го&shy;му):
</p><p>


<div class="sourceCodeWrap"><table class="sourceCode"><tr><td class="nums"><pre><code></code></pre></td><td class="sourceCode"><pre class="sourceCode"><code><span class="NormalTok">example3 </span><span class="FunctionTok">=</span> <span class="NormalTok">mapM_ print </span><span class="FunctionTok">$</span> <span class="NormalTok">next sm </span><span class="StringTok">&quot;ushers&quot;</span> <span class="KeywordTok">where</span><br />    <span class="NormalTok">sm </span><span class="FunctionTok">=</span> <span class="NormalTok">makeSimpleStateMachine [</span><span class="StringTok">&quot;he&quot;</span><span class="NormalTok">,</span><span class="StringTok">&quot;she&quot;</span><span class="NormalTok">,</span><span class="StringTok">&quot;his&quot;</span><span class="NormalTok">,</span><span class="StringTok">&quot;hers&quot;</span><span class="NormalTok">]</span><br />    <span class="NormalTok">next _ [] </span><span class="FunctionTok">=</span> <span class="NormalTok">[]</span><br />    <span class="NormalTok">next sm (s</span><span class="FunctionTok">:</span><span class="NormalTok">n) </span><span class="FunctionTok">=</span> <span class="KeywordTok">let</span> <span class="NormalTok">(</span><span class="DataTypeTok">SMStepRes</span> <span class="NormalTok">match nextSM) </span><span class="FunctionTok">=</span> <span class="NormalTok">stateMachineStep sm s </span><span class="KeywordTok">in</span><br />        <span class="NormalTok">(s, match) </span><span class="FunctionTok">:</span> <span class="NormalTok">next nextSM n</span><br /></code></pre></td></tr></table></div>
<div class="sourceCodeWrap"><table class="sourceCode"><tr><td class="nums"><pre><code></code></pre></td><td class="sourceCode"><pre class="sourceCode"><code><span class="NormalTok">(</span><span class="CharTok">'u'</span><span class="NormalTok">,[])</span><br /><span class="NormalTok">(</span><span class="CharTok">'s'</span><span class="NormalTok">,[])</span><br /><span class="NormalTok">(</span><span class="CharTok">'h'</span><span class="NormalTok">,[])</span><br /><span class="NormalTok">(</span><span class="CharTok">'e'</span><span class="NormalTok">,[(</span><span class="DecValTok">3</span><span class="NormalTok">,</span><span class="StringTok">&quot;she&quot;</span><span class="NormalTok">),(</span><span class="DecValTok">2</span><span class="NormalTok">,</span><span class="StringTok">&quot;he&quot;</span><span class="NormalTok">)])</span><br /><span class="NormalTok">(</span><span class="CharTok">'r'</span><span class="NormalTok">,[])</span><br /><span class="NormalTok">(</span><span class="CharTok">'s'</span><span class="NormalTok">,[(</span><span class="DecValTok">4</span><span class="NormalTok">,</span><span class="StringTok">&quot;hers&quot;</span><span class="NormalTok">)])</span><br /></code></pre></td></tr></table></div></p><p>

<h2>
          Неко&shy;то&shy;рые по&shy;дроб&shy;но&shy;сти ре&shy;а&shy;ли&shy;за&shy;ции
</h2>


По&shy;стро&shy;е&shy;ние ко&shy;неч&shy;но&shy;го ав&shy;то&shy;ма&shy;та у меня сде&shy;ла&shy;но в мо&shy;на&shy;де <a href="http://www.haskell.org/haskellwiki/Monad/ST">ST</a>. Это мо&shy;на&shy;да ис&shy;поль&shy;зу&shy;ет&shy;ся, ко&shy;гда вам нуж&shy;ны вы&shy;чис&shy;ле&shy;ния с из&shy;ме&shy;ня&shy;е&shy;мы&shy;ми дан&shy;ны&shy;ми, но при этом ни&shy;ка&shy;кой внеш&shy;ний мир не ну&shy;жен (т.е. мо&shy;на&shy;ды IO для вас слиш&shy;ком мно&shy;го), со&shy;от&shy;вет&shy;ствен&shy;но сна&shy;ру&shy;жи мо&shy;на&shy;ды мы име&shy;ем чи&shy;стый ин&shy;тер&shy;фейс, а внут&shy;ри у нас есть му&shy;та&shy;бель&shy;ные <a href="http://www.haskell.org/ghc/docs/latest/html/libraries/base-4.5.0.0/Data-STRef.html">пе&shy;ре&shy;мен&shy;ные</a> и <a href="http://www.haskell.org/ghc/docs/latest/html/libraries/array-0.4.0.0/Data-Array-ST.html">мас&shy;си&shy;вы</a>. Там я на&shy;пи&shy;сал про&shy;стей&shy;шую FIFO оче&shy;редь в этой мо&shy;на&shy;де, мож&shy;но <a href="https://github.com/lymar/AhoCorasick/blob/v0.0.2/Text/AhoCorasick/Internal/Deque.hs">по&shy;чи&shy;тать</a> кому ин&shy;те&shy;рес&shy;но.
</p><p>

Сам по&shy;иск с ис&shy;поль&shy;зо&shy;ва&shy;ни&shy;ем со&shy;здан&shy;но&shy;го ав&shy;то&shy;ма&shy;та сде&shy;лан уже в чи&shy;стых функ&shy;ци&shy;ях, это мож&shy;но ви&shy;деть в при&shy;ме&shy;рах выше.
</p><p>

<h2>
          Ссыл&shy;ки по теме
</h2>

<ul>
<li><a href="http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%90%D1%85%D0%BE_%E2%80%94_%D0%9A%D0%BE%D1%80%D0%B0%D1%81%D0%B8%D0%BA">Ахо-Ко&shy;рас&shy;ик в рус&shy;ско&shy;языч&shy;ной Ви&shy;ки&shy;пе&shy;дии</a></li>
<li><a href="http://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_string_matching_algorithm">Ахо-Ко&shy;рас&shy;ик в ан&shy;гло&shy;языч&shy;ной Ви&shy;ки&shy;пе&shy;дии</a></li>
<li><a href="http://www.lymar.ru/AhoCorasick/3b2bea6f99ecaae50bb43bea86cadbb70f0052a3a75d20d08574da38b5c0047a/slides04.pdf">Хо&shy;ро&shy;шая pdf-ка с опи&shy;са&shy;ни&shy;ем</a> и <a href="http://www.cs.uku.fi/~kilpelai/BSA05/lectures/slides04.pdf">её ори&shy;ги&shy;наль&shy;ная ко&shy;пия</a></li>
</ul></p>]]></description>

            <pubDate>Thu, 15 Mar 2012 09:05:00 +0000</pubDate>
        </item>
    
</channel>
</rss>
