Новый флаг России

Новый флаг России (заблокировано Роскомнадзором, для чтения пишите в личку)

«- Ваш дизайн — говно!
— Но это дизайн говна!
— А, ну тогда нормально»
Старый анекдот

Буду сразу ебашить сермягу, поэтому не серчайте. Современный флаг России выглядит хуево. С таким флагом только раненым пидарасам сдаваться. Это после распада Союза было актуально, но ебаный стыд, треть века прошло! Мы конечно хуи валенками не пинаем, но на месте не стоим. Лет двадцать назад никто представить не мог, что в обмен на сыр, который мы применяем для укладки тракторных дорог, европейцы будут закупать в России культуру в лице чуваков, которые яйца к площади прибивают. Ебче всего уровень современных достижений сформулировал еще в начале девяностых Юрий Клинских. А как расцвела Москва при Собянине! Короче: жить сейчас со старым флагом никак нельзя, а потому я засосал стакан и захуярил новый флаг страны.

Выглядит блевотно, но зато видна самоирония. У всех стран флаги яркие, а наш будет мрачен как прокурор с бодуна — потому что нельзя достигнуть успеха повторяя за другими, надо выделяться. Основной фон черный — символизирует анархию, которая главенствует на большей части страны. Для москвичей поясню. Россия — это как метро. На станциях-городах движ и яркие лампочки, но основная часть в темноте. Можно посмотреть из окна поезда, но быстро надоест. У каждого есть шанс снаружи побывать, но только когда наступит пиздец. Хотя и в этом случае все выйдут из вагона и пойдут к ближайшей станции.

Крест на флаге напоминает Андреевский, как на флоте, но красный как в армии. Цвет хуй пойми какой — ну извините, какая армия с флотом, такой и цвет. Но тут сразу несколько смыслов. С одной стороны, это крест с военно-морского флага. С другой стороны, это крест, а значит духовность, причем как и духовность кривой. С третьей стороны, это крест на флаге анархистов, который перечеркивает безвластие жестким режимом.

Сердцевина креста выкрашена в цвет HEX #980002. По текстовому наименованию — кроваво-красный. Постепенно он переходит в пыльно-розовый: HEX #d58a94. Еще одна тонкость — крест на флаге нихуя не крест, а сердцевина из знака бесконечности. Прерывается знак или нет — никто не знает, поскольку если и прерывается, то где-то далеко, за границами флага.

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

Оптимисты могут видеть во флаге темную коробку, створки которой открываются навстречу Солнцу. Пессимисты могут видеть ту же коробку, но створки открываются снизу и мы падаем в какую-то жопу. Лингвисты увидят на флаге букву «Х». Историки-лингвисты букву «Хер» («хѣръ»). Математики увидят «икс», египтологи — пирамиды, географы — стороны света, водители — перекресток, почтальоны — конверт, дальтоники — хуйню на черном фоне. Это флаг для всех и для каждого!

Пойду еще стакан ебну.

fleur.js

Оценка кормовых угодий на JavaScript

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

Представим, что вы заимели в распоряжение некоторую площадь земли и намереваетесь распорядиться ей по хозяйски. Решив финансовые, кадастровые и прочие вопросы вы неизбежно придете к вопросу: «Какова земля по своим качествам?». Годится ли для посадки помидоров или кроме кривой сосны ничего не вырастет? Какой цемент выбрать для фундамента: исходя из сухой почвы или периодически подтопляемой? Почему у соседа вызревает полна жопа огурцов, а у вас дохнет последний подорожник? Потому, что в почве элементов не хватает или соседские коровы все вытоптали?

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

Логично оценить угодья по местным растениям. Если условные редька и одуванчик нуждаются в одинаковых условиях, значит поле одуванчиков подходит для редьки. Это примитивная, но верная мысль. Преимущество растений в длительном росте, который накапливает свойства территории за большой период. Кроме того, изучая растительность мы снижаем риск ошибки, связанной с бочкой Либиха.
Бочка Либиха

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

Жизнь устроена сложнее наших условностей. Не бывает двух организмов, а уж тем более видов с одинаковыми требованиями к условиям обитания. «Что русскому хорошо, то немцу смерть» в переводе на экологический язык называется нормой реакции и выражается в кривой жизнедеятельности:
Кривая жизнедеятельности

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

