Как стать автором
Обновить
48
0

Погромист

Отправить сообщение

Грабли, .NET, COM и dynamic

Время на прочтение5 мин
Количество просмотров14K

Жил — был древний код эпохи динозавров


Дано: адов кодярник работающий с 16ю разными версиями одного и того же «ах какого» продукта. COM, Interop, интерфейсы, реализации, сигнлтоны с факторями, паттерны с антипаттернами, модули и прочие ошметки крывавого ынтырпрайзу. Стандартный набор. Рос, мужал и матерел тот кодярник лет семь. Пока однажды очередной фикс не привел к исправлению массового копипаста в 16 модулях. Если кому интересно — foreach на for меняли.

Помучившись, провели исследование. Копипаст на 95% идентичен, различаются только имена пакетов из интеропов.

А можно ли как-то писать так чтобы не оборачивать сотни и сотни функций в свои врапперы, плюс ручками боксинг / анбоксинг этих врапперов?

Есть же ключевое слово dynamic!
Читать дальше →
Всего голосов 29: ↑25 и ↓4+21
Комментарии7

Сага о E_RPC_DISCONNECT

Время на прочтение5 мин
Количество просмотров10K

Вначале был код


И был тот код написан на дотнете (еще версии 1.1) много лет назад. Код был простой и дубовый — где-то в дебрях проекта лежала стопка Interop*.*.DLL для еще более древних TLB. Очевидно, был заведен интерфейс, имплементирующий три с половиной метода, и рожден в муках набор реализаций, к моменту раскопок — их было шестнадцать (!) штук. Factory и прочие синглтоны — в комплекте.

Создавал тот код классический Application, и у всех 16 реализаций в интересующем нас месте код был скопипастан и идентичен — отличались лишь неймспейсы из интеропов.

Примерно вот так:

Type apptype = Type.GetTypeFromProgID("CoolAppID", false);
var app = Activator.CreateInstance(apptype) as Cool.Application;

var lib = app.Open(file, ... /* many flags */) as Cool.Library;
foreach(var asset in lib.Assets) {
    /* some long operations */
}

С тех пор код пережил много всего — переезд на дотнеты 2.0, 3.5, 4.0 и т. д. Стал поддерживать тех интеропов с двух до упомянутых шестнадцати — а код все тот же и все так же не меняется, лишь размножается почкованием иногда. Ни одного разрыва с 2007 года. Пока однажды не запустили этот код на Windows 8.1.
Читать дальше →
Всего голосов 35: ↑31 и ↓4+27
Комментарии8

Как помочь софту в РФ

Время на прочтение5 мин
Количество просмотров33K

Купляйце беларускае Поддержим отечественного производителя.


В последнее время стала модной тема поддержки «отечественного ИТ-производителя». То инфраструктуру по хранению и обработке данных в дефолт сити требуют, то налоги с оборота придумают. «Все в трудах».

Но давайте немного поможем депутатикам государству. Рассмотрим ситуацию «изнутри», расставим какие-то маркеры, вида «сюда ходи, сюда не ходи, снег башка попадет, совсем мертвый будешь».

Итак, что же это за звери такие, отечественные ИТ-шники?
Читать дальше →
Всего голосов 42: ↑27 и ↓15+12
Комментарии18

Как я стенд для сборки с windows на wine мигрировал

Время на прочтение9 мин
Количество просмотров13K
image

Преамбула


Есть у меня несколько старых проектов, писанных на С++, которые все еще развиваю по мере сил. Казалось бы — в чем же дело? Увы, это пачка очередных плагинов под мой любимый Adobe InDesign.

И каждый раз, когда выходит новый Creative Suite, приходится портировать это дело. Что интересно, основные усилия уходят на то, чтобы собрать новую версию по новым правилам, и подогнуть инсталлятор. Потому как уж если дошел до стадии «оно компилируется», то как правило — работает. Хотя конечно есть нюансы — например в один прекрасный момент PlaceGun перестал раскладывать несколько выбранных изображений, только первое. Но об этом — в следующий раз.

