Софт, формат, стандарт и немного занудства — опыт разработки программы для обработки геоботанических данных

в 0:16, , рубрики: open source, Носимая электроника, Программирование, Софт, фитософт

Приветствую почтенных Гиков! В студенческие годы я пошел по наклонной и стал ботаником. Да-да, самым настоящим, который рвет «траву и лишаи», а после сидит с тяжеленными определителями. И хоть это не стало основным видом моей деятельности, но все-таки часть ботанической (точнее геоботанической) работы мне досталось. Под катом — взгляд на работу геоботаника с позиции айтишника, выраженный через опыт разработки костыльного софта. Обращаю ваше внимание, что слова «работа геоботаника» и «взгляд айтишника» расположенные в одном предложении означают, что дальнейший текст противопоказан беременным, несовершеннолетним, а также людям с неустойчивой психикой и сердечно-сосудистыми заболеваниями.

Софт, формат, стандарт и немного занудства — опыт разработки программы для обработки геоботанических данных - 1

«Кто такой Тайлер Дёрден?»

Меня часто спрашивают, знаю ли я Тайлера Дёрдена кто такие геоботаники? Отвечаю: геоботаники — специалисты по растительным сообществам. В отличии от, например, систематиков, которые путешествуют из одной пыльной гербарной в другую, геоботаники свой материал собирают исключительно в поле, составляя геоботанические описания — специальные таблицы, в которых указано какие растения и в каких объемах произрастают на площади. По этим таблицам в дальнейшем можно определить показатели плодородия и влажности почвы, антропогенную нарушенность, кормовую ценность участка и много других интересных вещей. И, как вы понимаете, это определение ведется так же как и в эпоху, «когда динозавры были маленькие» — с бумажным бланком и миллиметровкой. Самые продвинутые используют Excel.

«А теперь, Горбатый!»

Перефразирую Жеглова: «Геоботаник, который вносит данные из бумажного бланка в Excel, зря получает рабочую карточку». И дело тут вовсе не в экселе. К этой программе претензий нет — вещь замечательная, к тому же тотально перекраденная, с доступной portable-версией. И даже то, что формат xls не ГОСТовский, не только не беспокоит, но даже неизвестно основной массе специалистов. Основная проблема перевода с бумажных бланков в табличные радакторы состоит в бесполезности этой работы.

Чем плохи экселевские таблицы? Вот вам аналогия с книгами: лет пять назад я начал активно собирать коллекцию из отсканированных pdf и djvu версий книг. За годы коллекция разрослась до сотен гигабайт, и пожалуй единственного чего в ней нет это пользы. После определенного момента, я полностью перестал пользоваться этими книгами, поскольку времени на поиск информации в моей библиотеке уходило больше чем на поиск такой информации в интернете. Форматы электронных книг хороши для художественных романов на ридерах, но для хранения технической литературы подходит только сеть и никак иначе. От того, что «Флора СССР» отсканирована, она не станет более востребованной чем ботанические разделы Википедии.

То же самое с геоботаническими описаниями. Работая по проекту восстановленной циркумбореальной растительности я собрал небольшой электронный фитоценарий (коллекция геоботанических описаний) — в несколько сотен описаний, в наивной попытке обработать его. Тут требуется отметить, что описания в фитоценарии были сделаны в разных природных зонах, разными авторами, в разное время, разными методами. Такие описания принципиально невозможно стандартизировать и сравнивать, если конечно речь не идет о грубом качественном сравнении («тамо были лишаи, а тамо мохи и евоные ягоды»). Даже работа, по формированию единой базы данных на основе этих описаний мучительна и уже потому неправильна.

«Надо понимать всю глубину наших глубин!»

Да, я опять нудю (или нужу?) об отсутсвии стандартов и нелепости современной геоботаники. Это Леонтий Раменский мог позволить себе собрать десятки тысяч описаний и вручную их обработать. Сегодня это невозможно — никому не нужны такие работы, даже при том, что реально увеличить производительность за счет технических средств. Поэтому, если мы хотим работать с крупными фитоценариями, необходимо объединять наработки каждого в единую базу. Но для этого следует хотя-бы оформлять описания по единым стандартам, а не как придется.

Да, я конечно понимаю, что «научная» полевая работа — это сегодня очень часто не более чем оплачиваемые турпоездки. Потому и не ставится вопрос об единых стандартах и методах. Потому и не поднимается вопрос о целесообразности публикаций описаний в журнале «Растительность России» (за публикацию таблиц описаний в БУМАЖНОМ журнале уже давно пора давать орден «почетный старпер»). Однако же, на дворе 21 век, а геоботаники продолжают заполнять бумажные бланки собственного изобретения.

«Это вам не это!»

