вторник, 27 июля 2010 г.

Алгоритм приближённого вычисления квадратного корня


#ifndef __fast_inv_sqrt_h__
#define __fast_inv_sqrt_h__

#include <cassert>
#include <stdint.h>


/**
* Fast approximation of the inverse square root
* (http://en.wikipedia.org/wiki/Fast_inverse_square_root)
*
* @param x
* 32-bit floating point (IEEE 754-2008)
* @return the approximated inverse square root of x
*/
inline float InvSqrt(float x) {
assert( sizeof(x) == 4 );
assert( x >= 0 );

union {
uint32_t i;
float y;
};

y = x;
i = 0x5f375a86 - (i >> 1);
/* Approximation step */

return y * (1.5f - 0.5f * x * y * y);
/* One step more of the Newton's method */
}

#endif /*_fast_inv_sqrt_h__*/

Об уязвимостях в приложениях

Виды уязвимостей приложений:
  • Уязвимости в правах доступа к приложению
  • Уязвимости в коде форматирования строк
  • Уязвимости при работе с общими ресурсами
  • Ошибки при вычислении размеров буферов
  • Ошибки в работе приложения при исчерпании внешних ресурсов или динамической памяти
  • Ошибки в работе приложения с внешними ресурсами или динамической памятью
Факторы усиливающие уязвимости:
  • Фиксированное расположение (layout) программы в памяти
  • Избыточные права доступа у приложения
Цели атак:
  • Внедрение новой функции в приложение
  • Нарушение работы приложения
  • Получение информации из приложения
  • Атака или подготовка атаки на иное приложение
Как правило, чтобы получить управление в коде приложения:
  • Перезаписывают стек
  • Перезаписывают управляющие секции

суббота, 24 июля 2010 г.

Требования к системному языку программирования

(навеяно http://apenwarr.ca/log/?m=201007#21)
  1. Реализация любой идеи на новом языке должна быть не сложнее её реализации на языке C
  2. Должная быть возможность напрямую вызывать подпрограммы на C и ASM
  3. Должны быть детерминированные конструкторы и деструкторы (RAII)
  4. Нужна поддержка таблиц виртуальных методов
  5. Не должно быть отдельных заголовочных файлах (import вместо include)
  6. Не должно быть динамической типизации
  7. Не должно быть встроенного в язык сборщика мусора
  8. Не должно быть встроенной в язык системы нитей исполнения
  9. Не должно быть намертво встроенной в язык стандартной библиотеки
  10. Исключения: либо управляемые, либо отсутствуют
  11. Сложные типы должны всегда передоваться внутрь функции по ссылке
  12. Синтаксис работы с указателями должен быть таким же как и синтаксис работы со ссылками
  13. Нужна поддержка преобразований типов (type casting) определяемых пользователями
  14. Нужна поддержка обобщенных типов
  15. Нужна поддержка анонимных функций
  16. Нужна поддержка перегрузки операторов

понедельник, 19 июля 2010 г.

О сочетаниях цветов

Код на jscript для проверки сочетания цветов на ``читабельность'':

function color_brightness(red, green, blue) {
return 0.299 * red + 0.587 * green + 0.114 * blue;
}

function color_is_good(bg_red, bg_green, bg_blue,
fg_red, fg_green, fg_blue) {
var brightness_diff = Math.abs(
color_brightness(bg_red, bg_green, bg_blue) -
color_brightness(fg_red, fg_green, fg_blue));
var color_dirr =
Math.abs(bg_red - fg_red) +
Math.abs(bg_green - fg_green) +
Math.abs(bg_blue - fg_blue);
return (brightness_diff > 0.490 && color_dirr > 1.961);
}

четверг, 1 июля 2010 г.

Задача на "правильную" запись

Дано множество:

и определена функция:

Определим следующее множество:

Для того, чтобы на этом множестве выполнялось следующее условие:

необходимо и достаточно, чтобы


Предполагается, что если эти утверждения переписать "правильно", то можно увидеть что-то!