Перейти к контенту

Как мы ломали

  • записи
    24
  • комментариев
    147
  • просмотров
    16 218

О блоге

Путевые DIFF-ы без практической ценности

Записи этого блога

BBCode

Кто-нибудь использует в своей работе PECL bbcode? Если есть такие - отпишитесь. Во-первых отзывы интересуют, во-вторых - возможность тестирования пропатченной мной версии.

MiksIr

MiksIr

NetBeans

По причине аварии с интернетом в офисе решил попробовать NetBeans. Понравилось... что-то есть такое приятное, хотя вроде и phpEd всем устраивает. И решил было уже пнуть всех - а давайте перейдем на NetBeans. Еще привлекало то, что использует от xdebug для дебага - мы его используем в CLI версии, что бы покрытие мерять, а вот в CGI версии используется phpEd-ный дебагер. Но с пол-пинка xdebug не завелся, интернет не работал, так что отложил до сегодня.   Сегодня стал разбираться... и кроме мата сл

MiksIr

MiksIr

Щаблоны 2

Ну вот, пришлось вернуться к скинам =) Благо, не сильно поломали весь функционал. Попутно переводим все на смарти. Что бы сделать это плавно и незаметно - придумали следующее. Все классы шаблонов, которые генерит форум отнаследовали от нашего. В нем прописан магический вызов - если метода в классе нет, то срабатывает наш, инициализирует, если нужно, смарти и на основании имени класса и имени метода ищет шаблон .tpl. Т.е. теперь нам достаточно написать шаблон на смарти, положить его туда же, где

MiksIr

MiksIr

Сфинкс

Умеет брать информацию как из базы (SQL запрос в конфиге с поддержкой выборки "пачками"), так и из внешней программы (ожидает простой XML). Индексация быстра. Индекс представляет собой набор сортированных словарей и не подразумевает изменения - только полное перестроение. Однако, можно построить много индексов и операция слияния индексов (операция накладная, но менее чем запрашивать все данные с нуля). Т.е. строим один индекс по базе, новые данные постоянно переиндексируем во второй индекс (дель

MiksIr

MiksIr

Противные кодировки

Интересное дело тут с лисой. Есть форма поиска, которая GET-ом передает слова на сервер. Так как страница в utf-8 все ок, уходит в utf, а адресная строка выклядит как /search/?q=тест. Но стоит поставить курсор в эту строку и нажать Enter - строка мигом перекодируется в urlencoded и самое противное в windows-1251 кодировке. При этом нада понимать, что реквест не несет в себе никакой информации о кодировке строки запроса. Что меня вообще ввело в шок, это в процессе экспериментов лиса перекодировал

MiksIr

MiksIr

Последние темы

А что думаете про такую вот штуку. newposts.php Т.е. причина была проста - поиск выключен, а стандартная схема "записать запрос в кеш, а потом его другим вызовом отобразить" не нравилась. В первую очередь из-за той каши (еще легко сказано), что творится в методе show этого класса поиска. Самое простое было выкусить все в отдельных класс, а потом идея уже развилась и в сторону кеширования, а почему бы и нет. Коленочный вариант, пока что - делался в пятницу за несколько часов =) Следущее что хоче

MiksIr

MiksIr

Считаем пользователей онлайн - 2

Тут оказалось, что в процессе оптимизации поломали подсчет гостей в форуме. Пришлось быстро написать реализацию алгоритма, описанного ниже. Представляю UPD: отрефакторили этот класс - по идее одолжен быть более понятный =) Перезалил

MiksIr

MiksIr

Используем мемкеш - паттерны и антипаттерны

Чего никогда не стоит делать при работе с мемкешом 1. Быть уверенным, что там есть те данные, что мы положили. Мемкеш не гарантирует хранение данных. 2. Менять какие-то данные в структуре, записанной под одним ключом, т.е. операция вида get -> change -> set. Гарантированны коллизии. 3. Услышав слово "блокировки" реализовывать их для того, что бы предыдущий пункт работал. Блокировки - зло. 4. Хотеть получить список ключей. Это очень часто хочется получить, и с этим желанием нужно боротс