Теоретически, мы можем построить такие кривые для любого фактора окружающей среды (вопрос эмергентности опустим — это тема долгого и сложного разговора). Нас не волнует медианное значение влажности почв. Мы хотим знать, достаточно ли влаги растениям? Это не одно и тоже: весной воды хоть залейся, но растения живут в условиях физиологической сухости, поскольку не могут впитать воду из холодной почвы. Вопрос шкалирования («в каких единицах измерять») решается принципом канторово-пелевинской «сиськой в себе». Рисуем пустую стобалльную шкалу, после идем в самое сухое место, определяем найденные растения и вписываем их в левую часть шкалы. Потом идем в самое сырое место и вписываем местные растения в правую часть шкалы. После делаем несколько десятков тысяч описаний из разных мест и расставляем на шкале встреченные виды.

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

Идя по градиенту влажности от сырого к сухому месту, вы встретите новые виды. Пока еще чахлые и редкие. Они едва выживают при такой влажности. Скоро этих растений станет больше. В идеальных условиях проективное покрытие возрастет до ста процентов — вспомните непроходимые заросли крапивы urtica dioica. На подходе к сухому месту проективное покрытие уменьшается, в сухих условиях остаются лишь единичные растения. В очень сухих ваши они уступают другим видам. За время похода вы пройдете несколько куполообразных изменений проективного покрытия, которые вспомните составляя шкалу:
Градиент изменения условий среды

Когда первая шкала готова, делим весь массив описаний на группы по влажности территорий и для каждой группы тем же методом строим шкалу «бедность-богатство-засоленность». Затем итеративно повторяем процесс для переменности увлаженения, аллювиальности почв, пастбищной дегрессии (вытоптанности) и чего душа пожелает.

Для работы необходимы десятки лет, миллиарды рублей и армия ботаников. Сегодня такие ресурсы получить невозможно, но по счастью кровавый сталинизм оставил в наследство не только сопливый дудевский фильм, но и результат работы института луговой и болотной культуры (сейчас НИИ кормов имени Вильямса), где под руковоством Л.Г. Раменского подготовлена прекрасная монография «Экологическая оценка кормовых угодий по растительному покрову». Книга содержит короткую пояснительную записку, методы анализа и таблицу на сотни страниц, где указано размещение видов растений на экологических шкалах в зависимости от проективного покрытия.
Книга Экологическая оценка кормовых угодий по растительному покрову

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

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

Казалось бы, любой первокурсник-технарь напишет алгоритм за пару часов, любой школьник, отличающий инкремент от компиляции закодит его за вечер. Все просто как две копейки. Но все программные реализации (включая мою работу десятилетней давности) напоминали сплетенные из вареных макарон костыли для безруких. Потому что легче «Анну Каренину» на машинный язык перевести, чем автоматизировать работу с экологическими шкалами Раменского.

Проблема исключительно гуманитарная. Ботаники — от студентов до докторов наук до сих пор не отличают электронную информацию от цифровой. Наука о растительности — это пещера в котором обитает карго-культ технологического развития. Попросите любого выслать метаданные описаний — столкнетесь с непониманием. Договоритесь о данных в цифровом виде — получите на почту вордовский файл с таблицами. Гусиные перья сменила печатная машинка, печатную машинку компьютер, но сама технология изучения растительности осталась на уровне гусиных перьев.

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

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

Линней, работая с номенклатурой не думал о том, что латынь уйдет в прошлое, а коробка размером с небольшой саквояж уместит в себе всю ботаническую литературу. Сегодня виды сохраняют латинское название (и это правильно), но саму латынь никто не помнит, герундий от герундива не отличает, рода путают между собой. В результате окончания видов обычно записаны с ошибками. Другое проблемное место — нечитаемые буквы. Попробуйте спустя месяц по памяти верно воспроизвести krascheninnikovii, krascheninnikoviana, или krascheninnikoviorum. Тут ботаники с лицом честного гаишника воскликнут, что они, дескать все выверяют по справочнику Черепанова. Клевер луговой у них трифолиум пратенсе, а клевер ползучий — амория репенс. Не верьте. При мне за несколько лет луговик извилистый из дешампсии стал лерхенфельдией, а из последней превратился в авенеллу. Все обсуждают подобные мелочные вопросы и никто не ничего хочет менять всерьез. А без изменений весь накопленный материал стоит дешевле макулатуры.

