Найти в Дзене
Сделай игру

Как умение программировать экономит деньги

Сегодня речь пойдёт не об играх, а об исключительно прикладном и невероятно бытовом способе использовать программирование, чтобы сделать и себе хорошо, и сэкономить. Довольно обычное дело: надо штукатурить стену. А чтобы она была ровной, нужно поставить маяки (кто не знает - это такие вертикальные направляющие, которые попарно образуют плоскости и, в теории, все выставлены по одной линии, причём направлены строго вертикально). И конечно, если бы всё было просто, этой статьи не было бы. А если вы никогда не штукатурили стены, то ещё и приобретёте теоретические знания по установке маяков. Хотя это выглядит довольно простым делом, на практике есть свои трудности. Стена - не ровная, причём во всех измерениях одновременно. Она волнистая по осям X, Y и Z. Хотя в теории, она воспринимается как плоскость, но по факту, больше похожа на морскую поверхность, ограниченную многоугольником. Но это пустяки, с этим мы справимся. Наша стена ограничена слева и справа другими стенами, то есть у нас есть
Оглавление

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

В ИТ сокращения? Освой прибыльную профессию маляра-штукатура!
В ИТ сокращения? Освой прибыльную профессию маляра-штукатура!

Довольно обычное дело: надо штукатурить стену. А чтобы она была ровной, нужно поставить маяки (кто не знает - это такие вертикальные направляющие, которые попарно образуют плоскости и, в теории, все выставлены по одной линии, причём направлены строго вертикально). И конечно, если бы всё было просто, этой статьи не было бы.

А если вы никогда не штукатурили стены, то ещё и приобретёте теоретические знания по установке маяков. Хотя это выглядит довольно простым делом, на практике есть свои трудности.

Так в чём проблема

Стена - не ровная, причём во всех измерениях одновременно. Она волнистая по осям X, Y и Z. Хотя в теории, она воспринимается как плоскость, но по факту, больше похожа на морскую поверхность, ограниченную многоугольником.

Но это пустяки, с этим мы справимся.

Шаг первый - разметка направляющих для маяков

Наша стена ограничена слева и справа другими стенами, то есть у нас есть длина. Выбираем желательное расстояние между маяками (допустим, 60 сантиметров) и ставим метки на полу. Всё начало положено. Теперь пронумеруем наши

Шаг второй - подготовка к замерам

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

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

На вертикали надо нанести отметки, на которых мы будем производить замеры. Их должно быть, минимум, две (в самом верху и в самом низу), но руководствуясь методом научного тыка, обычно, их берут побольше. Хорошо, если отметки будут у всех вертикалях на одной высоте, но нет - так нет.

Поскольку стена изначально неизвестной кривизны, отступим от неё слева и справа, например, по 10 сантиметров, сделаем отметки и выставим луч нивелира таким образом, чтобы он одновременно указывал на обе метки.

Шаг третий - замер

Теперь - самое интересное. В каждую метку на вертикали мы тыкаем линейкой и записываем величину. Запись может выглядеть примерно так:

маяк 1) метка 1 - 12см, метка 2 - 15см, метка 3 - 8 см

К слову, это довольно скромный разброс приведён.

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

Переходим к программированию

Итак, вот и наступило время программировать!

Для начала все данные сведём в массив массивов, где вертикальные метки маяков идут слева направо, с замеры - сверху вниз. Я приведу пример примерных измерений (лишь отдалённо имеющих отношение к реальности). И, кстати, лучше, если количество измерений будет одинаковым на каждой метке. Как у меня.

Замеры
Замеры

Ну вот, у меня разброс небольшой. Но эти показания (приведённые, кстати, в миллиметрах), вообще ни о чём не говорят.

Но что тут важно: чем меньше величина, тем сильнее выступает стена. А чем больше - тем глубже ямка. Это значит, что там опора для маяка должна выступать сильнее. А насколько сильнее - позволит решить вот этот простой скрипт на JS:

orders = [
[98,100],
[98.5, 103.5],
[98, 103],
[98.5, 102],
[98.5, 103],
[102,104],
[97, 100.5],
]
const minVal = orders.reduce((acc,[val1, val2]) => Math.min(val1, val2) < acc ? Math.min(val1, val2) : acc, Infinity)
const points = orders.map(([up,down]) => ([up - minVal, down - minVal]))
console.log(points)

Только подставить свои значения надо. Мне выдались такие результаты:

Самый большой отступ - 6.5 мм
Самый большой отступ - 6.5 мм

Теперь дело за малым - на каждую метку ставим опору заданной высоты и на опоры крепим маяки. Но это уже совсем другая история.

Считаем выгоду

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

Представим стену 5,5 метров длинной и 2,5 метра высотой (стандартная хрущевка). При условии, что на сантиметровый слой на 1 квадратный метр уходит 8,5 кг сухой штукатурки, сокращение слоя всего на 1 сантиметр, позволяет сэкономить почти 5 мешков штукатурки по 25 килограмм или 4 по 30 килограмм, из которых получится примерно 135 килограмм готовой штукатурки. Материальная экономия составит 2600 рублей на дату написания статьи.

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

Приятно осознавать, что программирование позволяет не только div'ы центрировать, но и имеет бытовое, совершенно практическое значение.