четверг, 12 ноября 2009 г.

Поисковая экспедиция

Всем привет. Для нового апдейта моего проекта TrentaQuattro был необходим поиск. Дело крайне сложное и весьма мной нелюбимое — в принципе не люблю работать со строками, а особенно с регулярными выражениями, обязательно где-то облажаюсь. А если не облажаюсь, то всё равно облажаюсь.

Задача: организовать полнотекстовый поиск в MySQL в двух таблицах, в каждой из которых ищем только в одной строке. Иначе говоря — поиск среди постов.

Для начала я решил пройтись по гуглю — во-первых, как там это устроено (так сказать, взглянуть глазами девелопера, а не юзера), а во-вторых — поискать разных поисковых движков. Sphinx был слишком суров: мне не нужен атомный ледокол, если я ищу рыбацкую лодку. Яндекс-Сервер — уже не ледокол, это корабль Энтерпрайз из Стар Трека, что мне уж точно не нужно. Мои самые худшие опасения подтвердились, прийдется делать всё самому. Так, сперва нарисуем схему работы. Пользователь вводит поисковый запрос, он аяксом передается на сервер, там каленым железом и святой водичкой из запроса вытравливаются все кул-хацерские символы, потом поиск, отправка результатов браузеру в виде JSON. Вроде просто. Как мне тогда казалось.

Что из себя представляет JSON-ответ? Код ответа (нашлось, не нашлось, мало символов), количество найденного, количество показанного и сами результаты. Очень хотелось сделать поиск в один MySQL запрос, но выяснилось, что ничего не получится — нужно минимум два запроса: один поисковый, а второй похожим запросом считает общее количество найденного. Ну это-то просто, а вот как быть с самим поиском? Делать всё через like? Отчего же, давайте попробуем... Первый образец уже работал, когда я наткнулся на спецификацию родного полнотекстового поиска в MySQL — через match-against. Выглядело очень вкусно — сортировка по релевантности, низкое время выполнения запроса. На всякий случай забэкапив старый запрос, я быстренько составил новый. Потестировал в PHPMyAdmin — не работает. Почему? Ах, да. Таблицы в InnoDB, а он не поддерживает полнотекстовый поиск. Быстренько смотался в гугл, начал набирать "InnoDB..." и тут оно мне выдало возможные запросы, первым из которых — "InnoDB vs. MyISAM". В этот момент я выпал — именно это мне и было нужно, узнать о подводных камнях MyISAM, может, ну его нафиг. Но откуда гугл узнал, что я собираюсь искать именно это?.. Чудеса. Выяснив, что MyISAM ничего чудовищного в себе не содержит, я забэкапил базу данных вне очереди (обычно я делаю это по утрам) и перевел нужные таблицы на новый движок. Отлично, запрос работает... Но ничего не возвращает. Тут я запаниковал — вдруг этот поиск понимает только английские символы, а русские нет? Но пронесло. Выяснилось, что я выставил кодировку utf8_bin в полях body, где хранились тексты постов. А это значит, что регистр имеет значение ©. Следующий запрос уже выдал мне искомый результат.

Но тем не менее, после я понял, что родной полнотекстовый поиск меня совершенно не устраивает — порой не ищет самые обычные слова (ну скажите на милось, почему нельзя найти слово "хуй"?), зато чудесно ищет союзы и предлоги (хотя заявлено, что не ищет ничего, что короче трех символов). К тому же, отказывается искать то, что есть во многих постах. Короче говоря, пришлось мне вернуться к конструкции like.

Интересная эта штука, полнотекстовый поиск.

пятница, 3 апреля 2009 г.

пятница, 20 февраля 2009 г.

K-Lite Codec Pack не понадобился, оно и так отлично проигрывает видео-файлы.
Плюс великолепно работает Python+wxPython.

среда, 18 февраля 2009 г.

Вести с фронтов, уже не помню какой номер

Я веду прямой репортаж из Windows 7. Наша экспедиция находится здесь уже... (отворачивается от клавиатуры) Который мы день уже тут, кто мне скажет? (поворачивается обратно) Говорят, что третий.

В общем, третий день в Виндоус Семь, полёт нормальный. Нареканий почти нет.
Попытаюсь поставить пак K-Lite, надо попробовать посмотреть видео (да и Хаус свежий как раз на харде лежит).

вторник, 17 февраля 2009 г.

Рабочий стол

Он такой: 

Вести с фронтов-?-2

После перезагрузки снова вылезли те самые полосы. Драйверов под мою видеокарту (Radeon 9600) пока нет. Будем ждать.

понедельник, 16 февраля 2009 г.

Вести с фронтов-?

Короче так. К Виндоус 7 подходят любые (?) драйверы для Висты. Поставил драйверы на мою видеокарту, Контр-Страйк запустился, но играть было решительно невозможно. Каким бы Виндоус 7 хорошим ни был, а новый компьютер для него всё-таки хорошо бы.

