Кодерская мастерская
137 subscribers
1 photo
14 files
39 links
Блог Данила Пылаева
Download Telegram
Кодерская мастерская
Теперь нужно перезагрузить сервер в установщик, и если там вдруг не UEFI, вероятно ничего не получится, и потребуется физический доступ. Однако 2025 год на дворе, и UEFI достаточно давно и достаточно много где, как минимум на арендуемых серваках. Поэтому выполняем…
Если планируете ставить ubuntu ниже 24, или просто для перестраховки, можно добавить network-config для usb-устройства, иначе cloudinit проигнорирует сетевой интерфейс.
Почему-то из файла он загружать его не захотел, но загрузил из параметра ядра, выглядит это так:

ds=nocloud\;s=/cdrom/nocloud/ network-config=H4sIAIxzLGgC/5XLOwqAMBAE0F7IHaYOpBGr3CbGgRV0lWS18PSKWthazuftLHVcNKJ1DU1YlFaja4DjCGmaAvVOwCB57SKsbHyKOVmWdwQ0zYyg+q81+YVNvnqr/R993f0JKz7GMs4AAAA=


network-config в данном случае - это конфиг в yaml формате, пожатый с помощью gzip и закодированный в base64, исходный конфиг такой:

version: 2
ethernets:
zz-all-en:
dhcp4: true
match:
name: en*
zz-all-eth:
dhcp4: true
match:
name: eth*
zz-all-usb:
dhcp4: true
match:
name: usb*


Нейминг странный, конфиг расширял на основе примера из доки, не знаю, для чего добавлять zz в начало, будто бы имя секции может быть любым.
С таким конфигом раздача завелась на 20 и 22 ubuntu, другие не пробовал.

Подключаем телефон проводом к компьютеру, на котором будем ставить систему, загружаемся с флешки, сразу включаем раздачу по usb.
В процессе загрузки телефон может периодически решать, что устройство отключилось, и раздача может прекратиться, поэтому первые секунд 20 следите за ней, и включайте заново.
Если включить её потом, cloudinit может проигнорировать новый интерфейс, поэтому лучше включать как можно раньше.
Также подключаемся к hotspot-у телефона, заходим в shell через adb.
Теперь мониторим файл /proc/net/arp
Содержимое достаточно читаемое, представляет собой arp таблицу, в ней вы в какой-то момент должны увидеть новое устройство в подсети usb-tethering-а, это и есть наша ubuntu.

Далее запускаем proxy:
/data/local/tmp/proxy tcp -p ":1234" -T tcp -P "192.168.191.188:22"


Подставьте в качестве целевого ip адрес вашей машины.
Прога поднимется, должны побежать логи.
Открываем второй терминал, в нём подключаемся по ssh, используя адрес вашего телефона и порт 1234, и да здравствует subiquity!
Теперь, главное, чтобы этот шайтан-мост не развалился в середине установки, и удачи, если решитесь повторить.

Немного о subiquity:
Буду краток, это достаточно мутная псевдографическая срань, в любой непонятной ситуации используйте горячку для просмотра текущей строки, в nvda это nvda+up, а также имейте в виду, что некоторые подменю разварачиваются как бы справа от главного меню, что добавляет немного веселья и безумия в скучный и унылый процесс установки.
Как подменю, например, открывается конфигурация разделов в конфигураторе дисков, и nvda одновременно видит куски из обоих интерфейсов, очень удобненько, всем рекомендую.
Правый и левый каналы поменялись местами в моих беспроводных наушниках.
Я не менял никаких настроек в винде, просто в какой-то момент заметил, что они поменялись, ещё 3 часа назад всё было нормально, а 5 минут назад - уже нет.
Как же я это исправил?
Выключил и включил наушники, т.е. проблема случилась где-то между usb-свистком и самими наушниками, а винда тут, скорее всего, не виновата.

#ОноСломалось
После обновления до 24h2 раз в несколько дней от проводника приходит следующее уведомление:
"При получении трассировки произошла ошибка."
Никаких проблем будто бы больше нет, но вот сегодня я решил от нефиг делать запустить стандартный механизм проверки и восстановления целостности системных файлов, он сказал, что чего-то там восстановил, и теперь у меня пропал поиск в меню пуск, а перезагружаться лень.

