Pull to refresh
51

Погромист

15
Subscribers
Send message
14 раз вас впечатлили? ;-)

Это делается один раз в полгода, не чаще, да и дел на вечер каждый раз. А что не на вечер то хуже — надо новый облачный индизайн поставить и проверить, а работает ли. Если да — то поправить инсталляторы (два штука), и все, «запортировал».

Последний раз было весело с примером — в cs6 он изменился, там перекрывать надо было на два метода больше. А если не — то дефолтная имплементация мастерски обрабатывала только первый дропнутый на индезигн файл, и все. А все остальные добавляла в линки тихонечко. Вот это был квест на неделю, хех.

Ну, вот в этот раз слегка вышел за рамки одного вечера — зато есть тема ;-)
Если бы я это делал сейчас — я бы обязательно прицепил CMake, ну а менять то что работало как часы с 2006 года… я лучше этот кошмар из говна и палок еще потерплю ;-)

К слову, эти палки выглядят так:

OSSDK=/Developer/SDKs/MacOSX10.5.sdk
ASDK=/Developer/SDKs/id8.0sdk

OSX_MIN=10.5

CFLAGS+=-DMACOSX_SDKVERSION=1050 -DSUITE_VER=CS6

ASDK_INCLUDE=-I$(ASDK)/build/mac/Release/SDK/include

ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/tooltips
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/menus
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/dialogs
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/dialogs/selectabledialogs
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/treeview
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/events
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/includes
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/utils
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/view
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/pageitems
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/pageitems/basicinterfaces
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/trackers
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/widgetbin/graphics

ASDK_INCLUDE+=-I$(ASDK)/external/dva/third_party
ASDK_INCLUDE+=-I$(ASDK)/external/dva/third_party/boost_libraries
ASDK_INCLUDE+=-I$(ASDK)/external/dva/third_party/adobe_source_libraries

ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/objectmodel
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/streaming
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/localization
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/commondata
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/strings
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/structure
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/foundation
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/plugins
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/commands
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/events
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/files
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/utils
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/statics
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/resourcedefs
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/measurementsystem
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/pageitems
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/pageitems/basicinterfaces
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/scripting
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/graphics
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/links
ASDK_INCLUDE+=-I$(ASDK)/source/public/libs/publiclib/messaging

ASDK_INCLUDE+=-I$(ASDK)/source/public/includes

ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/sharedcontent
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/colormgmt
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/cjk
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/interactive
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/interactive/ui
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/server
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/preflight
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/tables
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/layout
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/xmedia
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/utils
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/architecture
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/incopy
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/workgroup
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/text
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/graphics
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/contentdropper
ASDK_INCLUDE+=-I$(ASDK)/source/public/interfaces/ui

ASDK_INCLUDE+=-I$(ASDK)/source/open/includes
ASDK_INCLUDE+=-I$(ASDK)/source/open/includes/interactive
ASDK_INCLUDE+=-I$(ASDK)/source/open/includes/widgets
ASDK_INCLUDE+=-I$(ASDK)/source/open/includes/layout
ASDK_INCLUDE+=-I$(ASDK)/source/open/includes/utils
ASDK_INCLUDE+=-I$(ASDK)/source/open/includes/architecture
ASDK_INCLUDE+=-I$(ASDK)/source/open/includes/text
ASDK_INCLUDE+=-I$(ASDK)/source/open/includes/ui

ASDK_INCLUDE+=-I$(ASDK)/source/open/interfaces/interactive
ASDK_INCLUDE+=-I$(ASDK)/source/open/interfaces/preflight
ASDK_INCLUDE+=-I$(ASDK)/source/open/interfaces/layout
ASDK_INCLUDE+=-I$(ASDK)/source/open/interfaces/architecture
ASDK_INCLUDE+=-I$(ASDK)/source/open/interfaces/incopy
ASDK_INCLUDE+=-I$(ASDK)/source/open/interfaces/text
ASDK_INCLUDE+=-I$(ASDK)/source/open/interfaces/graphics
ASDK_INCLUDE+=-I$(ASDK)/source/open/interfaces/ui

