понедельник, 22 ноября 2010 г.

Числа, которые полезно знать
















Обращение к кэшу L10.5 нс
Ошибка при предсказании условного перехода5 нс
Обращение к кэшу L27 нс
Открытие/закрытие мьютекса25 нс
Обращение к памяти100 нс
Сжатие 1 Кб быстрым алгоритмом3,000 нс
Пересылка 2Кб по сети со скоростью 1 Гб/с20,000 нс
Чтение 1 Мб последовательно из главной памяти250,000 нс
Передача сообщения туда/обратно в одном дата-центре500,000 нс
Произвольный доступ к жёсткому диску10,000,000 нс
Чтение 1 Мб последовательно с жёсткого диска20,000,000 нс
Передача пакета из Калифорнии в Нидерланды и обратно150,000,000 нс


Первоисточник: Google: Designs, Lessons and Advice from Building Large Distributed Systems

понедельник, 15 ноября 2010 г.

Перешёл на rxvt-unicode

Мне очень нравится настройки gnome-terminal в ubuntu. Но сам эмулятор терминал мне не очень нравится. Решил мигрировать на rxvt-unicode.

Пересобрал последнюю версию из репозатория:
$ cvs -z3 -d :pserver:anonymous@cvs.schmorp.de/schmorpforge co rxvt-unicode
$ cd rxvt-unicode
$ ./configure ./configure --enable-everything --prefix=$HOME/slash
$ make -j7 install


Прописал следующие настроки:
!! ~/.Xdefaults

!! Terminal name
!! FIXME: Enabled bold font for Midnight commander
URxvt*termName: rxvt

!! Minor setups
URxvt*scrollBar: False
URxvt*saveLines: 10000

!! Select fonts
URxvt*font: xft:Monospace:size=10:style=regular:antialias=True:hinting=True
URxvt*boldFont: xft:Monospace:size=10:style=bold:antialias=True:hinting=True
URxvt*letterSpace: -2

!! Foreground and background colours
URxvt*background: #FFFFDD
URxvt*foreground: #000000

!! Colour palette schema: Tango
URxvt.color0 : #000000
URxvt.color8 : #555753

URxvt.color1 : #CC0000
URxvt.color9 : #EF2929

URxvt.color2 : #4E9A06
URxvt.color10 : #8AE234

URxvt.color3 : #C4A000
URxvt.color11 : #FCE94F

URxvt.color4 : #3465A4
URxvt.color12 : #729FCF

URxvt.color5 : #75507B
URxvt.color13 : #AD7FA8

URxvt.color6 : #06989A
URxvt.color14 : #34E2E2

URxvt.color7 : #D3D7CF
URxvt.color15 : #EEEEEC


Пока нравится ;)

четверг, 5 августа 2010 г.

Из книги "Вы, конечно, шутите, мистер Фейнман!"

Главный принцип (науки, примечание моё) -- вы не должны обманывать себя. Обмануть себя проще всего. Поэтому вы должны быть очень осторожными. И когда вы не обманываете себя, то становится легко не обманывать других учёных. Для этого уже достаточно обычной частности.

The first principle is that you must not fool yourself -- and you are easiest person to fool. So you have to be very careful about that. After you've not fooled yourself, it's easy not to fool other scientists. You just have to be honest in a conventional way after that.

вторник, 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. Нужна поддержка перегрузки операторов