Pull to refresh
48
0

Погромист

Send message

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

Reading time5 min
Views14K

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


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

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

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

Есть же ключевое слово dynamic!
Читать дальше →
Total votes 29: ↑25 and ↓4+21
Comments7

Сага о E_RPC_DISCONNECT

Reading time5 min
Views10K

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


И был тот код написан на дотнете (еще версии 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.
Читать дальше →
Total votes 35: ↑31 and ↓4+27
Comments8

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

Reading time5 min
Views33K

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


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

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

Итак, что же это за звери такие, отечественные ИТ-шники?
Читать дальше →
Total votes 42: ↑27 and ↓15+12
Comments18

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

Reading time9 min
Views13K
image

Преамбула


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

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

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

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

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


Читать дальше →
Total votes 36: ↑30 and ↓6+24
Comments32

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

Reading time9 min
Views24K
image

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


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

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

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

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

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

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

Reading time6 min
Views8.5K
image
Читаю я вчерашний пост простоквашино на Хабре или письмо Дяди Федора. Мысль интересная, но.

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

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

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

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


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

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

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

Читать дальше →
Total votes 30: ↑20 and ↓10+10
Comments6

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

Reading time5 min
Views5.7K

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

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

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

Читать дальше →
Total votes 9: ↑6 and ↓3+3
Comments3

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

Reading time3 min
Views26K
image

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


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

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

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

Читать дальше →
Total votes 36: ↑15 and ↓21-6
Comments33

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

Reading time17 min
Views29K
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. Его и рассмотрим.

Читать дальше →
Total votes 103: ↑101 and ↓2+99
Comments62

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

Reading time5 min
Views10K
image
Пару лет назад, когда деревья были большие и зеленые, ко мне пришли злые дотнетчики, и сказали — ага, попался! пришлось мне помочь коллегам в одном весьма странном проекте.

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

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

Читать дальше →
Total votes 17: ↑9 and ↓8+1
Comments9

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

Reading time4 min
Views34K
image
Однажды, много лет назад, пришел ко мне клиент, и слезно умолял поручил разобраться в одном чудесном проекте, и повысить скорость работы.

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

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

Читать дальше →
Total votes 134: ↑117 and ↓17+100
Comments65

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

Reading time6 min
Views8.7K
image
Давным давно, когда трава была зеленее, меня поймали и долго пытали пришлось мне повышать перформанс в одной чудесной связке.

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


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

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

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

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

Читать дальше →
Total votes 27: ↑21 and ↓6+15
Comments13

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

Reading time7 min
Views13K
image

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

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

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

Читать дальше →
Total votes 49: ↑40 and ↓9+31
Comments7

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

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

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

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

Читать дальше →
Total votes 110: ↑95 and ↓15+80
Comments50

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

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

Читать дальше →
Total votes 34: ↑27 and ↓7+20
Comments13

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

Reading time3 min
Views2.6K
image

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

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

Читать дальше →
Total votes 36: ↑27 and ↓9+18
Comments30

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

Reading time5 min
Views3.3K

Введение



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

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

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

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

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

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

Читать дальше →
Total votes 55: ↑36 and ↓19+17
Comments20

Information

Rating
Does not participate
Location
München, Bayern, Германия
Date of birth
Registered
Activity