You are viewing [info]develar's journal

juick убог — не парсит нормально ссылки и, главное, ну что за ограничение на объем ;) http://juick.com/develar/824160 придется сюда.

На встрече с Jetbrains также была затронута тема профилей для галочек Use IDE Builder — именно это решение пришло мне в голову, как тупому программисту, для решения описанной ниже проблемы (@yzh44yzh заметь, сколько запятых ;)).

В IDEA есть два способа скомпилировать модуль — Run/Debug with make before launch и Make Project.

При Run/Debug with make before launch будет скомпилирован тот модуль, что указан для runner, а также все его зависимости (модули входящие в его library path).
При Make Project все модули.

В обоих случаях модуль будет компилироваться только если для него отмечено Use IDE Builder.
Очевидно, что runner не подходит нам, если мы работает над 1) приложением (main swf) 2) динамически подгружаемый swf (стиль, плагин). Потому что никак по зависимостям модуля приложения нельзя определить, что нужно скомпилировать некие плагины.

Что я хочу как разработчик — минимизировать время компиляции. В настоящее время IDEA быстрее всех компилирует и только в ней наиболее быстрый отклик. Я и мои коллеги довольны. Мы имеем грамотно разбитый проект на модули и, выставив галочки Use IDE Builder, имеем почти мгновенную компиляцию. Но ставить эти галочки, ага, напрягает.

Что мне ответили в Jetbrains — а зачем вы расставляете галочки, если мы реализовали для больших проектов parallel compilation with up to n mxmlc/compc processes? Типа один раз соберите проект и все — IDEA то уже давно не дергает убогий компилятор, а сама проверяет актуальность и необходимость компиляции модуля. 5 месяцев назад я уже выразил свое мнение, очевидное любому — http://juick.com/develar/549041 — сосет эта техника и проигрывает — не, мой коллега, у которого руки никак не дойдут настроить linux нормально (java машину) ей пользуется, но по скорости оно проигрывает в разы. А с fcsh, очевидно, собрать 50 модулей не получится. Да и вообще, что за детский сад — компилятор от Adobe настолько убог, что собирать целиком большой проект в самой среде это идите вы в лес — в разы проще и надежнее запустить сборку мавеном и он гарантированно и за гарантированное время соберет проект.

Собственно, надеюсь, проблему я осветил и осветил понятно. И в очередной раз убедился, что они мыслят как Apple — собственно именно этим IDEA отличается от прочих IDE — Александр Дорошко четко сказал о профилях что "это чуждо IntelliJ IDEA". И правда — предложенное решение абсолютно смешно и унижает Jetbrains до уровня Adobe — мы то (клиенты компании) можем попросить и выработать, благодаря их открытой позиции, более лучшее и незаметно, но эффективно работающее решение.

И такое решение действительно есть (это и есть цель этого поста ;)) — а что если IDEA будет просто следить за разработчиком и запоминать, в каких модулях он произвел изменения в текущем сеансе работе (скажем, от момента открытие проекта до закрытия, или по Swith to Task)? По умолчанию все модули чистенькие, их компилировать не надо (полная сборка выполнена мавеном/антом/либо для новичков дать возможность нажатия кнопки которая запустит тотальную parallel compilation with up to n mxmlc/compc processes). Раз модуль стал dirty (то есть я внес некие изменения в его файлах) — значит нужно будет его собирать если это понадобится (а понадобится если он указан для runner или зависимость модуля runner, или просто make project) (а пометка то что он уже чистый и так реализована в IDEA — то есть если на второй компилции в рамках сеанса я внес изменение только и только в другой модуль, то мой первый не будет перекомпилроваться — IDEA то сама следит за актуальностью, а не дергает для этого убогий компилятор). Как вам?

Если Jetbrains одобрит эту идею и реализует — ммм... как кофе со льдом от @Constantiner ;)

Но тут есть два момента, которые немного радужную картину портят.

