А что б не вспомнить такой носитель данных, как перфолента?
Вот смотрите: допустим, 5 мкм лавсан, потом 1 мкм алюминий и снова 5 мкм лавсан. УФ-лазер с механическим приводом перфорирует поперёк ленты дорожки с шагом, скажем, тот же 1 мкм (УФ может и лучше, но пока не будем пальцы гнуть). Поскольку механика позиционирует луч с точностью до «куда-то туда» — применяем старые добрые старт- и стоп-биты.
На ленте шириной в 5 мм мы легко пробьём 4096 бит, старты, стопы и ещё останется запас с краёв. А чтобы прочитать её значительно быстрее, чем мы это макраме вымучивали — берём линейную ПЗС-матрицу от сканера (разрешение 1×16384 или примерно того порядка), сканируем всю ширину ленты разом, ну и (ваш Кэп) просто её протягиваем. Перекосы головки чтения относительно головки записи решаются кольцевым буфером — там хранится несколько последних строчек и нет никаких проблем найти там реальное положение дорожек, я такие синхронизации за пучок пятачок делал, задача детская.
В результате наши 4 килобита на микрон дают 512 терабайт в габаритах кассеты C-90, минус Рид-Соломон. Если я, конечно, по причине крайней усталости в нулях не запутался. Вот такая вот перфоленточка…
Провалявшись в мангале почти две недели, silnie raspiedrony akumulator так и остался на 3.8В, давление как будто немного повысилось — но это можно легко списать на жару.
Silnie raspiedrony akumulator został znaleziony wczoraj.
Не, ну не вчера, а неделю с лишним назад уж, поди. Но для красного словца…
В общем, прибираюсь на столе, беру древний планшет, который недавно очень всех выручил в качестве запасной электронной книжки, а в упаковке что-то щёлкает… Открываю — о курва! Аккумулятор «распедрило», да так распедрило, что он просто вскрыл корпус! Видимо, одна из последних державшихся защёлок и издала этот звук.
Сильно распедренный аккумулятор имеет интересное обозначение 3.7V — это не те ли модные «полимерные аккумуляторы с более высоким рабочим напряжением и итоговой эффективной ёмкостью»? Что-то подобное у меня случилось в GPD Win 1, кстати говоря. Но там обозначения не помню, как бы не 3.75 было написано. В общем, всё сложно у них с химией. Сложно и страшновато.
Предыстория у них примерно одинаковая: эксплуатировались до заметной просадки в ёмкости (этот — вообще «до потери пульса»), затем были брошены недозаряженными и дошли за счёт саморазряда до глубокого разряда. Именно в стадии глубокого разряда и начался педрёж.
«Ещё более третий», чем эти два, аккумулятор (из телефона, тоже брошенного без регулярной подзарядки) был когда-то, из чистого любопытства, с осторожностью заряжен от внешнего контроллера и повёл себя довольно-таки удивительно: послушно скукожился обратно (процесс занял пару месяцев, то ли микро-утечки, то ли отработал положенное какой-то катализатор), начал держать какие-то остатки ёмкости и вообще показал себя как потенциальный аккум для фонарика (если бы не было страшно им теперь пользоваться вообще). По второму разу его уже не педрит.
Решив повторить эксперимент, я запер аккумулятор в специально обученный стальной чан и стал заряжать (забыв измерить напряжение до начала, и горько об этом жалея — самое интересное ведь!) Однако, напряжение так и не стабилизировалось. Плата истерически замигала красным и синим, указывая на то, что аккумулятор постоянно теряет заряд сам по себе и его требуется подзаряжать примерно два раза в секунду (пусть и крошечными импульсами, но ведь требуется же!) Отключив плату, я продержал его где-то с полсуток и убедился, что саморазряд заканчивается где-то на 3.8 вольта, после чего напряжение более-менее держится.
Почти неделю повторяя это, я с удивлением обнаружил, что аккумулятор стабилизировался в своём новом качестве — в качестве подушки на 3.8 В. Эксперимент предварительно закончен, аккумулятор возложен в специально обученный кулёк и водворён в хорошо изолированный от всего горючего мангал (нет, буквально мангал!), а ещё через пару дней надо бы проверить — пошёл ли саморазряд ещё дальше 3.8 В (просто медленнее, поэтому выглядит стабильно) и не распедрило ли его ещё сильнее. Если он решит там всё-таки садануть от души — это его половые трудности, в мангале-то. У него даже возможности выскочить на реактивной струе оттуда нет, даже если он в итоге «пукнется».
Но всё-таки вопрос возник напряжённый: почему некоторые, особенно старые, работают до полной потери ёмкости (которая асимптотически приближается к нулю и даже хуже — к ёмкости никель-кадмиевого равного размера, которая отрицательна, лол), а некоторые — так и норовят пукнуться с фейерверком? Вариаций химии там море, Википедия не даст соврать. Как понять, какой аккумулятор будет педрить, а какой — нет? О LiFePO4 и LTO речь вообще не идёт, с ними всё ясно, их дед бил-бил — не разбил, баба била-била — не разбила, NASA били-били — и сертифицировали для космонавтики, а вот что обстоит с вариациями на тему «уже сегодня в вашем мобильнике»?
Как можно видеть, строки 5 и 6 используют вдобавок уменьшенный интервал.
Была даже абсолютно безумная мысль замутить электронную книжку на таком вот сегментном принципе, но не знаю, что меня больше останавливает: глазоломность шрифта или перспектива паять около 10 000 светодиодов в размере 0402 (или хотя бы 0603).
ЗЫ: добавил «ненормальное программирование» просто потому, что оно напрашивается сначала в эмуляции погонять и оценить степень невыносимости такого шрифта.
Частично переписал рейкаст по Брезенхему-Доку (нет, ну правда, «колесо пред-рассчитанных лучей» от @Swamp_Dokдало прямо роскошный буст к скорости) под чистые 8 бит старого доброго 6502-го.
Всё, как и обещал в камменте: 16 бит в первом приближении как бы не быстрее 8 бит, потому что выковыривать нибблы из байта на процессоре, который даже сместить на 4 бита одной командой не может (надо использовать 4 сдвига на 1 бит) — такое себе, а в этих 16 битах старший и младший байты живут в основном самостоятельными жизнями, довольно редко взаимодействуя в переносе (что ещё больше углубляет мой восторг от гениальности алгоритма «Брезентыча», если это вообще возможно). Я уже мысленно собрал уровни из тех замечательных крошек-чанков 16х16 клеточек и даже продумал, как бы нам хранить в одном байте 4 клетки, чтобы пореже из памяти тянуть (итого 2 бита на клетку — пустота, стенка, первый моб и второй моб из двух возможных на один чанк), да и даже как именно нам связывать такие чанки, как анимировать переходы и т. д, но, судя по всему — не пригодится. Не похоже, чтобы было где хранить данные для повторного использования, не похоже, чтобы можно было быстро вытащить нужные биты.
Разберу сейчас подробно один из 8 вариантов ветвления (раньше было два — шаг по X, смещение по Y и наоборот, а сейчас добавились ещё и варианты для разных знаков шага и смещения, ибо индивидуальная обработка каждого случая позволяет ещё кучу тактов сэкономить). Самый простой вариант — первый, X и все в плюс.
Дам этот кейс скрином, ибо.
Координаты игрока мы храним нормальными 16-битными, 8 бит на номер клетки и 8 бит на координаты в ней. Работать с ними мы будем один раз — в рамках физики. Для рейкаста они нужны отдельно в виде старшего байта, отдельно в виде младшего. Три из них мы видим в трёх верхних строчках, где они копируются в координаты луча. Четвёртая — чуть ниже, где BrezToStart вычисляется «по-старинке», там я ещё не изжил пекашный код. Зато смещение мы берём (четвёртая строчка) уже из «колеса», расчётов — ноль!
Дальше мы видим, что предыдущее значение координаты смещения стало 8-битным. Дело в том, что нам не нужно значение клетки — мы его и так знаем. А вот пиксельное значение — запомнили.
Дальше мы делаем 8-битное сложение. Первая величина — младший байт координаты смещения POS PIX, вторая — (long)BrezToStart*(long)RayDY/RayDX. Её я тоже пока вычисляю явно — но она, несомненно, напрашивается на табличное представление. В результате имеем новый POS PIX и флаг переноса.
Тут, как я уже намекал, мы можем не проверять память, если не было переноса. Ну, и полного 16-битного суммирования не делаем, максимум — инкремент (в отличие от компилятора, мы знаем, какие бывают суммы, а какие — нет).
Проверка памяти требует вычислить довольно длинный адрес. Тут я хочу пойти на грязный хак: возможно, сделать карту [32][256], чтобы ничего не умножать на 64, и старший байт писать прямо в код, в тело инструкции LDA. Кармак в Wolf3D, помнится, раздухарился ещё жёстче… да, хранение переменной прямо в коде, да ещё в 4 разных местах — тоже потребует копирования её туда-сюда. Но после входа в «основной цикл шагания» обратно мы уже не возвращаемся — возможно, я придумаю способ держать её и в коде, и в одном экземпляре. Это позволит проверять карту простым LDA $DEAD, X (где X — вторая координата, которая до 256, а вместо $DEAD мы подкидываем нашу переменную, в case 0 это будет POS CELL, которая меняется от адреса карты до него же плюс 32<<8). Хотя, возможно, через Indirect я это сделаю ещё быстрее! Не попробуешь — не узнаешь, собственно, почему я и «подсел» на эту задачу. Никакие Factorio рядом не валялись :)
Функция AddToZBuffer8Bit тоже демонстративно отрицает 16-битное суммирование — фишка в том, что переносов там не возникает! Поэтому все аргументы вычисляются через 8-битные суммы.
Ну, и косые стенки я убрал, а смещение всей сцены на доли тайла — вернул. Надо какой-то шлем там нарисовать, который «не успевает за мышкой» :) Тогда можно рефрешить рендер «через кадр», пусть дёргается вместе со статусбаром — типа фича :)
@Demosfen, отчитываюсь: дыня серебристая «армянский огурец» на эхиноцистис — 2 из 2-х ОК. Снизу она, сверху — арбуз, «нервных огурцов» на отдельное жилище каждому не хватило.
Второй эксперимент фотографировать не стал, но там то же самое. Неделя, полёт нормальный. Развивается не особо быстро, но я её привил ещё до того, как семечко покровы сбросило. Да и арбуз сверху что-то на себя отжирает, конечно.
Вторую семядолю «нервный огурец» потерял при другом эксперименте, менее удачном (кажется, я попал в полость внутри стебля вместо стенки). Итого он уже третью прививку на себе несёт (всхожесть его оказалась ниже ожидаемой и эксперименты стали напоминать коммуналку). На втором эксперименте, кстати, тоже сверху ещё и арбуз «вторым пассажиром», как и тут. Но там он «в укол», в «толстомясую» часть, где стебель ещё сплошной (около сантиметра длиной, потом там полость начинается).
Надрезал, срезал, приложил к мясистой стенке стебля, стараясь, чтобы не провалилось в полость, а прижалось косым срезом именно «к мясу». Судя по промежуточному результату — таки прижалось.
Первые эксперименты уже переросли настолько, что чуть ли не цвести собираются, а на дворе пока только апрель начался. Поэтому я и не особо рассчитывал на что-то, кроме эксперимента как такового. Да и сорта арбузов там «что за столом выплюнул», никак не связанное со средней полосой.
Итого можно сказать, что удалось «запрячь» это похабное инвазивное растение в какую-то полезную деятельность. Ещё бы научиться на корне борщевика кориандр выращивать — вообще супер было бы :)
Интересно, до какой скорости можно разогнать 6502-е ядро с современными технологиями?
Допустим, у нас есть чиплет «6502 + 64К SRAM», выполненный в максимально быстром исполнении, вплоть до экзотики типа арсенида галлия (ядро проектировали не дураки и уложились в три с половиной тысячи транзисторов, что тогда было немало для кремния, а сейчас — для арсенида галлия тоже, насколько я знаю, очень до фига).
…и есть несколько кремниевых чиплетов с умножителем, DRAM и прочей веселухой. Или даже один кремниевый чиплет с этим всем, плюс с бутлоадером, который прогружает наши 64К с некоего SPI и после этого снимает с 6502-го ресет.
Собираем их в микросборку, цепляем к портам 6502-го, которые замаплены в ключевые адреса его крошечной памяти.
Команды 6502-го выполняются фиксированное время, причём довольно небольшое (в тактах. А арсенид галлия этих тактов нам даёт не просто много, а очень много). Пульнул той же DDR указание, занимается своими делами, через некоторое время прочитал от неё ответ. Мы с точностью до команды знаем, когда за ним лезть в порт.
Фактически мы получаем, что у нас в SRAM крутится микрокод. Но мы имеем к нему полный доступ и можем напихать туда команд типа «логарифм по основанию ква с половинкой кря и ограничением результата от гага до муму», смотря какие мы там нейросети, графоний или обработку звука мы там делаем.
Ну то есть в камментах я такое уже высказывал, но тут мне именно сама архитектура больно шибко зашла. Там даже система команд просто кричит — «сделайте на мне движок микрокода!!!»
Вопрос, правда, в количестве транзисторов в GaAs. SRAM шибко большая, но там за единицу времени переключается только одна ячейка, а остальные спят сном праведника. А вот три с половиной тысячи ключей самого 6502-го могут выдать огоньку, превышающего возможности технологии. Тут я не шибко великий технолог по чипам, увы.
Три года уже с того моего видео, что процессорная плата и материнская — должны быть разными сущностями. Или даже не три, лень точно смотреть, а «Труба» люто округляет даты.
Вот и дожили до дня, когда AMD на вопрос о съёмной оперативной памяти отвечает — «невозможно, слишком длинные линии получаются».
Если бы процессор вставлялся в сокет на процессорной плате, а она бы втыкалась в материнку руткомплексом экспресса — этой проблемы бы не было. Сокет практически не удлиняет линий процессора, а процессорная плата с распаянной памятью — по сути тот же SODIMM, но с произвольной разводкой и поэтому не страдающий от лишней длины линий.
Не суть важно, вынуть старый (или сдохший) SODIMM из материнки — или вынуть из него процессор и переставить в новый, большой и живой.
А вот следующий шаг, который надо сделать — и который опять никто не сделает. Посмотрим ещё через три года, как я снова был прав, но рыночек снова порешал по самому тупому и деструктивному пути.
Всё стало плохо в тот момент, когда айтишники стали плыть по течению, как простые потребители.
Я отмоделировал на выходных, как должен смотреться «Вольф на Денди».
Я сделяль. Ну как «отмоделировал» — ну, так, плюс-минус. Но в целом — да, из тайлов 32×30, часть которых имеет скошенные углы, можно сложить вполне играбельный шутер. Основной адресат, конечно, @Swamp_Dok— но побегать-поглядеть приглашаются все желающие, ибо появилось наконец где побегать и на что поглядеть.
Досбокс кладёт наглухо — код «буквально-учебно-школьный», оптимизации ровно ноль. Чтобы лучше читалось, ага. Так что если оська в принципе не умеет в DOS16 — будет пошаговая стратегия :(
Я б не стал это делать под DOS16, но просто это не проект-самоцель, а ответвление «по-быстрому» от другого проекта, чисто любопытство удовлетворить. Поэтому так уж вышло. Заранее пардон всем тем, кому я любопытство раззадорил, а побегать не дал.
Если не очень видно — могу вообще прямо макро сделать в области срастания.
Арбуз взял абы какой, без планов выращивать, просто попрактиковаться. Чего ели, из того и набрал семян. Прививал на «нервный огурец» эхиноцистис (ну потому что это не настоящий совсем уж «бешеный огурец», но тоже какой-то не самый уравновешенный из огурцов — выстреливает семенами из своих двухствольных плодов), метод — «в укол», то есть просто лезвием безопасной бритвы вырезал точку роста и косо срезанный арбуз туда ткнул, по фотке, наверное, видно, что срез смотрел влево (там хоть как-то срослось, а справа всё по нулям, надо было шкурку чуть поскоблить, наверное).
Прижал нано-прищепкой (деревянные такие), губки узковаты (сжимают очень локально и сильнее, чем нужно — это усилие бы на площадь в 2-3 раза больше распределить…) и накрыл потом отрезанной бутылкой. Снизу осталась огромная щель, заткнул её влажной тряпкой и больше не трогал — тряпка сама высохла, потом её достал, ещё через пару дней бутылку снял, ещё вот дня два без всего, только подсветка и полив — вроде полёт пока нормальный.
Рядом виден второй колпак (справа) — под ним всё так же, но пока на стадии «тряпка высохла, вынимаем тряпку». Ещё третий запланировал «в шесть семядолей» — привить арбуз на арбуз и потом на «нервный огурец», но огурец ещё не подрос :) Больше семядолей для бога питательных веществ, даёшь нечеловеческую многоножку! :-D
Оно должно так выглядеть или там явные признаки того, что всё опять сдохнет, как в прошлом году с лагенарией у меня (не) вышло?
Специально для людей, озверевших от одинаковости дизайна телефонов-лопат, я решил вытащить из древних архивов сугубо пятничный шизодизайн шизотелефона в форме эдакого магического др… кристалла.
Магический дристалл Телефон в форме шестигранной призмы. Чисто выпендриться, не ищите в этом смысл.
Дизайн безумно древний, досмартфонной эпохи, поэтому пришлось его немного додумать. Шиза имеет шесть рабочих поверхностей, образующих непрерывный (или какой уж удастся собрать из доступных на рынке) сенсорный OLED-экран. Внутри находится гиродатчик, отвечающий за то, чтобы работал или один большой экран, повёрнутый к пользователю, или один большой и смежный с ним маленький. При вращении экраны переключаются, ну а контент при этом скроллится — то есть навигация по полному пространству экрана осуществляется не свайпом, а «разматыванием свитка». Какой именно экран повёрнут к пользователю — пользователь изначально задаёт коротким тыком по этому экрану, дальше его удерживает гиро. Причём именно коротким, т. к. нажатие и удержание на противоположный экран вызывает появление точного курсора, что позволяет не закрывать экран пальцами, двигая ими «по задней стенке», и попадать в мелкие элементы (да что уж там, даже начертить что-то несложное, типа этой картинки к статье). Пока указательные или средние пальцы на задней стенке удерживают курсор — тык большим пальцем по экрану считается не туда, куда ткнул палец, а туда, где был курсор, то есть телефон работает в режиме «мышка-тачпад с кнопками».
Концы «кристалла» скрывают под собой камеру (одну, естественно — зачем ему вторая, если его можно просто повернуть), микрофон, динамик и снабжены двумя слегка затупленными серебристо-нержавеечными «остриями» (точнее, «тупиями», чтобы ладони не разодрать). Для красоты, прочности (догадываетесь ведь, чем именно он будет обычно ударяться при падении?) и в качестве аварийной зарядки (основная — беспроводная), путём подачи 5-8 вольт в любой полярности. Сам девайс состоит из эпоксидки во имя хоть какого-то практического смысла (полная непотопляемость), но «тупия» отвинчиваются, чтобы добраться через водозащитную резинку до симки и SPI, т. к. нам это чудо как-то шить-перепрошивать придётся явно не один раз, в том числе и «раскирпичивать» наверняка.
Аккумулятор влезет весьма немаленький, но из-за проблем теплопроводности (да и из-за закрытости документации на мощные SoC) придётся ставить мелкий холодный проц «из открытых» и в плане ведроида плясать от всяких проектов типа «Ведро for x86» или скорее «Репликанта». А подходящую для его форм-фактора клавиатуру уже изобрели.
Уловисто пошли «затылочные лампочки». В этот раз, правда, не «Старт», а «Эра» — без характерного отверстия в коробке, но внутри всё вполне даже «затылочное» :)
Крышка снимается плоской отвёрткой легко, защёлкивается обратно плотно, резисторы 5.1 и 3.6, и, главное, какое замечательное отверстие осталось от CON2 :) Из-за него я в этот раз срезал 5.1, то есть занизил мощность не очень сильно (и даже не срезал, просто перерезал дорожку). Дело в том, что отверстие позволило мне с превеликой осторожностью просверлить «юбку», не шуранув сверлом в проходящие там провода (не знаю, правда, насколько это электробезопасно — обнажать скрытый там под пластиком алюминий!) и получить длинную «самоварную трубу» с хорошей тягой (лампа работает без абажура, цоколем вверх).
Со «Стартами» отличить лампу «с той схемотехникой» от лампы с немного другой «смехотехникой» можно было в большинстве случаев по габаритам, указанным на коробке (хоть на миллиметр, а обычно отличаются). Как быть с «Эрами» — не знаю, статистики пока не набрал. Это мой первый «улов», но довольно удачный — «прямоточная труба» вот прямо порадовала :)
Король вертикальных скроллеров в 320x200 во всей красе. Такую красоту и в наши дни не всякий покажет!
Сказано — сделано. Но вот только засада — я помню очень хорошо, какое оружие там имба, и играть было не очень интересно.
Запустил Tyrian Gift Edition. Оружие зверски пошаффлено, поэтому ХЗ что выбирать %) Одно даже должно изменяться при переходе из эпизода в эпизод, а может, и не одно. Я этого не помню совершенно, но в хелпе так написано.
Чёрт, надо бы ещё разик перепройти, поискать это секретное оружие :) И миди-карту свою старую наконец оживить, на ней он звучал абсолютно офигенно.
А вы знаете какие-нибудь моды на Tyrian, пока у нас ещё полтора выходных есть? ;)
Итак, пятница уже не первый час шагает по глобусу, поэтому держите свеженький выстрел в мозги ;)
Недавнее обсуждение «тыкательного принтера», естественно, не может не будить в пытливых умах вопрос, как бы повысить его скорость печати? Не избежал этой участи и я. Физически всё просто — надо поменьше отрывать тяжёлую ручку от бумаги и рисовать как можно более длинными штрихами. Но как разбить произвольное изображение на штрихи?
Разумеется, решение для искусственно самоограниченной задачи, когда ручка движется строго по горизонтали и бумага после каждого прохода подаётся на один диаметр шарика ручки — элементарное. Берём RLE и Флойда-Стейнберга, за 15 минут пишем этот код:
#define SQUARE(x) ((x)*(x))
#define MAXERROR 256 //for RLE
static unsigned char Grayscale8Bit[HEIGHT][WIDTH], Dithered8Bit[HEIGHT][WIDTH];
static signed short AdditionalError[2][WIDTH];
тут мы читаем из файла Grayscale8Bit, этот код я приводить не буду
memset (AdditionalError, 0, 2*WIDTH*sizeof(short)); //Even/odd lines buffer
for (int y=0; y<HEIGHT; y++)
{
int RLEError=0;
int PenColor = 255*(Grayscale8Bit[y][0]>127); //Pen color can be either 0 or 255
for (int x=0; x<WIDTH; x++)
{
int PixelValue = (int)Grayscale8Bit[y][x] + AdditionalError[y&1][x]; //Exact pixel value plus Floyd-Steinberg error from the prev. line
RLEError += SQUARE (PixelValue - PenColor); //To avoid missing contrast details such as thin vertical lines, RLE error counted as square.
if (RLEError > SQUARE (MAXERROR))
{
PenColor = 255-PenColor; //Inverse pen position (up/down)
RLEError = SQUARE (PixelValue - PenColor); //Begin counting new RLE error immediately
}
Dithered8Bit[y][x]=PenColor; //Put proper color into the output array
AdditionalError[!(y&1)][x] = (PixelValue - PenColor)/2; //Put remaining error into next line buffer, not exactly Floyd-Steinberg but sort of.
if (x) AdditionalError[!(y&1)][x-1] = (PixelValue - PenColor)/4;
if (x<WIDTH-1) AdditionalError[!(y&1)][x+1] = (PixelValue - PenColor)/4;
}
}
тут мы пишем в файл Dithered8Bit, этот код тоже у каждого свой получится
Код без каких-либо капризов, отладки и подбора параметров сразу выдаёт результат:
Сверху, как нетрудно догадаться, оригинал.
Ну то есть задача в её куцем виде — совсем детская. Там не то что думать не пришлось, даже ошибиться негде было. Но и результат тоже, мягко говоря, так себе.
Ну а теперь вот вам по случаю пятницы головоломка: как полностью реализовать потенциал не одной, а двух степеней свободы нашего привода, да ещё с учётом того, что скорость протяжки бумаги и скорость вошканья каретки в общем случае друг другу не равны, а проходить ручкой по одному месту больше одного-двух раз — нежелательно, бумага не чугунная. Мучайтесь и ломайте головы над возможными алгоритмами такого вот обхода растра ;)
Спойлер, но вы его сразу не читайте, чтобы не сбиться со своих мыслей: я бы, наверное, обошёл сначала изолинии крупных элементов, разбивая пространство между ними на более или менее густые штриховки, а потом уже прикинул бы ошибку и добавил-убавил штрихи сообразно мелким деталям. Перо, идущее вдоль изолиний — в общем случае довольно хорошая идея, когда надо не убить разборчивость изображения, а то даже ещё и усилить её. Но, правда, это касается только фотореалистичных изображений, а в задаче-то у нас произвольные.
К вопросу о стабилизации плазмы, поднятому очередной публикацией на тему «реактивного двигателя со встроенным МГД».
Начну с извинений — я дурак и забыл, что «на пробу» поставил галку «арифметическое кодирование» в GIMP. А потом удивлялся, что картинка в камменты не грузится.
В общем, вот та самая «Kreosan-tier шаровая молния», которую я тут уже неоднократно поминал добрыми и не очень словами. Имеющие доступ к таким разрядникам — могут экспериментировать на здоровье ;)
Возможно, через неё можно и настоящую молнию пропустить — гроза, воздушный шарик куба на два и мокрая нейлоновая верёвка со вплетённой тоненькой металлической проволочкой… но я пас, я ещё хоть немного пожить хочу, да и соседи не оценят. Креосану — креосаново, жене кесаря — «кесарево» или как оно там. Шаговое напряжение в мокром грунте — не игрушки.
В случае, если именно этот повив будет давать эффект, а, допустим, при двойном встречно-параллельном он будет исчезать — можно считать, что ШМ в искусственных условиях получена с большей или меньшей точностью.
После этого можно запульнуть искусственной ШМ в несколько датчиков магнитного поля и оценить порядок величин, ну и прочие промеры токов-напряжений в летящем плазмоиде произвести. Но заранее готовиться к этому — смысла нет, сначала надо подтвердить независимым экспериментом сам факт. Сенсации в тот год не случилось, так что, может быть, автор публикации в «НиЖ» сам себя обманул где-то.
А вот после этого, зная примерно, что нужно для хорошей жизни здорового счастливого покемона стабильного плазмоида — можно с новыми силами браться за тот злосчастный реактивный двигатель. Возможно, за это время его автор всё-таки сподобится сунуть в факел сначала пару электродов, чтобы посмотреть наличие разности потенциалов между разными частями плазмы, а потом — обычную галогенку на 12 вольт, поскольку её нить из-за характерной формы (форма прямой спирали без поддержек) прекрасно уловит сильные магнитные поля при малейшем движении.
Даже если двигатель окажется туфтой, по крайней мере, у нас появится возможность вместо китайских фейерверков на НГ запускать настоящие шаровые молнии! Вот только соседи не оценят этого ещё больше :-D Ладно, кончаю шутить — физикам предоставляется трибуна в камментах, можете продолжать буйство, начатое под статьёй о самом движке ;) с удовольствием почитаю, кто что скажет про притащенный мной артефакт, да и не только про него.
Отличается высотой (118 мм) и резисторами 5.1 и 3.6, причём 3.6 при отрывании с определённой вероятностью увлечёт за собой дорожку (соединил обратно каплей припоя).
Как можно догадаться по этому обстоятельству — 5.1 я оставил, сильно занизив мощность (но почему-то глазом этого обстоятельства всё равно не видно). 5.1 там с краю — возможно, его оторвать было бы проще и безопаснее для дорожек.
Как её отличить от позапрошлой «затылочной лампы», у которой тоже 118 мм, но резисторы 4.3 параллельно с 3.0 (в камментах к посту про первую «затылочную лампу» — наука не знает. Пропорция там та же, поэтому не уверен, что это важно.
Поиск хорошего удлинителя-зарядника продолжается. Если не будет ещё вариантов — будем считать этот победителем, вероятность, что куплю, вскрою и распишу внутрянку постом — более 50%.
Вопрос в аудиторию: существуют ли, попадались ли кому-то адекватные удлинители со встроенным USB PSU? Да-да, я про эти нынешние модные «три розетки на 220 и четыре на 5 вольт».
Я в один заглянул — хтонь, как это вообще в магазины выпустили, загадка. Какие там пропилы между высоковольтной и низковольтной частью, смешно даже. Крошечная угаженная плата, покрытая пылью и грязью поверх неотмытого флюса, фонарик заряжать — и то страшно за фонарик.
Методом перебора искать, сами понимаете, даже уже и не смешно :(
Лампочка, кстати, пока идеально работает. Никаких глюков у регулятора на нестандартном токе не возникло.
2041 оттенок несерого, или Как впихнуть невпихуемое.
Легко обозначить на диаграмме четыре цвета! И 16 — не проблема. Все 256 оттенков серого, пожалуй, человеческий глаз уже не различит. А как различить тысячу и более?
На помощь приходят они! Палитры «в стиле тепловизора». Как же их получить?
Попробуем сначала тривиальное решение. Повторим один канал от 0 до 255 четыре раза подряд, а при помощи другого — различим эти повторы. Бррр, и некрасиво, и отличающиеся на единичку цвета часто похожи друг на друга меньше, чем отличающиеся на 256.
Нет, нужно что-то непрерывное! Давайте сначала перейдём от чёрного к зелёному, потом — к красному, потом — к белому, потом — к синему? Уже лучше! Но всё-таки белый светлее синего, а зелёный — красного, и хотя синие звёзды таки горяче́е — синий цвет зрение воспринимает как холодный…
Да, вот теперь лучше! Чёрный — синий, синий — зелёный, зелёный — красный, красный — жёлтый, жёлтый — белый! Прекрасные дополнительные диапазоны таились в комбинациях нескольких каналов сразу! А можно ли ещё больше?
От чёрного до серого — 128, от серого до светло-синего — 128, от него до чисто синего — 128, потом до зелёного 256 и потом до сине-зелёного, и только от него уже к красному, и потом от него сначала к пурпуру, а только от пурпура — к жёлтому и потом — к белому! Хорошо, но светло-синий светлее синего, а между сине-зелёным и красным — явный грязно-тёмный провал.
Ладно, пусть будет от чёрного — к серому, от него — к синему, от него — к светло-синему, а от него уже — к зелёному, а в переходе от сине-зелёного к красному пусть сначала быстро разгорается красный и медленно затухает сине-зелёный, а потом — наоборот! Две тысячи уникальных оттенков, плавно нарастающих по «психологической температуре»!
На самом деле даже 2041, но это я пожадничал со стартовым серым. В максимуме он слишком светлый для начала диапазона и вообще слишком похож на другие цвета из серединки. Код этого варианта я приведу целиком, можете на свои вкусы дорабатывать:
int c,x=0;
for (c=0;c<192;c++,x++)
{
Test[y][x][0]=c;
Test[y][x][1]=c;
Test[y][x][2]=c;
}
for (c=0;c<192;c++,x++)
{
Test[y][x][0]=191-c;
Test[y][x][1]=191-c;
Test[y][x][2]=192+c/3;
}
for (c=1;c<128;c++,x++)
{
Test[y][x][0]=c;
Test[y][x][1]=c;
Test[y][x][2]=255;
}
for (c=1;c<256;c++,x++)
{
Test[y][x][0]=127-c/2;
Test[y][x][1]=127+c/2;
Test[y][x][2]=255-c;
}
for (c=1;c<256;c++,x++)
{
Test[y][x][0]=0;
Test[y][x][1]=255;
Test[y][x][2]=c;
}
for (c=1;c<256;c++,x++)
{
int Br = 127-abs(c-128);
Test[y][x][0]=c +Br/4;
Test[y][x][1]=255-c +Br/4;
Test[y][x][2]=255-c +Br/2;
}
for (c=1;c<256;c++,x++)
{
Test[y][x][0]=255;
Test[y][x][1]=0;
Test[y][x][2]=c;
}
for (c=1;c<256;c++,x++)
{
Test[y][x][0]=255;
Test[y][x][1]=c;
Test[y][x][2]=255-c;
}
for (c=1;c<256;c++,x++)
{
Test[y][x][0]=255;
Test[y][x][1]=255;
Test[y][x][2]=c;
}
Тут мы, конечно, вступили на скользкую тропку первого (лобового) варианта. Некоторые цвета почти повторяются, разница только в одном канале, который их позволяет различить «как старший разряд». Но в целом вроде ничего вопиющего?
А гость нашей программы — профессиональная логарифмическая палитра, цельнотянутая из какого-то научного журнала то ли конца 80-х, то ли начала 90-х, когда тепловизоры только завоёвывали свою экологическую нишу (увы, авторство по этой причине вряд ли удастся установить, она очень долго переходила из рук в руки). Обратите внимание, как в ней идут цвета: первые несколько отличаются очень сильно, а последние — на какую-то несчастную единичку в одном разряде одного канала. Вот она — работа профессионалов!
А какие палитры для приведения одноканального HDR (с неподвластным глазу SNR) к трёхканальному обычному изображению (с подвластным глазу SNR) знаете вы?
Обнаружена плюс ещё одна лампа с удобно отрываемым «лишним резистором». На всякий случай ещё и вентиляционных отверстий наделал, ибо конденсатор. Вверху — опознавательные данные для покупки. Легко открывается плоской отвёрткой, легко закрывается обратно. Яркость, что удивительно, почти не изменилась (свойства глаза или она работает на нелинейном участке, в глубокой перегрузке?)
Может, ей в светодиодной плате и алюминиевом цоколе тоже несколько отверстий сделать, чтобы прямотоком продувало?
Мне известны два ответа на вопрос — «зачем филину перьевые уши». Первый — «для коммуникации». Второй — «для маскировки». Нисколько не сомневаясь в том, что они действительно выражают настроение, всё-таки хочется усомниться в том, что это их первичная функция, а не побочная (насчёт того, больше или меньше они позволяют сливаться с текстурой коры — тем более). А ещё — чтобы в сильный ветер иметь вид лихой и придурковатый, дабы разумением своим не смущать кипера.
Дело в том, что совы вообще и филины в частности — офигенные «сонары». Его не видно и не слышно, а он сидит и всё слышит. Даже то, что не видит (а видит он тоже на зависть всем нам, даже днём).
А среда-то движется. И скорость распространения звуковой волны «по ветру» и «против ветра» отличается на плюс-минус скорость этого самого ветра (нет, это не эффект Доплера, потому что источник и приёмник звука взаимно неподвижны. Частота не меняется, меняется только фаза за счёт «скорости доставки» волны от источника к приёмнику).
То есть без учёта скорости движения среды можно получить неточную оценку разности фаз между левым и правым ухом (настоящими, которые для слуха). 10 м/с относительно 330 м/с — вроде пустячок, но для той точности, с которой филин наводится на шуршание вкусной толстой крыски под снегом — это уже может быть критично. И, чтобы учесть эту скорость движения среды — надо иметь ещё два уха-флюгера, которые из перьев и на макушке. Шёлковые, пружинистые и умеренно парусные. И поднимать их повыше каждый раз, когда дует ветер — чтобы точно его измерить.
А вы что думаете по этому поводу? Проверить относительно нетрудно — подуйте филину на перьевые уши так, чтобы не задеть остального филина, и филин возьмёт неправильный курс на столь аппетитную для него крыску.