Перейти к содержимому

11

Не секрет, что Apache по умолчанию не отдаёт заголовок Last-Modified для документов с SSI. Штатными средствами предлагается использовать команду XBitHack full для выдачи этого заголовка. Однако, это требует установки битов прав доступа для всех таких файлов, что зачастую не совсем удобно.

Если же вы используете Apache вместе со втроенным интерпретатором языка Perl, mod_perl, то эту проблему можно решить и без использования команды XBitHack, при помощи этого модуля:


package Apache::FLastMod;

use strict;
use Apache::Constants qw(:common);
use Apache::File ();
use Date::Manip;

sub handler {
my $r = shift;
return DECLINED unless substr($r->content_type(), 0, 9) eq 'text/html';

my $file = $r->filename;
my $modtime = (stat($file))[9];
my $lm = &UnixDate(&DateCalc("Jan 1, 1970  00:00:00 GMT", $modtime), "%a, %d %b %Y %H:%M:%S GMT");
$r->err_header_out('Last-Modified' => $lm);
my $meta = "<meta http-equiv=\"Last-Modified\" content=\"$lm\">\n";

my $fh;
unless ($fh = Apache::File->new($file)) {
$r->log_error("Couldn't open $file for reading: $!");
return SERVER_ERROR;
}

$r->send_http_header;

my $header = '<!-- FLastMod was here -->';

while(<$fh>) {
s!(<body [^>]*>)!$1$header!oi;
s!(</head[^>]*>)!$meta$1!oi;
s/<meta http-equiv=\"Content-Type\".*>/<!-- meta stripper was here -->/oi;
} continue {
$r->print($_);
}

return OK;
}

1;
__END__

Подключается этот модуль в конфиге сервера следующим образом:


<Files ~ "\.shtml">
SetHandler perl-script
PerlHandler Apache::FLastMod
</Files>

NB: этот модуль также вырезает заголовок META.Content-Type.

4

HIGHLIGHT.JS -- скрипт автоматической подсветки синтаксиса кода, размещаемого в блогах, форумах и других онлайновых публикациях. В даный момент, для версии 0.8, поддерживается подсветка синтаксиса языков: CSS, Delphi, HTML, Perl, Python, PHP, Java, C++. Врочем, добавить новый язык несложно, приводится инструкция добавления описания нового языка.

Пример работы на этом блоге.

5

Быстрая реализация функции strncpy а-ля Duff's device:

void * dps_strncpy(void *dst0, const void *src0, size_t length) {
if (length) {
register size_t n = (length + 7) / 8;
register char *dst = dst0, *src = src0;
switch( length % 8 ) {
case 0:    do {    if (!(*dst++ = *src++)) break;
case 7:        if (!(*dst++ = *src++)) break;
case 6:        if (!(*dst++ = *src++)) break;
case 5:        if (!(*dst++ = *src++)) break;
case 4:        if (!(*dst++ = *src++)) break;
case 3:        if (!(*dst++ = *src++)) break;
case 2:        if (!(*dst++ = *src++)) break;
case 1:        if (!(*dst++ = *src++)) break;
} while(--n > 0);
}
}
return dst0;
}

ЗЫ: код под GPL.

Кстати, реализация strncpy в libc во FreeBSD 5.3, если длина src0 короче length байт, добивает dst0 до length байт нулями -- некузяво с точки зрения производительности.

27

Компании Zend и Microsoft объявили о заключении долгосрочного партнёрского соглашения.

...читать далее "Zend + Microsoft = PHP на Windows"

3

Согласно сообщению на Zend Conference 2006, поддержка GData добавлена в Zend Framework.

Google Data APIs предоставляют простой стандартный протокол для обработки данных в Сети, используя эти API, разработчики могут встраивать в свои приложения работу с такими сервисами как Google Base, Calendar, Blogger, и CodeSearch.

Библиотека Zend Google Data Client Library предоставляет компонент, дающий возможность выполнять запросы и команды Google Data APIs из ваших приложений на PHP 5.

//Google Code Blog

Просматривая старые дискеты, обнаружил G-gramar.ps, -- старый свой эксперимент с AGL-системами (прошло 10 лет, фигасе). Достатосно просто послать этот файлик в любой принтер, понимающий Postscript. Каждый раз при распечатке будет генериться уникальная картинка, хотя сюжет один и тот же.

3

Началось всё с того, что aspell периодически падает при предложении вариантов правильного спеллинга если, например, английским словарём проверяются и английские и русские слова. Конечно некузяво юзеру периодически выдеть сообщение о внутренней ошибке сервера, поэтому эту проверку завернул в отдельный процесс, создаваемый при помощи fork(), -- отработал -- хорошо; упал  -- не страшно, родительский процесс пойдёт дальше, пользователь увидит результат, хотя и без проверки спеллинга.

Но не тут-то было, оказывается  Apache и lighttpd  стали выводить HTTP-заголовки, выдаваемые CGI-мождулем дважды, один раз где положено, среди заголовков ответа, второй раз -- непосредственно вначале тела ответа. Причём, если у Apache включен KeepAlive, то всё отрабатывает правильно (проблемы нет).

После нескольких дней разборок, какое именно изменение привело к такому эффекту выяснилось, что виновато применеие fork(). Если чилда прибивать сразу по окончании его работы, то получаем эту проблему, если же отложить прибитие этого чилда до окончания всего вывода CGI-скрипта, то избежим этих грабель.

12

Новая поиcковая технология Storytelling разработана американской компанией Virginia Tech. Эта технология, похожая на старую игру, когда изменяя всего лишь одну букву слова и переставляя остальные образуют новые слова и тем самым формируя цепочку связаных слов, позволяет находить аналогичные связи между документами, но только вместо букв выступают объекты или факты, описываемые в этих документах.

//BE Etats-Unis 48, Newswise

Алгоритмы Storytelling описаны здесь: ACM SIGKDD 2006.