Timeweb.Cloud

Timeweb.Cloud

Блог компании
То самое облако Наш сайт: https://timeweb.cloud/ ТГ: https://t.me/timewebru Хабр: https://habr.com/ru/companies/timeweb/articles/
На Пикабу
- рейтинг 1925 подписчиков 19 подписок 362 поста 307 в горячем
Награды:
более 1000 подписчиков5 лет на Пикабу
104

Первый открытый GSM-телефон

Автор текста: MaFrance351

Приветствую всех!

Последние годы довольно часто обсуждаются проекты open-source телефонов. В основном это всякие смартфоны на Linux, иногда припоминают и всякую экзотику типа OpenMoko. Но есть одна проблема — baseband, процессор модема, который непосредственно отвечает за всё его взаимодействие с сетями. Эти чипы исполняют проприетарный код, исходники которого распространяются под строгими NDA и недоступны практически никому.

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

Как насчёт того, чтобы создать открытый GSM-телефон? Именно об этом мы сегодня и поговорим, а заодно и попробуем запустить такой экземпляр.

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

❯ Суть такова


У всех на слуху такие девайсы как PinePhone или Fairphone. Это довольно интересные устройства, но сегодня речь пойдёт не о них. Если у упомянутых телефонов основной упор сделан на операционную систему, ремонтопригодность и тому подобные параметры, то проект, который мы рассмотрим сейчас, касается радиочастотной части: модема, DSP и взаимодействия с сотовой сетью на низком уровне. Во всех ранее представленных экземплярах используется уже готовый модуль модема, тогда как тут всё практически полностью открыто, а прошивка собирается из исходников и лишена блобов.

Сразу предупреждаю: то, что есть сейчас — всего лишь концепт, до полноценного использования девайса как телефона ещё далеко. Тем не менее, это хороший пример того, как при помощи доступного даже простому школьнику железа получить открытый (ну почти) GSM-телефон.

❯ TI Calypso


Давным-давно, где-то в самом начале двухтысячных, в Texas Instruments придумали чипсет Calypso.

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

Он предназначался для построения на нём бюджетных кнопочных телефонов и использовался целым рядом компаний, в частности, Motorola, Sony Ericsson и Siemens.

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

На самом деле практически никто не занимался разработкой и производством телефонов, все эти задачи были отданы на откуп тайваньской Compal, у которой просто закупали огромными партиями дешёвые ODM-трубки. Таких телефонов, использующих данный чипсет, по факту было ещё больше, чем может показаться. И, казалось бы, девайсы не были примечательны что для пользователей, что для энтузиастов, если бы не один примечательный факт. В 2008 году на сайте cryptome.org была выложена слитая документация на данный чипсет. Это вызвало поистине небывалый интерес в узких кругах, позже с использованием этих наработок было создано немало интересных проектов, в том числе во всех смыслах легендарный OsmocomBB. Но сегодня речь пойдёт не о нём, а о прямо противоположном устройстве. Раз есть базовая станция с открытым ПО, то почему бы и не быть такому телефону? Именно о нём мы сейчас и поговорим.

❯ FreeCalypso


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

Несмотря на то, что прошивка цифрового сигнального процессора (он же DSP) так и остаётся «чёрным ящиком», можно с уверенностью сказать, что FreeCalypso наиболее близок к идее открытого GSM-телефона. На момент написания статьи ближе находятся только решения с использованием SDR, но простым пользователям они практически недоступны ввиду крайне высокой цены таких приборов, тогда как старый телефон на опыты может себе позволить практически каждый.

❯ Обзор оборудования


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

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

А вот и подопытный телефон. Это Motorola C139. Подойдут также C113, C115, C118, C155, но лично я с ними не пробовал. Под другие телефоны альтернативной прошивки нет.

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

Как и в C118, тут тоже есть сервисное меню, код для его входа такой же: **16379#. Тут можно включить трассировку, которую он будет отправлять в последовательный порт.

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

Интерфейс также очень похож на другие телефоны Motorola на чипсете TI Calypso. Ну а если достать C118, сомнения о том, что это телефоны из одной линейки, пропадают сразу же.

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

Для прошивки понадобится некий «T191 unlock cable», служащий для связи телефона с компьютером.

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

На практике его можно заменить переходником на базе CP2102 (или любым другим, у которого есть поддержка уровней 3,3 В. Не используйте переходники с пятивольтовыми уровнями. Спалите телефон). Как его спаять, я уже описывал тут. Подключать его надо к ПК с Linux, виртуалка не подойдёт. Возможно, у вас дела будут обстоять иначе, но на практике я столкнулся с тем, что при подключении такой штуки к ВМ начинается периодический пропуск байтов.

❯ Чуть-чуть об устройстве GSM-телефона


Немного затронем то, из чего вообще состоят обычные телефоны.
Сейчас нас интересуют именно кнопочные экземпляры, причём именно «традиционные», без какой-то пользовательской ОС и прочих наворотов. В отличие от смартфонов и коммуникаторов, где основной процессор общается с внешним модемом, здесь что пользовательские функции, что взаимодействие с сетью выполняются одним и тем же процессором, в нашем случае это тот самый TI Calypso.

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

Вот структурная схема телефона на таком чипсете. TI Calypso имеет в своём составе тот самый необходимый для работы сети DSP, процессорное ядро (ARM7TDMI) и аппаратные контроллеры интерфейса. К нему подключается радиочастотная часть: чип трансивера, высокостабильный генератор (тот самый, погрешности которого нам тогда не хватало, чтобы поднять свою БС без приёма синхросигнала от другой), антенна, фильтр, смеситель и антенный переключатель. Последний позволяет использовать одну антенну для приёма и передачи. Поскольку в GSM используется временно́е разделение, между кадрами на приём и передачу есть определённая задержка (равная длительности трёх кадров), так что этот чип представляет собой не частотно-разделительный фильтр, как в аналоговых телефонах (AMPS, TACS, NMT), а просто коммутатор, подключающий антенну то к приёмнику, то к передатчику.

Эти аналоговые сигналы обрабатывает DSP, прошивка и описание которого не разглашается даже производителям телефонов (тем же компаниям, которые и продают трубки, либо тем, кто выпускает ODM-телефоны, закупаемые предыдущими брендами).

Другими компонентами baseband являются аппаратный шифратор (реализующий те самые алгоритмы A5/1 и A5/2), ПЗУ с прошивкой DSP, аудиокодек, а также различные контроллеры — UART, дисплея, клавиатуры, ISO7816 (для чтения SIM-карты) и прочей периферии.

Что же до телефонов с двумя симками, то тут есть два варианта. Первый ныне практически полностью ушёл в историю — там используется один модем, а симки подключаются к нему через обычный мультиплексор. Таким образом, единовременно может быть доступна в сети только одна карта. Такая схема использовалась в первых таких телефонах (обычно это были дешёвые китайские трубки). Второй вариант сложнее — по сути это два полноценных модема, размещённых в одном корпусе. Так устроены ну практически все современные телефоны, начиная от стареньких Samsung Duos и заканчивая нынешними смартфонами.

❯ Ставим софт


Переходим к опытам. Для загрузки альтернативной прошивки нужна сама прошивка под нужный нам телефон, а также софт для этого. Всё это можно скачать тут. Нас интересуют архивы c1xx-fcmag-latest.tar.bz2 и fc-host-tools-latest.tar.bz2. Первый содержит прошивку и сопутствующие файлы, второй — утилиты для её загрузки.

Если прошивка поставляется собранной вместе с исходниками, то софт необходимо компилировать самому. Для этого распаковываем архив в папку, заходим в неё и традиционным для линукса образом собираем софт:

make
sudo make install


После непродолжительной сборки (я пробовал на Linux Mint и на Lubuntu, проблем не возникло) всё нужное ПО будет готово.

❯ Сливаем прошивку


Перед началом прошивки необходимо сделать резервную копию Flash. Она нужна на случай, если придётся вернуться к изначальной прошивке или если в процессе загрузки новой что-то пойдёт не так.

Итак, заходим в папку loadtools и запускаем софт:

sudo ./fc-loadtool -h compal -c 1003 /dev/ttyUSB0


Само собой, порт нужно заменить на тот, который соответствует вашему переходнику. Если у вас не C139, то команду следует выполнить со следующими параметрами:

C11x/12x: fc-loadtool -h compal /dev/ttyXXX C139/140: fc-loadtool -h compal -c 1004 /dev/ttyXXX C155/156: fc-loadtool -h c155 /dev/ttyXXX

Если всё сделано верно, в консоли появится примерно следующее:

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

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

Если подключение успешно, отобразится консоль loadtool. Вводим следующую команду:

flash dump2bin backup.bin

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

Начнётся копирование прошивки с телефона на ПК. Процесс этот ничуть не быстрый и занимает примерно десять минут.

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

По окончании в папке с программой будет создан файл с штатной прошивкой телефона.

❯ Калибровка


