Регистрация Прислать проект Контакты
Информация о Java-проекте

Работы представленные на конкурс будут оцениваться двумя независимыми жюри - экспертным и открытым.

ИНФОРМАЦИЯ О ПРОЕКТЕ:

Автор проекта: Землянуха Михаил Анатольевич
Название проекта: MC2 - табличный процессор
Категория проекта: Java 2 Mobile Edition
Цель проекта: Разработка табличного процессора для мобильных устройств на платформе J2ME
Описание проекта: MC2 - это табличный процессор для платформы J2ME. Предыдущая версия программы называлась MicroCalc.

При разработке MicroCalc выяснилось что спектр возможностей J2ME устройств чрезвычайно широк (например размер хипа сильно варируется), наблюдается сильное различие в реализации пользовательских интерфейсов (UI), телефоны могут поддерживать специфические API (например Siemens File System API, или JSR-75) - в результате требуется адаптация программ для конкретных моделей телефонов, чтобы соответствовать UI платформы, и использовать дополнительные возможности устройств.

Стало очевидно что с архитектурной точки зрения необходим некий механизм конфигурирования программы под конкретную модель телефона, как с точки зрения пользовательского интерфейса (UI) так в плане поведения программы. Традиционно для этих целей в системах используются скриптовые языки. Чтобы не придумывать новый птичий язык - было решено использовать Lisp. Этот язык прекрасно себя зарекомендовал в EMACS (текстовый процессор), и продолжить эту традицию - само по себе достойное занятие. Тем более что скриптовый язык востребован в табличных процессорах даже больше чем в текстовых (сравним как часто VBA код используется MS Excel vs MS Word). Есть и сугубо технические предпосылки:

  1. в качестве скриптового языка рассматривалась также java. Но компиляция и исполнение java кода не возможно на телефоне. Поэтому нужен интерпритирующий язык - это позволит исполнять макросы прямо на телефоне.
  2. Для Lisp существуют и компиляторы в JVM байт-код: http://www.robert-tolksdorf.de/vmlanguages.html. То есть критические участки Lisp кода можно "предкомпилировать" в JVM для ускорения.
  3. Lisp имеет простую грамматику - BNF существенно проще чем например java. Простой парсер - существенный момент для объема J2ME кода
  4. Lisp может быть использован как для представления поведения (кода) так и для представления данных. В традиционных ЯВУ это как правило различные формы.
  5. Следствие - Lisp может быть использован для работы с метаинформацией - например программа может генерировать код (можно заметить аналогию с популярной технологией XML/XSL).

Факт - в MC2 нашли применение все перечисленные свойства. Даже последнее (5) - когда MC2 передает данные на сервер, они передаются в виде Lisp кода. Lisp код генерируется на клиенте (телефон) и исполняется на сервере. Таже это сильно упрощает реализацию макрогенератора, и операций undo/redo.

Итак - решено было реализовать ядро исполняющее Lisp код, не привязанное к табличному процессору. Табличный процессор - это обвязка к ядру Lisp, Для работы с предметной областью (таблицами) предоставлены дополнительные функции (функторы Lisp). Реализация этих функций выполнена на java, в виде модулей. java в этом смысле - "нативный" код для MС2.

Таким образом MC2 может поставляться с различным числом модулей, при конфигурировании под возможности платформы (например на ограничение jar). Модули в этом случае - class файлы. Они расширяют возможности среды, добавляя новые функторы которыми могут использовать макросы на Lisp. Кроме "нативных" модулей которые могут быть разработаны 3rd разработчиками на основе .jar/javadocs - основное преимущество MC2 - это работа с кодом на Lisp. То есть в состав MC2 могут входить текстовые файлы с кодом на Lisp. Они могут быть размещены как в .jar (в этом случае немодифицируемые) так и в RecordStore (создаются пользователем). Выше было отмечено что Lisp удобен для работы с метаинформацией - и мы можем сохранять в RS как данные (таблица) так и код - это не имеет значения.

Как и Lisp, диалект MC2 Lisp позволяет определять новые функторы (имена), непосредственно в Lisp коде. Эти функторы могут быть использованы как функции на листе, так и имена ячеек и тп. Так можно определить новые функции рабочего листа нужные пользователю - статистические, математические, новые константы, макросы и тп. И все это может быть сохранено как данные, например на сервере, и может стать доступным прочим пользователям.

Как было отмечено - в основе MC2 - lisp ядро. Все операции предметной области представлены функторами, и все они доступны в пользовательском коде Lisp. В настоящий момент времени в словаре MC2 Lisp более 100 функторов. Число функторов зависит от набора модулей в поставке Lisp. Например есть модуль для работе MC2 на десктопе, есть модуль для работе на сервере (без UI который там не нужен). Типы данных MC2 Lisp (атомы):

  1. short
  2. long
  3. boolean
  4. date/time
  5. string
  6. float
  7. reference (range)
  8. cell
  9. sheet
