All streams
Search
Write a publication
Pull to refresh
106
Дима Коваленко @dimakovalenkoread⁠-⁠only

User

Send message
У математиков есть бесплатный arxiv.org/. Там много сильных работ, кстати там же есть и работы Перельмана — того самого :) Есть конечно и платные журналы, но авторы-математики там как правило не получают за статьи ни копейки, кроме может быть знаменитостей типа Майка Громова или того же Перельмана. По крайней мере я как-то печатался в ROSE — получил только эл. копию статьи по почте, и всё. Мои знакомые, которые печатались в различных журналах, тоже получили только «спасибо за вклад в науку» и никаких денег. Может нам всем конечно не повезло, и другие математики зарабатывают своими доказательствами огромные деньги… но как-то сомнительно.

> «не использовать» в своих доказательствах
Прикольно. Запатентую пожалуй нормальные подгруппы. И все кто использует их в своих доказательствах (а это практически вся алгебра) — мне автоматически должны. Или нет! Лучше запатентую множество. Тогда вообще все мне должны, абсолютно. Маразм, маразм…
Например математики которые придумали что-то толковое вроде доказательства БТФ всегда безвозмездно выставляют свои работы на суд широкой публики. Никто из математиков никогда не скажет: «Я нашел доказательство, но у меня на него патент, так что фиг вам! А ещё у меня патент на квадратный корень, так что если выпускайте учебники математики то только со ссылками на моё доказательство (само доказательство не публиковать!) и на квадратные корни тоже»
Спасибо за интервью, очень интересно. В финале

>… люди (обычно бедные и необразованные), просиживающие вечера за
> убогим телевизором (просто невозможно смотреть то, что ныне показывают),
> вместо того чтобы прочитать что-то и стать кем-то. Как заставить их встать с
> дивана? Никак, надо спасать детей.

почему-то напомнило «Гадкие лебеди» Стругацких.
Мораль вообще штука такая… неоднозначная. Часто хочется как лучше, а получается как всегда. В связи с этим почему-то вспомнилось из «Линии грёз»:

\begin{offtop}
\begin{cite}
«Севолд Мартызенски был человеком-легендой. Он создал почти половину моделей оружия Смутной Войны. Лабораторию он покидал раза три в год — когда поблизости проходили манифестации пацифистов. Казалось, что он полностью разделяет свою работу над смертоносным оружием и подчеркнуто мирные убеждения. Демонстранты так не думали, и, несмотря на хорошую охрану, Севолда пытались бить. Безрезультатно попытавшись поучаствовать в демонстрациях, Мартызенски обычно возвращался в лабораторию и в расстроенных чувствах создавал еще более жуткие агрегаты по уничтожению жизни во всех ее проявлениях. Если легенды не врали, то в период его многочисленных творческих кризисов СИБ инсценировала демонстрации пацифистов...»
\end{cite
}\end{offtop}
Спасибо за Ваш отзыв. Просьба к остальным участникам этот отзыв не минусовать — у человека своё мнение, имеет право :)

«Guns don't kill people, people kill people» © Когда я писал эту статью я представлял «по ту сторону монитора» прежде всего вирусных аналитиков и white hats, т.е. людей со стороны света. Хотя я конечно в курсе куда выстлана дорога благими намерениями :)

Касательно защиты — можно подумать и о таком цикле статей тоже. Вообще-то следующее что я собирался написать: серия статей про отладку под iOS без исходного кода, или про «кровавый энтерпрайз», но можно и пересмотреть планы. Хотя если я напишу про защиты — хакеры эти статьи ведь тоже прочитают и будут в курсе дела, верно? Тоже как-то нехорошо получится. Не знаю даже…
Прямо сейчас не могу — пишу статью про отладку native методов без исходных кодов под Android. В интернете про это на русском ничего, на английском скудно, на китайском побольше — но мой китайский очень плох :)

Как закончу — можно будет и про «кровавый энтерпрайз» вспомнить :)
* dependency & conflict management конечно же… чего-то я устал под конец дня, извините.
Ну на самом деле это простейший случай конфликта: один и тот же файл ставится двумя MSI инсталляциями, причем компонентами с разными гуидами. И решение конфликта тут тоже элементарное: назначить компонентам одинаковые гуиды, и всё. За свою практику я наблюдал конфликты намного более замысловатые :)

Вообще dependecy & conflic management — это тот ещё хитрый геморрой. Зато если всё делается как надо, то у заказчика может быть хоть по триста приложений на каждой из его десятков тысяч машин включая банкоматы и сервера — всё равно всё работает гладко и не лагает.
Объясню на примере. Допустим есть компонент A с гуидом {A} в файле A.msi, и компонент компонент B с уже другим гуидом {B} в файле B.msi. Оба компонента, и A и B, ставят некую библиотеку X.dll в C:\Windows\System32 (на самом деле это частая ситуация — программы доставляют нужные им версии системных библиотек, всякие comctl и т.п.).

Теперь давайте представим что система разворачивания делает с файлами A.msi и B.msi следующее:

1. Устанавливает A.msi. В результате компонент A установился и зарегистрировался в системе, а библиотека X.dll стала в C:\Windows\System32. Пока все довольны.
2. Устанавливает B.msi. В результате компонент B установился и зарегистрировался в системе. Библиотека X.dll по прежнему в C:\Windows\System32. Пока все всё ещё довольны, но это уже не надолго.
3. Удаляет A.msi. В результате разрегистрируется и удаляется компонент A и, поскольку отмечено что этому компоненту принадлежит библиотека X.dll — удаляется и эта библиотека тоже! Windows Installer плевать что эта библиотека принадлежит еще и компоненту B. И вот тут все становятся несчастными…
4.… потому что при запуске приложения, которое было поставлено B.msi, это приложение не находит нашу X.dll и работать отказывается.

Если инсталляция B.msi сделана правильно и доступна в системе во время запуска приложения — начнется self healing, который восстановит библиотеку X.dll. Но даже если B.ms сделана как надо, self healing возможен не во всех системах разворачивания — например в той же HP OpenView нас ждёт облом, т.к. B.msi будет просто недоступна, в силу архитектуры самой системы. В результате на паре тысяч машин не запустится какое-то ПО. Если это Блокнот, то фиг с ним. А если это система обслуживания клиентов в банке у операторов?

Что бы такой фигни не происходило, нужно синхронизировать гуиды компонентов A и B. Тогда произойдёт следующее:

1. Система разворачивания устанавливает A.msi. В результате компонент A установился и зарегистрировался в системе, а библиотека X.dll стала в C:\Windows\System32.
2. Устанавливает B.msi. У компонента B тот же гуид что и у A. В результате у компонента A просто увеличился счетчик количества установок. Библиотека X.dll по прежнему в C:\Windows\System32.
3. Удаляет A.msi. В результате счетчик установок компонента A уменьшился на один. Сам компонент не удалился, библиотека X.dll на месте!
4. При запуске приложения, которое было поставлено B.msi, это приложение находит нашу X.dll и нормально стартует. Все довольны, все смеются.
Если выполнить
msiexec.exe /a %путь_к_msi% /qn TARGETDIR=%куда_распаковывать%
то в папке %куда_распаковывать% мы получим структуру каталогов, которые могут повторять структуру каталогов в %ProgramFiles%\%папка_продукта%. A могут и не повторять — зависит от того что записано в таблице Directory в MSI файле. В результате, если программа имеет возможность запуститься как Portable — её можно запустить из папки %куда_распаковывать%. Но для этого нужно что бы
* программа могла запускаться как Portable
* MSI не должна содержать custom actions без которых программа не ставится и не работает потом нормально (т.к. во время админустановки они не выполняться)
* MSI должна быть правильно сделана — например такая MSI как у инсталлятора JAVA работать на будет, т.к. внутри там один большой архив который распаковывается с помощью custom action
Я так понимаю MSI инсталляция которая обсуждается в данном конкретном случае — работает после админ. установки.
Административная установка кроме всего прочего нужна для того, что бы можно было пропатчить MSI-инсталляцию с помощью MSP (или нескольких), и потом устанавливать уже пропатченный продукт. Намного удобнее чем ставить а потом патчить. А ещё некоторые системы разворачивания (например HP OpenView aka Radia) требуют только админустановку.
Таки да! Microsoft — разработчики стандартов Windows Installer — в большинстве случаев сами этих стандартов не придерживаются. Пичалька, огорченьице, гневик…
Большинство клиентов, с которыми работала моя команда, предпочитали инсталляции без диалогов. Также практически все крупные клиенты (от 10 тыс. машин в филиалах по всему миру) предпочитали чистый не загаженный никакими авторскими примочками MSI. Обычный MSI, сделанный стандартными средствами, который можно запихнуть в conflict management system и сделать components conflict resolving, который без проблем ставится например MS SCCM, которые не даёт туеву хучу ошибок при валидации стандартным CUBом орки. И который легко кастомизировать через Property (хоть трансформом, хоть с командной строки). И который можно поставить из-под Local System, что в случае InstallShield иногда превращается в дикий геморрой. Вот что надо корпоративным клиентам.
У меня шесть лет опыта системного интегратора именно в изготовлении и/или затачивании MSI и не-MSI инсталляций для MS SCCM, HP OpenView, IBM Tivoli, а также для кучи самописных систем-«велосипедов» заказчика. За это время через мои руки прошло около трех сотен различных инсталляций. И вот что я, опираясь на этот опыт, скажу.

