Comments 30
Очень круто!
Круто - не то слово. Лучшая статья на Хабре!)
Во время чтения чувствовал себя орущим БП с графиком удивления из AAAAAAAAA!
Да — фактически, я сначала в реальности разрезал ленты на куски бокорезами, приклеил их, соединил некоторые между собой проводами, а затем на программном уровне снова разделил обратно. Так надо.
«Сначала сами создадим себе проблемы, а потом будем их героически преозмогать», да.
Да)
Ну дык это... «Час планирования экономит неделю работы». Впрочем, «цель оправдывает средства, если применение этих средств является целью».
На самом деле это не на ровном месте всё.
Контроллер — бутылочное горлышко в плане количества лент, 36 штук в него не воткнуть параллельно. И чтобы это горлышко преодолеть я и группировал ленты. А на более высоком уровне абстракции, где мы управляем лентами, это объединение уже наоборот, не нужно. Поэтому мы от него избавляемся.
Уважуха. Вы в одиночку с нуля сделали огромный проект и довели его до финала.
Это... Гениально! Старание, упорство, любопытство! Уффф... Плюс, оформление каждой из статей... Ещё один уфф! Огромное спасибо!
Пойду в проститутки.
Хабр торт. Безумный респект, читаю серию с первой статьи.

О, индусский код, привет! Давненько не виделись!
Впечатляюще. Я бы что-то подобное хотел но только с одним режимом и желательно платформонезависимое которое бы работало чисто внутри себя, не взаимодействуя с ОС.
Ну, это гораздо проще (если не делать анализ экрана). Просто запихиваем нужные рисунки в контроллер и всё. Если нужен «HDR» и всякие плавности — можно либо взять контроллер с поддержкой плавающей запятой, либо запилить fxdlong/fxdint на него (числа с фиксированной запятой).
Единственное — ленты сами не погаснут, если перестать передавать на них значения. Надо именно на них нули подать. Для этого какой‑нибудь пин контроллера замыкаем с +5В USB компа и пишем в контроллер, что если напряжение на входе пропало, плавно погасить подсветку. Например, на каждый кадр делаем битовый сдвиг >>. Тогда она +‑ быстро и плавно погаснет + выкрутит одновременно с этим гамму, и получится необычный эффект.
Я долго не мог понять, почему у меня сайт никак не хочет грузиться. В конце когда он все-таки загрузился, решил проверить одну вещь.

Ой
Очень круто! Респект таким как автор!
[опять_пришел_этот_лиспер_и_брюзжит]
Такой подход, с модификацией классов, уже много лет как реализован в объектной системе Common Lisp CLOS. Там можно на ходу, в уже исполняемой программе, поменять определение класса и все объекты автоматически перестроятся. Удаленные поля исчезнут, новые появятся и будут проинициализированы как надо. Для сложных случаев пишутся специальные методы, которые автоматически вызываются, если класс был обновлен, там можно вставить логику любой сложности, которая обновит поля. Всё же, известная шутка про то, что любая сложная программа содержит в себе неполную и багованную версию лиспа, не совсем шутка))
[/опять_пришел_этот_лиспер_и_брюзжит]
Спасибо!
По CLOS — очень интересно. Я так понял, там и наследование есть, и даже некое подобие метапрограммирования? Но я не увидел: есть ли там фишка, чтобы значения полей отражались в коде?
Наследование есть, разумеется, даже множественное. Метапрограммирование это второе имя лиспа) Про значения полей в коде не очень понятно, но, ничто не мешает сгенерировать на ходу исходник нужной функции с вшитыми нужными значениями (знаменитый синтаксис лиспа со скобочками позволяет естественно работать с кодом, как с данными), прямо на ходу же ее скомпилировать в машинный код и подставить в нужное место. Так же точно можно обновить методы и вообще любые части кода.
Сколько лет это заняло?
Зажигаем миллиард цветов миллионом строк