Компоненты, использованные в радиочастотной части телефона, неидеальны, а ручная подгонка их номиналов привела бы к непомерному удорожанию телефона. Поэтому поступают проще: собранный телефон подключается к тестовому стенду, после чего полученные поправки и коэффициенты записываются на Flash.

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

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

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

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

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

Более того, кустарные попытки что-то туда воткнуть, скорее всего, приведут к тому, что не самый распространённый в других областях разъём сломается и телефон перестанет ловить сеть.

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

Тестирование обычно происходит при помощи специальных (ориентированных именно на мобильные сети) анализаторов стоимостью как квартира в центре столицы нашей страны.

Так вот. После того, как нужные настройки радиочастотной части получены, их загружают в память телефона, где они лежат в одном из скрытых каталогов файловой системы. Если просто установить свою прошивку (а FreeCalypso затирает всю Flash), то эти данные будут утеряны и телефон превратится в электронный органайзер. Поэтому их надо оттуда извлечь. Для этого предназначена специальная утилита c1xx-calextr, лежащая в папке ./ffstools/caltools.

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

Выполняем следующую команду:

./c1xx-calextr -b rfbin backup.bin 0x3FC000


Здесь backup.bin — файл дампа Flash, 0x3FC000 — смещение. Оно определяется следующим образом. Если размер Flash равен двум МБ, то смещение равно 0x1FC000, если четырём, то 0x3FC000. Размер этот очень легко определить по самому файлу дампа — 2097152 байт для маленькой версии и 4194304 байт для большой. После выполнения команды создастся папка rfbin, содержащая в себе все необходимые файлы с параметрами.

❯ Аккумулятор


Теперь очередь контроллера питания. Для него тоже есть свои параметры, если их не задать, то телефон не будет заряжаться. В инструкциях FreeCalypso упоминается вот эта ссылка, но она нерабочая. В реальности нужные нам файлы лежат тут. Нам понадобится standard следующего содержания:

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

Где-то может упоминаться вот такой файл. Не используйте его, с ним работать не будет.

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

Ну что же, можно перейти к самому важному этапу.

❯ Загрузчик


Теперь самый ответственный момент — перезапись загрузчика Motorola на тот, который будет запускать софт FreeCalypso.

Внимание! Неправильная перепрошивка загрузчика или нештатная ситуация в её процессе ведёт к окирпичиванию телефона. Если вы запорете эту область памяти, вернуть трубу к жизни сможет только программатор!
В случае использования C155 перепрошивать загрузчик не надо, описанные в этом разделе действия окирпичат телефон.


Перед началом данного предприятия заряжаем телефон «под завязку», затем подключаем его к компьютеру. Если аккумулятор дохлый, то запускаем от ЛБП, для верности. Симку, если она была вставлена, необходимо вытащить. Из архива с прошивкой извлекаем compal-flash-boot-for-fc.bin. После этого запускаем софт для прошивки, ранее описанным образом запускаем на телефоне загрузчик и выполняем следующую команду:

flash erase-program-boot compal-flash-boot-for-fc.bin

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

Если всё было сделано правильно, загрузчик будет успешно записан.

❯ Освобождение «Калипсо»


Теперь, если загрузчик записан, можно приступать к самой прошивке. В архиве нас интересует папка build-c139-hybrid-ui-vo. В ней и находится интересующая нас прошивка. И тут есть один нюанс: в качестве «полноценного» телефона подойдёт только Motorola C139. Под другие телефоны прошивки тоже имеются, но они реализуют функционал голосового модема, а не полностью самостоятельного телефона. Это тоже необходимо учесть, если вы хотите использовать иной телефон.

Итак, идём в эту папку и закидываем содержимое туда, где у нас лежит софт для загрузки. Далее вводим команду:

exec flash-script

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

Прошивка начинается со стирания памяти.

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

Далее произойдёт загрузка самой прошивки.

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

И, после нескольких минут томительного ожидания, программа выдаст нечто вроде этого.

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

Затираем участок Flash, выделенный под системные файлы, для чего вводим команду:

flash erase 0x3C0000 0x30000


Первое число — смещение. Оно также отличается в зависимости от объёма памяти: 0x1C0000 для 2 МБ, 0x3C0000 для 4 МБ, 0x700000 для 8 МБ. Второе число — количество байт: 0x30000 для 2 и 4 МБ, 0xD0000 для 8 МБ.

С fc-loadtool по сути всё. Выходим, набрав exit....


ЧИТАТЬ ДАЛЕЕ ↩ (без регистрации и СМС)

Материал получился достаточно объемным и все подробности, к сожалению, не влезли :(

Первый открытый GSM-телефон Гаджеты, Электроника, Timeweb, Gsm, Sony Ericsson, Siemens, Техника, Моторола, Телефон, Длиннопост

Написано специально для Timeweb Cloud и читателей Пикабу. Больше интересных статей в нашем блоге на Хабре и телеграм-канале.

Облачные сервисы Timeweb Cloud — это реферальная ссылка, которая может помочь поддержать авторские проекты.

Показать полностью 25
58

Как я печатал упоры для моноколеса и что из этого вышло

Автор текста: CyberexTech

Как я печатал упоры для моноколеса и что из этого вышло Гаджеты, Своими руками, 3D печать, 3D моделирование, Сборка, Техника, Самоделки, Timeweb, Видео, YouTube, Длиннопост

Всем привет!

С недавнего времени в моём электро зоопарке появилось моноколесо Kugoo Kirin U4 (оно же KingSong KS18-XL). Откатав на нем около тысячи километров, я понял что без упоров мне не обойтись. На различных маркетплейсах достаточно предложений по данному вопросу, но моя инженерная сущность (ну и немного жаба) предложила повременить с покупкой упоров и изготовить их самостоятельно. А что из этого вышло, далее под катом.

❯ Исходные данные


По материалам и оборудованию у меня имелось следующее:

  • 3D принтер Flying Bear Ghost 5;

  • Филамент из термопластичного полиуретана (TPU) от FDplast.


Данный принтер я использую уже довольно давно, он является «рабочей лошадкой» в моих DIY проектах. После покупки принтера, я сразу перенес податчик филамента на экструдер и оптимизировал его для гибких филаментов, добавив вставки их тефлоновой трубки в промежутки, чтобы избежать зажевывания. Ниже фото модернизированного экструдера.

Как я печатал упоры для моноколеса и что из этого вышло Гаджеты, Своими руками, 3D печать, 3D моделирование, Сборка, Техника, Самоделки, Timeweb, Видео, YouTube, Длиннопост

TPU филамент у меня был в наличии, валялся в шкафу пару лет. Покупал для печати резиноподобных прокладок.

Характеристики TPU филамента

TPU пластик «Веном»

Диаметр, мм: 1.75
Вес нетто, г: 1000
Материал: Термопластичный полиуретан
Плотность: 1,25 г/см³
Темп. экструзии: 175-190 °С
Темп. стола: 50-70 °C
Скорость печати: 15-20 мм/с
Вес брутто: 1350 г
Производитель: Завод «ФДпласт», Россия

Дополнительные параметры:

Прилипание к столу: чистое стекло, БФ2, клей 3D
Адгезия: хорошая
Обдув: желателен
Постобработка: механическая и химическая обработка затруднена
Особенности: требуется доработка головки 3D принтера с целью устранения зазора между подающей шестерней и трубкой термобарьера. Предпочтителен директ экструдер
Твердость: очень низкая Шор А=75 ед
Морозостойкость и теплостойкость: -60+120 °С
Гигроскопичность: низкая
Контакт с пищевыми продуктами: нет
Химическая стойкость: стоек к большинству бытовых растворителей
Материал стоек к деформациям на растяжение и на сжатие

Преимущества:

Пластик flex для 3d принтера — сложный полиэфир, относящийся к пластичным полиуретанам и обладающий формой бесцветных гранул цилиндрической или линзовидной формы. Отличается высокой гибкостью, отсутствует запах в процессе печати, не поддается повторной переработке, используется при изготовлении обмотки для силового кабеля, используется в разработке дизайна подошвы обуви, для защитных аксессуаров смартфонов, в качестве декоративных накладок в салоне автомобиля. Идеально подходит для создания 3D-моделей архитектурных объектов, макетов человеческих органов. По своей структуре, он напоминает силикон, чем выгодно отличается от других, более жестких видов пластика.
Надежный, износоустойчивый, обладающий эластичностью и способный не разрушаться под воздействием низких температур, пластик может использоваться в агрессивной среде, связанной с воздействием щелочей, масла, жира или кислот.
Обладает высоким уровнем межслойной адгезии. Предельно стоек на разрыв, при деформации быстро восстанавливает первоначальную форму. Предлагаем купить пластик для 3d принтера от одного мотка, обеспечим своевременную доставку и дальнейшее сотрудничество на выгодных условиях.


Несмотря на то, что производитель рекомендует скорость печати 15-20 мм/с, в моем случае, скорость печати составляет 40 мм/с.

❯ Реверс инжиниринг


Реверс инжиниринг — какое приятное словосочетание, избавляющее тебя от моральных терзаний ). Теперь можно сказать, что не своровал, а обратно спроектировал. Давайте же и мы обратно спроектируем наши упоры с понравившейся картинки товара на Алиэкспресс, тем более, продавец нам любезно указал габаритные размеры.

