программирование

программирование

216
1035
Даров реактор. По тихонечку на вайбкодил себе приложение для просмотра китайских порномультиков.
Так как по старым дедовским замашкам привык пользоваться трекерами типа MAL Updater, а потом Taiga.
Была идея написать что-то своё которое бы крутилось в фоне и соответствовало своим хотелкам.
Первое возможность зеркалировать изменения на популярные трекеры: мал может лежать, анилист вызывает восхищение но кто его знает, шики находится в суперпозиции постоянно.
Простая идея в том что мы просто тупо зеркалируем измнения сразу ещё на 2 сервиса и решаем проблемы когда МАЛ/ШИКИ/АНИЛИСТ режит пол года.
Картинки с плиточками. Основной тейк в том что не надо держать в уме когда там серия вышла и что смотреть всё и так визуально понятно.
В последнем апдейте прикрутил к торрентам торрсервер (вроде работает очень адекватно), теперь серии от тех же кранчей и качать не нужно нажал смотреть и закрыл.
Есть некая реализация плеера mpv, основной задачей было прикрутить мало мальский гуй что бы пользоваться было удобно
Есть автотрекер который понимает что играет и отмечает. Относительно отлажено понимание что играет.
Ну и если встроенный плеер в том или ином виде не нравится отслеживание стороннего плеера можно включить в настройках.
В одном из последних апдейтов добавилась хронология франшизы можно в порядке выхода глянуть что к чему.
На основе него есть удобный сезонник в котором не надо будет гадать что ты дропал второй сезон какого-то исекая либо просто тупо скрыть его со списка.
Что-то наверное ещё есть о чём я забыл...
В целом делалось для себя и стянуть или даже собрать можете тут:
https://github.com/Donate684/Kiriha/releases (тут вирусы, приложение при установке качает Max)
Офк есть баги и недоработки, старый кривой UI и код ещё нулевых сборок или идеи до которых головушка ещё не дошла, но ты можешь сообщить о них тут. Когда нибудь поправится.

Управляем шторой через ПЛИС за $1.44 (или даже за $0.43)