Эти типы данных могут быть использованы как в MC2 Lisp коде так и функциях рабочего листа.

Таким образом достигается большая гибкость конфигурирования MC2 (это характерно было и для EMACS). В частности, конфигурирование всего UI MC2 выполнено исключительно в Lisp коде: univer.mc2. MC2 использует оригинальную схему для маппинга элементов UI в Lisp код. На любое внешнее воздествие может быть назначен lisp - код. Пункты меню, нажатия клавиш, etc - им в соотвествие ставится lisp код. Пользователь может переопределить текущие назначения, или добавить новые. Может изменить существующее меню и реакцию на клавиши.

Предполагается что разработчики смогут расширять функцинальность MC2 - для этого они могут разместить свой Lisp код в текстовом файле в непосредственно в .jar мидлета (это может быть версия MC2 адаптированная под конкретную задачу), или файлы могут быть быть загружены пользователем из интернета. Текущее назначения UI представлены в файле univer.mc2. Это "рабочий" файл - при сборке MC2 в ant скрипте данный файл компилируется в java class. Это существенно ускоряет загрузку MC2.

таким образом МС2 конфигурируется для работы в различном окружении. По адресу http://mixaz.eatj.com/mc2/mc2emulator.html вы можете попробовать как работает MC2 в аплете. Есть и десктоп вариант для PC c JRE. То есть пользователь может обменваться данными между программой в телефоне, сервером, и десктопом. Данные можно редактировать в браузере (в аплете).

В состав проекта входит также серверная часть. Когда клиентская часть общается с сервером - ответная серверная часть - это тоже ядро MC2 которому кроме операций с таблицами также доступны операции с пользовательскими файлами на сервере. Клиентские данные приходят на сервер как lisp код (lisp код и данные используют одну форму представления в лиспе), и исполняются на сервере. Это немного похоже на RPC.

Таким образом для MC2 данные расположенные на сервере становятся "прозрачными". Клиент также может выполнить lisp код на сервере и получить результат опять же в виде lisp кода (данных). Существует также модуль для работы MC2 на дектопе под J2SE. Серверная часть реализована под Tomcat.


К проекту приатачены бинарные файлы - мидлет mc2lite - вы можете также скачать его с сайта http://mixaz.eatj.com/mc2 - там же вы найдете версии для других телефонов и десктоп PC

Также приатачены исходные файлы, для ознакомления - см. readme.txt в архиве. Исходные файлы не предназначались для public domain, предоставляются "as is". Планируется релиз MC2 opensource.

В проекте использованы библиотеки и инструменты:

  • библиотека матеметических функций (MathFP) - автор Onno Hommes
  • MicroEmulator
  • Apache Ant
  • Antenna
  • Eclipse IDE
  • Uncommon Lisp, an opensource lisp implementation in java language from Michael Bayne
  • Apache Tomcat (хостингу http://www.eatj.com/ - спасибо за поддержку java разработчиков, BTW)
  • SUN J2ME WTK и J2ME SDK различных производителей телефонов. Особенно хороши эмуляторы Нокия


На скриншоте - MC2 работающий в MicroEmulator на desktop PC под Sun JRE. В бакграунде виден лог, в том числе MC2 Lisp код исполняемый при нажатии на клавиши UI (все элементы UI мапятся в Lisp код - это позволяет легко конфигурировать интерфейс MC2)


Выводы по проекту: Производительность интерпритирующего языка достаточна для J2ME
Описание дальнейшего развития: Планируется выпустить MC2 opensource. Заточка под остальные девайсы. Обработка workbooks. Конвертирование Excel <-> MC2, OpenOffice, etc. В идеале хотелось бы видеть MC2 в качестве штатного (прединсталируемого) табличного процессора для всех J2ME устройств.
Сильные стороны проекта: Высокая конфигурируемость под различные девайсы. Наличие lisp ядра. Архитектурно ориентирован на дальнейшее расширение под J2SE, DoJa, etc. Независимостть пользовательского lisp кода от платформы. Наличие сервера - может использоваться как решение для корпоративного рынка. Модульность.
Ссылка на вебсайт проекта: http://mixaz.eatj.com/mc2
ФИО руководителя: -
Название учебного заведения: -
Кафедра: -
Год обучения: -
Контактная информация: mixaz@mail.ru Н.Новгород
    Время внесения Пользователь Текст
    01.06.05 11:57 mixa О каких выкладках из документации по java идет речь? И вообще - какая java - лисп кругом :)
    01.06.05 00:17 Gogol Выкладки из документации по java - это замечательно! Отсюда делается вывод - её все таки кто-то читает! :)

     

    »   О конкурсе
    »   Организаторы
    »   Положения о конкурсе
    »   Правила подачи работ
    »   Жюри
    »   Новости
    »   Конкурсные проекты
    »   Форум
    Логин
    Пароль
     
      Регистрация


    Написать письмо
    Партнер конкурса
    Информационный партнер
    О технологии Java | Правовые аспекты | Условия использования | Торговые марки