22 Ноября 2024, 13:41

JavaScript

Автор turbo, 15 Августа 2008, 19:07

« предыдущая тема - следующая тема »

0 Пользователей и 1 Гость просматривают эту тему.

turbo

15 Августа 2008, 19:07 Последнее редактирование: 29 Июня 2011, 16:28 от Zhek@Ch
[size="3"]Несогласованность в развитии языка JavaScript урегулирована[/size]

Разногласия, вызванные стандартом ECMAScript в техническом комитете 39 ECMA и длившиеся более года, успешно преодолены. Об этой новости в списке рассылки сообщил технический директор корпорации Mozilla Brendan Eich. ECMAScript -- это новое стандартизированное название Javascript.

Разногласия были вызваны неопределенностью в следующей версии ECMAscript: одни предлагали продолжить развитие ветки ES3 и выпустить версию 3.1, в то время, как другие настаивали на переходе к новой ревизии ECMAScript 4.

Предложение, которое в июле внес Eich, позволило примирить спорящие стороны и было названо "Harmony" -- гармония. Очередное заседание комитета, проходившее в Осло, постановило продолжить развитие ECMAScript 3.1, создав две его реализации, каждая из которых была бы совместима с другой. Так же было решено и в дальнейшем продолжать диалог между членами комитета с целью выработки менее радикального и более взвешенного решения о следующем этапе эволюции ECMAScript.

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

http://www.heise-onl...y--/news/111318

turbo

28 Августа 2009, 18:57 #1 Последнее редактирование: 24 Ноября 2011, 13:14 от Zhek@Ch
[size="3"]Введена в строй распределенная система тестирования Javascript кода TestSwarm [/size]

Джон Резиг (John Resig), автор проекта jQuery, объявил о выпуске первой версии сервиса для распределенного тестирования Javascript скриптов - TestSwarm, позволяющего проверить работу кода в экспериментальных, современных и устаревших версиях браузеров Firefox, Opera, Safari, Chrome и Internet Explorer, запущенных в различных операционных системах. Предпосылкой к созданию TestSwarm послужили проблемы с проверкой работы jQuery на различных web-бразуерах, имеющих различия в реализации определенных конструкций и часто изменяющих поведение от версии к версии. Исходные тексты TestSwarm распространяются под свободной лицензией MIT, проект развивается при поддержке сообщества Mozilla.

В отличие от существующих тестовых комплектов, TestSwarm вовлекает в процесс проверки энтузиастов, которым предлагается просто открыть web-страницу в одной из вкладок браузера, на которой автоматически будут раз в 30 секунд выполняться тестовые задания. В качестве достоинства TestSwarm также называется то, что проверяемый код выполняется не в синтетических условиях, а на реальных машинах с индивидуальным набором дополнений и настроек. Разработчики, желающие протестировать свой код, могут установить серверную часть из исходных текстов и через специально подготовленный web-интерфейс организовать оформление тестовых заданий и просмотр результатов тестирования. Авторы популярных Javascript библиотек, не желающие разворачивать собственную TestSwarm инфраструктуру, могут получить доступ к сервису на сайте testswarm.com.

Код проекта TestSwarm состоит из двух частей: cерверная часть, которая отвечает за упорядочивание и подборку тестовых заданий, составленных разработчиками, и отправку их добровольцам, и клиентская часть на языке Javascript, которая достаточно проста для возможности запуска даже на мобильных устройствах.

http://www.opennet.r...shtml?num=23198

turbo

16 Сентября 2009, 19:43 #2 Последнее редактирование: 22 Ноября 2011, 17:00 от Zhek@Ch
[size="3"]Финальная версия Javascript библиотеки Yahoo! User Interface 2.8[/size]

Вышла финальная версия библиотеки Yahoo! User Interface (YUI) 2.8, предназначенное для создания пользовательского интерфейса в веб-приложениях.

В новой версии добавлены следующие компоненты:

 * Strorage Utility - сохранение данных на клиентском компьютере. Поддерживаются три механизма хранения: HTML 5, Google Gears, Flash.
 * ProgressBar Control - индикатор выполнения
 * SWFStore Utility - хранение пар ключ/значение с помощью Flash, сжатие на лету данных ключ/значение (основа для компонента Strorage Utility).
 * SWF Utility - компонент для встраивания Flash-приложений в веб-страницы. В дальнейшем планируется, что этот компонент объединит в себе все остальные гибридные (Flash/Javascript) компоненты библиотеки YUI, такие как Charts и SWFStore.

Среди изменений стоит также отметить:

 * Поддержка междоменных (cross-domain) запросов в компоненте Connection Manager на основе технологии Flash.
 * Поддержка многоосных графиков

Кроме того, недавно появился серверный вариант утилиты для определения зависимостей между компонентами, их агрегирования и загрузки - YUI PHP Loader Utility. Утилита предназначена для языка PHP и является аналогом клиентского компонента YUI Loader Utility.

http://www.opennet.r...shtml?num=23432

turbo

21 Сентября 2009, 19:05 #3 Последнее редактирование: 22 Ноября 2011, 11:26 от Zhek@Ch
[size="3"]Реализация языка Python на Javascript и транслятор кода Python в Javascript[/size]

В рамках проекта Pyjamas, занимающегося портированием web-фреймворка Google Web Toolkit для языка Python, подготовлен транслятор для преобразования кода на языке Python в представление на языке Javascript. В качестве прослойки для отождествления Python объектов к их функциональным аналогам на Javascript задействован код проекта PyV8, созданного на базе движка Google v8 для организации работы Javascript вставок из Python скриптов. Для выполнения оттранслированных скриптов под управлением Javascript движка v8 используется специально подготовленная утилита pyv8run. В настоящий момент pyjamas позволяет успешно пройти 99.95% испытаний тестового комплекта Python LibTest, после его трансляции в Javascript.

