среда, 31 августа 2011 г.

задача компилятора

а вот например нам тут говорят, что поддержка всяких новомодных наборов инструкций современных камней - задача исключительно компилятора

Думаю что это очень опасное заблуждение - компилятор в большинстве случаев не может оптимизировать даже куда более простые конструкции. Возьмем для примера библиотеку хешей FEHASHMAC и посмотрим какой код генерируется для хеша blake. Мой выбор пал на fehashmac например потому что она написана на plain C, генерация кода для которого намного проще чем для C++

Как это в open-source принято под windows на visual studio она не собирается. Если вас испугали чуть более 600 ошибок при компиляции - никогда вам не удастся приспособить open-source для чего-нть полезного, бгг. Ошибки впрочем все практически одинаковы и легко фиксятся за пол-часа примерно

Рассмотрим например такую операцию как конвертацию dword из big-endian в little-endian. Традиционно такой код пишут примерно так (файл include/blake_opt32.h):

#define U8TO32_BE(p) \
  (((u32)((p)[0]) << 24) | \
   ((u32)((p)[1]) << 16) | \
   ((u32)((p)[2]) <<  8) | \
   ((u32)((p)[3])      ))

А теперь посмотрим что нам сгенерировали компиляторы (смотреть проще всего в самом начале ф-ции compress32)

хабр все

пишет нам например нечеловеческим голосом
QRATOR HTTP 500 - Oops, something went terribly wrong. Try again.
QRATOR, ога, мы все понели. Не выдержал хабраэффекта™, бгг

И чтоб два раза не вставать - нас коварно разоблачили:
является патологическим фанатом перла
my ass, на чем еще можно скрипты писать в наше тяжелое время ? питон не предлагать, бгг

вторник, 30 августа 2011 г.

python 3

а вот например поскольку мне тут в последнее время приходится править разнообразные скрипты на питоне, решил внятно сформулировать, почему писон мне активно не нравится

Задумка в принципе неплоха - ф-ции как первокласные объекты, множественное наследование (которое впрочем все равно правильно умеет использовать хорошо если один программист из ста), наличие исключений и все такое. Дьявол впрочем как обычно кроется в деталях
  1. Использование отступов как элемент синтаксиса. Не надо мне заливать про то, что это несерьезная предъява в наше тяжелое время окончательно победивших IDE. Я например большую часть времени провожу в windbg far, и там эта фича дико раздражает каждую минуту. В python 3 для усугубления проблемы еще и табуляция была предана анафеме. Так что программиста на питоне можно безошибочно распознать по стертым в пыль кнопкам del & space, бгг
  2. С отказом от префикса типа переменной (как в perl - $,@,%) их типы приходится тупо запоминать. И снова здравствуй, проклятая венгерская нотация
  3. Клозуры ни разу не первокласные объекты. Например без ипользования nonlocal значение переменных во внешних ф-циях изменять нельзя ! По моему это уже не совсем клозуры. По крайней мере совершенно элементарные примеры из higher-order perl без мата, отладки и напильника не переносятся. Бедные студенты MIT, как же они теперь осилят курс SICP без антидепрессантов
  4. переход на python 3 по моему нескромному мнению не дал в плане удобства практически ничего - ну привели всякие внутренние методы к единообразному виду, range теперь ведет себя как xrange и все остальное - сущие мелочи. Зачем было полностью отказываться от обратной совместимости ? Полагаю исключительно в силу врожденной злобности автора
  5. С другой стороны вот за такое например
    В Python 3, при одинаковой близости к двум кратным значениям, округление будет выполнено до ближайшего четного кратного (например, значение 0.5 будет округлено до 0.0,  а значение  1.5 – до  2.0). Эта особенность представляет серьезную проблему переноса математических программ на Python 3.
     в нормальном обществе принято молча бить канделябром
  6. Исключения часто используются не по делу и даже встроенными ф-циями. Что хуже всего - нет никакого механизма узнать, какие именно исключения может выкинуть вызов ф-ции, так что написание долгоиграющих программ становится многословным и параноидальным занятием. Я не понимаю что мешало сделать аннотацию всех возможных типов исключений функции, как это сделано в java например
  7. в python 3 возможность перезапустить модуль с диска выпилена (ф-ции reload больше нету). Соотв-но невозможно писать всяких долгоживущих демонов, поведение которых должно время от времени меняться в полете