MiksIr

MiksIr

Считаем пользователей онлайн

Наткнулся тут на одно красивое решение подсчета онлайн пользователей в мемкеше. Пишу.. ну, во многом, что бы самому не забыть. Итак, есть проблема - нужно считать уникальные сессии, которые были на сайте на последние 5 минут. Не, конечно, можно все это держать в каком-нить массиве, который постоянно гонять туда-сюда между скриптом и мемкешом, но это совершенно работать не будет, ибо объем данных большой (гонять долго... ну пользователей у нас очень много, ясно дело, иначе зачем вообще тогда замо

MiksIr

MiksIr

Нагрузки - ревизия

Посмотрев свой topicview.patch.txt понял, что решение - ацтой Смысл ацтоя в том, что гоняется туда-сюда целый массив, который может прилично распухнуть и привести к коллизиям, когда одновременно читается и пишется. Идея была переработана и отдана на реализацию Патча пока нет Идея в следующем: Как прежде, на просмотре пишем в кеш, на списке топиков - читаем из кеша и складываем, но - храним все не в массиве, а для каждого топика - свой ключ. Имеем проблему - как обновлять переодически кол-во п

MiksIr

MiksIr

Ковыряем сессии

Ковыряем сессии на предмет оптимизации производительности дабы подружить с мемкешем. Вот что наш разработчик мне показал if( $this->ipsclass->vars['match_ipaddress'] ) { //----------------------------------------- // Delete any old sessions with this users IP // addy that doesn't match our session ID. //----------------------------------------- $this->ipsclass->DB->simple_construct( array( 'delete' => 'sessions', 'where' => "ip_address='".$this->ipsclass->i

MiksIr

MiksIr

tinymce

Предыдущее пофиксилось инициализацией редактора уже после вставления html куска, т.е. код инициализации был вынесен из подгружаемой части. Сейчас задумчиво разглядываю tinymce на предмет - а не прикрутить ли его к форуму. Наличие плагинов bbcode и noneditable (отключить редактирование цитат) делет его очень привлекательным. На другой стороне весов лень

MiksIr

MiksIr

Интересный баг

Редактор, конечно, у нас пере...деланный. В общем, даже не сильно сам, сколь реализована была его аяксовая загрузка. Т.е. когда тыкаешь "ответить", то отдельной страницы у нас нет, отдельная страница - это маразм и фашизм ) В плавающий див мы грузим аяксом редактор (эдакая смесь HTML-я и жаваскрипта). Потом полученное с сервера благополучно делается $("#myId").html(request) и усе счастливы, jQuery выполняет жаваскрипт и все инициализируется. К слову, jQuery исполняет этот пришедший JS вовсе не е

MiksIr

MiksIr

Форум выключен

Насчет выдачи в fcgi режиме - это может специфическое, но зачем выдавать 1.1 версию? А если запрос HTTP/1.0? Подробности в дифе.

MiksIr

MiksIr

Щаблоны

Шаблоны в IPB - это насколько сильная, настолько запутанная с первого взгляда система. Когда-то они мне понравились, особо после всяких экспериментов с phpBB подобными форумами. Но время расставляет и двоеточия над ё и скобочки над й Пока делается кофе, расскажу чем же они нам так надоели. Шаблоны в базе - это может показаться удобным, особо для разработчиков форума, которые хотят дать возможность редактирования через админку. Да и администраторам форума где-то на хостинге - можно забыть, что т

MiksIr

MiksIr

Нагрузки

Одной из задач, поставленной мне как проектировщику, было образно "а чтоб все не легло". Нагрузки. При разработке портала сразу закладывалось, что запросов будет много. Мы не экономили на ООП - стандартная MVС схема, все данные обернуты в объекты и т.д. и т.п., ибо экономия тут потом выльется в огромные потери по поддержке продукта. Мы не прикрывали кешем все подряд, но делали зарубки где это может понадобится. Нарисовалась такая схема... DB кешу отказать. Ибо его очень сложно поддерживать в акт

MiksIr

MiksIr

Апгрейд

Впереди предстоит апгрейд до 2.3.4, и это заставляет вспомнить - как же это делать. Ясно, что любой встроенный апдейт нам смерти подобен. По-этому поступал я так. Берем 2 дистрибутива форума, строим большой diff =) Есть замечательная утилитка - splitdiff, которая разбивает этот diff на кучу маленьких - по одному на файл. По этой куче файлов я прохожусь в цикле делая patch на дерево форума в режиме --dry-run (т.е. тестовый, без внесения изменений) - те файлики, которые прошли без reject-ов, пуска

MiksIr

MiksIr

Дизайн vs Функционал

Так уж получилось, что проектировщик интерфейса - он же PM проекта. В общем, спорить о чем-то по дизайну было бы сложно, но, к счастью, это не часто приходится делать. Некоторые идеи заставляют задуматься в оценке глобальности изменений по форуму, но, ИМХО, понятия "нельзя сделать" не существует. Сделать можно все и сложность тут - сделать это правильно и красиво. Главная страница форума озадачила тем, что там 1. подфорумы выводятся по-разному (в каких-то категориях как обычно, строчками, а в ка

MiksIr

MiksIr

Предупреждения

Предупреждения в инфижене недодуманы. И вроде додумать то чуточку осталось... ан нет. Приходится додумывать своими руками. А хочется не так много - привязка предупреждения к сообщению (бедным модераторам приходится наимать "Цитировать" и переносить сообщение руками в поле предупреждения) и вывод текста предупреждения в сообщении, что бы не лупили несколько модераторов из-за одного Единственное, что вызвало затруднение, это как брать текст предупреждения. Всегда думаешь о нагрузке и лишний джойн

MiksIr

MiksIr

Аватары

Первой глобальной затеей по ковырянию кода и первой серьезной "боевой" проверкой разработчика нашего стала реализация множества аватаров. Думаю, очень многие пользуются ЖЖ, закачали себе туда аватаров и выбирают... от настроения, от смысла поста. Вот и мы(я) захотели такое - даем пользователю закачивать до N аватаров, и выбирать при создании сообщения - какой аватар он хочет. Возможно даже мод такой готовый есть, но тут уж... лучше пострадать из-за своих внутренних ошибок, чем из-за чужих совсе

MiksIr

MiksIr

Оптимизаторы

Общались с оптимизаторами. Навеяло печаль по той работе, что придется делать с урлами - ибо даже без ЧПУ урлы ?showforum=9 и ?showforum=9&hehe - разные, а контент один, что черевато проблемами ранжирования. Усугубляется все это тем, что разработчик занимающийся форумом решил нас покинуть...

MiksIr

MiksIr

Пути и нагрузки

Давно еще, когда я начал рассматривать вариант выноса пользовательского контента за дерево форума, переменная в конфиге работала ахти как плохо - пришлось править кучу мест в коде и шаблонах, где она не использовалась. Фича эта необходимая когда форум планируется для работы более чем на одном сервере, а пользовательский контент - на расшаренных между ними дисках. Конечно, можно выложить весь форум на шаренный диск, но это повысит нагрузку на дисковую полку, тогда как локальная дисковая система с

MiksIr

MiksIr

Капча

Капча, это хорошо. Т.е. это плохо, но необходимо, а значит хорошо. Решил поменять стандартные капчи в инфижене. Появилась идея - возьмем словарь русских слов, уберем одну букву... и попросим ввести все слово Придумано - сделано... О, как реализованна капча в инфижене! Конечно же там нет единого кода, конешно же там вызовы генерации капчи и проверка онной идет во всех местах, где капча нужна. Интересно, в каком классе учились разработчики, когда писали это. Нет, конечно же оставлять такое нельзя

MiksIr

MiksIr

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.