Я давно не работаю в государственном институте. Пол-месяца ввода, пол-месяца обработки и месяц дальнейшей психотерапии в мой прайс не включен, поэтому пришлось уйти от ботанических практик и минуя табличные редакторы, вводить данные сразу в виде js-объекта (в данные внесены искажения по условиям контракта, комментарии добавил для наглядности):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
var descript = [
{
time:20160602,
note:'GR-0602-1',
tags:'Сосняк, Мяглово-Карьер',
lat:59.82739,
lng:30.69896,
datum:'4326',
author:'S.N.Golubev',
feedback:'schwejk-rpnt@rambler.ru',
license:'CC-BY-NC-SA-3.0',
source:'fieldobserve',
aream:2411,
dendro:{   /*Характеристики древостоя*/
	allvolumemcb:329,   /*Запас, куб. м*/
	allfullmsq:34.4,    /*Абсолютная полнота, кв. м*/
	pins__sylrs:{       /*Данные по сосне - pinus sylvestris*/
		volumemcb:329,   /*Запас, куб. м*/
		fullmsq:34.4,    /*Абсолютная полнота, кв. м*/
		diasm:23,        /*Средний диаметр, cм*/
		heightm:24.7,    /*Высота, м*/
		age:70,          /*Возраст, лет*/
	},
},
grass:{   /*Данные по живому напочвенному покрову*/
	allcover:50,   /*Общее проективное покрытие яруса*/
	cover:{        /*Повидовое проективное покрытие*/
		vacnm_myrls/*Черника - Vaccinium_myrtillus_L*/:20,
		vacnm_vitd/*Брусника - Vaccinium_vitisidaea_L*/:30,
		conlr_majls/*Ландыш - Convallaria_majalis_L*/:5,
		trils_eurp_/*Седмичник - Trientalis_europaea_L*/:0.1,
		desps_flexs/*Луговик - Deschampsia_flexuosa_Trin*/:10,
		melrm_prans/*Марьянник - Melampyrum_pratense_L*/:0.1,
		luzl__pils_/*Ожика - Luzula_pilosa_L_Willd*/:0.1,
		calln_vulrs/*Вереск - Calluna_vulgaris_L_Hull*/:0.1,
		charn_anglm/*Кипрей - Chamerion_angustifolium_L_Holub*/:0.1,
		fragr_vesc_/*Земляника - Fragaria_vesca_L*/:0.1,
		soldg_virgr/*Золотарник - Solidago_virgaurea_L*/:0.1,
		maimm_biflm/*Майник - Maianthemum_bifolium_L_FW_Schmidt*/:0.1,
		desps_cests/*Щучка - Deschampsia_cespitosa_L_Beauv*/:0.1,
		},
	},
undergrass:{/*Данные по мохово-лишайниковому ярусу*/
	allcover:40/*Общее проективное покрытие яруса*/,
	cover:{
		polhm_specs:0.1/*Политрихум*/,
		plezm_schbr:40/*Плеуроциум*/,
		},
	},
},
]

Структура данных повторяет бланк описания (метаданные-древостой-живой напочвенный покров-мохово-лишайниковый ярус). Видам с незначительным обилием присвоено проективное покрытие 0.1%. Видовые названия записаны в виде одиннадцати символов: пять на род, пять на вид и символ нижнего подчеркивания между ними. Род и вид преобразуются в код вида по такому принципу:
— Первые три буквы таксона берутся без изменений (Convallaria — con);
— Последние две соответствуют двум последним согласным таксона (Convallaria — lr);
— Если букв в таксоне меньше пяти, пропуски заполняются нижним подчеркиванием (Poa pratense — poa___prans);
— Если после первых трех букв одна согласная или согласных нет — пустые места заполняются нижним подчеркиванием (Luzula_pilosa — luzl__pils_).

Это не самый удачный принцип, поскольку требует исключений. Например, одуванчики Taraxacum laticordatum и Taraxacum latisectum кодируются одинаково: tarcm_lattm. К более простому решению, которое обеспечивает автоматическую кодировку списка таксонов я пока не пришел. К счастью исключения редки даже для региональной флоры, для локальной совсем незначительны и легко отлавливаются простой проверкой по сортированному массиву.

После я перевел таблицу из книги Л. Г. Раменского в js-массив следующего вида:

1
2
3
4
5
6
7
8
9
10
11
12
var ramen = [
["КОД", "ВИД", "ШКАЛА", "ЗОНА", "ПОЧВА", "ПОКРЫТИЕ", "MIN", "MAX"],
["acalm_punns", "Acanthophyllum pungens (Bunge) Boiss.", "water", false, false, 0.3, 10, 15],
["acalm_punns", "Acanthophyllum pungens (Bunge) Boiss.", "water", false, false, 0.1, 8, 1000],
["acalm_punns", "Acanthophyllum pungens (Bunge) Boiss.", "rich", false, false, 0.3, 12, 15],
["acapr_schhr", "Acarospora schleicheri (Ach.). Mass.", "water", false, false, 2.5, 15, 19],
["acapr_schhr", "Acarospora schleicheri (Ach.). Mass.", "water", false, false, 0.3, 11, 22],
["acapr_schhr", "Acarospora schleicheri (Ach.). Mass.", "water", false, false, 0.1, 10, 35],
["acer__plads", "Acer platanoides L.", "water", false, false, 0.1, 65, 71],
["acer__plads", "Acer platanoides L.", "water", false, false, 0, 0, 91],
...
]

