?

Log in

No account? Create an account
Записки жадины
Рассказ о том, как делать не надо. :)

demon_nn
Дата: 2010-04-27 20:12
Тема: Интерфейс.
Секретно: Public
Теги: #Проект
В качестве легкого отступления от больной темы и рассуждения о космических кораблях, бороздящих просторы большого театра...

Уже который месяц "вояю" "проект" своего дома "на бумаге", ну, в смысле, пытаюсь его изобразить как-нибудь в цифровом виде на компьютере. И так подступался к этой задаче и эдак, да все не так.

Далее, сугубое IMHO. Я вовсе не претендую на истину в последней инстанции. Каждому свое. Может кто-то не испытывает подобных неудобств. Однако мой опыт может оказаться кому-то полезен, а потому он тут...

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

Следующий шаг - изображение идеи в масштабе. И вот тут-то я и встрял не по детски. За что бы я ни брался - все не удобно. Абсолютно. Любая работа с графикой упирается в мышиную возню, которая, в конце-концов приводит к подобной последовательности: клику по созданной фигуре, клику по свойствам фигуры, ввод правильных числовых значений (размер/положение). И ладно, если это какой прямоугольник или круг. Для многоугольника эту последовательность нужно сделать для каждой точки. Двигать мышью - не вариант. Целиться и устанавливать нецелые величины - гиблое дело. Выйдет намного дольше и напряжнее.

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

Изобразив несколько масштабных набросков я поймал себя на мысли, что работаю тупым роботом, выполняя эту работу. А раз так, то почему им работаю я, а не эта железка? Почему, вместо размышлений и проб я тупо кликаю мышой и ввожу цифры? В этот момент я отодвинулся от монитора и внимательно посмотрел на рабочий стол. Там был открыт векторный графический редактор (Inkscape) и электронные таблицы (gnumeric) (да, у меня дома линух, а вы не знали?). В табличке я делал расчет, вычисляя что на сколько друг относительно друга расположено, какого оно размера и как оно будет с учетом масштаба. В редакторе были объекты с введенным параметрами.
Что мне можно было перепоручить машине? Да все, за исключением придумывания формул! Т.е. нужно было организовать работу так, чтобы результатом вычисления формул было готовое изображение!!!

Решение:
Решений тут может быть много и разных. Например, если считать формулы в экселе, то можно его заставить рисовать по результатам расчета с помощью макроса. Тогда любое изменение в расчетах приведет к перерисовыванию изображения.
Я же решил пойти чуточку другим путем. Во первых с экселем на линухе напряг. Во вторых, хотелось вообще без каких-либо навороченных средств, а "на коленке", чтоб просто и понятно. В третьих, хотелось узнать что-то новое для себя. Результат - Python + SVG. Сейчас в деталях объясню что это такое.

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

SVG - Scalable Vector Graphics. Это W3C стандарт (те-же ребята, кто разрабатывают XML и HTML), описывающий векторную графику на базе XML документа. Основное назначение - векторная графика для веба. Нам это не так важно. Главное, если мы сделаем вывод нашей питоновской программы по стандарту SVG, то любая смотрелка SVG файлов покажет нам результат. В качестве такой смотрелки подходит нативная гномовская смотрелка изображений (это на линухе) или, на худой конец, фаерфокс (Ни IE, ни Опера этого делать не умеют!!! - им за это в репутацию. Хром сделан на движке ФФ, так что должен уметь, но я не проверял).

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

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

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






Навигация:
Блог:
Указатель:
Апрель 2014
Мечты: