Обновить
50
0

Погромист

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

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

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

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


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

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

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

Есть же ключевое слово dynamic!
Читать дальше →

Сага о 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.
Читать дальше →

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

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

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


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

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

Итак, что же это за звери такие, отечественные ИТ-шники?
Читать дальше →

Как я стенд для сборки с 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


Читать дальше →

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

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

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


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

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

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

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

Увы — в исходном тексте важной преамбулы не оказалось. Простите — а от кого мы собираемся защищаться? Зачем? Какие именно угрозы нам необходимо пресечь или хотя бы ослабить?
Читать дальше →

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

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

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

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

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

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


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

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

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

Читать дальше →

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

Время на прочтение5 мин
Охват и читатели5.8K

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

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

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

Читать дальше →

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

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

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


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

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

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

Читать дальше →

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

Время на прочтение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. Его и рассмотрим.

Читать дальше →

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

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

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

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

Читать дальше →

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

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

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

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

Читать дальше →

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

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

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


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

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

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

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

Читать дальше →

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

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

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

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

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

Читать дальше →

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

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

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

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

Читать дальше →

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

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

Читать дальше →

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

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

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

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

Читать дальше →

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

Время на прочтение5 мин
Охват и читатели3.5K

Введение



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

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

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

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

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

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

Читать дальше →

Информация

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