#ОноСломалось
👍1
Кодерская мастерская
После обновления до 24h2 раз в несколько дней от проводника приходит следующее уведомление: "При получении трассировки произошла ошибка." Никаких проблем будто бы больше нет, но вот сегодня я решил от нефиг делать запустить стандартный механизм проверки и…
Я починил пуск, было достаточно перезапустить проводник!
А потом ещё раз перезапустить.
И ещё раз.
И после трёх перезапусков проводника поиск в пуске появился.
Точно цитату не помню, но смысл примерно такой: "Безумие - это многократное повторение одного и того же действия с одним и тем же результатом, в надежде получить что-то новое".
Но в случае с виндой выходит, что клин клином вышибать приходится.
👍1
Каждый раз, когда я ставлю незнакомый софт, я на сто раз проверяю, точно ли я устанавливаю не поддельную версию. Если это приложение в google play, смотрю на кол-во оценок и скачиваний (у фейка не будет высокого рейтинга и миллионов загрузок), если ставлю пакет из пакетного менеджера, несколько раз перепроверю написание, если ставлю что-то малоизвестное, до последнего буду пытаться найти официальный сайт продукта и т.п.
Например однажды минуты на 3 залип при установке яндекс музыки, когда увидел, что её выложил не яндекс, а какой-то Direct Cursus Computer Systems Trading LLC.

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

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

Видос на англ:
https://www.youtube.com/watch?v=rUzzBY-P3HE
👍21
Юристы имеются среди подписчиков?
Заказал товар в dns с предоплатой, постомат сломался, сотрудник вскрыл ячейку вручную и выдал коробку, в системе заказ продолжает отображаться как ожидающий получения.
Если отменить, фокус сработает и деньги вернуться, то нарушу ли я закон таким образом?
Вопрос гипотетический, ибо цена эксперимента - косарь рублей, но интересно всё же.
Зашёл на gitverse, и вижу в шапке следующее:
"В 22:00 МСК будет объявлен перерыв - 15 минут. Вы отдыхаете - мы обновляем!"

И вот с одной стороны о какой конкуренции можно говорить, если у них бывают даунтаймы в принципе, а с другой стороны - github, перед тем как прилечь на часок, когда вас предупреждал об этом, а?..
👍1
Как открыть чат в последней версии telegram для Android

Если
вам сильно надо открыть чат с человеком в тг, и чата у вас с ним нет, для этого ранее использовалась кнопка в профиле.
В последней версии телеграмма доступность поломали, и кнопку скринридеры не видят.
Обходное решение следующее: в профиле открыть дополнительные действия (3 точки), там добавить ярлык чата на главный экран, выйти на главный экран и открыть чат пользуясь созданным ярлыком.
Когда что-то напишете, чат, как обычно, окажется в списке чатов, и ярлык можно будет удалить.

#A11yTricks
👍1
Forwarded from Gozaltech blog (Beqa Gozalishvili)
What's new?
Close
5.69.1
September 31, 2025
We’ve launched a new Сoncerts section. Here you’ll find live shows' announcements from artists you might like. Dates, venues, and tickets — all in one place. Come in and choose where to go next

Closer to the stage,
Yandex Music team

Это я получил в качестве changelog-а после обновления Яndex музыки.
Youtube-канал Сергея Немчинского переходит исключительно на Украинский язык.
И с одной стороны, учитывая количество поступающего в мозг контента, плюс минус одна подписка ничего не решает, но с другой стороны, когда смотришь блогера долгие годы, и когда просмотр видосиков конкретного человека или команды продолжает быть интересным всё это время, обычные видосики становятся чем-то слегка большим, чем-то родным, привычным.
Конечно печально наблюдать как человек, с вроде бы похожим складом ума, вдруг решает прекратить использовать инструмент, просто потому, что его родина - родина неприятеля.
Можно конечно начать раскрывать тему и сказать, что язык нельзя сравнивать с молотком или автоматом, что язык - это культура, обычаи, образ мышления и тому подобные вещи. Но по сути своей, на околотехническом канале русский язык выполнял роль, в первую очередь, инструмента для коммуникации блогера с аудиторией, однако мнение автора, к сожалению, оказалось иным.
Учить целый язык из-за единственного блогера - точно не то, чем мне хочется заниматься в ближайшее время, а потому минус одна подписка, ни больше, ни меньше.

PS
В целом ситуация неоднозначная, мне лично кажется, что он сам может и не против, но кто-то сильно попросил, ибо человек не полностью самостоятельно блогерством занимается.
Отключение нового repl в python 3.13

Спустя пару месяцев страданий я совершенно неожиданно для себя нашёл решение за 30 секунд.
Обновившись до питона 3.13, я столкнулся с тем, что они переделали интерактивный режим.
Во-первых он теперь заставляет windows terminal на каждую введённую буковку выплёвывать весь промпт, таким образом при написании каждого символа кода в nvda попадает всё ранее написанное.
С этим я как-то вроде даже смирился, но потом оказалось, что ввод многострочного кода стал... странным. Хз даже как описать, если кратко, то за пару минут я с ним не разобрался и забил.
Пока я просто пишу код всё идёт хорошо, но как только хочу повторить ранее введённые строки, начинается какая-то дичь (они будто не вводятся и не исполняются, а если даже и вводятся, то интерпретатор застревает в каком-то странном режиме, из которого фиг пойми как выйти, кроме как по ctrl+c).
Наконец я решил попробовать загуглить, что же это такое они сделали и как теперь с этим жить, а оказалось, что можно сетнуть переменную PYTHON_BASIC_REPL, и новое поведение отключится.

