<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Блог Загирова Рустама</title>
    <link>https://zagirov.name/</link>
    <description>Recent content on Блог Загирова Рустама</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ru</language>
    <lastBuildDate>Fri, 27 Oct 2023 10:30:00 +0300</lastBuildDate><atom:link href="https://zagirov.name/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Компиляция тестов в Go</title>
      <link>https://zagirov.name/post/go-compile-tests/</link>
      <pubDate>Fri, 27 Oct 2023 10:30:00 +0300</pubDate>
      
      <guid>https://zagirov.name/post/go-compile-tests/</guid>
      <description>&lt;p&gt;Если у вас есть тесты с разными билд-тэгами, но вы хотите проверить код на компилируемость, но при этом не запускать сами тесты. Например, тесты прогоняются долго.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Go dns</title>
      <link>https://zagirov.name/post/go-dns/</link>
      <pubDate>Wed, 07 Apr 2021 13:33:23 +0300</pubDate>
      
      <guid>https://zagirov.name/post/go-dns/</guid>
      <description>&lt;p&gt;Увидел недавно замечательный &lt;a href=&#34;https://github.com/golang/go/pull/45016&#34;&gt;патч&lt;/a&gt;, который позволяет не делать два днс запроса (A, AAAA) для go resolver, если вы используете ipv4 only. Решил немного покопать на эту тему.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Получить pod по pid в kubernetes</title>
      <link>https://zagirov.name/post/kubernetes-pod-by-pid/</link>
      <pubDate>Sat, 20 Mar 2021 10:51:11 +0300</pubDate>
      
      <guid>https://zagirov.name/post/kubernetes-pod-by-pid/</guid>
      <description>&lt;p&gt;В &lt;a href=&#34;https://zagirov.name/post/kubernetes-pid-by-pod/&#34;&gt;предыдущем посте&lt;/a&gt; мы получали pid для пода.
Также может возникнуть обратная задача: найти имя под по pid процесса на хосте.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Получить pid пода в kubernetes</title>
      <link>https://zagirov.name/post/kubernetes-pid-by-pod/</link>
      <pubDate>Fri, 19 Mar 2021 18:51:11 +0300</pubDate>
      
      <guid>https://zagirov.name/post/kubernetes-pid-by-pod/</guid>
      <description>&lt;p&gt;При работе с kubernetes иногда возникает необходимость найти pid процесса в поде контейнере.
Например, посмотреть в реальном времени нагрузку через pidstat, или снять tcpdump с контейнера.
Просто получить pid процесса в контейнере через kubectl не получается.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#universal&#34;&gt;Способ 1: универсальный&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#docker&#34;&gt;Способ 2: docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#containerd&#34;&gt;Способ 3: containerd&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Управление зависимостями в микросервисах на Go</title>
      <link>https://zagirov.name/post/manage-dependencies-in-microservices-for-go/</link>
      <pubDate>Mon, 16 Apr 2018 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/manage-dependencies-in-microservices-for-go/</guid>
      <description>&lt;p&gt;Уже несколько лет IT индустрия идёт в направлении микросервисов. Можно долго спросить хорошо это или плохо, но от этого никуда не деться.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Mac: заменить иконки у типографской раскладки Бирмана</title>
      <link>https://zagirov.name/post/birman-typography-layout-change-icons/</link>
      <pubDate>Thu, 31 Oct 2013 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/birman-typography-layout-change-icons/</guid>
      <description>&lt;p&gt;Использую типографскую раскладку от Ильи Бирмана, но мне не нравятся иконки в виде серпа и молота.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unicorn в capistrano 3</title>
      <link>https://zagirov.name/post/capistrano3-unicorn/</link>
      <pubDate>Mon, 28 Oct 2013 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/capistrano3-unicorn/</guid>
      <description>&lt;p&gt;Вышла новая версия &lt;a href=&#34;http://www.capistranorb.com/&#34;&gt;capistrano&lt;/a&gt; под номером 3. Можете прочитать &lt;a href=&#34;http://www.capistranorb.com/2013/06/01/release-announcement.html&#34;&gt;полный анонс&lt;/a&gt; от комманды.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Софт на Mac OS X</title>
      <link>https://zagirov.name/post/mac-environments/</link>
      <pubDate>Mon, 21 Oct 2013 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/mac-environments/</guid>
      <description>&lt;p&gt;В информации о блоге есть описание моего окружения 2 годичной давности. Сейчас я уже использую Mac OS X, а не Ubuntu Linux.&lt;/p&gt;
&lt;p&gt;Не буду утруждать тут дифирамбами о необходимости прямо сейчас бежать за макбуком в магазин, но поверьте система отлично подходит как для php-разработчика, как и для ruby-разработчика (коим я сейчас и являюсь).
Это полноценная мощь юникс-консоли вкупе с красивым интерфейсом.&lt;/p&gt;
&lt;p&gt;Итак, поехали.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Бага thinking-sphinx в Mac OS X</title>
      <link>https://zagirov.name/post/thinking-sphinx-mac-os-x/</link>
      <pubDate>Wed, 18 Sep 2013 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/thinking-sphinx-mac-os-x/</guid>
      <description>&lt;p&gt;Возникла ошибка при использовании thinking-sphinx под Mac OS X. Убил полдня на её решение. Надеюсь этот пост поможет быстрей справиться с этим багом таким же как и я программистам, которые используют методику google driven development.&lt;/p&gt;