Через некоторое время после основания проекта Pyjamas, его разработчики обнаружили в сети нацеленный на решение близких задач проект Skulpt, который тоже достиг впечатляющих результатов, представив полноценную командную оболочку интерпретатора Python, написанную на Javascript. Основное отличие Skulpt в том, что он является реализацией языка Python на Javascript, в то время как Pyjamas выполняет трансляцию из одного языка в другой.

http://www.opennet.r...shtml?num=23493

turbo

02 Октября 2009, 19:39 #4 Последнее редактирование: 21 Ноября 2011, 17:10 от Zhek@Ch
[size="3"]Вышел релиз web-фреймворка Yahoo! User Interface 3.0[/size]

После двух лет разработки вышел стабильный релиз Javascript библиотеки YUI 3.0.0., распространяемой под лицензией BSD. Пакет состоит из базовой инфраструктуры (YUI, Node и Event) и набора утилит (Animation, IO и Drag&Drop). Это первая капитальная реконструкция YUI с 2005 года, принёсшая ряд усовершенствований:
Один из самых быстрых и лёгких движков селекторов;
Поддержка более лаконичного стиля программирования, где поставленные задачи достигаются меньшим объёмом кода;
Автоматическая дозагрузка компонентов;
Песочница: безопасность кода в ситуации повреждения используемого модуля после создания собственного экземпляра YUI;

Класс Node теперь поддерживает как доступ к объектам DOM через CSS-селекторы (по аналогии с jQuery), так и выборку по идентификатору элемента. Также с введением использования Facade Pattern была расширена обработка событий YUI, когда обратные вызовы применяются не к единичным элементам, но к их выборке. Минимальный размер кода для использования функций библиотеки на страницах составляет всего 6.2 Кб.

http://www.opennet.r...shtml?num=23675

turbo

29 Октября 2009, 23:23 #5 Последнее редактирование: 14 Ноября 2011, 09:33 от Zhek@Ch
[size="3"]MIPS Technologies открывает код оптимизированной виртуальной машины ActionScript[/size]

Один из ведущих производителей процессоров, а так же промышленной электроники для построения сетевых и телекоммуникационных решений, корпорация MIPS Technologies, объявила сегодня о выпуске MIPS-оптимизированной виртуальной машины, исполняющей код ActionScript. Исходный код разработки выпущен под открытой лицензией и станет доступен в рамках проекта Tamarin.
Исполнение инструкций ActionScript является ключевым компонентом работы Flash-приложений, которые компилируются в байт-код и включаются затем в SWF-файл. Технология Adobe Flash широко используется в цифровых устройствах различного назначения, в т.ч. для проигрывания мультимедиа файлов и потокового видео. Оптимизация виртуальной машины ActionScript для процессоров архитектуры MIPS позволило достичь увеличения быстродействия приложений почти в 2.5 раза. Лабораторное тестирование на реальных приложениях показало, что специально оптимизированная ActionScript VM на MIPS32® 74K® работает в среднем более чем в 2 раза быстрее, чем машина, оптимизированная под ARM и запущенная на Cortex A8.
Повсеместное присутствие технологии Adobe Flash в мобильных устройствах должно помочь MIPS Technologies создать еще более востребованную платформу для использования ведущими вендорами. По словам Директора по управлению продукцией и стратегией Adobe Mahesh Balakrishnan, компания с воодушевлением восприняла новость об оптимизации кода виртуальной машины для архитектуры MIPS и готова уже в ближайшее время обновить линейку Flash-плееров для этих процессоров.

http://www.opennet.r...shtml?num=24038

turbo

04 Февраля 2010, 18:23 #6 Последнее редактирование: 10 Ноября 2011, 19:03 от Zhek@Ch
[size="3"]Консорциум W3C представил Javascript API для доступа к информации об оборудовании[/size]

Консорциум W3C опубликовал черновой вариант спецификации "The System Information API", в которой определено два новых Javascript объекта "SystemInfo" и "SystemDevice", предназначенных для доступа web-приложений к различным параметрам системы и оборудования.

Из предоставляемой новым API информации, можно отметить:

 * Информация об оборудовании: список подключенных устройств, информация о CPU, размер ОЗУ, данные о свободном дисковом пространстве, наличие web-камеры, список устройств ввода/вывода, параметры аудиокарты;
 * Доступ к сенсорам: статус заряда аккумулятора ноутбука, текущие установки яркости экрана, информация от различных датчиков (давление, наклон, температура);
 * Сетевые параметры: тип (wifi, 3g, gprs, ethernet) и пропускная способность текущего сетевого соединения, сопутствующие данные (IP, MAC-адрес, ESSID беспроводной сети);
 * Системная информация: список параметров для поддерживаемых аудио/видео кодеков (форматы, наличие аппаратной акселерации, максимальный FPS).

С целью защиты частной информации пользователя, в спецификации в качестве требования к поддерживающим данный API платформам определена необходимость обязательного ручного подтверждения пользователем согласия на предоставление web-приложению вышеуказанных данных.

http://www.opennet.r...shtml?num=25290

Радость

05 Апреля 2010, 17:15 #7 Последнее редактирование: 04 Ноября 2011, 14:01 от Zhek@Ch
[size="3"]Quake II: Переход на технологии HTML5 и Javascript [/size]

В рамках проекта GWTQuake несколько разработчиков из компании Google в свободное от работы время портировали игру Quake II на Javascript и технологии HTML5, такие как WebGL и элемент Canvas для рендеринга графики, WebSocket для работы в сети, Storage API для локального хранения данных, тэг "audio" для вывода звука. Игра была представлена вчера под видом шутки, но суть розыгрыша была в том, что проект оказался реальным.

