Сброс дискового кеша в Linux

При проведении различных тестов иногда бывает весьма полезно очистить дисковый кеш. Далее »

Автор: , опубликовано в: Linux, комментариев: нет
19
Май
2012

Доступ к закрытым свойствам класса в PHP

Иногда встречаются ситуации, когда нужно расширить функциональность класса сторонней библиотеки; при этом нужный класс реализован так, что вместо наследования проще переписать, ибо функциональность завязана на закрытых (private) свойствах класса, для которых он не предоставляет акцессоров.

Чтобы далеко не ходить за примером, можно посмотреть на реализацию работы с базой данных в  — если требуется что-то нестандартное и не предусмотренное разработчиками — придётся извращаться. Например, если нужно добавить поддержку SELECT … FOR UPDATE/SELECTLOCK IN SHARE MODE (кстати, весьма нужный довесок для высоконагруженных сайтов с активной работой с базой данных), кажется вполне логичным унаследоваться от класса CDbCommand и добавить свои методы для организации блокировки и переопределить метод buildQuery. В теории это выглядит хорошо, но на практике имеем, что вся функциональность завязана на закрытое свойство CDbCommand::_q, в котором хранятся все параметры запроса. Кроме того, для поддержки этого хозяйства в Active Record придётся унаследоваться от CActiveRecord, а там такая же петрушка.

На правах лирического отступления: при всей моей любви к Yii, некоторые архитектурные решения выглядят весьма непродуманными и вызывают во мне любимый жест капитана Пикара: множественные косяки с закрытыми свойствами, проверки method_exists() идут вразрез с идеологией CComponent (например, использование mixin (behavior) как метода форматирования в класс, порождённый от CFormatter, закончится исключением), неудачное разбиение на методы, из-за которого наследование временами превращается в копипаст и т.д.

 — это не C++, поэтому антипаттерн Паблик Морозов (#define private public) здесь не пройдёт. К счастью, костылестроение в PHP поставлено на поток, поэтому решение всё же есть… Далее »

Автор: , опубликовано в: PHP, комментариев: нет
14
Май
2012

Отслеживание источника исключения в С++

Обобщённая версия статьи «Отслеживание источника исключения в Qt».

Решение проблемы отлова не пойманного исключения при помощи gdb — задача не из приятных, особенно при отладке многопоточных приложений. К счастью, есть и более простой способ. Далее »

Автор: , опубликовано в: C/C++, комментариев: 1
30
Апр
2012

Совмещение различных конфигураций сборок при использовании qmake

В продолжение темы одновременной сборки взаимно несовместимых конфигураций.

В предыдущей записи было показано, что позволяет собирать одновременно взаимно несовместимые конфигурации, как-то: отладочная и релиз-версия приложения, статическая и динамическая версия библиотеки.

Тем не менее, без лишних телодвижений совместить несколько конфигураций сборок (например, отладочная и релиз-версия статической и динамической библиотеки) проблематично. Далее »

Автор: , опубликовано в: Qt, комментариев: нет
28
Апр
2012

Одновременная сборка статической и динамической библиотеки с qmake

Задача: заставить генерировать статическую и динамическую библиотеку при использовании шаблона сборки lib. Далее »

Автор: , опубликовано в: Qt, комментариев: 1
22
Апр
2012

Отслеживание источника исключения в 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

Далее »

Автор: , опубликовано в: Qt, комментариев: 1
13
Апр
2012

Undefined reference на специализацию шаблона статического поля

Столкнулся на работе с такой проблемой при написании расширения для QtScript: код вида Далее »

Автор: , опубликовано в: C/C++, комментариев: 2
31
Мар
2012

DropBox, Upstart и официальная Wiki

В официальной Wiki приведён рецепт запуска dropbox при старте системе с использованием :

[-]
View Code Text
start on runlevel 2
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-сервер не используется), то работать не будет. Далее »

Автор: , опубликовано в: Linux, комментариев: нет
31
Мар
2012

Исправление проблемы обхода хранителя экрана в X11

В X.Org Server 1.11 обнаружена уязвимость, позволяющая через манипуляции с клавиатурой обойти режим блокировки экрана и получить доступ к заблокированному рабочему окружению пользователя.

Подробности либо по ссылке выше, либо на OpenNet. Далее »

Автор: , опубликовано в: Linux, Безопасность, комментариев: 9
19
Янв
2012

Автоматическое добавление ссылки на источник при копировании текста с сайта

Идея: когда пользователь выделяет часть текста и копирует её в буфер обмена (например, чтобы выложить на своём сайте), автоматически добавлять к выделению ссылку на источник. Далее »

Автор: , опубликовано в: JavaScript, комментариев: 25
14
Янв
2012