#A11yTricks
Приколы доступности от сбера

Открыл гигачат, и вижу такое поле:
"clickable Опишите вашу edit multi line"
Т.е. это текстовое поле с меткой "Опишите вашу", а дальше, видимо, уже от фантазии пользователя зависит.
В процессе тыканья я выяснил, что в placeholder поля динамически дописываются слова, видимо побуквенно, процесс этот можно наблюдать открыв dev tools.
Однако nvda захватывает то, что там было при разворачивании вкладки, и таким образом, пока я это выяснял, мне попалось: "Опишите вашу зад".
По-моему с таким предложением они переплюнули даже Грока от Илона Маска.
😁31
Сколько должно быть опыта в программировании, чтобы перестать допускать такие ошибки?
        if self.timer.enabled:
self.enable_item = self._add_menu_item(_("Enable"), self.on_enable)
else:
self.disable_item = self._add_menu_item(_("Disable"), self.on_disable)

Кстати скоро выпущу переработанный и переделанный с нуля аддон audioTimer, можно добавлять несколько таймеров, настраивать кастомные звуки срабатывания, задавать количество повторений таймера, повторяющиеся уведомления после истечения таймера...
Начал использовать ИИ для программирования, и вдруг меня посетила глубокая мысль.
Сначала человечество придумало динамически типизированный язык, чтобы упростить себе жизнь.
Потом человечество придумало type hints для динамически типизированного языка, чтобы упростить себе жизнь.
А потом человечество придумало ии пишущего тайпхинты, чтобы упростить себе жизнь.
В какой же момент мы свернули не туда?..
Читая логи nvda, порой можно найти интересные вещи, однажды я писал про "Разрушительный сбой", а сегодня делюсь вот таким:

FileNotFoundError: [WinError 18] Больше файлов не осталось.

Остаётся только догадываться, куда же все они делись...
Исправляем pager в git

Вводные данные: вы используете windows terminal, git, и в качестве пейджера используется less.
Pager - это такая штука, через которую git, или любая другая программа выводит данные постранично.
Это всё хорошо и классно работает, Но проблема следующая, когда, допустим, просматриваем log, less вроде открывается, но для nvda по прежнему доступен весь буфер, и найти первую строку выведенной страницы достаточно сложно.
Раньше я думал, что это особенность nvda и/или less, но в какой-то момент заметил, что less, открытый вручную, ведёт себя как раз так, как нужно, он перекрывает старый буфер, и shift+numpad7 приводит курсор к первой строке на странице.
В результате гугления я выяснил, что git, по дефолту, запускает less с переменной окружения LESS, через которую передаёт в него параметры FRX.
И F, например, достаточно полезен, он заставляет less не входить в интерактивный режим, если выхлоп помещается на один экран, однако X, как оказалось, ломает нужное нам поведение, и из-за него во-первых nvda может убегать за границы страницы, а во-вторых после закрытия пейджера на экране остаётся огрызок текста.
Решения у проблемы два. Задать переменную LESS самостоятельно, или переопределить поведение less, заставив его выключить то, что было включено через environment.
Второе решение кажется мне наиболее удобным и правильным, т.к. мы точечно лечим исходную проблему less + git, не затрагивая другой софт, который тоже может выводить что-нибудь через less.
А сделать это можно одной простой командой:
git config --global core.pager "less -+X"

Теперь логи, дифы и иные полезности будут выводиться без побочных эффектов, и с ними можно будет удобно взаимодействовать в windows terminal.
Кстати для удобного чтения дифов в терминале рекомендую дополнение dev box, ибо продуктивность, по крайней мере в моём случае, заметно выросла, и будто бы это гораздо удобнее, чем решение, предлагаемое в vscode, в прочем, это уже совсем другая история.
Однажды проходил курсы на яндекс практикуме, с тех пор на github остались учебные репы.
И уже несколько лет, каждую неделю мне github присылает письма с уведомлениями о том, что то в одной, то в другой репе они автоматически нашли уязвимость.
А сегодня настал тот день, когда мне надоели эти письма, и я решил их выключить, ибо конкретно в этих репозиториях я ничего менять не планирую, и просто храню их для истории.
Так вот за все эти годы в одном из репозиториев, гитхаб нашёл, внимание... 135 уязвимостей!
Остаётся только надеяться, что ни один из десятков сервисов, которым мы ежедневно доверяем свои данные, не имеет такой выдающийся метрики.
🔥1😢1
Вхожу в сервис альфа-страхование через госуслуги, выдал все разрешения, жду редиректа.
Доолго жду, секунд 20.
И дождался:
Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 41959424 bytes) in /var/www/alfastrah/htdocs/public/bitrix/modules/main/classes/mysql/database_mysqli.php on line 54
[ErrorException] E_ERROR
Allowed memory size of 1073741824 bytes exhausted (tried to allocate 41959424 bytes) (0)
/var/www/alfastrah/htdocs/public/bitrix/modules/main/classes/mysql/database_mysqli.php:54
----------