&lt;p&gt;Эта ошибка воспроизводилась на Mac OS X 10.8.4, thinking-sphinx 3.0.5, и sphinx 2.0.9.&lt;/p&gt;
&lt;p&gt;Началось всё с этой ошибки:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;undefined method `inject&amp;#39; for nil:NilClass
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>Обновление gem mysql2 на MacOS X при обновлении MySQL до 5.6</title>
      <link>https://zagirov.name/post/macos-update-mysql2-mysql-5-dot-6/</link>
      <pubDate>Mon, 04 Mar 2013 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/macos-update-mysql2-mysql-5-dot-6/</guid>
      <description>&lt;p&gt;На MacOS X в homebrew появился MySQL 5.6.10.&lt;/p&gt;
&lt;p&gt;Поэтому при обновлении MySQL будет выскакивать ошибка о несоответствии библиотек:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Incorrect MySQL client library version! This gem was compiled for 5.5.28 but the client library is 5.6.10. 
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>Как установить ruby 2.0.0-p0</title>
      <link>https://zagirov.name/post/how-to-install-ruby-2-dot-0-0-p0/</link>
      <pubDate>Sun, 24 Feb 2013 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/how-to-install-ruby-2-dot-0-0-p0/</guid>
      <description>&lt;p&gt;Сегодня &lt;a href=&#34;http://habrahabr.ru/post/170513/&#34;&gt;вышел ruby 2.0.0&lt;/a&gt; и я думаю &lt;a href=&#34;https://twitter.com/dhh/status/305678189261377536&#34;&gt;скоро&lt;/a&gt; выйдет &lt;a href=&#34;http://habrahabr.ru/company/engineyard/blog/170473/&#34;&gt;rails 4&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Если у вас возникли следующие ошибки, то установка простой коммандой rvm install ruby-2.0.0-p0 не получится:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Error running &amp;#39;env CFLAGS=-O3 -march=corei7 -O2 -pipe ./configure --disable-install-doc --prefix=/Users/stamm/.rvm/rubies/ruby-2.0.0-p0 --with-opt-dir=/usr/local/opt/libyaml:/usr/local/opt/readline:/usr/local/opt/libxml2:/usr/local/opt/libxslt:/usr/local/opt/libksba:/usr/local/opt/openssl:/usr/local/opt/curl-ca-bundle:/usr/local/opt/sqlite --disable-shared&amp;#39;, please read /Users/stamm/.rvm/log/ruby-2.0.0-p0/configure.log 
There has been an error while running configure. Halting the installation. 
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>Парад ссылок №2</title>
      <link>https://zagirov.name/post/links-parade-2/</link>
      <pubDate>Wed, 20 Feb 2013 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/links-parade-2/</guid>
      <description>Yii Вышел плагин для phpstorm, поддерживающий yii. Надеюсь автор не забросит его, и из этого получиться что-то более функциональное. Тестирование Функиональное тестирования как сервис - поддерживаются почти все популярные языки, все актуальные браузеры. Сам не пробовал, но судя по фичам у сервиса будут свои пользователи. Процент покрытие тестами в ruby on rails. Работает в связке с travis ci. Сейчас процедура такая: пушим на github, travis-ci выполняет тесты, coveralls показывает как изменилось покрытие кода и показывает красивые отчёты об изменениях.</description>
    </item>
    
    <item>
      <title>Парад ссылок №1</title>
      <link>https://zagirov.name/post/links-parade-1/</link>
      <pubDate>Mon, 11 Feb 2013 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/links-parade-1/</guid>
      <description>&lt;p&gt;Новая рубрика в блоге: парад ссылок. Это что-то наподобие &lt;a href=&#34;http://addmeto.cc/&#34;&gt;линк-блога&lt;/a&gt;, но ориентированного на веб-разработчиков: php, js, администрирование и всё больше о ruby и рельсах. Короче всего, что мне интересно.&lt;/p&gt;
&lt;p&gt;Надеюсь, каждый найдёт что-то интересное.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Ускорение скорости работы grep в Mac OS X</title>
      <link>https://zagirov.name/post/gnu-grep-faster-than-mac-os-x/</link>
      <pubDate>Wed, 28 Nov 2012 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/gnu-grep-faster-than-mac-os-x/</guid>
      <description>На монитор попала статья о том, что grep от gnu быстрее стандартного маковского grep&amp;rsquo;а в 10 раз
Решил проверить у себя. На файле, размером в 720 Мб grep стал быстрей в 36 раз! Неплохо.
$ brew install grep $ time /usr/bin/grep &amp;#34;GET /out&amp;#34; nginx-access_log.2 | wc -l 140858 /usr/bin/grep &amp;#34;GET /out&amp;#34; nginx-access_log.2 26.49s user 0.28s system 97% cpu 27.443 total wc -l 0.03s user 0.02s system 0% cpu 27.443 total $ tmp time grep &amp;#34;GET /out&amp;#34; nginx-access_log.</description>
    </item>
    
    <item>
      <title>Ограничение прав пользователей в git</title>
      <link>https://zagirov.name/post/restriction-access-users-in-git/</link>
      <pubDate>Wed, 03 Oct 2012 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/restriction-access-users-in-git/</guid>
      <description>&lt;p&gt;Бывали ситуации, когда сделали какой-то внерелизный автономный функционал или просто быстрый хотфикс, а в мастере один из коллег уже успел чего изменить, что ещё не протестировано. А это нарушает одно из правил — в мастере должен быть только стабильный код. Поэтому код в мастер не должен попадать непротестированным.&lt;/p&gt;
&lt;p&gt;Почему он это сделал — это другой вопрос: просто не переключил ветку или намеряно. Или к джуниору подбежал директор или менеджер и сказал, что нужно быстро исправить. Тут нужно бить такого программиста по рукам, но лучше предупредить болезнь, чем лечить её =)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Удаление данных из коллекции в Mongodb без блокировки</title>
      <link>https://zagirov.name/post/remove-data-from-mongo-without-blocking/</link>
      <pubDate>Fri, 07 Sep 2012 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/remove-data-from-mongo-without-blocking/</guid>
      <description>&lt;p&gt;Задача: удалять устаревшие данные из большой коллекции монги. Можно пойти в лоб и удалять так:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;var time = new Date().getTime() - 2*24*60*60;
db.data.remove({updating_time: {$lte: time}})
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;В этом случае возникнет блокировка, и запросы на чтение будут очень долго выполняется. А система устроена таким образом, что постоянно вставлять и обновлять данные из этой коллекции.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Яндекс.танк — инструмент нагрузочного тестирования</title>
      <link>https://zagirov.name/post/yandex-tank-load-testing/</link>
      <pubDate>Thu, 02 Aug 2012 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/yandex-tank-load-testing/</guid>
      <description>&lt;p&gt;28 июля на &lt;a href=&#34;http://events.yandex.ru/events/yasubbotnik/msk-jul-2012/&#34;&gt;я.субботнике&lt;/a&gt; был &lt;a href=&#34;http://events.yandex.ru/talks/268/&#34;&gt;представлен&lt;/a&gt; новый инструмент для нагрузочного тестирования Яндекс.танк. Это внутреняя разработка яндекса, которая наконец-то вышла в свет. Видел я этот танк ещё на YaC 2011, когда были соревнования по конфигурированию nginx.&lt;/p&gt;
&lt;p&gt;Это консольный инструмент, пока не имеющий графического интерфейса, но дающий довольно полную картину в этой самой консоли.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Yii: рецепты №2</title>
      <link>https://zagirov.name/post/yii-cookbook-2/</link>
      <pubDate>Mon, 26 Mar 2012 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/yii-cookbook-2/</guid>
      <description>&lt;p&gt;Продолжаю делится интересным о Yii&lt;/p&gt;
&lt;h3 id=&#34;шифрование-данных&#34;&gt;Шифрование данных&lt;/h3&gt;
&lt;p&gt;Иногда требуется зашировать данные с возможностью последующей обратной дешифровкой.&lt;/p&gt;
&lt;p&gt;В yii есть отличная обёртка для такого рода операций: &lt;a href=&#34;http://www.yiiframework.com/doc/api/1.1/CSecurityManager#encrypt-detail&#34;&gt;CSecurityManager::encrypt()&lt;/a&gt; и &lt;a href=&#34;http://www.yiiframework.com/doc/api/1.1/CSecurityManager#decrypt-detail&#34;&gt;CSecurityManager::decrypt()&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Настраиваем &lt;a href=&#34;http://ru.wikipedia.org/wiki/Advanced_Encryption_Standard&#34;&gt;алгоритм&lt;/a&gt;, &lt;a href=&#34;http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B6%D0%B8%D0%BC_%D1%88%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F&#34;&gt;режим&lt;/a&gt; и ключ шифрования.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Yii: рецепты №1</title>
      <link>https://zagirov.name/post/yii-cookbook-1/</link>
      <pubDate>Fri, 23 Mar 2012 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/yii-cookbook-1/</guid>
      <description>&lt;h3 id=&#34;пакетирование-js-и-css-файлов-и-использование-зависимостей-между-этими-пакетами&#34;&gt;Пакетирование js и css-файлов и использование зависимостей между этими пакетами.&lt;/h3&gt;
&lt;p&gt;Есть замечательный инструмент для рисования графиков на js — &lt;a href=&#34;http://www.highcharts.com/&#34;&gt;highcharts&lt;/a&gt;, но он использует фреймворк jQuery и сам jQuery не подключает. Соответственно, мы создаём наш пакет, где указываем js и css файлы из highcharts и прописываем зависимость от jQuery.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Редирект при вставки сайта через iframe</title>
      <link>https://zagirov.name/post/redirect-iframe/</link>
      <pubDate>Thu, 02 Feb 2012 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/redirect-iframe/</guid>
      <description>Довольно долго бился c запрещением вставки сайта в iframe с указанием белого списка сайтов, которые могу это сделать
if (top != self) { var white_list = [&amp;#39;yandex.ru&amp;#39;, &amp;#39;google.com&amp;#39;]; var isFriend = false; var hostname = document.referrer.split(&amp;#34;/&amp;#34;)[2].split(&amp;#34;:&amp;#34;)[0]; for (var i=0; i &amp;lt; white_list.length; i++) { if (hostname == white_list[i] || hostname == &amp;#34;www.&amp;#34; + white_list[i]) { isFriend = true; break; } } if ( ! isFriend ) { window.top.location = window.location.href; } } </description>
    </item>
    
    <item>
      <title>Эмуляция хоткея с участием Alt в midnight commander</title>
      <link>https://zagirov.name/post/mc-alt-mac/</link>
      <pubDate>Wed, 14 Dec 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/mc-alt-mac/</guid>
      <description>После перехода на Mac OS X, не как не мог отвыкнуть от использования хоткеев с участием клавиши Alt.
Нашёл наконец-то способ, как съэмулировать хоткеи в сочении с Alt. Например, чтобы сделать действие по Alt+c нужно последовательно нажать Esc и c. «А ларчик просто открывался» ©.
Тех, кто не знаком с хоткеями в mc, предлагаю ознакомиться с листингом горячих сочетаний mc.</description>
    </item>
    
    <item>
      <title>Bacula - резервное копирование: быстро, бесплатно, без смс</title>
      <link>https://zagirov.name/post/bacula-backup/</link>
      <pubDate>Sun, 27 Nov 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/bacula-backup/</guid>
      <description>Не секрет, что админы делятся на 2 типа: кто ещё не делает бэкапы и кто их уже делает. Я совсем недавно перешёл на сторону светлых админов, хочу поделиться реально работающими конфигами. Теперь седина пропала и мои волосы вновь мягкие и шелковистые =)
Использовать буду систему под названием bacula. Соответственно всё проверялось и работает под ОС GNU/Debian 6.
В интернете видел много довольно полных мануалов, где описывается конфигурация. Я описывать почти ничего не буду, просто приведу рабочие конфиги и скажу что копировать, чтобы начать бэкапить с ещё одного сервера.</description>
    </item>
    
    <item>
      <title>Nginx: общие принципы конфигурации</title>
      <link>https://zagirov.name/post/nginx-config/</link>
      <pubDate>Sun, 30 Oct 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/nginx-config/</guid>
      <description>На днях посмотрел видео с участием Игоря Сысоева - отца русского nginx =)
В выступлении Игорь говорит не о мастабировании в привычном для всех понимании (высокая нагрузка), а в плане рекомендаций к написанию конфигурации для nginx, чтобы при росте конфигурации не было проблем с его редактированием.
Виды location: Описанные простыми строками (статические) location /dir/ {} - обычный префиксный location location = /dir/ {} - точное совпадение по запросу location ^~ /dir/ {} - префиксный location, но после него не идёт проверка по location на регулярных выражениях Описанные регулярными выражениями location ~ /dir/ {} - с учётом регистра location ~* /dir/ {} - без учёта регистра Именнованные location location @php {} Расположение статических location не играет роли.</description>
    </item>
    
    <item>
      <title>Yii: автодополнение в консоли</title>
      <link>https://zagirov.name/post/yii-console-completion/</link>
      <pubDate>Sun, 23 Oct 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/yii-console-completion/</guid>
      <description>Очень не хватало автодополнения комманд при вызове консольных комманд yii, чувствовал какую-то неполноценность yii в bash.
На просторах интернета была найдена статья, позволяющая реализовать автодополнение с помощью родной unix-утилиты bash_completion.
Если у вас проект находиться под управлением git, то просто добавляем сабмодуль:
git submodule add git://github.com/Stamm/yii-console-completion protected/extensions/complete/ Или создайте файл LCompleteCommand.php в protected/extensions/complete/
Теперь подключаем класс в конфигурационном файле для консольного приложения (обычно это console.php):
&amp;#39;commandMap&amp;#39; =&amp;gt; array( &amp;#39;complete&amp;#39; =&amp;gt; array( &amp;#39;class&amp;#39; =&amp;gt; &amp;#39;ext.</description>
    </item>
    
    <item>
      <title>Организация рабочего потока: Phpstorm, Redmine, Changelists</title>
      <link>https://zagirov.name/post/phpstorm-redmine-changelist-workflow/</link>
      <pubDate>Sun, 23 Oct 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/phpstorm-redmine-changelist-workflow/</guid>
      <description>Сегодня я покажу как у меня получается сделать работу удобной с использованием Phpstorm, Redmine, Teamcity.
Есть задача в redmine. Я начинаю её выполнять. Всё проверяю локально и коммичу в репозиторий. Выливаю изменения на тестовый сервер. Есть несколько ньюансов. Бывают задачи очень объёмные и/или не очень срочные, которые я делаю в перерывах между задачами с более высокими приоритетами. Или спокойно делаю задачу, но прибегает менеджер с огромными глазами и криками, что сайт выдаёт ошибку, и нужно сделать быстрый hotfix.</description>
    </item>
    
    <item>
      <title>Yii: используем кэш в CActiveDataProvider</title>
      <link>https://zagirov.name/post/yii-cache-cactivedataprovider/</link>
      <pubDate>Mon, 17 Oct 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/yii-cache-cactivedataprovider/</guid>
      <description>Репост моей заметки из wiki: http://www.yiiframework.com/wiki/233/using-cache-in-cactivedataprovider/.
Первый параметр в конструкторе CActiveDataProvider может быть строковым значением с названием модели или экземпляр класса модели.
Поэтому можно использовать CActiveRecord::cache() для кэширования, но нужно установить значение 3 у третьего параметра, потому что мы должны закэшировать 2 запроса: получение количества записей и само получение записей.
Не забудьте использовать зависимости для принудительного протухания кэша.
{% raw %} $dependecy = new CDbCacheDependency(&amp;#39;SELECT MAX(update_time) FROM {{post}}&amp;#39;) CActiveDataProvider(Post::model()-&amp;gt;cache($duration, $dependecy, 2), array ( &amp;#39;criteria&amp;#39; =&amp;gt; array ( &amp;#39;condition&amp;#39; =&amp;gt; &amp;#39;status = 1&amp;#39;, &amp;#39;order&amp;#39; =&amp;gt; &amp;#39;DESC create_time&amp;#39;, ) &amp;#39;pagination&amp;#39; =&amp;gt; array ( &amp;#39;pageSize&amp;#39; =&amp;gt; 20, ) )); {% endraw %} </description>
    </item>
    
    <item>
      <title>Yii: CGridView и запрос с group by и having by</title>
      <link>https://zagirov.name/post/yii-cgridview-query-with-group-by-and-having-by/</link>
      <pubDate>Sat, 15 Oct 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/yii-cgridview-query-with-group-by-and-having-by/</guid>
      <description>Задача такая: вывести данные через компонент CGridView в YII, сгруппированные по определённому полю, а также применение условий по агрегированным данным.
Возьмём простую таблицу:
date | clicks Нам нужно получить сгруппированные данные по каждому часу.
По сути нужно применить следующий запрос
SELECT * FROM table GROUP BY LEFT(date, 13); Возникают следующие трудности в реализации через Yii:
Yii не может посчитать общее количество, а соответственно будет неправильно создавать пагинатор. Yii просто обнуляет поля group by и having при подсчёте общего количества.</description>
    </item>
    
    <item>
      <title>Настройка exim на почту для доменов от Яндекса (pdd.yandex.ru)</title>
      <link>https://zagirov.name/post/exim-pdd-yandex-ru/</link>
      <pubDate>Sun, 18 Sep 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/exim-pdd-yandex-ru/</guid>
      <description>Настраиваем отправку почты с нашего сервера через почту для доменов от Яндекса.
Для примера, используем домен zagirov.name.
Запускаем конфигурирование exim&amp;rsquo;а:
dpkg-reconfigure exim4-config Отвечаем на вопросы:
mail sent by SMARTHOST; received via SMTP or fetchmail Type System Mail Name: пусто Type IP Adresses to listen on for incoming SMTP connections: 127.0.0.1 ; ::1 Other destinations for which mail: пусто Machines to relay mail for: пусто Type Machine handling outgoing mail for this host (smarthost): smtp.</description>
    </item>
    
    <item>
      <title>Сохраняем письма, отправленные из php, в файлы</title>
      <link>https://zagirov.name/post/php-sendmail-save-to-file/</link>
      <pubDate>Fri, 03 Jun 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/php-sendmail-save-to-file/</guid>
      <description>При разработке нужно как-то складировать письма, отправляемые из php через функцию mail. Был написан такой скрипт:
#!/usr/bin/env php &amp;lt;?php define(&amp;#39;SENDMAIL_DIR&amp;#39;, &amp;#39;/tmp/mail/&amp;#39;); if ( ! file_exists(SENDMAIL_DIR)) { mkdir(SENDMAIL_DIR, 0777, true); } function generateFileName($i = 1) { $fileName = SENDMAIL_DIR . date(&amp;#39;Y-m-d_H-i-s_&amp;#39;) . $i . &amp;#39;.eml&amp;#39;; return file_exists($fileName) ? generateFileName(++$i) : $fileName; } $mail = fopen(&amp;#39;php://stdin&amp;#39;, &amp;#39;r&amp;#39;) or die(); $file = fopen(generateFileName(), &amp;#39;w&amp;#39;); while ( ! feof($mail)) { fwrite($file, fgets($mail)); } fclose($mail); fclose($file); Даём ему право на исполнение для пользователя веб-сервера (обычно www-data).</description>
    </item>
    
    <item>
      <title>Nginx конфиги</title>
      <link>https://zagirov.name/post/nginx-configs/</link>
      <pubDate>Fri, 06 May 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/nginx-configs/</guid>
      <description>В интернете довольно много можно выложено конфигов nginx под различные веб-приложения. Но в большинстве из них используются if совместно с rewrite, что достойно всяческого порицания по словам автора nginx Игоря Сысоева. Выложу используемые мной конфиги для различных систем (redmine, chive)
Redmine: upstream thin { server unix:/tmp/redmine.0.sock; } server { listen 80; server_name redmine.zagirov.name; root /usr/share/redmine/public/; access_log /var/log/nginx/redmine.access.log; error_log /var/log/nginx/redmine.error.log; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; include proxy.</description>
    </item>
    
    <item>
      <title>Перенос svn-репозитария в git</title>
      <link>https://zagirov.name/post/svn-to-git/</link>
      <pubDate>Thu, 07 Apr 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/svn-to-git/</guid>
      <description>Если у вас есть репозиторий svn, но вы познали все прелести git и не хотите терять историю правок, то эта статья для вас ;)
Первым этапом будет получение всех авторов, которые коммитили в svn. Для гита нужен дополнительно email коммитера.
#!/usr/bin/env bash authors=$(svn log -q | grep -e &amp;#39;^r&amp;#39; | awk &amp;#39;BEGIN { FS = &amp;#34;|&amp;#34; } ; { print $2 }&amp;#39; | sort | uniq) for author in ${authors}; do echo &amp;#34;${author} = ${author} &amp;lt;email&amp;gt;&amp;#34;; done Сохраняем вывод в какой-нибудь файл (/home/user/svn-authors.</description>
    </item>
    
    <item>
      <title>Установить текстовый редактор по-умолчанию</title>
      <link>https://zagirov.name/post/default-text-editor/</link>
      <pubDate>Sat, 12 Mar 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/default-text-editor/</guid>
      <description>Установить mcedit текстовым редактором по-умолчанию в системе:
sudo update-alternatives --set editor /usr/bin/mcedit Выбрать редактор из списка:
sudo update-alternatives --config editor </description>
    </item>
    
    <item>
      <title>Непрерывная интеграция: jenkins &#43; yii &#43; git</title>
      <link>https://zagirov.name/post/continuous-integration-jenkins-yii-git/</link>
      <pubDate>Sun, 06 Mar 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/continuous-integration-jenkins-yii-git/</guid>
      <description>Услышав шумиху про некую систему интеграционного тестирования hudson, который переименовали в jenkins, я захотел узнать что это и как это можно использовать. Для чего собственно он нужен? В кратце: он вытягивает последнюю версию из git/svn-репозитория и выполняет определённые действия (тестирует, выкладывает на другой сервер, делает отчёты). Всё это происходит автоматически: можно задать время, когда будет выполнятся задания. Можно почитать про пример использования jenkins.
Задача такая: Выполнение unit тестов для yii с отображением покрытия кода</description>
    </item>
    
    <item>
      <title>Правильная отдача заголовков при технических работах на сайте</title>
      <link>https://zagirov.name/post/correct-return-header-on-service/</link>
      <pubDate>Tue, 01 Mar 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/correct-return-header-on-service/</guid>
      <description>Есть ситуация: проводятся какие-то технические работы на сайте и нужно сайт правильно закрыть. Это нужно чтобы поисковики знали, что сайт не доступен, а не добавляли страницы в индекс или помечали страницы как удалённые.
server { listen 80 default; server_name _; root /var/www/default/www; charset utf-8; error_page 404 403 =503 /503.html; location = /503.html { add_header Retry-After &amp;#34;Sun, 27 Feb 2011 23:59:59&amp;#34;; } } Строка error_page 404 403 =503 /503.html означает, что перенаправляем все запросы с ошибками 404 и 403 на файл 503.</description>
    </item>
    
    <item>
      <title>Ubuntu 11.04 alpha 2. Asus EeePC 1000H. Не работает wifi RaLink 2790 (RT2860)</title>
      <link>https://zagirov.name/post/ubuntu-11-04-alpha-2-asus-eeepc-1000h-dont-work-wifi-ralink-2790-rt2860/</link>
      <pubDate>Sat, 26 Feb 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/ubuntu-11-04-alpha-2-asus-eeepc-1000h-dont-work-wifi-ralink-2790-rt2860/</guid>
      <description>Нашёл как исправить баг с глючащим wifi в моём нетбуке Asus EeePC 1000H. Карточка RaLink 2790 (RT2860). Нетбук подключался к wifi, получал ip-адрес по DHCP, но ничего не работало. Потом разрывалось соединение и заново подключалось с тем же печальным эффектом. Решение подсмотрел тут. Комманда lspci -vv выдала
01:00.0 Network controller: RaLink RT2860 Subsystem: RaLink Device 2790 Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast &amp;amp;gt;TAbort- &amp;amp;lt;TAbort- &amp;amp;lt;MAbort- &amp;amp;gt;SERR- &amp;amp;lt;PERR- INTx- Latency: 0, Cache Line Size: 32 bytes Interrupt: pin A routed to IRQ 19 Region 0: Memory at fbef0000 (32-bit, non-prefetchable) [size=64K] Capabilities: &amp;amp;lt;access denied&amp;amp;gt; Kernel driver in use: rt2800pci Kernel modules: rt2860sta, rt2800pci Нужно отключить модуль rt2800pci и использовать модуль rt2860.</description>
    </item>
    
    <item>
      <title>Yii: поведения (behaviors)</title>
      <link>https://zagirov.name/post/yii-behaviors/</link>
      <pubDate>Mon, 21 Feb 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/yii-behaviors/</guid>
      <description>Поведения в yii позволяют применять некоторые методы к уже существующему объекту из другого класса. Для чего могут понадобиться поведения? Рассмотрим &amp;ldquo;жизненный&amp;rdquo; пример. Нужно получить какие-то данные по залогиненному пользователю. Можно, конечно, использовать что-то вроде:
User::model()-&amp;gt;findByPk(Yii::app()-&amp;gt;user-&amp;gt;id); А можно использовать поведения и добавить метод в Yii::app()-&amp;gt;user protected/components/WebUser.php
class WebUser extends CBehavior { public function getData() { if ($this-&amp;gt;getOwner()-&amp;gt;id) { return User::model()-&amp;gt;findByPk($this-&amp;gt;getOwner()-&amp;gt;id); } else { return FALSE; } } } Добавляем в конфиг protected/config/main.</description>
    </item>
    
    <item>
      <title>Проект в utf8, mysql-база в cp1251</title>
      <link>https://zagirov.name/post/project-in-utf8-mysql-in-cp1251/</link>
      <pubDate>Sat, 05 Feb 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/project-in-utf8-mysql-in-cp1251/</guid>
      <description>Бывает так, что исходники проекта в utf8, а данные в базе хранятся в cp1251. Чтобы MySQL сам занимался переводом в другую кодировку, но после коннекта выполнить команды:
$db-&amp;gt;query(&amp;#39;SET NAMES cp1251&amp;#39;); $db-&amp;gt;query(&amp;#39;SET CHARACTER SET utf8&amp;#39;); </description>
    </item>
    
    <item>
      <title>Голосовое напоминание в Ubuntu Gnu/Linux</title>
      <link>https://zagirov.name/post/voice-remind-in-ubuntu-gnu-linux/</link>
      <pubDate>Mon, 17 Jan 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/voice-remind-in-ubuntu-gnu-linux/</guid>
      <description>Сидя за компом забываешь кое-что сделать, например, выключить плиту. В линуксе это можно реализовать так:
echo &amp;#34;нужная комманда&amp;#34; | at 07:00 Примеры: Сказать голосом через 10 минут, что нужно выключить плиту:
$ echo &amp;#34;espeak -v ru &amp;#39;Выключи плиту&amp;#39;&amp;#34; | at `date -d &amp;#39;+10 minute&amp;#39; +%H:%M` Пора выходить:
$ echo &amp;#34;espeak -v ru &amp;#39;Пока выходить&amp;#39;&amp;#34; | at 20:00 Весело получается ;)</description>
    </item>
    
    <item>
      <title>3G интернет в Ubuntu</title>
      <link>https://zagirov.name/post/3g-internet-in-ubuntu/</link>
      <pubDate>Sat, 15 Jan 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/3g-internet-in-ubuntu/</guid>
      <description>Хочу показать насколько просто настраивать 3G интернет в Ubuntu. Имеется huawei E1550 от МТС и Ubuntu 10.10. Хочу обратить внимание, что это всё работает &amp;ldquo;из коробки&amp;rdquo;.