Массив состоит из 11 673 элементов, включая заголовок. Каждый элемент содержит информацию о видовом коде, таксоне, экологической шкале, минимальном и максимальном балле шкалы. Информация о типе почв и природно-климатической зоне отсутствует, но на случай развития проекта для этих данных оставлено место. В тех случаях, когда минимальный балл в книге не указан, в таблице стоит 0. Если не указан максимальный балл, в таблице стоит 1000.

Скрипт расчета Fleur.js содержит всего полторы сотни строк, но его следует сократить вдвое, поскольку вторая функция на 99% дублирует первую. На момент написания я вконец обленился и просто скопипастил свою же функцию, дополнив ее несколькими строками. Функция «ramenall(e)» подхватывает первое описание в серии, переводит абсолютные значения проективного покрытия из геоботанического описания в группы проективных покрытий шкал Л. Г. Раменского (единично-0.1, 0.1-0.3, 0.3-2.5, 2.5-8, 8 и более процентов). После сравнивает видовые списки из описания и таблицы экологических шкал на основе общего ключа кода видов. Найдя совпадение в коде, функция заполняет массив номером и таксонами описания с присвоением минимального и максимального балла для каждого вида. Если для вида информация отсутствует, скрипт выдает «-Infinity, Infinity;». После программа переходит к следующему описанию из серии. Когда описания заканчиваются, программа выводит собранный массив на html-страницу.

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

Обе функции потребляют на вход одинаковые аргументы: «rich» — богатство и засоленность почвы, «water» — влажность почвы, «waterwave» — переменность увлажнения, «alluvium» — аллювиальность почвы и «degrade» — пастбищная дегрессия.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
// Полный расчет (значения для всех видов)
function ramenall(e){
 
  for(var a=0; a<descript.length; a++)
  {
	  var gbo = descript[a]; // Текущее описание в обработке
	  var spec=[];           // Вид
	  var pokr=[];           // Проективное покрытие в процентах
	  var pokrball=[];       // Балл покрытия по Раменскому
	  var spectable=[];      // Обертка для spec, pokr, pokrball
 
// Перевод % покрытия в % покрытия по Раменскому	  
	  for(var key in gbo.grass.cover)
	  {
		  spec.push(key);
		  pokr.push(gbo.grass.cover[key]);
		  if(gbo.grass.cover[key]>=8.0 &&
				gbo.grass.cover[key]<100){pokrball.push(8.0);}
		  if(gbo.grass.cover[key]>=2.5 &&
				gbo.grass.cover[key]<8.0){pokrball.push(2.5);}
		  if(gbo.grass.cover[key]>=0.3 &&
				gbo.grass.cover[key]<2.5){pokrball.push(0.3);}
		  if(gbo.grass.cover[key]>=0.1 &&
				gbo.grass.cover[key]<0.3){pokrball.push(0.1);}
		  if(gbo.grass.cover[key]>=0.0 &&
				gbo.grass.cover[key]<0.1){pokrball.push(0.0);}
		}
 
// Заполнение таблицы для сравнения со шкалами    
	  spectable.push(spec);
	  spectable.push(pokr);
	  spectable.push(pokrball);
 
// Сравнение со шкалами   
	  for(var i=0; i<spec.length; i++)
	  {
		  for(var k=0; k<ramen.length; k++)
		  {
			  if(spectable[0][i]==ramen[k][0] && //Код вида
				ramen[k][2]==e && // Шкала (указана в HTML)
				ramen[k][3]==false && // Природная зона (игнорируется)
				ramen[k][4]==false && // Тип почвы (игнорируется)
				ramen[k][5]==spectable[2][i] // Проективное покрытие
				)
				{
// Публикация отчета в HTML
				var str = document.getElementById('tableResult');
				var add = str.insertRow(-1);
				var addTr = document.createElement("tr");
				var addTd = document.createElement("td");
					addTd.innerHTML=descript[a].note+", ";
					addTr.appendChild(addTd); // Номер описания
				var addTd = document.createElement("td");
					addTd.innerHTML=ramen[k][1]+", ";
					addTr.appendChild(addTd); // Название вида
				var addTd = document.createElement("td");
					addTd.innerHTML=spectable[1][i]+"%,      ";
					addTr.appendChild(addTd); // Покрытие
				var addTd = document.createElement("td");
					addTd.innerHTML=ramen[k][6]+",      ";
					addTr.appendChild(addTd); // Максимум
				var addTd = document.createElement("td");
					addTd.innerHTML=ramen[k][7];
					addTr.appendChild(addTd); // Максимум
				str.appendChild(addTr);
				};
		};
	};
};
}
 
