Собрал «Ollee Watch»
Что-то меня увлекла идея переделанных «Касио» — вторые такие часы себе уже приобрёл. Думаю, меня привлекает возможность вложить туда немного личного — хоть это и довольно просто, но их приходится собирать самостоятельно, плюс для первых своих таких часов — «The Sensor Watch» я даже написал свою игру. Кроме того, сама идея такого апгрейда довольно обычных наручных часов очень гиковская, мне такое нравится.
Правда вторые часы, «Ollee Watch» ощущаются чуть менее гиковскими, чем предыдущие и похожи на что-то, что могла выпустить какая-нибудь большая компания. Та же «Касио», например. У них, в отличие от «The Sensor Watch», есть приложение для смартфона, с которым они умеют соединяться через блютуз, NFC (я пока не разобрался зачем) и шагомер.
Шагомер — пока наиболее интересная для тут меня штука, я когда-то решил нахаживать не менее 10 тысяч шагов в день и выполнял норму, пока мог контролировать её на часах. Но с тех пор, как я приобрёл «The Sensor Watch», ношу, в основном, только их и вся эта история с шагами ушла на задний план — следить перестал, а надо бы, я думаю.
Мои новые часы показывают, что я сегодня прошёл 196 шагов и выполнил свою норму на ноль процентов ↓↓
Что-то меня увлекла идея переделанных «Касио» — вторые такие часы себе уже приобрёл. Думаю, меня привлекает возможность вложить туда немного личного — хоть это и довольно просто, но их приходится собирать самостоятельно, плюс для первых своих таких часов — «The Sensor Watch» я даже написал свою игру. Кроме того, сама идея такого апгрейда довольно обычных наручных часов очень гиковская, мне такое нравится.
Правда вторые часы, «Ollee Watch» ощущаются чуть менее гиковскими, чем предыдущие и похожи на что-то, что могла выпустить какая-нибудь большая компания. Та же «Касио», например. У них, в отличие от «The Sensor Watch», есть приложение для смартфона, с которым они умеют соединяться через блютуз, NFC (я пока не разобрался зачем) и шагомер.
Шагомер — пока наиболее интересная для тут меня штука, я когда-то решил нахаживать не менее 10 тысяч шагов в день и выполнял норму, пока мог контролировать её на часах. Но с тех пор, как я приобрёл «The Sensor Watch», ношу, в основном, только их и вся эта история с шагами ушла на задний план — следить перестал, а надо бы, я думаю.
Мои новые часы показывают, что я сегодня прошёл 196 шагов и выполнил свою норму на ноль процентов ↓↓
Джойстик для «Кардпьютера»
Блин, ничего не понимаю. Чтобы было удобнее играть в эмуляторе в игры на «Кардпьютере» мне нужен вот такой джойстик, как у меня на картинке. Другие модели не подходят. Называется он Joystick2 и доступен для заказа везде — на «Озоне», «Алиэкспрессе» и так далее.
Я уже везде попытался заказать, но каждый раз картина одна и та же — заказ болтается несколько дней, потом отменяется и деньги возвращаются. На «Озоне» один из продавцов, у которых я пытался его заказать, написал мне, что такой модели уже нет, не выпускается, поэтому заказ придётся отменить.
Окей, я верю, нет, не выпускается, но почему, товарищи продавцы, после отмена заказа вы не закрываете позицию в своих магазинах, а продолжаете продавать товар, которого у вас нет? Я проверил карточки всех товаров, за которые мне вернули деньги — ни один продавец не снял этот джойстик с продажи.
Блин, ничего не понимаю. Чтобы было удобнее играть в эмуляторе в игры на «Кардпьютере» мне нужен вот такой джойстик, как у меня на картинке. Другие модели не подходят. Называется он Joystick2 и доступен для заказа везде — на «Озоне», «Алиэкспрессе» и так далее.
Я уже везде попытался заказать, но каждый раз картина одна и та же — заказ болтается несколько дней, потом отменяется и деньги возвращаются. На «Озоне» один из продавцов, у которых я пытался его заказать, написал мне, что такой модели уже нет, не выпускается, поэтому заказ придётся отменить.
Окей, я верю, нет, не выпускается, но почему, товарищи продавцы, после отмена заказа вы не закрываете позицию в своих магазинах, а продолжаете продавать товар, которого у вас нет? Я проверил карточки всех товаров, за которые мне вернули деньги — ни один продавец не снял этот джойстик с продажи.
PHP: (unset) и (void)
Язык PHP часто ругают. Большей частью — заслуженно, но часть давно решённых проблем тянется за ним, как смрад за народным ополчением в Средние века. Ненавистники часто глубоко в проблемы языка не вникают — им неинтересно, перепечатывая аргументы, которые много лет как несостоятельны.
Как мне кажется, самая большая проблема языка сейчас — это его процедурное прошлое, которое торчит изо всех щелей. Но есть и менее заметная, при этом системная проблема: у языка нет «великодушного пожизненного диктатора», как у Пайтона или Линукса, или более «сыгранной» команды, определяющей долгосрочные цели в развитии языка.
Некоторые разумные, в общем-то, вещи забрасываются (например, SPL — стандартная библиотека), некоторые — не дожимаются до конца (например, в языке появились обнуляемые типы, но приведение одного типа к другому этого не учитывает).
Я хочу поворчать на одну из таких мелких тем.
В ПХП с незапамятных времён была конструкция
Тем не менее, я со временем догадался, что можно её приспособить, чтобы обозначать, что чем-либо возвращаемое значение я не просто забыл как-то использовать, а вполне сознательно выкинул. Что-то вроде такого:
Мне казалось и до сих пор кажется, что это полезный паттерн. В «Гоу», например, в этом случае нужно присвоить возвращаемое значение специальной переменной _, иначе компилятор ругается.
И вот, много лет назад, в версии 7.2 использование
А в версии 8.5 внезапно та же идея возвращается под новым именем, только теперь нужно писать
Да, имя более логичное, да функционал расширен — появился ещё и новый атрибут, да синтаксис изменён — результат
Язык PHP часто ругают. Большей частью — заслуженно, но часть давно решённых проблем тянется за ним, как смрад за народным ополчением в Средние века. Ненавистники часто глубоко в проблемы языка не вникают — им неинтересно, перепечатывая аргументы, которые много лет как несостоятельны.
Как мне кажется, самая большая проблема языка сейчас — это его процедурное прошлое, которое торчит изо всех щелей. Но есть и менее заметная, при этом системная проблема: у языка нет «великодушного пожизненного диктатора», как у Пайтона или Линукса, или более «сыгранной» команды, определяющей долгосрочные цели в развитии языка.
Некоторые разумные, в общем-то, вещи забрасываются (например, SPL — стандартная библиотека), некоторые — не дожимаются до конца (например, в языке появились обнуляемые типы, но приведение одного типа к другому этого не учитывает).
Я хочу поворчать на одну из таких мелких тем.
В ПХП с незапамятных времён была конструкция
(unset), которая приводила любой тип к NULL. Не самое очевидное название, поэтому, наверное, и применял её мало кто — не всем очевидно чем она могла бы быть полезна.Тем не менее, я со временем догадался, что можно её приспособить, чтобы обозначать, что чем-либо возвращаемое значение я не просто забыл как-то использовать, а вполне сознательно выкинул. Что-то вроде такого:
class Smth
{
private function saveSmth($stat)
{
// тут какие-то действия
// прошло успешно, но выше где-то может быть и false
return true;
}
public function doSmth($action, $stat)
{
// тут какой-то код
// результат вызова метода ниже мы игнорируем
(unset) $this->saveSmth($stat);
return true;
}
}
Мне казалось и до сих пор кажется, что это полезный паттерн. В «Гоу», например, в этом случае нужно присвоить возвращаемое значение специальной переменной _, иначе компилятор ругается.
И вот, много лет назад, в версии 7.2 использование
(unset) в коде стало вызывать предупреждение об устаревшей конструкции. Я тогда попытался как-то повлиять на это, но не осилил пробиться к людям принимающим решение и махнул рукой. Позже в версии 8.0 конструкцию убрали вовсе и много лет не в языке было хорошего способа делать то же самое.А в версии 8.5 внезапно та же идея возвращается под новым именем, только теперь нужно писать
(void), а не (unset).Да, имя более логичное, да функционал расширен — появился ещё и новый атрибут, да синтаксис изменён — результат
(unset) можно было чем-то присвоить, с (void) так поступать нельзя. Но почему столько лет назад выплеснули с водой ребёнка и вообще никак не смотрели в эту сторону?❤2👍2
PHP: (binary)
И, чтобы, как говорится «два раза не вставать», расскажу про самую бесполезную конструкцию в ПХП. Я знаю, что не так много народу знают про (
Одна из неприятных вещей, которые остались в ПХП с давних времён — работа встроенных функций и конструкций только со строками в однобайтовых кодировках. С этим можно жить — есть библиотеки, которые позволяют замести эту проблему под ковёр, но сам язык помогать вам в этом не будет.
Какое-то время назад с этим пытались что-то сделать — в шестой, так и не вышедшей версии ПХП строки решили разделить на два типа —
К сожалению, работу доделать не осилили, очень уж было сложно, особенно тяжело шло с расширениями. В итоге версия так и не вышла, но так как о ней широко раструбили, пришлось даже пропустить номер — после ПХП 5 вышла сразу седьмая версия.
Но некоторые отголоски этой не совершившейся революции всё-таки можно обнаружить и в современных версиях ПХП.
В версии 8.5 по сих пор есть преобразование типа
И эту всю красоту из языка почему-то не удалили, а от
И, чтобы, как говорится «два раза не вставать», расскажу про самую бесполезную конструкцию в ПХП. Я знаю, что не так много народу знают про (
unset), про которую я ворчал вчера, а про эту вещицу, как мне кажется, знает ещё меньше программистов на ПХП.Одна из неприятных вещей, которые остались в ПХП с давних времён — работа встроенных функций и конструкций только со строками в однобайтовых кодировках. С этим можно жить — есть библиотеки, которые позволяют замести эту проблему под ковёр, но сам язык помогать вам в этом не будет.
Какое-то время назад с этим пытались что-то сделать — в шестой, так и не вышедшей версии ПХП строки решили разделить на два типа —
binary, это однобайтовые строки, которые остались в языке до сих пор и string — строки с Юникодом.К сожалению, работу доделать не осилили, очень уж было сложно, особенно тяжело шло с расширениями. В итоге версия так и не вышла, но так как о ней широко раструбили, пришлось даже пропустить номер — после ПХП 5 вышла сразу седьмая версия.
Но некоторые отголоски этой не совершившейся революции всё-таки можно обнаружить и в современных версиях ПХП.
В версии 8.5 по сих пор есть преобразование типа
(binary), которое является алиасом к (string), но выдаёт предупреждение об устаревшей конструкции. А кроме этого, у строки есть префикс b: b"string", придуманный для того, чтобы создавать в ПХП6 однобайтовые строки. В современных версиях ПХП он, разумеется, ничего со строкой не делает.И эту всю красоту из языка почему-то не удалили, а от
(unset) избавились. Никакой логики.❤1👍1
Фотография как источник
Многие подмечают, что дни фотографии как надёжного источника доказательства какого-либо факта сочтены. Думаю, с текущими нейросетями достоверно нарисовать получится что угодно, если сильно заморочиться.
Я тоже размышлял про это, даже рассуждал про возврат к плёнке, но это тоже не панацея — наверняка есть способы проэкспонировать цифровую фотку на плёнку так, чтобы это было неотличимо от обычного снимка, просто ещё нужды в этом особой нет.
Но я недавно задумался о другом — о фотографии как источнике каких-то знаний об обычной жизни. Просматривая старые бумажные фотографии в фотоальбоме, я могу сделать какие-то выводы по деталям заднего плана — по мебели, которая попала в кадр, или одежде, которую носят люди на фото. Я понимаю, что это реальные фотографии, в них ничего не подрисовано.
Если же попробовать изучить, например, мою жизнь по фото на моём сайте, не факт, что мелкие детали на фотографиях соответствуют моменту и месту съёмки — у меня много лет нет ни одной необработанной, так или иначе, нейросетями фотографии.
Понятно, что иногда я убираю что-то очень незначительное — вроде грязи в кадре или бликов на стекле, но бывает, что часть интересного мне объекта чем-то заслонена, и я прошу нейросетку убрать лишнее, а в освободившееся пространство что-то врисовывается, наверняка далёкое от истины.
Как пример, фотография ниже, сделанная изнутри здания казанского айти-парка. Сравните мою фотку (думаю легко понять где она) и результат обработки нейросетями.
Понятно, что информацию о тех участках, которые заслонены металлическими конструкциям, взять неоткуда, нейросеть там нарисовала отсебятину, пусть и достоверную. Если туда попали какие-то важные детали, то они только по случайности совпадут с реальностью.
Многие подмечают, что дни фотографии как надёжного источника доказательства какого-либо факта сочтены. Думаю, с текущими нейросетями достоверно нарисовать получится что угодно, если сильно заморочиться.
Я тоже размышлял про это, даже рассуждал про возврат к плёнке, но это тоже не панацея — наверняка есть способы проэкспонировать цифровую фотку на плёнку так, чтобы это было неотличимо от обычного снимка, просто ещё нужды в этом особой нет.
Но я недавно задумался о другом — о фотографии как источнике каких-то знаний об обычной жизни. Просматривая старые бумажные фотографии в фотоальбоме, я могу сделать какие-то выводы по деталям заднего плана — по мебели, которая попала в кадр, или одежде, которую носят люди на фото. Я понимаю, что это реальные фотографии, в них ничего не подрисовано.
Если же попробовать изучить, например, мою жизнь по фото на моём сайте, не факт, что мелкие детали на фотографиях соответствуют моменту и месту съёмки — у меня много лет нет ни одной необработанной, так или иначе, нейросетями фотографии.
Понятно, что иногда я убираю что-то очень незначительное — вроде грязи в кадре или бликов на стекле, но бывает, что часть интересного мне объекта чем-то заслонена, и я прошу нейросетку убрать лишнее, а в освободившееся пространство что-то врисовывается, наверняка далёкое от истины.
Как пример, фотография ниже, сделанная изнутри здания казанского айти-парка. Сравните мою фотку (думаю легко понять где она) и результат обработки нейросетями.
Понятно, что информацию о тех участках, которые заслонены металлическими конструкциям, взять неоткуда, нейросеть там нарисовала отсебятину, пусть и достоверную. Если туда попали какие-то важные детали, то они только по случайности совпадут с реальностью.
👍4
Локальные адреса в «Веб-архиве»
Я тут благодаря «Виоле» обнаружил кое-что интересное в «Веб-архиве».
В моей версии этого браузера я делал логику, согласно которой, если домен не открывается, то я пытаюсь найти и открыть его самую раннюю сохранённую копию в «Веб-архиве».
В браузере есть несколько встроенных ссылок на разные давно не существующие сайты, и эта логика нужна, чтобы внешние ссылки с них нормально открывались.
Я не учёл, что локальные адреса —
Оказалось, «Веб-архив» хранит зеркала каких-то случайных сайтов, доступных по локальным адресам и портам бог знает каких сетей. Я навскидку посмотрел несколько адресов —
Поскольку снапшоты за разное время в «Веб-архив» попали из разных источников, по одному и тому же адресу в таймлайне «Веб-архива» лежат копии разных сайтов. Хорошо бы их найти все и выкачать — это, судя по всему, какой-то совершенно новый пласт информации, сохранённый там!
Попробовать что ли сканер написать, который составит список всего этого богатства…
Я тут благодаря «Виоле» обнаружил кое-что интересное в «Веб-архиве».
В моей версии этого браузера я делал логику, согласно которой, если домен не открывается, то я пытаюсь найти и открыть его самую раннюю сохранённую копию в «Веб-архиве».
В браузере есть несколько встроенных ссылок на разные давно не существующие сайты, и эта логика нужна, чтобы внешние ссылки с них нормально открывались.
Я не учёл, что локальные адреса —
localhost, 127.0.0.1 и прочие — не должны искаться в «Веб-архиве», ведь из интернета их не видно. Вчера случайно я запустил «Виолу» с URL https://localhost/, и вдруг у меня начал открываться какой-то сайт на японском.Оказалось, «Веб-архив» хранит зеркала каких-то случайных сайтов, доступных по локальным адресам и портам бог знает каких сетей. Я навскидку посмотрел несколько адресов —
127.0.0.1:8080, 192.168.0.1 и так далее — и обнаружил около десятка разных сайтов. И это только вершина айсберга!Поскольку снапшоты за разное время в «Веб-архив» попали из разных источников, по одному и тому же адресу в таймлайне «Веб-архива» лежат копии разных сайтов. Хорошо бы их найти все и выкачать — это, судя по всему, какой-то совершенно новый пласт информации, сохранённый там!
Попробовать что ли сканер написать, который составит список всего этого богатства…
🔥4🤔1
Посканировал сеть «Веб-архива»
Я был излишне оптимистичен по поводу сканирования локальных адресов «Веб-архива» — не учёл, что таких адресов потенциально несколько миллионов. Была мысль сканировать параллельно, но тоже не вышло — «Веб-архив» через какое-то время банит, если слишком интенсивно бомбить его запросами.
В итоге я взял самый маленький диапазон и стал смотреть только 80-й порт, открывая самый последний снапшот, иначе придётся сканировать много лет.
Даже в таком режим нашлось куча веб-интерфейсов каких-то внутренних систем — роутер «Микротик», мониторинг «Нагиос», несколько серверов «Петабокса» и прочее, а так же множество каких-то частных страничек.
Например, на моём скриншоте найденный блог с рассказом как автор гнобит своего коллегу. Копия этого сайта, кстати, есть на «Веб-архиве» и по внешнему адресу, правда я не в курсе есть ли там этот рассказ.
Я был излишне оптимистичен по поводу сканирования локальных адресов «Веб-архива» — не учёл, что таких адресов потенциально несколько миллионов. Была мысль сканировать параллельно, но тоже не вышло — «Веб-архив» через какое-то время банит, если слишком интенсивно бомбить его запросами.
В итоге я взял самый маленький диапазон и стал смотреть только 80-й порт, открывая самый последний снапшот, иначе придётся сканировать много лет.
Даже в таком режим нашлось куча веб-интерфейсов каких-то внутренних систем — роутер «Микротик», мониторинг «Нагиос», несколько серверов «Петабокса» и прочее, а так же множество каких-то частных страничек.
Например, на моём скриншоте найденный блог с рассказом как автор гнобит своего коллегу. Копия этого сайта, кстати, есть на «Веб-архиве» и по внешнему адресу, правда я не в курсе есть ли там этот рассказ.
👍2
«Invalid page» и «тост»
Недавно у одного из клиентов развалилась часть таблицы в «Постгресе» — в логах видно, что при чтении не совпадают контрольные суммы. Ничего особо нового — за последние несколько лет встречал эту проблему несколько раз у разных клиентов и даже описал алгоритм восстановления базы из разных источников у себя на сайте.
Там у меня в заметке есть хранимая функция, которая сканирует таблицу и сообщает какие именно строки требуется восстановить. Но в этот раз она мне, как ни странно, не помогла — завершилась, не выдав ничего. Раньше она осечек не давала и я, не поверив себе, даже запустил её дважды.
Долго разбирался в чём дело, разобрался. Принцип работы моей функции такой — она вынимает каждую строку, если получает ошибку, то сообщает об этом. Но оказалось, что если какие-либо разрушенные данные лежат в «тостах» (это механизм автоматического сжатия и выноса больших значений полей в «Постгресе»), то этого недостаточно. Видимо «Постгрес» в реальности не достаёт эти данные, пока они не понадобятся для чего-либо и поэтому ошибки не возникает.
В итоге я переделал хранимку — передаю всё строку целиком в функцию
Недавно у одного из клиентов развалилась часть таблицы в «Постгресе» — в логах видно, что при чтении не совпадают контрольные суммы. Ничего особо нового — за последние несколько лет встречал эту проблему несколько раз у разных клиентов и даже описал алгоритм восстановления базы из разных источников у себя на сайте.
Там у меня в заметке есть хранимая функция, которая сканирует таблицу и сообщает какие именно строки требуется восстановить. Но в этот раз она мне, как ни странно, не помогла — завершилась, не выдав ничего. Раньше она осечек не давала и я, не поверив себе, даже запустил её дважды.
Долго разбирался в чём дело, разобрался. Принцип работы моей функции такой — она вынимает каждую строку, если получает ошибку, то сообщает об этом. Но оказалось, что если какие-либо разрушенные данные лежат в «тостах» (это механизм автоматического сжатия и выноса больших значений полей в «Постгресе»), то этого недостаточно. Видимо «Постгрес» в реальности не достаёт эти данные, пока они не понадобятся для чего-либо и поэтому ошибки не возникает.
В итоге я переделал хранимку — передаю всё строку целиком в функцию
ROW_TO_JSON, чтобы прочитались и значения из «тостов». Это помогло, функция стала работать как и задумывалось.
CREATE OR REPLACE FUNCTION check_table(table_name TEXT)
RETURNS void AS $$
DECLARE
rec RECORD;
row_data RECORD;
BEGIN
FOR rec IN EXECUTE format('SELECT ctid::text AS ctid_str, id FROM %I', table_name)
LOOP
BEGIN
EXECUTE format('SELECT * FROM %I WHERE ctid = %L::tid', table_name, rec.ctid_str)
INTO STRICT row_data;
row_data := ROW(ROW_TO_JSON(row_data)); /* to read the toasts */
EXCEPTION WHEN others THEN
RAISE WARNING 'CTID: %, ID: %, Error: %', rec.ctid_str, rec.id, SQLERRM;
END;
END LOOP;
END;
$$ LANGUAGE plpgsql;
🔥2
«Кардпьютер» и джойстик
Так я и не смог заказать нужный мне джойстик к «Кардпьютеру» — как я уже рассказывал везде конец истории один — отправляю деньги, продавец выжидает, потом отменяет заказ, деньги возвращаются. В итоге сделал ход конём — купил джойстик другой версии и просто дописал прошивку, чтобы она его поддерживала.
Оказалось несложно — я нашёл коммит, где добавили поддержку другого джойстика, там очень понятный код. Заработало сразу почти правильно, только пришлось поменять верх и низ местами. Эмулятор я пока не нашёл (если предположить, что он существует), а сама прошивка компилируется очень просто, запишу себе, чтобы не забыть:
Так я и не смог заказать нужный мне джойстик к «Кардпьютеру» — как я уже рассказывал везде конец истории один — отправляю деньги, продавец выжидает, потом отменяет заказ, деньги возвращаются. В итоге сделал ход конём — купил джойстик другой версии и просто дописал прошивку, чтобы она его поддерживала.
Оказалось несложно — я нашёл коммит, где добавили поддержку другого джойстика, там очень понятный код. Заработало сразу почти правильно, только пришлось поменять верх и низ местами. Эмулятор я пока не нашёл (если предположить, что он существует), а сама прошивка компилируется очень просто, запишу себе, чтобы не забыть:
# установка всех нужных инструментов
curl -fsSL -o get-platformio.py \
https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
python3 get-platformio.py
# сборка прошивки
~/.platformio/penv/bin/pio run
👍4
Утилита «s-tools» (часть первая)
Вчера перед сном вспоминал, что ещё я такого программировал в детстве, о чём можно упомянуть, кроме программы «Паррот», о которой я рассказывал около месяца назад. Вспомнил про утилиту
Название придумал я. Расшифровывалось оно как «Stepanischevs’ tools», а сокращение намеренно было сделано похожим на «stools» — «табуретки», поэтому я нередко так эту утилиту и называл.
Это был набор утилит в одном файле и самый объёмный код на ассемблере, который мы когда-либо писали. Со временем мы сделали свой собственный «швейцарский нож» для командной строки, решая какие-то свои проблемы и натаскивая понравившиеся идеи.
Утилиты вызывались, если я ничего не путаю, при помощи номерного ключа, после которого шли параметры самой утилиты. К каждой из них прилагалось описание на русском языке. Часть программ была «резидентами» (TSR), и некоторые из них умели загружаться в HMA.
В ДОСе были специальные вызовы, при помощи которых можно было выделить там себе кусочек памяти. Но поскольку это был один сегмент, программам приходилось модифицировать себя, чтобы поменять у себя внутри адреса переходов, либо использовать только ближние вызовы (
Я попытался вспомнить что именно умели «табуретки», но вспомнил только малую часть, разумеется. Утилиты в моём списке идут не по порядку следования, я его, конечно, не помню.
Первое, что я вспомнил — в отдельном файле
Вторая утилита умела поднимать тайминги памяти на PC XT, идея была подсмотрена в каком-то журнале и позже, когда я начал лаборантить во время учёбы в Университете, она мне пригодилась — у меня был целый класс с этими компьютерами. Они были настолько медленными, что было заметно как буква за буквой выводится текст на экране. Так что даже небольшое поднятие производительности добавляло комфорта.
Третья утилита решала проблему буфера клавиатуры. Компьютеры в те времена работали так медленно, что не успевали обрабатывать весь ввод пользователя, он попадал в специальный буфер, а уже оттуда его забирали программы. Если вы печатали достаточно быстро, вы вполне могли упереться в размер буфера и услышать звуковой сигнал, означающий, что вам надо подождать.
Буфер можно было переместить, но недалеко — в пределах, если ничего не путаю, первых 64 килобайт ОЗУ. Я тогда нашёл в ДОС два неиспользуемых зарезервированных участка памяти, куда, на выбор, и переставлял этот буфер. Второй из этих участков в какой-то момент стала использовать программа сжатия диска на лету, которой мы тогда пользовались, из-за чего однажды разрушилась файловая система нашего компьютера (он был один на двоих).
Запись в моём ежедневнике, который я использовал как блокнот с описанием вызовов для выделения памяти в HMA ↓↓
Вчера перед сном вспоминал, что ещё я такого программировал в детстве, о чём можно упомянуть, кроме программы «Паррот», о которой я рассказывал около месяца назад. Вспомнил про утилиту
s-tools, которую мы писали вдвоём с братишкой на ассемблере x86 под ДОС.Название придумал я. Расшифровывалось оно как «Stepanischevs’ tools», а сокращение намеренно было сделано похожим на «stools» — «табуретки», поэтому я нередко так эту утилиту и называл.
Это был набор утилит в одном файле и самый объёмный код на ассемблере, который мы когда-либо писали. Со временем мы сделали свой собственный «швейцарский нож» для командной строки, решая какие-то свои проблемы и натаскивая понравившиеся идеи.
Утилиты вызывались, если я ничего не путаю, при помощи номерного ключа, после которого шли параметры самой утилиты. К каждой из них прилагалось описание на русском языке. Часть программ была «резидентами» (TSR), и некоторые из них умели загружаться в HMA.
В ДОСе были специальные вызовы, при помощи которых можно было выделить там себе кусочек памяти. Но поскольку это был один сегмент, программам приходилось модифицировать себя, чтобы поменять у себя внутри адреса переходов, либо использовать только ближние вызовы (
jmp near или call near).Я попытался вспомнить что именно умели «табуретки», но вспомнил только малую часть, разумеется. Утилиты в моём списке идут не по порядку следования, я его, конечно, не помню.
Первое, что я вспомнил — в отдельном файле
s-tools.ovl лежал шрифт, который мы вынули из какой-то утилиты. Буквы в нём казались больше, хоть и занимали то же стандартное для ДОСа знакоместо. Этим шрифтом наша утилита умела заменять системный. Расширение файла объясняется тем, что мы тогда неправильно понимали термин «оверлей» и думали, что это просто любой внешний ресурс.Вторая утилита умела поднимать тайминги памяти на PC XT, идея была подсмотрена в каком-то журнале и позже, когда я начал лаборантить во время учёбы в Университете, она мне пригодилась — у меня был целый класс с этими компьютерами. Они были настолько медленными, что было заметно как буква за буквой выводится текст на экране. Так что даже небольшое поднятие производительности добавляло комфорта.
Третья утилита решала проблему буфера клавиатуры. Компьютеры в те времена работали так медленно, что не успевали обрабатывать весь ввод пользователя, он попадал в специальный буфер, а уже оттуда его забирали программы. Если вы печатали достаточно быстро, вы вполне могли упереться в размер буфера и услышать звуковой сигнал, означающий, что вам надо подождать.
Буфер можно было переместить, но недалеко — в пределах, если ничего не путаю, первых 64 килобайт ОЗУ. Я тогда нашёл в ДОС два неиспользуемых зарезервированных участка памяти, куда, на выбор, и переставлял этот буфер. Второй из этих участков в какой-то момент стала использовать программа сжатия диска на лету, которой мы тогда пользовались, из-за чего однажды разрушилась файловая система нашего компьютера (он был один на двоих).
Запись в моём ежедневнике, который я использовал как блокнот с описанием вызовов для выделения памяти в HMA ↓↓
Утилита «s-tools» (часть вторая, заключительная)
Четвёртая утилита меняла палитру экрана. Если верно помню, в каком-то альтернативном драйвере
Следующая утилита выводила по нажатию какой-то горячей клавиши (наверное её можно было задавать) таблицу ASCII. Для нас с братишкой это было очень полезно — мы много программировали и таблица символов была часто нужна. Таких программ хватало, но мы написали свою.
Шестая утилита умела записывать в файл нажатые клавиши, а потом их «проигрывать» — это было удобно для автоматизации каких-нибудь механических действий. Помню долго думал как выходить из такой программы, ведь надо как-то различать ситуации, когда мы ещё записываем клавиши и когда мы хотим выйти. На мышь тогда полагаться было нельзя — её могло не быть на компьютере, где использовалась утилита, поэтому я придумал выходить по троекратному нажатию каких-то модификаторов — шифту, контролу, альту или, может, всем сразу, не помню точно.
Седьмую утилиту я написал уже когда учился в Университете. Как я уже упоминал, я тогда работал лаборантом и, как и все лаборанты, нередко во что-то играл в рабочее время — когда занимались студенты, просто сидеть и смотреть за классом было скучно. Поскольку моей начальнице это не нравилось, я написал утилиту, которая скрывала экран игры при помощи горячей клавиши. В стандартном ДОСе тех времён многозадачности не было, так что это был единственный способ.
Позже кто-то принёс альтернативную утилиту, которая умела скрывать экран ещё и игр, который использовали «расширители ДОС» (например, «Дум»), чего моя утилита не умела. Я старался доработать своё решение, но так и не понял как это сделать.
Восьмую утилиту, возможно, следовало бы вспомнить первой. Не исключено, что с неё и начались «табуретки», но это не точно. В те времена мы много работали с дискетами и, если на них портился сектор на нулевой дорожке, где помещалось оглавление файловой системы, то её можно было выбрасывать — несмотря на то, что другие сектора в таких случаях помечались как «плохие» и просто не использовались, тот же фокус с нулевой дорожкой не проходил.
Один из наших соотечественников написал драйвер
В «табуретках» была резидентная программа, которая по горячей клавише патчила память
Больше никаких подробностей я чётко не помню.
Смутно припоминаю, что была некая утилита для сканирования файловой системы, которую точно писал братишка, но что она делала вспомнить не могу. Кроме того, было какое-то гадание по «алгоритму Пифагора» — там были какие-то математические операцией с датой и, возможно, временем рождения, получались какие-то цифры, которые как-то интерпретировались. Это были 90-е, тогда все увлекались мистикой.
«Волков Командер» с цветом панелей в альтернативной палитре ↓↓
Четвёртая утилита меняла палитру экрана. Если верно помню, в каком-то альтернативном драйвере
ANSI.SYS была возможность заменить палитру на более глубокую. Нам это так понравилось, что мы позаимствовали эту идею. Я помню, что легкомысленно-синий цвет «Нортона Командера» превращался в что-то похожее, что я попытался изобразить на скриншоте ниже.Следующая утилита выводила по нажатию какой-то горячей клавиши (наверное её можно было задавать) таблицу ASCII. Для нас с братишкой это было очень полезно — мы много программировали и таблица символов была часто нужна. Таких программ хватало, но мы написали свою.
Шестая утилита умела записывать в файл нажатые клавиши, а потом их «проигрывать» — это было удобно для автоматизации каких-нибудь механических действий. Помню долго думал как выходить из такой программы, ведь надо как-то различать ситуации, когда мы ещё записываем клавиши и когда мы хотим выйти. На мышь тогда полагаться было нельзя — её могло не быть на компьютере, где использовалась утилита, поэтому я придумал выходить по троекратному нажатию каких-то модификаторов — шифту, контролу, альту или, может, всем сразу, не помню точно.
Седьмую утилиту я написал уже когда учился в Университете. Как я уже упоминал, я тогда работал лаборантом и, как и все лаборанты, нередко во что-то играл в рабочее время — когда занимались студенты, просто сидеть и смотреть за классом было скучно. Поскольку моей начальнице это не нравилось, я написал утилиту, которая скрывала экран игры при помощи горячей клавиши. В стандартном ДОСе тех времён многозадачности не было, так что это был единственный способ.
Позже кто-то принёс альтернативную утилиту, которая умела скрывать экран ещё и игр, который использовали «расширители ДОС» (например, «Дум»), чего моя утилита не умела. Я старался доработать своё решение, но так и не понял как это сделать.
Восьмую утилиту, возможно, следовало бы вспомнить первой. Не исключено, что с неё и начались «табуретки», но это не точно. В те времена мы много работали с дискетами и, если на них портился сектор на нулевой дорожке, где помещалось оглавление файловой системы, то её можно было выбрасывать — несмотря на то, что другие сектора в таких случаях помечались как «плохие» и просто не использовались, тот же фокус с нулевой дорожкой не проходил.
Один из наших соотечественников написал драйвер
pu_1700, позволявший выбрать другую дорожку для хранения оглавления. Было только одно неудобство — драйвер приходилось запускать с разными параметрами руками, чтобы работать с разными дискетами.В «табуретках» была резидентная программа, которая по горячей клавише патчила память
pu_1700, меняя дорожку с оглавлением. Это позволяло быстро переключаться между стандартными и нестандартными дискетами.Больше никаких подробностей я чётко не помню.
Смутно припоминаю, что была некая утилита для сканирования файловой системы, которую точно писал братишка, но что она делала вспомнить не могу. Кроме того, было какое-то гадание по «алгоритму Пифагора» — там были какие-то математические операцией с датой и, возможно, временем рождения, получались какие-то цифры, которые как-то интерпретировались. Это были 90-е, тогда все увлекались мистикой.
«Волков Командер» с цветом панелей в альтернативной палитре ↓↓
🔥4❤3🤩2
Бытовое: город завалило
В этом году в Казани очень снежная зима: дорожные службы стараются изо всех сил, но не справляются, когда снег идёт несколько дней подряд. Во всех дворах — огромные кучи снега, вывозить не успевают. Кажется, прошлой зимой было то же самое: я помню, мы кучу денег заплатили за вывоз снега в коммунальных счетах.
Много засыпанных по крышу машин даже в рабочие дни — люди, похоже, даже не пытаются выехать. Легковушки вязнут в хрущёвских дворах, где не особо чистят; много машин стоит, мигая аварийками, на поворотах — там скапливается снег, когда его счищают с больших дорог.
В такую зиму я очень рад, что у нас гибридная машина: четыре независимых двигателя, почти 500 лошадиных сил суммарно. Пока проезжаем везде безо всяких проблем — только подвеску переводим в верхнее положение. Машина у нас ещё и очень тяжёлая за счёт батареи, поэтому сцепление у колёс очень хорошее — помогает в сложных ситуациях. В общем, китайцы — молодцы, умеют делать.
Из-за суровой зимы — кроме снега, ещё и очень морозно — в город налетело много интересных птиц: мы сегодня видели дрозда-рябинника, говорят, попадаются ещё свиристели и чечётки. Надо будет поприглядываться к птицам — обычно я не очень-то на них обращаю внимание.
Формально — двадцать дней до весны, но зима как будто только-только разошлась. Ближе к концу месяца решили слетать в Стамбул на три дня: там будут выходные, начнём весну досрочно.
Дрозд-рябинник прилетел в соседний двор ↓↓
В этом году в Казани очень снежная зима: дорожные службы стараются изо всех сил, но не справляются, когда снег идёт несколько дней подряд. Во всех дворах — огромные кучи снега, вывозить не успевают. Кажется, прошлой зимой было то же самое: я помню, мы кучу денег заплатили за вывоз снега в коммунальных счетах.
Много засыпанных по крышу машин даже в рабочие дни — люди, похоже, даже не пытаются выехать. Легковушки вязнут в хрущёвских дворах, где не особо чистят; много машин стоит, мигая аварийками, на поворотах — там скапливается снег, когда его счищают с больших дорог.
В такую зиму я очень рад, что у нас гибридная машина: четыре независимых двигателя, почти 500 лошадиных сил суммарно. Пока проезжаем везде безо всяких проблем — только подвеску переводим в верхнее положение. Машина у нас ещё и очень тяжёлая за счёт батареи, поэтому сцепление у колёс очень хорошее — помогает в сложных ситуациях. В общем, китайцы — молодцы, умеют делать.
Из-за суровой зимы — кроме снега, ещё и очень морозно — в город налетело много интересных птиц: мы сегодня видели дрозда-рябинника, говорят, попадаются ещё свиристели и чечётки. Надо будет поприглядываться к птицам — обычно я не очень-то на них обращаю внимание.
Формально — двадцать дней до весны, но зима как будто только-только разошлась. Ближе к концу месяца решили слетать в Стамбул на три дня: там будут выходные, начнём весну досрочно.
Дрозд-рябинник прилетел в соседний двор ↓↓
❤3
RTX 6000 Pro
Настройка больших языковых моделей на оборудовании — какая-то совершенно отдельная дисциплина. Сколько ни набирайся опыта, а жизнь всё равно привносит что-то новое. Вот, например, мы недавно настраивали небольшую — 30 миллиардов параметров — модель на кластере 8×Nvidia H100. Так много, потому что она будет обслуживать запросы десятков тысяч пользователей.
В ходе экспериментов выяснилось, что лучше всего себя ведёт конфигурация из четырёх одинаковых моделей, установленных на паре видеокарт каждая. Я это связываю с тем, что в других конфигурациях либо слишком интенсивный обмен по NVLink, либо, напротив, модель слишком «зажата» по памяти — на кеши выделено слишком мало.
В общем, пока всё приходится испытывать на практике — выходит новое оборудование и надо понимать можем ли мы его рекомендовать клиентам.
В прошлом году появилась очень интересная карта — RTX 6000 Pro. Мы её заказали, чтобы погонять на ней наши модели. Она втрое дешевле, чем H100, при этом производительность у неё далеко не втрое ниже. В аренду мы почему разным причинам не смогли её получить, поэтому купили.
На фотографии я держу её в руке — оцените, какая она огромная, и поверьте: очень увесистая. Тут она в исполнении Workstation Edition, поэтому у неё есть собственное охлаждение; обычно в серверных картах оно только пассивное.
Погоняем тесты, потом постараюсь что-нибудь про это написать.
Настройка больших языковых моделей на оборудовании — какая-то совершенно отдельная дисциплина. Сколько ни набирайся опыта, а жизнь всё равно привносит что-то новое. Вот, например, мы недавно настраивали небольшую — 30 миллиардов параметров — модель на кластере 8×Nvidia H100. Так много, потому что она будет обслуживать запросы десятков тысяч пользователей.
В ходе экспериментов выяснилось, что лучше всего себя ведёт конфигурация из четырёх одинаковых моделей, установленных на паре видеокарт каждая. Я это связываю с тем, что в других конфигурациях либо слишком интенсивный обмен по NVLink, либо, напротив, модель слишком «зажата» по памяти — на кеши выделено слишком мало.
В общем, пока всё приходится испытывать на практике — выходит новое оборудование и надо понимать можем ли мы его рекомендовать клиентам.
В прошлом году появилась очень интересная карта — RTX 6000 Pro. Мы её заказали, чтобы погонять на ней наши модели. Она втрое дешевле, чем H100, при этом производительность у неё далеко не втрое ниже. В аренду мы почему разным причинам не смогли её получить, поэтому купили.
На фотографии я держу её в руке — оцените, какая она огромная, и поверьте: очень увесистая. Тут она в исполнении Workstation Edition, поэтому у неё есть собственное охлаждение; обычно в серверных картах оно только пассивное.
Погоняем тесты, потом постараюсь что-нибудь про это написать.
🔥4
«Виола»: нейросеть «Опус 4.6»
Недавно компания «Антропик» выпустила новую нейросеть для программирования — «Опус 4.6». Я с большим интересом слежу за тем, что они выпускают, потому что, по моему опыту, их сетки программируют лучше любых других.
У меня в загашнике есть несколько сложных задач и с каждым обновлением программирующих нейросетей этот список потихоньку убывает — те задачи, которые ещё недавно были им не по зубам, постепенно поддаются.
«Опус 4.6» я тестировал на задаче реализации типа нумерации для списков в «Виоле» — в найденных мной материалах упоминается, что такая возможность должна быть, но она так и осталась нереализованной.
До выхода «Опуса 4.6» нейросети с этой задачей не справлялись — либо ломали код, либо делали довольно кривую реализацию. «4.6» с задачей справилась. Рабочую реализацию она написала примерно с третьего раза, но я считаю, что это очень хороший результат, учитывая скорость её работы. Правда было два неприятных момента.
Во-первых, она самовольно ограничила вложенность списков шестью уровнями. Я нашёл это место на ревью кода, попросил убрать, и сеть довольно легко избавилась от ограничения. То есть никакой реальной необходимости в этом не было.
Во-вторых, в оригинальном коде есть баг — он рисует нумерацию графикой на элементе определённой ширины. Если числа очень большие, они начинают обрезаться, на римских числах это очень быстро становится проблемой.
С этим багом мы боролись очень долго. Конечно, это ожидаемо — «Курсор», — среда разработки, которую я использую, почему-то до сих пор не умеет самостоятельно скриншотить разрабатываемые приложения. Там где нейросеть не может быстро получить обратную связь, всё сильно замедляется, потому что мне приходится вмешиваться — делать скриншот, добавлять его в окно чата и описывать что не так.
Недавно компания «Антропик» выпустила новую нейросеть для программирования — «Опус 4.6». Я с большим интересом слежу за тем, что они выпускают, потому что, по моему опыту, их сетки программируют лучше любых других.
У меня в загашнике есть несколько сложных задач и с каждым обновлением программирующих нейросетей этот список потихоньку убывает — те задачи, которые ещё недавно были им не по зубам, постепенно поддаются.
«Опус 4.6» я тестировал на задаче реализации типа нумерации для списков в «Виоле» — в найденных мной материалах упоминается, что такая возможность должна быть, но она так и осталась нереализованной.
До выхода «Опуса 4.6» нейросети с этой задачей не справлялись — либо ломали код, либо делали довольно кривую реализацию. «4.6» с задачей справилась. Рабочую реализацию она написала примерно с третьего раза, но я считаю, что это очень хороший результат, учитывая скорость её работы. Правда было два неприятных момента.
Во-первых, она самовольно ограничила вложенность списков шестью уровнями. Я нашёл это место на ревью кода, попросил убрать, и сеть довольно легко избавилась от ограничения. То есть никакой реальной необходимости в этом не было.
Во-вторых, в оригинальном коде есть баг — он рисует нумерацию графикой на элементе определённой ширины. Если числа очень большие, они начинают обрезаться, на римских числах это очень быстро становится проблемой.
С этим багом мы боролись очень долго. Конечно, это ожидаемо — «Курсор», — среда разработки, которую я использую, почему-то до сих пор не умеет самостоятельно скриншотить разрабатываемые приложения. Там где нейросеть не может быстро получить обратную связь, всё сильно замедляется, потому что мне приходится вмешиваться — делать скриншот, добавлять его в окно чата и описывать что не так.
👍3
О, автор прошивки с эмуляторами для «Кардпьютера» принял мой патч для поддержки джойстика версии 1.1, теперь можно собирать новые версии прошивки без лишних телодвижений!
🔥5👍1
Подписки
Недавно один приятель, когда мы затронули тему подписок на разные стриминговые сервисы и онлайн-кинотеатры, очень удивился тому, что я ни на что не подписан. У меня буквально ни одной подписки, за исключением бесполезного сейчас «Кинопоиска», который достался мне вместе с «Яндекс Плюсом».
Зато у меня три подписки на нейроинструменты: «Нанабанану», где я обрабатываю фотографии; «ЧатГПТ» — для глубокого поиска и обработки текстов; и «Курсор», где я программирую.
Все сервисы заграничные, и меня очень раздражает, как во всех них реализована оплата. Я не держу на карте, которой их оплачиваю, много денег и, конечно же, время от времени, когда очередной сервис пытается списать деньги, их там не хватает.
Почему-то российские сервисы умеют автоматически повторять платёж: стоит положить деньги на соответствующую карту, и сервис их списывает. По неведомой мне причине заграничные сервисы так не умеют. Если платёж не удалось снять, то дальше это как будто только мои проблемы — приходится искать, в какую же щель силком запихнуть доллары, чтобы сервис их увидел.
Сегодня я борюсь с «Курсором». Уже оплатил всё вручную, но «Курсор» деньги всё равно не видит, хотя прошло уже несколько часов.
Недавно один приятель, когда мы затронули тему подписок на разные стриминговые сервисы и онлайн-кинотеатры, очень удивился тому, что я ни на что не подписан. У меня буквально ни одной подписки, за исключением бесполезного сейчас «Кинопоиска», который достался мне вместе с «Яндекс Плюсом».
Зато у меня три подписки на нейроинструменты: «Нанабанану», где я обрабатываю фотографии; «ЧатГПТ» — для глубокого поиска и обработки текстов; и «Курсор», где я программирую.
Все сервисы заграничные, и меня очень раздражает, как во всех них реализована оплата. Я не держу на карте, которой их оплачиваю, много денег и, конечно же, время от времени, когда очередной сервис пытается списать деньги, их там не хватает.
Почему-то российские сервисы умеют автоматически повторять платёж: стоит положить деньги на соответствующую карту, и сервис их списывает. По неведомой мне причине заграничные сервисы так не умеют. Если платёж не удалось снять, то дальше это как будто только мои проблемы — приходится искать, в какую же щель силком запихнуть доллары, чтобы сервис их увидел.
Сегодня я борюсь с «Курсором». Уже оплатил всё вручную, но «Курсор» деньги всё равно не видит, хотя прошло уже несколько часов.
😁4😢1
Стены в кафе
Мы с прошлого года пытаемся расширить кафе — взяли в аренду соседнее большое помещение и делаем там ремонт. Не очень ходко всё идёт, но к финалу двигается. А так как помещения мы арендуем в старинном здании, когда сняли весь гипсокартон, я не мог не посмотреть что же за ним скрывалось.
Оказалось, что часть дома, по всей видимости, строилась позднее, потому что, на стене отчётливо видны заложенные дверь и окно. Ведут они с соседнее помещение, там где у нас сейчас кафе и с той стороны их, кстати, не видно. Если дверь может быть межкомнатной, то с окном непонятно — оно-то между комнатами зачем?
Внутри противоположной стены открылся ещё и старый домоход в копоти, но его уже заделали, не успел сфотографировать. При этой печки нет, то ли разобрали, то ли она была в каком-то другом помещении. Что интересно — дымоход идёт горизонально, в верхней части стены, непонятно зачем так сделано.
Мы с прошлого года пытаемся расширить кафе — взяли в аренду соседнее большое помещение и делаем там ремонт. Не очень ходко всё идёт, но к финалу двигается. А так как помещения мы арендуем в старинном здании, когда сняли весь гипсокартон, я не мог не посмотреть что же за ним скрывалось.
Оказалось, что часть дома, по всей видимости, строилась позднее, потому что, на стене отчётливо видны заложенные дверь и окно. Ведут они с соседнее помещение, там где у нас сейчас кафе и с той стороны их, кстати, не видно. Если дверь может быть межкомнатной, то с окном непонятно — оно-то между комнатами зачем?
Внутри противоположной стены открылся ещё и старый домоход в копоти, но его уже заделали, не успел сфотографировать. При этой печки нет, то ли разобрали, то ли она была в каком-то другом помещении. Что интересно — дымоход идёт горизонально, в верхней части стены, непонятно зачем так сделано.
👍4
Острова: предвкушаю
Ещё даже весна не наступила, а я уже предвкушаю, как мы с друзьями снова поедем летом на необитаемые острова — мы уже который год туда ездим, ночуя в палатке.
И который год пытаемся подобрать правильную обувь, чтобы с комфортом ходить по тамошнему каменистому берегу. Кроссовки неудобны тем, что промокают, в сапогах жарко, так что в прошлом году, закрывая сезон, мы пообещали друг другу испытать «кроксы».
Никто из нас их никогда не носил, но со стороны они выглядят подходящей обувью — мягкие, дышащие, и носок у них закрыт, в отличие от тапок — не поранишься о камни. Не уверен, что они не будут спадать при ходьбе с мокрой ноги, но почему бы не попробовать?
Правда, честно говоря, я совсем забыл про то обещание, пока в какой-то ленте мне не попались «кроксы» в виде Сквидварда. Не знаю, какой чёрт меня дёрнул их заказать: я и мультик-то этот не смотрел, но в тот момент у меня в голове выстроилась какая-то неопровержимая логика — остров, вода, Сквидвард живёт в воде, да и парни посмеются, когда я их надену. В общем, заказал.
Чтобы они не лежали просто так, надел их в офис — у нас там многие ходят в «кроксах». Они вообще как-то незаметно стали очень распространённой офисной обувью. А так как смысл «кроксов», в моём понимании, — быть уродливыми, у меня сейчас самые топовые (читай — самые уродливые) «кроксы» во всём офисе.
Правда на острова их везти как-то уже и жалко.
Ещё даже весна не наступила, а я уже предвкушаю, как мы с друзьями снова поедем летом на необитаемые острова — мы уже который год туда ездим, ночуя в палатке.
И который год пытаемся подобрать правильную обувь, чтобы с комфортом ходить по тамошнему каменистому берегу. Кроссовки неудобны тем, что промокают, в сапогах жарко, так что в прошлом году, закрывая сезон, мы пообещали друг другу испытать «кроксы».
Никто из нас их никогда не носил, но со стороны они выглядят подходящей обувью — мягкие, дышащие, и носок у них закрыт, в отличие от тапок — не поранишься о камни. Не уверен, что они не будут спадать при ходьбе с мокрой ноги, но почему бы не попробовать?
Правда, честно говоря, я совсем забыл про то обещание, пока в какой-то ленте мне не попались «кроксы» в виде Сквидварда. Не знаю, какой чёрт меня дёрнул их заказать: я и мультик-то этот не смотрел, но в тот момент у меня в голове выстроилась какая-то неопровержимая логика — остров, вода, Сквидвард живёт в воде, да и парни посмеются, когда я их надену. В общем, заказал.
Чтобы они не лежали просто так, надел их в офис — у нас там многие ходят в «кроксах». Они вообще как-то незаметно стали очень распространённой офисной обувью. А так как смысл «кроксов», в моём понимании, — быть уродливыми, у меня сейчас самые топовые (читай — самые уродливые) «кроксы» во всём офисе.
Правда на острова их везти как-то уже и жалко.
😁3👍1
Бытовое: заснеженный Стамбул
Напрасно я надеялся сбежать от зимы в Стамбул: сегодня написала экскурсовод, которую мы там наняли, и сказала, что в воскресенье в Стамбуле ожидается снег. Ну что за шутки, зима? Я надеялся хоть на какое-то тепло. А тут… снег, серьёзно?!
Ещё почему-то перед этой поездкой я необъяснимо волнуюсь — причины мне не ясны. Да, давно не ездили никуда без тура, но ведь и не в первый раз: где мы только не были в таком формате. Вроде всё есть — паспорта, билеты, деньги, отель, экскурсовод, трансфер, — а всё равно переживаю.
Это непрошеное волнение, плюс погода, плюс дорога (очень не люблю проводить много времени в пути), — и я уже начинаю жалеть, что вообще всё это затеял: потратил деньги, семью потащил. Быстрее бы уже в самолёт — там уже поздно размышлять, не плюнуть ли на всё и не остаться ли дома.
Напрасно я надеялся сбежать от зимы в Стамбул: сегодня написала экскурсовод, которую мы там наняли, и сказала, что в воскресенье в Стамбуле ожидается снег. Ну что за шутки, зима? Я надеялся хоть на какое-то тепло. А тут… снег, серьёзно?!
Ещё почему-то перед этой поездкой я необъяснимо волнуюсь — причины мне не ясны. Да, давно не ездили никуда без тура, но ведь и не в первый раз: где мы только не были в таком формате. Вроде всё есть — паспорта, билеты, деньги, отель, экскурсовод, трансфер, — а всё равно переживаю.
Это непрошеное волнение, плюс погода, плюс дорога (очень не люблю проводить много времени в пути), — и я уже начинаю жалеть, что вообще всё это затеял: потратил деньги, семью потащил. Быстрее бы уже в самолёт — там уже поздно размышлять, не плюнуть ли на всё и не остаться ли дома.
👍1
Книги: «Вопрос и ответ»
Вчера прочитал вторую книгу из серии «Трилогия хаоса» Патрика Несса. По первой книге в 2021 году был снят фильм «Поступь хаоса», может, кто-то видел. Продолжения, кажется, не было, хотя на самом деле это трилогия.
После книг про Боба как-то тяжело шло: уж очень много испытаний проходят там главные герои. Учитывая, что и в жизни проблем хватает, пропускать через себя проблемы героев ещё и в выдуманном мире — как-то чересчур. Мне хотелось бы наоборот — какого-то эскапизма.
Зато в этой книге самый достоверный антогонист, которого я вообще могу вспомнить. Он раз за разом обманывал не только главных героев, но и меня. Раз за разом я почти ему верил, иногда всерьёз сомневаясь, — может быть я неправильно понял, может он это всё делает на благо? Не помню, чтобы я ещё где-то так искренне обманывался.
Не думаю, что это спойлер, когда читаешь книгу, какой-то частью мозга всё равно понимаешь, что примирения не будет, но почему-то всё равно хочется поверить в лучшие мотивы, такой парадокс.
Вчера прочитал вторую книгу из серии «Трилогия хаоса» Патрика Несса. По первой книге в 2021 году был снят фильм «Поступь хаоса», может, кто-то видел. Продолжения, кажется, не было, хотя на самом деле это трилогия.
После книг про Боба как-то тяжело шло: уж очень много испытаний проходят там главные герои. Учитывая, что и в жизни проблем хватает, пропускать через себя проблемы героев ещё и в выдуманном мире — как-то чересчур. Мне хотелось бы наоборот — какого-то эскапизма.
Зато в этой книге самый достоверный антогонист, которого я вообще могу вспомнить. Он раз за разом обманывал не только главных героев, но и меня. Раз за разом я почти ему верил, иногда всерьёз сомневаясь, — может быть я неправильно понял, может он это всё делает на благо? Не помню, чтобы я ещё где-то так искренне обманывался.
Не думаю, что это спойлер, когда читаешь книгу, какой-то частью мозга всё равно понимаешь, что примирения не будет, но почему-то всё равно хочется поверить в лучшие мотивы, такой парадокс.
🔥1