leopard on августа 14, 2010

Написал небольшой мануал по настройке и масштабированию PostgreSQL. Сподвигло меня на это то, что материала по этой теме мало, он устарел или его просто нет.

Скачать можно здесь:
http://github.com/le0pard/postgresql_book/raw/master/postgresql.pdf
Исходники:
http://github.com/le0pard/postgresql_book/

Сайт книги:

http://postgresql.leopard.in.ua/

Tags: ,

leopard on июля 28, 2010

Наверно многие PHP разработчики работали с таким акселератором, как eAccelerator. eAccelerator является PHP-акселератором, основное назначение которого состоит в кэшировании бинарного представления кода. Каждый раз при выполнении скрипта, PHP читает все подключаемые файлы и переводит их в бинарный код, при запросе скрипта операция повторяется. Задача eAccelerator состоит в сохранении бинарного кода для повторного использования, уменьшая время выполнения скрипта. Быстрый, простой, легкий в настройке. Что еще пожелать?

В новых версиях (а именно с 0.9.6 и 0.9.6.1) была найдена неприятная вещь. При компиляции по умолчанию, а именно через такой набор команд:

  1. phpize
  2. ./configure
  3. make
  4. make install


начинаются проблемы с PHP, а именно:

  1. PHP Warning:  Unknown: open_basedir restriction in effect. File() is not within the allowed path(s): (<your_open_basedir_dirs>) in Unknown on line 0

Все оказывается просто. При использовании директивы PHP open_basedir для обеспечения безопасности, нужно собрать eAccelerator с опцией "--without-eaccelerator-use-inode". Данный механизм хранения кэша не совместим с open_basedir, поэтому open_basedir в сочетании с этой опцией приводит к фатальным ошибокам в скриптах.

Решение:

  1. phpize
  2. ./configure --without-eaccelerator-use-inode
  3. make
  4. make install


Вот и все!

Tags: ,

leopard on апреля 9, 2010

Очень долго я разрабатываю приложение для веба. Сначала я работал на DreamWeaver, но его функционал был ужасен да еще за него нужно было платить. Немного помытарился я перешол на Netbeans. Прекрасное IDE, но есть один недостаток – кушать такие IDE память и процессор любят (логично – больше плагинов – больше проблем). Потом я перешол на Aptana. Великолепное IDE. Писать про него можно много. Хоть он тоже любит память и процессор (Eclipse все-таки), но не такой прожорливый как Netbeans. Я работаю на этом IDE по сей день, но в один прекрасный момент мне достался ноутбук с 1.5 одно ядерным процессором и 1 Гб памяти. Работать то можно, но для Aptana такой процессор не сильно нравится – уж часто её приходится «уходить в себя» (зависать на неопределенный интервал времени). И хоть работать возможно, я решил поработать в Vim. Сам по себе vim «голый» очень скуд в функционале. И поскольку мы разрабатываем львиную долю проектов на Rails и Ruby, мне нужно было улучшить работу. И к моей радости довольно-таки быстро наткнулся на набор скриптов от бразильца Akita on Rails. Он, как я понял, собрал кучу полезных плагинов вместе и чуть-чуть дописал конфиг. Всё, о чём будет говориться ниже верно не только для Ruby, но и для других языков типа C, PHP и прочее, готовые наборы сниппетов (о них далее) в комплекте есть и для них.

Read the rest of this entry »

Tags: , ,

Tags: , , ,

Введение

В этом топике я хочу представить вам, дорогие читатели, пересказ вебинара от человека, чьё имя не нуждается в представлении. Для того, чтобы изложить часовой вебинар в виде небольшого топика, мне пришлось значительно ужать комментарии автора, поэтому я сознательно не помечаю топик как «перевод». В этот раз Стив МакКоннелл решил поделиться с нами своим опытом в виде коротких тезисов, в которых он отражает самые страшные ошибки при оценке трудоёмкости разработки программного обеспечения. В 1998 году читатели журнала Software Development назвали Стива одним из самых влиятельных людей в индустрии разработки программного обеспечения на равне с Биллом Гейтсом и Линусом Торвальдсом. Стив — автор книги «Software Estimation. Demystifying The Black Art» — одной из самых популярных книг в области оценки трудоёмкости разработки ПО. Надо признаться, что вебинар был проведён относительно давно (июнь 2009 года), но информация, представленная там, совсем не устарела.

Read the rest of this entry »

Tags: ,

leopard on марта 6, 2010

Да-да-да! На столько непонятный заголовок. Все очень просто. Есть такой популярный PHP фреймворк – Symfony. Все в нем хорошо, вот только недавно обнаружилась одна плохая бага: при включенном кешировании (а именно использовании contextual параметра в кеше) на продакшене при попытке вызова 404 сайт просто вываливается с ошибкой, примерно с такой:

  1. PHP Fatal error: Uncaught exception ‘sfException’ with message ‘A cache key must contain both a module and an action parameter’ in /var/www/clients/client2/web6/lib/vendor/symfony/lib/view/sfViewCacheManager.class.php:246#012Stack trace:#012#0 /var/www/clients/client2/web6/lib/vendor/symfony/lib/view/sfViewCacheManager.class.php(145): sfViewCacheManager->convertParametersToKey(Array)#012#1 /var/www/clients/client2/web6/lib/vendor/symfony/lib/view/sfViewCacheManager.class.php(478)