В качестве основы для GWTQuake был использован код проекта Jake2, в рамках которого ранее был создана реализация игры Quake II полностью переписанная на языке Java. Для преобразования Java-кода в web-приложение, разработчики использовали инструментарий Google Web Toolkit (GWT), предназначенный для разработки динамических web-приложений на языке Java, которые затем при помощи специального транслятора преобразуются в представление на базе Javascript и HTML (GWT использован при разработке таких сервисов, как Google Maps и Gmail).

Для организации вывода 3D-графики OpenGL-вызовы преобразованы в поддерживаемое некоторыми браузерами WebGL-представление, что дает возможность организовать рендеринг аппаратно ускоренного 3D контента без привлечения сторонних плагинов, используя только HTML5-конструкцию "Canvas" и специальный Javascript API. Для организации многопользовательской сетевой игры, базирующийся на UDP протокол Quake реализован при помощи разработанного в Google Javascript API WebSocket, позволяющего организовать двунаправленный обмен данными между wеб-приложением и сервером. Для сохранения настроек и записи текущего состояния игры была сэмулирована файловая система при помощи Storage API, который поддерживает хранение данных на локальной системе в формате ключ/значение.

В настоящий момент запустить игру можно только в тестовых версиях web-браузера Chromium, запущенного с опцией "--no-sandbox" (модель безопасности Chromium ощутимо замедляет вывод графики) и одной из последних ночных сборок Webkit. Что касается поддержки Firefox, то разработчики сообщают, что принципиальных проблем нет, в тестовых версиях Firefox поддерживается Canvas 3D и WebGL, но производительность Javascript-движка Firefox в настоящее время не может обеспечить приемлемую для игры частоту кадров (в WebKit на MacBook и MacBook Pro удалось достичь 20-25 и 40-45 FPS).


opennet.ru

hedgeven

05 Апреля 2010, 17:18 #8 Последнее редактирование: 04 Ноября 2011, 14:02 от Zhek@Ch
Цитата: Радость от 05 Апреля 2010, 17:15[size="3"]Quake II: Переход на технологии HTML5 и Javascript[/size]
а в комментариях еще есть ссылка на другую javascript-игру...
Jah will give us everything...

Zhek@Ch

01 Февраля 2011, 18:26 #9 Последнее редактирование: 01 Февраля 2011, 18:27 от Zhek@Ch
[size="3"]Релиз свободной Javascript библиотеки jQuery 1.5 [/size]

Вышел релиз популярной Javascript библиотеки jQuery 1.5. В новой версии исправлено 83 ошибки, что позволило закрыть в системе трекинга ошибок 460 тикетов. Новая версия успешно прошла 4437 тестов на предмет полной совместимости с браузерами Safari 3.1.2+, Opera 9.64+, IE 6+, Firefox 2.0.0.20+ и Chrome 8.0.552.215+. Ключевые улучшения:

  • Полностью переписан Ajax-модуль, что позволило избавиться от множество внутренних "хаков", обеспечить более целостное API и реализовать возможность простого подключения дополнительных обработчиков и фильтров. jQuery.ajax теперь возвращает объект jXHR, который гарантирует непротиворечивость объекта XMLHttpRequestobject для различных платформ и позволяет выполнять ранее невозможные операции, такие как отмена JSONP-запросов;
  • Поддержка API отложенных объектов (Deferred Objects), позволяющего в асинхронном режиме работать с возвращаемыми значениями, которые недоступны сразу после выполнения функции (например, результат Ajax-запроса), а также возможность назначать сразу несколько обработчиков событий.
  • Реализация jQuery.sub(), нового метода клонирования jQuery и последующей модификации методов;
  • Значительная оптимизация производительности методов .children(), .prev() и .next();
  • Изменения во внутренней системе сборки, нацеленные на стандартизацию сборки для серверных Javascript-окружений, таких как NodeJS.

Zhek@Ch

16 Февраля 2011, 16:02 #10 Последнее редактирование: 16 Февраля 2011, 16:03 от Zhek@Ch
[size="3"]Релиз серверной Javascript-платформы node.js 0.4 [/size]

Вышел второй стабильный релиз платформы node.js 0.4 (нечетные ветки - экспериментальные, а четные (0.2, 0.4) - стабильные), позволяющей создавать высокопроизводительные сетевые приложение на языке Javascript. Для обеспечения обработки большого числа параллельных запросов node.js использует для запуска кода асинхронную модель, основанную на обработке событий в неблокирующем режиме и определении callback-обработчиков. По своей сути node.js похож на фреймворки Ruby Event Machine и Python Twisted, но цикл обработки событий (event loop) в node.js скрыт от разработчика и напоминает обработку событий работающим в браузере web-приложением, при этом функции платформы не ограничены web и поддерживают создание обычных сетевых клиентских и серверных программ. В качестве способов мультиплексирования соединений поддерживается epoll, kqueue, /dev/poll и select. Для обеспечения выполнения Javascript-кода используется разработанный компанией Google движок V8. Для мультиплексирования соединений используется библиотека libevent, для создания пула потоков (thread pool) задействована библиотека libeio, для выполнения DNS-запросов в неблокирующем режиме интегрирован udns resolver. Все системные вызовы, вызывающие блокирование, выполняются внутри пула потоков и затем, как и обработчики сигналов, передают результат своей работы обратно через неименованный канал (pipe).


Для расширения функциональности приложений на базе node.js подготовлена большая коллекция модулей, в которой можно найти модули с реализацией HTTP/SMTP/XMPP/DNS/FTP/IMAP/POP3 серверов и клиентов, модули для интеграции с различными web-фреймворков, WebSocket и Ajax обработчики, коннекторы к СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизаторы, CSS-движки, реализации криптоалгоритмов и систем авторизации (например, OAuth), XML-парсеры.