Есс-но это далеко не полный список претензий. Если мне не лень будет - допишу еще

Резюме - не взлетит. Отъест некоторую долю у php например, но в силу врожденной злобности и нестабильности психики автора никаких серьезных вещей на питоне делать строго не рекомендуется

воскресенье, 28 августа 2011 г.

botan vs crypto++

а вот например собрал давеча на vs2010 под 64битную windows7 две криптолибы с целью померить их производительность и победителя заюзать во всяких своих прожектах

Сборка

Как это в open-source принято, без напильника военного образца ни одна либа из коробки под windows не собирается

botan 1.10.1

Например поскольку у меня установлен python 3.2.1, нужно в configure.py заменить все конструкции вида
except OSError, e: на except OSError as e:
после чего под администратором (иначе оно не может симлинки создать) запустить python configure.py --enable-sse2 --enable-ssse3

crypto++ 5.6.1

Отчего-то после конвертации их студийного проекта не подцепились два файла на asm. Можно было заморочиться и сделать все как положено, но поскольку я ленив - достаточно запустить ml64 вручную и получившиеся .obj файлы добавить в нужные проекты

суббота, 27 августа 2011 г.

чтиво на выходные

гражданину было не лень разобрать до винтиков MS11-058
и про MS11-034 & MS11-054 еще тут

Art of Concurrency

я канешна давно забыл закон Ома все те крайне немногочисленные алгоритмы, которым меня пытались научить во времена молодости царя гороха, но есть мнение, что алгоритм Блюма-Флойда-Пратта-Ривеста-Тарьяна реализован в главе 6 дико неоптимально. Например совершенно непонятно зачем выделять массив целых чисел markS чтобы положить туда флаг принадлежности к множеству. Меня например также учили, что выделение памяти достаточно дорогая операция и в данном случае можно было бы обойтись без нее, переписав функцию ArrayPack без использования этого массива с парой лишних сравнений для каждого элемента. Кроме того, выделенная память нигде не освобождается.
Что еще угарнее - название использованного алгоритма так и не приводится в книжке. Пребываю в легком недоумении

Update: а реализация барьеров в главе 7 совершенно безобразна. Вместо того чтобы сначала взвести все переменные и только потом вызывать pthread_cond_broadcast, гражданин вводит лишнюю сущность color. Только это не работает
Предположим что после вызова pthread_cond_broadcast текущий поток вытесняется и один из проснувшихся потоков повторно входит в барьер, уменьшая значение счетчика (который становится -1). Поток соотв-но встает на pthread_cond_wait. Затем исходный поток оживает, сбрасывает count в numThreads и идет по своим делам. Итого - один поток потерялся навсегда и
все последующие потоки будут тупить на его реализации барьера вечно
И еще было бы неплохо объявить поле numThreads в структуре pth_barrier_t как volatile, а то малоличо

четверг, 25 августа 2011 г.

crypto lib with avx

а вот скожите мне - есть ли в природе крипто-либы, позволяющие утилизировать AVX ?
я тут давеча собрал botan например - он умеет только ssse3
OpenSSL также имеет для некоторых алгоритмов вставки на asm, но они не первой свежести (2005-2007 годов и в основном под 586 & x86_64, что является весьма размытым понятием в наше время)
неужто все авторы opensource нищеброды никто не озаботился до сих пор поддержкой AVX ?

вторник, 23 августа 2011 г.

wincheck rc3

скачать
Changelog:
  • добавлен простенький рекурсивный анализатор установленных хуков. Не эмулятор, потому ловит весьма органиченное подмножество. Может быть отключен посредством опции -ha
  • добавлена возможность параллельной проверки процессов на нескольких потоках. Число потоков задается опцией -p и в любом случае не будет превышать количество физических камней на машине. Результаты впрочем местами посредственные
  • добавлено подавление msg box в случае возникновения всяких ошибок. Отчего-то проявлялась данная бага исключительно на 32битной ws2008
  • ну и еще по мелочи всякое исправлено