И разумеется — хотелось бы это собирать под все версии и все платформы за раз, а не «открыл вижлу — собрал — закрып — повторил».

Итак, для сборки, нам нужны одновременно

  • MS VS 2005
  • MS VS 2005 sp1
  • MS VS 2008
  • MS VS 2010
  • MS VS 2012


Читать дальше →
Всего голосов 36: ↑30 и ↓6+24
Комментарии32

По следам бременских музыкантов, или «Как нам выстроить информационную защиту России» правильно

Время на прочтение9 мин
Количество просмотров24K
image

Смех продлевает жизнь


Как известно, вчера мы насладились то ли суперсарказмом, то ли гэгом, то ли «у автора весеннее обострение» — на тему «как нам обустроить рабкрин» «Как нам выстроить информационную защиту России».

Попробуем разобрать — что же в предложенном «не так». Как известно — не знаешь как изложить материал — придерживайся методички.

  1. Что это?
  2. Для кого это?
  3. Как этим пользоваться?

И вот только после этого можно переходить к деталям.

Увы — в исходном тексте важной преамбулы не оказалось. Простите — а от кого мы собираемся защищаться? Зачем? Какие именно угрозы нам необходимо пресечь или хотя бы ослабить?
Читать дальше →
Всего голосов 85: ↑61 и ↓24+37
Комментарии53

А таки давайте напишем инструмент для написания писем Дяди Федора!

Время на прочтение6 мин
Количество просмотров8.5K
image
Читаю я вчерашний пост простоквашино на Хабре или письмо Дяди Федора. Мысль интересная, но.

Комментарии пугают.

Поясню почему.

Комментарии там условно можно разделить на два вида

  • «как много помещается ангелов на конце иглы» «о сортировке дат»,
  • «как забивать гвозди электронным микроскопом» «мы напишем что-то такое большое в энтерпрайзненьком стиле».


Душа поэта не выдержала, нашел полчаса, и нарисовал userscript.

Скрипт прост до ужаса — перебирает все комментарии в поисках специального маркера. Если маркер найден — показывает все комментарии с маркером во всплывающем окошке.

Всем желающим поучаствовать в улучшении — добро пожаловать, так сказать откатаем технологию. Если ваш комментарий надо добавить в пост — пишите внутри комментария вот так [also]. А я как инициатор этого безобразия — по мере сил буду ваши пожелания в пост переносить. И соответственно — улучшать скрипт тоже.

Читать дальше →
Всего голосов 30: ↑20 и ↓10+10
Комментарии6

О бэкапах в облаке: используем Rackspace CloudFiles

Время на прочтение5 мин
Количество просмотров5.7K

Однажды в студеную зимнюю пору, пришли ко мне как обычно с паяльником.

Задача: есть у нас сервер в Rackspace, на полном фарше. На сервере неонка крутится база на MS SQL Web Edition. И вот внезапно ребятки спохватились — а куда еженощный бэкап девать? А то превышать он стал все разумные пределы, а пользы от его хранения на диске того же инстанса — чуть.

Как та мудрая сова из анекдота, я им предложил настроить средства облака из консольки. И был жестоко истыкан горячими острыми предметами — оказывается, сервер там не просто стар, а очень стар, висит он там на древнючем каком-то плане, у которого и нет ничего доступного, одни Cloud Files. И поменять — это надо идти к большому боссу уважаемой конторы, которая 200 лет на рынке. А большой босс им зарплату платит не за то чтобы они к нему за такими вещами ходили.

Читать дальше →
Всего голосов 9: ↑6 и ↓3+3
Комментарии3

Как нам книги читать

Время на прочтение3 мин
Количество просмотров26K
image

Вначале было слово


Копирасты хотят денег, а продают ограничение доступа. То есть вся их бизнес-модель описывается в этих трех словах — деньги за доступ.

