Приложение для переназначения клавиатурных сочетаний для Linux

Разработка приложения, предоставляющего возможности для конфигурации пользовательского ввода и автоматизации рабочего окружения. Реализация парсера на языке программирования Rust. Протокол взаимодействия между серверной и клиентской частями приложения.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 13.07.2020
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

1. Проверяется был ли модуль с заданным путем ранее загружен. Если он был ранее загружен, то осуществляется переход к шагу 6;

2. Производится создание лексического окружения;

3. Производится создание структуры типа Module;

4. Производится регистрация ранее созданного лексического окружения и структуры Module;

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

6. Затем, осуществляется импорт заданных значений модуля. Если таких экспортируемых значений в модуле не оказалось, возвращается ошибка.

Структура Interpreter представлена на листинге 25.

pub struct Interpreter {

environment_arena: EnvironmentArena,

module_arena: ModuleArena,

root_module_id: ModuleId,

main_module_id: ModuleId,

current_module: ModuleId,

string_arena: StringArena,

keyword_arena: KeywordArena,

symbol_arena: SymbolArena,

cons_arena: ConsArena,

object_arena: ObjectArena,

function_arena: FunctionArena,

context: Context,

exclusive_nil: SymbolId,

exclusive_nil_value: Value,

internal_functions: HashMap<String, FunctionId>,

special_variables: HashMap<SymbolId, SpecialVariableFunction>,

call_stack: CallStack,

this_object: Option<ObjectId>,

is_listening: bool,}

Листинг 25. Структура Interpreter

Интерпретатор состоит из следующих частей:

· Арена лексических окружений;

· Арена модулей;

· Поля root_module_id, которое хранит идентификатор главного модуля, чье лексическое окружение является глобальным лексическим окружением;

· Поля main_module_id, которое хранит идентификатор модуля, которое создается на этапе инициализации интерпретатора. В лексическом окружении, связанного с этим модулем, осуществляется исполнение пользовательского кода;

· Поля current_module_id. Идентификатор модуля, в лексическом окружении которого, в котором производится вычисленный в данный момент времени;

· Арены строк, ключевых значений, символов, упорядоченных пар, объектов и функций;

· Значения типа Context, который хранит такие значения интерпретатора, которые не должны быть доступными для интерпретируемого кода;

· Полей exclusive_nil и exclusive_nil_value - хранящих идентификатор символа с именем “nil”;

· Поля internal_functions, хранящего набор пар (строка, идентификатор функции). Это поле используется для быстрого получения определенных идентификаторов функций. Например, в этом поле хранится идентификатор функции с именем “_break”, который затем добавляется в лексические окружения, созданные вызовом специальных форм циклов “while”, “ dolist”,” dotimes”;

· Поля special_variables, хранящего набор пар (символ, ссылка на функцию). Функции, заданные в этом поле, имеют ту же сигнатуру, что и другие встроенные функции. Они используются для вычисления значений специальных переменных, таких как this, super.

· Поля call_stack - хранящего стек вызовов функций интерпретатора;

· Поля this_object_id - хранящего идентификатор объекта в арене объектов, в контексте которого производится вычисление кода в данный момент времени;

· Флаг, указывающий запущен ли интерпретатор в цикле событий.

Пример запуска интерпретатора приведен на рисунке 1.

Рисунок 1 Пример запуска интерпретатора

3.4 Стандартная библиотека

Вместе с интерпретатором поставляется стандартная библиотека - набор функций, объектов, переменных, которые можно использовать для написания скриптов. На таблице 2 приведены основные специальные формы, составляющие основу языка.

Таблица 2 Описание основных специальных форм

Специальная форма

Описание

import

Предназначена для осуществления импорта экспортируемых значений из модулей.

export

Предназначена для осуществления экспорта значений из модуля.

let

Создает новое лексическое окружение, в котором объявляет переменные и исполняет переданный специальной форме код в созданном лексическом окружении.

let*

Создает новое лексическое окружение, в котором объявляет переменные и исполняет переданный специальной форме код в созданном лексическом окружении.

flet

Создает новое лексическое окружение, в котором объявляет интерпретируемые функции и исполняет переданный специальной форме код в созданном лексическом окружении.

flet*

Создает новое лексическое окружение, в котором объявляет интерпретируемые функции и исполняет переданный специальной форме код в созданном лексическом окружении.

mlet

Создает новое лексическое окружение, в котором объявляет макросы и исполняет переданный специальной форме код в созданном лексическом окружении.

mlet*

Создает новое лексическое окружение, в котором объявляет макросы и исполняет переданный специальной форме код в созданном лексическом окружении.

match

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

try

Выполняет переданный ей код. Если во время выполнения кода вернулась ошибка, то эта ошибка может быть перехвачена обработчиками ошибок, переданными в эту специальную форму.

throw

Конструирует объект ошибки с заданным именем и сообщением и возвращает ее в вызывающий код.

define-function

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

define-variable

Объявляет переменную с заданным именем в глобальном лексическом окружении.

fset

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

set

Осуществляет присваивание значения переменной с заданным именем в глобальном лексическом окружении.

block

Осуществляет вычисление последовательности значений. Возвращает результат вычисленных значений, агрегированных в список.

progn

Осуществляет вычисление последовательности значений. Возвращает последнее вычисленное значение.

cond

Принимает список пар (предикат, список значений). Вычисляет первый список значений, результат вычисления предиката которого есть “#t”.

function

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

quote

Возвращает переданный ей аргумент не вычисленным.

На таблице 3 приведены дополнительные специальные формы.

Таблица 3 Описание дополнительных специальных форм

Специальная форма

Описание

and

Специальная форма возвращающая или первый вычисленный аргумент не в истинное значение, или последнее вычисленное значение в противном случае.

or

Специальная форма возвращающая или первый вычисленный аргумент в истинное значение, или последнее вычисленное значение в противном случае.

dolist

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

dotimes

Создает лексическое окружение, вычисляя переданный ей код заданное количество раз в созданном лексическом окружении.

while

Вычисляет переданный ей код до тех пор, пока условие цикла не будет вычислено в ложное значение.

На таблице 4 приведены основные встроенные функции.

Таблица 4 Описание основных встроенных функций

Функция

Описание

type

Возвращает строку - тип переданного ей аргумента.

assert

Возвращает ошибку, если переданный ей аргумент вычислился в ложное значение.

cons:car

Возвращает car значение переданной ей Cons ячейки.

cons:cdr

Возвращает cdr значение переданной ей Cons ячейки.

caar, cadr подобные функции

Возвращают результат применения функций car и cdr заданное количество раз в заданно порядке. Например, функция “caadddr” возвращает результат последовательного применения функции “cdr”, “cdr”, “car”, “car”, “car”.

cons:new

Возвращает сконструированную Cons ячейку, состоящую из переданных функции аргументов.

dec

Возвращает число, уменьшенное на единицу.

/

Осуществляет деление переданных ей аргументов.

eq?

Возвращает истинное значение, если переданные функции аргументы равны по значению.

equal?

Возвращает истинное значение, если переданные функции аргументы глубоко равны.

eval

Вычисляет переданное ей значение в том лексическом окружении, из которого она была вызвана.

flookup

Возвращает значение функции переданного ей символа в ближайшем лексическом окружении.

>=

Возвращает истинное значение, если первый аргумент больше или равен второму.

gensym

Принимает на вход строку, возвращает символ с именем, равным переданной ей строке. Каждый возвращенные этой функцией символ имеет уникальный идентификатор, потому, каждый возвращенный этой функцией символ не равен никакому другому символу.

>

Возвращает истинное значение, если первый аргумент больше второго.

inc

Возвращает переданное ей значение, увеличенное на единицу.

intern

Принимает на вход строку, возвращает символ с именем, равным переданной ей строке и идентификатором равным 0.

<=

Возвращает истинное значение, если первый аргумент меньше или равен второму.

list:new

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

lookup

Возвращает значение переменной переданного ей символа в ближайшем лексическом окружении.

<

Возвращает истинное значение, если первый аргумент меньше второго.

*

Возвращает результат умножения переданных функции чисел.

neq?

Возвращает истинное значение, если переданные функции аргументы не равны по значению.

nequal?

Возвращает истинное значение, если переданные функции аргументы не глубоко равны.

not

Возвращает истинное значение, если переданный ей аргумент не является истинным значением. Иначе, возвращается ложное значение.

%

Возвращает остаток от деления.

cons:set-car!

Присваивает car значению переданной ей Cons ячейки заданное.

cons:set-cdr!

Присваивает cdr значению переданной ей Cons ячейки заданное.

string

Конструирует строку из переданных ей аргументов.

-

Возвращает разность переданных ей аргументов, если их было передано два. Если был передан один аргумент, возвращает его инвертированным.

+

Возвращает сумму переданных ей аргументов.

На таблице 5 приведены основные макросы.

Таблица 5 Основные макросы

Макрос

Описание

defv

Раскрывается в вызов специальной формы “define-variable”. Объявляет переменную глобальном лексическом окружении с заданным значением.

defn

Раскрывается в вызов специальной формы “define-variable”. Объявляет функцию в глобальном лексическом окружении с заданными аргументами и телом функции.