В комментариях к предыдущей статье один уважаемый пидор воскликнул: «Как можно управлять какой‑то шторой аж на целом ПЛИС?!»
Почему‑то всякий раз, когда речь заходит о ПЛИС, в воображении тех, кто что‑либо слышал о них, рисуется нечто уровня Stratix‑10 стоимостью с половину квартиры (это не шутка, именно эта микросхема стоит почти $20k за единицу).
Однако ПЛИСы гораздо доступней, чем кажется. Именно поэтому сегодня мы поиграем со шторой Джойреактора при помощи ПЛИС стоимостью в полтора‑два доллара. Замечательным плюсом будет тот факт, что данные ПЛИСы можно будет программировать графически, рисуя мышкой схему!
Но сперва нам нужно вспомнить, как управлять обмотками двигателя при помощи базовых элементов цифровой логики. Двигатель имеет четыре входа, усиленных драйвером ULN2003A и чтобы он крутился, по этим входам должна пробегать пара логических единиц.
Это можно сделать при помощи цепочки из четырёх D‑триггеров (в два из которых мы загрузим лог.1, в другие два — лог.0):
При каждом «щелчке» по линии тактирования, D‑триггер запоминает значение, которое находилось у него на входе D и начинает его выдавать на выход Q. Иными словами, в цепочке из D‑триггеров каждый триггер передаст своё значение следующему.
Но наш двигатель должен вращаться в обе стороны. Можно ли соединить линии так, чтобы при «щелчке» (восходящем фронте, изменении с лог.0 на лог.1) по линии тактирования триггеры передали бы значения в обратную сторону? Ну, как бы, да:
А можем ли мы сделать так, чтобы у нас был выбор в какую сторону вращать биты внутри цепочки? Да, можем. Но для этого нам нужно такое устройство как мультиплексор:
Мультиплексоры работают так:
- на их информационные входы подают различные данные;
- на их управляющие входы подают двоичный код, выбирающие номер канала;
- а на выходе мультиплексоры выдают данные только с выбранного канала;
Мультиплексоры бывают различной разрядности, но нам сейчас будет нужны будут самые маленькие мультиплексоры:
Здесь изображён одни‑единственный блок, который будет повторён несколько раз. Если нарисовать все блоки, будет просто «макаронная фабрика» из связей, поэтому пока так
Логика обработки переключателя и концевиков прежняя:
- в промежуточном положении штора уже вышла из нижнего концевика (он выдаёт лог.0), но пока ещё не вышла из верхнего концевика (он выдаёт лог.1)
- если переключатель нажат в положение «вверх» и верхний концевик всё ещё выдаёт лог.1, то нужно крутить двигатель вверх;
- если переключатель нажат в положение «вниз» и нижний концевик всё ещё выдаёт лог.0, то нужно крутить двигатель вниз;
Теперь нужно:
- найти где‑нибудь источник тактового сигнала;
- собрать схему, выключающую его, если сигнал RUN в лог.0;
- подать тактирование на цепочку D‑триггеров (она в электронике называется «регистр»);
- подать сигнал направления вращения DIR (direction) на мультиплексоры при D‑триггерах;
- подать сигналы D‑триггеров на выход микросхемы и далее на драйвер двигателя ULN2003A;
Теперь возьмём SGL46826G — ПЛИС в корпусе TSSOP‑20 от компании Renesas — и создадим в визуальной среде разработки GreenPAK Designer простой проект:
- назначаем микросхеме вход на контакт №1 и два выхода на контакты №18 и №19;
- добавляем схеме источник внутреннего тактирования OSC2;
- добавляем один логический элемент LUT0;
- выбираем в его свойствах стандартный логический элемент AND (лог.И), наш LUT0 превращается из безликого прямоугольника в самый настоящий AND;
- соединяем всё связями как показано на рисунке;
Прошиваем нашу микросхему при помощи GreepPAK Serial Debugger, подключаем кнопку ко входу, а также щупы осциллографа к выходам и видим как всё запустилось:
Первый канал осциллографа — источник тактирования, отключаемый входом №1;
Второй канал осциллографа — вход №1, проброшенный сквозь ПЛИС на выход №19
Дорисуем чёртову сову!
Четыре входа, четыре выхода и всё то, о чём мы говорили до этого:
Работает!
,flammmable,geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор,электроника,ПЛИС,программирование,прикольные гаджеты,инкапсуляция и полиморфизм,длиннопост
Но есть проблема: хотя у SLG46826G приятный для пайки корпус и достаточно обширная аналого‑цифровая начинка, это не самая дешёвая из ПЛИСов Renesas.
На Mouser Electronics за штуку она стоит $2.13. Так как я брал сразу 25 штук, мне они достались по цене $1.44.
Но это всё ещё кратно дороже, чем ПЛИС SLG46110V, которая стоит $0.64 за 1 штуку или $0.43 (!) за 25 штук.
В предыдущей статье один уважаемый пидор возмутился использованием 1,2ГГц‑ового процессора Raspberry Pi для управления шторой и посоветовал использовать ATtinny.
Так вот, SLG46110V дешевле самого дешёвого ATtinny, у котрого есть пины для 4 входов и 4 выходов:
У SLG46110V помимо питания и земли есть восемь выводов, что как раз необходимо и достаточно для управления шторой. Но напрямую перенести логику из SLG46826G не получится — логических элементов маловато. Однако сейчас мы сделаем ряд таких улучшений нашего проекта, что в SLG46110V даже останутся лишние элементы!
Сначала поместим всю логику обработки переключателя и концевиков в один 4‑входовый LUT.
Суть вот в чём. Мультиплексоры, о которых мы говорили ранее, могут быть не только элементами, маршрутизирующими сигнал. Они могут стать универсальным логическим элементом, если поменять управляющие и информационные входы местами!
Есть у вас, допустим 4 входных цифровых сигнала, в соответствии с которыми выход элемента должен принимать то или иное значение. Сколько всего комбинаций этих сигналов может быть? Ну, если чуть‑чуть подумать, то 24, то есть 16 вариантов.
Что если мы возьмём 16‑канальный мультиплексор (у которого 4 линии управления),
все 4 цифровых сигнала заведём на 4 линии управления,
а на каждом канале жёстко выставим либо лог.0, либо лог.1, в зависимости от того какое значение нам нужно при каждой конкретной комбинации?
Такое устройство реализует всю необходимую нам логику!
Мультиплексор, реализующий выдачу сигнала RUN по состоянию концевиков и переключателя
Кажется расточительством использовать для такой предпосчтанной логики целый мультиплексор. Но прелесть в том, что если мы хорошо научились делать эти мультиплексоры, делаем их много и дёшево, то мы можем уже не заморачиваться на тему, как же нам соединить И, ИЛИ, НЕ и где достать ИСКЛ.ИЛИ‑НЕ.
Далее. Линия A, входящая в драйвер двигателя всегда инвертирована относительно линии C. Точно также инвертирована и B относительно D.
То есть нам достаточно наличия корректных сигналов по линиям A и B, а оставшиеся сигналы мы получим при помощи пары лог.НЕ.
Линии A и B смещены друг относительно друга на ¼ периода. При вращении в одну сторону, фронт по линии B запаздывает относительно A, при вращении в другую — опережает. Как из запаздывания на −¼ периода сделать опережение на +¼ периода? Прибавкой ½ периода, или… инверсией! То есть нам достаточно обеспечить смещение A относительно B на ¼ периода, а уж в какую сторону — это мы отрегулируем элементом лог.НЕ и чем‑нибудь вроде мультиплексора (на самом деле, элементом ИСКЛ.ИЛИ‑НЕ, если расписать его таблицу истинности).
Представим, что у нас есть некий базовый тактовый сигнал с заполнением 50%. Как сделать из него сигнал, смещённый на ¼ периода?
Ну, если у нас был бы дополнительный высокоскоростной тактовый сигнал, и сигнал выдающий короткий импульс в начале каждого периода базового сигнала, то мы могли бы по этому импульсу запускать два счётчика.
Один отсчитывал бы ¼ периода, другой ¾. А выходы с этих счётчиков можно объединить через элемент NXOR (ИСКЛ.ИЛИ‑НЕ). Он равен единице только тогда, когда его входы не равны между собой.
Это кажется невероятным, но у SLG46110V есть два встроенных счётчика, а также внутренний источник тактового сигнала с двумя выходами, в один из которых можно пустить тактовый сигнал в неизменном виде, а в другой — поделив его, например на 64.
Кстати, у этого источника есть вход‑выключатель, так что сигнал RUN от 4‑входового LUT‑а можно завести прямо туда, сэкономив лог.И.
Реальной SLG46110V у меня нет, но GreenPAK Designer имеет достаточно неплохие инструменты для симуляции.
Собираем схему:
Задаём входные сигналы, типа:
- переключатель нажимают вверх, штора поднимается;
- через некоторое время срабатывает верхний концевик;
- переключатель отпускают;
- затем переключатель нажимают вниз, штора опускается;
- почти сразу верхний концевик отпускается;
- через некоторое время штора наезжает на нижний концевик
Проводим симуляцию.
Вот так очерёдность сигналов на двигатель при вращении вверх и вниз:
------

