вторник, 31 мая 2011 г.

alpha-testers needed

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

воскресенье, 29 мая 2011 г.

LdrpVectorHandlerList

а вот например я уже писал что в висте и w7 обработка VEH несколько изменилась и для хранения списков обработчиков используется LdrpVectorHandlerList
Сегодня например нашелся и примерчик обхода этих списков
Наслаждайтесь

суббота, 28 мая 2011 г.

Clean Code

а вот например я давеча с бодуна практически дочитал subj
Краткое содержимое книжки можно выразить примерно так: "когда коту java программисту нечего делать - он лижет яйца занимается рефакторингом"
Причем занятие это
  1. полностью бессмысленно, ибо не имеет критерия останова. В самом деле - никакого критерия когда уже можно остановиться полировать кирпич во всей книге не дается.
  2. сильно смахивает на банальный перебор вариантов вместо того чтобы немного подумать
  3. ценность имеет сугубо отрицательную
Вот например в главе 14 гражданин в утомительных подробностях показывает, как не особо сложный кусок кода строк в 500-600 был доведен до его текущего состояния. С гордостью заявляется что для этого потребовалось тридцать итераций, при этом после каждой в соответствии со священными принципами экономикса TDD все тесты были успешно пройдены. А сколько гражданину потребуется итераций на код в 50000 строк ? А на 5 миллионов ?
Лучше бы гражданин отложил в сторону клавиатуру и подумал как сделать код сразу более-менее расширяемым. Мне на это обычно требуется одна сигарета например.

Или вот в главе 16 дается яркий пример отрицательной ценности изменений. Гражданин взял open-source либу и переделал ее в соответствии со своими тонкими критериями врожденной эстетичности. При этом сломал не пойми чего ради
  • имена абстрактных методов
  • способ создания классов
  • имена публичных методов
 Думаю что авторы программ, использующих данную библиотеку, сказали негромко много всяких непечатных выражений в адрес гражданина после таких переделок

И вообще вся книжка оставляет впечатление что ознакомился с мнением школоты об устройстве мира. Вот например глава 13 - я всю жизнь думал что написание многопоточного кода - штука весьма непростая. Ничего кроме тривиальнейших советов глава не сообщает. Особенно жжет список литературы - если вы собираетесь увидеть там что-нть вроде "Art of Concurrency" или "Distributed Algorithms" - вы жестоко ошибаетесь

Ящетаю что такие книжки нужно торжественно сувать в неиллюзорные печи холокоста например

пятница, 27 мая 2011 г.

чюдесное

Китайских заключенных заставляли зарабатывать валюту для Родины в World of Warcraft
На виртуальном производстве было занято 300 заключенных. При этом наказания за невыполнение виртуальной нормы были вполне реальные: "Меня заставляли стоять с поднятыми руками, а когда я возвращался в спальный корпус, меня били пластиковыми трубами", - вспоминает Лю Дали.
отсюдова

четверг, 26 мая 2011 г.

парадох

а вот например сегодня я решил почистить собственный код на C++ - выкинуть почти одинаковый код, заменив его шаблонным базовым классом и все такое
В результате исходник уменьшился аж на целых 16Kb и даже проходит все тесты (т.е. с некоторой вероятностью ничего не сломалось внезапно). Вот только размер .exe при этом увеличился на 3Kb !
Я например дичайше не понимаю почему

пятница, 20 мая 2011 г.

perl 5.14

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

четверг, 19 мая 2011 г.

Linux 2.6.39

ололо, я неиллюзорно поражен - они таки вычистили GIL Big Kernel Lock !
Такими темпами они лет через ..-цать вполне имеют шансы догнать windows 7 например
Может им проще все же выгнать Линуса на помойку, где бомжи нанять Дейва Катлера ?

64bit vista sp2 update

в продолжение - на subj сегодня прилетело аж сразу 12 обновлений систем безопасности !
Граждане определенно отжыгают

воскресенье, 15 мая 2011 г.

Sony PSN attack

надеюсь все уже читали. Только размер ущерба везде разный указан - то 10 миллионов кредитных карт, то 77. В любом случае улов один из самых крупных
About 10 million accounts have credit card numbers associated with them, but Sony said it had no evidence those numbers were stolen. The credit card numbers, unlike the personal information, are stored in an encrypted database, although Sony has not said what encryption system was used
даже странно что Спасатели Вселенной™ до сих пор не сеют панику из каждого утюга. Совсем распустились, бгг

суббота, 14 мая 2011 г.

дочитал Beautiful Code

не осилил при этом 3 с половиной главы:
  • поскольку я бесконечно далек от линейных уравнений - главы 14 & 15 мне были непонятны и неинтересны совершенно
  • главу 25 - во первых я не настолько хорошо знаю scheme, а во вторых по моему нескромному мнению гражданин слишком усложнил весьма простой алгоритм
Половина (первая причем) главы 24 про software transaction memory тоже осталась не осиленной - я не понял как именно происходит ожидание на локе и нотификация про изменение состояния. Подозреваю что где-то внутри haskell имеется самобытная реализация потоков со своим планировщиком и все такое, но искать в сорцах мне лень, тем более что haskell я не осилил и мне не стыдно

Но в книжке есть и несколько вполне поучительных и угарных глав:
  • глава 1 про простейшие регулярные выражения
  • глава 3 - Бентли жжет просто адовым напалмом !
  • глава 8 про ручную кодогенерацию. Думаю что выигрыш производительности в 4 раза вполне стоил всех заморочек, тем более что генерация кода не так уж страшна как про нее принято думать
  • глава 20 про портал, отвечающий за NASA mars rover. Java, да, но надежность при этом достигнута очень высокая
  • глава 24 про синхронизацию в ядре solaris. Дичайше простое и элегантное решение, я аж два раза перечитал хлопал в ладошки и радостно смеялся
  • глава 33 - несмотря на то что я опять же бесконечно далек от вычислительной геометрии - предложенные алгоритмы понятны любому в принципе