defm

Раскрывается в вызов специальной формы “define-variable”. Объявляет макрос в глобальном лексическом окружении с заданными аргументами и телом функции.

fn

Раскрывается в вызов специальной формы “fn”. Создает функцию заданными аргументами и телом функции

if

Раскрывается в вызов специальной формы “cond”. Принимает три аргумента. Если первый аргумент вычислился в “#t”, возвращается результат вычисления второго аргумента. Иначе, возвращается результат вычисления третьего аргумента.

when

Раскрывается в вызов специальной формы “cond”. Принимает два аргумента. Если первый аргумент вычислился в “#t”, возвращается результат вычисления второго аргумента. Иначе, возвращается “nil”.

unless

Раскрывается в вызов специальной формы “cond”. Принимает три аргумента. Если первый аргумент вычислился в “#f”, возвращается результат вычисления второго аргумента. Иначе, возвращается “nil”.

На таблице 6 приведены встроенные объекты.

Таблица 6 Встроенные объекты

Объект

Описание

action

Содержит функции для генерации действий.

bit

Содержит функции для работы с числами на уровне отдельных бит.

cons

Содержит функции для работы с упорядоченными парами.

func

Содержит функции для работы с функциями.

is

Содержит функции, определяющие, удовлетворяют ли значения определенным предикатам.

keyboard

Содержит функции для переназначения клавиатурных сочетаний.

list

Содержит функции для работы со списками.

logic

Содержит функции для работы с булевыми значениями.

math

Содержит функции для работы с числами.

nia

Содержит функции для выполнения интерпретатором команд, например, закрытия интерпретатора.

object

Содержит функции для работы с объектами.

rand

Содержит функции, возвращающие случайные значения.

string

Содержит функции для работы со строками.

to

Содержит функции, конвертирующие значения одного типа, в другой тип.

3.5 Цикл событий

После завершения инициализации интерпретатора, для интерпретатора запускается цикл событий. Общая схема цикла событий изображена на рисунке 2.

Рисунок 2 Цикл событий интерпретатора

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

· Получение команд интерпретатора, их исполнение и отправка результатов;

· Обработка действий, пришедших из потока действий;

· Отправка команд рабочим потокам;

· Сборка мусора.

Схема работы сервера изображена на рисунке 3.

Рисунок 3 Структура сервера

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

· Чтение запросов из клиентских соединений;

· Выполнение клиентских запросов;

· Отправка команд интерпретатору, получение результатов исполнения этих команд;

· Отправка результатов через клиентские соединения. Сообщения и результаты кодируются с помощью сгенерированных сериализаторов и десериализаторов для разработанного протокола.

Состояние сервера и интерпретатора оборачивается в примитив Mutex, что позволяет исключить возможность возникновения гонки данных.

Общая схема обработчиков событий приведена на рисунке 4.

Рисунок 4 Структура обработчиков событий

Для каждого устройства, для которого осуществляется переназначения, создается поток, осуществляющий чтение событий ввода. Эти потоки затем пересылают события агрегатору событий устройств. Затем, эти события пересылаются в поток генератора событий нажатий клавиатурных сочетаний. Затем, события нажатий клавиатурных сочетаний пересылаются в поток агрегатора событий. Помимо событий клавиатурных событий, в агрегатор могут поступать события и из других генераторов событий, таких как генераторы событий оконного менеджера, системных событий и других.

Наконец, поток агрегатора событий пересылает события в цикл событий, где осуществляется их обработка.

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

Помимо нажатий клавиш, рабочие потоки способны осуществлять следующие действия:

· Симуляция зажатия/отжатия/нажатия клавиш клавиатуры;

· Симуляция зажатия/отжатия/нажатия кнопок клавиатуры;

· Ввод текста;

· Исполнение функции, написанной на встроенном скриптовом языке;

· Перемещение курсора мыши в определенное местоположение;

· Смещение курсора мыши относительно текущей позиции;

· Исполнение команды операционной системы.

Схема рабочих потоков приведена на рисунке 5.

Рисунок 5 Структура рабочих потоков

Пример вывода, произведенного сервером после запуска сервера приведен на рисунке 6.

Рисунок 6 Пример запуска сервера

3.6 Протокол взаимодействия

Протокол взаимодействия описывает формат сообщений, с помощью которых серверная и клиентская часть взаимодействуют друг с другом. Взаимодействие осуществляется поверх протокола WebSocket. Протокол взаимодействия реализован с помощью библиотеки Google Protocol Buffers.

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

· Клиент отправляет запрос серверу;