При написании приложений для node.js необходимо учитывать специфику событийно-ориентированного программирования, например, вместо выполнения "var result = db.query("select..");" с ожиданием завершения работы и последующей обработкой результатов, в node.js использует принцип асинхронного выполнения, т.е. код трансформируется в "db.query("select..", function (result) {обработка результата});", при котором управление мгновенно перейдет к дальнейшему коду, а результат запроса будет обработан по мере поступления данных. Ни одна функция в node.js не должна напрямую выполнять операции ввода/вывода - для получения данных с диска, от другого процесса или из сети требуется установка callback-обработчика.

Из новшеств node.js 0.4 можно отметить:

  • Значительная переработка систем для организации шифрованных каналов связи (TLS/SSL), расширение функциональности и упрощение API. Вместо излишне завязанного на сокеты кода для связи с OpenSSL, теперь для каждого соединения создается два потока - дуплексный шифрованный поток (работает через TCP raw-сокет, используя метод Stream.prototype.pipe()) и дуплексный поток для данных, передаваемых открытым текстом;
  • Упрощенный API HTTP-клиента c поддержкой пула соединений;
  • Более легковесный код для выделения памяти под буферы (объект Buffer). Для ухода от проблем с медленным выделением памяти и трудностями с уборкой мусора, осуществлен уход от ObjectWrap к обычным javascript-объектам, что положительно сказалось на производительности;
  • С целью улучшения поддержки пакетных менеджеров добавлены некоторе изменения в код, связанный с загрузкой модулей. В частности, в NPM добавлена поддержка поиска пакетов в предопределенной директории node_modules/; улучшено распознавание относительных путей в модулях, загруженных при использовании символических ссылок; в require() добавлен простейший разбор параметров package.json, что позволило обеспечить прямую работу с директорией пакета;
  • Представлена начальная поддержка сборки для платформы Windows;
  • Произведено обновление Javascript-движка V8 до версии 3.1.2, в которой интегрирована новая инфраструктура компиляции и добавлен GDB-плагин для Linux.
  • Добавлен новый встроенный клиент для отладчика V8;
  • Добавлен модуль "os", в котором предоставлен набор полезных функций для извлечения информации о системе, например, os.cpus(), os.freemem(), os.totalmem() и os.loadavg().

Zhek@Ch

23 Апреля 2011, 13:40 #11 Последнее редактирование: 29 Июня 2011, 16:34 от Zhek@Ch
[size="3"]Создатель JSON представил новый тест производительности Javascript в web-браузерах [/size]

Дуглас Крокфорд (Douglas Crockford), создатель и популяризатор формата JSON, возглавляющий в компании Yahoo разработки, связанные с языком Javascript, выступил с инициативой измерения действительной производительности Javascript-движков современных веб-браузеров.

По мнению некоторых исследователей, проанализировавших скорость работы наиболее популярных веб-служб, обычные тестовые комплекты, такие как SunSpider, V8 и Dromaeo, Kraken, rwBench и Peacekeeper, являются синтетическими тестами и не отражают поведение реальных web-приложений. Результаты тестирования также искажаются из-за того, что производители браузеров при выпуске новой версии стремятся максимально оптимизировать выполнение операций, влияющих на скорость выполнения типовых тестов. Опасность такой оптимизации связана не столько с накруткой показателей, сколько с тем, что производительность реальных приложений часто остаётся за кадром, поэтому в некоторых ситуация web-разработчикам приходится подстраиваться под Javascript-движки и для повышения производительности использовать сомнительные приёмы программирования. Дополнительно упоминаются программы, завязанные на операциях с DOM (Document Object Model), на скорость работы которых в основном влияет производительность работы API DOM, а не производительность Javascript-движка.

Исправить ситуацию по мнению Дугласа может новый тест производительности, который был бы максимально приближен к работе больших и правильно написанных web-приложений. В качестве основы для проведения тестов было решено использовать развиваемый много лет пакет JSLint, отличающийся высоким качеством кода, достаточно сложной логикой работы и наличием типичных для обычных web-приложений операций, таких как разбор строк, выполнение регулярных выражений и применение шаблонов. JSLint предназначен для анализа Javascript-кода, оценки его качества и автоматического выявления ошибок.

Измерив время проверки в JSLint собственных исходных текстов (размер выполняемого файла jslint.js составляет около 300 Кб или 6.5 тысяч строк кода), Дуглас получил неожиданные результаты, существенно расходящиеся с обычно используемыми тестовыми пакетами. Быстрее всего проверка была выполнена в браузере Internet Explorer 10, Firefox 4 и Opera 10 показали средние результаты, а медленнее всех оказался Chrome 10 (примечательно, что Chrome 10 лидирует при выполнении тестов SunSpider и V8):

  • IE 10 - 0.562;
  • Firefox 4.0.1 - 0.956;
  • Safari 5.0.5 - 0.984;
  • Opera 11.10 - 1.106;
  • IE 9 - 1.159;
  • Chrome 10 - 2.801.
# opennet.ru

[size="3"]Ext JS 4.0 -- новая версия Javascript-фреймворка[/size]

[size="1"]
Одновременный запуск Ext JS 3 и Ext JS 4 благодаря sandboxing
 Иллюстрация с сайта Sencha[/size]
Компания Sencha, объединившая летом прошлого года Javascript-проекты с открытым кодом Ext JS, jQTouch и Raphaël, объявила о выпуске новой крупной версии Open Source-фреймворка Ext JS -- 4.0.

Заявляется, что релиз Ext JS 4 стал «наиболее всеобъемлющей модернизацией фреймворка с момента его появления, в которой представлены улучшенная архитектура и множество новых возможностей, позволяющих вам создавать приложения для веба следующего поколения». Число изменений в Ext JS действительно впечатляет.