// Краткий расчет (классический, результаты для пробной площади в целом)
function ramenbase(e){
	for(var a=0; a<descript.length; a++)
	{
		var gbo = descript[a];
		var spec=[];
		var pokr=[];
		var pokrball=[];
		var spectable=[];
 
		for(var key in gbo.grass.cover)
		{
			spec.push(key);
			pokr.push(gbo.grass.cover[key]);
			if(gbo.grass.cover[key]>=8.0 &&
				gbo.grass.cover[key]<100){pokrball.push(8.0);}
			if(gbo.grass.cover[key]>=2.5 &&
				gbo.grass.cover[key]<8.0){pokrball.push(2.5);}
			if(gbo.grass.cover[key]>=0.3 &&
				gbo.grass.cover[key]<2.5){pokrball.push(0.3);}
			if(gbo.grass.cover[key]>=0.1 &&
				gbo.grass.cover[key]<0.3){pokrball.push(0.1);}
			if(gbo.grass.cover[key]>=0.0 &&
				gbo.grass.cover[key]<0.1){pokrball.push(0.0);}
		}
 
		spectable.push(spec);
		spectable.push(pokr);
		spectable.push(pokrball);
 
		var ecoscalemin=[];// Шкала минимумов
		var ecoscalemax=[];// Шкала максимумов
 
		for(var i=0; i<spec.length; i++)
		{
			for(var k=0; k<ramen.length; k++)
			{
				if(spectable[0][i]==ramen[k][0] &&
				ramen[k][2]==e &&
				ramen[k][3]==false &&
				ramen[k][4]==false &&
				ramen[k][5]==spectable[2][i]
				)
				{
					ecoscalemin.push(ramen[k][6]);
					ecoscalemax.push(ramen[k][7]);
				};
			};
		};
 
		var str = document.getElementById('tableResultKratk');
		var add = str.insertRow(-1);
		var addTr = document.createElement("tr");
		var addTd = document.createElement("td");
			addTd.innerHTML=descript[a].note+",  ";
			addTr.appendChild(addTd); // Номер описания
		var addTd = document.createElement("td");
 
			// Максимальное значение шкалы минимумов
			addTd.innerHTML=Math.max.apply(Math, ecoscalemin)+",  ";
			addTr.appendChild(addTd); // Минимум
		var addTd = document.createElement("td");
 
			// Минимальное значение шкалы максимумов
			addTd.innerHTML=Math.min.apply(Math, ecoscalemax)+";  ";
			addTr.appendChild(addTd); // Максимум
		str.appendChild(addTr);
	};
}

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

Финализировать эту эпопею нужно тремя вопросами: почему JavaScript?, что дальше? и как использовать полученные результаты анализа?. JavaScript — потому что эти расчеты иногда требуется выполнять на чужих компьютерах без установленного R, Wine или другого софта. Что дальше — не знаю. Есть пару идей, но я три года ничего не менял, могу еще три года ничего не менять. А как использовать результаты я не расскажу, поскольку строки этой статьи все-равно никто не увидит. Программисты бросят читать на втором слове, а ботаники на четвертом.


По адресу городшахты.рф/source/fleur/ лежит готовая к использованию программа. Можете указать ссылку на свой набор геоботанических описаний в указанном выше формате и рассчитать богатство, увлажнение, переменность водного режима, аллювиальность и пастбищную дегрессию почв.
Полноценное теоретическое обоснование, альтернативные методы и материалы для контроля доступны в книге: Л. Г. Раменский, И. А. Цаценкин, О. Н. Чижиков, Н. А. Антипин «Экологическая оценка кормовых угодий по растительному покрову» Всесоз. науч. -исслед. ин-т кормов им. В. Р. Вильямса. М. : Сельхозгиз , 1956 470, [2] с.: ил., 1 л. граф.

Про OpenStreetMap

Про OpenStreetMap

Настоящая статья являет собой интервью, которое прислал Валерий Трубин.
Текст опубликован без изменений. Мнение автора может не совпадать с моим.
Н.К.

Сергей Голубев — натуралист, опытный осмер и автор блога «Город Шахты». Его размышления об OpenStreetMap всегда неожиданны, а потому вдвойне интересны. Он умеет найти необычный ракурс и на привычное посмотреть под другим углом. Зачем OSM нужны катастрофы, почему не существует его сообщества, а также какое будущее ждет этот проект — обо всем этом он рассказал в интервью.