· Сервер отправляет результат запроса клиенту.

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

· Сообщение рукопожатия. Запрос этого типа не имеет параметров. В результате запроса содержится версия сервера и дополнительная информация;

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

· Сообщение исполнения кода. Запрос содержит код, который необходимо выполнить интерпретатору. Результат запроса содержит результат выполнения кода;

· Сообщение использования устройства для переназначения. В запросе содержится идентификатор устройства. В результате запроса содержится информация о том, получилось ли включить устройство для переназначения;

· Сообщение о том, что устройство не должно использоваться для переназначения. В запросе этого типа содержится идентификатор устройства. В ответе содержится результат исключения устройство из переназначения;

· Сообщение регистрации нового модификатора. В запросе содержится идентификатор устройства и код клавиши. В ответе содержится результат;

· Сообщение удаления ранее зарегистрированного модификатора. В запросе содержится идентификатор устройства, в ответе содержится результат удаления;

· Сообщение регистрации нового функционального действия. В запросе содержится последовательность базовых действий и имя нового функционального действия;

· Сообщение удаления ранее зарегистрированного функционального действия. В запросе содержится имя функционального действия. В ответе содержится результат удаления;

· Сообщение регистрации переназначения последовательности клавиатурных сочетаний. В запросе содержится последовательность клавиатурных сочетаний и имя функционального действия. В ответе содержится результат регистрации и идентификатор зарегистрированного переназначения последовательности клавиатурных сочетаний;

· Сообщение изменения переназначения последовательности клавиатурных сочетаний. В запросе содержится идентификатор регистрации переназначенной последовательности клавиатурных сочетаний и имя функционального действия. В ответе результат удаления;

· Сообщение удаления переназначения последовательности клавиатурных сочетаний. В запросе содержится идентификатор регистрации переназначенной последовательности клавиатурных сочетаний. В ответе результат удаления;

· Старт переназначения. В запросе не содержится параметров. В ответе содержится результат старта;

· Прекращение переназначения. В запросе не содержится параметров. В ответе содержится результат прекращения переназначения.

3.7 Консольный клиент

Консольный клиент предоставляет цикл REPL (Read Print Eval Loop), из которого клиент считывает команды для передачи серверу для выполнения, и, выводит результат применения команд.

Пример запуска консольного клиента приведен на рисунке 7.

Рисунок 7 Пример запуска консольного клиента

3.8 Графический клиент

Графический клиент предоставляет графический интерфейс, позволяющий пользователю производить следующие действия:

· Вывод визуальной модели клавиатуры;

· Выделение клавиш клавиатуры;

· Регистрация и удаление модификаторов;

· Регистрация и удаление функциональных действий;

· Регистрация и удаление переназначения последовательностей клавиатурных сочетаний;

· Включение/исключения устройства из переназначения;

· Вывод переназначения клавиатурных сочетаний, в которых участвуют выделенные клавиши;

· Возможность редактирования файлов скриптов на диске;

· Возможность выделения участка редактируемого кода для их передачи серверу для выполнения;

· Возможность старта переназначения клавиатурных сочетаний;

· Возможность прекращения переназначения клавиатурных сочетаний.

Для разработки графического клиента использовался язык программирования Typescript.

Интерфейс приложения разработан с помощью прогрессивного фреймворка Vue.js. Для облегчения управления состоянием приложения, использовалась библиотека Vuex. Для организации маршрутизации использовалась библиотека Vue-router.

Для обеспечения возможности исполнения в качестве отдельного графического приложения, использовался фреймворк Electron. Для компиляции файлов SFC(Single File Component) фреймворка Vue, а также для генерации единственного скриптового файла использовались инструменты Webpack, Babel. Тестирование осуществлялось с помощью библиотек Chai и Mocha.

Каждое приложение, использующее фреймворк Electron.js исполняется в нескольких процессах: главном процессе, реализующем логику приложения, и одном или нескольких процессов рендеринга, в котором осуществляется отрисовка графического интерфейса приложений.

Для синхронизации между этими процессами, фреймворк Electron предоставляет механизм Channel, с помощью которого главный процесс и процессы рендеринга могут обмениваться сообщениями. Однако, во время передачи сообщений, происходит их сериализация с помощью алгоритма Structured Clone, в результате которой из сообщений стирается вся информация о цепочке прототипов содержимого сообщений [19]. В результате, отправляются только примитивные типы данных и объекты JavaScript, содержащие только примитивные типы данных. Такие сущности, как дескрипторы свойств, геттеры, сеттеры и т.п. сериализованы не будут. Поэтому, для обеспечения прозрачной передачи результатов запросов от сервера, происходит их дополнительная сериализация и десериализация в примитивные типы данных JavaScript. Взаимодействие сервера и процессов графического клиента приведено на рисунке 8.

