Кодерская мастерская
137 subscribers
1 photo
14 files
39 links
Блог Данила Пылаева
Download Telegram
И снова шестёрочки

Где-то выше был пост про 9 шестёрок в Unix time, но там вроде бы всё было очевидно, понятно и просто, а вот сегодняшний случай заставил меня немного поломать голову.

Пишу я значит сервис, работающий с БД postgres, и нужно мне записать в столбец бинарные данные.
Сделал столбец, пытаюсь с помощью sqlalchemy (библиотеки для работы с бд) записать тестовую строку, забываю один из НЕ nullable столбцов.
И получаю от базы следующую ошибку
DETAIL:  Failing row contains (null, testing, \x666666, 3).

Это не вся ошибка, а самая интересная её часть, давайте разберём её.
В этой строчке база говорит, с какой именно записываемой строкой произошла ошибка, и выводит её.
Сначала null - это именно тот первый столбец, который не может принимать такое значение, из-за него эта ошибка и возникла.
Второе значение testing - это тестовое значение какого-то строкового столбца, четвёртое значение 3 - уникальный идентификатор.
А вот третье, которое типа бинарное: \x666666.
И вот я когда его увидел, наверное с минуту пытался понять, что происходит, откуда оно взялось? И в итоге выяснил следующее.
В качестве тестового значения я ввёл три буквы f.
У маленькой буквы f в таблице ascii десятичный номер 102, а шестнадцатиричный - 66.
И вот тут самое интересное: то ли база, то ли её драйвер, попытался вывести именно шестнадцатиричные номера символов последовательности, но почему-то поставил \x только в начале, после чего просто слепил все цифры в кучу.
Ну и, разумеется, из fff получилось 66 66 66, что и вывелось как 666666.
Возможно это даже не баг, а просто особенность бд, потому что в общем то восстановить из этого исходную последовательность очень даже возможно, но просто забавно, что я рандомно ткнув в клавиатуру неожиданно получил именно такой результат.
Подключаем семейную подписку яндекса через боль и страдания

На всякий случай уточняю: все цитаты сообщений интерфейса не дословные, а написаны по памяти.

Начну, как обычно, с предыстории.

Когда-то давно, ещё в 2015 году, я слушал музыку в vk, и мне было ок.

Потом, году наверное в 18, я познал могущество и величие алгоритмов spotify, и полностью перешёл туда.

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

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

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

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

И это обстоятельство стало решающим, раз уж у нас теперь есть станция и подключен плюс, то наконец я попробую яндекс музыку!

"Ща только быстренько семейную группу создам" - думал я.

"А потом быстренько расшарю себе плюс" - тоже я так думал.

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

Получилось же всё слегка иначе.

И так, яндекс плюс подключен на папином акке, значит сначала нужно в него зайти, данные есть, погнали.

Заходим в аккаунт, яндекс просит код из пуша, тоже в общем то ожидаемо.

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