— Как вы узнали о существовании OpenStreetMap?
— В 2007 или 2009 году по работе мне нужна была самая примитивная подложка для карты, на которой были бы основные города, линии рек и пр. Тогда еще не было QGIS, все делали в ArcView GIS 3.2a. Это сейчас не возникает вопросов, откуда в случае чего брать данные, чтобы не обводить их самому, а тогда это было целой задачей. Так я познакомился с OSM. Помимо рабочей необходимости у меня, конечно же, было и чисто человеческое любопытство. Когда появляется какой-то новый проект, всегда интересно его изучить, посмотреть как он работает.

— Какое тогда было сообщество OSM? Как вы в него вливались?
— Честно говоря, до сих пор не влился в него, потому что сообщество OSM – мнимое явление, его на самом деле не существует. Все то, что называют «Сообществом OSM» — это всего 20-30 человек, которые проявляют активность в Telegram’e и на форуме. Это ничтожное число от того количества людей, которые действительно мапят. Ведь большинство просто открывают JOSM или iD и ни в каких дискуссиях не участвуют. Но с теми 30-ми, которые открыты общению, я познакомился в 2014 году, после того как зарегистрировался в OSM. Кстати, к тому времени на GIS-Lab’e уже было большое активное сообщество, интересующихся картографией и всем тем, что с ней связано. На GIS-Lab’e я с активничал с 2008-2009 года.

— Почему сообщество OSM в России такое немногочисленное?
— Во-первых, Россия — большая страна, потому сложно объединить между собой людей, сделать так, чтобы они могли регулярно встречаться. К тому же, такие расстояния накладывают отпечаток и на характер — нашим людям труднее дается общение. Во-вторых, нужно понимать, что OSM — технический проект, причем достаточно сложный, потому нет смысла встречаться и обсуждать, как кто-то сегодня затегетировал домики. Это и так всем понятно. Что будут обсуждать люди, которые хоть немного интересуются ГИС-технологиями? Особенности серверов, код Overpass’а, картостили и прочие заморочки. Но это не волнует большинство.

Все это приводит к тому, что сообщество OSM в России очень маленькое. И я не думаю, что оно увеличится, если проект будет существовать так, как он существует сейчас.

— А как сейчас существует проект? Что с ним не так?
— OSM сейчас находится в стагнации. Это период мнимого расцвета, но на самом деле — глубокого кризиса, который в дальнейшем будет только усугубляться. И я считаю, что с уходом Стива Коста проект стал более технологичным, но менее живым. И я говорю про проект в целом, потому что, то, что происходит в российском сегменте — только отражение общемировой динамики.

— Почему OSM оказался в кризисе?
— Стив Кост, как основатель, — сумасшедший. Он долгое время был неформальным лидером OSM, скорее даже, вождем. Когда проектом управляет такой сумасшедший, то он в редких случаях становится коммерчески успешным. К тому же, вряд ли когда-нибудь станет высокотехнологичным. Но такой проект всегда будет живым, будет постоянно меняться в зависимости от блажи и фантазии своего лидера.

С уходом Стива Коста OSM закостенел. Сейчас практически невозможны никакие изменения. Соответственно многие ошибки и проблемы молодости, на которые ранее никто не обращал внимание, нельзя безболезненно решить. Требуются радикальные меры, но как их претворить в жизнь, если всё стало настолько взаимозависимым?

Самый простой пример, в свое время Стив Кост предложил не рендерить те здания, у которых отсутствует нумерация. Таким образом он хотел решить эту проблему — отсутствие нумерации. Но с точки зрения бизнеса такое кардинальное решение — катастрофа, ведь тогда бы с карты пропало большинство зданий. Но в этом-то и состояла задумка Стива Коста. Он надеялся, что, наоборот, этот резкий шаг сподвигнет людей «вернуть» здания на карту, то есть проставить им нумерацию. В перспективе проект бы только выиграл от такого решения.

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

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

Понимаю, что так не будет. Но верю в то, что сам проект OSM будет существовать в таком виде, в каком существует сейчас, до тех пор пока не появится какой-нибудь условный OSM-2 — форк, где будет решена проблема с микромаппингом, с трехмеркой, с нумерацией и другими вещами. Если такое случится, то этот форк, который, скорее всего, будет коммерческий, просто перетянет на себя всех осмеров.