Всё, интернет подключен ;)</description>
    </item>
    
    <item>
      <title>Расширение для Google Chrome: local database storage</title>
      <link>https://zagirov.name/post/google-chrome-extensions-local-database-storage/</link>
      <pubDate>Sun, 02 Jan 2011 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/google-chrome-extensions-local-database-storage/</guid>
      <description>Продолжаем осваивать плагинописание для браузеров на основе chromium и ,соответственно, для google chrome. Текущая тема: научиться использовать local database storage. Local database storage - это база данных, использумая из javascript. Представляет она собой SQLite внутри. Синтаксис привычный для SQL баз. Я буду использовать базу для запоминания всех полученных цитат. Логически все действия можно разделить на 4 операции:
Открытие базы и получение коннекта к ней Создание таблицы Запись в таблицу Чтение из таблицы Открытие базы и получение коннекта</description>
    </item>
    
    <item>
      <title>Пишем расширение под Google Chrome</title>
      <link>https://zagirov.name/post/write-extension-to-google-chrome/</link>
      <pubDate>Wed, 08 Dec 2010 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/write-extension-to-google-chrome/</guid>
      <description>В связи с последними тенденциями в вебе (в том числе и недавний запуск webstore), возникла идея попрактиковаться в написании плагина под Google Chrome. Решил написать плагин, который бы показывал цитаты с сайта Forismatic.com, после прочтения статьи о написании аналогичного апплета для gnome.