Рисунок 8 Взаимодействие сервера и графического клиента

Графический клиент приведен на рисунках 9 и 10.

Рисунок 9 Графический клиент

Рисунок 10 Окно редактора графического клиента

Заключение

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

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

Список использованных источников

1. Free minix-like kernel sources for 386-AT / Google Groups.

2. Linux, the world's most widespread OS, turns 25 years old / A Global Digital Media Network

3. Linux Input Subsystem userspace API / The Linux Kernel Archives. McCarthy J. Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I // Massachusetts Institute of Technology. Cambridge: Massachusetts Institute of Technology, 1960.

4. McCarthy J. History of Lisp // Stanford University. Stanford, California: Stanford University, 1979.

5. How Lisp Became God's Own Programming Sinclair Target. Learning Parser Combinators With Rust / Bodil Stokke

6. Harold Abelson and Gerald Jay Sussmanwith Julie Sussman Structure and Interpretation of Computer Programs. 2 изд. Cambridge, Massachusets: The MIT press, 1996.

7. The Rust Programming Language / Steve Klabnik and Carol Nichols, with contributions from the Rust Community.

8. Rust by Example / Rust Community.

9. ECMAScript® 2019 Language Specification / Ecma International.

10. Node.js for Embedded Systems / Kelsey Breseman, Patrick Mulder.

11. Node Package Manager / npm, Inc.

12. Build cross-platform desktop apps with JavaScript, HTML, and CSS / Electron Community.

13. Vue The Progressive JavaScript Framework / Vue Community.

14. Node.js / OpenJS Foundation.

15. Protocol Buffers Compiler (protoc) plugin for TypeScript and gRPC-Web / Improbable Engineering.

16. Rust implementation of Google protocol buffers / Stepan Koltsov.

Размещено на Allbest.ru


Подобные документы

  • Разработка сетевой карточной игры "King" для операционной системы Windows XP. Реализация приложения с помощью интерфейса прикладного программирования Win32 API. Назначение серверной и клиентской части. Анализ исходных данных, тестирование приложения.

    курсовая работа [209,3 K], добавлен 24.01.2016

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

    дипломная работа [2,7 M], добавлен 07.07.2012

  • Разработка и реализация демонстрационного многопоточного приложения. Выбор основных средств реализации. Описание логики работы приложения и разработка программного обеспечения. Описание пользовательского интерфейса. Реализация потоков в Delphi.

    курсовая работа [462,5 K], добавлен 10.08.2014

  • Назначение и возможности разработанного приложения для контроля активности сетевых и периферийных устройств предприятия. Язык программирования Java. Распределенные многоуровневые приложения. Структура базы данных, интерфейс разработанного приложения.

    курсовая работа [1,0 M], добавлен 16.12.2012

  • Разработка программного приложения для автоматизации рабочего места кладовщика на центральном складе предприятия. Решение задачи создания клиент-серверной архитектуры базы данных в среде программирования Delphi 7 и Interbase для "Windows 9X(NT)".

    дипломная работа [1,8 M], добавлен 19.06.2012

  • Обзор подходов к разработке музейных приложений с элементами дополненной реальности, формирование требований к ним. Выбор методов разработки приложения, разработка пользовательского интерфейса. Принципы тестирования. Реализация раздела "Распознавание".

    дипломная работа [2,8 M], добавлен 03.07.2017

  • Требования к операционной системе Linux, встраиваемые приложения. Предсказуемость поведения, свойства ОС реального времени. Структура ядра; системные вызовы; работа с файлами. Стандартные устройства; обзор программирования; компилирование и линковка.

    лекция [112,2 K], добавлен 29.07.2012

  • Создание, изучение и разработка приложение на Android. Среда разработки приложения DelphiXE5. Установка и настройка среды программирования. Этапы разработки приложения. Инструменты для упрощения конструирования графического интерфейса пользователя.

    курсовая работа [1,6 M], добавлен 19.04.2017

  • Разработка компьютерного приложения "Кипящая жидкость" с применением навыков программирования на языке Java. Проектирование алгоритма для решения поставленной задачи, его предметная область. Создание приложения с графическим пользовательским интерфейсом.

    отчет по практике [3,0 M], добавлен 29.10.2015

  • Архитектура и история создания операционной системы Android. Язык программирования Java. Выбор средства для реализации Android приложения. Программная реализация Android приложения. Проведение тестирования разработанного программного обеспечения.

    курсовая работа [167,8 K], добавлен 18.01.2017

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.