— Чем полезен обществу OSM?
— От правок OSM есть одна неоспоримая польза — это форма релакса для того человека, который эти правки вносит. Со всем остальным можно поспорить. Считаю, что уже сейчас домики может обрисовывать какой-нибудь автомат, например, — нейронная сеть. Поэтому те человеко-часы, которые тратятся на внесение элементарных линий, ничем другим, кроме как особой формой отдыха и развлечения самих осмеров, не могу объяснить. Есть отдельные хорошие прецеденты — гуманитарная команда OSM. Это невероятно прекрасный и полезный проект. Хорошие проекты по созданию карт были и в России. Несколько раз создавались карты по запросам различных организаций: скорой помощи и других. Но в целом подобные явления — побочный продукт, нежели основной. Вообще, общественное благо — это популистский термин, который обычно употребляют, когда ничего другого не могут привести в пример.

— Кому тогда полезен OSM?
— На OSM давно зарабатывают. Из крупных проектов — Mapbox, Maps.Me, NextGIS. Даже 2GIS, который заявляет, что планирует отказаться от OSM, на данный момент использует его данные. Не сказать, что таких компаний много, но учитывая узость сегмента, вполне себе приемлемо. Но стоит отдать должное, что некоторые компании, которые зарабатывают на OSM, потом часть своего дохода тратят на развитие его инфраструктуры. Ну, а те, кому нравится мапить — они получают удовольствие и вносят данные в проект. Получается вот такой симбиоз.

— Чем же тогда OSM существенно отличается от «Народной Яндекс.Карты»?
— Я считаю, что у них много общего. Причем НЯК во много раз круче OSM, особенно в том, что касается работы с пользователями.

Если задать этот вопрос тому самому «Сообществу OSM», которое состоит из 20-30 технически подкованных людей, то они начнут говорить про открытые данные, открытую инфраструктуру и пр. Это всё, конечно, замечательно, но тем людям, которые непосредственно вносят правки, им без разницы какие это данные: открытые или закрытые. Когда открываешь редактор Яндекса, где все просто и удобно, и открываешь редактор OSM, тот же JOSM – это безумие для неподготовленного человека, то видишь все отличия сразу и без лишних разговоров.

Если перефразировать один известный анекдот, то «Народная Яндекс.Карта» — это примерно следующая история: приходишь в аэропорт, садишься в огромный прекрасный самолет, невероятно красивые стюардессы подают напитки, мягкие кресла — все замечательно, но ровно до той поры пока ты молчишь, потому что если заикнешься, что самолет летит не туда, то тут же придут амбалы и выкинут тебя из самолета. OSM – это кукурузник, на котором можно лететь куда угодно, но на взлетную площадку надо принести свои детали от самолета и суметь их установить. В этом вся разница.

— Планируешь переходить в НЯК?
— Нет. Ради интереса попробовал, обвел несколько зданий, но это исключительно с целью, чтобы посмотреть, чем НЯК отличается от OSM, как там всё устроено. Но я бы не перешел, потому что те правки, которые я вношу, вношу для себя и планирую ими пользоваться в дальнейшем: скачивать, обрабатывать и пр. Мне нет никакого смысла вносить эти данные в Яндекс, тому что там я ими никак не смогу воспользоваться.

OSM хорош собой, но проект явно застоялся, все свелось к накоплению данных в базе. OSM начинался, как независимый проект, как Википедия, но только в картах, а сейчас OSM — это такой проект, когда люди хотят, чтобы у них было круче, чем у Google или Яндекса. Если человек пытается сделать круче, чем у кого-то, у него никогда круче не получится. Есть миллионы путей для альтернативного развития, но почему-то всегда смотрят и хотят сделать, повторить тот успех, который кем-то уже был достигнут.

— Какие альтернативные пути развития? Кроме как все удалить и заново начать.
— Все удалить и заново начать — радикальный путь. Нужно идти в ту сторону, где ни Яндекс, ни Google не способны предоставить услуги. Я давно говорю, что картами пользуются абсолютно разные люди, в том числе и те, кто имеет проблемы со зрением. Так почему бы не создать несколько разных картостилей, например, для дальтоников или слабовидящих? Почему бы не создать отдельно карту водных угодий? Где были бы реки, озера и все прочее. Почти на всех известных электронных картах невозможно найти ни одной реки пока ты не увеличишь масштаб. Бог с ним, с увеличением зума. Нет направления течения! Казалось бы, самое простое! И это в России, где огромное количество людей передвигаются по воде.

— Так куда именно нужно идти OSM?
— Не надо быть лучше Google или Яндекса, надо быть другим. Тогда все будет хорошо. Сейчас OSM из независимого проекта, который имел все шансы прекрасно развиваться, превратился в базу данных, которую используют коммерческие компании. И всё это ожидает того момента, когда этот нарыв прорвется или рассосется по другим проектам, либо вовсе перетечет в другой формат.

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