Страница установки плагина.
Требования: показ уведомлений через всплывающее окошко. двуязычность: русский и английский, причём язык должен подцепляться автоматически в зависимости от выставленного в браузере. Но при этом оставлять выбор на каком языке получать цитаты.</description>
    </item>
    
    <item>
      <title>Настройка Netbeans для yii с поддержкой xdebug, тестов phpunit и selenium</title>
      <link>https://zagirov.name/post/configure-netbeans-to-yii-with-xdebug-unit-tests/</link>
      <pubDate>Sun, 24 Oct 2010 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/configure-netbeans-to-yii-with-xdebug-unit-tests/</guid>
      <description>После прочтения книги Agile Web Application Development with Yii 1.1 and PHP5 захотелось рассказать о настройке NetBeans для работы с yii, включая поддержку unit-тестов + тесты через selenium.
Selenium позволяет проводить тесты, почти полностью эмулируя действия через браузер: кликать по ссылкам, вводить текст.
Это очень мощно! Имеются:
Сервер (ip: 192.168.0.3) Debian или другой linux-сервер с настроенным nginx, php5-fpm, xdebug Компьютер разработчика (ip: 192.168.0.2) Ubuntu 10.10 с установленным NetBeans 7.0m2 Сайт будет располагаться в /var/www/yii/www, а yii в /var/www/yii-lib/yii</description>
    </item>
    
    <item>
      <title>MySQL запросы через консоль</title>
      <link>https://zagirov.name/post/mysql-query-console/</link>
      <pubDate>Tue, 14 Sep 2010 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/mysql-query-console/</guid>
      <description>Обнаружил очень простой способ выполнения MySQL запросов в Debian. Причём без указания логина и пароля. В Debian&amp;rsquo;е создаётся системный пользователь debian-sys-maint, от которого и будут идти запросы. Например выборка:
