Векторный графический редактор на JavaScript
На сайте ztools.org создал небольшой векторный графический редактор. Реализованы пока всего три вида объектов - линия, овал и прямоугольник. Редактор сам по себе примитивный и сделан исключительно с целью демонстрации возможностей библиотеки ztools а также для отладки работы с векторной графикой.
Что самое приятное, так это то, что код редактора, без учета библиотечных файлов содержит всего около четыреста строк.
Для прорисовки векторной графики в IE используется VML а в остальных браузерах SVG. В идеале, хочется сделать что то вроде библиотеки Raphael Дмитрия Барановского, но Raphael это вещь в себе, хотя и совершенно волшебная, мне же хочется сделать библиотеку для работы с векторной графикой на базе ztools. С его объектно-ориентированными возможностями можно будет создавать вещи нереализуемые при помощи классического HTML/CSS
Вертикальный текст в HTML
Как я уже писал, в HTML совершенно нет возможности размещать текст по-вертикали. Правда, сильно ограниченные возможности присутствуют в Internet Explorer, правда, у этого способа я обнаружил один баг — при предварительном просмотре печати текст оказывается зеркально отраженным, видимо, второй фильтр не применяется.
Хотелось бы найти универсальный способ отображать вертикальный текст по-вертикали во всех браузерах и по возможности без глюков. Как говорится если нельзя, но очень хочется, то можно.
Создал небольшой скрипт для отображения текста по-вертикали. Код получился сравнительно небольшим. Скрипт использует VML под IE и SVG под остальными браузерами.
Внешний вид полностью настраивается при помощи CSS и Javascript. Здесь можно скачать архив, а здесь увидеть как это работает в живую.
Выложенный пример тестировался на IE6-IE7, Firefox2, Google Crome, Opera и Safary.
Как подружить UTF-8 и PHP
При работе с UTF-8 привычные функции работы со строками перестают корректно работать. В этом не трудно убедиться если сохранять исходник страницы в UTF-8:
print strlen("тест"); //8
Вместо привычных strlen, strpos, substr следует использовать соответствующие многобайтные аналоги: mb_strlen, mb_strpos, mb_substr. Но это делает код плохо портируемым под другие кодировки, увеличивает вероятность ошибок, и вообще это не удобно. К счастью расширение mbstring позволяет переопределить эти функции автоматически.
добавляем в .htaccess
php_value mbstring.internal_encoding "UTF-8" php_value mbstring.func_overload 7
проводим эксперимент:
print strlen("тест"); //4
...что и требовалось доказать. Конечно, теперь всегда нужно иметь в виду, что при вызове strlen на самом деле вызывается mb_strlen это всегда нужно учитывать, особенно, если ваш файл будет сохранен не в UTF-8, но зато код станет хорошо портируемым и не зависящим от кодировки исходников.
P.S. Как показала практика, такое решение полезно только если проект маленький, если же вы собираетесь использовать сторонниие библиотеки, то лучше все же создать дополнительный уровень абстакции для работы со строками - простая подмена функций приводит к непредсказуемым результатам!
Android
Ответье мне на вопрос. Не понимаю. Andorid - это нормальная Линукс среда, с виртуальной памятью, с нормальным разделением прав, со всеми возможными средствами ввода вывода, ядром... Нахрена спрашивается запускать приложения в собственной виртуальной Java машине? Там где каждый дополнительный такт процессора означает увеличение потребляемой мощности они запускают приложения собранные не из машинных кодов а используя Java байткод, который еще неизвестно как выполняется Java машиной... Что - линукс недостаточно защищен? Неужели ребята просто заинтересованы чтобы рынок приложений для Android был только для Android, а всевозможные уже написанные приложения для Linux были бы несовместимыми с Android-мобильниками - попахивает обыкновенным саботажем.
UPD. Нашел ответ: Android построен на ядре Linux, а прикладные приложения выполняются в виртуальных машинах (sandbox) и для их разработки используется Java. Или, вернее, язык с синтаксисом Java и библиотеки аналогичные Java SE. А в качестве среды исполнения вместо JVM используется виртуальная машина Dalvik.
...все дело в лицензионной политике. В случае с Java ME, Sun продемонстрировала просто чудеса иезуитства изобретательности, выпустив ее сразу под двумя лицензиями: GPLv2 и коммерческой. А это вынуждает производителей, использующих Java ME либо открывать весь свой код, либо... платить Sun :)
Естественно, все это не укладывалось в рамки политики, которую избрал Google для продвижения Android. В отличие от Sun, у которой хорошие юристы, Google решил положиться на своих инженеров и... создал свою реализацию виртуальной машины. Причем, Dalvik - это не просто новая реализация JVM (которую все едино пришлось бы лицензировать в Sun), Dalvik вообще не использует Java байт-код (вернее байт-код, полученный в результате компиляции в design-time преобразуется в dex формат, который и используется в run-time). В общем, инженеры Google обставили лоеров Sun.
В то время как Apple делает iPhone невероятно сладким, лакомым кусочком для разработчиков игр, но в тоже время делает его и невероятно закрытым. Google не только делает Andriod открытым для разработчиков мобильных устройств но и дает возможность миллионам существующих Java программистов стать разработчиками под Andriod.
А ведь умно...