Сброс дискового кеша в Linux
При проведении различных тестов иногда бывает весьма полезно очистить дисковый кеш. Далее »
Автор: Wandering Soul, опубликовано в: Linux, комментариев: нетМай
2012
Доступ к закрытым свойствам класса в PHP
Иногда встречаются ситуации, когда нужно расширить функциональность класса сторонней библиотеки; при этом нужный класс реализован так, что вместо наследования проще переписать, ибо функциональность завязана на закрытых (private) свойствах класса, для которых он не предоставляет акцессоров.
Чтобы далеко не ходить за примером, можно посмотреть на реализацию работы с базой данных в Yii — если требуется что-то нестандартное и не предусмотренное разработчиками — придётся извращаться. Например, если нужно добавить поддержку SELECT … FOR UPDATE/SELECT … LOCK IN SHARE MODE (кстати, весьма нужный довесок для высоконагруженных сайтов с активной работой с базой данных), кажется вполне логичным унаследоваться от класса CDbCommand и добавить свои методы для организации блокировки и переопределить метод buildQuery. В теории это выглядит хорошо, но на практике имеем, что вся функциональность завязана на закрытое свойство CDbCommand::_q, в котором хранятся все параметры запроса. Кроме того, для поддержки этого хозяйства в Active Record придётся унаследоваться от CActiveRecord, а там такая же петрушка.
На правах лирического отступления: при всей моей любви к Yii, некоторые архитектурные решения выглядят весьма непродуманными и вызывают во мне любимый жест капитана Пикара: множественные косяки с закрытыми свойствами, проверки method_exists() идут вразрез с идеологией CComponent (например, использование mixin (behavior) как метода форматирования в класс, порождённый от CFormatter, закончится исключением), неудачное разбиение на методы, из-за которого наследование временами превращается в копипаст и т.д.
PHP — это не C++, поэтому антипаттерн Паблик Морозов (#define private public) здесь не пройдёт. К счастью, костылестроение в PHP поставлено на поток, поэтому решение всё же есть… Далее »
Май
2012
Отслеживание источника исключения в С++
Обобщённая версия статьи «Отслеживание источника исключения в Qt».
Решение проблемы отлова не пойманного исключения при помощи gdb — задача не из приятных, особенно при отладке многопоточных приложений. К счастью, есть и более простой способ. Далее »
Автор: Vladimir, опубликовано в: C/C++, комментариев: 1Апр
2012
Совмещение различных конфигураций сборок при использовании qmake
В продолжение темы одновременной сборки взаимно несовместимых конфигураций.
В предыдущей записи было показано, что qmake позволяет собирать одновременно взаимно несовместимые конфигурации, как-то: отладочная и релиз-версия приложения, статическая и динамическая версия библиотеки.
Тем не менее, без лишних телодвижений совместить несколько конфигураций сборок (например, отладочная и релиз-версия статической и динамической библиотеки) проблематично. Далее »
Автор: Wandering Soul, опубликовано в: Qt, комментариев: нетАпр
2012
Одновременная сборка статической и динамической библиотеки с qmake
Задача: заставить qmake генерировать статическую и динамическую библиотеку при использовании шаблона сборки lib. Далее »
Апр
2012
Отслеживание источника исключения в Qt
Если приложение (или сама библиотека Qt) бросает исключение, которое не обрабатывается приложением, исключение попадает в цикл обработки событий Qt (известный как event loop), который выводит сообщение наподобие:
Qt has caught an exception thrown from an event handler. Throwing
exceptions from an event handler is not supported in Qt. You must
reimplement QApplication::notify() and catch all exceptions there.
При использовании libstdc++ может быть выдана дополнительная диагностика:
terminate called after throwing an instance of ‘std::bad_alloc’
what(): std::bad_alloc
Далее »
Апр
2012
Undefined reference на специализацию шаблона статического поля
Столкнулся на работе с такой проблемой при написании расширения для QtScript: код вида Далее »
Автор: Wandering Soul, опубликовано в: C/C++, комментариев: 2Мар
2012
DropBox, Upstart и официальная Wiki
В официальной Wiki DropBox приведён рецепт запуска dropbox при старте системе с использованием Upstart:
start on runlevel 3
start on runlevel 4
start on runlevel 5
stop on shutdown
respawn
script
# Without next line DB does not sync non ASCII characters (ubuntu 10.04-x86_64, db 0.7.110)
export LANG=en_US.UTF-8
cd /home/dropbox
exec sudo -H -u dropbox ./.dropbox-dist/dropbox
end script
Тем не менее, если использовать данный рецепт на сервере (при условии, что на сервере X-сервер не используется), то работать не будет. Далее »
Автор: Wandering Soul, опубликовано в: Linux, комментариев: нетМар
2012
Исправление проблемы обхода хранителя экрана в X11
В X.Org Server 1.11 обнаружена уязвимость, позволяющая через манипуляции с клавиатурой обойти режим блокировки экрана и получить доступ к заблокированному рабочему окружению пользователя.
Подробности либо по ссылке выше, либо на OpenNet. Далее »
Автор: Vladimir, опубликовано в: Linux, Безопасность, комментариев: 9Янв
2012
Автоматическое добавление ссылки на источник при копировании текста с сайта
Идея: когда пользователь выделяет часть текста и копирует её в буфер обмена (например, чтобы выложить на своём сайте), автоматически добавлять к выделению ссылку на источник. Далее »
Автор: Vladimir, опубликовано в: JavaScript, комментариев: 25Янв
2012

Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.

