Яндекс.Стагнация
У меня нарастает ощущение, что «Яндекс» потихоньку стагнирует. Возможно я неверно чувствую тренд, но кажется он вполне вырисовывается — продукты становятся всё хуже и хуже в самых базовых вещах, падает качество обслуживания, техподдержка отдаёт роботизацией, а новые функции добавляются всё медленнее.
Можно по той же «Алисе» судить — про таймеры, которые постоянно отваливаются я уже писал, а теперь ещё «Сбер» выпустил свою колонку, которая уже на старте выглядит интереснее «Алисы», да ещё и стоит дешевле. Куда это годится?
Я по старой памяти недолюбливаю «Сбер», от которого мне до сих пор чудится
Возможно бывший «Сбербанк» становится новым «Яндексом»?
Подарки в кредит
С утра в чате выбираем подарок одной сотруднице — у нас принято скидываться рублей по двести каждому на подарок, но выбрать что подарить — настоящая проблема. Вспомнил, что лет двадцать назад дарить было куда проще — у людей в моём кругу мало что было, что не подари, всё к месту.
Правда в кошельках было посвободнее, да и в магазинах — тоже.
Хорошо помню несколько таких случаев, когда по договорённости с именинником, мы в день рождения дарили, например, кредитный пылесос, у которого оплачена только часть суммы, а остальное должен был со временем оплатить одариваемый.
Возможно такое до сих пор принято, но я
«Ухарь-купец»
Не знал, что в начале двадцатого века существовало такое явление, как раскрашенные вручную фильмы. Как и многие, я слышал, что
А тут при изучении сайта «Утерянные медиа», наталкиваюсь на новость, что в прошлом году удалось разыскать считавшийся утерянным фильм «
Вот это постпродакшн! Длительность фильма — около восьми минут, что даёт нам, при скорости съёмки 15 кадров в секунду по стандарту того времени 7200 кадров (8×60×15).
Красили, правда, насколько я мог разобраться, не кисточкой, а методом вирирования, — это способ, который изобрёл Жорж Мельес, один из основоположников кинематографа. Метод заключался в вырезании трафаретов из напечатанных с плёнки дополнительных позитивов, при помощи которых покадрово наносились оттеночные химикаты.
Это едва ли не сложнее, чем покрасить плёнку обычной кисточкой, но с точки зрения получения нескольких копий куда выгоднее.
Стихотворение рассказывает о совращении проезжим купцом деревенской девушки с согласия её отца. Оно, кстати, в своё время изменило значение слова «ухарь». Первоначальное значение «весёлый, энергичный человек» перешло в негативное.
Было отчего — кончается стихотворение довольно мрачно:
Молится богу
старуха-жена,
Плакать бы надо — не плачет она.
Дочь их красавица поздно пришла,
Девичью совесть вином залила.
Что тут за диво! и замуж пойдет…
То-то, чай, деток на путь наведет!
Кем ты, люд бедный, на свет порожден?
Кем ты на гибель и срам осужден?
Фильм тоже не хеппиэндом кончается — дочь прибегает в родительский дом, и мать, поняв её нынешнее положение по символически обрезанной купцом косе, будит
CVE 2023-0567
В ПХП нашли достаточно серьёзный, на мой взгляд, баг — на некоторых повреждённых хешах функция password_verify возвращает true на любой пароль. Получается, хитрый хакер может оставить себе тайный ход — поменять в базе хеш на битый, и пользователь ничего не заметит —
Вот как это выглядит:
var_dump(password_verify("foo", '$2y$04$00000000$')); // true
var_dump(password_verify("bar", '$2y$04$00000000$')); // trueУдивляет, что один из разработчиков попытался защитить текущее поведение интерпретатора:
The documentation for password_verify() clearly states that the $hash has to be valid:
> hash
> A hash created by password_hash().I fail to see how this is a bug if you feed it garbage; also the documentation to crypt states:
> Using characters outside of this range in the salt will cause crypt() to return
a zero-length string. The two digit cost parameter isthe base-2 logarithm of the iteration count for the underlyingBlowfish-based hashing algorithm and must be in range04-31, values outside this range will cause crypt() to fail.PHP clearly behaves as described.
Что бы ни было написано в документации, возвращать true на любой пароль из функции проверки правильности пароля — очень плохая идея, как мне кажется, это должно быть довольно очевидно.
При анализе оказалось, что баг занесён ещё
PHP’s implementation of crypt_blowfish differs from the upstream Openwall version by adding a «PHP Hack», which allows one to cut short the BCrypt salt by including a $ character within the characters that represent the salt.
Hashes that are affected by the «PHP Hack» may erroneously validate any password as valid when used with password_verify and when comparing the return value of crypt() against the input.
The PHP Hack exists since the first version of PHP’s own crypt_blowfish implementation that was added in 1e820ec.
No clear reason is given for the PHP Hack’s existence. This commit removes it, because BCrypt hashes containing a $ character in their salt are not valid BCrypt hashes.
Пыль на головках
На сайте «Утерянные медиа», где отслеживаются истории поиска различных потерянных медиа — мультфильмов, фильмов, игр, телевизионных передач и прочего, есть замечательная история поиска видеоклипа «Пыль на головках». Клип успешно нашли, но оказалось, что в названии есть серьёзная ошибка.
Цитирую:
«Пыль на головках» — не кадр клипа песни и не название песни. Эта ошибка высвечивается при оцифровке, когда головки магнитофона засорены пылью. Возможно, римская цифра на конце названия обозначает восклицательный знак, который отсутствует в наборе символов.
Искомая же песня на самом деле называлась «Красные фантики», в 1989 году её выпустил Чернецов Геннадий Герасимович, более известный как Пророк Санбой.
Импортный, фирменный
Сегодня в переходе зацепил глазами распродажу «фирменных» пуховиков и понял, что окончательно потерял понимание того, что, собственно, сейчас означает слово «фирменный». Ну и «импортный» тоже.
Как мне кажется, слово «фирменный» в пике своего использования, ещё
1,25
Привык пользоваться «Ютьюбом» на скорости 1,25 — я там нередко
Это порождает неприятную проблему — под некоторое настроение люблю
Вот бы «Ютьюб» на старте ролика сделал
Лёгкость
Думаю уже несколько лет мысль, что блог очень удобный инструмент для того, чтобы учиться некоторым вещам. Hапример,
Мне кажется качество текста у меня действительно выросло, — я начал больше работать над структурой предложений, начал разбивать их на более простые части, чаще использовать синонимы, пытался сознательно выстроить логику нарратива и научился
Впрочем, я выучил и ещё один урок — после такого насилия над собой требуется длительный отдых.
В этом году я решил попробовать нечто совсем иное — просто писать всё, что приходит в голову, несмотря ни на что. Мне нравится это — пишу. Купил шапку, которая вызвала у меня эмоции — написал, всплыло воспоминание о том как я
Я называю то, чему мне хочется научиться на этот раз, «лёгкостью».
Это то, как мне кажется, что у меня было
Если посмотреть на характер постов в Живом Журнале в начале
Хочу так же. Хочу вернуть лёгкость.
Я как будто начал стесняться писать о бо́льшей части вещей, которые меня занимают. Стал внутренне примерять свои посты на аудиторию. Непонятно зачем. Я не собираюсь становиться популярным блогером, времена, когда у меня тут было сорок тысяч человек давно прошли и возвращать их не хочется — это был большой стресс. С популярностью пришёл и хейт, я сейчас такое не вывезу.
Кажется такое внутреннее освобождение уже даёт свои плоды, —
Запись голоса на фоноавтограф
В 1857 году парижский издатель, библиотекарь и книготорговец
Первый прототип у него был ещё раньше, но в этом году он получил патент.
Звук собирался раструбом и улавливался чувствительной мембраной соединённой с иглой, оставляющая след на покрытой сажей бумаге, которой был обёрнут вращаемый при помощи ручки стеклянный цилиндр.
Это был скорее аттракцион — проиграть такой звук в то время было невозможно, да изобретатель на это и не надеялся.
Запись выглядит, как вполне различимые светлые закорючки на подкопчённой бумаге.
Ученым из Национальной лаборатории имени Лоуренса в Беркли удалось, используя отсканированное с высоким разрешением изображение фонограммы, применить современную технологию для извлечения звука из рисунков. Качество звука, конечно, не очень, да и скорость с которой нужно проиграть запись точно неизвестна, но слова разобрать можно.
Голос на фоне фоновых шумов поёт часть первого куплета песенки:
Au clair de la Lune
Mon ami Pierrot
Prête-moi ta plume
Pour écrire un mot
Или в переводе на русский язык:
При свете луны,
Друг мой, Пьеро,
Скорее одолжи перо,
Чтобы написать записку
Изначально решили, что на записи женщина, но позже выяснилось, что скорость воспроизведения подобрана неправильно и на записи мужской голос, вероятно поёт сам изобретатель.
Позже были преобразованы в звук и остальные записи, самые ранние из них — 1853—54 годов. Ниже несколько образцов.
Большинство записей звучат совершенно неразборчиво, мы знаем что на них только благодаря тому, что они подписаны. Но всё равно услышать звук, которому около 170 лет, очень волнующе.
Док ик ак ук (ftp-2-mail)
Примерно
Это специальный протокол для хостинга файлов, сейчас он всё ещё используется, но распространён мало. Надо упомянуть, что FTP — текстовый протокол, команды надо было писать руками в командную строку, благо их довольно просто было выучить.
Это были времена, когда интернет только начинал появляться и многие о нём ещё даже не слышали, не говоря о том, чтобы пользоваться. Поэтому даже такое окошко в него было очень интересным. Сама идея того, что программы можно было получать
Выглядело всё следующим образом. Если мы знали адрес нужного сервера FTP, то список команд к нему надо было выслать на один из специальных почтовых адресов. Некоторые я помню до сих пор:
ftpmail@ftp.uni-stuttdart.de
ftpmail@doc.ic.ac.uk
ftpmail@suusite.unc.eduПисьмо могло выглядеть
connect ftp.netscape.com anonymous user@example.org
cd pub/windows/netscape
binary
get netscape30.zip
quitЕсли всё было правильно, обратно приходили пронумерованные письма с кусками бинарного файла в текстовом формате UUC. Их надо надо было собрать в правильном порядке в один файл и декодировать программой uudecode.
Откуда я брал имена FTP-серверов, честно говоря не помню, но помню
Я его получил нечестным способом, — узнав пароль своего друга, аспиранта моей кафедры, Андрея Г. Аспиранты не студенты, им адреса почты положены были, и выдавались в виде Имя.Фамилия@ksu.ru.
Андрей
Андрей поменял пароль и рассказал об этом мне. Кажется я сам ему признался, что это был я, на что он посмеявшись, дал мне новый пароль, но попросил быть впредь осторожнее и больше не заказывать такие большие файлы.
Бессонный хакатон: нажатие на кнопку
Продолжаю писать про свой бессонный хакатон.
В решении, которое я накидал за ту ночь, планировалось нажимать на кнопки эмулятора «ЭплСкриптом» — на «Маке» это логичнее всего, так как этот язык заточен как раз под такие задачи — автоматизацию работы со сторонними графическими приложениями.
Удивительно, но у меня это сделать не получилось — несмотря на то, что я слал кнопки как описано в документации, в эмуляторе ничего не происходило.
Так как время уходило, — сроку я себе выделил до утра, пришлось использовать другое решение — через утилиту cliclick, которая умеет эмулировать нажатие мышкой:
cliclick m:800,630 w:200 c:. w:200 m:+100,+100Я просто закодировал координаты нужной кнопки в том месте, где у меня она была на экране. Одна проблема — кнопка после нажатия «залипала», но я решил тем, что через 200 миллисекунд отводил курсор в сторону — w:200 m:+100,+100 на птичьем языке утилиты.
Уже позже, во время рефакторинга, я обратил внимание, что когда я нажимаю кнопку на своём ноутбуке, то в эмуляторе иногда нажимаются не одна кнопка, а две. Если жать стрелки вниз или вверх, то в эмуляторе происходит нажатие на CS+6 и на CS+7 соответственно, причём оболочка электронного журнала правильно реагирует и на эту комбинацию, и на одиночные «6» и «7».
Для эксперимента попробовал слать вместе с основной клавишей ещё
function press_key {
local key
if [[ "$1" =~ ^[0-9]{2,}$ ]]; then
key="key code $1"
else
key="keystroke \"$1\""
fi
osascript <<PRESS
tell application "System Events" to $key using command down
delay .03
tell application "System Events" to $key
PRESS
}Она определяет что ей передали — код символа или сам символ и «нажимает» запрошенную клавишу. Второй раз я «нажимаю» ту же клавишу уже без модификатора, иначе она
Конфликт поколений
У Бродского нашёл прекрасные строки про зуммеров:
Покуда призрак не ответит эхом
Последним воплям зуммера в ночи.
Бей, беги, замри
Всегда было интересно чем обусловлена стратегия «замри» в известной троице реакций на стресс «бей, беги, замри». Должно же у неё быть
Ответ нашёлся в книге «Мальчик, которого растили как собаку» Брюса Перри и Майи Салавиц:
Для грудных детей и малышей, неспособных драться или убежать, обычна реакция отстранения в случае угрозы.
[…]
В процессе «отстранения» мозг подготавливает тело к возможной травме (ранению). Кровь отливает от конечностей и сердечный ритм замедляется, чтобы уменьшить возможную потерю крови. Нейроэндокринная система выбрасывает целый поток эндогенных опиоидов — вырабатываемых организмом веществ, по действию подобных героину, устраняющих боль, способствующих успокоению и ощущению психологической отстраненности от происходящего.
Резюмируя, — эта стратегия помогает дождаться помощи в случае ранения. Видимо достаточно часто это помогало выжить.
Скриншоты из «ZX-Ревю»
Продолжаю писать про свой «бессонный хакатон».
В комментариях к первой заметке читатель Евгений Суреев посоветовал использовать внутренние средства оболочки электронного журнала, чтобы получать скриншоты. Этот способ существует, но мне он показался чересчур сложным и медленным. Но для очистки совести я сего всё же попробовал.
Получились следующие шаги:
- в эмулятор, кроме виртуального «диска» с журналом подключаем второй пустой диск;
- листаем на нужный экран внутри эмулятора;
- нажимаем в эмуляторе кнопки SS+S;
- переводим в появившемся окне курсор в поле выбора дисковода, пишем там B;
- в этом же окне переводим курсор в поле «Имя файла», пишем туда номер текущей страницы;
- повторяем шаги 2—5 до конца раздела;
- скидываем
куда-то на диск компьютера образ со скриншотами; - при помощи утилиты mctrd достаём из образа скриншоты;
- при помощи утилиты zx-image преобразовываем скриншоты в PNG;
- преобразовываем полученное в JPG, склеиваем с большой файл, закидываем в оболочку;
Весь этот интерактив с браузером (вызвать меню, ввести диск, ввести имя) — довольно долгий,
В общем, кажется слишком много проблем, которые надо решать, причём я ещё не знаю удастся ли их решить хорошо.
Софт по подписке
Если есть возможность этого избежать, то стараюсь не покупать софт по подписке. Мне не нравится сама концепция, я считаю её победой компаний, продающих софт и проигрышем покупателя. В самом деле я не понимаю зачем мне продолжать платить за софт, который я уже купил и который меня всем устраивает.
На этом фоне гибридные схемы (отключаешь подписку, остаёшься со старой версией софта) меня
Сейчас время второго пришествия нейросетей и многие крупные корпорации кинулись прикручивать нейросети в свои продукты — «Микрософт» встраивает сети
Мне всё кажется, что «это
А подписку оправдать просто — нужные для работы продукта нейросети тяжёлые, требуется много железа для того, чтобы они работали, вот поэтому и нужно платить — лизинг оборудования, свет, помещение, замена комплектующих, персонал, интернет, вот это всё.
А когда ChatGPT сможет считаться на любом дешманском смартфоне, будет уже поздно — подписочная модель победит окончательно, разовая лицензия перестанет существовать и больше не появится — компании с подписочной моделью гребут больше денег, конкуренты без неё вымрут.
Tulia — Nothing Else Matters
Уже немного старое, но прекрасное:
Откуда берутся слухи
В комментариях к моему каналу в «Телеграме» прислали ссылку на интервью на тему слухов с антропологом и фольклористом Александрой Архиповой.
В статье рассматриваются не все виды слухов, а так называемые «городские легенды» — слухи
Основной вывод статьи — люди при пересказе преувеличивают
Занимательно, что месяц назад в чате нашего жилищного комплекса обсуждали следующий слух (дословная цитата):
Тоже сегодня присылали такое сообщение, что детей просят включить газ и идти ложится отдыхать.
А сегодня в вышеприведённой статье я встретил следующее
История про газовщиков — это отголосок истории про «фей Винкс», которая очень активно прошла в 2016 году (рассылка сообщений, где детям предлагалось стать феей Винкс — для этого надо было открыть в квартире газ, и тогда ты полетишь).
Версия про «шамот»
У меня появилась версия, почему вероятно дореволюционный кирпич «ШАМОТ» написан без «ера» (твёрдого знака в конце).
Думаю, слова «шамот» не существовало, было прилагательное «шамотный» и, как мне показалось после штудирования различных книг, существительное «шамота».
Если я прав, то на кирпиче, — сокращение от «шамотный», а в конце сокращений «ер» ставится не мог.
Хотя многие неспециалисты рассматривают его как обязательную заглушку после гласной, на самом деле он полноценная часть слова,
Слухи
Сегодня в шесть утра сотрудники МВД кувалдой вскрывали соседнюю квартиру — соседу устраивали
В общедомовом чате одна женщина сразу написала, что сотрудники сначала позвонили в дверь каждому из соседей, но никто не открыл. Я возразил, — как же никто, если я открыл. Потом она же пишет, что квартира 100% съёмная. Я опять возражаю — встречал хозяина несколько раз, он сам там живёт.
То есть человек уверенно подаёт свои домыслы в форме факта . Думаю, даже не замечая этого. Потом другие люди дальше будут транслировать её догадки как свидетельство очевидца, дополняя их своими догадками, опять же в форме фактов.
А теперь неспеша всё отрефакторим
Несколько дней назад я рассказывал о своём бессоном хакатоне, — ухаживая за дочкой во время её болезни, я особо не спал, а чтобы не умереть от безделья, придумал себе задачу — за ночь изобрести и реализовать способ вытащить из эмулятора спектрумовский электронный журнал «ZX-Ревю».
Способ я придумал, реализовал и выложил на «Гитхаб». Но мозгу задача понравилось, не могу остановиться и перестать думать о том как всё переделать. Уже начал накидывать новый прототип. Выкладывать целиком пока не буду, там не готово,
Первое, что мне хотелось бы сделать — избавиться от привязки к браузеру. В прошлой реализации я просто активизировал «Сафари», после чего считал, что в активном окне открыт нужный мне эмулятор. Я подумал, что хорошо бы посмотреть какие у нас запущены браузеры и проверить открыто ли
Так как я делаю всё под «Мак», программировать решил на «ЭплСкрипте» — так проще всего.
on is_running(appName)
tell application "System Events" to (name of processes) contains appName
end is_running
set browsers to {"Safari", "Chrome", "Opera", "Firefox", "Edge", "Yandex"}
repeat with browser in browsers
if is_running(browser) then
tell application browser
if exists window "ZX Spectrum online emulator" then
log browser
activate
exit repeat
end if
end tell
end if
end repeatЧто тут происходит? Я перебираю все известные мне браузеры по имени, ищу какие из них запущены, в них смотрю — называется ли активное окно «ZX Spectrum online emulator», если да, остаюсь в нём, сообщая наружу какой из браузеров найден.
Можно было бы ещё перебрать окна каждого из браузеров, но есть опасность остановиться не в том эмуляторе — мало ли, вдруг у человека несколько запущено. Сделать несложно, но кажется это может добавить проблем.
Так как основная оболочка у меня на «Баше», осталось
BROWSER=$(osascript <<BROWSERS 2>&1
# … тут программа на «ЭплСкрипте»
BROWSERS
)В итоге, в переменной $BROWSER будет лежать имя браузера или пусто, если подходящий не найден.
Перенаправление потока 2>&1 необходимо, так как команда log «ЭплСкрипта» выведет имя браузера в поток для ошибок, а конструкция $( … ) ждёт его в стандартном выводе.