Среди значимых новшеств в Javascript-фреймворке Ext JS 4:

  • MVC-подобная архитектура приложений, ориентированная на разработчиков крупных Javascript-проектов;
  • улучшенная система классов (появились: динамическая загрузка, подмешивания [mixins], «живое» вычисление зависимостей);
  • возможность полной изоляции (sandboxing) -- полный отказ от использования родных объектов вроде Array и Function, благодаря чему исключены конфликты с любыми другими библиотеками;
  • новый пакет построения разнообразных графиков (использует SVG и VML);
  • пакет для табличного представления данных (Grid) стал модульным и расширяемым;
  • улучшения в механизмах рендеринга и генерирования HTML-кода;
  • поддержка HTML5 localStorage в пакете работы с данными (Data);
  • улучшения в поддержке тем;
  • поддержка новых браузеров: Firefox 4 и Internet Explorer 9;
  • существенное обновление документации -- ее количество увеличилось более, чем в 2 раза;
  • было написано более 4000 новых юнит-тестов для проверки функционирования различных возможностей Ext JS в 21 браузере.

Zhek@Ch

04 Мая 2011, 08:35 #12 Последнее редактирование: 04 Мая 2011, 08:35 от Zhek@Ch
[size="3"]Релиз Javascript-библиотеки jQuery 1.6[/size]

Доступен релиз популярной Javascript-библиотеки jQuery 1.6 - кроме исправлений ошибок в новой версии проведена работа по увеличению производительности метода data(), улучшена совместимость с различными web-браузерами, переписан модуль Attribute (методы attr() и val() стали работать значительно быстрее).


Zhek@Ch

18 Мая 2011, 01:11 #13 Последнее редактирование: 18 Мая 2011, 01:11 от Zhek@Ch
[size="3"]На языке Javascript написан полноценный эмулятор ПК, способный загрузить Linux [/size]

Французский математик Фабрис Беллард (Fabrice Bellard), основавший в свое время проект QEMU, представил реализацию полноценного эмулятора x86-совместимого ПК, написанную полностью на языке Javascript. Реализована эмуляция 32-разрядного x86-совместимого CPU, контроллера прерываний 8259, таймера 8254 и приёмопередатчика 1650 UART.

Эмулятор способен загрузить Linux в окне современных web-браузеров (работа проверена в Firefox 4 и Google Chrome 11). После запуска эмулятора производится загрузка Linux-ядра 2.6.20 (конфигурация ядра) c созданием ram-диска, в котором используется файловая система Ext2. Загрузка происходит за несколько секунд, после чего выводится стандартное приглашение командной оболочки из пакета busybox. Окружение содержит работоспособный TCP-стек (по умолчанию поднимается loopback-интерфейс), присутствуют стандартные команды, такие как ifconfig, ping и netstat. В состав загружаемого в эмуляторе Linux-дистрибутива включен достаточно полный набор приложений, например, имеются текстовые редакторы vi и qemacs, компилятор tcc, сетевые серверы dnsd, ntpd, ftpd, httpd, sendmail. В качестве системной библиотеки используется uClibc.

В процессе работы эмулятор использует типизированные Javascript-массивы, позволяющие увеличить производительность и уменьшить потребление памяти при работе с наборами данных фиксированного размера. Javascript-реализация основана на коде динамического x86-транслятора, созданного в рамках проекта QEMU, адаптированного с учетом использования интерпретатора.

В настоящее время эмулируется набор инструкций i486, за исключением поддержки FPU. Отсутствие математического сопроцессора не мешает работе Linux, так Linux поддерживает использованием эмулятора FPU. Кроме того, в эмуляторе пока не реализована поддержка наборов инструкций MMX и SSE, имеются некоторые особенности выполнения проверок при работе с памятью, не реализована поддержка реального режима и 16-разрядного защищенного режима. Отмечается, что в новом эмуляторе реализовано несколько отсутствующих в QEMU оптимизаций, которые позволяют выполнять определенные действия более эффективно, чем в QEMU.

Мотивом создания эмулятора стал интерес Фабриса Белларда к реализации современных Javascript-движков, которые на современном этапе развития уже достаточно быстры, чтобы выполнять такие задачи как запуск эмуляторов. В будущем Беллард не исключает возможности создания своего Javascript-движка. По словам Белларда, создание представленного эмулятора стало прекрасной школой по изучению оптимизации Javascript-кода с учетом особенностей современных Javascript-движков, таких как Jaeger Monkey (Firefox 4) и V8 (Chrome).

Что касается субъективной оценки производительности, то эмулятор в настоящее время работает при использовании Firefox 4 примерно в два раза быстрее, чем при запуске под управлением Chrome. Причины такого различия пока детально не анализировались, возможно были упущены какие-то особенности движка V8, так как движок Jaeger Monkey был более детально изучен Беллардом.

Кроме разработки QEMU, Фабрис Беллард является создателем мультимедиа пакета FFmpeg, TinyGL (сокращенный вариант OpenGL) и Emacs-подобного текстового редактора QEmacs. Отдельно можно отметить разработку сверхбыстрого Си-компилятора TCC (Tiny C Compiler), позволяющего использовать Си как язык для разработки скриптов. Например, на базе TCC был создан загрузчик TCCBOOT, который обеспечивал сборку Linux-ядра на лету и его загрузку за 15 секунд. В среде математиков Беллард известен как создатель самой быстрой формулы для вычисления числа Пи и как обладатель мирового рекорда по вычислению числа Пи (2700 миллиардов знаков после запятой).


Zhek@Ch

20 Июня 2011, 00:01 #14 Последнее редактирование: 20 Июня 2011, 00:02 от Zhek@Ch
[size="3"]Представлен проект JSMad, с реализацией проигрывателя MP3 на языке Javascript [/size]