Уважаемые товарищи разработчики!

Если Ваше приложение планируется (хотя бы в перспективе) разворачивать в корпоративных сетях — не пишите никаких своих инсталляторов! Не надо, пожалуйста, я от имени всех системных интеграторов Вас очень прошу! Выучите уже наконец обыкновенный стандартный MSI и его штатными средствами сделайте обыкновенную нормальную MSI-инсталляцию! Без хитрых custom actions, без навороченных обёрток со своими командными строками, без InstallShield внутри. Если сами не умеете — доверьте это дело профессионалам, которые занимаются развёртыванием продуктов в корпоративных сетях. Честное слово, они лучше знают как надо это делать!

Со всем уважением, искренне ваши, системные интеграторы.

Извините, за шесть лет накипело.
> PS: Добавили в блок ссылок.

Спасибо, так намного лучше.
Перевод конечно дело хорошее, только я чего-то в тексте не нахожу упоминания первоисточника. Возможно я просто невнимательно прочитал — прошу прощения, если так.
Мне одному кажется что это перевод седьмого раздела книги «Gray Hat Python» by Justin Seitz (см. shop.oreilly.com/product/9781593271923.do)?
Как я уже задолбался выковыривать эту мейлрушную заразу с компьютеров родственников и знакомых. Пусть горят в аду те мейлрушные п… сы который это придумали! «Помсти хочу! Побачить цю падлюку на параші, за грою в „півника“ з неголеним убивцей! Або в канторі сраним інженером!» (с)

Извините, просто накипело.
Во время обучения в аспирантуре я видел математиков, которые были действительно отличными учеными в одних областях математики и полными фриками в других. Например я знал доктора наук, который в своё время совершил буквально революцию в теории случайных процессов, а потом вдруг увлёкся теорией чисел, совершенно «не своей» областью. В теории чисел он оказался полным фриком — доставал всех подряд якобы единственно правильными доказательствами большой теоремы Ферма в три строчки, и окончательным решением проблемы близнецов. Строил какие-то элементарные с точки зрения теории групп умозаключения и выдавал их за гениальные прорывы, при этом вводил свою терминологию, так что его мало кто понимал… его слушали, чисто из уважения перед прошлыми заслугами, и даже чем-то наградили по случаю юбилея АН. Ему даже удалось протащить свой бред в ВАКовский журнал — в связи с этим самым юбилеем (в вестник чего-то-там, обычную местечковую «мурзилку»)… к чему это я? А, да… иногда когда ученый талантлив в чем-то одном, но полный фрик в другом — иногда потом бывает очень трудно отделить зерна от плевел. И после смерти этого ученого, обычно с подачи журналистов, прижизненное безразличие других к его фриковскому бреду вдруг становится «травлей». А сам бред — «непризнаной теорией, к которой научное общество ещё не готово». Это я так, чисто мысли вслух :)
Ну у меня было пару идей, например:
(1) Прикрутить к Dalvik возможность по протоколу JDWP отзываться на вопросы вроде «Пауза! Какая инструкция выполнялась последней? Какое значение локально регистра v0?» Всё-таки исходники Dalvik открыты, можно поковыряться… Но времени нету, да и C++ программист из меня — как из говна пуля.
(2) Ещё была одна идея, которая заключалась в получении Smali кода (с помощью того же дизассемблера Smali), а потом патчинге этого самого кода так что бы его можно было потом отлаживать. Идея не очень изящная, такой себе мегакостыль…

Information

Rating
Does not participate
Location
Украина
Registered
Activity