ИНФОРМАЦИОННАЯ СИСТЕМА ДЛЯ КОМПАКТНОГО МОБИЛЬНОГО УСТРОЙСТВА В. В. Коновалов младший научный сотрудник лаборатории информационных систем Аннотация Современные электронные карманные устройства обладают. достаточно высокой вычислительной мощностью, что позволяет реализовывать на них полноценные алгоритмы на высокоуровневых языках программирования. В статье предложен метод создания приложений для таких устройств, в котором сочетается одновременно полная переносимость на другие аналогичные устройства, а также на полноценный компьютер. В некоторых случаях возможно внесение усовершенствований в алгоритм непосредственно на данном компактном устройстве, в особенности если имеется клавиатура. Введение Для различных задач используются различные языки программирования и среды разработки, которые учитывают специфику конкретно поставленной задачи. Для того, чтобы приложение работало на различных платформах, одним из наиболее удобных решений является использование языка программирования Javascript. Фактически данный язык программирования присутствует в любом устройстве, которое поддерживает выход в глобальную сеть Internet. Всевозможные мобильные устройства имеют различные архитектуры, и для каждой из этих архитектур имеется, как правило, среда разработки (SDK), предназначенная для разработки приложений для операционной системы данной архитектуры. Такая среда разработки генерирует машинный код, выполняемый на рассматриваемом устройстве и не совместим с другими устройствами. В связи с этим использование SDK является трудоёмким и узконаправленным решением. Однако, если в устройстве имеется Internet browser, в этом случае появляется возможность реализовывать приложения на языке Javascript, что позволяет существенно облегчить разработку и обеспечить переносимость приложения. Метод разработки информационной системы для компактного мобильного устройства В силу исторических причин, связяанных со спецификой использования Javascript, в качестве основного языка для создания динамических страниц HTML, в данном языке изначально отсутствовали функции работы с файлами локальной файловой системы. Поскольку в языке Javascript отсутствует возможность чтения файлов [4], [1], имеется проблема получения входных данных. Имеется возможность использования технологии баз данных [2], однако черновая версия спецификации не принята в технологии HTML и является несвоместимой и проблематичной. В данной статье предлагается использование подхода, в котором программные данные включаются в систему более удобно реализуемым и универсальным способом. А именно, для не слишком большого объёма данных (несколько мегабайт) возможно преобразование программных данных напрямую в текст кода Javascript, при помощи следующей Перл-программы: Рисунок 1: Программа преобразования текстового файла в код Javascript Например, имелся текстовый файл с данными следующего вида – ---===--- Eesti eesti <eesti>эстонский ===---=== ---===--- a <_ _ _[d-, _[de _[sid>буква _ ===---=== ---===--- aabe <_ aape _[t-, _[te aape[id>буква ===---=== ---===--- aabits <_ _a _a[t-, _a[te _a[id>букварь, азбука, азы чего ===---=== ---===--- aabitsa азбучный, букварный ===---=== ---===--- aabitsatõde азбучная ~ прописная истина ===---=== ---===--- aade <_ aate _[t-, _[te aate[id>идеал, [высокая] идея ===---=== для него создаётся файл с расширением JS cо следующим содержимым: var sonastik = ";Eesti^eesti эстонский;a^_ 1. буква _;aabe^_ буква;aabits^_ букварь, азбука, азы чего;aabitsa^_ азбучный, букварный;aabitsatõde^_ азбучная ~ прописная истина;aade^_ идеал, [высокая] идея;" Затем, после включения данного фрагмента Javascript строкой <script src="so~nastik-1-small.str.js"></script> в переменной имеется требуемый текстовый массив. Пример приложения Поставлена задача со следующими входными ограничениями: приложение должно иметь удобный пользовательский интерфейс; использовать (мобильное) устройство с небольшим объёмом памяти. поиск по словарной статье выполняется в режиме offline, то есть без доступа в интернет предполагается переносимость на различные устройства, то есть желательно отсутствие привязанности к конкретной модели устройства Примерный интерфейс имеет следующий вид - Рисунок 2: мобильный словарь на Nokia C6700c Аналогичное приложение на устройстве с большим количеством памяти допускает наличие более расширенных словарных статей. Рисунок 3: мобильный словарь на устройстве с Android Приведённый в качестве примера интерфейс предусматривает наличие подсказки словарной статьи в процессе набора слова. Также, возможно использование стандартных библиотек для реализации визуальных эффектов и, например, распаковки сжатых данных (zlibinflate.js [3]). <html> <head><meta charset="utf-8"></head> <body> <style type="text/css"> #res { background-color: #eeeeee; outline-style: groove; outline-color: #1111ff; padding-left: 10px; } .sona-follow { display: inline; background-color: #eeeeee; text-decoration: underline; color: blue; } .sona-follow-m { display: inline; background-color: #f0f0f0; text-decoration: underline; color: black; } </style> <p>слово:<input style="width: 2cm;" id="ee" type="text"></input><button id="ee-seek">поиск</button></p> <div id="preview"> <p>...</p> </div><div id="res"> </div> <script src="so~nastik-1-small.str.js"></script> <script> var ee =document.getElementById("ee"); var res =document.getElementById("res"); var prev =document.getElementById("preview"); var butt =document.getElementById("ee-seek"); ee.onkeyup = function () { // seek in word list ;list var que = ee.value.replace(/ +$/,'').toLowerCase(); var k=0, k0, k2, k3, r = new Array(), cq=";"+que; var k4 = cq.length, k5; // beginning of word .... ;blabla^ while ( (k0=sonastik.indexOf(cq,k)) != -1) { k5 = sonastik.indexOf("^",k0+1); r.push( "<div class='sona-follow' onclick='javascript:ee.value=\"" +sonastik.substring(k0+1, k5)+"\";search_s();'>"+ "<b>"+que+"</b>"+sonastik.substring(k0+k4, k5) + "</div>" ); k=k0+1; if (r.length>15) break; } // middle of word .... r.push(' <br> '); k=0; while ( (k0=sonastik.indexOf(que,k)) != -1) { if (sonastik.substring(k0-1,k0) != ";") { // BUT- check that it falls into word definition, first! k2 = sonastik.indexOf(';',k0+1); k3 = sonastik.indexOf('^',k0+1); if (k2<k3) { // indeed, false positive k=k0+1; continue; } k5 = sonastik.lastIndexOf(";",k0)+1; r.push( "<div class='sona-follow-m' onclick='javascript:ee.value=\""+sonastik.substring(k5,k3)+"\";sear ch_s();'>"+ sonastik.substring(sonastik.lastIndexOf(";",k0)+1,k0) + "<b>" + que + "</b>" + sonastik.substring(k0+que.length,k3) +"</div>" ); } k=k0+1; if (r.length>25) break; } prev.innerHTML = "<p>" + r.join(' ') + "</p>"; } function search_s () { var s = ee.value.replace(/ +$/,'').toLowerCase(), k0, k1; if ((k0=sonastik.indexOf(";"+s+"^")) != -1) { k0 += 2+s.length; // found... k1=sonastik.indexOf(";",k0); var str=sonastik.substring(k0,k1); //assert k1!=-1 res.innerHTML = ("<p>"+ str.replace(/_/g, s).replace(/&/g,'&amp;') .replace(/</g,'&lt;') .replace(/\n/g, "<br>")+"</p>"); } } butt.onclick = search_s; ee.focus(); </script> </body></html> Заключение Широкие возможности языка программирования Javascript делают возможным создание полноценных приложений для мобильных устройств, как работающих в режиме онлайн, так и без подключения к интерету. Во многих случаях создание таких приложений возможно непосредственно на мобильном телефоне, что было экспериментально подтверждено. Литература 1. 2. 3. 4. ECMAScript Language Specification (http://www.ecmainternational.org/publications/files/ECMA-ST/ECMA-262.pdf) http://dev.w3.org/html5/webstorage/ http://www.onicos.com/staff/iz/release/zlib-js/zlib-js.html JavaScript: The Definitive Guide, 5th Edition, Publisher: O'Reilly Pub Date: August 2006 Print ISBN-10: 0-596-10199-6 Print ISBN-13: 978-059-610199-2