Для 3D моделирования я использую FreeCAD — САПР общего назначения с открытым исходным кодом. Загрузим, в качестве эскиза, нашу картинку с Алиэкспресс во FreeCAD приведем к необходимому масштабу.

Как я печатал упоры для моноколеса и что из этого вышло Гаджеты, Своими руками, 3D печать, 3D моделирование, Сборка, Техника, Самоделки, Timeweb, Видео, YouTube, Длиннопост

И, буквально за десять минут, создадим трехмерную обратно среверсируем нашу модель упоров.

Как я печатал упоры для моноколеса и что из этого вышло Гаджеты, Своими руками, 3D печать, 3D моделирование, Сборка, Техника, Самоделки, Timeweb, Видео, YouTube, Длиннопост

❯ 3D печать


В качестве слайсера для 3D печати, я использую Cura — слайсер 3D-моделей с открытым исходным кодом для 3D-принтеров. TPU филамент очень капризный материал, поэтому, ещё при первом знакомстве с ним, опытным путем подобрал параметры профиля для работы с данным материалом.

В качестве базового, я использовал профиль для HIPS пластика со следующими корректировками:

Высота слоя: 0,4 мм
Скорость печати: 40 мм/с
Температура стола: 30 ℃
Температура сопла: 200 ℃
Обдув: 100%
Диаметр сопла: 0,4 мм


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

Как я печатал упоры для моноколеса и что из этого вышло Гаджеты, Своими руками, 3D печать, 3D моделирование, Сборка, Техника, Самоделки, Timeweb, Видео, YouTube, Длиннопост

Плотность заполнения при печати составляет 10%. Этот параметр влияет на упругость модели. В моем случае, предварительные тесты показали, что 10% заполнение соответствует моим критериям упругости упоров.

Как я печатал упоры для моноколеса и что из этого вышло Гаджеты, Своими руками, 3D печать, 3D моделирование, Сборка, Техника, Самоделки, Timeweb, Видео, YouTube, Длиннопост

Было напечатано четыре части упоров, время печати каждой части составило ± 8 часов. Ниже на фото представлен результат.

Как я печатал упоры для моноколеса и что из этого вышло Гаджеты, Своими руками, 3D печать, 3D моделирование, Сборка, Техника, Самоделки, Timeweb, Видео, YouTube, Длиннопост

Для склейки частей рекомендую использовать цианоакрилатный клей (суперклей), он отлично склеивает полиуретан. Для печати левого упора, не забудьте в Cura отзеркалить модели.

❯ Примерка и приклейка


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

Как я печатал упоры для моноколеса и что из этого вышло Гаджеты, Своими руками, 3D печать, 3D моделирование, Сборка, Техника, Самоделки, Timeweb, Видео, YouTube, Длиннопост

После завершения печати всех элементов, пришло время наклеить наши упоры на моноколесо. Для начала нужно наклеить двухсторонний скотч на наши упоры, дополнительно нанеся небольшое количество суперклея на поверхность упора (это необходимо сделать из-за особенности адгезии полиуретана). Двухсторонний скотч я использовал марки New Glaxy, но рекомендую использовать 3М. Затем нам нужно удалить стоковые подушки с моноколеса и приклеить наши новые упоры. Чтобы убедиться в правильности крепления упоров, пригласим инспектора по качеству.

Как я печатал упоры для моноколеса и что из этого вышло Гаджеты, Своими руками, 3D печать, 3D моделирование, Сборка, Техника, Самоделки, Timeweb, Видео, YouTube, Длиннопост

Ниже картинка моноколеса после полевых испытаний:

Как я печатал упоры для моноколеса и что из этого вышло Гаджеты, Своими руками, 3D печать, 3D моделирование, Сборка, Техника, Самоделки, Timeweb, Видео, YouTube, Длиннопост

Фото из поездки:

Как я печатал упоры для моноколеса и что из этого вышло Гаджеты, Своими руками, 3D печать, 3D моделирование, Сборка, Техника, Самоделки, Timeweb, Видео, YouTube, Длиннопост

❯ Итоги


Давайте подведем итоги. После печати и установки подушек на моноколесо, я отправился в тестовую поездку на расстояние более 50 км. С первых секунд поездки я ощутил значительное изменение комфорта в лучшую сторону и повышение отзывчивости моноколеса при управлении. Доволен ли я? Ещё как! Структура упоров имеет тактильно очень приятные ощущения, отсутствуют проскальзывания, очень хорошая фиксация ног. TPU пластик устойчив к механическим воздействиям и прочен на разрыв.

Теперь давайте поговорим о экономической целесообразности данной задумки и подсчитаем затраты:

  1. Филамент: ± 694 грамма (433 руб | $4,77).

  2. Электроэнергия: 32 часа печати (±0,96 кВт*ч | 4 руб | $0,044).

  3. Клей, скотч: ± 300 руб | $3,30.


Итого:737 руб|$8,11

При этом, минимальная стоимость упоров на маркетплейсах 4 000 руб или $44,04. Из этого можно сделать вывод, что данная затея экономически выгодна и стоит реализации.
Пожалуй, на этом можно и завершать статью. Спасибо всем, кто уделил своё время, надеюсь мой опыт будет кому-то полезен. Если у вас возникли вопросы, пожелания или хотите поделиться подобным опытом, то добро пожаловать в комментарии.

Бонусный контент: видео изготовления

❯ Ссылки к статье

Как я печатал упоры для моноколеса и что из этого вышло Гаджеты, Своими руками, 3D печать, 3D моделирование, Сборка, Техника, Самоделки, Timeweb, Видео, YouTube, Длиннопост
Показать полностью 11 4
45

Бесплатный прокси к Docker Hub

Бесплатный прокси к Docker Hub Windows, Linux, Программа, Компьютерная помощь, Timeweb, Прокси, Россия

Сегодня ночью Docker Hub закрыл доступ к своему сервису пользователям из России.

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

Инструкция по ссылке

Показать полностью 1
57

Оживляем электронный кран машиниста от электровоза

Автор: MaFrance351

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

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Итак, в сегодняшней статье поговорим про такой артефакт наших железных дорог как кран машиниста №130. Узнаем, как устроен его контроллер и попробуем его восстановить. Традиционно будет много интересного.

❯ Суть такова

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Так получилось, что основными приборами управления тормозами на нашем подвижном составе являются краны машиниста №394 и №395. В плане пневматики это по сути один и тот же кран, единственное отличие заключается в наличии у триста девяносто пятого контроллера управления электропневматическим тормозом (та самая круглая коробочка сверху). Также на фото виден маленький кран вспомогательного тормоза №254, служащий для управления тормозами локомотива.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Само собой, этими двумя моделями список не ограничивается. Вот, например, кран №334, применяющийся на вагонах метро (а ещё раньше — на локомотивах и МВПС). Модель очень старая, по найденным сведениям, выпускался он аж с 1904 года и ставился ещё на паровозы.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Кран №013, устанавливающийся на практически все новые вагоны метро, а также рельсовые автобусы РА1.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

А вот довольно экзотический кран №172 (он же 4ВК), применяющийся в частности на трамваях с пневмотормозом (ЛМ-68М, ЛВС-86К, РВЗ-6М2...).

❯ Что же это за кран №130?

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

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Эти устройства ставятся на новый подвижной состав. Вот, например, этот кран в кабине электрички ЭП2Д (его ручка видна в правой части пульта, слева контроллер машиниста).

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

А вот он же в электровозе ЭП20.
По сравнению с более старыми кранами непосредственного действия, разработанными полвека назад, этот — совсем новый, его внедрение началось лишь в нулевые годы.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

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

❯ Обзор оборудования

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

А вот и мой экземпляр. Он был снят с какого-то электровоза по причине его выхода из строя. Впрочем, внешнее его состояние очень неплохое, что не может не радовать.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Шкала с положениями. Они здесь всё те же, что и в кране №395. Ручка приятно тугая, переключается с характерным щелчком.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Заводская табличка. Делает эти устройства АО МТЗ-Трансмаш. На табличке почему-то не заполнено ни одно из полей.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Снизу ничего интересного, только крышка, в которую некогда был вставлен разъём.

❯ Внутренности


Давным-давно я писал про контроллер машиниста. Там код позиции задавался кулачками, нажимавшими на самые обычные микрики. Этот же контроллер — бесконтактный.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Заглянем внутрь. Самое печальное — плату до меня уже вытащили и до наших дней она не дожила. Так что для подключения этого девайса придётся собирать свою.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Самая главная часть контроллера — вот этот рычаг, на конце которого закреплён магнит. Соответственно, на плате находятся датчики Холла, считывавшие его положение.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