Управляем шторой через Raspberry Pi

Несмотря на то, что программирование для автоматизации существенно упрощается при использовании, например, графического языка LabVIEW, отдельные уважаемые пидоры задались вопросом в предыдущей статье: зачем вообще в эпоху ИИ программировать самому — хоть на Си, хоть на LabVIEW?
Хороший вопрос. Именно поэтому сегодня мы завайбкодим управление шторой на Python. А в качестве платформы используем хакерский девайс: одноплатный компьютер Raspberry Pi на базе процессора Cortex‑A53 с частотой 1,2 ГГц.
Элиот Алдерсон из «Мистера Робота» хакает ЦОД Steel Mountain при помощи Raspberry Pi
Для свежей Raspberry Pi вам потребуется чистая SD‑карточка. Подключаете её к компьютеру, скачиваете Raspberry Pi Imager с официального сайта и устанавливаете его, находите своё устройство и далее, следуя указаниям устанавливаете на карточку операционную систему Raspberi Pi OS.
,flammmable,geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор,электроника,Raspberry PI,программирование,прикольные гаджеты,инкапсуляция и полиморфизм
После установки неплохо было бы проверить базовую работоспособность и настройку нашей платформы. Поэтому откроем Cloud и вбиваем такой промт:
Напиши код на Python для Paspberry Pi 3 для мигания светодиодом, подключённым к штыревому разъёму.
Копируем код, вставляем в свежесозданный файл led_blink.py и запускаем его на Raspberry.
,flammmable,geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор,электроника,Raspberry PI,программирование,прикольные гаджеты,инкапсуляция и полиморфизм
Работает? Отлично, дальше пишем подробненький промт про штору:
Выделяем код, который написал Cloud:
Копируем, вставляем.
Готово!
,flammmable,geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор,электроника,Raspberry PI,программирование,прикольные гаджеты,инкапсуляция и полиморфизм
Есть, правда, один момент, который меня беспокоит.
Зачастую, слова, которые говорят люди обозначают не совсем то, чем кажутся. Более того, при буквальном прочтении оказывается, что слова эти заметно противоречат друг другу.
Например, когда, условно, говорится, что:
«Raspberry лучше, чем Arduino потому, что
- Raspberry работает на частоте 1200 МГц, против 16 МГц у Arduino;
- У Raspberry есть встроенный Python;
- И потому на Raspberry можно вайбкодить
».
Проблема этого высказывания в том, что его первый пункт уничтожается вторым, а второй — третьим.
Смотрите, вот так выглядит на Raspberry выполнение следующего кода:
Raspberry Pi, работающий на 1200 МГц изо всех сил мигает пином с частотой 7,1 кГц
А вот так выглядит выполнение аналогичного кода на Arduino:
Arduino, работающий на 16 МГц не напрягаясь мигает пином с частотой 147,2 кГц
Почему частота работы Raspberry на два порядка превосходит частоту работы Arduino,
а скорость выполнения команд на Raspberry примерно на два порядка уступает тому же Arduino?
Ну, потому, что Python — интерпретируемый язык программирования. В отличие от компилируемого Си, на котором программируют Arduino. Из 1200 МГц у Raspberry 1199,8 МГц уходит на безостановочный парсинг питоновской текстовки.
«Не-не, но, нет! Но подождите! Но позвольте! Есть же библиотеки! Всё самое тяжеловесное оптимизировано в них! Есть же периферия! Аппаратные таймеры, аппаратные SPI, UART и прочая! Есть же в конце‑концов JIT‑компиляция, заметно ускоряющая выполнение кода на Python» — можно услышать в ответ.
Я же отвечу, что оптимизированные библиотеки писаны далеко не на Python, аппаратные таймеры есть и у ATmega328P в Arduino, а JIT‑компиляция даёт по яйцам переносимости кода, которой кичится сообщество питонщиков.
То есть возникает вопрос: какой смысл, какая выгода в интерпретируемом языке, когда вы делаете его компилируемым, а всё тяжёлое перекладываете на иноязычные библиотеки и аппаратную часть?
Тут произносится волшебное слово «Интеграция». Типа, сложный и запутанный Си — сложен и запутан. А вот человекочитаемый Python, а также его обширное, тёплое комьюнити и экосистема позволяют легко программировать даже новичку. В результате пускай и медленный, но очень дружелюбный Python как бы склеивает между собой все те куски нечеловеческой мощи, что могут крутиться на 1,2 ГГц у Raspberry.
Данный довод можно было бы принять, если бы не… ИИ.
Существует слабый и сильный сценарий использования ИИ для программирования.
В слабом сценарии ИИ по промту пишет код, а программист проводит ревью этого кода: читает получившееся глазками.
В сильном сценарии один ИИ по промту пишет код, другой ИИ по промту пишет тесты. Тесты должны проходить ревью, а код — тесты. При этом код получается чёрным ящиком: Функционал выполняется? Ну и славно! Глазами мы всё равно ничего не сможем/не успеем к релизу разобрать в коде.
Но если в эпоху ИИ код становится чёрным ящиком — какая разница на чём он написан? Если сама логика кода не предполагает человекочитаемость, какой плюс того, что сам код будет написан на дружелюбном к непрофессионалу языке? Если же разницы нет, возникает крамольный вопрос: насколько распространены ситуации, когда даже без учёта цены Arduino оказывается лучше, чем Raspberry Pi?
------
Oknesif
Oknesif
6 д.

Наконец-то гимн современной разработке подъехал

OP-01
OP-01
1 нед.

Умерла пионер программирования Маргарет Гамильтон

Умерла пионер компьютерных технологий Маргарет Гамильтон, которая возглавляла разработку программного обеспечения для лунной миссии Apollo 11. Ей было 90 лет. О смерти Гамильтон, наступившей 30 сентября, сообщает The Guardian со ссылкой на Массачусетский технологический институт.
Гамильтон рядом с распечатками текста программы, которую она и её команда в MIT создали для миссии «Аполлон-11» (1969)
Гамильтон научилась программировать под руководством известного метеоролога Массачусетского технологического института. Позднее в лаборатории института она писала программное обеспечение, способное обнаруживать вражеские самолеты.
Когда институт получил контракт NASA на создание бортового программного обеспечения для программы Apollo, она присоединилась к проекту. В 2019 году Гамильтон рассказывала The Guardian, что была первой программисткой, присоединившейся к команде, а также первой женщиной, нанятой для этой работы.
В 1969 году, за несколько минут до исторической посадки Apollo 11 на поверхность Луны, бортовой компьютер подал сигнал тревоги. Возник вопрос, следует ли прерывать миссию, однако полет продолжили.
По словам Гамильтон, программное обеспечение не только сигнализировало о проблеме, связанной с оборудованием, но и компенсировало ее: перезапускало работу и возобновляло выполнение задач с наивысшим приоритетом. В 2016 году президент США Барак Обама, вручая Гамильтон Президентскую медаль Свободы, упомянул этот эпизод.
По данным Массачусетского технологического института, у Гамильтон остались дочь, зять, двое внуков и четверо правнуков.

Отличный комментарий!

Большое человеческоe F
Здесь мы собираем самые интересные картинки, арты, комиксы, мемасики по теме программирование (+1035 постов - программирование)