ASDK_INCLUDE+=-I$(ASDK)/source/precomp/gcc
ASDK_INCLUDE+=-I$(ASDK)/source/precomp/common

ASDK_INCLUDE+=-I$(ASDK)/source/sdksamples/common

ODFRC_DEFS=-d ID_CS6

CFLAGS+=-fmessage-length=0 -pipe -O2 -fpascal-strings
CFLAGS+=-fasm-blocks

#InDesign specific

CFLAGS+=-Wno-trigraphs -Wreturn-type -Woverloaded-virtual -Wmissing-braces -Wparentheses 
CFLAGS+=-Wunused-function -Wunused-label -Wunused-value -Wshadow -Wno-deprecated-declarations
CFLAGS+=-Wchar-subscripts -Wimplicit -Wsequence-point -Winit-self -Wmissing-field-initializers 
CFLAGS+=-Wpointer-arith -Wcast-align -Wpacked 
CFLAGS=-fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics 

#Defines
CFLAGS+=-DMACINTOSH -DBIB_NO_THROW -DMACTEL_SKIP

#Includes
CFLAGS+=-I$(OSSDK)/Developer/Headers/FlatCarbon
CFLAGS+=$(ASDK_INCLUDE) 

#Frameworks
CFLAGS+=-F$(ASDK)/build/mac/release/packagefolder/contents/macos 
CFLAGS+=-F$(ASDK)/build/mac/release/packagefolder/contents/Frameworks 

# odfrc
ODFRC=$(ASDK)/devtools/bin/odfrc-cmd
ODFRC_DEFS+=-d NDEBUG -d MACINTOSH -d __GNUC__

LDFLAGS+=-L$(ASDK)/build/mac/release/packagefolder/contents/macos/libs 
LDFLAGS+=-F$(ASDK)/build/mac/release/packagefolder/contents/macos 
LDFLAGS+=-F$(ASDK)/build/mac/release/packagefolder/contents/Frameworks 
LDFLAGS+=-framework InDesignModel
LDFLAGS+=-Wl,-executable_path -Wl,$(ASDK)/build/mac/Release/packagefolder/contents/macos/ 
LDFLAGS+=-lPublicPlugIn 

LDFLAGS+=-Wl,-dead_strip
LDFLAGS+=-Wl,-single_module 

Rez=/Developer/Tools/Rez 
RezFlags=-o $@ -d SystemSevenOrLater=1 -useDF -script Roman $(CFLAGS) $(ASDK)/samplecode/common/includes/MachOMacrezXcode.h

ifeq (x64,$(ARCH))
CFLAGS+=-arch x86_64
LDFLAGS+=-arch x86_64 -dynamiclib
RezFlags+=-arch x86_64
else
CFLAGS+=-arch i386
LDFLAGS=-arch i386 -dynamiclib
RezFlags+=-arch i386
endif


И так 14 (!) раз. Потому что меняется все — порядок, наличие, форма записи, и прочее.

Под виндой например первых пара каталогов в списке должны быть именно так, иначе вся эта конструкция падает в произвольных местах:

# FIRST LINE IS FOR odfrc AS IT  DOESN'T SUPPORTS SPACES IN PATHS
ASDK_INCLUDE=$(AdobeSDK)\source\precomp\common;$(AdobeSDK)\source\precomp\msvc
ASDK_INCLUDE:=$(ASDK_INCLUDE);$(AdobeSDK)\source\public\includes


Из ~75К мейкфайлов — 65 180 байт это как раз список путей и адобоспецифических флажков. И каждая новая версия — добавляет еще 10-15К ;-)
Там самое веселое — зависимости поразгребать, руками. Помню долго искал этот клятый tzcode, ибо нету давно того сайта где он жил. Хвала гитхабу — не дал пропасть…

sudo zypper install libuuid-devel libicu-devel 

cd tzcode
make
sudo make install
cd ..

cd opencflite-476.19.0
./configure
make
sudo make install
cd ..