Нажимаю на "Поделиться преимуществами плюса" (или как-то так), попадаю на страничку с предложением подключить плюс.
Странная страничка, ведь плюс на этом аккаунте уже подключен, ну окей, давайте подключим подключенный плюс ещё раз. Нажимаю на кнопку "Подключить", и открывается страница подключенного плюса.
СТраница стандартная, на ней уже про семейную группу ничего нет, есть только возможность отправить приглашение, но мне это не надо, я ведь уже вступил в группу, мне просто надо расшарить плюс! Как это сделать?!
Ладно, может он уже подключился, перехожу в свой аккаунт, но там мне предлагают оформить подписку, т.е. нифига не сработало.
Пукан начинает разогреваться, окей, возвращаюсь на батин аккаунт, перехожу к плюсу, высылаю себе приглашение, переключаюсь на свой аккаунт, открываю почту.
Кодерская мастерская
Подключаем семейную подписку яндекса через боль и страдания На всякий случай уточняю: все цитаты сообщений интерфейса не дословные, а написаны по памяти. Начну, как обычно, с предыстории. Когда-то давно, ещё в 2015 году, я слушал музыку в vk, и мне было…
Перехожу по ссылке, и, и, иии "вы уже вступили в эту группу!"
Вот же падла, нарукожопили, ну наверное это просто в интерфейсе тупняк случился, и мне выдалось право использовать плюс, правда ведь?
Открываю плюс, а там, конечно же, предлагают оформить подписку!
Пукан уже начинает выжигать кислород, но я пока не сдаюсь.
Если я уже вступил в группу, то система не идёт дальше и не применяет нужную роль, так может надо выйти и вступить по правильной пригласительной ссылке от плюса?
Снова переключаюсь на папин акк, захожу в настройки семьи, пытаюсь исключить себя, и мой пукан моментально начинает процесс преобразования водорода в гелий.
Что же случилось, думаете вы?
А случилась маленькая приписка примерно такого содержания: "Участник сможет снова вступить в семейную группу после 7 мая".
То есть ситуация следующая: я хочу затестить яндекс музыку, для которой нужен плюс, я хочу пошарить этот самый плюс с другого аккаунта, эти аккаунты находятся в семье, но пошарить нихера нельзя, потому что правильная ссылка не работает пока я в группе, и после выхода из группы она тоже не сработает, потому что до 7 мая меня никуда уже не пустит!
И уже морально приготовившись к подключению плюса себе на акк, я выкинул себя из группы, зашёл в плюс, отправил приглашение, перешёл в свой профиль, открыл почту, перешёл по ссылке...
И вот оно просто вот так вот взяло, вот так вот раааз...
И сука сработало! Я снова оказался в семейной группе!
И более того, у меня активировалась подписка на плюс!
И у меня даже активировался доступ Шрёдингера к яндекс 360!
Выглядело это как-то так, цитата из письма: "Вы присоединились к семейной группе Яндекс ID и можете пользоваться семейной картой и подписками на Яндекс Плюс и Яндекс 360 Премиум"
Вроде доступ есть, окей, открываем батин профиль, настройки семьи, а там: "Семейная оплата Поделиться картой", "Яндекс 360 Премиум Поделиться преимуществами".
Тут уже пофиг на самом деле, эти фичи мне не нужны, закрываю сей ужас и морально готовлюсь к новому этапу квеста: установке приложения, но это теперь уже завтра...
Собираемся интернет-провайдера менять, ТТК настойчиво предлагают свои услуги, есть у кого отрицательный / положительный опыт их использования? Будет круто, если поделитесь.
Или может тарифы сейчас у кого-нибудь есть хорошие по цене?
Вы, наверное, уже и не ждали, но всё же дождались. В Android-клиенте Телеграм пофиксили отвал нижней части экрана после записи гс.
Спасибо за внимание.
👍2
Личный кабинет налогоплательщика физического лица спрятан от скринридеров

Зашёл на lkfl2.nalog.ru, авторизовался, загрузился типа пустой документ.

Открываю, значит, исходник:
<body data-theme="light" class="ReactModal__Body--open" aria-hidden="true">


В общем-то на этом всё, я не знаю, как это можно прокомментировать.

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

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

Я являюсь автором / соавтором некоторых дополнений, которые отвалились сначала при выходе NVDA 2024.1, а потом ещё раз отвалились после выхода 2024.2.

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

Мы тут в прошлом месяце игру выпустили, но почему-то идея написать об этом здесь появилась лишь сегодня.

И так как лучше поздно чем никогда, держите запоздалый постик.

Во-первых кто такие мы? Мы — это команда Sooslandia games, которая занимается разработкой звуковых игр.

И первым нашим продуктом стала аркадная игра Ball bouncer, которая была выпущена 14 июня для Windows и Linux.

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

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

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

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

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

Ну или не научитесь, откуда же мне знать 😊

Вот вам ссылочки, вы знаете, что с ними делать:
Наш русскоязычный канал, наш интернациональный канал, скачать игру для Windows, скачать игру для Linux.
👍1
Небольшой интересный факт: это валидный код на Python.

def main():
return(42)


Живите теперь с этим.
aidaMenu-0.0.1.nvda-addon
4 KB
Aida Menu

Сделал дополнение, которое позволяет открывать меню в седьмой версии Aida64.
Не каждому это нужно, но если, например, хотите запустить тесты, или что-нибудь настроить, это дополнение может вам помочь.
Для открытия меню по умолчанию используется сочетание nvda+o.
Команда для выполнения бэкапа в twrp хорошо описывает жизнь любителей кастомных прошивок.

Чтобы создать резервную копию разделов boot, data и system, нужно выполнить twrp backup bds.

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

И в таком случае команда принимает вид twrp backup bdsm.

На сегодня пока всё.
Кажется я нашёл гимн пароля от google-аккаунта.

https://www.youtube.com/watch?v=xiJW4cfYX0g
🔥1
Если перейти на сайт sberbankonline.ru, откроется сайт Авиасейлс.

А на сайте onlinesberbank.ru размещены правила безопасности в сети, такой фишинговый сайт наоборот.
lariat

Сегодня мир информационных технологий преподнёс мне очередную загадку.
Я производил некоторые манипуляции с одним из репозиториев на github, затем, чтобы удостовериться, что я ничего не сломал, я выполнил git fetch origin.

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

user@host:~/dev/repo$ git fetch origin
remote: git: 'lariat' is not a git command. See 'git --help'.
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header


