March 28th, 2011

nyaload

Кроссворд

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

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

В конце концов кроссворд становится сложно переплетённым, вручную составлять его уже невозможно. Для замены одного слова на другое надо заново переставить все остальные слова, и не факт что получится, возможно надо будет пару других слов удалить и заменить на другие.

Затем начинают появляться приклеенные бумажные ленточки через третье измерение из одной части в другую, где-то в словах пропускают неважные буквы, или кроссворд становится многослойными и недоступным для человеческого взгляда, единственный способ работы - генерировать в памяти компьютера и смотреть на его разные проекции и графики ("доля слогов 'ква', гистограмма разделения одной клетки n словами").


Например, из программирования графики - "Сделали клевые тени, сделали красивую воду, починили баг «тени не отражаются в воде», FPS упал в четыре раза"

Или вот maven для Java. Обычно в программах сборки всегда есть много разных способов сделать одно и тоже. Одно поэффективней, другое попроще. Когда же я пытаюсь что-то сделать с maven - я обычно сначала обчитываю несколько страниц с гугля, официальную документацию, что-то с блогов и stack overflow, нахожу баг в их баг трекере (со статусом Open или "будет починено в maven3"), плюю и обмазываю maven слоем питон-скриптов. Очень сложно составлять кроссворды с maven. Самое обидное, что эта сложность ничего не даёт, ни эффективности, ни работающей автомагии. Исключение - менеджмент зависимостей внешних библиотек и jar-hell, но это опять же решение проблемы созданной на пустом месте, когда для склеивания строчек и чтения файла надо скачивать библиотеку от гугля или apache foundation, и есть 100 разных версий логирования, загрузки файлов и склеивания строк.
nyaload

(no subject)

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

то такое правильно - это вовсе не чисто-кристаллическое "правильно". А просто обычный компромисс "надежность vs удобство", и выбор наименьшего зла. И не всегда очевидно какое меньшее. Так как есть совершенно неочевидные эффекты второго порядка, из-за которых улучшение отдельных параметров может ухудшать общую систему:

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