Последовательность инициализации и сброса в расширениях PHP
Я сейчас занимаюсь написанием расширения PHP, которое меняет UID/EUID (а также GID/EGID) процесса PHP-интерпретатора на UID/GID владельца DocumentRoot сайта. При этом по замыслу расширение должно отключаться, если SAPI не используется (например, запущена CLI-версия интерпретатора).
Для этой задачи оказалось важным знать точную последовательность инициализации и финализации. Далее »
Автор: Vladimir, опубликовано в: C/C++, PHP, комментариев: нетАвг
2009
GCC: освобождение ресурсов для ленивых
Одной из, скажем так, «нетрадиционных» возможностей, которые предоставляет GCC, являются атрибуты типов, переменных и функций.
Я хочу рассказать об одном из них — а именно, отвечающем за удаление использованных ресурсов. Далее »
Автор: Vladimir, опубликовано в: C/C++, комментариев: 2Июн
2009
PHP: зависимости времени выполнения между расширениями
Так (как, кстати, рекомендует Sara Golemon) нельзя:
static zend_module_dep php_afs_depencies[] ={
ZEND_MODULE_REQUIRED("krb5");
{NULL,NULL,NULL}
}
#endif
Потому что даже не скомпилируется, если с ZEND_MODULE_API_NO (не) повезёт. Далее »
Май
2009
О пользе избыточной инициализации, или, В исходный код смотреть вредно
То, что данные нужно инициализировать перед использованием, знают все. Но иногда правильная инициализация — хитрая штука. Я с этим столкнулся, когда писал расширение для PHP, работающее с Voxel Hosting API.
Одна из проблем PHP — плохая документация (отсутствие таковой) по внутреннему API. А из кода Zend Engine не всегда всё однозначно ясно, чо временами приводит к очень милым ошибкам вида «фиг ты меня найдешь» (смягчено из соображений цензуры).
Об одной из таких особенностей я хочу рассказать. Далее »
Автор: Vladimir, опубликовано в: C/C++, комментариев: нетМай
2009
Параллельная версия генерации и проверки подписи по алгоритму DSA
DSA — алгоритм для создания и проверки электронной подписи с использованием открытого ключа, основанный на вычислительной сложности взятия логарифмов в конечных полях.
Алгоритмы, использующие «большие числа» — всегда хорошие кандидаты на распараллеливание. Дело в том, что даже при современной мощности процессоров многие задачи являются довольно сложными с вычислительной точки зрения. Хотя криптографические алгоритмы, как правило, очень тяжело поддаются распараллеливанию (например, когда значение, вычисленное на предыдущем шаге алгоритма, используется на текущем шаге), чисто математические задачи все же дают определённый простор для распараллеливания.
В данной статье рассмотрим возможность распараллеливания алгоритма DSA. Далее »
Автор: Vladimir, опубликовано в: C/C++, OpenMP, Безопасность, комментариев: 1Май
2009
Полиморфизм времени компиляции без использования виртуальных функций
Рассмотрим такой фрагмент кода:
struct A {
A() {};
~A() { ::std::cout < < "A::~A()\n"; }
};
struct B : public A {
B() {};
~B() { ::std::cout << "B::~B()\n"; }
};
int main(void)
{
{
const A& a = B();
}
return 0;
}
Апр
2009
И снова о простых числах Софи Жермен
Год назад я писал о генерации простых чисел Софи Жермен.
Вкратце напомню: p — простое число Софи Жермен, если q = 2p+1, тоже простое число. Простые числа Софи Жермен применяются в криптографии (в частности, в протоколе обмена ключами Диффи–Хеллмана–Меркле). Далее »
Автор: Vladimir, опубликовано в: C/C++, комментариев: 4Апр
2009
C или C++?
Задача: программа должна вывести строку «С++», если скомпилирована на С++ и «С», если на С. Далее »
Автор: Vladimir, опубликовано в: C/C++, комментариев: 3Апр
2009
Сколько будет i++ + ++i?
Вопрос для собеседования на вакансию C/C++-программиста:
int i = 5, j = i++ + ++i; – чему равно i и j?
Ответ вида «За такое нужно руки отрывать», не подходит, ибо автор вопроса считает, что знает правильный ответ — i=7, j=12. Но так ли это? Далее »
Автор: Vladimir, опубликовано в: C/C++, комментариев: 5Апр
2009
Распараллеливать или не распараллеливать — вот в чём вопрос
OpenMP — мощная технология, позволяющая значительно повысить быстродействие приложения без переработки его архитектуры. Как и в случае с любой другой мощной технологией, знать, когда нужно её использовать не менее важно, чем уметь с этой технологией работать. В данной статье мы попытаемся показать, что распараллеливание — не панацея от всех бед, и неправильное его использование не только не улучшает производительность приложения, но и может привести к проблемам. Мы постараемся рассмотреть реализацию OpenMP на низком уровне, чтобы оценить потери производительности, связанные с издержками на управление потоками и внутреннюю синхронизацию. В конце статьи будут даны некоторые практические рекомендации по использованию OpenMP. Далее »
Автор: Vladimir, опубликовано в: OpenMP, комментариев: 1Апр
2009

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