В сущности у меня кончилась фантазия я дописал почти все что знал хотел, так что осталось выловить баги и можно будет релизить по взрослому например. Учитывая размер программы - багов в ней должно быть over 9000 не менее 800 примерно, бгг

ололо

пациент сегодня на редкость самокритичен:
Берётся абсолютно ординарное явление, ничем не выделяющееся из прочего ежедневного «вирусного шума» – и на этой заварке делается очередная оглушительная пиар-история
если кто не знал забыл например - это тот самый человек, который упорно держит у себя на довольствии личностей типа гостева, совершенно любой комментарий которого в сми можно пересказать как
ехал гостев через гостев
видит гостев - гостев гостев !

понедельник, 22 августа 2011 г.

хвастаюсь

а вот например начитавшись в выходные The Art of Concurrency решил давеча переделать несколько проверку процессов в wincheck. А именно - раскидать проверки каждого процесса (благо они практически параллельны по природе) на столько потоков, сколько на машине есть камней

Итоги такие:
+ 13 Kb исходников (главным образом самодельный диспетчер заданий). Cинхронизация - пришлось добавить ровно 3 critical_section
.exe прибавил 8Kb в размере (64битный 12Kb)
На 64битной машине с двумя камнями и кучей свободной памяти (чтобы cache managerу хватило места) ускорение практически линейно: на одном камне работает 8.2 секунд, на двух 4.6 (средние числа по результатам 5 запусков)
На 32битной машине с адово жрущими память thunderbird & firefox и тоже двумя камнями уже значительно хуже - 16 секунд против 10.8

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

А вот например результаты работы на 8 камнях corei7 под w7 64bit:
1 поток - 48.2 секунды
2 - 22.9
3 - 17.2
4 - 14.9
5 - 12.9
6 - 11.8
7 - 11.3
8 - 11.0
Явно видно что более 5 одновременно работающих потоков уперлись в гонку за монопольный ресурс. И это наверняка не диск, потому что оно читает практически одни и те же файлы, которые должны себе спокойно лежать в cache manager

Update: результаты на 4х головом AMD Phenom X4 9850:
1 поток - 12.9 секунды
2 - 7.0
3 - 4.6
4 - 4.0

воскресенье, 21 августа 2011 г.

hp R.I.P.

говорят
это все наверняка потому что буквально месяц назад я вместо hp pavilion 6153er приобрел asus, бгг

суббота, 20 августа 2011 г.

colobot

а вот например в далеком 2001 году была такая дико угарная игрушка, которая программировалась
И вот полез я давеча в инторнет искать, появилось ли чо-нть с тех пор аналогичное для обучения детей программированию. И вы таки мне не поверите - нифига не нашел (кроме мрачной книжки Land of Lisp. Кому в 21 веке сдались всякие текстовые игры ?)
Неужели и вправду все так грустно ? Ведь угарнейшая тема на самом деле - всякие обучалки программированию в виде программируемых игрушек

Update: грязный хак с применением внешнего скрипта, но вполне рабочий.

четверг, 18 августа 2011 г.

API Design for C++

вот например дочитал давеча subj
Если бы автор был честен, то книжка была бы крайне короткой - на пару примерно таких предложений:
Application Binary Interface in C++ is compiler specific. So C++ API is just myth
после чего, если ему не лень, мог бы написать другую книжку - например How to stop using classes, templates and exceptions and start write true reusable code API desing for plain C

А так получился анальный цирк с злобными клованами - как это дырявое корыто выдать за первоклассный круизный лайнер хотя бы издали. Все описанные нехитрые приемы впрочем  знакомы любому совершенно программисту, страдающему от использования C++ хотя бы пару лет. Разве что глава 11 про scripting может дать чо-нть новое и полезное

Отвратительно

среда, 17 августа 2011 г.

призрак НИИ Радиофизики

до сих пор стучит в его сердце
Ожидаем потока резюме из тоталитарной секты Спасателей Вселенной™ от людей, которым не хочется ездить на работу в пампасы у мкада, бгг

вторник, 16 августа 2011 г.

линуксофашизм

а вот еще к предыдущему подумалось - если некто пишет open-source прогу, которая либо вовсе не работает на машинах 84.8% пользователей или жрет ресурсы - то это просто линуксофашизм