и только потом — шаманства из ридми ;-)
Вообще-то это не совсем так… Точнее, совсем не так.

Советский мопед на четыре буквы (Ц) мы используем не потому что там что-то дешевле — дороже. А потому что без всех тех ништяков, которые дает нам Java, можно решить намного меньшей сложности задачу в те же сроки и в тот же бюджет.

Фактически, это означает вот что — или мы делаем блоатварь, которая хоть как-то решает задачу, или не решаем никак. Ибо 10х времени и 20х бюджета на ту же задачу — это ненаучная фантастика.

Вот пользователь и выбирает — шикарно детализированную графику Doom 3, или pixelation древнего wolfenstein: spear of destiny, которпый когда-то был на острие прогресса, а теперь напоминает потерю контактных линз на -8 диоптрий.
Эк у вас N*2 на железки-то, чай не ВЦ РАО ЕЭС. Если это не тиражируемое решение, то это 0.005*N ;-) Почему так? А на амортизацию в 10 лет или сколько там положено, разделите.

А если тиражируемое — то надо смотреть тираж. Экономия в 50 центов на миллион устройств — это ого-го, это на три рефакторинга хватит и еще на фичи останется.
А как его отделить от остальных? У всех в резюме — 20+ лет опыта и $1k, и никаких особых подробностей. Из них даже Сергей неочевиден, потому как он четко понимает «стремность» своего резюме и скрывает в нем часть своих работ.

Я в общем все типажи видел живьем ;-)

И честно говоря, не советую брать никого из них.

— Ринат — в силу своих болячек — часто на бюллетене. Его проще взять на удаленку на изолированную задачу и пусть бы дома работал, но много ли у вас в команде таких работ? Кстати Ринат это прекрасно понимает и сам, поэтому начинает процесс восстановления с одеска, и уже после приходит на те же $3k.

— Захар — временщИк, успевающий сбежать до того как пройдет обучение и начнет приносить пользу. Плюс в силу доиндустриальной психологии еще и может нанести вам ущерб — банально «пристроив» ваши наработки следующему работодателю. Или вам — от предыдущего.

— Сергей — еще хуже Захара, он еще и готов поскандалить без повода. «Я работаю полгода — где мой бентли у порога?»

— Олегу просто тесно в таких условиях, но нормально работать за нормальные деньги у него анти-мотивация. Не, если его женить второй раз… Но тут уж извините, стОит ли овчинка выделки? Да и не готов он обсуждать свои семейные дела ни до ни на собеседовании.

— Алексея даже обсуждать незачем, он в силу опыта еще и необучаемый.ФоксПро 2.6 for DOS — вот его призвание. У вас есть для него работа? У меня не нашлась.

Так что Ринат с Олегом выглядят лучше прочих — но увы, без некоего инсайда вы их от Сергея с Алексеем по формальным признакам не отличите. Да и времени надо будет больше и подход особый подбирать. Может лучше классического лида за $3k? ;-)
Дело в том что он как бы так невзначай попадает в очень странную компанию

быдлокодеров, так и не освоивших азы профессии,
— неудачников, за свою столь длинную карьеру профакапивших кучу проектов,
— героев черных списков местного региона,
— знаменитых скандалистов,
справедливоборцев,
бегунов, за эти 20 лет сменивших 40 мест работы,
— людей, банально выпавших из профессии на долгий срок и вынужденных восстанавливаться,
— просто фриков, не уживающихся в коллективе,

и так далее.

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

Да, случаи бывают разные. Но донести об этом можно только на собеседовании, а как подсказывает нам топикстиартер — до него еще дойти надо. И нет, в резюме далеко не все можно написать.

Приведу пару примеров.

1. Ринат. Полжизни занимался банковским софтом, высококлассный специалист. Но его сбила машина, и он год восстанавливался, получил инвалидность. В силу того что он последний год просто болел, хочет мало. Ему важно восстановить навыки. Об инвалидности в резюме писать стесняется.