Тут к слову наблюдается типичная подмена понятий — хотят денег а воюют за доступ. Потому что кто девушку ужинает, тот ее и танцует. Теряешь в монополии на доступ — теряешь (в силу нулевого копирования) и деньги.

Какова же альтернатива? Увы, основная масса предложений сводится к поиску — кто за нас заплатит за доступ. Как до меня дошел сей прискорбный факт — я решил на суд хабрасообщества выдвинуть свою безумную идею. Несмотря на то, что я к копирастам отношения не имею.

Читать дальше →
Всего голосов 36: ↑15 и ↓21-6
Комментарии33

Об одном методе распределения памяти

Время на прочтение17 мин
Количество просмотров29K
image
Не секрет, что иногда выделение памяти требует отдельных решений. Например — когда память выделяется и освобождается стремительным домкратом потоком, в параллельных задачах.

В результате стандартный консервативный аллокатор выстраивает все запросы в очередь на pthread_mutex / critical section. И наш многоядерный процессор медленно и печально едет на первой передаче.

И что с этим делать? Познакомимся поближе с деталями реализации метода Scalable Lock-Free Dynamic Memory Allocation. Maged M. Michael. IBM Thomas J. Watson Research Center.

Самый простой код что я сумел найти — написан под LGPL камрадами Scott Schneider и Christos Antonopoulos. Его и рассмотрим.

Читать дальше →
Всего голосов 103: ↑101 и ↓2+99
Комментарии62

О некоторых неочевидных хаках при работе с entity framework и unique constraints

Время на прочтение5 мин
Количество просмотров11K
image
Пару лет назад, когда деревья были большие и зеленые, ко мне пришли злые дотнетчики, и сказали — ага, попался! пришлось мне помочь коллегам в одном весьма странном проекте.

А именно — представьте себе пачку цифирей, которые аналитики составляют раз в месяц, в любимом ими пакете MS Office. И вот раз в месяц появилась необходимость эти цифры пережевывать и загружать в БД под управлением MS SQL.

И конечно же — этот мега-тул надо было сделать быстро. Чтобы потом передать на суппорт дешевым то ли малайцам, то ли индусам. Так что еще и рекомендовалось делать максимально понятно.

Читать дальше →
Всего голосов 17: ↑9 и ↓8+1
Комментарии9

О тонкостях повышения performance на С++, или как делать не надо

Время на прочтение4 мин
Количество просмотров35K
image
Однажды, много лет назад, пришел ко мне клиент, и слезно умолял поручил разобраться в одном чудесном проекте, и повысить скорость работы.

Вкратце, задача была такой — есть некий робот на С++, обдирающий HTML страницы, и собранное складывающий в БД (MySQL). С массой функционала и вебом на LAMP — но это к повествованию отношения не имеет.

Предыдущая команда умудрилась на 4-ядерном Xeon в облаке получить фантастическую скорость сбора аж в 2 страницы в секунду, при 100% утилизации CPU как сборщика, так и БД на отдельном таком же сервере.

Читать дальше →
Всего голосов 134: ↑117 и ↓17+100
Комментарии65

О том как я на Java из PDF флэш получал

Время на прочтение6 мин
Количество просмотров8.8K
image
Давным давно, когда трава была зеленее, меня поймали и долго пытали пришлось мне повышать перформанс в одной чудесной связке.

Как задачу понял архитектор


Дано: есть безумный каталог изделий в виде большого количества PDF по паре тыщ страниц каждый. Надо их выдать в веб в виде красочных анимированных презентаций.

Попытка решения: написали плееры на флэше и на javascript, которым скармливается этот преобразованный каталог, и они разными красочными эффектами по определенному алгоритму крутят нечто рекламное.

Проблема: каталоги постоянно меняются, а конвертация только одного гроссбуха из каталога занимает больше часа(!).

Почему так и как улучшить?