1) Предположим, у вас есть библиотека Cocoa (swc). От нее зависит два приложения (swf) (webEditor и assetBuilder) и стилевой плагин xpBlue (которые динамически подгружается в оба приложения). Я вношу изменения в стилевой плагин xpBlue и пользуюсь make project (это ведь динамически подгружаемый swf). Потом run но без make для webEditor. Потом run но без make для assetBuilder. Потом вношу изменения в Cocoa — что произойдет при make project? — да — будут скомпилированы оба приложения (так как они оба зависят от Cocoa) — а мне то ни черта это не нужно, если я потом делаю "run но без make для webEditor" (то есть в данном случае абсолютно зря был скомпилирован assetBuilder). Как можно решить эту проблему? Ведь для IDEA и xpBlue, и assetBuilder являются swf. Можно ввести особый make в runner — типа компилировать весь проект за исключением тех модулей, для которых есть runners (то есть IDEA по такому критерию сможет различать xpBlue и assetBuilder) — но это порнография, да ;) Поэтому проще в разы будет повесить сеансы слежения не на факт открытия/закрытия проекта, а на Swith to Task (а кого Swith to Task будет не устраивать — ну, таки не велика особенно проблема эта, модули приложения то обычно очень маленькие, там только Main).

2) Тот же самый пример, только с тем нюансом, что стилевой плагин xpBlue зависит от библиотеки aquaLaF (swc). Вношу изменения в aquaLaF. Делаю make project. Как IDEA поймет, что нужно скомпилировать xpBlue? Никак. Можно компилировать все модули зависимые от aquaLaF (их список можно получить по Analyze -> Analyze Module Dependencies). Штука в том, что в случае с ручными галочками у нас не будет компилироваться весь список — я то с любовью галочки поставил где нужно. А в случае предложенного решения я буду иметь каждый раз при изменении aquaLaF определенный overhead (в реальном примере в 6 раз — то есть у меня с ручной галочкой будет компилироваться 1 модуль, а с автогалочкой все 6). Тут нужно еще подумать.
Tags: ,
 
 
26 October 2009 @ 11:03 pm
Дьявол напротив @Сonstantiner уже давно поставил лампочку. http://juick.com/yelbota/331724
 
 
17 October 2009 @ 09:08 pm
http://juick.com/develar/323963

1) все сервисы по сокращению ссылок бред — я не знаю куда она ведет.
1.1) сокращение по домену уже лучше, но я не хочу вглядываться в статусную строку (+мало кто (хабрапарсер вообще анекдот) в силу непонятных причин может написать нормальный парсер — чем loadingSubApps.pdf не угодил).
2) Дизайн жуйка ужасен — а на 1920 он также будет таким узеньким? Мак-юзера, привыкшего к элегантности, шокирует.

Update: парсер на juick зафиксили ;)
 
 
16 October 2009 @ 07:48 pm
Черт, как тяжело быть flash-программистом. В PHP я могу реализовать свой кастомный ClassLoader. В Java тоже (наверное, сам не писал). А в этом flash мы имеем негибкую единственную систему поиска класса по child->parent chain. А если мне надо иметь двух родителей? И как бы можно загрузить в один домен, но тогда GC не сработает.
 
 
16 October 2009 @ 10:01 am
http://develar.livejournal.com/93029.html — Строка 4251 в CompilerAPI. Ржем. QA в Adobe отдыхает. Тестов на эту важную фичу Flex явно нет (а ведь он очень прост — всего-то проверить что include-resource-bundles равен итоговому). Грязный хак работает. Видимо, они просто не рассчитывали на реальное использование своего продукта — потому что overhead в 95% случаев минимален, а проблем с definition не будет в силу принятой политики appDomain. Но, все равно, если написать эту логику изначально нормальным программистом, то все будет работать изначально правильно безо всяких отсылок на "90% customers в этом не нуждаются".
 
 
15 October 2009 @ 08:22 pm
Если указать include-resource-bundles, то что будет в итоговом resource module? Ошибаетесь — в итоговом будут не только указанное вами, но и все, что будет найдено компилятором по ResourceBundle. Казалось бы — установить use-resource-bundle-metadata в false — но в этом случае вы получите скомпилированный модуль с нормальным factory (то есть factory будет содержать список якобы содержащихся resource bundles), но без соответствующих классов.