echo &amp;#34;SELECT * FROM database.table WHERE id &amp;gt; 10&amp;#34; | mysql --defaults-file=/etc/mysql/debian.cnf -Bs Можно мониторить нагрузку:
watch &amp;#39;echo &amp;#34;show full processlist&amp;#34; | mysql --defaults-file=/etc/mysql/debian.cnf -Bs&amp;#39; </description>
    </item>
    
    <item>
      <title>Apt: управление приоритетами пакетов из stable, testing, unstable, experimental</title>
      <link>https://zagirov.name/post/apt-pinning-packages-stable-testing-unstable-experimental/</link>
      <pubDate>Fri, 20 Aug 2010 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/apt-pinning-packages-stable-testing-unstable-experimental/</guid>
      <description>Есть несколько &amp;ldquo;виртуальных&amp;rdquo; релизов у debian: stable - на текущий момент это 5 версия (lenny), testing - squeeze (когда он будет выпущен, то перейдёт в релиз stable). Unstable и experimental - экспериментальные релизы, не для продакшена!. Пакет проходит путь из experimental =&amp;gt; unstable =&amp;gt; testing =&amp;gt; stable. Иногда бывают ситуации, когда нужно установить пакеты поновее. Можно, конечно, скачать отдельно deb-пакет и установить его, но в этом случае одни минусы: возможно требуются удовлетворения зависимостей и лишаемся обновлений.</description>
    </item>
    
    <item>
      <title>Bash completion - расширенная автоподстановка</title>
      <link>https://zagirov.name/post/bash-completion/</link>
      <pubDate>Mon, 09 Aug 2010 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/bash-completion/</guid>
      <description>Очень нужная тулза для ленивых админов. Может работать автодополнением для разных консольных программ: aptitude, git, invoke-rc.d, ssh и других.
