Wednesday, July 29, 2009

Software Transactional Memory

STM.NET
Круто.

Software Transactional Memory (STM.NET) is a mechanism for efficient isolation of shared state. The programmer demarcates a region of code as operating within a transaction that is “atomic” and “isolated” from other transacted code running concurrently.

Transactional memory is considered a promising technology by the academic community and is repeatedly brought up as a welcome technology for the upcoming wave of applications which scale on modern multi-core hardware. The goal is to be able to exploit concurrency by using components written by experts and consumed by application programmers who can then compose together these components using STM. Transactional memory provides an easy-to-use mechanism to do this safely.

STM is not a 1:1 lock replacement and provides more functionality than critical sections, reader-writer locks, and other traditional synchronization methods. This functionality has overhead; the hope is that the scalability, productivity, and deadlock freedom gained by this mechanism outweigh the degradation in serial performance.

This is an experimental release of the .NET Framework that allows C# programmers to try out this technology, specifically a particular implementation of STM. We are interested in your feedback on your experience using this programming model. Is it valuable and easy-to-use? Does it provide enough functionality? Are you willing to pay with serial performance losses to gain greater scalability? Our implementation is integrated with the framework and tools, it has been extended to provide coexistence with locks, interoperate with traditional transactional technologies, and safely work with existing code.




Ссылки:
Wiki
Хабра

Tuesday, July 28, 2009

Garbage collector for C and C++

Подсчет количества битов в байте или слове

Циклически сбрасывается крайний справа единичный бит исследуемого байта,
до тех пор, пока байт не станет равным 0.

Эффективность: 2 + 5*pop(x) команд, подходит для малозаполненных байтов.

private static int pop(byte x)
{
int n = 0;

while (x != 0)
{
n += 1;
x = (byte) (x & (x - 1));
}

return n;
}

Другой способ:
В слове циклически устанавливается крайний справа нулевой бит ( x = x | (x + 1)) до тех пор, пока во всех разрядах слова не оказываются единицы (то есть слово = -1).
После этого возвращается число 32 - n.

Третий способ:
Вычисляется сумма всех 32 битных слов, полученных в результате циклического сдвига слова влево на один разряд. Итоговая сумма равна значению pop(x) со знаком минус.

Вычисление модуля

( ( x >> 30 ) | 1 ) * x

Friday, July 10, 2009

USB Connection

Мониторинг подключения USB драйва.
Реализация через WMI.

Я нашел несколько способов.

1. Класс: Win32_PnPEntity, событие __InstanceCreationEvent
Event: "__InstanceCreationEvent"
Target: "TargetInstance ISA 'Win32_PnPEntity'"
2.Класс: Win32_LogicalDisk, событие __InstanceCreationEvent
Event: "__InstanceCreationEvent"
Target: "TargetInstance ISA 'Win32_LogicalDisk'"

3.Класс: Win32_Volume, событие __InstanceCreationEvent

Event: "__InstanceCreationEvent"
Target: "TargetInstance ISA 'Win32_Volume'"

(Последний класс недопустим на системах от XP и ниже)

Tuesday, July 7, 2009

Security

Из разговора с коллегой, памятка.

1. Алгоритм Диффи - Хеллмана
http://en.wikipedia.org/wiki/Diffie-Hellman_key_exchange
2. И все, что касается CISSP/SSCP, сертификация в области безопасности.
3. Сайты InsidePro - rainbow таблицы, генерация хешей, и прочее, securitylab - общая информация по уязвимостям.

Friday, July 3, 2009

Voxel, Воксельная графика

Читая блог по анонимным функциям Objective-C одного канадского программиста, наткнулся на его тезисы в университете по визуализации 3D потоков. Стал с удовольствием читать, тем более что, в далеком 2002 году на первой работе коллеги занимались как раз визуализацией взрывной волны, проходящей по всем техническим помещениям АЭС, после насыщения атмосферы помещений водородом и последующей детонации. Но там просто тупо происходил объемный расчет по плотности волны по времени (целыми днями), и, кажется, распределения концентрации водорода, а потом из этих данных воссоздавался ролик.
Интересные тезисы, начал копать по поводу воксельной графики, но нашел информацию более, чем скудную, практически ничего по поводу реализации, лишь только общие детали.
Кое-какая информация: CiteSeerX, CodeNet, Здесь и в Wiki есть скудное описание. Литературы тоже никакой нет. Реализованы некоторые элементы в известных игрушках, есть пара программистов из Екатеринбурга, которые занимаются именно этой технологией. Есть теориетические статьи на западе, больше инфы никакой нет.

NoSQL

Очень примечательное явление: Anti-database movement gains steam
По ссылке описаны мотивы и решения на основе которых разработчики уходят от принятых стандартов: Hadoop, Voldemort, Dynomite, BigTable, HyperTable

SciDb:
http://www.scidb.org

Membase:

Redis:
Redis is an open source, advanced key-value store. 
It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.

Others:
http://www.kobrix.com/hgdb.jsp
http://infogrid.org
http://opensource.plurk.com/LightCloud

IndexDB for offline Web applications:
http://msdn.microsoft.com/en-us/scriptjunkie/gg679063.aspx

Foundry:
http://degizmo.com

Powered by Blogger.