Update: нас тут упрекают что я от open-source слишком много хочу и типа никто тебе не обязан. А вот нифига граждане - вся идеология линуксофашизма основана на том что вот тебе сорцы и делай сам. Соотв-но они протягивают свои костлявые вампирские когти на мое время, мозги и электричество. Хотя совершенно очевидно что из их говна конфетку сделать невозможно в принципе

epic fail

от вашего open-source нужно держаться как можно дальше

Вот например давеча захотел я собрать perl binding для qt4. Сборка qt4 сама по себе - адово долгое и ресурсоемкое занятие. Я например тупой не понимаю, как библиотека для красивых кнопачек может собираться на неслабой машине целых 7 часов 23 минуты, при этом временами утилизируя все восемь камней по полной:
Но самый epic fail - binding не собирается. Ответ автора:
I've also been unsuccessful getting PerlQt to compile on Windows so far.  I started to work on it a while ago, but got stuck at one point
Переведя на доступный гопникам язык - perl for qt4 под виндой не существует, никогда не существовал и скорее всего никогда существовать не будет

Open-source - говно, не работает и впустую жрет ресурсы. Не работает, впустую жрет ресурсы и говно. Не работает, говно и впустую жрет ресурсы. Впустую жрет ресурсы, говно и не работает

Я неуклонно стервенею с каждым разом

воскресенье, 14 августа 2011 г.

code coverage analysis tools