#ОноСломалось
Автоматизация публикации аддонов в NVDA addon store

Для понимания и использования описанного ниже, вы должны быть знакомы с проектом addonTemplate, а также в общих чертах разбираться в github actions.

Совместно с Бекой (AKA gozaltech) мы разработали относительно простой набор скриптов, автоматизирующий публикацию дополнений nvda в официальный магазин дополнений.
Я уже сделал с их помощью около десятка публикаций, и, по вашим просьбам, опишу ниже, как это работает.

Суть публикации состоит в том, что вы должны создать issue в github-репозитории для приёма дополнений.
В issue нужно указать всю необходимую информацию об аддоне (название, версию, прямую ссылку на nvda-addon файл и т.п.).
Далее аддон проходит полуавтоматическую проверку, и если у ребят из nvaccess, занимающихся приёмкой, не возникает вопросов, от вас не требуется никаких действий, и аддон попадает в магазин.
То есть в большинстве случаев единственное действие для публикации аддона - это создание issue, далее всё происходит без вмешательств.

Как работают скрипты:
1. Вы подготавливаете исходный код аддона на основе addon template.
2. Пишете команду: scons release version=0.1.0 channel=dev.
3. scons модифицирует build vars, создаёт тег релиза и выполняет push.
4. На тег релиза тригерится github actions workflow, который собирает nvda-addon файл и создаёт issue в репозитории addon store от вашего имени.

Дальнейшую коммуникацию с nvaccess, при необходимости, вы ведёте в issue самостоятельно.

Как настроить:
Для начала нужно выпустить personal access token для вашего github аккаунта, не буду описывать, как именно это сделать, процедура достаточно тривиальная, в доке гитхаба разобрана по шагам.
Я рекомендую выпускать полноценный, а не fine-grained токен, так как fine-grained нельзя сделать бессрочным, и его придётся периодически перевыпускать.
При создании токена можно дать доступ только на создание issues, это конечно позволит потенциальному злоумышленнику, похитившему токен, создать issue в любой репе от вашего имени, но не позволит произвести иные деструктивные действия.
При этом токен будет вечным, и его можно будет использовать годами.
После выпуска токена его нужно добавить в секреты репозитория вашего аддона, с именем USER_TOKEN.
Затем нужно добавить в репозиторий workflow файл и обновить sconstruct.
К сожалению ни мои, ни Бекины руки не дошли до того, чтобы законтрибьютить это в репозиторий addon template, но файлы можно взять из репозитория существующего аддона.
Я рекомендую https://github.com/addonWorkshop/speechFilter
Так как там есть кое-какие полезные правки.

Вам нужно забрать директорию .github, а также файл sconstruct, и положить в свой репозиторий.
Затем достаточно выполнить `scons release channel=<channel> version=<version>, и если всё получилось, то через какое-то время в nvaccess/addon-datastore будет создана issue.
Для отправки issue используется action https://github.com/beqabeqa473/submitNVDAAddon
Вы можете ознакомиться с его readme, чтобы узнать о возможных входных и выходных параметрах.
Ну и в целом стоит прочитать инструкцию перед использованием, не правда ли?..

UPD

Пожалуй стоит упомянуть мой вариант настройки, в котором я использую отдельную организацию на github.
Сделал я её по одной простой причине, у github есть возможность создавать organizational secrets, и именно для этого организация и нужна.
Таким образом, мне достаточно просто создать репозиторий в организации, и ему сразу доступна переменная USER_TOKEN, что довольно удобно.
codeHelper-0.2.0.nvda-addon
2.9 KB
Озвучивание текущей строки в vscode

Многие привыкли нажимать ctrl+g в vscode, чтобы быстро узнать номер текущей строки, однако пару версий назад разработчики запороли доступность этого диалога, и номер строки перестал озвучиваться.
А в предпоследней версии починили.
А в последней версии опять запороли.
Поэтому вот простенький аддон, который позволяет узнать номер строки по нажатию nvda+g.
И хоть буквально в предыдущем посте есть инструкция по автоматизации публикации в addon store, даже при её наличии мне выкладывать аддон лень, так что по старинке.
👍2