вторник, 31 августа 2010 г.

Как разработчики учат говорить свои приложения на нескольких языках

Разработка любой программы идёт по одному и тому же алгоритму:
  • идея,
  • наброска домашнего варианта,
  • доработка домашнего варианта до более-менее стабильного продукта, который не стыдно показать знакомым / выложить в блоге,
  • вывод продукта для широкой публики,
  • постоянная поддержка продукта, его эволюция.
Сразу скажу - я согласен, что данный алгоритм достаточно примитивен и не отражает абсолютно всех вариантов развития. Но, как мне кажется, если взять любой продукт, то данные этапы в нём присутствуют именно в этом порядке. Также, программа на любом из этапов может как прекратить своё существование, так и вернуться на этап ранее для дальнейшей доработки и возврата с возросшими возможностями.

Я хотел бы сейчас поговорить о четвёртом пункте данного алгоритма, а точнее о необходимой для данного этапа операции - о переводе программы на национальные языки других стран. Как бы не любили мы с вами русский / английский / индийский языки, но общаться с нашей программой будут конечные пользователи. Пусть даже эти пользователи и являются сами разработчиками ПО, всё равно любому человеку приятно читать текст именно на своём, разговорном языке.

Я заметил, что чаще всего разработчики (не обязательно русские) при публикации своих приложений рассуждают так: ну, английский ведь во всём мире знают, да и английский язык сейчас фактически уже язык Интернета, потому не буду долго страдать и сделаю английскую версию программы. В итоге создаётся ПО, в котором английский является единственно встроенным и менять его можно только при помощи программ вроде Restorator. Причина такого поведения разработчика вполне понятна - разработчик лишается проблем с интерфейсом своей программы. Про неудобства для пользователя я много говорить не буду, так как они явные: пользователь может не разобраться в работе программы. Кроме того, в некоторых странах (к примеру, во Франции) Вашу программу могут просто-напросто проигнорировать и выбрать унылый аналог на национальном языке. Ну не любят французы англичан.

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

Некоторые разработчики поступают по-другому: они "выносят" все модули, отвечающие за язык, в отдельные файлы и в итоге делают отдельные сборки. В качестве примера можно привести поставки продуктов компании Microsoft: обратите внимание, Вы можете либо приобрести английскую MS Windows и сверху поставить русификацию от Microsoft, либо приобрести сразу же русифицированную операционную систему. Понятно, зачем разработчики поступают таким образом - перевод столь большого числа элементов не всегда связан только лишь с переводом строк. Иногда требуется "перебрать" и сам интерфейс программы, так как после перевода он может очень сильно "поплыть". Для пользователей в данном случае удобным становится то, что программа оказывается переведённой не просто тщательно - она максимально вылизана и доработана до практически всех национальных/региональных особенностей. Неудобством является довольно тяжёлая кропотливая работа разработчика для создания такого перевода - необходимо не только учесть вид элементов программы при подключении другого языка, но и предусмотреть особенности интерфейса для различных языков. К примеру, чтение текста права налево для арабских языков.

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

Обратите внимание на достаточно изящное решение Кристиана Гислера (автора файлового менеджера Total Commander): выбрать язык предлагается сразу же при установке программы. Другое похожее решение предлагает автор аудио-плеера AIMP Артём: язык предлагается выбрать при старте программы.

Некоторые извращенцы из понятной только им самим логики создают программы, в которых есть только английский язык, показывают пользователю список доступных языков для перевода и после выбора пункта радостно сообщает, что необходимо подключение к Интернету для скачивания огроменного 20-килобайтного файла. Всё, конечно же, очень подробно, с рюшечками и на английском. То, что пользователь может не знать английского вообще - уже неважно, рюшечки же ж. Ярким примером такой программы является Foxit Reader.

Каким именно образом выводить программу на суд широкой интернациональной публики - решать, конечно же, Вам. Главная цель, которую Вы должны в итоге постоянно преследовать - программа обязана разговаривать с пользователем на понятном для него языке. В противном случае Вашу программу могут просто не заметить.

понедельник, 16 августа 2010 г.

Snatch.exe. Попался как маленький

Свежая новость по этому вирусу.



Поймал эту дряньку от хорошо мне знакомого человека - прислал мне по QIP файл с припиской в виде смайла. Сначала меня насторожило, что ну очень мало времени прошло между отправкой смайла и постановкой файла на отправку. Но так как этот самый знакомый человек является хорошим программером, я подумал, что он хочет мне скинуть какую-то утилитку на "посмотри-ка".

Закачал, запустил. Аськи (у меня запущены QIP и QIP Infium) сразу же отрубились, диспетчер задач конечно же не стартует. Запустил Process Explorer, убил процесс, переустановил аськи - вроде бы всё стало в порядке. В реестре программа ничего не оставила (или не успела?).

Правда, я не знаю, не спёрла ли программка мои асечные пароли. На всякий случай сразу же заменил их.

P.S. Snatch (англ.) = кража, грабёж, (C) Lingvo.

понедельник, 19 июля 2010 г.

SmallNote 2.5.3.142

Одним из наших пользователей была обнаружена досадная недоработка: если в окне настроек указать другую папку для сохранения записей, то программа отказывалась сохранять изменённый путь. Если для Вас изменение данной опции является критичным - рекомендую обновить программу до последней версии. Если же нет - обновлять не обязательно.

Обновление доступно через функцию автообновления и по прямой ссылке.