А вот механизм переключения остался тем же — металлический диск с вырезами и ролики. Крайние положения переключаются особым образом: в сверхзарядке кран не фиксируется, а в экстренное торможение переключается очень туго.

❯ Собираем плату управления


Штатная плата была выкинута, так что единственным вариантом подключить такой кран будет сборка своей собственной.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

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

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Для того, чтобы считывать позиции, были взяты датчики Холла. Это те самые SS495A, оставшиеся у меня после экспериментов с магнитными ключами домофонов «Факториал». Датчиков нужно семь штук — на каждую из позиций по одному.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Также использовал MAX485 для передачи данных (почему именно её — расскажу чуть позже) и видавшую виды Arduino на базе чипа от LGT для управления.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

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

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

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

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

И в соответствии с метками запаиваем датчики. Припаиваем провода.

❯ Прошивка контроллера


Теперь очередь софта. Само собой, кран оживлялся для сборки домашнего пульта машиниста. И у меня была идея повесить все составляющие тренажёра на RS-485, чтобы не переделывать каждый раз плату, а просто модифицировать прошивку. Поэтому пишем такой скетч:

#define RX 9
#define TX 8
#define MAX485 7

#define SEND 1
#define RECEIVE 0

#define DEVICE_ID 0x82

#define MIN_SENSOR_VALUE 100

#include <SoftwareSerial.h>

SoftwareSerial host(RX, TX); // RX, TX

uint16_t hallReadings[7];

uint8_t getAbsolutePosition() {
for (int i = 0; i < 7; i++) {
hallReadings[i] = analogRead(i);
Serial.print("Channel ");
Serial.print(i + 1);
Serial.print(" ");
Serial.println(hallReadings[i]);
}
Serial.println();
for (int i = 0; i < 7; i++) {
if (hallReadings[i] <= MIN_SENSOR_VALUE) return i + 1;
}
return 0;
}

void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
host.begin(4800);
pinMode(MAX485, OUTPUT);
digitalWrite(MAX485, RECEIVE);
}

void loop() {
// put your main code here, to run repeatedly:
uint8_t currentPosition = 0, previousPosition = 0;
currentPosition = getAbsolutePosition();
if (currentPosition != 0) {
previousPosition = currentPosition;
}
if (host.available()) {
if (host.peek() == DEVICE_ID) {
host.read();
digitalWrite(MAX485, SEND);
host.write(previousPosition);
digitalWrite(MAX485, RECEIVE);
}
else host.read();
}

Тут всё просто — считываем код позиции и, если он не равен нулю (что бывает в момент переключения крана), сохраняем его. Попутно слушаем шину и в случае поступления байта 82h (что и есть 130 в десятичной системе) отправляем в ответ код позиции.

❯ Собираем


С железом почти покончили, время уместить все железки внутри крана.

Примеряем плату и убеждаемся, что датчики не перекрываются и не мешают ходу рычага.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

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

❯ Ещё раз про контроллер


Как оказалось, использованная изначально Raspberry Pico для такой задачи подошла так себе, в частности, несмотря на то, что USB HID с виду работал нормально, в некоторых играх (например, Metrostroi) контроллер либо в принципе не работал, либо работал неадекватно (перескакивая позиции или вообще зависая). С чем это связано, понять так и не вышло.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Поэтому в качестве контроллера ввода была взята Arduino Micro (на которую залит скетч на базе библиотеки Joystick.h), с которой проблем не наблюдалось. На плате разместился чип 74HC165 для приёма сигналов с контроллера и два DIP-переключателя, пока что зарезервированных. Также там была установлена та самая MAX485, к которой будет подключено всё остальное железо, включая этот кран.

❯ Софт


Изначально я подключал контроллер к Trainz. Но товарищи, уже имевшие опыт в создании пультов машиниста, подсказали, что лучше всего использовать ZDSimulator.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

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

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Назначаем позиции джойстика на кран машиниста, запускаем игру, и всё, можно трогаться.

❯ Вот как-то так


Вот так удалось вернуть к жизни очередной девайс из мира ЖД, попутно приблизив ещё на шаг готовый домашний тренажёр машиниста.
Само собой, я уже попробовал кататься с этим краном, ощущения непередаваемые. Никакой джойстик и уж тем более клавиши не смогут обеспечить того же.
Такие дела.

Ссылки

Показать полностью 25
8

Мое решение 3-х проблем MVx

Автор текста: Lynnfield

Итак, в прошлый раз я описал три проблемы, которыми, на мой взгляд, страдают все MVx и даже некоторые не MVx архитектуры. Если коротко, то это:

  • проблема остатка — при делении фичи на заявленные компоненты архитектуры остаётся либо «неделимая» часть фичи, либо лишние компоненты архитектуры;

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост
  • проблема масштабирования — при расширении фичи компоненты архитектуры начинают раздуваться, что усложняет дальнейшую поддержку;

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост
  • и проблема разрывов логики, когда из-за взаимодействия с UI логика разрывается на части, что тоже не помогает нам делать систему более цельной, предсказуемой и тестируемой.

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

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

❯ Проблема остатка (Remainder issue)


Первый вопрос: что делать с остатком? Все просто — взять делитель поменьше, потому что чем меньше делитель, тем меньше остаток. Этому меня еще в школе научили. Но я столкнулся с тем, что это не работает с MVx архитектурами, потому что мой делитель, обычно, это набор определенных компонент, и введение новых — значит изменение архитектуры.

Возможно и вы с этим сталкивались, когда вводили всякие мапперы, делегаты, интеракторы (те, что репозитории репозиториев) и прочее. Помогли ли они мне? Нет. Лучшее решение, что я видел — это Flux- и ELM-like архитектуры, которые заявляют «чистую» функцию как единицу деления логики, но со всеми вытекающими отсюда удобствами и следующими за ними «эффектами».

Но решение проблемы остатка, даже если бы оно у меня было, не помогает мне решить проблему масштабирования.

❯ Проблема масштабирования (Scalability issue)


В прошлый раз я упоминал «интуитивный» подход к решению задачи масштабирования и рассказывал почему он не работает. По крайней мере не у меня.

А какой не интуитивный?

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

Так и в MVx архитектурах: можно было бы попробовать реализовывать доработки отдельно, а уже потом объединять их с существующей фичей, вместо того, чтобы вносить изменения в уже написанные компоненты. Что в прошлом не раз приводило меня к череде переписываний тестов, судорожному протыкиванию приложения на предмет того, что ничего не поменялось, и мольбам о том, чтобы очередной баг-репорт был не по моим изменениям.Но вот что я заметил, ведь именно такой подход, когда мы предпочитаем композицию изменениям, я и мои коллеги используем для Data-слоев. Например, новые источники данных оборачиваются в Репозитории, а потом комбинируются в Интеракторы. Но почему-то чем ближе мы подходим к UI-слою, тем больше начинаем изменять, а не комбинировать.

Чаще всего я вижу эту проблему как вечное переписывание тестов уже существующих компонент, или Presenter, ViewModel, Controller размером со вселенную, который даже трогать страшно, потому что что-то точно развалится.

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

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

Еще мне показалось интересным, что тут нам может помешать проблема остатка, которая по идее должна привести к ситуации, когда такой подход не сработает, потому что надо будет внедрить доработки в “середину” компонента из уже существующей фичи, а значит придется делить существующие компоненты на новые, более мелкие. Чем крупнее делитель, тем крупнее остаток, да?

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

В итоге, даже использовав “неинтуитивный” подход к масштабированию, я все-равно не могу до конца понять как решить проблему масштабирования. А между прочим еще остается проблема разрывов.

❯ Проблема разрывов (Gaps issue)


И вот тут становится интересно. Все дело в Hello World. Мне все никак не дает покоя вопрос: какая у него архитектура?

Hello world


Я видел примеры Hello World в разных языках, фреймворках и архитектурах (кроме Open GL, конечно же), и у них не было проблем с его реализацией. Если не считать проблемой то, сколько усилий надо приложить, чтобы написать изначальный шаблон. Но, если результат одинаковый, не значит ли это, что разница только в том, сколько обвязок надо написать, чтобы Hello World работал? И нужны ли они? Тогда я стал думать: а что общего у всех этих реализаций Hello World в разных архитектурах? И как-то я пришел к мысли, что скорее всего правильный ответ — Алгоритм. И он до безобразия тривиален.

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

И что интересно, у самого алгоритма нигде не написана архитектура в которой он должен быть имплементирован. Но это Hello World. Как я и сказал: он чересчур прост.

Более интересные примеры


Давайте лучше взглянем на следующий пример, который используют в учебниках по программированию — Hello %username%. У него все та же проблема с архитектурами — его можно написать в любой из них, и общее между всеми реализациями в разных архитектурах — алгоритм.

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

А вот еще интересное наблюдение: если мы немного обобщим алгоритм Hello World, отделив show от Hello World, то увидим, что он дважды появляется в алгоритме этого примера.

Все еще слишком просто, правда? Следующий учебный пример — работа со структурами данных. И в самом простом виде — это CRUD плюс “показать все” с хранением в списке (он же List). Этот пример, не очень интересный с точки зрения реализации, интересен тем, что он добавляет в предыдущий алгоритм композицию.

По сути здесь мы первый раз сталкиваемся с тем, что нам надо создать пять независимых программ, а потом объединить их под управлением шестой. А еще эти шесть программ делят между собой один блок памяти — сам список структур. И мне кажется, что это уже напоминает решение одной из наших проблем, не так ли?

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

Появление Gaps issue


Но что происходит даже с этими простыми программами, когда мы пытаемся перенести их в UI-среду?

Легче всего Hello World, потому что он просто обрастает кучей компонент, которые помогают ему “жить” в новой среде. Даже не интересно.

А вот Hello %user name% приходится куда сложнее. Беднягу размазывает по компонентам системы или архитектуры: в одном месте мы слушаем ввод имени, в другом показываем приветствие, а в третьем прописываем реакцию на введенное имя.

Я даже боюсь говорить о том, что же происходит с CRUD-примером. В зависимости от того, какой макет нам нарисуют, мы будем писать совершенно разные приложения. Вот представьте, что вас попросили сделать такую программу как несколько разных экранов, а потом попросили переделать так, чтобы это был один экран. С часто используемым подходом к декомпозиции, когда один экран — один набор MVx-компонент, мы получим бессонную ночь переписывания кода, потому что части нашей логики разорваны и раскиданы по всей реализации.

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост


Но ведь изначально “не было ни единого разрыва”, а алгоритм остался тем же. Почему все стало так плохо?

Причина — асинхронность


На этот вопрос некоторые уже дали ответ в комментариях к предыдущим статье и видео, и я с ними полностью согласен. Причина — асинхронность. И я был искренне удивлен, когда пришел к этому выводу.

Многие, если не все GUI-системы построены вокруг event loop, потому что нам надо одновременно и экран рисовать, и ввод от пользователя слушать. А чтобы сюда добавить еще и наш алгоритм, его придется разделить так, чтобы он хорошо встраивался в этот event loop.

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

Решение — закрытие разрыва

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

Обратим внимание на графикоподобную картинку, на которой я объяснял проблему разрывов в прошлый раз.

Напомню как всё было, и в этот раз уже не буду лукавить: путь нашей логики начинается в каком-то из callback’ов, а не в абстрактном “начале”. По мере выполнения мы продвигаемся все глубже по стеку вызовов, выполняем одну за другой функции, и в самой верхней точке нашего графика мы обращаемся к источнику данных: бэкенду, файлу, какой-то системе хранения. И что здесь обычно находится?

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

Обычно это вызов какой-то “асинхронной” функции: корутины, async- или suspend- функции, уж простите мой котлинский, или какой-то функции с callback’ом, или функции возвращающей какой-нибудь Future, Promise или Single.

И вот вопрос: вызывая эту функцию с callback’ом, как часто мы задумываемся, что эта операция может вообще никогда не вернуться в этот callback? Лично я до недавнего времени считал, что управление гарантированно будет передано в наш callback. Не считая случаев “отмены”, конечно же. Но откуда у нас такая гарантия? Возможно все дело в реализации системы? Давайте “заглянем под капот” и посмотрим что же там на самом деле происходит.

Наша функция формирует наш запрос к базе, запрос в сеть или еще что-то. В общем случае формирует какой-то контекст, с помощью которого надо выполнить запрос, и вместе с callback’ом, в который надо вернуть результат, отправляет его на другой поток, и там происходит все выполнение. После завершения выполнения, тот поток вызывает callback, передавая в него результат, что для нас, разработчиков, выглядит как своего рода возврат в точку вызова. Таким образом логика выглядит более цельной, и такого разрыва, как в случае с UI не происходит.

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

Так вот вопрос: а почему бы нам не повторить этот же трюк с UI?

На картинке это будет выглядеть как параллельный перенос: мы просто поднимем нашу линию, а вот тут, в нижней точке, вместо того чтобы разрывать логику и отдельно задавать на UI какое-то состояние и callback’и, сделаем функцию, которая отправляет запрос на UI и ждет от него ответа. Таким образом мы закрываем разрыв и теперь наша логика будет выглядеть как единое целое.

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

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

❯ Proposal


Давайте писать функции…

Да, может звучать нелогично, тем более, что я уже говорил о том, что это не помогает Flux- и ELM-like архитектурам, но я объясню. Начнем с проблемы остатка.

Влияние на решение проблемы остатка


Добавлю небольшую аналогию с математикой. Как я и говорил «архитектура» — это делитель. А чтобы при делении не оставалось остатка — нам нужно найти наибольший общий делитель. Чем и является функция, на мой взгляд. Чем больше я смотрю на реализации всех наших «архитектур», тем больше я вижу, что все они, по сути, просто один из способов удобнее объединять и специализировать функции (и тут я подразумеваю, что метод класса — это функция, которая иногда неявно принимает дополнительный аргумент).

Дальше лучше — проблема масштабирования.

Решение проблемы масштабирования


Функции очень хорошо масштабируются, потому что, с точки зрения реализации, они могут вмещать в себя любой набор инструкций и в том числе вызовы других функций, а с точки зрения пользователя функции это всегда просто вызов функции: имя, параметры, результат, независимо от того как она реализована.

А что с разрывами?

Решение проблемы разрывов


До тех пор, пока мы будем поддерживаем нашу логику, как композицию функций, проблема разрывов будет естественным образом «выталкиваться наружу», за пределы нашей логики. А это в свою очередь будет гарантировать нам последовательность выполнения, тестируемость и как следствие — стабильность.

❯ Концепт


Так что же я предлагаю?

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

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

Во-вторых, у этой функции (композиции функций) должна быть возможность работать независимо от «сторонних» систем, поэтому я предлагаю вынести ее в свой поток, чтобы у нее была возможность спокойно выполняться, блокироваться при необходимости, параллелиться и тому подобное. Пусть будет “синхронной”. Обычно мне не надо, чтобы логика продолжала свое выполнение, когда она ждет какой-то ресурс. А если такое поведение нужно, то почему-бы его не описать его явно? И назвать бы этот поток Main, но имя уже “занято”. =)

