Auto DeepSky Capturer — переход в веб

После трёх недель воздержания (был занят заработком денег … тем же самым программированием), продолжил разработку Автоматизатора съёмки дипская. Программа лично мне очень нужная, да и другим может оказаться полезной.

autoastro-diagramСразу хочу извиниться за обилие программерских терминов. Итак, сегодня пол дня делал, с позволения сказать, концептуальный переход от C# программы с еёшным же GUI к … тоже C# программе, но весь пользовательский интерфейс буду переносить в привычный мне веб. Получается примерно так, как на диаграмме слева.

Браузер общается с самописным простым веб-сервером, написанным на C#, встроенным в программу Автоматизатора. Сервер отдаёт статику (html, css, js, fonts), и служит REST API шлюзом. Через этот самый REST, пока что без авторизации, веб-приложение на javascript может как получать данные, так и давать команды Автоматизатору.

Автоматизатор же, через ASCOM-абстракцию общается непосредственно с оборудованием по одному ему известному принципу.

По сути вся логика программы живёт в ядре, написанном на C#. Веб реализует лишь интерфейсные функции. Но реализует их хорошо, качественно и красиво.

Зачем это нужно?

Во-первых, я ненавижу программирование интерфейсов в Windows.Form. Я не умею и не испытываю ни малейшего желания учиться. Стоило мне запустить программу на другом компе, как начались проблемы. То залезло на это, тут буквы распёрлись, а вон то и вовсе почему-то не показалось. Почему? Не интересно. Я знаю веб (javascript, dhtml, REST). Я хорош в нём. Так зачем мне изначально делать кривой продукт? Ни к чему.

Во-вторых, Автоматизатор всё равно нужно было бы выносить в веб, ибо там ему самое место. Вот и получалось, что мне нужно было бы сначала реализовать весь интерфейсный функционал в C#, а потом повторять его в вебе. Это удваивает работу. Это усложняет поддержание, ведёт к грусти моей и грусти пользователей. Ибо я тут один и, увы, не могу уделить необходимое время проекту здесь и сейчас.

В-третьих, пока я пишу веб-приложение, я описываю, реализую и тестирую механизм внешнего взаимодействия программы. Её будущее и возможность расширения — её «лицо с компьютерным интерфейсом» — REST API.


Именно поэтому я сегодня потратил несколько часов на догугливание и допиливание однопоточного веб-сервера на C#, а так же набросал каркас twitter bootstrap приложения на html5 / javascript.

Была идея, кроме веб-сервера встроить в C# прогу и WebSocket сервер. Но я отказался от неё, так как не спутник запускаю и можно позволить себе потерять актуальность до пяти секунд, например, повысить потребление трафика до десятка мегабайт за ночь. Не факт, что на вебсокетах получилось бы сильно дешевле по трафику.
Дополнительная мотивация отказа от сокетов — необходимость прокидывания дополнительного IP-порта для них. А так как основной концепцией программы остаётся DSS-style (простота интерфейса вкупе с внутренней мощью), то один, стандартный 80й порт — то, что доктор прописал.

«А как же», — спросите вы, — «как же управлять программой на том же компе, где снимаю? Если у меня не удалённая обсерватория, а вот он, маленький телескоп в метре от меня».

Ответ простой и незамысловатый. Можно управлять с того же компа, зайдя по адресу http://127.0.0.1 (локальный комп — как раз такой пример на скриншоте ниже). Можно зайти с мобилы или планшета. Можно зайти даже со smart-tv : ) или же с соседнего компа. Больше того, можно зайти со всех эти устройств и ещё дать доступ соседу-Ваське, чтобы тот радовался Космосу. Это веб, он доступен отовсюду. В этом его фишка. Примерный вид каркаса приложения такой:

autoastro-5

Завтра планирую начать реализовывать и документировать REST API.