воскресенье, 11 июля 2010 г.

Мультиязыковая поддержка

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

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

Также, в будущем появится подержка синхронизации контактов и возможность отправить заметку по e-mail либо каким-то другим способом. Данная отправка также будет осуществляться при помощи плагинов.

вторник, 6 июля 2010 г.

SmallNote 2.5.2.140

Обновлена версия Записной книжки до версии 2.5.2.140 (скачать). Что нового по сравнению с предыдущей версией 2.5.1.131:
  • Добавлено. Добавлено окно для быстрого открытия нужной закладки. Вызвать это окно можно при помощи клавиши F8 либо щёлкнув колёсиком мыши по закладкам.
  • Обновлено. Версия библиотеки для воспроизведения звуков Bass Sound System (bass.dll) обновлена до версии 2.4.6.0.
  • Исправлено. При двойном щелчке по пустому месту не появлялось окно добавления новой записи.
  • Исправлено. Исправлены обозначения горячих клавиш в выпадающем меню для иконки в области уведомлений.
  • Исправлено. Отловлены незначительные утечки памяти, появляющиеся при открытии окна настроек программы.
  • Исправлено. Возвращена функция ведения истории: история заметок велась, но не было возможности вернуться к предыдущему варианту.
  • Исправлено. Исправлена ошибка, которая могла возникнуть при появлении подсказки с длиной текста более 255 символов.
  • Изменено. Переименованы наименования папок у стилей (с русских наименований на английские).
  • Изменено. Изменена ссылка на обсуждение (окно "О программе"), указана ссылка на http://antoon-inc.blogspot.com/ .
Настятельно рекомендую обновиться до этой версии!

ВНИМАНИЕ!
Из-за недоработок, допущенных в некоторых из предыдущих версий, при использовании автоматического обновления программа может подвиснуть и отказаться обновляться.
Для корректного обновления необходимо сделать следующее:
  • - открыть Диспетчер задач (Ctrl+Alt+Delete), 
  • - в нём открыть закладку Процессы, 
  • - в первой колонке "Имя образа" найти "SmallNote.exe", 
  • - выделить его и нажать на кнопку "Завершить процесс".
После этого процесс автообновления продолжится. Если после данных манипуляций версия не обновится, повторите данные действия.

пятница, 2 июля 2010 г.

Планы по разработке SmallNote

Первостепенные задачи
Нововведения, которые будут решены в одной из следующих версий
  • улучшение вида существующих шкурок (сейчас иконки на некоторых стилях грешат не очень красивой прорисовкой),
  • полная отладка системы автообновления (реализовано: 15 сентября 2011 года),
  • поддержка плагинов для публикации сообщений в различных онлайн-сервисах,
  • возможность шифрования записей,
  • полная поддержка Unicode (реализовано: 15 августа 2011 года),
  • поддержка нескольких языков в интерфейсе (реализовано: 31 августа 2010 года). 
Отложено на будущее
Хорошие предложения по развитию программы, которые в силу тех или иных причин пока что отложены в "долгий ящик"
  • разработка утилиты для быстрого создания шкурок,
  • календарь заметок (календарь, который при щелчке по дате показывал бы состояние заметок на данный день).
Долгосрочные планы по развитию
Основные цели для развития программы
  • клиент-серверная архитектура (записи хранятся на сервере, у пользователя есть доступ к записям из любой точки планеты),
  • поддержка "режимов" программы (возможность переключения между различными состояниями, при которых пользователю будут показана только часть записей. К примеру, режим "дом" и "работа": будут показаны записи, относящиеся к дому и к работе. Пользователь сам будет определять, к какому режиму относить заметки),
  •  создание мощной и простой системы уведомлений (обязательно - с поддержкой плагинов).

SmallNote 2.5.2

В ближайшее время будет выложена обновлённая версия записной книжки SmallNote . Что уже сейчас сделано:
  • Добавлено. Добавлено окно для быстрого открытия нужной закладки. Вызвать это окно можно при помощи клавиши F8 либо щёлкнув колёсиком мыши по закладкам.
  • Обновлено. Версия библиотеки для воспроизведения звуков Bass Sound System (bass.dll) обновлена до версии 2.4.6.0.
  • Исправлено. При двойном щелчке по пустому месту не появлялось окно добавления новой записи.
  • Исправлено. Исправлены обозначения горячих клавиш в выпадающем меню для иконки в области уведомлений.
  • Изменено. Переименованы наименования папок у стилей (с русских наименований на английские).
  • Исправлено. Отловлены незначительные утечки памяти, появляющиеся при открытии окна настроек программы.
  • Исправлено. Возвращена функция ведения истории: история заметок велась, но не было возможности вернуться к предыдущему варианту.
Пока что дорабатываю систему автоматического обновления программы: к сожалению, в предыдущей версии (2.5.1.131) были сделаны некоторые неудачные эксперименты в коде. В результате сейчас при обновлении SmallNote подвисает и сообщает об утечках памяти. Если не получится, то выложу новую версию с комментарием, как можно установить SmallNote через автообновление без серьёзных проблем.

К сожалению, не получится интегрировать SmallNote с Google Notebook, хотя очень хотелось бы. Связана эта неудача с особенностью разработанного Google Notebook API (набором инструментов для разработчика, позволяющего работать с Google Notebook) - он не позволяет вносить изменения в записи, только чтение. А так как разработка данного ресурса в настоящее время остановлена, то ожидать изменений в API не следует.

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