В-третьих, хотя это и самый важный пункт, а у меня видимо есть тенденция оставлять все важное на потом, я предлагаю сосредоточиться на реализации логики приложений, а не экранов и виджетов. Как видите, с таким подходом нет разницы между слоем данных и пользователем. Есть только наша детерминированная логика и внешние системы, которые обмениваются данными через нее. Логика просто ходит между ними и предоставляет им некий контекст для принятия решения и набор возможных действий, а внешние системы в свою очередь “отвечают” нашей логике руководствуясь представленным контекстом. Это похоже на игру в шахматы, где внешние системы — игроки, а логика — доска с фигурами и правила игры.

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

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

В конце концов, применив этот концепт, я хочу помочь всем нам проектировать и писать кроссплатформенные приложения в самом широком смысле этого слова: разрабатывая и реализуя end-to-end алгоритмы которые прозрачно перескакивают с бэкенда на фронт и обратно, которые не видят различия между разными видами фронтов, будь то Web, iOS или Android, или разными типами вроде UI, CLI, или TalkBack.

Но пока это только концепт и виденье. Пожалуй пора посмотреть на код, но он будет в следующий раз. А сейчас есть время порефлексировать на эту тему. Дайте этим идеям время перевариться. Прочитайте еще раз. Задайте вопросы. И может вы сможете написать код еще до того, как я опубликую продолжение. Хотите посоревноваться?

Увидимся.

Показать полностью 14
158

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон

Автор текста: vladkorotnev

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

И вот уже после заголовка рука сама тянется к минусу, в ожидании статьи с рекламой очередного приложения «VHS ретро звездец стильный камера инстаграм 2022 голливуд эффекты» от какого-то сомнительного разработчика :-)

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

Поэтому в этот раз мы пойдём более закрученным путём.

❯ Источник изображения


От хорошего товарища, с которым мы в прошлой статье хабарили чипы, перепала пара интересных трансляционных камер из восьмидесятых. Характерное их отличие от более современных «твердотельных» аналогов в том, что для захвата кадра используется электронно-лучевая трубка!

Victor GX-S700

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Поциэнт в процессе чистки от налипшего за 20 лет всего что можно


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

Внутри у неё используется цветная трубка «Сатикон». Из-за этого камера весьма прожорлива по свету.

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

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Набор текста на знакогенераторе через видоискатель камеры

Помимо BNC для видеовыхода и входа синхронизации, камера использует проприетарный разъём по типу советских ОНЦ для соединения с видеомагнитофоном.

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

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

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

Поэтому вы просто нажимаете на кнопку на своём «домашнем» видаке, и обычный видак превращается…

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

В два раздельных блока — ТВ-тюнер и зарядку, которые остаются в стойке, и, собственно, сам видеомагнитофон, к которому вы цепляете ремень, аккумулятор, и уносите с собой.

