Чтобы разобраться, зачем нужен проект FlexCover, обратимся к определению:
Покрытие кода — мера, используемая при тестировании ПО. Показывает процент покрытия исходного кода программы тестами (дальше читайте в Википедии).
Что такое Flexcover? Это инструмент покрытия кода для Flex, AIR и AS3-проектов. Он включает в себя модифицированную версию AS3-компилятора, которая добавляет некоторые дополнительные вызовы функций в результирующий код SWF или SWC-файла. Во время выполнения эти вызовы функций посылают информацию о покрытии кода приложения отдельному инструменту CoverageViewer.
Модифицированный компилятор также генерирует отдельный файл "метаданных покрытия" ("coverage metadata"). В этом файле описаны все возможные пакеты, классы, функции, блоки и строки кода, а также имена соответствующих файлов с исходным кодом.
См.: сайт проекта FlexCover (cоотвествующие модификации Flex SDK можно найти в проекте flexcover-sdk на Google Code), скриншот инструмента FlexCover в работе, сайт автора — Джозефа Берковица и его объяснение покрытия условий. А вот флекс-титан Александр Гахов сделал много хороших закладок с тэгом Ant.
И еще ссылка по теме: Модели зрелости процесса тестирования ПО.
Ну что флексеры и флэшеры, попадем в мир взрослого девелопмента?
Недавно Андрей Микитюк задал мне простой вопрос — как отменить биндинг переменной во Flex? Честно говоря, я не смог ему ответить, зато он сам нашел готовый ответ в блоге одного из индийских Flex-евангелистов Raghunath Rao Thricovil, или просто — Raghu.
Тем, кто еще не в курсе, напомню: связывание, или биндинг данных (data binding) — одна из мощных фишек Флекса. Фишка в том, что переменная a связывается с переменной b и после этого значение a будет изменяться каждый раз, когда изменится значение b — они связаны (binded). Один из простейших примеров — текст, вводимый в поле ввода, автоматически появляется в другом месте приложения при вводе / удалении каждого нового символа. При грамотном применении биндинг позволяет сэкономить кучу кода и времени. Для начинающих (и не только) есть пара коротких уроков по биндингу — очень рекомендую.
a
b
bindProperty
unwatch()
Вообще, у Raghu весьма полезный блог.
Представьте, что вы обнаруживаете в своем Flex-приложении баг, внесеный не вами, а разработчиками самого фреймворка. Ошибка явно находится в одном из "родных" классов. Вы даже знаете, как этот баг исправить, да вот как заставить Flex Builder это исправление подхватить без перекомпиляции всего фреймворка, ведь вы обычно работаете с уже готовым, представляющим фреймворк SWC-файлом типа 'framework.swc', а не c его исходным кодом, который так заманчиво доступен?
Чтобы быстро исправить ошибку Flex SDK для своего приложения, достаточно скопировать из фреймворка в свой проект соотвествующий файл класса с багом и разместить его в том же пакете. Например, класс mx.collections.Sort пойдет к вам в каталог src/mx/collections/Sort.as. Как правило, файлы классов включают также и дополнительный файл с версией фреймворка, так что скопируйте аналогичным образом и mx.core.Version.
mx.collections.Sort
mx.core.Version
Теперь ваш класс будет перекрывать оригинальный класс из Flex-фреймворка, и любые ваши изменения в этом классе войдут в приложение, как будто бы они были внесены в сам фреймворк.
-incremental=true
Проблема легко решается, достаточно один раз "прогнать" проект через компилятор с отключенным кэшированием, а затем можно снова включить его. Чтобы отключить кэширование, зайдите в диалог свойств проекта Properties for [имя проекта] > Раздел Flex Compiler. Там в поле "Additional Compiler Arguments" добавьте через пробел один аргумент: -incremental=false и дайте проекту "сбилдиться". Затем вернитесь в этот же диалог и удалите добавленный параметр, таким образом вернув инкрементальную компиляцию по умолчанию.
-incremental=false
Как вы знаете, Flex-компонент AdvancedDataGrid (ADG) дает такие возможности, что старый добрый DataGrid (DG) начинает нервно покуривать в сторонке. Кратко о новом в AdvancedDataGrid:
textAlign
horizontalAlign
verticalAlign
Но небольшой баг тут все же есть. Во-первых, разработчикам Flex SDK стоит поддержать 'старое' свойство стиля textAlign (используемое в DG), продублировав в нем поведение нового horizontalAlign, чтобы лишний раз не конфузить разработчиков. Во-вторых, в документации к компоненту стоит явно указать это различие между ADG и DG, и вообще все такие мелкие различия, так как тема актуальна.
А вообще — AdvancedDataGrid очень и очень радует.
Новость от 3 декабря 2003 года:
"Flex -- это новая серверная технология. Brady -- это визуальная среда для разработки и отладки Flex-приложений. Partridge -- это проект внедрения инструментов разработки Flex в популярную бесплатную среду разработки Eclipse.
Таким образом Macromedia продолжает внедрение в среду опытных, профессиональных разработчиков, предлагая им средства для расширения функциональности "классических" приложений. Основная идея состоит в том, чтобы скрестить мощь и производительность десктоп-приложений с гибкостью и коммуникабельностью интернет-разработок.
Отвечая на часто задаваемый вопрос: "А как же Longhorn, Avalon, XAML, Sparkle и т.д.", представители Macromedia заявляют следующее: "Да, эти новые продукты и технологии от Microsoft похожи на то, в чем мы были и продолжаем быть первыми. В обоих случаях используются описания из XML-конструкций, компонентые решения и веб-сервисы для связи приложений. Мы не сомневаемся, что эти две среды будут взаимно обогащать друг друга."
Вдумайтесь: чуть менее, чем через полгода, Флексу исполнится пять лет.
Если вы еще не знаете: уже более двух недель Adobe бесплатно и официально раздает Flex 3 Professional студентам, аспирантам и образовательным учреждениям всех стран. Вряд ли Адоби передумает, но я все же рекомендую вам поспешить воспользоваться этой возможностью. И не забудьте поделиться хорошей новостью с друзьями. Потому как такая раздача пряников — сами понимаете, дело правильное и не каждый день бывает.
Чтобы получить Flex 3 Professional бесплатно, нужно предоставить доказательство вашей прямой причастности к образовательной сфере и получить в ответ серийный код продукта. Правильными доказательствами будут:
Что за крики я слышу? "Рост, ты что, забыл перевести текст в списке!" Нет, я не забыл. Я всего лишь уверен, что человек, осиливший этот перевод самостоятельно, сможет осилить и Флекс; верно и обратное. А если серьезно — я просто опасаюсь кривым переводом исказить информацию. Лучше разбирайтесь на местах, что из этого списка подойдет для вас. Я так понимаю, что отсканированного студбилета или удостоверения аспиранта / работника будет достаточно (первые три пункта). Также подойдет и бумажное письмо на бланке учебного заведения, подтверждающее ваш образовательный статус (четвертый пункт). Знающие — пожалуйста, поправьте меня, если я не прав.
Есть и FAQ по вопросу бесплатного Flex 3.
Друзья! Спасибо за помощь в выборе нового сервера для Flex-вики. Персональное спасибо Алексею Солодовникову, он связался со мной и предложил свой сервер в Европе для тестирования (кажется, писал не только он, но я сейчас нашел только его письмо).
А самое бесповоротное спасибо Денису Кузнецову, который помог выбрать окончательное хостинговое решение. Теперь нужно убедиться, что это _именно _то _что _нужно и окончательно переехать Флекс-вики.
Собственно просьба: скажите, быстрее ли работает Flex-вики на новом хостинге, чем на старом? (Если найдете ошибки в кодировке — пожалуйста, укажите адреса страниц).
Команда AnyChart.Com Team продолжает радовать. На этот раз они раскопали, как создать кастомный design-time preview для своих Flex компонентов. Привожу русскоязычный вариант статьи (оригинал тут) от авторов:
Иногда необходимо сделать кастомный Design-time Preview для компонента (это его вид в "Design View" Flex Builder-а). Для этих целей в Adobe Flex 3 SDK есть недокументированый класс mx.core.UIComponentGlobals. В этом волшебном классе лежит не менее волшебное поле designMode:Boolean.
mx.core.UIComponentGlobals
designMode:Boolean
В Design View среда Flex Builder пытается "выполнить" код и отобразить что-либо, следовательно можно прописать проверку на designMode и делать то, что хотим.
designMode
Итак: 1. Возьмем ActionScript-компонент для Flex Bulder 3. 2. Заоверрайдим метод createChildren():
createChildren()
override protected function createChildren():void { super.createChildren(); if (UIComponentGlobals.designMode) { //здесь мы создаем child-ы, которые будут в design mode } }
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { super.updateDisplayList(unscaledWidth, unscaledHeight); if (UIComponentGlobals.designMode) { //здесь мы рисуем то, что будет видно в design mode }else { //а здесь то, что в runtime } }
Вуаля! Пример компонента можно взять здесь. При добавлении этого компонента на сцену в Design Mode Flex Builder-а мы увидим следующее:
А при запуске — вот это:
Можно скачать пример Flex-приложения и пример компонента.
Есть плагин Flex RssPanel, позволяющий читать содержимое Flex Cookbook и Adobe CSS Advisor прямо из Flex Builder. Плагин устанавливается стандартным образом из среды разработки Flex. Адрес плагина: http://flex.actionscript.it/plugins/Rss_Readers/
Плагин умеет читать посты, комментарии и правки к Flex Cookbook, а также искать в ней.
Хотите помочь Adobe подправить Flex SDK, но не знаете, с чего начать? JabbyPanda знает; он прислал мне две ссылки: 1) Как заслать патч в Adobe. 2) Форум по Open Source Flex.
Чтобы отправить патч для Flex:
Вот веселуха начнется :)
Совсем недавно Adobe Flex SDK стал проектом открытого кода. И вот, Том Чивертон уже создал первый патч, принятый Adobe во Flex Framework. Суть патча: простое добавление к build.xml для работы на 'unix'-системах, в т.ч. обработка переменных JAVA_HOME и ANT_HOME (автор тестировал патч на Ubuntu). Мама сыну: и где это ты так испатчкался?
Братья-корейцы жгут: двумерная диаграмма инициализации Flex-приложения (кликабельно):
Мэтт Хотин выложил важное видео с фактами про Flex. За 7 минут вы узнаете: секрет успеха опенсорс-проекта, кто есть друзья Мэтта Шотина, проблемы Мэтта с Flash и Элаем Гринфилдом ("он не так крут, как все думают"), как делается Flex и почему кодеры есть рабы кьюэйщиков, из кого состоит команда разработчиков Flex и как она собирается перейти на проектную методологию SCRUM, и еще массу важных фактов! Смотрите, слушайте, улыбайтесь:
И это видео — не единственное, отснятое бездельниками из команды разработчиков Flex.
Добрый человек выложил полный список CSS-свойств компонентов Flex 3. Эту страницу можно использовать для поиска того или иного свойства стиля у того или иного компонента.
Пионер флекс-билдинга ДагМакКун сдержал слово и выложил обещанное видео со своим выступлением на конференции 360|Flex в Сиэттле. В этой лекции Даг делится опытом, отвечая на следующие вопросы: как, когда, зачем, когда не стоит вообще, а когда все же стоит, и как начать переделывать Flex Framework в тех местах, где его устройство сдерживает ваш творческий порыв (или просто вы видите явный баг).
На самом деле это видео о разработке собственных компонентов: Doug McCune @ 360Flex Seattle - Custom Component Development. Скачать полную версию видео можно здесь (286МБ).
Убедиться в том, что Даг таки знает, как и в каком месте доделывать Flex SDK, можно на совсем свежем примере из его блога: Даг решает популярную задачу отслеживания всех листенеров, присоединненых к данному визуальному компоненту, изменяя класс FlexSprite.
Кстати: голос, английский и чувство юмора Дага столь хороши, что делают просмотр этого видео полезным даже для тех, кто уверен в своем незнании английского. Вы узнаете его.
Документация по Flex утверждает, что метаданные используются во Flex-приложениях для указания компилятору и парсеру дополнительных параметров классов, их свойств или методов. Например, в коде AS3-класса можно указать его события с помощью мета-тэгов [Event] (пример). После этого компилятор и парсер кода начинают "понимать" указанные события и при использовании данного AS3-класса в качестве MXML-компонента среда разработки Flex Builder будет выдавать к нему соотвествующие подсказки кода. А указав для свойства класса мета-тэг [Inspectable], вы сделаете его доступным инспектору свойств компонента (панель "Flex Properties"). Это встроенные мета-тэги, вот их полный список: Metadata tags in Flex 3. Присказка закончилась, дальше идет сказка.
describeType()
Более того, можно не только получить доступ к встроенным метаданным в время выполнения, но и вводить собственные мета-данные, не предусмотренные разработчиками Flex Framework. А чтобы они вместе со встроенными мета-данными попали в откомпилированное приложение, нужно указать их в опции компилятора -keep-as3-metadata.
-keep-as3-metadata
Вот более свежие примеры от Эли Гринфилда, демонстрирующие, как с помощью собственных мета-данных можно вызывать функцию при каждом изменении некоего AS-выражения, или как создавать одно- и дву-направленные связывания между частями вашего компонента, или как в декларативном стиле назначить обработчик события части вашего компонента (online demo).
И Кристоф, и Эли предоставляют исходники к своим экспериментам (не очень сложные).
Вечер. Офис опустел. Я собираюсь домой и сейчас распечатаю первую часть документа, называющегося "Внутренности Flex Framework". Скачайте и почитайте его вместе со мной — "Flex Framework Internals Part 1" (есть также Part 2). Начинаем через 5 минут.
К слову: О парнях из Adobe. Эли Гринфилд — еще больший минималист лентяй, чем я. Путь к Флекс-классам у меня: D:/dev/flex/classes. У него: C:/dev/f2 :)
Сегодня в Skype-чате UAFPUG прозвучала фраза флэш-разработчика Олега Галабурды:
Собсна, я в этом месте меняю своё мнение про Флекс, а точнее про представление MXML -> AS3. :) Итого - Флекс не так уж и страшен, как его малюют, но отгребать рискую долго.
Этот эффект вызвало прочтение короткой статьи "Flex для Флэшеров" и пара фраз в чате!
Вчера сервис учета багов Adobe JIRA сообщил мне, что исправлен баг в дистрибутиве BlazeDS.
По этому случаю можно приблизительно оценить скорость обработки дефектов, задокументированных через официальный ресурс Adobe. Уточню: именно скорость обработки пользовательских заявок, а не время исправления ошибки, которое может сильно варьроваться в зависимости от ее сложности.
Здесь сложность близка к минимальной. Ошибка заключалась в наличии одного лишнего символа в имени файла: детальное описание и способ обхода я описал в момент обнаружения и в тот же день создал в Adobe JIRA соотвествующую запись. Данная ошибка дожна быть проста в исправлении; возможно, она вообще является чисто механической.
А поскольку временем исправления ошибки в данном случае можно пренебречь, то оценим время обработки заявки на исправление ошибки в Adobe.
Дата обнаружения ошибки: 2 февраля 2008 г. (суббота); дата исправления: 18 февраля 2008 г. (понедельник). Итого 16 дней. Вычтем выходные (6 дней) и получим 10 дней. Дадим один день на исправление, regression testing, упаковку и доставку. Итого — девять рабочих дней.
Весьма оперативно работают в Adobe, не так ли? Голосовать за "любимые" баги сегодня — значит меньше работать завтра!
Update: Приятно удивился, насколько быстрее стал работать сервер Adobe JIRA.
Еще один из самых FAQ-овых вопросов: с чего начать изучение Flex? Люди, совершающие самые первые шаги во Flex, интересуются простейшими примерами.
Обычно я рекомендую обращаться за помощью в группу ruFlex. Но хочется также давать ссылки на статьи типа "мое первое Flex-приложение" или "Флекс для Флэшеров" И прежде, чем писать статью на тему "флекс с самого начала", я хотел бы спросить у вас — может быть, есть готовые ссылки, которыми мы сможем делиться с начинающими, в том числе и на русском? Давайте поделимся!
У меня часто спрашивают: Рост, есть ли у тебя архив старого сайта Novemberain.com?
Конечно, у меня есть архив блога Майкла Клишина, причем он всегда под рукой. Вот посты Майкла Клишина в категории 'Flex' состоянием на 9 февраля 2007 года. А вот вообще весь его блог за указаный период.
Архивы всех сайтов есть у всех нас благодаря великолепному сервису web.archive.org.
5 февраля 2008 г. в блоге JetBrains IDEA был анонсирован выход новой версии редактора IDEA 7.0.3 с продвинутой поддержкой Flex-приложений. Участники предрелизной программы JetBrains, "Early Access Program" (EAP) уже могут это попробовать:
mx:Script
Хотите проверить, как это работает? Вот ссылки:
Не секрет, что IDEA высоко ценится Java-разработчиками за ее превосходное качество. Многие просто называют ее лучшей. "Most Intelligent" — называеют ее авторы.
Поддержку Flex в IDEA хотим и ждем давно. Похоже, разработчики из JetBrains решают эту задачу на "отлично". Но — кто уже пробовал эти новые возможности? Что скажете?
Райан Стюарт обещает, что такого больше не будет. Сегодня в Adobe специальный день. Мэтт Хотин — главный ответственный за Flex, объявил сегодня день голосования за баги Flex (сегодня же в 20 американских штатах день выборов, а Мэтт дает возможность выбора тем, кто в этих штатах не живет). Голосуя за баг, вы увеличиваете его приоритет, и он будет исправлен быстрее! Особенность сегодняшней акции также в том, что можно голосовать даже за отложенные к исправлению ошибки (статус "Deferred"). Итак, чтобы улучшить себе жизнь, не поленитесь и проголосуйте! Для этого:
1. Идите в систему учета Flex-багов: http://bugs.adobe.com/flex 2. Войдите (или зарегистрируйтесь). 3. Кликните по ссылке "Find Issues" ("Найти баги"). 4. В левой колонке в списке "Project" выберите "Flex Builder" или "Flex SDK". 5. В "Issue Type" выберите "Feature Request" или "Bug". 6. Кликните кнопку "View". Появится список всех запрошенных во Флекс фич / найденных багов. Изучите список и выберите в нем важные для вас элементы. 7. Просматривая баг, можно кликнуть по ссылке "View" (находится рядом с меткой "Votes" в левой колонке). 8. На открывшейся странице вы можете добавить ("Add") свой голос за этот баг. Можно там же добавить свой комментарий, и объяснить, почему этот баг так важен и почему его нужно срочно исправить.
Не забывайте, что можно также добавлять новые баги — но убедитесь сначала, что его еще нет в системе.
Друзья! Давайте, вместо того, чтобы жаловаться на индусов, поможем разработчикам Flex найти самые злобные баги!
Попиарьте это, пожалуйста.
Buran опубликовал во Flex-вики новую мини-статью "Применение HTTPService" — об использовании компонента, упрощающего выполнение HTTP-запросов. Попросил ногами не бить :)
Костя Ковалев придумал собрать все флекс-приложения рунета в одном месте.
Сейчас это просто запись в блоге, в комментариях которой можно указать флекс-проект. А в перспективе это превратится в серьезный ресурс, отображающий флекс-потенциал рунета. Хорошо было бы иметь такую информацию под рукой, чтобы заказчикам показывать? Конечно! Так что не ленитесь, идите и делитесь своими ссылками.
Знаете ли вы, что во Flex 3 локализация приложений стала лучше в разы? Что теперь флекс-приложение может быть скомпилировано под основной язык и подгружать языковые ресурсы для других языков на лету? Что локализуются не только фразы, но и даты, валюта, и т.д. и т.п.? Я упустил эти моменты, а вот Junik — не прошла мимо и написала для нас отличную заметку о локализации во Flex 3. Спасибо тебе, Юля!
Update: Вы уверены, что используете во Flex Builder все возможности кодирования? А знаете ли, что делает шорткат Ctrl + Shift + P?
Я писал, что приглашаются желающие для участия в приватном тестировании Adobe CoCoMo. Там же объяснялось, что CoCoMo — это движок для онлайн-сотрудничества, реализованный в виде клиент-серверного Flex-фреймворка: набор flex-компонентов плюс веб-сервисы. Можно увидеть простую демонстрацию его работы в блоге создалетей CoCoMo.
Вчера мне пришло письмо из Адоби. В нем сообщалось, что я принят в эту программу. Для подтверждения моего участия предложили пройти на сайт Adobe Prerelease для регистрации. Сделано; ответили обещанием выслать ссылку для собственно доступа к программе. Сегодня увидел в почте эту ссылку, прошел по ней, получил доступ.
К чему пишу: если вам это интересно — поучаствуйте. Я же постараюсь написать о своих впечатлениях от этой штуки.
Вы, наверное, уже заметили, что Flex 3 стал значительно быстрее компилировать приложения, и это чудесно совпало с тем, что он же перестал разделять имена релизной и дебаг-версии swf-файла при компиляции (Flex 2 приписывал к не-релизным версиям суффиксы -debug и -profile). К тому же, по умолчанию Flex 3 компилирует дебаг-версию. Все это — следствия нового подхода к отладке флекс-приложений. Новое поведение компилятора стало сюрпризом для многих разработчиков, иногда приятным, иногда не очень: имя файла то же самое, а размер подозрительно раздут. Да и Debug-версия Flash Player будет людям с устаревшим Flash Debug Player'ом вопросы ненужные показывать ("Where is the debugger?")
Не проблема: как во Flex Builder 3 компилировать релизные версии swf-приложения, пишет Дима 'Reijii' Кочетов.
Записи Кости Ковалева пропускать вообще нельзя, а эти две и подавно. Вот Constantiner показывает собственное видео о том, как обойти недоделки Flex Builder и реализовать генерацию геттеров/сеттеров с помощью плагина Eclipse Monkey, а вот он рассказывает уже о том, как такое видео можно сделать самому — запись видео с экрана с помощью бесплатной и опенсорсной CamStudio.
А еще вчера (не кликайте пока) Дима 'reijii' Кочетов прислал ссылку на 30-дневный триал видео-уроков по Flex. Темы: Flex 2: Advanced Visual Programming course и Flex 2: Rich Internet Applications course. Вообще эти уроки не бесплатные, но по ссылке вы найдете логин и пароль для доступа к 30-дневному триалу. Только что проверил — работает. От него же: линк на лучшие flex-приложения на flex.org.
Меня все больше радует журнал Life.Flash. Записи делаются не каждый день, но автор держит их качество на высоком уровне. Многих блогу этому посетителей, и энергии автору.
И не пропустите это: Юрий Яровой собирает и выкладывает лучшие статьи по Flash / SWFObject / Flash Lite / AIR / RadRails / Ruby on Rails и Flex, которые по тем или иным причинам исчезли из сети. Там уже есть и переводные суперстатьи Андрея Горбатова, и исполненные рабочей ярости манускрипты Великого и Ужасного Майкла Клишина (никогда не ставьте на него ссылки), и цитата от Алексея «Vooparker» Аникутина, вдохновившая на заголовок к этой записи: челябинские флешеры настолько суровы, что пишут код во Flash IDE. Риспегд!
Кстати, FDTracer — плагин для FlashDevelop 3. Полку флэш-логгеров прибыло!
Хорошие новости — до 26 июля 2007 года Flex-Ajax Bridge был доступен только как часть Adobe Live Cycle Services (~>150MB), как видно на этой вики-странице от 13 июля 2007 г., а теперь FABRidge можно скачать как часть Flex 3 SDK Beta Daily Builds. Это лучше, потому что SDK весит в четыре раза меньше (~40MB).
По адресу wiki.flash-ripper.com открыта и настроена русскоязычная флекс-вики. В эту базу знаний вошли все материалы, созданные и переведенные флекс-сообществом рунета для предыдущей версии вики.
Сохранены все логины, пароли и прочие данные, введенные участниками Flex2pedia: сохранилось и ваше авторство относительно статей вики: прямо сейчас можно зайти под старым именем и убедиться.
Каждый желающий может поделиться своими знаниями во флекс-технологии или просто перевести свободную статью из документации.
Ссылки:
Завершая редактирование статьи, не забывайте ставить в конце авторскую метку формата "--~~~~", чтобы оставить свою подпись.
Все сомневающиеся и обсуждающие политику вокруг вики идут лесом.
Проверенный факт: новые версии любимых продуктов появляются, стоит только уйти в отпуск. Поэтому на этот раз я решил уехать в такой хитрый отпуск, чтобы с интернетом.
Итак, новости 5 дней от роду:
* Что нового во Flex 3 от Matt Chotin.
* Майк Чэмберз знакомит с Adobe Integrated Runtime (AIR) beta.
Скачать:
* Flex Builder 3
* Adobe AIR beta
Костя Ковалев выложил уже несколько статей по поводу Flex 3:
* Flex 3 Beta
* Flex Builder 3 для дизайнеров
* Flex Builder 3 для разработчиков
Хорошие новости, кстати.
Совсем древнее: 17-20.09.2002, 23-30.09.2002, 01-04.10.2002, 07-11.10.2002, 14-19.10.2002, 20-26.10.2002, 27.10-02.11.2002, 04-08.11.2002, 11-16.11.2002, 18-23.11.2002 25-30.11.2002, 02-07.12.2002, 09-14.12.2002 Сайт заработал 17.09.2002