Список поддерживающих программ находиться в директории /etc/bash_completion.d
По желанию можно самому расширить этот список. Не забудьте прислать ваши труды мейнтейнеру пакета.
aptitude install bash-completion Добавляем в ~/.bashrc
# Use bash-completion, if available if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi </description>
    </item>
    
    <item>
      <title>Debian. Часть 4. Настройка веб-сервера: nginx, apache, mysql, postgresql</title>
      <link>https://zagirov.name/post/debian-4-configure-web-server-nginx-apache-mysql-postgresql/</link>
      <pubDate>Wed, 28 Jul 2010 04:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/debian-4-configure-web-server-nginx-apache-mysql-postgresql/</guid>
      <description>У меня работает связка nginx -&amp;gt; apache2 + mysql + postgresql. Поставим memcached, APC (кэшер для php), и несколько модулей для php5.
Для того, чтобы nginx проксировал через локальный адрес (192.168.1.254, например), необходимо добавить в bind наш домен. Это ещё пригодиться для доступа из локальной сети, чтобы запросы не шли через «внешку», а также для однозначной идентификации того, что заходят из «доверенной» сети. Добавляем в файл /etc/bind/named.conf.local наш домен:
zone &amp;#34;zagirov.</description>
    </item>
    
    <item>
      <title>Debian. Часть 3. Настройка iptables: NAT, фаервол</title>
      <link>https://zagirov.name/post/debian-3-setting-iptables-forward-nat-firewall/</link>
      <pubDate>Wed, 28 Jul 2010 03:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/debian-3-setting-iptables-forward-nat-firewall/</guid>
      <description>Фаервол нам нужен для ограничения подключения из вне, NATа, а также проброса портов. Для удоства написал скрипт на bash. Вставляем в файл /etc/init.d/rc.firewall #!/bin/bash IPTABLES=&amp;#34;/sbin/iptables&amp;#34; ############### Config ####### LNETS=&amp;#34;eth1 eth2 wlan0&amp;#34; DESKTOP=&amp;#34;192.168.1.1&amp;#34; DESKTOP_OPEN_PORT=&amp;#34;8010 9000&amp;#34; DESKTOP2=&amp;#34;192.168.2.1&amp;#34; DESKTOP2_OPEN_PORT=&amp;#34;9003&amp;#34; HOME_MASKS=&amp;#34;192.168.1.0/24 192.168.2.0/24 192.168.3.0/24&amp;#34; PROVIDER=&amp;#34;eth0&amp;#34; PROVIDER_IP=&amp;#34;10.0.4.59&amp;#34; PROVIDER_MASK=&amp;#34;10.0.0.0/8&amp;#34; INET=&amp;#34;ppp+&amp;#34; WHITE_IP=&amp;#34;77.77.77.77&amp;#34; OPEN_PORTS=&amp;#34;22,80&amp;#34; ################### echo 1 &amp;gt; /proc/sys/net/ipv4/conf/default/rp_filter echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe nf_nat_pptp modprobe nf_conntrack_pptp modprobe nf_conntrack_proto_gre modprobe nf_nat_proto_gre modprobe iptable_nat modprobe ip_nat_ftp modprobe ipt_LOG $IPTABLES -P INPUT ACCEPT $IPTABLES -P OUTPUT ACCEPT $IPTABLES -P FORWARD DROP $IPTABLES -F $IPTABLES -X $IPTABLES -t nat -F PREROUTING $IPTABLES -t nat -F POSTROUTING ############ DELETE IF ALL WORKING FINE ###### #$IPTABLES -A INPUT -j ACCEPT ##################################### #mtu for vpn magick command, mega debian epic fail $IPTABLES -o $INET -A FORWARD -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 800:1536 -j TCPMSS --clamp-mss-to-pmtu # DENY SECTIONS $IPTABLES -A INPUT -p tcp !</description>
    </item>
    
    <item>
      <title>Debian. Часть 2. Настройка сети: dhcp, bind9, vpn, wifi-точка на карте dlink dwa-520</title>
      <link>https://zagirov.name/post/debian-2-setting-network-dhcp-bind9-vpn/</link>
      <pubDate>Wed, 28 Jul 2010 02:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/debian-2-setting-network-dhcp-bind9-vpn/</guid>
      <description>После установки, сперва настроим локальную сеть провайдера и vpn для интернета. Напоминаю схема сети:
Локальная сеть провайдера будет на интерфейсе eth0. Внутренняя сеть на интерфейсах eth1 и eth2.
Сами настройки сети находятся в файле: /etc/network/interfaces
Настройки сети провайдера: ip: 10.0.4.59, маска: 255.255.255.0, шлюз: 10.0.4.254, dns: 10.0.0.1 и 10.0.0.10
В домашней сети у сервера будут ip 192.168.1.254 и 192.168.2.254
nano /etc/network/interfaces auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 10.</description>
    </item>
    
    <item>
      <title>Debian. Часть 1: установка</title>
      <link>https://zagirov.name/post/debian-1-install/</link>
      <pubDate>Wed, 28 Jul 2010 01:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/debian-1-install/</guid>
      <description>Есть цель написать статьи по настройке домашнего сервера для различных нужд:
шлюз для выхода всех компьютеров в квартире в интернет через vpn (pptp) + wi-fi веб-сервер торрент-качалка + samba эксперименты Схема сети такая:
Эти статьи будут и как напоминающая инструкция самому себе.
Начну с самого начала: установка системы GNU/Linux.
Лирическое отступление: Есть довольного много серверных дистрибутивов: Debian, Ubuntu, Gentoo, Arch, Slackware, etch. Можно много холиварить на эти темы. Мой выбор Debian был обусловлен несколькими факторами:</description>
    </item>
    
    <item>
      <title>Зачем нужен Firewall на веб-проектах</title>
      <link>https://zagirov.name/post/why-you-need-the-firewall-on-the-web-projects/</link>
      <pubDate>Wed, 28 Jul 2010 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/post/why-you-need-the-firewall-on-the-web-projects/</guid>
      <description>Не так давно написал статейку на хабре.
Здравствуйте, обычно при создании проектов в интернете при вопросе безопасности большее внимание уделяют веб-приложению, а о защите самого сервера забывают, а именно о firewall’е. Я понимаю, что настройкой сервера, и в том числе firewall’а, должен заниматься специальный человек — сисадмин, но во многих ситуациях получается так, что программист сам себе админ. На настройку firewall’а даже у программиста уйдёт всего лишь около 1 дня — это избавит от потенциальных проблем.</description>
    </item>
    
    <item>
      <title>Обо мне</title>
      <link>https://zagirov.name/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://zagirov.name/about/</guid>
      <description>Обо мне</description>
    </item>
    
  </channel>
</rss>