воскресенье, 8 мая 2011 г.

Beautiful Code

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

Собс-но если собрать кучу коротких эссе от разных людей, то результат выйдет вполне предсказуемым - некоторые вещи кажутся мне просто неинтересными, некоторые требуют нехилой математической подготовки откуда ей взяться после 3 классов и двух коридоров церковно-приходской школы, некоторые же по сравнению с прочими выглядят тривиально или вообще полным бредом. Примерно вот так они выглядят тащемта:
Почему-то особенно радуют бредовостью тривиальностью статьи про python

Вот например глава 18 про реализацию словарей в питоне жжет - мы тут померяли кое-то и решили, что вот так оно лучше. Ни формул (как у Бентли), ни теоретического обоснования - нету ничего, см. комменты в коде, ага. Дичайше радует следующая цитата:
This means dictionaries are never resized on deletion. If you build a large dictionary and then delete many keys from it, the dictionary’s hash table may be larger than if you’d constructed the smaller dictionary directly. This usage pattern is quite infrequent, though. Keys are almost never deleted from the many small dictionaries used for objects and for passing function arguments. Many Python programs will build a dictionary, work with it for a while, and then discard the whole dictionary.Therefore,very few Python programs will encounter high memory usage because of the no-resize-on-deletion policy
Прям вижу как Гвидо со товарищи собрались однажды в студеную зимнюю пору амстердамском кофе-шопе, дунули и решили, что это вам практически никогда не пригодится. Прозреваю что в этом могучем языке таких замаскированных граблей богато рассыпано

Или вот глава 19 про реализацию итераторов в numpy тоже не блещет умом и практичностью:
The arrays in this structure (coords, dims_m1, strides, backstrides, and factors) are fixed-size arrays with dimensions controlled by the NPY_MAXDIMS constant. This choice was made to simplify memory management. However, it does limit the number of dimensions that can be used. It could easily be handled differently by dynamically allocating the needed memory when the iterator is created; such a change would not alter the fundamental behavior.
Я не поленился, проверил в сорцах - NPY_MAXDIMS у них равно 32. Внезапно 33х размерные массивы перестанут работать. Но даже и с таким запасом память банально транжирится зря - я с трудом могу себе представить применение массивов с более чем 4мя размерностями. Соотв-но ничто (кроме лени канешна же) не мешало реализовать три разных типа итераторов:
  • последовательный - когда массив просто итерируется подряд в foreach
  • для мелко-размерных массивов, скажем до 4х размерностей - использовать текущую реализацию с урезанным NPY_MAXDIMS
  • для всех прочих не хардкодить размерность, а выделять все нужные данные в хвосте структуры и иметь поле для числа размерностей
Причем даже не нужно больших усилий сопрягать все это хозяйство - можно было завести пару указателей на ф-ции (как было описано буквально двумя главами ранее про файловые системы в FreeBSD) - get_next и is_end например. Тем не менее у автора хватило наглости утверждать что его код не просто красив, но и вообще образец совершенства и гибкости

И не смейте даже подумать, что я пристрастен - например самая угарная глава 11 - про систему, написанную на perl. Автор несколько лет писал систему почтовых сообщений с распределенным управлением ключами (типа все секурно и параноидально) и приводит вот такой кусок кода:

sub _getuser {  # Get a user object from the database.
  my $self = shift; my $username = shift;
  $self->db->table('users'); $self->db->template($usertmpl);
  my ($user) = $self->db->select("WHERE USERNAME = '$username'");


Остается только пожелать гражданину удачи с именами пользователей типа ';delete from users where username <> '

С интересом продолжаю чтение

понедельник, 2 мая 2011 г.

картинка для медитации-5

а вот попробуйте например угадать что такое большое сдохло в лесу:
а это дети был firexfox 3.6.17 с одной единственной вкладкой после примерно получаса торчания на metal-archives.Одепты open source совсем забыли что память было бы неплохо освобождать хоть изредка ?
Надо обратно на ie8 переходить

воскресенье, 1 мая 2011 г.

perl binding for C++ objects

а вот например нас периодически спрашивают, как можно прикрутить к perlу большие и развесистые объекты C++, из которых биндинг осуществляется к весьма немногим методам (как почти всегда и бывает).
Например для автоматической генерации биндингов дико хорош swig. Но и у него периодически рвет крышу при парзинге развесистых заголовков. В качестве prooflink см. например как сделан биндинг писона к ida pro в ida sdk - для этого большинство заголовочных файлов были жестоко отпатчены на предмет вставки где попало макроса SWIG
Но есть например и другой способ, про который я не помню где вычитал и потому буду нагло считать, что придумал его сам.
Допустим что у нас есть некий C++ объект и мы хотим прикрутить его к perl:

class SomeUsefullClass
{
 public:
  SomeUsefullClass();
  ~SomeUsefullClass();
  // this is our methods for binding
  int MakeMeIncredibleRich(int howMuch);
  int StoreResults(const char *fname);

  // тут еще гора методов, которые мы не хотим биндить
 protected:
  SomeShittyClass m_Worker;
  SomeOtherShittyClass m_Serializer;
  // и тут еще гора методов, не имеющих к биндингу никакого отношения
};

C весьма высокой вероятностью если такое описание реального класса подсунуть swig, то его стошнит (заметим в скобках что нам еще придется указать всю кучу использованных header files). А если немного помедитировать над приведенным выше описанием, то можно заметить, что нам не нужны все кишки и потроха реального класса - например swigу можно было бы подсунуть ровно то что нам нужно