четверг, 21 мая 2009 г.

Словарик для Openmoko

Уже несколько месяцев между делом пишу словарик для Openmoko/Neo Freerunner. За основу выбран формат словарей StarDict, оттуда же позаимствована часть кода для разбора словарей.

Так как Openmoko - это полноценный линукс, можно было бы просто перекомпилировать StarDict под него, и получить всю функциональность. Однако, я решил написать свою реализацию, потому что:

  1. GUI приложения для телефона или коммуникатора должен быть другим, чем для десктопа. Например, pdf-ридером под Openmoko не очень удобно пользоваться, т.к. это десктопное приложение, просто перекомпилированное под ARM, GUI не рассчитан на маленький экран.

  2. Словарь для мобильного устройства должно быть быстрым и легковесным - быстро включаться и выключаться, например, если вы пользуетесь им в заграничной поездке. Интерфейсы на основе GTK+ (оригинальный StarDict), на мой взгляд, получаются тяжеловатыми, хочется сделать пошустрее. Для GUI я решил использовать свой любимый FLTK2.

  3. Хочу добавить в словарик специальные функции для обучения языкам: как минимум - списки слов для запоминания, как максимум - база текстов, записей произношения, картинок, ассоциированных со словами и фразами, напоминалки, возможность выстроить программу обучения. Фунции обучения будет удобно использовать между делом, например в транспорте, просто достав телефон из кармана.

  4. Есть цель повысить собственный девелоперский уровень, освоить новые инструменты. =)



Я уже реализовал следующие вещи:

  • Архитектурный скелет приложения

  • Прикрутил парсер словарей, взятый из StarDict

  • GUI - основные панельки, элементы управления, мелкий тюнинг специально под мобильные девайсы.


  • Рабочую сборка под Openmoko (включая FLTK, Boost)


То есть уже можно запустить словарик на телефоне, скормить ему словари StarDict, попробовать перевести слово (вывод перевода - пока в виде простого текста).

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



Первый экран - список слов (поиск по первым буквам или fuzzy query).
Второй, он же главный - перевод слова. Окошко скроллируется пальцем.
Третий - букмарки (списки слов).
Четвертый - читалка текста (пока существование под вопросом).
Пятый - настройки. На скриншоте - список загруженных словарей, можно менять порядок, включать/отключать словари.

Кнопки сделаны под размер пальцев, все списки скроллируются. Боковую панель в списках (в букмарках и настройках) можно скрыть. Кнопка 'T' по середине - перевод слова, т.е. того, которое выделенно в букмарках и списках слов, или введено в поле на второй панели.

Cписок фич, которые планируется сделать:

  • Словарики формата StarDict, авто-сканирование директории со словарями

  • Поиск по началу слова, fuzzy query

  • Захват слова из буфера обмена (выделил - переключился в словарик - получил перевод)

  • Произношение из звуковых файлов (вероятно, в первую версию не войдёт)

  • Списки слов для запоминания

  • Читалка простых текстов, с поиском слов по ним, тегами/заметками

  • Подробная конфигурация через GUI: размер шрифтов, порядок использования словариков, etc


Реализация: C++, Boost, FLTK2 (с патчами), немного кода из StarDict (требует glib и zlib).

Выкладывать пакеты и исходники буду когда проект достигнет более-менее рабочей стадии, предположительно к началу июля. Думаю, буду собирать opkg-пакеты для доступных StarDict-словариков.

Интересно мнение будущих пользователей:

  • Нужен ли вам словарик под Openmoko?

  • Интересуют ли функции обучения, или ещё какие-то дополнительные функции словарика?

  • Есть ли предложения по интерфейсу?


Пишите!