В последнее время скорость выполнения Javascript в новейших веб-браузерах стала настолько высокой, что на основе этого языка программирования стали появляться проекты мало связанные с разработкой веб-приложений. Самым заметным из таких проектов стал написанный на языке Javascript эмулятор x86 компьютера, созданный талантливым французским исследователем Фабрисом Белларом (Fabrice Bellard). В рамках проекта JSMad предпринят ещё один эксперимент, в результате которого на языке Javascript был написан декодер для файлов MP3.

JSMad позволяет веб-браузеру Mozilla Firefox 4 проигрывать файлы MP3 без использования Adobe Flash. Код также работает и в Google Chrome, начиная с 13 версии, но для работы нужно обязательно включить поддержку Web Audio API. Производительности Javascript-движка хватает для беспроблемного проигрывания MP3-файлов с битрейтом вплоть до 320KBit/sec. На основе JSMad можно легко создать основанную исключительно на веб-браузере программу по проигрыванию библиотеки музыки в стиле JukeBox.

Исходные тексты проекта размещены на сайте GitHub под лицензией GPLv2. Оценить JSMad в действии можно на сайте jsmad.org. Разработка была выполнена путем портирования MP3-декодера libmad, написанного на языке Си, в представление на языке Javascript (около 15 тысяч строк кода). Поддержка ID3 была написана с нуля. Проект создан разработчиками в составе Amos Wenger, Antoine Marguerie, Matthias Georgi и Jens Nockert.

Как отмечает один из разработчиков - самой сложной проблемой в написании JSMad стала отладка, которая мешала формированию звукового потока. Для решения этой задачи было использовано приложение GNUPlot. Остальные комментарии разработчиков по поводу проекта можно прочитать здесь (искать по имени nddrylliog).

Из планов на будущее отмечается проведение оптимизации производительности, использование вместо строк бинарных массивов Uint8Arrays, создание более оптимальной стратегии буферизации потока, обеспечение поддержки MPEG 2.5 (поддерживается только MPEG Layer III, смысла в поддержке MPEG Layer I и II нет), обеспечение поддержки потоков со свободным битрейтом (переменный битрейт (VBR) поддерживается), реализация поддержки некоторых расширенных тегов ID3v2.2 и ID3v2.3.


Zhek@Ch

28 Июня 2011, 23:27 #15 Последнее редактирование: 28 Июня 2011, 23:28 от Zhek@Ch
[size="3"]Сотрудники AOL представили web-фреймворк SocketStream, основанный на Node.js и WebSockets [/size]

На проходящей в Лондоне встрече "Hacker News", разработчики компании AOL представили web-фреймворк SocketStream, реализующий парадигму разработки одностраничных web-приложений, в которых базовая страница представляет собой приложение на языке Javascript, которое загружается один раз и динамически формирует содержимое экрана в процессе работы, подгружая с сервера данные и код по мере необходимости. По заявлению разработчиков, такой подход позволит значительно увеличить скорость работы и отзывчивость web-приложений, так как взаимодействие с сервером сведено к минимуму и данные могут обрабатываться в асинхронном режиме с использованием постоянно открытого двухстороннего канала связи.

SocketStream основан на сервере Node.js, использует для хранения данных пользователей NoSQL БД Redis и библиотеку Socket.io для организации двустороннего обмена данными между web-приложением и сервером при помощи механизма WebSockets, доступного в современных браузерах. SocketStream отходит от традиционного подхода к разработке web-приложений, при котором всё общение между сервером и клиентом производится с помощью протокола HTTP. Вместо этого фреймворк использует постоянный двунаправленный канал между сервером и клиентом, через который передаются все данные приложения, тогда как HTTP используется только для получения загрузчика и некоторых библиотек, которые будут использованы для создания канала, последующей загрузки самого приложения (HTML, CSS и JS-код) и обмена сообщениями. Такой подход позволяет писать клиент-серверные приложения, которые хоть и работают в браузере, но совершенно не зависят от web-сервера и медлительного HTTP.

Обмен сообщениями между приложением и сервером производится в формате JSON, однако всю низкоуровневую логику SocketStream скрывает, позволяя программисту использовать вызовы методов специального объекта SS, реализующего механизм удаленного вызова процедур (RPC). Чтобы сделать определенную функцию сервера доступной клиенту, достаточно просто добавить ее в список экспортируемых, после чего функция станет доступной через объект SS на стороне клиента (такой же подход действует и в обратном направлении). Предусмотрен механизм оповещений, приватных сообщений, а также возможность вызова функций сервера используя протокол HTTP.

 Из других особенностей SocketStream можно отметить следующие:

  • Поддержка браузеров Safari (в том числе мобильной версии для iOS) и Chrome, а также Firefox и IE с помощью flashsockets (реализация WebSockets на Adobe Flash).
  • Поддержка языков CoffeeScript или Javascript.
  • Возможность использования общего кода клиентом и сервером.
  • Встроенный упаковщик кода и ресурсов приложения.
  • Поддержка HTTPS.
  • Расширяемый механизм аутентификации.
  • Консоль для отладки/прототипирования кода клиента и сервера.
  • Интеграция с библиотеками JQuery и jQuery templates.
  • Простой механизм расширения.
  • Использование Jade и Stylus для написания HTML и CSS-кода.
Пока SocketStream находится в стадии разработки, но по заявлению разработчиков уже вполне пригоден для использования. Исходный код распространятся на условиях лицензии MIT. Видео-запись доклада, прозвучавшего на Hacker News meetup можно найти на сайте Skills Matter.


Zhek@Ch

06 Июля 2011, 07:34 #16 Последнее редактирование: 06 Июля 2011, 07:36 от Zhek@Ch
[size="3"]Полноценная программа для чтения PDF, написанная целиком на Javascript[/size]