2. Захар. Фрик, осуществивший свою мечту жить на острове, копать ямы на экскаваторе, и жить в халабуде вместо питерской квартиры на Васильевском. Увы — ему иногда нужны деньги, поэтому он прыгает в свой авианосец с подвесным мотором, плывет в город, и устраивается в странные места, чтобы работать поменьше. Ну, просто потому что денег надо на солярку к экскаватору,. Работает максимум полгода, потом к весне пропадает с экранов и появляется на острове. В силу «работать поменьше» и минимальных потребностей — просит столь же скромную зарплату. О своих тараканах в резюме не пишет.

3. Сергей. Уникум, за пятилетку сменивший 10 мест работы. Рекорд на одном месте — 1 год 1 месяц (очевидно, не продлили контракт). Каждый раз формулировка столь поспешного ухода — мало платят, не оценили. В силу странностей резюме — в нормальных местах его на собеседования больше не зовут. А кушать хочется. Демпингует.

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

5. Алексей. Огромный опыт, скоро пенсия, но зарплата не растет. Высокотехнологичный потомок царя Мидаса, за что не берется все превращает в эпикфейл. Почему? Потому что у него кличка «атомные часы». Сегодня релиз? Мне на электричку, в спортзал, в бассейн! Как результат — все 20 лет на подхвате на позиции юниора. Нарисовать скрипт миграции БД, поправить инсталлятор, резолвить «неспешный» тикет… Всю жизнь получает столь же мелкую з/п и о другой не мечтает.

И кого из этой пятерки вы готовы взять к себе в дрим-тим? 8-)
Вероятно, в вашем случае $1k и 20+ лет стажа не коррелируют.

Это почему гуру с фантастическим опытом хочет получить зарплату юниора? У любого менагера сразу в мозгу должен транспарант зажечься «что-то не так!» 8-)
Ай, цикл забыл. Посыпаю лысину пеплом.

SP-Forth я вообще в глаза не видел, в первой половине 1990х там другие игрушки были. С тех пор кстати у меня идиосинкразия на «кричащие» фортовсеие идентификаторы. В своих собственноручно налепленных интертрепаторах из принципа все писал в lowercase ;-)

Но nextname ранее реализовывался на раз — подсовыванием токена в pad, то бишь входной поток. Или подсовыванием своего эрзаца входного потока. Вот мне стало интересно — а что, такая техника уже не работает?

: variables( 
    begin 
        parse-name dup s" )" =s not dup 
    while
        if nextname create 0 ,  then 
    repeat
    drop 
; immediate

variables( a b c d e f )


Кстати, в gforth nextname есть. Не поленился глянуть — и на самом деле входной поток подменяет.
Я конечно давно не брал в руки шашку, лет 15ть уже.

Но простите — а нечто вроде такого — не комильфо?

: variables 
    parse-name dup s" END" strcmp not if nextname create 0 , then ; immediate


и пишем стандартно

variables a b c d e f END

А смысл?

Проще заморочиться с созданием собственного сервиса, который обрежет токену права на OpenProcess при запуске, и все такие вещи прокидывать через него.

Или еще чего похуже.

И ровно для того чтобы сделать — например in-memory-patch. И никаких проактивок ;-)
Да, чуть не забыл.

А у проактивки есть вообще фатальный недостаток. Прежде чем обезвредить пакость — разве ей обязательно надо дать запуститься?

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

Если уж говорить о правилах — то надо забыть про антивири как таковые и переходить к IDS ;-)
Эмм, это вы про что сейчас? Классический «скан пофайлово» — таки да, безобразно медленный. Но вы его не постоянно запускаете, а в случае заражения или подозрения на таковое, не? Проблема кстати родственная chkdsk ;-)

А все эти «реал-таймы» что сигнатурами что «про-активкой» — сплошное вредительство.

Почему бы эти сканы не осуществлять не в момент записи файла на блин / чтения с оного, а в тот момент когда это счастье к нам приезжает из интернета? Отличная же вещь — плагин к браузеру, быстро, надежно, все сигнатуры наисвежайшие.

Такой же к почтовому клиенту с мессенджером — и вот оно, 80%+ периметра домохозяйки — защищено. И никаких реалтаймов.