Отчасти в этом виноваты демократические подходы принятые в OSM – все нужно обсудить и со всеми согласовать. Пока идут бесконечные обсуждения, продолжают копиться проблемы и тормозить развитие проекта. Почему бесконечные:? Всегда найдется тот, кто скажет, что он не согласен и против.

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

— Это вы про традиции отечественного сообщества OSM или зарубежного?
— У зарубежных коллег гораздо больше того, что крутится вокруг OSM. Мне у них нравится то, что не связано с технологиями и железом. Это вопросы разных картовстреч, гуманитарной команды.

— Почему такое различие?
— У нас в OSM идут люди технического склада ума, а там — расположенные к гуманитарным наукам. Думаю, вы знаете, как у нас технари традиционно относятся к гуманитариям? Поэтому, наверное, у нас больше интерес к чистому IT. Каков поп, таков и приход.

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

Зачастую просто люди обманывают себя и говорят о том, чего нет. Я не верю, что OSM спасет мир. Хорошо что он есть, но не надо переоценивать его. К тому же, OSM фактически сделал все другие открытые картографические бессмысленными. Негативную роль OSM обычно замалчивают.

— Расскажите об этой роли, которую замалчивают. Какие мифы сложились вокруг OSM?
— Сначала о мифах. Самый большой миф — о большой наполненности базы. Сейчас OSM – это клубки городов, которые соединены друг с другом ниточками-дорогами. Все остальные населенные пункты между ними отмечены точками или двумя-тремя улицами и всё. Ничего больше нет. OSM не полная база данных. Ей еще расти и расти. Данные в OSM крайне разорваны и, скажем так, «грязные». Если с ними соберётесь что-то делать, то их надо предварительно обрабатывать и вычищать.

Как OSM навредил? Даже не сам OSM, а инфраструктура вокруг него: легкость скачивания данных, QGIS и Overpass — благодаря этому в картографию неожиданно пришли программисты. Ушли картографы и пришли визуализаторы. Сейчас именно карт, в прежнем понимании слова, нет. Есть визуализации различных наборов данных. Совершенно забыто такое понятие, как генерализация. Сейчас ей стало то, что делает Mapbox, когда на разных масштабах и зумах подгружаются не все точки с полигонов, из-за чего карты становятся уродливыми. С 16 по 18 зум компании еще стремятся сделать карту красивой, а все остальное — чудовищно. Отмечу, что такие карты появляются не потому, что такого просит рынок, а из-за того, что мало кто знаком с хорошими примерами.

— О каких хороших примерах вы говорите?
— Можно взять любую карту до 1990 года и посмотреть на качество ее исполнения. Это, прежде всего, подписи и шрифты.

— Какой бы вы дали совет новичку в OSM?
— Не мапь с Google и Яндекса, потому что не в этом кайф. OSM гениален в своих принципах, они мне чрезвычайно нравятся, как в проекте, так и по жизни: во-первых, не надо воровать данные, во-вторых, делать какую-то фигню и вредить проекту, в-третьих, получай удовольствие. Это абсолютный минимум, которого достаточно с избытком. Если чувствуешь, что можешь соблюдать эти правила, то действуй. Если не получаешь удовольствие, то всегда можешь смело сказать: «Извините, ребята, я не могу участвовать». Меня часто спрашивают, почему я начал мапить какую-то территорию и не закончил ее по правилам OSM. Я отвечаю, что перестал получать удовольствие от отрисовки конкретно этого участка, как у меня появится настроение, то продолжу, а потому, извините, это правило.

— Как можно привлечь в RU-OSM людей не с техническим складом ума?
— В чатик и на форум? Не знаю. Мне кажется, люди приходят туда, когда у них возникает какой-то конкретный вопрос по OSM. Что же касается появления новых осмеров в проекте, то для этого надо, чтобы как можно больше людей знало о существовании OSM. Будем честны, люди о нем не знают. И все разговоры о том, что OSM такой популярный и все о нём давно знают, заканчиваются вместе с московской кольцевой автодорогой.

О том, что у Яндекса или Google есть карты, пользователь узнаёт почти сразу, как только воспользуется этими поисковиками. Откуда он должен узнать о существовании OSM и его преимуществах?

— Что скажете в завершении беседы?
— Viva la revolucion! Если не хотите революционных изменений, тогда надо делать хотя бы то, что не делает никто другой. Мапить домики — это уже моветон. Надо мапить то, чего нет нигде на других картах. Тогда это будет круто. Или пройтись по улице и замапить деревья с указанием породы — вот это круто. Этого точно не будет ни на одной карте, а если пройти по улице и замапить номера домов — для этого есть Яндекс или 2GIS.

Беседовал Валерий Трубин