вырипал из книжки API design for C++ (книжка впрочем так себе - как дочитаю - напишу пару ласковых) например:
• Bullseye Coverage (http://www.bullseye.com/). This coverage tool, from Bullseye Testing Technology, provides function as well as condition/decision coverage, to give you a range of coverage precision. It offers features such as covering system-level and kernel mode code, merging results from distributed testing, and integration with Microsoft Visual Studio. It also gives you the ability to exclude certain portions of your code from analysis.Bullseye is a mature product that has support for a wide range of platforms and compilers.
• Rational PureCoverage (http://www.rational.com/). This code coverage analysis tool is sold as
part of the PurifyPlus package from IBM. It can report coverage at executable, library, file, function, block, and line levels.PureCoverage can accumulate coverage over multiple runs and merge data from different programs that share the same source code. It offers both graphical and textual output to let you explore its results.
• Intel Code-CoverageTool (http://www.intel.com/). This tool is included with Intel compilers and runs on instrumentation files produced by those compilers. It provides function and basic block coverage and can restrict analysis to only those modules of interest. It also supports differential coverage, that is, comparing the output of one run against another run.The Code-Coverage Tool runs on Intel processors under Windows or Linux.
• Gcov (http://gcc.gnu.org/onlinedocs/gcc/Gcov.html). This test coverage program is part of
the open-source GNU GCC compiler collection. It operates on code generated by
-fprofile-arcs and -ftest-coverage options.Gcov provides function, line, and branch code coverage. It outputs its report in a textual format; however, the accompanying lcov script
can be used to output results as an HTML report

суббота, 13 августа 2011 г.

c++11

например
As of 12 August 2011, the C++0x specification has been approved by the ISO
Почитать чтоли чо они туда насували всей психиатрической клиникой
И сколько времени потребуется производителям компиляторов для его полной поддержки ?

четверг, 11 августа 2011 г.

т-щ майор

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

среда, 10 августа 2011 г.

wincheck rc2

Скачать
Changelog:
  • добавлена опция -kopts для просмотра структур CmControlVector
  • добавлена опция -shutntfy для просмотра списка зарегистрированных через IoRegisterShutdownNotification & IoRegisterLastChanceShutdownNotification устройств и их драйверов
  • для проверки процессов добавлена опция -traces для просмотра EventCallbacks, зарегистрированных с помощью ф-ции SetTraceCallback
  • сделана полноценная поддержка vista sp1 (например под ней неверно показывались всякие структуры ndis)
  • пофикшено падение при работающем gmer
  • и еще много чего пофикшено с прошлого раза

воскресенье, 7 августа 2011 г.

perl inside IDA Pro

а вот например поскольку ecl встраивается куда-либо крайне непросто, то я решил обновить очередной свой античный баян
Cоотв-но эта версия работает на
  • IDA Pro 6.1 (eset rulez ! например от Спасателей Вселенной™ сроду ничо полезного не дождешься, бгг)
  • 32битном ActiveState perl 5.14
  • собирается vs2010
С немалым интересом обнаружил, что за прошедшее время появился еще один вариант subj. Я даже позаимствовал оттуда механизм перехвата layered PerlIO. Похоже что он заброшен с 2008 года. Сложно сказать какой вариант bindingа лучше - мне мой за девять с половиной лет более привычен
Впрочем и моя версия пока может рассматриваться как глубокая alpha, ибо
  • отладчик не поддерживается
  • 32bit only
  • я ее практически не тестировал - прогнал вчера с десяток своих скриптов для анализа форматов файлов - вроде бы все работают

суббота, 6 августа 2011 г.

ecl

одепты "open source" сто пудово рождены чтоб Кафку сделать былью
Вот например сижу давеча разбираюсь как половчее можно было бы заюзать subj. Если кто не знает что это:
ECL stands for Embeddable Common-Lisp
читаю доку - Chapter 8. Embedding ECL. Глава 8.1. Introduction поражает воображение лаконичностью:
TBD.
И вот все у них так (c)

idacs

Подумалось в порядке полуночного пьяного бреда: а вот если в IDA Pro встроить какой-нть embedded lisp, то получитца дико хакерский Ъ emacs например, с дизасмом и hex-rays, бгг
Вы таки будете заливисто смеяццо, но биндинг Qt к lispу давно существует

пятница, 5 августа 2011 г.

определение версии KPRCB

а вот нас тут спросили давеча - нету ли другого способа узнать какая именно версия KPRCB используется кроме как по версии windows ?

Такой способ есть.Например есть такая экспортируемая кернелом ф-ция - KeIsExecutingDpc. Она возвращает значение KPRC.PrcbData.DpcRoutineActive. Выглядит на разных windows примерно так (я приведу только самую первую и нужную инструкцию)

w2k/xp/w2k3
  movzx   eax, byte ptr ds:0FFDFFA7Ah


Учитывая что по адресу FFDFF000 хранится KPCR для процессора 0, а сама структура KPCR имеет размер 0x120 байт, получаем что смещение поля DpcRoutineActive равно 0x95A.

vista/w7
  mov     eax, large fs:1A54h

Тут тоже все просто - в fs расположен KPRC, cмещение поля DpcRoutineActive равно 0x1934.

Соотв-но можно составить табличку смещений поля DpcRoutineActive для всех поддерживаемых версий KPRCB и простым дизасмом ф-ции KeIsExecutingDpc определить, какая версия KPRCB используется

четверг, 4 августа 2011 г.

KPRCB

не нашел в этих ваших интернетах правильные структуры subj под разные версии windows. Пришлось как обычно самому с печи слазить и обувать лапти

среда, 3 августа 2011 г.

mathcad

ставил сегодня весь день subj под 64битную w7
Адовый совершенно квест
  • сначала инсталлятор просто падал в самом начале. Гугл сказал что имя компутера не должно содержать проклятый рюсский пукфы
  • потом оно сказало мне человеческим голосом что ей нужен msxml4 sp2. Это на живой windows7 !
Отвратительно, но поставил кажется за четыре часа

понедельник, 1 августа 2011 г.

аэроплан братьев Райт

В американском штате Огайо накануне разбился экспериментальный самолет, который являлся копией биплана Model B, созданного пионерами авиации братьями Райт в 1910г
отсюдова
Если немного подумать, то такого в принципе не может быть - за прошедшие сто лет аэродинамика, металловедение и теория надежности имели колоссальный прогресс
Если еще немного подумать, то можно предположить, что за те же сто лет человечество утеряло некоторое количество знаний, которые ранее рассматривались как банальности, известные всем. Например вы умеете писать на ассемблере топить печь ?
Если подумать еще, то можно прийти к интересному выводу: копия чего-либо вcем известного старого, даже со всеми новыми знаниями и опытом, вполне вероятно будет работать ничуть не лучше оригинала. Горячий привет известному клону unixа, бгг