Питание имеет значение


Однако, в 2024 году питать видеокамеру от никелевых или свинцовых аккумуляторов уже как-то не комильфо — заряжать долго, ресурс вырабатывается быстро, да и ноги спасибо не скажут.

В своё время, снимая на обычную VHS-камеру, я какими только извращениями не занимался:

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Не взорвался — значит, день удался!

К счастью, с тех пор на нашу голову был ниспослан такой стандарт, как USB Power Delivery, для которого нынче выпускается великое множество источников питания и аккумуляторов.

Поэтому заказываем с амазона сомнительную китайскую платку:

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

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

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

К счастью, согласовывается ближайшее низкое напряжение — в данном случае 9 вольт, которых камере оказывается достаточно для полноценной работы.

Попутно выясняется второй подводный камень — для работы АЦП нужно так же и 5 вольт через miniUSB, а купленный поварбанк при подключении двух и более устройств, сваливается назад к 5 вольтам на всех портах, чего камере уже недостаточно.

Импульсного преобразователя под руками не оказывается, поэтому припаиваем КРЕНку и подсовываем под неё железяку потолще для рассеивания примерно ватта мощности :-)

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

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

КРЕНка в прямом смысле присрана, так как через неделю очередная поездка в Акихабару, где уже можно будет купить импульсный преобразователь

Защёлкиваем этот тихий ужас на камеру, подключаем поварбанк — ура, камера запускается и показывает картинку. Искажения цвета при этом не настолько фатальные, чтобы их не вытягивал встроенный баланс белого — по крайней мере, в сравнении со стационарным источником питания :-)

«Мама, я хочу киношный риг!» — «Нет сынок, у нас уже есть киношный риг дома»


Камера — это, конечно, хорошо, но было бы неплохо картинку с неё и на что-нибудь записать. К счастью, на моём телефоне уже есть штатное приложение «Видеовход», которое может выводить и записывать картинку с любого устройства, поддерживающего USB Video Class — т.е. определяющегося в Windows как вебкамера, например.

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

И таковое устройство у меня нашлось — карманная карта видеозахвата, купленная в своё время для того, чтобы стримить из аркад. Подключаем её к телефону, в неё втыкаем адаптер AV2HDMI, а в тот — видеокамеру. На удивление, «наушниковый» выход камеры оказался вполне себе линейным, поэтому никаких аттеньюаторов паять не пришлось.

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Обильно сдабриваем всё это липучкой-самоклейкой, и получаем новейший риг тысячелетия, на который хоть следующий «Оскар» снимать можно:

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост
Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Скукоживаем картинку обратно


Остаётся последняя беда — встроенное приложение умеет писать только в 1080p, в соотношении сторон 16:9. Конвертер тоже применён самый дешёвый, и не умеет вписывать входное изображение в кадр правильно. Из-за этого картинка с камеры выглядит растянутой по ширине.

К сожалению, способа скорректировать это в самом приложении я не нашёл, а до декомпиляции его ещё руки не дошли. Однако, можно исправить это с помощью FFMPEG, который так же легко устанавливается на телефон. Параметры надо будет передать следующие:

-aspect 1440:1080 -c:v copy -c:a copy

Это лишь прописывает соотношение сторон в метаданные файла, но не перекодирует сами кадры, поэтому конвертация происходит моментально и без потерь качества.

Однако, не все приложения умеют обрабатывать эти метаданные корректно — например, твиттер всё равно показывает картинку растянутой. Напротив, ВК через Kate Mobile, а также Telegram X, загружают видео корректно. Также как и Google Photos, вследствие чего обрезанные/обработанные видео, а также сохранённые стоп-кадры имеют правильное соотношение сторон.

Смотрим на будущее из прошлого


После этого можно попробовать взять камеру на прогулку и поснимать на улице.

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Из-за какого-то дефекта звук иногда трещит, но в остальном картинка получается примерно такой, как и ожидаешь от видеокамеры из конца восьмидесятых.

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Больше кадров в таком духе можно посмотреть в Телеграме, который я специально под это дело завёл: «Японский магнитофон!»

Чем больше — тем лучше


Также мне перепала ещё и профессиональная трансляционная камера — Victor KY-1900.

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

В отличие от предыдущей, в ней используется аж три видикона — по одному на каждый цвет!

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Вот они слева направо

Но увы — при первом включении оказалось, что синий канал не работает. Перетыкивания коннекторов привели к выводу, что проблема в плате обработки сигнала. То есть, где-то вот здесь:

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Выяснилось, что испортились танталовые конденсаторы в позициях C37 и C40 — такие конденсаторы имеют свойство при поломке образовывать не обрыв в цепи, а короткое замыкание, поэтому задающая яркость синего цепь была всегда притянута к земле. Найти их было легко, так как они очень сильно грелись. Шутка ли, через такую фитюльку рассеивать под 5 ватт!

Однако после этого синий цвет работал только при минимально установленном уровне чёрного, любая же установка выше этого сразу заполняла синим весь экран. Несколько недель перебора компонентов и с десяток ударов анодным в палец спустя оказалось, что всё-таки отгнила одна нога у подстроечника, а я считал, что уже проверил его, и всё это время ходил вокруг да около. Даже удлинитель спаял, чтобы плату во время работы камеры обмерять где только можно.

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

До кучи маркировка на плате подкидывала приколов на некоторых компонентах. Кручу-верчу, запутать хочу!

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Плюс у С21 справа?

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Или таки слева?

Также у объектива при открытой диафрагме внутри торчала какая-то полоска. Она же создавала излишнее трение и мешала приводу автоэкспозиции нормально крутить колесо диафрагмы. Ну я и подумал, можно же аккуратненько разобрать объектив, загнуть её назад и собрать обратно.

Конечно же, при разборке я диафрагму уронил, лепестки разлетелись по полу, и следующие четыре часа я провёл, восстанавливая её по наитию :-) Зато теперь-то всё ходит идеально плавно и ничего ниоткуда не торчит!

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост


Последней преградой осталось питание — этой камере уже 9 вольт для работы недостаточно. Однако, через Quick Charge поварбанк таки согласился выдавать 12 вольт.

Так как триггер ждать не хотелось, то из загашников была достата ардуина и россыпь резисторов. Прошиваем туда QC3Control, подключаем по схеме. Питание включаем напрямую туда же — ведь в даташите на ардуину сказано, что она работает и от 12В, да и перемычка обхода понижающего преобразователя у меня не запаяна, так что всё должно быть хорошо.

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

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

В итоге «на соплях» проверить камеру удалось, однако для того, чтобы вытащить её на улицу, нужно всё ещё решить проблему с питанием АЦП. Здесь уже кренкой не обойтись — суммарное потребление не пролезает по току в лимиты поварбанка, да и так уже с полного заряда всего лишь 2 часа съёмки набирается. Поэтому фотографии с этой камеры будут уже после возвращения из очередной поездки.

Внутри дома снимает она вот так:


Видны характерные для камер на видиконах «хвосты» от светлых предметов, которые можно заметить в старых телепередачах, например, на бокалах или духовых музыкальных инструментах.

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

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

Проверить это получится уже потом, когда я соберу по-нормальному кабель питания, и вытащу эту камеру на прогулку — если не отвалится спина и плечи, ведь она тяжелее предыдущей раза в два. Но об этом вы уже узнаете среди тонн фоток еды, Мику, и всякого древнего железного барахла, в моём Телеграм-канале :-)

Показать полностью 23 2
42

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него

Автор: TilekSamiev

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него Новости игрового мира, Тетрис, Алексей Пажитнов, Timeweb, NES, Длиннопост, Reddit (ссылка)

Тетрис — одна из самых (если не самая!) известных видеоигр, чьё имя известно даже людям, бесконечно далёким от этой индустрии. Когда в 1989 году «Тетрис» вышел на Nintendo Game Boy, он стал мировым хитом, продавшись миллионами копий и зарекомендовав себя как самая любимая в мире видеоигра-головоломка.

Для старинной видеоигры, которая начиналась как любительский проект компьютерного разработчика из СССР, влияние «Тетриса» по-прежнему сильно, доказательством чему служит огромная база игроков, по сей день пытающихся полностью пройти игру. Его успех также породил желание создать продолжение. Появились побочные продукты: такие как Hatris, Welltris и Wordtris, а также итеративные продолжения, такие как Tetris 2, Tetris DS и Tetris Effect. Но у игры могло бы быть ещё одно продолжение, которое так и не вышло. Сам создатель Тетриса, Алексей Пажитнов, придумал другую, более интеллектуальную версию игры.

На Game Developers Conference (GDC) 2024 Алексей Пажитнов рассказал о своих первоначальных планах по выпуску продолжения «Тетриса» и о том, почему мы только сейчас слышим об этом публично. Это запланированное продолжение, получившее название Tetris Reversed, было призвано изменить способ игры в тетрис. Но сиквел игры уже более десяти лет находится на стадии прототипа.

❯ Создание прототипа


