О блоге
Путевые DIFF-ы без практической ценности
Записи этого блога
Кто-нибудь использует в своей работе PECL bbcode? Если есть такие - отпишитесь. Во-первых отзывы интересуют, во-вторых - возможность тестирования пропатченной мной версии.
... или история одного дня =)
По причине аварии с интернетом в офисе решил попробовать NetBeans. Понравилось... что-то есть такое приятное, хотя вроде и phpEd всем устраивает. И решил было уже пнуть всех - а давайте перейдем на NetBeans. Еще привлекало то, что использует от xdebug для дебага - мы его используем в CLI версии, что бы покрытие мерять, а вот в CGI версии используется phpEd-ный дебагер. Но с пол-пинка xdebug не завелся, интернет не работал, так что отложил до сегодня. Сегодня стал разбираться... и кроме мата сл
Ну вот, пришлось вернуться к скинам =) Благо, не сильно поломали весь функционал. Попутно переводим все на смарти. Что бы сделать это плавно и незаметно - придумали следующее. Все классы шаблонов, которые генерит форум отнаследовали от нашего. В нем прописан магический вызов - если метода в классе нет, то срабатывает наш, инициализирует, если нужно, смарти и на основании имени класса и имени метода ищет шаблон .tpl. Т.е. теперь нам достаточно написать шаблон на смарти, положить его туда же, где
Умеет брать информацию как из базы (SQL запрос в конфиге с поддержкой выборки "пачками"), так и из внешней программы (ожидает простой XML). Индексация быстра. Индекс представляет собой набор сортированных словарей и не подразумевает изменения - только полное перестроение. Однако, можно построить много индексов и операция слияния индексов (операция накладная, но менее чем запрашивать все данные с нуля). Т.е. строим один индекс по базе, новые данные постоянно переиндексируем во второй индекс (дель
Интересное дело тут с лисой. Есть форма поиска, которая GET-ом передает слова на сервер. Так как страница в utf-8 все ок, уходит в utf, а адресная строка выклядит как /search/?q=тест. Но стоит поставить курсор в эту строку и нажать Enter - строка мигом перекодируется в urlencoded и самое противное в windows-1251 кодировке. При этом нада понимать, что реквест не несет в себе никакой информации о кодировке строки запроса. Что меня вообще ввело в шок, это в процессе экспериментов лиса перекодировал
А что думаете про такую вот штуку. newposts.php Т.е. причина была проста - поиск выключен, а стандартная схема "записать запрос в кеш, а потом его другим вызовом отобразить" не нравилась. В первую очередь из-за той каши (еще легко сказано), что творится в методе show этого класса поиска. Самое простое было выкусить все в отдельных класс, а потом идея уже развилась и в сторону кеширования, а почему бы и нет. Коленочный вариант, пока что - делался в пятницу за несколько часов =) Следущее что хоче
Тут оказалось, что в процессе оптимизации поломали подсчет гостей в форуме. Пришлось быстро написать реализацию алгоритма, описанного ниже. Представляю UPD: отрефакторили этот класс - по идее одолжен быть более понятный =) Перезалил
Чего никогда не стоит делать при работе с мемкешом 1. Быть уверенным, что там есть те данные, что мы положили. Мемкеш не гарантирует хранение данных. 2. Менять какие-то данные в структуре, записанной под одним ключом, т.е. операция вида get -> change -> set. Гарантированны коллизии. 3. Услышав слово "блокировки" реализовывать их для того, что бы предыдущий пункт работал. Блокировки - зло. 4. Хотеть получить список ключей. Это очень часто хочется получить, и с этим желанием нужно боротс
Наткнулся тут на одно красивое решение подсчета онлайн пользователей в мемкеше. Пишу.. ну, во многом, что бы самому не забыть. Итак, есть проблема - нужно считать уникальные сессии, которые были на сайте на последние 5 минут. Не, конечно, можно все это держать в каком-нить массиве, который постоянно гонять туда-сюда между скриптом и мемкешом, но это совершенно работать не будет, ибо объем данных большой (гонять долго... ну пользователей у нас очень много, ясно дело, иначе зачем вообще тогда замо
Посмотрев свой topicview.patch.txt понял, что решение - ацтой Смысл ацтоя в том, что гоняется туда-сюда целый массив, который может прилично распухнуть и привести к коллизиям, когда одновременно читается и пишется. Идея была переработана и отдана на реализацию Патча пока нет Идея в следующем: Как прежде, на просмотре пишем в кеш, на списке топиков - читаем из кеша и складываем, но - храним все не в массиве, а для каждого топика - свой ключ. Имеем проблему - как обновлять переодически кол-во п
Ковыряем сессии на предмет оптимизации производительности дабы подружить с мемкешем. Вот что наш разработчик мне показал 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
Предыдущее пофиксилось инициализацией редактора уже после вставления html куска, т.е. код инициализации был вынесен из подгружаемой части. Сейчас задумчиво разглядываю tinymce на предмет - а не прикрутить ли его к форуму. Наличие плагинов bbcode и noneditable (отключить редактирование цитат) делет его очень привлекательным. На другой стороне весов лень
Редактор, конечно, у нас пере...деланный. В общем, даже не сильно сам, сколь реализована была его аяксовая загрузка. Т.е. когда тыкаешь "ответить", то отдельной страницы у нас нет, отдельная страница - это маразм и фашизм ) В плавающий див мы грузим аяксом редактор (эдакая смесь HTML-я и жаваскрипта). Потом полученное с сервера благополучно делается $("#myId").html(request) и усе счастливы, jQuery выполняет жаваскрипт и все инициализируется. К слову, jQuery исполняет этот пришедший JS вовсе не е
Насчет выдачи в fcgi режиме - это может специфическое, но зачем выдавать 1.1 версию? А если запрос HTTP/1.0? Подробности в дифе.
Шаблоны в IPB - это насколько сильная, настолько запутанная с первого взгляда система. Когда-то они мне понравились, особо после всяких экспериментов с phpBB подобными форумами. Но время расставляет и двоеточия над ё и скобочки над й Пока делается кофе, расскажу чем же они нам так надоели. Шаблоны в базе - это может показаться удобным, особо для разработчиков форума, которые хотят дать возможность редактирования через админку. Да и администраторам форума где-то на хостинге - можно забыть, что т
Одной из задач, поставленной мне как проектировщику, было образно "а чтоб все не легло". Нагрузки. При разработке портала сразу закладывалось, что запросов будет много. Мы не экономили на ООП - стандартная MVС схема, все данные обернуты в объекты и т.д. и т.п., ибо экономия тут потом выльется в огромные потери по поддержке продукта. Мы не прикрывали кешем все подряд, но делали зарубки где это может понадобится. Нарисовалась такая схема... DB кешу отказать. Ибо его очень сложно поддерживать в акт
Впереди предстоит апгрейд до 2.3.4, и это заставляет вспомнить - как же это делать. Ясно, что любой встроенный апдейт нам смерти подобен. По-этому поступал я так. Берем 2 дистрибутива форума, строим большой diff =) Есть замечательная утилитка - splitdiff, которая разбивает этот diff на кучу маленьких - по одному на файл. По этой куче файлов я прохожусь в цикле делая patch на дерево форума в режиме --dry-run (т.е. тестовый, без внесения изменений) - те файлики, которые прошли без reject-ов, пуска
Так уж получилось, что проектировщик интерфейса - он же PM проекта. В общем, спорить о чем-то по дизайну было бы сложно, но, к счастью, это не часто приходится делать. Некоторые идеи заставляют задуматься в оценке глобальности изменений по форуму, но, ИМХО, понятия "нельзя сделать" не существует. Сделать можно все и сложность тут - сделать это правильно и красиво. Главная страница форума озадачила тем, что там 1. подфорумы выводятся по-разному (в каких-то категориях как обычно, строчками, а в ка
Предупреждения в инфижене недодуманы. И вроде додумать то чуточку осталось... ан нет. Приходится додумывать своими руками. А хочется не так много - привязка предупреждения к сообщению (бедным модераторам приходится наимать "Цитировать" и переносить сообщение руками в поле предупреждения) и вывод текста предупреждения в сообщении, что бы не лупили несколько модераторов из-за одного Единственное, что вызвало затруднение, это как брать текст предупреждения. Всегда думаешь о нагрузке и лишний джойн
Первой глобальной затеей по ковырянию кода и первой серьезной "боевой" проверкой разработчика нашего стала реализация множества аватаров. Думаю, очень многие пользуются ЖЖ, закачали себе туда аватаров и выбирают... от настроения, от смысла поста. Вот и мы(я) захотели такое - даем пользователю закачивать до N аватаров, и выбирать при создании сообщения - какой аватар он хочет. Возможно даже мод такой готовый есть, но тут уж... лучше пострадать из-за своих внутренних ошибок, чем из-за чужих совсе
Общались с оптимизаторами. Навеяло печаль по той работе, что придется делать с урлами - ибо даже без ЧПУ урлы ?showforum=9 и ?showforum=9&hehe - разные, а контент один, что черевато проблемами ранжирования. Усугубляется все это тем, что разработчик занимающийся форумом решил нас покинуть...
Давно еще, когда я начал рассматривать вариант выноса пользовательского контента за дерево форума, переменная в конфиге работала ахти как плохо - пришлось править кучу мест в коде и шаблонах, где она не использовалась. Фича эта необходимая когда форум планируется для работы более чем на одном сервере, а пользовательский контент - на расшаренных между ними дисках. Конечно, можно выложить весь форум на шаренный диск, но это повысит нагрузку на дисковую полку, тогда как локальная дисковая система с
Капча, это хорошо. Т.е. это плохо, но необходимо, а значит хорошо. Решил поменять стандартные капчи в инфижене. Появилась идея - возьмем словарь русских слов, уберем одну букву... и попросим ввести все слово Придумано - сделано... О, как реализованна капча в инфижене! Конечно же там нет единого кода, конешно же там вызовы генерации капчи и проверка онной идет во всех местах, где капча нужна. Интересно, в каком классе учились разработчики, когда писали это. Нет, конечно же оставлять такое нельзя