Какаду в Сиднейском королевском ботаническом саду:
...читать далее "Какадуду"
Метка: aspell
«Пах омов» больше не видно
В результате обновления версии поисковой машины Интернет Сочи улучшена проверка правильности слов и имен, имеющих отношение к Сочи, но не вошедших в общедоступную версию словарей aspell для русского языка (впрочем как и для английского).
...читать далее "«Пах омов» больше не видно"
fork() в CGI
Началось всё с того, что aspell периодически падает при предложении вариантов правильного спеллинга если, например, английским словарём проверяются и английские и русские слова. Конечно некузяво юзеру периодически выдеть сообщение о внутренней ошибке сервера, поэтому эту проверку завернул в отдельный процесс, создаваемый при помощи fork(), -- отработал -- хорошо; упал -- не страшно, родительский процесс пойдёт дальше, пользователь увидит результат, хотя и без проверки спеллинга.
Но не тут-то было, оказывается Apache и lighttpd стали выводить HTTP-заголовки, выдаваемые CGI-мождулем дважды, один раз где положено, среди заголовков ответа, второй раз -- непосредственно вначале тела ответа. Причём, если у Apache включен KeepAlive, то всё отрабатывает правильно (проблемы нет).
После нескольких дней разборок, какое именно изменение привело к такому эффекту выяснилось, что виновато применеие fork(). Если чилда прибивать сразу по окончании его работы, то получаем эту проблему, если же отложить прибитие этого чилда до окончания всего вывода CGI-скрипта, то избежим этих грабель.
DataparkSearch 4.36
Выпущен DataparkSearch 4.36. Основные новшества:
- Слегка модифицирован Neo PopRank.
- Исправлена компиляция с поддержкой aspell под OpenBSD.
- indexer теперь может работать с cached и stored через NAT.
- Добавлена команда BodyPattern.
- Улучшена работа SEA.
- Исправлен трап при некорректном значении указаном в <BASE HREF
- Ключ --enable-full-rel у configure заменён на --enable-rel. Поддерживаются методы: full, fast, ultra.
- Добавлены команды Store и NoStore.
- Исправлены некоторые баги.
Исправлен трап aspell
Уф, почти два дня ушло, но всё-таки пофиксен трап aspell на некоторых русских словах. Ниже дан патч к common/convert.cpp.
*** convert.cpp.orig Sun Jun 26 15:21:03 2005 --- convert.cpp Sun Aug 28 15:09:49 2005 *************** *** 521,527 **** out.append(*in); } else { const Chr * stop = reinterpret_cast<const Chr *>(in0 +size); ! for (;in != stop; ++in) out.append(*in); } } --- 521,527 ---- out.append(*in); } else { const Chr * stop = reinterpret_cast<const Chr *>(in0 +size); ! for (;in < stop; ++in) out.append(*in); } }
Ошибка прям классическая из цикла "Как не надо программировать на C/C++" 🙂