Нет особого смысла приводить здесь историю Алексея Пажитнова и создания им оригинальной игры. При желании эту информацию можно найти в Википедии. Даже фильм сняли про это, многое конечно приукрасили (Голливуд же), но тем не менее. Можно упомянуть, что Пажитнов живет в США с 1991 года, где он участвовал в разработке таких игр, как Pandora’s Box, и работал с такими компаниями, как Microsoft и WildSnake Software. Помимо «Тетрис», он является автором таких игр, как Hatris, El-Fish и Hexic, а также многих других, которые углубили и расширили игровой дизайн. В 2007 году он был удостоен First Penguin Award на церемонии вручения наград Game Developers Choice Awards за прорыв в мире игр.

История продолжения Тетриса началась, когда хорватский разработчик Ведран Кланач посетил фестиваль игр NLGD в Нидерландах в 2011 году. Там Ведран разговорился с Мартином де Рондом из Guerrilla Games. Де Ронд заявил, что у него есть договоренность с Пажитновым о создании прототипа совершенно новой игры «Тетрис». Кланач естественно ухватился за возможность поработать с такой легендарной фигурой.

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него Новости игрового мира, Тетрис, Алексей Пажитнов, Timeweb, NES, Длиннопост, Reddit (ссылка)

Алексей Пажитнов и Ведран Кланач

Пажитнов придумал альтернативную версию игры под названием Tetris Reversed, в которой правила аналогичны обычному тетрису — игроки управляют падающими блоками, перемещая, вращая и размещая их, однако блоки падают перед цветными фоновыми пространствами, которые игрок пытается очистить. Т.е. тетрамино (блоки тетриса) использовались для устранения стены блоков, а не для складывания их друг в друга. Название «Reversed» происходит от того факта, что заполненные и пустые места могут меняться местами, инвертируя игровое поле. Примерный принцип игры можно посмотреть на Реддите, где три года назад уже сделали подобный реверсивный Тетрис.

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него Новости игрового мира, Тетрис, Алексей Пажитнов, Timeweb, NES, Длиннопост, Reddit (ссылка)

Де Ронд был посредником между Пажитновым и Кланачем – эти двое впервые лично встретились только в 2024 году. Де Ронд передавал инструкции по проектированию от Пажитнова Кланачу, который в свободное время создавал код игры на своем собственном движке. Кланач ныне является генеральным директором компании Ocean Media. Он был аэрокосмическим инженером, который начал свою карьеру в компании Croteam, где создал игровой движок для Serious Sam 2. За последние 20 лет он, в качестве программиста и исполнительного продюсера, поучаствовал в производстве более чем в 200 проектов.

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него Новости игрового мира, Тетрис, Алексей Пажитнов, Timeweb, NES, Длиннопост, Reddit (ссылка)

Основная часть работ по разработке Tetris Reversed была проведена в период с марта по ноябрь 2012 года. Однако к концу года проект выдохся. Прошло три года, а дальнейшего развития не последовало, что заставило самого Пажитнова предположить, что проект фактически мёртв, а прототип игры утерян.

Идея игры возникла вновь только в 2017 году, когда Кланач рассказал о ней Владу Мику, специалисту по развитию бизнеса. Мику решил лично познакомить Пажитнова с Кланачем, когда он и Кланач ужинали в апреле 2023 года вместе с Кейт Эдвардс, генеральным директором Geogrify и говорили о фильме «Тетрис». Тогда Кланач упомянул, что в его личных архивах в компьютерных файлах старого ПК с Windows 7 до сих пор хранится прототип игры под названием Tetris Reversed.

В 2024 году Влад Мику свел Пажитнова и Кланача на GDC 2024. Результатом стала специальная комиссия, в которую вошли Кейт Эдвардс, Влад Мику, Алексей Пажитнов и Ведран Кланач – четыре ключевые фигуры в возрождении прототипа.

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него Новости игрового мира, Тетрис, Алексей Пажитнов, Timeweb, NES, Длиннопост, Reddit (ссылка)

Кейт Эдвардс, Влад Мику, Ведран Кланач и Алексей Пажитнов

Пажитнов, который почти забыл о существовании прототипа, приветствовал возрождение игры. Он сказал, что это Tetris для людей с IQ 300. В оригинальной игре игрок сосредоточен лишь на части экрана: появляется блочок, который нужно куда-то перетащить и разместить. Теперь же игроку придется использовать всё игровое поле на экране сразу. По словам разработчиков, это приближает Tetris Reversed к настольным играм, вдохновившим оригинал. В отличие от оригинального тетриса, в который можно играть в течение длительного времени, Reversed был разработан для более коротких сессий, некоторые из которых длились до десяти минут. Основываясь на уровнях и выборе, Пажитнов заявил, что на некоторых уровнях выиграть может быть «абсолютно невозможно» в зависимости от того, как были установлены фоновые блоки.

❯ Тетрис наоборот

Основная механика игры, описанная и изображенная на фотографиях слайдов, такова:

Поле игры:

  • Пользователь имеет игровое поле, состоящее из сетки из 10 столбцов на 20 строк.

  • Каждый квадрат имеет два состояния: полный (серый) или пустой (чёрный).

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него Новости игрового мира, Тетрис, Алексей Пажитнов, Timeweb, NES, Длиннопост, Reddit (ссылка)

Игровой раунд

Каждый игровой раунд начинается с появления фигуры на игровом поле. Игрок может выполнить одно из двух действий:

  • Разместить фигуру на поле;

  • Инвертировать поле.

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него Новости игрового мира, Тетрис, Алексей Пажитнов, Timeweb, NES, Длиннопост, Reddit (ссылка)

Существуют также две добавленные механики:

Неразмещаемая клетка:

  • Неразмещаемая клетка – это клетка, на которую нельзя поставить фигуру.

  • Заполненная неразмещаемая клетка представлена заполненным квадратом со значком желтого шара.

  • Пустая неразмещаемая клетка представлена пустым квадратом со значком чёрного шара.


Клетка инвертирования поля:

  • Клетка инвертирования поля представлена значком молнии.

  • Если фигура помещена на клетку «Инвертировать поле», игрок получает +1 действие «Инвертировать поле» для дальнейшего использования.

❯ Будет ли официальный релиз Tetris Reversed?


Как говорит Алексей Пажитнов, он и Кланач выполнили свою работу:

«Я завершил концепцию, развитие, идеи и всё, что есть в Tetris Reversed. Это было на предварительном этапе, и с этим прототипом мы были готовы начать производство. Но в данном случае производство так и не началось, поэтому нам пришлось ждать следующего этапа, чего так и не произошло, потому что доводить его до конца — не наша работа. В то время у Мартина де Ронда было слишком много дел, поэтому он отложил этот этап производства, вероятно, потому, что у него были проблемы с The Tetris Company и получением разрешения на продолжение работы над этой версией игры. Он закрыл для себя это дело и пошел дальше, и именно поэтому Tetris Reversed так и не был выпущен».

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него Новости игрового мира, Тетрис, Алексей Пажитнов, Timeweb, NES, Длиннопост, Reddit (ссылка)

Пажитнов и Кланач заявили, что запланированная игра имеет потенциал, и надеются когда-нибудь вернуться к ней, при условии, что им удастся найти заинтересованных в ней инвесторов и издателей. А в последние годы наблюдается большой интерес к отменённым и устаревшим концепциям игр, и Tetris Reversed — это действительно интригующий взгляд на альтернативную версию Тетриса.

Есть много примеров, когда отменённые проекты видеоигр набирали обороты и выпускались спустя годы после цикла их разработки. Для компании Tetris же оригинальная игра по-прежнему является дойной коровой, и по каким-то неведомым причинам они, почему-то, не смогли найти подходящую возможность для Tetris Reversed.

Увидим ли мы когда-нибудь, как Tetris Reversed будет выпущен как эксклюзив для Nintendo Switch 2? Возможно. А в это время в Интернете уже можно найти и скачать бесплатные неофициальные игры под названием Tetris Reversed. Некоторые загружают на Гитхаб код собственной версии Tetris Reversed.

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

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него Новости игрового мира, Тетрис, Алексей Пажитнов, Timeweb, NES, Длиннопост, Reddit (ссылка)

Даже за последние несколько месяцев спидранеры несколько раз превосходили рекорд версии для NES. После того как в январе 2024 года Уиллис «Blue Scuti» Гибсон стал первым человеком, который полностью прошёл игру, другой игрок – Энди «P1xelAndy» Артиага – в феврале набрал 8 952 432 очка, побив рекорд Гибсона. Всего несколько недель спустя Алекс Тач почти удвоил рекорд Артиаги, набрав 16 248 080 очков, выиграв 2600 долларов и став первым человеком, преодолевшим отметку в 10 миллионов очков.

Однако так называемая “последняя задача” — прохождение уровня 255 и перезагрузка игры — остается непобеждённой. Может у вас получится?

  • Написано специально для Timeweb Cloud и читателей Пикабу. Подписывайтесь на наш блог, чтобы не пропустить новые интересные статьи.

  • Облачные сервисы Timeweb Cloud — это реферальная ссылка, которая может помочь поддержать наши проекты.