Увидел свет первый работоспособный релиз проекта pdf.js, в рамках которого создано приложение для просмотра PDF-файлов, написанное целиком на Javascript с использованием технологий HTML5. Код проекта распространяется под лицензией BSD. По заявлению разработчиков в представленной версии им удалось полностью обеспечить корректное отображение PDF-обзора Javascript-движка Tracemonkey, которое использовалось в качестве эталонного PDF-документа. Протестировать pdf.js в работе можно на данной странице.

Из особенностей pdf.js можно отметить:

  • Поддержка масштабирования и навигации по страницам,
  • Поддержка динамической загрузки шрифтов Type 1 и TrueType;
  • Решение проблем с качеством отображения элементов страниц, например, отображаются тени для рамок и градиенты;
  • Попиксельный вывод содержимого;
  • Возможность вывода диаграмм и графиков;
  • Реализация навигационного элемента, выполненного в виде столбца с эскизами страниц;
  • Поддержка работы со сжатыми объектами;
  • Так как код написан на безопасном высокоуровневом языке, он не подвержен уязвимостям, свойственным бинарным плагинам для просмотра PDF.


С технической стороны, в pdf.js используется своеобразная JIT-компиляция PDF: изначально представленные в файле бинарные массивы преобразуются в потоки байткода PDF, который затем транслируется в Javascript-представление и выполняется. Сгенерированная на основе PDF Javascript-программа выводит данные через HTML-тег canvas. При этом транслируемый в Javascript байткод PDF можно разделить на простой и сложный. Простой код сводится к таким операциям, как "нарисовать кривую" или "вывести текст". Сложный код определяет такие операции, как "заполнение областей с затенением по маске". Усложняет реализацию то, что интегрированные в PDF данные, такие как шрифты и изображения, могут храниться в сжатом или закодированном виде.
К сожалению не обходится и без проблем, таких как трудность реализации поддержки вывода на печать и выделения текста при попиксельном формировании изображения. Кроме того, возможностей canvas недостаточно для полноценного рендеринга PDF. Потенциальным решением является дополнительное задействование SVG, но использование SVG потребляет значительно больше ресурсов. В качестве компромиса изучается вариант с начальной быстрой отрисовкой через canvas, формированим более качественного SVG-варианта в фоне и замещеним canvas-варианта на SVG-вариант, после того как изображение будет готово.

Из планов на будущее отмечается реализация поддержки более качественного пиксельного рендеринга документов, оформленных в соответствии со спецификацией PDF 1.7. Ожидается расширение числа поддерживаемых web-браузеров (в настоящее время разработчики используют ночные сборки Firefox, в других браузерах полная работоспособность пока не гарантируется). Переработка внутренней архитектуры для поддержки технологии WebWorkers для обеспечения параллельного выполнения задач, требующих интенсивных вычислений. Оптимизация отзывчивости интерфейса и создание варианта для встраивания pdf.js в web-приложения.

В течение трех месяцев планируется реализовать набор возможностей, достаточных для просмотра большинства типичных PDF-документов. Проект развивается при поддержке и участии разработчиков Mozilla, поэтому не удивительно, что конечной целью разработки является интеграция pdf.js в Firefox для использования в качестве встроенного в браузер PDF-просмотрщика (в браузер Chrome дополнение для чтения PDF встроено начиная с выпуска 6).


Zhek@Ch

12 Июля 2011, 10:10 #17 Последнее редактирование: 12 Июля 2011, 10:11 от Zhek@Ch
[size="3"]Увидел свет Emscripten 1.4, компилятор байткода LLVM в Javascript-представление[/size]

Доступен релиз проекта Emscripten 1.4, в рамках которого развивается компилятор, способный преобразовать байткод LLVM в представление на языке Javascript. Байткод LLVM может быть сгенерирован из исходных текстов на Cи/Си++ при помощи компиляторов lvm-gcc и clang, а также из кода на любом другом языке программирования для которого имеется LLVM-фронтэнд. После компиляции на выходе получается скрипт на языке Javascript, который может быть выполнен внутри web-браузера, используя только штатный Javascript-движок, без необходимости задействования дополнительных плагинов.

Компилятор написан на языке Javascript, а тестовый фреймворк и управляющая утилита - на языке Python. Код открыт под лицензией MIT. Основной целью разработки является создание инструмента, который бы позволил выполнять код в Web независимо от языка программирования, на котором данный код написан. Из Javascript-движков поддерживаются Mozilla SpiderMonkey и Google V8, в остальных движках работа не гарантируется.

Emscripten поддерживает трансляцию вывода библиотеки SDL через canvas. В разработке находится реализация поддержки OpenGL через WebGL. Скорость выполнения программ, преобразованных в Javascript, примерно в десять раз ниже, но ситуация меняется по мере реализации в Javascript-движках новых методов оптимизации. Кроме того, некоторые дополнительные техники оптимизации планируется реализовать непосредственно в Emscripten.

Интересной демонстрацией возможностей Emscripten стала компиляция в Javascript-представление интерпретаторов CPython и Lua, которые удалось использовать для выполнения скриптов на языках Python и Lua внутри web-браузера. Из других примеров успешно преобразованных в Javascript-представление проектов можно упомянуть, игру Doom, движок симуляции физических процессов Pullet physics (с визуализацией через WebGL), PDF-просмотрщик Poppler, систему трассировки лучей (рендеринг организован через canvas), JPEG-декодер OpenJPEG и систему рендеринга TrueType-шрифтов FreeType.

Главным новшеством выпуска Emscripten 1.4 является обеспечение поддержки компиляции динамических библиотек и их загрузки в виде Javascript-модулей. При этом библиотеки могут использоваться не только неразрывно с каким-то компилируемым приложением, но и сами по себе, т.е. можно преобразовать в Javascript какую-то полезную библиотеку и использовать её из обычных web-приложений.