Если не пользоваться flexmojos, то вот такое стандартное убогое поведение компилятора не приводит к печальным последствиям — потому что без явного подключения библиотек будет включено только core properties.
А flexmojos линкует в external все зависимости текущего проекта — ведь property это не только строка, но ClassReference, Embed. То есть как бы может Adobe и думала при написании компилятора чуть-чуть и вставка core является валидным поведением (хотя зачем нам core, если модуль как resource part от app module) — но все равно это никак не есть нормально — потому что если вам будет нужен ClassReference, вам придется слинковаться — а в линкуемой библиотеке как раз и будут эти самые нам не нужные ResourceBundle metadata.

Причем такое поведение только для Application Builder — в Library Builder use-resource-bundle-metadata работает нормально (видимо, потому что запаковать текстовый файл в zip просто :)).

Такие баги из разряда "о них не пишут". Впрочем, Марвин уже послал Adobe с их ужасным compiler API, так что мы (Марвину не нужно особо runtime resource modules, так что придется патчить) решим эту проблему в следующих выпусках flexmojos, ну а пока что можно тупо (нормально запатчить не получится — фактически проще будет переписать) запатчить компилятор напрямую.
 
 
14 October 2009 @ 04:39 pm
Восстановил пропуск на работу, отобранный ментами (http://develar.livejournal.com/91838.html). Хм, как было б отлично, если б менты делали свою работу, молча. А так нормальная ситуация — сотрудник РЖД, в должности контроллера/поездной кассир, призванный следить за порядком и за уплатой пассажиров всего то, что нужно, вместо этого спрашивает у меня после турникетов — "сегодня была нормальная смена" (потому что, в отличие от ментов, у них мозги у него все же остались и они прекрасно понимают маразм текущего отношения РЖД к велосипедистам)?
 
 
13 October 2009 @ 01:17 pm
А вы уже установили в IDEA шрифт Menlo вместо Monaco и изменили размер с 12 до 11 ;)? http://arstechnica.com/apple/news/2009/06/font-changes-coming-to-mac-os-x-snow-leopard.ars

Update: IntelliJ IDEA не может корректно отобразить данный шрифт.
 
 
13 October 2009 @ 09:40 am
https://bugs.adobe.com/jira/browse/SDK-23672

Хм. Интересно, они вообще jira ставили только для отмазки? Ни тебе wiki-разметки, ни прозрачной линковки. Плевать — буду по прежнему использовать разметку, так как привык, а потом надо будет как-то их уговорить улучшить это дело.

Мы, наша команда молодых flex-програмистов, в компании, преимущественно занимающейся разработкой игрой на приставках (наш отдел раз в 10 меньше), создали для себя удобную среду: вместо хождений тестеров с "а соберите нам версию", у нас teamcity; вместо разбросанных по разным документам/письмам у нас вся информация в confluence (+ частично в jira, откуда и идет отсылка (applinks)), вместо доморощенной убогой bugdb — jira (пока ее хватает, да, trackstudio (про youtrack, из-за абсолютно неадекватного названия (как вообще могли придумать такое имя? у меня как у велосипедиста напрягаются руки и улыбка расползается, но я то тут, в офисе, а не в лесной глуши в соснах) даже и смотреть на своем сервере не стал) лучше, но пока мне как программисту достаточно).
 
 
12 October 2009 @ 08:38 pm
Если на фото на документы у вас прическа аля шлем кросскантри и вы в термофутболке.