Проблема решается просто. При создании ключа для contextual кеша используется модель и экшен текущей страницы. А на при попытке вызова несуществующей страницы требуется указать, что модель и экшен брать для 404 страницы. А вот и сам фикс:

  1. Index: lib/view/sfViewCacheManager.class.php
  2. ===================================================================
  3. lib/view/sfViewCacheManager.class.php       (revision 28275)
  4. +++ lib/view/sfViewCacheManager.class.php       (working copy)
  5. @@ -142,6 +142,10 @@
  6.        if (!$contextualPrefix)
  7.        {
  8.          list($route_name, $params) = $this->controller->convertUrlStringToParameters($this->routing->getCurrentInternalUri());
  9. +       if(!isset($params[‘module’]) || !isset($params[‘action’])){
  10. +               $params[‘module’] = sfConfig::get(‘sf_error_404_module’);
  11. +               $params[‘action’] = sfConfig::get(‘sf_error_404_action’);
  12. +       }
  13.          $cacheKey = $this->convertParametersToKey($params);
  14.        }
  15.        else
  16.  

Вот и все. Теперь 404 будет работать и на продакшене. Тикет на symfony trac.

Tags:

leopard on февраля 5, 2010

Используйте bcrypt.

Используйте bcrypt. Используйте bcrypt. Используйте bcrypt. Используйте bcrypt. Используйте bcrypt. Используйте bcrypt.

Почему не {MD5, SHA1, SHA256, SHA512, SHA-3, другие}?

Все эти хэш-функции имеют общую цель – они предназначены для расчета предварительно огромных объемов данных в самые короткие сроки. Это означает, что они фантастически подходят для обеспечения целостности данных и полнейший шлак(мусор) для выполнения функции хранения паролей.

Современный сервер может вычислять MD5 хеш приблизительно размером 330 MB каждую секунду. Если у ваших пользователей пароли, которые в нижнем регистре, буквенно-циферные и до 6 символов, вы можете перебрать каждый пароль такого вида приблизительно за 40 секунд. И это без всякого напряга! Если вы готовы потратить около 2000 долларов и одну-две недели для сборки CUDA, вы можете собрать собственный маленький кластер, который позволит вам подбирать около 700000000 паролей в секунду. С таким показателем вы будете раскалывать пароли чуть больше, чем за одну секунду.

Read the rest of this entry »

Tags: , , ,

leopard on февраля 1, 2010

По большей части эта статья — изложение сути статьи «Brewer’s CAP Theorem» Джулиана Брауна. В оригинале много полезных ссылок и интересных примеров, поэтому если позволяет время и знание языка, почитайте его. А здесь у меня просто самая суть, покороче и по-русски.

В 2000 году Эрик Брюер выдвинул гипотезу, касающуюся ключевых свойств распределённых систем, которую затем доказали в MIT, и с тех пор она называется теоремой Брюера или теоремой CAP (Consistency-Availability-Partition tolerance). Вольная формулировка:

В распределённой системе невозможно обеспечить одновременное выполнение всех трёх условий: корректности, доступности, устойчивости к сбоям узлов.

Что это за свойства?
Read the rest of this entry »

Tags: ,

leopard on января 25, 2010

При работе с проектом всегда хочется увидить его прогрес выполнения и также узнать время его выполнения (хотя бы приблизительно). Ken Schwaber рассказывал про burn-up and burn-down charts. Я был удивлен в простоте и информативности такого метода.

Burn-down charts

Burn-down charts

Через такой тип диаграмм можно увидеть какой обьем работы остается до конца проекта и успеете в сроки выполнения. На вертикальной оси откладывают не выполненную работу. На горизонтальной оси откладываем итерации проекта, помечаем какие итерации приближают нас к окончанию проекта. После выполнения каждой итерации её помечают на графике и таким образом отслеживают будет ли выполнен проект в срок.

По такому графику можно отслеживать все ли итерации выполняются за такое время, на которое они расчитаны, или же возможно сроки выполнения придется пересмотреть.

Read the rest of this entry »

Tags:

leopard on января 13, 2010

Начнем с простого. Что значат эти буквы в моем понимании?

Одноточечная дистрибуция (слева) и Дистрибуция средствами CDN (справа)

Одноточечная дистрибуция (слева) и Дистрибуция средствами CDN (справа)

Сеть доставки (и дистрибуции) контента (Content Delivery Network или Content Distribution Network, CDN) – географически распределенная сетевая инфраструктура, позволяющая оптимизировать доставку и дистрибуцию контента конечным пользователям в сети Интернет. Использование контент-провайдерами CDN способствует увеличению скорости загрузки интернет-пользователями аудио-, видео-, программного, игрового и других видов цифрового контента в точках присутствия сети CDN. Значит я могу увеличить скорость своего сайта и уменьшить нагрузку на сервер через это? Еще как…

Read the rest of this entry »

Tags: ,