Первую попытку оптимизировать работу с «сырыми» описаниями я предпринял три года назад в рамках работ над программой PhytoSoft (разработка велась в Borland C++ Builder 6). На тот момент, стояла задача облегчить и ускорить ввод данных с полевого бланка, для последующего анализа по экологическим шкалам Л.Г. Раменского (помните, я выше говорил о том, что с помощью геоботанических описаний можно определять плодородие и влажность почвы? Это, как раз и есть «метод экологических шкал»). Программу удалось довести до работоспособного состояния, но при крайне низком бюджете, она так и осталась на этапе альфа-тестирования и позже была выложена в открытый доступ со всеми своими тараканами.

Софт, формат, стандарт и немного занудства — опыт разработки программы для обработки геоботанических данных - 2

Во многом, решение открыть исходный код было обусловлено тем, что я совершенно не представлял каким образом извлечь из нее деньги. Тех 800 долларов, которые удалось за нее выручить не хватило даже на оплату текущих расходов. Можно конечно было взять кредит, но на тот момент не было уверенности в успешности проекта. Тогда это были просто сомнения, сейчас я понимаю, что концепция «Фитософта» содержала в себе несколько ужасных стратегических ошибок. И дело даже не в том, что код — (вырезано цензурой) и руки растут из того же места, что и ноги. Сама идея того, что следует упростить ввод описаний с бланка в корне неверна.

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

Формат *.gbo который использован в Фитософте под эту задачу никак не подходил. Я не оформил должным образом спецификацию на него, но самое главное, что он тоже представлял собой те самые «строчки-колонки». Проще говоря, "*.gbo" — это большущая таблица, высотой в тысячу строк, шириной в несколько сот колонок. Каждое описание в таблице занимает одну строку. Описание разбито на логические элементы, которые размещаются в разных ячейчах. Например, в пятой ячейке первой строки указан автор первого описания, в шестой ячейке первой строки указана дата первого описания и т.д., в пятой ячейке второй строки указан автор второго описания, в шестой ячейке второй строки указана дата второго описания и т.д… Логика формата очень проста, но для импорта внешних файлов, последние приходилось мучительно переделывать (представьте: вашу сводную таблицу описаний необходимо перестроить таким образом, что-бы с 50 по 100 колонку шли названия видов, а с 101 по 151 их проективные покрытия). Эта проблема возникла от того, что вместо разработки программы под формат шла разработка формата под программу.

«Это не кадка, а настоящее японское фураке!»

Может быть я изобрел велосипед, но зато на собственной шкуре понял, что программное обеспечение и формат файла это никак не связанные (в плане разработки) вещи. Изначально следует разрабатывать формат файла, причем делать это независимо от того, когда и кем под этот формат будет написано программное обеспечение. После этого уже имеет смысл писать программу. При этом, придется решать многие задачи, которые не возникли бы при создании формата «под себя», но с другой стороны, риски того что формат будет обладать критическими недостатками снижаются.

Вот конкретный пример. Если вы изначально разрабатываете формат, как отдельный проект, то наверняка учтете, что он должен быть приспособлен для импорта в ГИС. После этого, начав разработку, вы будете вынуждены решать проблему с ГИС-совместимостью, даже если геоинформационными системами в вашей программе и не пахнет. Зато от этого формата не откажутся, что неизбежно произошло бы, когда выяснилось, что формат бесполезен для ArcGIS, QGIS или другой программы.

Формат файла должен быть максимально удобным для конвертации в другие и из других форматов.

Разрабатывая Фитософт в рамках идеи упрощения оцифровки бумажных бланков я ошибался. Бумажных бланков не должно быть вообще, полевые данные сразу должны быть готовы к обработке. Но, поскольку любой тупиковый путь рано или поздно заканчивается, примененная концепция довольно быстро изжила себя, породив новую проблему. С одной стороны, стало ясно, что геоботаник должен вводить данные в программу сразу после их получения в поле. С другой стороны, это означает, что он не будет пользоваться ни компьютером, ни ноутбуком. Планшеты? Но их цена столь же аморальна, как и срок заряда батареи. А самое главное, я вспомнил, в каком состоянии возвращаются полевые бланки — намокшие, с пятнами крови от раздавленных комаров. И со стороны пользователя я бы не хотел, что-бы моя (и не только моя) привычка не задумываясь бросать планшетку (которая скрепляет бумажные бланки) рядом с собой погубила однажды электронику. Планшет не подходил. Оставался смартфон. С точки зрения пользования это идеальный вариант — стоят они гораздо меньше, берут их с собой в любую погоду и вероятность повредить их гораздо меньше. Но в то же время это значит, что весь код, связанный с интерфейсом Фитософта можно удалять. Для полевых условий требуется что-то принципиально иное чем множество окон выбора.

«Айл би бэк»

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

За сим, я исчерпал свой рассказ. И с благодарностью приму любую критику и советы — ибо, как любил повторять один людоед: «Одна голова хорошо, а две лучше».

Автор: labfranep

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js