Контр-Страйк

Контр-Страйк не захотел запускаться в режиме OpenGL. Попытка установить драйвера для видеокарты завершилась феерическом провалом. По экрану бегали полосы, похожие как когда у телевизора плохой сигнал. Зашел под безопасным режимом, удалил драйвера вручную, после перезагрузки (VGA-режим) Виндоус сам скачал и установил новые драйвера. OpenGL всё так же не работает. Ждем.

Стим

Поначалу Стим не захотел запускаться, но я всё-таки заставил его работать, используя совместимость со старыми версиями Виндоус (в данном случае с Виндоус Экспи, второй сервис-пак).

Вести с фронтов-4

Итак, Виндоус 7 оценил мой компьютер:
По клику больше. Впрочем, и так видно, что тройка.

Вести с фронтов-3

Немного позитива. В Виндоус Экспи у меня была такая проблема (которую я долгое время в упор не замечал): все сайты открывались с задержкой в 1-1.5 секунды. При мегабитном канале. Сама по себе загрузка контента соответствует заявленной провайдером скорости, но задержка между нажатием клавиши Энтер и началом загрузки содержимого как раз была вышеуказанная. Всё это не мешало работе, хотя и раздражало прилично.

Сейчас же, в Виндоус 7, ничего такого нет, на удивление.

Вести с фронтов-2

Итак, звуковая карточка заработала. Но при этом Виндоус меня неприятно удивил. Как только я скачал с официального сайта драйвер (с диска драйвера устанавливаться не захотели) для XP (потому что, хоть и Windows 7 там в списке есть, но ни одного драйвера для моей карточки нет) и запустил его, Виндоус выдал мне синий экран смерти (он там обновленный, хехе, хоть и всё еще синий). Я перезапустил компьютер.

Виндоус сразу предложил установить драйвера для моей видео- и аудиокарты. После этого звук заиграл. Не совсем ясен остался один вопрос: звук заиграл оттого, что успели установиться (пусть даже частично) драйвера с сайта, или действительно Виндоус виднее, и те драйвера, которые он скачал — правильные (-ее)?

Немного удивил тот факт, что Виндоус нашел мой компьютер (!), но сказал, что он не работает. Скриншот в комплекте.

С кодировкой никаких проблем нет. Винамп, Хром и Я.Онлайн установились отлично.

Вести с фронтов

Итак, я поставил себе Windows 7. А еще я как раз пишу из-под неё. Ощущения удивительные. Эта версия Виндоус работает быстрее Виндоус Экспи, что не может не радовать.

Единственная проблема — напряг с драйверами (в моем случае — для звуковой карточки Sound Blaster Live! 24 Bit). Но мне кажется, это дело поправимое.

Всё хорошо.

воскресенье, 15 февраля 2009 г.

Язык Pawn

Долго присматривался к метамодовскому модулю AMXModX. Присматривался и так и эдак, любовался на творения людей, которые пишут к AMX плагины. А потом решил написать чего-то сам.

Поначалу я думал, что язык, который используется при написании плагинов — C++ (еще раньше думал что С). А потом выяснилось, что язык тот особый, называется Pawn.

Большего мозгоёбства мир, я думаю, еще не видел. Совершенно странный синтаксис и непонятные ограничения, позволяющие создать Hello World только минут через десять. Из плюсов — ... Не знаю. Не увидел я там плюсов. Разве что то, что на нем пишут хорошие плагины. Хотя, наверное, если бы вместо Пауна там был Брейнфак, писали бы на Брейнфаке, ибо, к сожалению, другой такой платформы еще нет и вряд ли будет, а плагинов написать хочется. Из минусов — сам язык. Отдаленно он напоминает JavaScript... Только в самом Джаваскрипте нет такого количества непонятных ограничений.

В (практически) любом языке эскейп-символ какой? Правильно, бэкслеш (\). Но нет, мы пойдем другим путем, сказали создатели Пауна, и выставили в качестве эскейпа символ ^. Объяснить это логичным путем или на трезвую голову, мне кажется, невозможно. Но, тем не менее, мне удалось написать два админ-стаффовских плагина. Первый — это отправка уведомлений администраторам на Джаббер, что их зовут (команда в чате — /admin какой-то-текст-админам) игроки. Второй — автобан на сутки за сообщение, посланное в чат, которое содержит "buy server" или ".co.il" (потому что это настоящий бич современности, каждый пятисотый игрок, по моим наблюдениям, начинает впаривать эту хуйню с израильским сайтом в чате). Сообщение до чата не доходит.

Пока полет нормальный. Мечтаю создать скрипт, переводящий программы с Питона на Паун. Или, может, стоит позаёбывать создателей AMX по поводу перехода с Пауна на Питон?