Читать дальше →
Всего голосов 27: ↑21 и ↓6+15
Комментарии13

О том как я Java в дотнет портировал

Время на прочтение7 мин
Количество просмотров13K
image

Давным давно… ну как давно? вчера! (С), то есть пару лет назад, портировал я одну скромную библиотечку с Java на .NET. И не просто на .NET, а на версию 1.1.

Подход известен — берем в зубы Sharpen (или конвертер из вижуалстудии 2003 года, кому что нравится), и далее — лобзиком.

Про очевидности с итераторами, структурами ("System.Drawing.Size это не объект") и потоками рассказывать не буду — банальщина. А вот про некоторые сюрпризы — добро пожаловать.

Читать дальше →
Всего голосов 49: ↑40 и ↓9+31
Комментарии7

О том, как мелкие баги в линкере Microsoft аукаются в Linux, на примере Firefox

Время на прочтение2 мин
Количество просмотров1.4K
image
Как известно, некоторое время назад команда Mozilla наступила на баг в линкере микрософт — xul.dll получалась такая богатая, что линкер на ней падал. И собрать версию под платформу номер один (windows 32bit) не удавалось.

Временно, до выяснения, из Firefox были выкинуты «малоиспользуемые» API. Произошло это между 5 и 7й версиями.

Не будет сюрпризом тот факт, что борьба за линкер была продолжена, о чем у нас и пойдет речь.

Читать дальше →
Всего голосов 110: ↑95 и ↓15+80
Комментарии50

О том как я имя файла из С++ в Java передавал

Время на прочтение3 мин
Количество просмотров1.7K
image
В кроссплатформенных приложениях чего только не встретишь. Или напишешь. Вот, намедни родили против шерсти очередного ежика наступили на заботливо разложенных грабель, на сей раз под маком.

Читать дальше →
Всего голосов 34: ↑27 и ↓7+20
Комментарии13

Как я вставлял Java 7 в работающее приложение, и что пришлось изобрести для С runtime

Время на прочтение3 мин
Количество просмотров2.7K
image

Однажды, в студеную зимнюю пору, в одно старое приложение на С++, успешно работавшее до этого годами, пришлось вставить новый Java runtime 7 вместо отлично работавшего Java 6. Ничто не предвещало, и вдруг.

Код в общем-то очевиден и прост — немного JNI, и вот он — больной зуб. Приведу код только для Windows, т.к. чудеса эквилибристики под маком не потребовались.

Читать дальше →
Всего голосов 36: ↑27 и ↓9+18
Комментарии30

Облака в применении к ИБ: некоторые неочевидные следствия

Время на прочтение5 мин
Количество просмотров3.4K

Введение



Не секрет, что мы наблюдаем бурное развитие облаков aka Clouds. Все и вся переезжает в эти самые облака. Но какую пользу (и вред) мы из этого можем извлечь с точки зрения ИБ?

Рассмотрим новые возможности и новые угрозы.

Вот, тезисные посылки, чтобы уменьшить сумбурность изложения.

1. Хранить в облаках — небезопасно.
1.1. Не надо хранить там ваши пиратские коллекции.
1.2. Прятать надо грамотно, разбавляя шумом.
1.3. Толика здоровой паранойи не помешает, шифруем сами.

2. Обрабатывать в облаках — выгодно.
2.1. Для этого надо строить облачные сервисы по-новому.
2.2. Пережить атаки теперь проще.

3. Злым хакерам теперь тоже проще — собрать ферму для взлома паролей может каждый.
3.1. Используем пароли побезумнее и подлиннее, не из словаря.
3.2. Используем Keepass и аналоги для управления паролями.
3.3. Везде где можно — переходим на ключи.

Читать дальше →
Всего голосов 55: ↑36 и ↓19+17
Комментарии20

Информация

В рейтинге
Не участвует
Откуда
München, Bayern, Германия
Дата рождения
Зарегистрирован
Активность