Я согласен на долгий скан в реал-тайме — но только в строго отведенных для этого папочках типа «My Downloads». Где такой антивирь, эх…
Сигнатуры дают меньше ложных срабатываний.
Вот совершенно правильный подход.

Я бы даже добавил такой момент — ребята, я все понимаю, кризис жанра и т. п. Но полагаться «на два лаптя правее солнца» в деле false positives — реально бесит и создает серьезные проблемы.

Не существует «зловредных техник», и связку в виде CreateProcess + MapViewOfFile можно прекрасно использовать в «мирных» целях. Более того — в свое время именно так поступала всем известная игрушка «stacraft». Да-да, пак с ресурсами был прицеплен к install.exe…

А белые списки — никаких чудес кроме коррупции, как это было в свое время со спамкопом и К. Хотите попасть в белый список / выйти из черного — занесите немножечко денежек.

Лучше уж сигнатуры. По крайней мере меньше вреда.
Кстати это было бы шикарным решением.

Как в анекдоте
— Третий раз скачиваю уиндоус 95, а на выходе осьдва!
— Так модем же с коррекцией ошибок!

;-)
Так это будет «закрывать дырки правилами взамен сигнатур», не?
И по факту мы имеем вами пересказанную страшилку. Злые враги под кроватью бла-бла. Уж извините за прямоту.

Для России самое важное — это получить доступ к современным технологиям. Меньше снобизма — больше пользы.

Можно например начать с покупки устаревших линий в Китае для переработки нефти.

Или всем этим головным НИИ — изобретающих очередную нетленку с неонкой унутре! в принудительном порядке свои труды решительно делать open source. И принудительно все наработки основывать также на open source. Это даст хороший толчок развитию АйТи, будет в русле общемировых тенденций, и позволит активно создавать что-то новое и полезное всему миру.

Необходимо всемерно упрощать и удешевлять доступ к общемировым знаниям. Всячески поощрять создание новых систем, комплексов, сетей, что там так красочно перечисляют на канцелярите…

Вспомните позорище со школьным порталом. А если бы он изначально создавался как опенсорц — в виде репозитория на гитхабе? Глядишь этот школьный портал был бы переведен уже на 20 языков и массово внедрялся бы по всяким там Бразилиям. А то под барабанную дробь получилось прокормить несколько жуликов и дать поработать нескольким узбекским программистам. Увы…
Причем тут ФСТЭК, простите? Что есть «критически важные» — это давно сформулировано, я же не призываю все бросить и ничего не защищать.

Однако же относить к таким мишен-критикал объектам банальную водокачку в селе Гадюкино — как-то странно. И тем более странно требовать на объекте коммунального хозяйства строго лицензированного оборудования для защиты от атак злых хакеров.

Просто потому что последствия таких атак очень быстро восстанавливаются — выдирается соска из хаба и накатывается софт и настройки из бэкапа. После чего накатываются апдейты — и вот она штатная работа восстановлена. Полчаса в районе не будет воды, это максимальный ущерб. В отличие от обычной лопнувшей трубы или планового тестирования теплосетей каждое лето, хехе.

Про веерные атаки и вирусы — это как раз прекрасно не только считается но и обеспечивается приемлемый уровень безопасности стандартными средствами, тут разницы нет — банк это или водоканал. Апдейты, антивирь и бэкапы. Дешево и сердито, и от кучи других проблем спасает. Это же не реактор в Бушере.

А специфичный вирус под весьма специальное оборудование в публичных сетях запускать бессмысленно за отсутствием объекта атаки.

Преднамеренное нападение на объекты инфраструктуры из интернета в военном конфликте — это уже киберпанк, простите. Динамит тут гораздо эффективнее. Пока все пугаются и все защищаются, но страдают малозначимые сайты от примитивнейших атак.

Ну и вспоминая классика, от изобретательного дурака защиты нет. Поэтому успехи органов меряются не наличием воров, а умением их обезвреживать. Померился «лулзами» — присел лет на семь, отличный вариант ;-)

Information

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