Из других похожих проектов можно отметить:

  • Google Web Toolkit (GWT) - набор средств для разработки динамических web-приложений, которые изначально могут быть написаны на языке Java, а затем при помощи специального транслятора преобразованы в представление на базе Javascript и HTML;
  • Pyjamas - транслятор для преобразования кода на языке Python в представление на языке Javascript;
  • FlashCCompiler - средство для преобразования LLVM-байткода в вид, пригодный для выполнения в виртуальной машине Adobe Flash;
  • Native Client - плагин, позволяющий выполнять в окне web-браузера обычные бинарные программы, ограниченные в специальном изолированном окружении.

Zhek@Ch

21 Июля 2011, 22:21 #18 Последнее редактирование: 21 Июля 2011, 22:21 от Zhek@Ch
[size="3"]Проекты по компиляции кода на языках Clojure и Pascal в Javascript-представление [/size]

В рамках проекта ClojureScript разработан компилятор, позволяющий преобразовать код на языке Clojure в представление на языке Javascript. Итоговый Javascript код может быть выполнен в обычном браузере или использован для работы с серверной платформой node.js. Clojure представляет собой диалект языка Lisp, ориентированный на функциональное программирование и многопоточность. Ранее Clojure можно было использовать только совместно с виртуальными машинами JVM и CLR.

Как и оригинальная реализация Clojure, проект ClojureScript распространяется в рамках открытой лицензии EPL (Eclipse Public License). Разработчиком проекта является Рич Хикки (Rich Hickey), автор языка Clojure. Пример компиляции Clojure-кода и встраивания результирующего Javascript в web-страницы можно найти в кратком руководстве.

Одновременно анонсирован проект OP4JS, целью которого является создания транслятора с языка Object Pascal в код на языке Javascript.

Дополнительно можно отметить тенденцию использования Javascript в роли "ассемблера" для Web. В частности, день за днем растет число проектов по созданию компиляторов, написанных на Javascript или преобразующих в Javascript код на других языках программирования. Из наиболее интересных можно отметить:

  • Python: PYXC-PJ (генератор Javascript-кода а основе кода на языке Python), Pyjamas (компилятор с Python на Javascript), Skulpt (реализация языка Python, написанная на Javascript), PyCow (преобразователь кода Python в MooTools JS), PyvaScript (поддержка синтаксиса, напоминающего Python, для Javascript);
  • Ruby: HotRuby (запускает объектный код YARV внутри браузера), rb2js (преобразует код Ruby в Javascript), RubyJS (форк rb2js), Red (компилятор Ruby в Javascript), Opal (компилятор Ruby в Javascript), 8ball (преобразователь кода на Ruby в код на Javascript);
  • C/C++: Emscripten (компилятор байткода LLVM в Javascript), Maja (компилятор Vala в Javascript), ClueCC (компилятор кода на Си в представление на языках Lua, JS, Perl 5, C, Java и CL);
  • Java: GWT (Google Web Toolkit, компилирует java-код в Javascript), Java2Script (Eclipse-плагин для компиляции Java в Javascript), j2js (преобразует Java-байткод в Javascript);
  • PHP: phype (PHP-компилятор, написанный на Javascript);
  • Perl: p2js (конвертер Perl-кода в Javascript);
  • Basic: qb.js (реализация QBASIC на Javascript), NS Basic (компилятор Visual Basic в Javascript);
  • Smalltalk: Silver Smalltalk, JTalk, Lively Kernel;
  • Haskell: UHC (Utrecht Haskell Compiler), YHC (York Haskell Compiler), jshaskell;
  • OCaml: Ocamljs, O'Browser, Js_of_ocaml;
  • Scala: scalagwt;
  • Scheme: Fargo (реализация Scheme на Javascript), Moby Scheme, nconc, scheme2js;
  • Lisp: EdgeLisp (Lisp на Javascript), Parenscript, Ralph, Sibilant, Spock.

Zhek@Ch

18 Октября 2011, 19:14 #19 Последнее редактирование: 18 Октября 2011, 19:15 от Zhek@Ch
[size="3"]В рамках проекта GateOne создан работающий в браузере эмулятор терминала и SSH-клиент[/size]

Представлена реализация работающего внутри web-бразуера эмулятора терминала и SSH-клиента, написанная на Javascript с использованием стандартного HTML5 API, способная работать без установки дополнений или плагинов. Серверная часть запускается в виде скрипта на локальной или удаленной машине. Код серверной части написан на языке Python с использованием модуля pyOpenSSL. Канал связи организуется с использованием WebSockets. Все наработки проекта доступны под лицензией AGPLv3.

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

Интересной особенностью GateOne является возможность записи выполняемых в терминале действий в форме лога или видеоролика, с последующим повторным проигрыванием записанного сеанса. Поддерживается одновременное создание нескольких рабочих сессий в рамках одного окна. Для более наглядного переключения между сессиями реализован режим вывода уменьшенных эскизов содержимого активных рабочих сеансов, а для более быстрого переключения - возможность использования управляющих клавиатурных комбинаций. Текущий сеанс может быть клонирован, без необходимости повторной аутентификации за счет использования агрегации SSH-линков.

GateOne может использоваться как отдельное приложение, так и в роли модуля для интеграции с другими системами, такими как интерфейсы администрирования маршрутизаторов или системы управления виртуальными машинами. Поддерживается создание плагинов к серверной части на языке Python, к web-приложению на языке Javascript, а также изменение оформление интерфейса через подключение CSS-шаблонов. Возможно подключение дополнительных модулей аутентификации, например, уже реализована работающая с Active Directory поддержка Single Sign на базе Kerberos.