Давайте разберём этот сниппет:
Первая строка - это промпт оболочки bash.
Вторая строка самая интересная, к ней вернёмся позже.
Третья строка сообщает о том, что гит прекращает работу из-за возможного повреждения удалённого репозитория.
Четвёртая строка, как я понял, содержит то ли изначальную, то ли более низкоуровневую ошибку, там сообщается о том, что гит получил плохой заголовок так называемого пака, это некая сущность, используемая гитом, но это сейчас не важно.

А теперь давайте вернёмся ко второй строке: remote: git: 'lariat' is not a git command. See 'git --help'..
Что именно означает remote в начале строки я не уверен, либо это указание на то, что событие произошло на удалённой стороне, либо что гит столкнулся с проблемой при работе с удалённой стороной.
А далее гит нам сообщает, что 'lariat' не является командой гита, и не мешало бы покурить мануал по этому поводу.
После получения такого вывода от гита у меня два вопроса: что произошло, и что такое этот ваш lariat?!
Я потратил около получаса на попытки как-то разгуглить эту проблему, и ничего похожего не нашёл.
Но самое главное, это случилось дважды! Я повторно выполнил команду git fetch origin, и снова получил этот же результат!
Только на третий раз коммуникация с github прошла успешно, и больше, сколько не тыкал, ошибка не возникала.

#ОноСломалось
Новая тестовая голосовая рубрика под названием "Оно сломалось".
Планирую творить в ней какую-то весёлую разрушительную дичь, пишите, что думаете о таком формате.
Кодерская мастерская
lariat Сегодня мир информационных технологий преподнёс мне очередную загадку. Я производил некоторые манипуляции с одним из репозиториев на github, затем, чтобы удостовериться, что я ничего не сломал, я выполнил git fetch origin. Эта команда должна была…
Продолжение истории про lariat

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

И совсем неожиданно сегодня я получил ответ!

Дело было так:
1. 25 сентября, около 17:30 по МСК, у гитхаба происходит инцидент, из-за которого люди по всему миру начинают получать то самое сообщение про lariat.
2. Пользователь с ником heldrida открывает обсуждение на гитхабе, в котором спрашивает о происходящем.
3. Люди обсуждают проблему, делятся логами и т.п.
4. Примерно через неделю после инцидента в обсуждение приходит пользователь с ником terrorobe.
Он отправляет ссылку на тот самый инцидент, и в его описании идёт речь про какой-то неправильно сработавший скрипт, из-за которого сфейлилось 1.4 млн операций git, и тому подобные вещи.
Но самого главного там не было, там не было описания лариата!

Вроде как вопрос исчерпан, но я решаю спросить этого человека, что же такое этот самый lariat.
И сегодня он ответил следующее:
"lariat is a caching layer that speeds up parallel identical fetches to a repository, e.g. as initiated by CI farms."
Что перевести можно примерно так:
"lariat — это кэширующий слой, который ускоряет параллельное получение идентичных данных из репозитория, например те, которые инициируются скриптами CI."

Т.е. в гитхабе имеется возможность запускать так называемые actions, которые могут делать различную полезную работу прямо на серверах гитхаба.
Например собирать приложения из исходного кода, тестировать их, публиковать в магазинах приложений и т.п.
Такие экшены в первую очередь, как правило, получают файлы репозитория, и их может быть запущено несколько одновременно.
Иначе говоря всё вроде сходится, существовала проблема: множество запущенных параллельно экшенов забирали один и тот же репозиторий, и неразумно тратили ресурсы.
А гитхаб изобрёл механизм кэширования, назвав его lariat, который эту проблему решил.

Но самое интересное в том, что вообще непонятно, что это за человек, который мне ответил.
Сначала я думал, что он имеет какое-то отношение к гитхабу, т.к. подробно описал инцидент.
Я открыл его профиль, ничего подтверждающего эту инфу не увидел, и дальше копать не стал.
Затем я задал этот вопрос, он мне дал ответ, я пошёл писать этот пост, стал проверять инфу и выяснил, что это подробное описание инцидента есть на githubstatus.com.
В итоге получается, что это мог написать кто угодно, но раз ответ мне был дан, видимо тот чел что-то знает.
Кодерская мастерская
Кажется я нашёл гимн пароля от google-аккаунта. https://www.youtube.com/watch?v=xiJW4cfYX0g
Продолжение истории про пароль от google-аккаунта

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

Ну точнее как хранился... Пытался храниться.

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

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

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

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

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

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

Уныло тянулись рабочие будни, выходные мелькали за выходными, зима сменилась весной, а затем и летом.

И в один из ничем не примечательных дней, пользователь стал счастливым обладателем устройства, работавшим под управлением операционной системы Android.

Он немедленно приступил к настройке, встретился с полем ввода пароля от google-аккаунта, и...

https://www.youtube.com/watch?v=1K1SeubVwmk