Author Archive
iphone и flash. Жизнь на яблоке.
Вот уже месяц я интенсивно использую iPhone 3G по полной программе. В том числе и для веб-серфинга.
И вот что я хочу сказать: отсутствие поддержкм flash мне совсем не мешает, более того, меня это просто не волнует.
Как впрочем, совершенно не волновало и раньше, когда я пользовался Nokia n800 с поддержкой флэша. На нокии я мог открыть практически любой флэш-сайт, однако осмысленно использовать его было просто невозможно.
Производительность. Да все дело в производительности. Даже довольно простые флэш-сайты еле ворочались на n800. Я убедился, что флэш номинально поддерживатся и спокойно забыл об этом. По существу смысла в такой поддержке ноль целых ноль десятых.
Ровно по этой причине меня ни минуты не смущало отсутствие поддержки flash на iPhone. Он тут просто не нужен!
Да. Давайте смотреть правде в глаза, на таком маленьком устройстве флэш - совершенно избыточная побрякушка не дающая ровным счетом ничего кроме удовлетворения от самого факта ее наличия.
Флэш-сайты надо смотреть на хорошем компьютере с большим монитором, а не на несчастных 320 пикселях ширины крошечного экрана айфона. На айфоне, как ни удивительно, есть куда более удобные способы читать всякие сайты, очень многие сетевые издания и ресурсы создают специальные приложения в которых в удобном для такого размера экрана виде показывается содержимое сайта. Вот, например, для хабра такое приложение есть. Это просто удобно.
По существу с обыкновенными сайтами гораздо больше мороки чем с оптимизированными версиями. Все эти трюки с увеличением, прокруткой и т.п. интересны в начале, потом же хочется просто читать, не тратя время на всякую возню с масштабированием.
Так что через некоторое время неизбежно приходишь к более оптимальным решениям.
…
А вот для айпада отсутствие флэша мне уже кажется довольно спорным, но на айфоне, повторюсь, совершенно пофиг.
…
Что же касается собственно iPhone, то это отличная вещь. Я удовлетворен на все сто. В первую очередь, меня восхищает интерфейс, быстрый, отзывчивый, ясный. Это образец, Образец для подражания с большой буквы.
Недавно я пощупал htc desire на андроиде, так вот хочу сказать: типичное не то. Ярко? Да. Быстро? Да. Разрешение экрана обалденное, цветопередача вах! Но, нет той глубины проработки интерфейса, той простоты и тщательности в проработке каждой детали.
На айфоне каждый пиксель вылизан до идеала. Каждому элементу интерфейса найдено почти идеальное место. Когда пользуешься этим устройством то понимаешь, да, это должно работать именно так. Как дизайнер, я хорошо знаю что эта “простота” дорогого стоит.
…
Весь этот пост я выстругал на айфоне, лежа на диване. И это было вполне удобно!
Html 5. На это стоит взглянуть.
Я знаю, что вы возможно уже читали это на хабре, тем не менее оставлю ссылку на память:
Это уже довольно интересно выглядит.
InDesign, особенности экспорта во flash
Делаю интерактивную презентацию. Верстку экспортирую прямо в fla файл из InDesign. В принципе все проходит нормально за исключением одного неприятного глюка: при экспорте текстовые строки бьются на части и если в текстовом боксе нет ничего кроме пробелов… то вас ждут неприятности.
Когда я в action script пытался получить размеры мувиклипа (ширину или высоту) содержащего текстовые блоки только с одним или двумя пробелами, то получал на выходе невероятное число типа 25 000 000 пикселей. Я довольно долго вычислял, что является причиной этого глюка, но в конце концов понял, что виноваты эти маленькие, коварные текстовые блочки с пробелами. как только эти блоки убираешь, то все нормализуется.
Учитывая объем этой презентации - 120 страниц, пришлось написать скрипт, который убирает эти пробелы автоматом, весьма удобное мероприятие вот примерно такой:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | var flash_doc = fl.getDocumentDOM(); var flash_tl = flash_doc.getTimeline(); var lib = fl.getDocumentDOM().library; var itemNo = 1; var itemName = 'SpreadsEng/Spread_0' + itemNo; var myArray = new Array(); while (lib.itemExists(itemName)) { var myArray = new Array(); lib.editItem(itemName); curr_tl = flash_doc.getTimeline(); flash_doc.selectAll(); var theSelectionArray = fl.getDocumentDOM().selection; for(var i=0;i<theSelectionArray.length;i++){ if (theSelectionArray[i].elementType == "text"){ var str = theSelectionArray[i].getTextString(); if (str.length == 2) { //fl.trace(itemName+ " element space >" + str.charCodeAt(0) + "< string: " + str); //поиск двух пробелов if (str == " ") { fl.trace("two spaces!!!"); myArray.push(theSelectionArray[i]); } //поиск одного пробела 32, 9 /*if (str.charCodeAt(0) == 32){ fl.trace(itemName+ " element space >" + str.charCodeAt(0) + "< string: " + str); myArray.push(theSelectionArray[i]); } */ } } } flash_doc.selectNone(); flash_doc.selection = myArray; if (myArray.length >0) { flash_doc.deleteSelection(); } itemNo++; if (itemNo <10){ itemName = 'SpreadsEng/Spread_0' + itemNo; } else { itemName = 'SpreadsEng/Spread_' + itemNo; } } |
Скрипт надо сохранить в папке
C:\Users\user\AppData\Local\Adobe\Flash CS5\en_US\Configuration\Commands
и он появится в меню Commands во Flash IDE.
Листалка страниц HTML5 canvas. Чешу задумчиво в затылке.
Увидел сегодня на Хабре: листалка страниц на html5 canvas.
Конечно это пример пока корявенький, без всяких излишеств, типа теней и объемов, но однозначно рабочий.
Процесс идет. Медленно, но верно. Младенец уже уверенно держит головку, скоро научится садится.
Realaxy. Первые впечатления. Hands on review.
Первые впечатления… тут пожалуй подойдет такая метафора: прогулка на лыжах по песку.
Впрочем, речь даже не о прогулке, а о попытке сдвинуться с места. Я не буду давать никаких оценок, я просто опишу свой опыт первых часов работы с Realaxy.
Итак, дано:
Пользователь, который не имел дела с flex sdk, не знает ничего о jetbrains кроме самых общих слов. При этом активно пользуется редактором кода FlashDevelop, и имеет небольшой опыт работы с Flex Builder. Realaxy я попытаюсь использовать просто как редактор Action Script кода.
Ставим Realaxy. Все проходит быстро.
Первый запуск. Узнаем, что имеем дело с триальной версией на 30 дней.
Создаем проект.
Выбираем в меню Action Script проект
жмем далее, выбираем имя проекта. Ниже идет какая- галочка «Создать модуль».
Пожимаем плечами, бог его знает, что это, наверное так надо.
Жмем далее, пишем имя главного класса, ок!
Появляется окошко в котором показывается прогресс создания проекта. Машина на которой производилось тестирование - старье, пентиум 820D. Ждем. Ждем долго. Настолько долго, что я начинаю волноваться… Ок. Спустя каких-то три минуты имеем проект.( Позже выяснилось, что это только первый раз так долго. Потом все быстро грузится)
Открываем в дереве каталогов главный модуль. Вот она революция! Ну наконец-то!
Легким нажатием Enter генерим метод, даем ему имя.
Создаем переменную: var txt : String;… String почему-то подсвечено красным… Пробуем еще раз, снова. Не знаю такого типа, дает мне понять программа.
Хорошо. А Number ? - Хрен. int? - фигушки.
Что за черт?
UPDATE
В комментах Евгений Потапенко подсказал: чтобы тип переменных или класс стал доступен в проекте его надо импортировать с помощью ctrl+R. В появившемся диалоговом окне пишем имя переменной или класса, после этого она (он) становится доступной.
UPDATE 2
Александр Елисеев: по CTRL+R импортируется не класс, а вся модель (пакет), которая содержит этот класс. Можно также нажать CTRL+M и выбрать в списке именно пакет, классы из которого требуется сделать доступными. Модели из библиотек имеют постфикс @swc_stub после имени пакета, поэтому, например модель дефолтного пакета называется просто @swc_stub.
Пытаюсь написать trace(”Hello world”); редактор не понимает, чего я хочу, подсвечивает красным.
Минута молчания.
Создаю новый проект. Та же фигня. Ладно.
Лезу смотреть скринкасты. Делаю как там.
Пишу в строке “Hello world”, ставлю на нее курсор, жму ctrl-alt-V. О боги! Сработало, наконец-то! Все как в сказке - редактор сам создал переменную! Даю ей имя, ура!
Выдыхаем. Ну ка – ну ка, а что если мне нужна просто строковая переменная без инициализации. Ок. Создаем шаблон переменной, даем имя пишем тип… var txt2 : String; Что за черт?!
Подсвечено красным! Т. е. то, что редактор создал сам - его устраивает. А моя прекрасная переменная ему не катит? (Вспомнилось про поддельные елочные игрушки - все у них тоже самое, как у настоящих, но… не радуют!)
Где-то, на пятом по счету, новом проекте я внезапно смог написать trace(txt, …args); без того, чтобы редактор подсветил это красным.
Компилим swf - ура! Работает.
Только куда trace выводится? Я пока не понял. Не нашел.
UPDATE
Евгений Потапенко: по трейсам - нужно импортировать logger language (ctr+L - “logger”)
и сообщения выводить c помощью trace statement, (не глобальной функцией trace). trace и ctrl+space даст в списке trace statement.
так же доступны debug, error, warn стейтменты.
сообщения выводятся внизу в панеле “messages”.
кликнув на сообщении можно перейти в точку где сообщение было послано.
Автокомплит
Создаем переменную типа MovieClip - отлично, а к примеру TextField - хренушки.
Причем в списке автокомплита значатся только классы из пакета flash.display. А как подключить остальные? Никакой import flash.text; редактор написать не дает, светит краcным. Но ведь библиотеки где-то надо прописать? Точно так же я не смог добавить листенер, причем hasEventListener в списке автокомплита есть, а addEventListener нет.
Беготня по окнам свойств проекта, класса и модуля не дала результата, там и так упомянут playerglobal.swc включающий в себя все пакеты flash, но что толку?
Что это глюк или это, я тупо не знаю. Обычно в таких случаях я читаю справку. Но здесь ее нет. Совсем. Вопрос пока повис в воздухе.
UPDATE
В комментах Евгений Потапенко подсказал: чтобы тип переменных или класс стал доступен в проекте его надо импортировать с помощью Сtrl+R. В появившемся диалоговом окне пишем имя переменной или класса, после этого она (он) становится доступной. См. иллюстрацию.
Сам автокомплит работает… м-м-м иначе, чем во FlashDevelop, где я успеваю написать pr а он уже высвечивает подсказку private, остается только нажать Enter. То есть я пишу, а редактор FlashDevelop дает подсказку сразу. В Realaxy при наборе текста надо нажать Ctrl-пробел или Ctrl+Shift+пробел, и только тогда он показывает окно с подсказкой автокомплита.
Во FlashDevelop если я создал переменную var mc : MovieClip; и потом пишу mc = new , то сразу после new дается подсказка MovieClip, остается нажать Enter. Очевидно, не так ли? Realaxy в такой же ситуации рисует мне красный знак вопроса mc = new ?. Спрашивается, почему? Ведь вроде бы ясно что я хочу создать новый мувиклип, и первое предположение для автокомплита очевидно - MovieClip.
Realaxy может легко создать метод, или всю конструкцию for (var i:int… сразу целиком. Но автокомплит в мелочах пока далек от совершенства.
Realaxy пока ведет себя нестабильно. То все работает как в скринкастах, то, минуту спустя, редактор начинает дурить… строптивый у него характер, как у необъезженной лошади. Довольно часто можно увидеть это:
Причем после возникновения ошибки и перезагрузки - проект слетает. Окно с кодом открывается пустым, а сам редактор иногда впадает в кому. Пока оказалось проще всего удалить папку с проектом и начать сначала, чем разобраться в том, как это исправить. И примерно с десятого запуска редактора проект генерится пустым, без модуля. То есть в структуре проекта есть только библиотека, а самого package нет. Я пробовал создавать вручную проект и его начинку, но оно не компилится, выдает ошибки.
Вот такая получилась история. Пока работа с Realaxy не является “работой”. Это пока скорее изучение нового подхода, демонстрация новой концепции, можно поиграться, потрогать. А местами это похоже на загадку. Но интересно.
Я пока не берусь делать никаких выводов, поскольку многое из того, что у меня не сработало, могло не сработать просто по причине не знания мною правильных подходов к работе именно в этой среде (сказывается отсутствие справки даже в самом минимальном виде). Все представленное выше это скорее некая непосредственная реакция меня, как пользователя на происходящее. Для создателей это повод задуматься о том, что пытаются делать в редакторе люди привыкшие к других способам работы и подумать о том не пойти ли им на встречу. А они эти пользователи, как правило пытаются делать совсем не то и не так как задумал разработчик.











