четверг, 21 мая 2009 г.

Беды на Cent OS продолжаются

При попытке установки ez_setup.py вылетел exception

zipimport.ZipImportError: can’t decompress data; zlib not available stemming from python ez_setup.py.

Помогло следующее решение установил zlib-devel. Перекомпилили python.
Заработало!

update kernel-headers на CentOS

Цитирую полезную статью, оказался в точно такой же ситуации при покупке VPS на Agawa

Установка GCC

Сразу после регистрации сервера вам может потребоваться установить GNU C++ Compiler. Когда я первый раз настраивал аккаунт на Агаве, он был уже установлен, однако на новом аккаунте он почему-то отсутствовал. Поэтому его потребовалось установить:

yum install gcc-c++

При установке может возникнуть ошибка Error: Missing Dependency: kernel-headers >= 2.2.1 is needed by package. В этом случае необходимо обновить пакет kernel-headers. Я его ставил отсюда:

wget ftp://ftp.pbone.net/mirror/ftp.centos.org/5.2/os/i386/CentOS/kernel-headers-2.6.18-92.el5.i386.rpm
rpm -i kernel-headers-2.6.18-92.el5.i386.rpm

После этого все должно ставиться нормально.

пятница, 15 мая 2009 г.

redirect 301

Иногда вам приходится переименовывать страницы своего сайта. Но предположим у ваших страниц под предыдущим названием был очень хороший рейтинг и терять его очень не хочется. Для сохранения тяжело заработанного рейтинга нам надо как-то сообщить поисковикам, что мы перенесли страницу. Открываем энциклопедию юного сурка - rfc 2616
и находим

10.3.2 301 Moved Permanently

The requested resource has been assigned a new permanent URI and any
future references to this resource SHOULD use one of the returned
URIs. Clients with link editing capabilities ought to automatically
re-link references to the Request-URI to one or more of the new
references returned by the server, where possible. This response is
cacheable unless indicated otherwise.

The new permanent URI SHOULD be given by the Location field in the
response. Unless the request method was HEAD, the entity of the
response SHOULD contain a short hypertext note with a hyperlink to
the new URI(s).

If the 301 status code is received in response to a request other
than GET or HEAD, the user agent MUST NOT automatically redirect the
request unless it can be confirmed by the user, since this might
change the conditions under which the request was issued.

Note: When automatically redirecting a POST request after
receiving a 301 status code, some existing HTTP/1.0 user agents
will erroneously change it into a GET request.

Ага, значит при обращении поисковика по старому URL нам нужно произвести редирект со статусом 301.

Для этого в файлике .htaccess прописываем
redirect 301 /old/path.html /new/path.html

Не забудьте заменить пути из примера на ваши страницы ;)

среда, 8 октября 2008 г.

PHPUnit Fred Yankowski

Есть несколько реализаций PHPUnit (php реализации известного пакета тестов JUnit). Первая, пожалуй каноноческая, версия господина Бергмана . Вторая реализация принадлежит Фреду Янковскому. Недавно решил ее посмотреть . Меня сильно озадачило то, что тесты ни в какую не хотели работать. Чтоб отловить багу реализации влез в код. Оказалось Янковский, шут поймет из каких побуждений, попробовал переопределить ( не наследовать) класс Exception разумеется движок не захотел это глотать. Я удивлен, что это как-то раньше работало, видно php4 это еще хавал. Не долго думая я изменил название на UException и заработало.

среда, 19 сентября 2007 г.

О замене метода

Иногда я сохраняю старый метод, но для обработки в нем привлекается новый метод. Это полезно, если метод объявлен с модификатором видимости public, а изменять интерфейс других классов я не хочу.

Мартин Фаулер

суббота, 1 сентября 2007 г.

Стоит ли заниматься переименованием?

Стоит ли заниматься переименованием? Без сомнения, стоит. Хороший код должен ясно сообщать о том, что он делает, и правильные имена переменных составляют основу понятного кода. Не бойтесь изменять имена, если в результате код становится более ясным. С помощью хороших средств поиска и замены сделать это обычно несложно. Строгий контроль типов и тестирование выявят возможные ошибки. 

Запомните:

ПримечаниеНаписать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям.Очень важно, чтобы код сообщал о своей цели. Я часто провожу рефакторинг, когда просто читаю некоторый код. Благодаря этому свое понимание работы программы я отражаю в коде, чтобы впоследствии не забыть понятое.Мартин Фаулер

Linux: генерация рандомной строки для пароля

 cat /dev/urandom | tr -dc '[:alnum:]' | fold -w ${1:-20} | head -n 1