Показать полностью 8
121

Сборка MS-DOS 4.0

Автор текста: dlinyj

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

Совсем недавно появилась следующая новость: На GitHub опубликован исходный код MS-DOS 4.00 под лицензией MIT. Раз появились исходные коды, стало сразу интересно: а можно ли собрать эту операционную систему?

Задача оказалась нетривиальной и совсем неочевидной. Оказывается, что исходные файлы DOS не так-то уж и легко переносятся в git, и уж как минимум, не как текстовые файлы в кодировке UTF-8. Но, к счастью, в отличие от утечек исходников MS-DOS 6.0, здесь имеется полный комплект файлов и инструментов, достаточный для корректной сборки и тестирования. Остались сущие нюансы, которые попили много крови.

Поэтому я, как и многие — начал свои эксперименты по сборке MS-DOS 4.0, с исправлением ошибок, а также возможностью исследования исходных кодов и тестирования их на реальном железе.

В статье же изложено краткое руководство по сборке и созданию загрузочной дискетки.

❯ Инструментарий


Собирать всё буду в Linux Mint (читай Ubuntu). Средой DOS для сборки выбрал dosbox, к сожалению, это не самый лучший вариант, потому что там идёт замедление частоты (чтобы старые программы корректно работали), поэтому сборка идёт достаточно долго. Лучше всего использовать любой удобный DOS, запущенный в виртуальной машине.

Для создания загрузочной дискеты и тестирования полученной сборки буду задействовать виртуальную машину qemu. А чтобы получить дискеты с готовым образом, я буду использовать установочную дискету MS-DOS 4.0 (найденную тут см. 4.00 OEM [Sampo]).

Прежде чем пойдём дальше — важное замечание:

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

❯ В чём сложности сборки?


Проблемы две:

  1. Некорректная инициализация переменных среды (в самом bat-файле SETENV.BAT содержится ошибки или опечатки).

  2. Проблемы с кодировкой при переносе кода с дискеток DOS в GIT с кодировкой UTF-8.


Первая проблема легко исправляется даже самостоятельно, при беглом анализе исходного кода. Она легко вскрывается при сборке, дальше просто необходимо внести правки, либо создать свой обновлённый bat-файл, который будет инициализировать переменные среды окружения.

Значительно сложнее обстоят дела с тем, что в части кода, при переносе в UTF-8, побились некоторые символы. У меня была попытка сборки, которую я описывал у себя в ЖЖ, и, в конце концов, я получил вот это:

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

Это достаточно частая и болезненная проблема со старыми исходниками времён DOS. С аналогичной задачей я столкнулся и при попытке собрать программу RAM View. Об этом пути и исправлении проблемы, я подробно написал в статье Правка чужого кода.

Здесь же мы исключим ручной труд и автоматизируем исправление проблем с кодировками.

❯ Подготовительные операции перед сборкой


Итак, шаги по сборке ДОС. Клонируем оригинальный репозиторий:

git clone https://github.com/microsoft/MS-DOS.git

Исправляем проблемы с кодировками:

sed -i -re 's/\xEF\xBF\xBD|\xC4\xBF|\xC4\xB4/#/g' MS-DOS/v4.0/src/MAPPER/GETMSG.ASM
sed -i -re 's/\xEF\xBF\xBD|\xC4\xBF|\xC4\xB4/#/g' MS-DOS/v4.0/src/SELECT/SELECT2.ASM
sed -i -re 's/\xEF\xBF\xBD|\xC4\xBF|\xC4\xB4/#/g' MS-DOS/v4.0/src/SELECT/USA.INF

Переходим в рабочую папку:

cd MS-DOS/v4.0

Перекодируем все текстовые файлы в формат MS-DOS:

find -iname '*.bat' -o -iname '*.asm' -o -iname '*.skl' -o -iname 'zero.dat' -o -iname 'locscr' | xargs unix2dos -f
find -iname '*.BAT' -o -iname '*.ASM' -o -iname '*.SKL' -o -iname 'ZERO.DAT' -o -iname 'LOCSCR' | xargs unix2dos -f


и создаём там обновлённый бат-файл для переменных среды окружения, следующего содержания:

$ cat src/e.bat
@Echo off
echo setting up system to build the MS-DOS 4.01 SOURCE BAK...
set CL=
set LINK=
set MASM=
set COUNTRY=usa-ms
set BAKROOT=e:
rem BAKROOT points to the home drive/directory of the sources.
set LIB=%BAKROOT%\src\tools\bld\lib
set INIT=%BAKROOT%\src\tools
set INCLUDE=%BAKROOT%\src\tools\bld\inc
set PATH=%BAKROOT%\src\tools;%PATH%

В принципе этих операций достаточно для сборки, а то что ниже — это лично моё хулиганство, чтобы продемонстрировать, что DOS в действительности собрался, и нет подмены файлов. Я заменяю компанию Microsoft своим ником:

find -name "*.ASM" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.INC" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.H" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.MAC" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.MSG" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.C" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.CLB" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.SKL" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +

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

❯ Сборка


Собирать буду в dosbox, как показала практика — это не самое лучшее решение, сборка занимает около часа, что, мягко скажем, раздражает.

Запускаю dosbox:

dosbox

Далее в нём монтирую текущую директорию как диск E.

mount e: ./

И переходим на диск e, запускаем в dosbox бат-файл, который инициализирует среду окружения, и начинаем сборку:

e:
cd SRC
e.bat

и запускаем сборку командой nmake:

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

Если вы делаете это в dosbox, то можно пойти погулять. Окончанием сборки будет выглядеть следующим образом:

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

После этого надо скопировать все собранные файлы в один каталог. Создаём каталог «4» в корне диска и копируем все бинарники специальным скриптом:

mkdir \4
CPY.BAT \4


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

ver set 4.0

После переходим в каталог\4и можно выполнить в нёмcommand.com:

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

Хулиганство сработало, ДОС собрался и прикидывается, будто бы я его разработал. Дело стало за малым — протестировать это на реальном железе.

❯ Создание загрузочной дискетки


Дальше я думал просто примонтировать в dosbox пустой образ дискетки, и прямо из собранных файлов выполнить перенос системных файлов командой:

sys <path> a:

Но, факир был пьян, и фокус не удался. Поэтому решил MBR (Master Boot Record) позаимствовать с загрузочной дискетки DOS 4.0. К сожалению, MBR от MS-DOS 6.22 у меня не заработал.

Скачиваем установочные дискетки, попутно создаём пустую дискетку командой:

truncate --size 1474560 fdd.img

Загружаемся с установочной дискетки и ставим наш пустой образ 1,44 МБ дискетки в дисковод B, с помощью qemu:

qemu-system-i386 -fda Disk01.img -fdb fdd.img

Отменяем установку и форматируем дискету с переносом системных файлов:

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

По окончании можно закрывать окно qemu. Возвращаемся к окну с dosbox и монтируем полученный образ дискетки, с помощью следующей команды:

imgmount a: <path to fdd.img> -t floppy

И потом просто вручную переносим файлы COMMAND.COM, IO.SYS и MSDOS.SYS на дискету:

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

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

Для запуска в qemu следует использовать следующую команду:

qemu-system-i386 -fda fdd.img

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

Записать на дискетку можно командой dd, я использую USB-FDD дисковод.

sudo dd if=fdd.img of=/dev/sdk status=progress

И, да! Эта система успешно работает на реальном железе. В данном случае проверка идёт на 386 компьютере.

❯ Выводы

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

Запуск свежесобранного MS-DOS 4.0 на реальном железе

Не буду лукавить, сборка MS-DOS 4.0 оказалась не столь простой. Пришлось посмотреть некоторые видео, пошерстить различные репозитории. Но всё же это прекрасный опыт, который позволяет заглянуть внутрь исторических исходников и покопаться в них.

Давняя утечка MS-DOS 6.0 была неполной, и собрать его не представлялось возможным. А теперь у исследователей есть готовый инструментарий, для того чтобы попрактиковаться в разработки каких-то своих модулей старой операционной системы.

Конечно же, я по-настоящему жду, когда же обнародуют исходники MS-DOS 6.22, так как ещё надеюсь увидеть их на своём веку.

Удачи вам в ваших экспериментах!

❯ Полезные ссылки:

  1. Исходные коды MS-DOS от Microsoft

  2. Пример сборки MS-DOS 4.0 во FreeDOS (видео)

  3. Compiling MS-DOS 4.0 from DOS 4.0, on a PS/2!

  • Написано специально для Timeweb Cloud и читателей Пикабу. Подписывайтесь на наш блог, чтобы не пропустить новые интересные статьи.

  • Облачные сервисы Timeweb Cloud — это реферальная ссылка, которая может помочь поддержать наши проекты.

Показать полностью 9
Отличная работа, все прочитано!