Отмена пуска

Недавно, в связи с обсуждением адекватности перевода кнопки «Start» → «Пуск» в «Виндоуз 95» в одном из телеграмных чатов, я вспомнил, что в ранних версиях этой системы был забавный баг — кнопку «Пуск» можно было убрать с экрана, закрыв как приложение.

Для этого надо было установить на ней фокус, нажать Alt+- и выбрать пункт «Закрыть». Мы в те годы иногда так подшучивали над друг другом или над студентами в компьютерных классах Университета, где я тогда лаборантил.

Кроме этого «Пуск» можно было ещё и двигать. Например, поставив её посередине панели задач. И это задолго до «Виндоуз 11»! Правда нормально это не работало — при запуске приложений «Пуск» пропадала за ними.

Скриншот рабочего стола Windows 95: иконки «Мой компьютер», «Входящие», «Корзина», «Настройка сети Microsoft» и открытое контекстное меню с выделенной командой «Закрыть Alt+F4».

1 комментарий

«Packard Bell Desktop»

В статье «Оболочки MS-DOS: за пределами Norton Commander» увидел оболочку «Packard Bell Desktop» начала девяностых. Я с ней никогда не сталкивался, и это немудрено: всё, что она умела, — запускать программы, тогда как в то время, когда у меня появился ПК, существовали и более интересные оболочки.

Мне захотелось упомянуть про неё, потому что мне в ней понравился экран смены курсора мыши. Отдельные курсоры для двух цветов кожи (думаю, это исключительная инклюзивность для программы того времени), «женские» и «мужские» курсоры, курсоры для левши и правши!

Мне кажется удивительным, что кто-то в то далёкое время подумал о таком!

Диалоговое окно настройки курсора: выбор из 12 вариантов (стрелки, руки) с инструкцией «Click on the pointer you want, then click Save» и кнопками Cancel/Save.

2 комментария

Папа один дома

Маколей Калкин недавно рассказывал в интервью, что его дети (у него два сына — им сейчас 3 и 4 года) смотрят с ним иногда фильм «Один дома», но даже не подозревают, что главную роль в фильме играет их папа. Он ревностно оберегает эту тайну, ожидая момента, когда они раскроют её самостоятельно.

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

2 комментария

«Виола»: растягивание окна

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

Дело в том, что у меня окно «Виолы» нормально не тянулось — если попробовать изменить размеры, то в окне появлялись чёрные полосы, положение элементов плыло, в общем пользоваться этим было невозможно. Я, понадеявшись на то, что оригинальная «Виола» просто не умела растягиваться, заблокировал во всех окнах такую возможность.

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

Видимо проблема в каких-то особенностях работы X11 на «МакОСи», возможно он работает не в точности так же, как в 90-е, когда этот браузер писали.

К проблеме растягивания я уже пытался подступиться, но, потратив несколько часов, отступил. На этот раз я попробовал новый подход. В прошлый раз нейросети пробовали какие-то гипотезы, добавляя всё новые и новые правки и запутывая код, но ничего не помогало. Часть проблем мы смогли победить, но последняя — появляющаяся при изменении размеров рамка вокруг заголовка и урла страницы всё никак не давалась.

Я сообразил, что проект, видимо, просто слишком огромный. У нейросети «глаза разбегаются» в попытке сгенерировать фиксы, так как дело может оказаться в чём угодно.

Поэтому я попросил нейросеть сгенерировать небольшое приложение, которое компактно повторило бы проблему, чтобы там её править. Удивительно, но мой любимый «Опус 4.5» с задачей не справился — он слепил какого-то уродца из случайных компонентов, а потом всё пытался переключиться на основное приложение.

Выручил «ГПТ-5.2». Он собрал хороший прототип, где мы воспроизвели проблему и в конечном счёте её победили. Дальше я опять переключился на «Опус» и мы благополучно перенесли решение в основной код.

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

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

Скриншот окна с заголовком «test_title_component» и текстом: «The World Wide Web project%http://info.cern.ch/hypertext/WWW/TheProject.html
Прототип, который помог компактно воспроизвести проблему и победить её

Оставить комментарий

«Виола»: тег CHANGED

Если верить «Википедии», веб появился в 1989 году. Его ранний период очень плохо сохранился, даже проект «Веб-архив» тут не помощник — ссылки времён начала интернета в нём не открываются. Поэтому если интересует информация тех времён, приходится заниматься археологией — выискивать обрывки информации в других источниках и собирать воедино.

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

Так случилось и с тегом CHANGED. Я давно заметил его в коде, но не понимал как он должен работать. По коду про него было известно, что он должен был выделять часть текста оттенком жёлтого (точнее — цветом LemonChiffon1), имел два атрибута ID и IDREF и при этом был не блочным.

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

Тогда я решил, что это просто ошибка в коде и реализовал тег так как я его понимаю. Но было непонятно что делать с атрибутами, особенно с IDREF. По имени понятно, что это какая-то ссылка на ID, но как это должно работать? В общем, реализацию я просто выкинул, так как она точно не соответствовала тому как это задумывалось.

Я записал себе в список дел когда-нибудь разобраться с этим тегом и пошёл дальше. Прошло несколько недель и на днях мне повезло.

В архивах начала 90-х почтовой рассылки WWW-Talk, я неожиданно обнаружил ссылки на DTD (это специальный формат в котором описывается как браузер должен парсить теги) стандарта HTML+. Я знал, что это название одного из ранних стандартов HTML и подумал, что там могло оказаться упоминание CHANGED с, чем чёрт не шутит, каким-то подробностями.

Ни одна ссылка не работала, зато по имени htmlplus.dtd нашлось несколько уцелевших спецификаций, где, как я и надеялся, упоминался искомый тег с небольшим описанием:

<!-- change bars defined by a matched pair of CHANGED elements:

        <changed id=z34> changed text <changed idref=z34>

 This tag can't act as a container, since changes don't respect
 the nesting implied by paragraphs, headers, lists etc.
-->

<!ELEMENT CHANGED - O EMPTY>

<!ATTLIST CHANGED -- one of id and idref is always required --
    id      ID      #IMPLIED -- signals start of changes --
    idref   IDREF   #IMPLIED -- signals end of changes -->

Собственно, из этого кусочка всё стало ясно. Тег задуман таким образом, чтобы как бы «выпадать» из обычной логики вложенности тегов — так как выделение текста может пересекать границы других тегов.

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

Этот тег не дожил до нашего времени, потому что его было предложено заменить на два других — ADDED и REMOVED, которые позже превратились в более привычные нам INS и DEL.

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

Один из таких способов, кстати, — банальное документирование. В процессе реставрации «Виолы», у меня набралось довольно много документации, благо при помощи нейросети это делать очень просто — даёшь команду что ещё учесть и она сама вписывает новые знания в подходящее место.

Скриншот веб-страницы «Test CHANGED Tag - HTML+ Change Bars» с примерами выделения изменённых фрагментов текста жёлтым фоном и заголовками разделов.

3 комментария

Первая учительница и кирпич

В 1984-м году я пошёл в школу. Это была ничем не примечательная школа №7 в моём родном Лениногорске, единственным достоинством которой была близость к дому. Родители тогда только получили новую квартиру и в сентябре я пошёл в школу в новом районе.

В школе меня распределили в класс «Д». Сейчас я знаю, что чем ближе буква к началу алфавита, тем более способные дети собраны в классе. Я помню, что единственным учебным навыком, с которым я пришёл в школу, был счёт до ста. Писать и читать я не умел, так что, наверное, буква «Д» для меня тогда была закономерна.

Чёрно-белое фото: женщина вверху, мальчик внизу; надпись «Учительница первая моя» и «Школьные годы, горестные... с дружбой книгою, песней...

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

Когда я уже во взрослом возрасте занимался каратэ, сенсей как-то рассказывал, что кость у человека не сплошная, в ней есть множество мелких полостей. Они нужны, чтобы соблюдать баланс между весом кости и её прочностью. Для того, чтобы кость стала прочнее, в каратэ используют «набивку» — нанесение ударов по твёрдым поверхностям, чтобы снизить чувствительность, а так же, так говорил наш сенсей, чтобы полости в кости начали заполняться костным материалом, увеличивая прочность кости.

Схема продольного разреза кости с подписями: губчатое вещество в эпифизах, компактное вещество в диафизе и костномозговая полость в центре.

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

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

В тот день мы лазили с друзьями по недостроенному зданию недалеко от дома. Охраны и рабочих не было, поэтому мы беспрепятственно его обследовали. Но вскоре это занятие нам наскучило. И тут мне пришла в голову интересная, как мне тогда показалось, идея — залезть на бетономешалку, которая стояла рядом, разбежаться и запрыгнуть с неё в окно второго этажа.

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

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

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

Шарахнуло сначала по голове, потом по правой руке. Удивительно, но голова сильно не болела и не кружилась. Мой друг детства Дима Полуян, с которым мы лазили по той стройке, сильно перепугался, настоял, чтобы я сел на ступеньки первого этажа и начал меня расспрашивать о самочувствии, поэтому я хорошо помню тогдашнее своё состояние.

Я мало разбираюсь в прочности человеческих костей, но иногда думаю: не будь у меня такого своеобразного «тренинга» от первой учительницы, четырёхкилограммовый силикатный кирпич, летящий со второго этажа навстречу тринадцатилетнему мне, вполне мог бы оказаться фатальным.

Получается, что мне таким странным образом повезло, что у нас в школе практиковались телесные наказания. Сюжет, достойный Чака Паланика.

Голова, кстати, и потом тоже не болела. Но очень сильно болела рука, которой досталось после головы. Иногда она вдруг начинала очень противно ныть, но со временем и это тоже прошло.

Позже, уже на медкомиссии в военкомате, на стандартный вопрос о том, не было ли у меня сотрясений, я упомянул этот эпизод, и меня направили на рентген головы. В черепе обнаружились «пальцевидные вдавления», как я позже прочитал в своей карточке, но откуда они у меня — от указок, сломанных о мою голову в первых классах, или от кирпича — я не знаю.

12 комментариев

Cardputer ADV

Жена подарила на Новый год «Кардпьютер» — это такой небольшой специализированный компьютер. Утверждается, что он размером с кредитную карту, отсюда и название. Я прикладывал, так оно и есть, только толщина другая — примерно с мой палец. Но всё равно он довольно компактный.

Вообще, он предназначен для прототипирования, для этого у него целая куча разных разъёмов, но мне он в таком качестве малоинтересен, зато на него можно накатить «Гейм Стейшн» и играть в игры через эмуляторы.

На скриншоте у меня запущен «Принц Персии» в эмуляторе «Нинтендо». Экранчик, конечно, совсем маленький, но в таком форм-факторе у него совершено непередаваемый вайб компьютеров 90-х, которого нет у того же «Анберника», как будто смотришь на маленький «Спектрум».

Надо бы посмотреть что он ещё умеет, не успел ещё как следует с ним познакомиться. Знаю, что к нему можно докупить модуль «ЛоРа» и подключить к «мештастику», но пока что-то не нашёл этот модуль в продаже.

Белый карманный компьютер Cardputer ADV с экраном, на котором запущена пиксельная игра, и клавиатурой; в правом верхнем углу установлен модуль StampS3A.

15 комментариев

Cardputer: Game Boy

Посмотрел несколько эмуляторов, доступных в рамках «Гейм Стейшн» на «Кардпьютере». Больше всего мне понравилось играть в эмуляторе «Гейм Боя».

У остальных приставок экран больше и при масштабировании под «Кардпьютер» чаще всего разрешения не хватает, чтобы нормально всё разглядеть. Если фигурки видно более-менее, то буквы прочитать чаще всего не получается — очень уж сильно они искажаются.

Правда, даже если видно всё нормально, в динамические игры всё равно не поиграешь нормально — кнопочки уж очень маленькие. Хотя, может это дело привычки? Я заказал себе небольшой джойстик, посмотрим как с ним будет — «Гейм Стейшн» его поддерживает «из коробки».

Проблема в том, что джойстиков для «Кардпьютера» несколько, а «Гейм Стейшн» поддерживает, насколько видно из документации, только один из них. Надеюсь китайцы не подведут и пришлют нужный. Буду ждать, обещают в конце месяца.

Скриншоты пиксельной RPG: слева — герой в зелёном зале с полками и водой, справа — диалог «Кто? Зельда? Нет, меня зовут» с персонажами в комнате.

Добавлено 19.01.2026: оба китайца (заказывал в двух разных магазинах) без лишних слов отменили заказ. Как я понял, эти джойстики больше не производятся.

Оставить комментарий

«Mörderische Entscheidung» (1991)

Сегодня я узнал, что в 1991 году был снят эксперементальный двухканальный фильм «Mörderische Entscheidung» («Убийственные решения»).

Премьера состоялась с Германии 15 декабря 1991 года одновременно на общенациональных каналах Das Erste и ZDF. Два канала синхронно показали две параллельные версии фильма: одну — глазами героини, другую — глазами героя. По сюжету молодая женщина сталкивается с опасным психопатом-начальником, а её возлюбленный пытается её спасти. Одна версия фильма показывала события с точки зрения этой героини, вторая — с точки зрения её возлюбленного.

Зрителям предлагалось активно переключаться между каналами в процессе просмотра. В анонсах подчёркивалось, что «зритель сам ведёт камеру — благодаря пульту», и при умелом переключении можно составить «свой собственный детектив».

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

Помимо Германии, проект был реализован и в других странах. Показы состоялись в Австрии, Нидерландах, Италии и Испании.

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

Мужчина в коричневой куртке смотрит вниз, на переднем плане надпись «STEFAN».
Кадр из фильма с одним из героев — Штефаном

Фильм так же выходил на полуцифровом полуанаголовом носителе «Лейзер-диск» для очень редкой и не получившей особой популярности приставки «Pioneer LaserActive». Из обзора на эту приставку я об этом фильме и узнал.

Много позже, 1 января 2000 года в Дании состоялся грандиозный проект «D-Dag» («День Д»), созданный группой режиссёров движения «Догма 95». В рамках «Дня Д» четыре разных фильма о взаимосвязанных героях транслировались одновременно на четырёх каналах, причём дополнительно были задействованы ещё и каналы с комментариями авторов — всего зрителям предлагалось семь различных потоков контента.

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

Жаль, что редкие эксперименты в этом направлении не вылились в новый телевизионный формат. Я бы в детстве, мне кажется, рад был бы смотреть что-то такое в качестве разнообразия.

Оставить комментарий

«Вампус» и ChatGPT 5.2

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

Ничего особо интересного, кстати, команд — кот наплакал. Некоторые вполне узнаваемы (cat, например, или pwd), некоторые выглядят непривычно (chdir вместо cd), а некоторых нет вовсе (sed, awk).

Зато есть несколько игр, одна из которых — моя старая знакомая, игра «Hunt the Wumpus». Моё знакомство с ней началось с поисков игры «Убей вампира» под «Радио-86РК», первый компьютер, на котором я начал программировать. Я про это много писал.

Игра текстовая и очень простая для программирования, я её несколько раз реализовывал, например, для наручных часов «The Sensor Watch», но это не значит, что я умею в неё играть! Я как-то ни разу не сел и не разобрался какой стратегии надо придерживаться, чтобы выиграть.

В этот раз я тоже не стал заморачиваться, а вместо этого решил посмотреть — выстроит ли стратегию какая-нибудь современная нейросеть. Взял «ЧатГПТ 5.2» в рассуждающем режиме, зря я что ли за неё плачу́?

Первые три игры нейросеть проигрывала, выясняя правила (они отличаются от реализации к реализации), а после, получив все подробности, начала выигрывать. Я сыграл с её подсказками пять партий, все пять она выиграла.

Сетка утверждает, что единственная возможность проиграть — на первом ходу, там слишком мало информации, а дальше, если играть аккуратно, проиграть уже невозможно.

Скриншот чата: игрок в Wumpus анализирует комнату 20, ИИ советует проверить ветку 13. Показаны команды m 2 и m 13.

3 комментария

99 бутылок: Basic в UNIXv4

А раз я узнал как запустить UNIXv4, грех не воспользоваться возможностью посмотреть что там за языки программирования есть на борту. Ассемблер и Си меня не заинтересовали, но оказалось, что в комплект входит довольно интересный «Бейсик», маленький, но мощный.

На нём я и решил написать «Песню о пиве».

86. Basic в UNIXv4 работает в двух режимах — интерактивном, в нём операторы вводятся без номера и выполняются сразу же, и программном, где номер строки указывается, а оператор запоминается для последующего выполнения. Этими двумя режимами можно пользоваться вперемешку.

Редактора нет, набивать программу нужно сразу в буфер интерпретатора, либо создавать при помощи стороннего редактора. Важно не ошибиться, так как редактировать программу можно только полной заменой строки, указав новому варианту тот же номер.

Почти во всём это довольно стандартный «Бейсик», но тут есть две особенности.

Во-первых, строки программы можно вызывать, как подпрограммы, прямо по номеру. Причём параметры передаются не через глобальные переменные, как обычно, а получаются при помощи функции arg(…). То есть 2000(i) — это вызов подпрограммы, которая начинается с номера 2000 и заканчивается, когда встретит первый попавшийся return, причём return может вернуть значение, если это требуется.

Во-вторых, логические выражения порождают нули и единицы, их можно использовать в арифметических выражениях и передавать, например, в goto. Так умеет далеко не каждый «Бейсик». А благодаря тому, что операторы вычисляются слева направо, можно писать вот такое: 1 < 3 < 2. Будет ноль.

У меня в коде есть пугающая конструкция goto 2110 + 10 * ((arg(1) > 0) + (arg(1) > 1)). Выглядит страшно, признаюсь, я её специально запутал, так, мне кажется, лучше передаётся дух эпохи, судя по старым программам, так вполне могли тогда написать.

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

Кроме числового типа (числа с плавающей точкой тоже поддерживаются), есть массивы, причём даже двумерные с индексами от нуля до 32768.

10 for i=0 98
20 2000(99-i)
30 2100(98-i)
40 print
50 next
60 print "No more bottles of beer on the wall, no more bottles of beer."
70 print "Go to the store and buy some more, 99 bottles of beer on the wall."
80 done

2000 if arg(1) == 1 goto 2030
2010 print arg(1) " bottles of beer on the wall, " arg(1) " bottles of beer."
2020 return
2030 print "1 bottle of beer on the wall, 1 bottle of beer."
2040 return

2100 goto 2110 + 10 * ((arg(1) > 0) + (arg(1) > 1))
2110 print "Take one down and pass it around, no bottles of beer on the wall."
2115 return
2120 print "Take one down and pass it around, 1 bottle of beer on the wall."
2125 return

2130 print "Take one down and pass it around, " arg(1) " bottles of beer on the wall."
2135 return

run

Программу, которая у меня получилась и её вывод я заскриншотил для истории. Интересно, конечно, когда в последний раз на этом «Бейсике» кто-то что-то писал, кроме меня.

Скриншот терминала с программой на BASIC, реализующей песню «99 бутылок пива на стене», и её выводом: цикл от 99 до 0 с фразами «Take one down and pass it around».

2 комментария

Крылатые фразы

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

Настолько ли важно, что именно Ленина вспоминают в связи с фразой «учиться, учиться и учиться», а не Чехова, например? Хотя он за три года до Ленина писал:

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

Важен ли контекст сказавшего фразу, чтобы утвердить её значение? Видимо Ленин как-то по-особенному относился к учёбе? А Чехов относился как-то иначе?

Возможно дело в былых масштабах личности Ленина и остальных претендентов на эту фразу, что делало её как будто весомее.

Да ведь и ленинская фраза, по сути, выдрана из контекста. Я её всю жизнь воспринимал как «учиться — важно», хотя Ленин говорил про тяжёлые условия в которых рабочие «растут над собой»:

В то время, как образованное общество теряет интерес к честной, нелегальной литературе, среди рабочих растёт страстное стремление к знанию и к социализму, среди рабочих выделяются настоящие герои, которые — несмотря на безобразную обстановку своей жизни, несмотря на отупляющую каторжную работу на фабрике, — находят в себе столько характера и силы воли, чтобы учиться, учиться и учиться и вырабатывать из себя сознательных социал-демократов, «рабочую интеллигенцию».

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

А недавно я услышал фразу «играешь в глупые игры — получаешь глупые призы». Она, мой взгляд, без указания авторства ничего не теряет, фраза остроумная, смысловая и очень сильная.

Вывод, наверное, такой.

Похоже, вопрос не в том, «кто сказал», а в том, зачем мне это знать. Иногда имя нужно как подпорка: мысль сама по себе ещё не держится, и мы берём её «в кредит» у чьего-то авторитета. А иногда подпорка только мешает — хочется оставить фразу жить отдельно, потому что она попадает точно и без паспорта.

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

7 комментариев

Особый режим «Веб-архива»

Вчера я, занимаясь «Виолой», случайно узнал Полишинеля. Подозреваю, что многие знают, а для меня это новость.

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

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

Я пытался с этим бороться, вырезая ненужную мне вставку, но это не всегда нормально работает. Вчера я догадался погуглить есть ли какой-нибудь способ сказать «Веб-архиву», чтобы он не добавлял баннер на страницу. Оказывается существует простой способ!

В ссылку после даты надо всего лишь добавить слово id_!

Например, эта страница откроется с баннером:
https://web.archive.org/web/19971210184100/http://info.cern.ch/

А эта — без:
https://web.archive.org/web/19971210184100id_/http://info.cern.ch/

Скриншот веб-страницы с заголовком «Simple stylesheets test» и текстом о влиянии трёх стилевых таблиц на оформление документа, включая выравнивание заголовков и стилизацию секций.

11 комментариев

Марк Робер передаёт привет

Детские Наборы Марка Робера, которые я раньше покупал на «Ебее», теперь вполне официально продаются на российских интернет-базарах и даже обходятся дешевле, чем при заказе из-за границы. Мы уже купили всё что есть в продаже — все шесть штук. Три в прошлом году и ещё три — в этом.

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

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

Прикольно, что в  одном из наборов попалась записка! Мы с дочкой, как истинные фанаты, надеемся, что это писал сам Марк Робер! Сегодня написал ему в одну из соцсетей, спросил, посмотрим что ответит.

На обложке книги «Sinclair ZX Spectrum: a visual compendium» лежит записка: «Thank you for your purchase! Enjoy! Have a great day!! please leave a review.

Оставить комментарий

Дочка и домашка

Рукописные вычисления: сумма цифр 2021 равна 5, перечислены перестановки цифр (2201, 2102, 2120 и др.), некоторые зачёркнуты или обведены, включая 12, 20, 10, 027.

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

Сделала всё обязательное, а так как до сна ещё оставалась какое-то время, решила сделать и задачку со звёздочкой. Я подсел ближе — стало интересно как она с ней справится.

Задание следующее: в 2021 году сумма цифр была 5, надо сказать через какое наименьшее число лет повторится такая же сумма тех же цифр, какой это будет год.

Решила, на мой взгляд, вполне эффективно — сначала выписала все варианты на первые две позиции — «10», «12», «20», «21», «22». Потом вычеркнула оттуда «10» и «12», потому что год получался в прошлом, следом убрала 20, где оба варианта не подошли, потом взяла «21», где взяла минимальный год из «2102» и «2120» и таким образом нашла правильный ответ.

Я, кстати, тоже никакого способа, кроме перебора, больше не знаю. На всякий случай перепроверил ответ на Пайтоне:

from itertools import permutations
print(min(x for x in (int(''.join(x)) for x in permutations('2021')) if x > 2021)) # 2102

46 комментариев

«Виола» и безопасность

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

Конечно, в 1991-м году, когда «Виола» только появился, об этом было рано думать. Всё-таки программист-одиночка не мог заниматься сразу всем, а работы и без того хватало — столько всего надо было реализовать, я хорошо это понимаю.

В 1995-м году, когда вышла последняя версия браузера, защита уже была необходима и, как оказалось, автор «Виолы» это тоже понимал. В частности в тринадцатой главе своей недописанной книги, он пишет:

At this point you’re probably thinking how great this this, but how do I know that the applets I run won’t delete my files, smuggle info out of my system, and do other mischiffs?

The answer is that these imported objects can’t (or shouldn’t be able to).

The current security policy is pretty straightforward and somewhat limiting for the objects. It basically goes this way: all imported objects are marked as untrusted, and as such these imported objects have no system priviledges, have no access to sub interpreters, and can not coarse other objects to execute scripts arbitrarily.

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

Скриншот окна «Privilege Elevation Request» в Viola WWW Browser: запрос полного доступа для TCP-соединения с pebble.ebay.gnn.com:7777, кнопки Trust/Don’t Trust.

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

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

Из защищённого режима браузер переключается в режим без защиты только с разрешения пользователя, переключение инициируется, если во время интерпретации скрипта встречается вызов, требующий переключения в доверенный режим (например, работа с файловой системой или открытие сокета), а так же, если на странице установлен тег SECURITY с атрибутом LEVEL=0.

Оказывается, автор браузера предосмотрел такой тег, но не успел реализовать. Название атрибута в коде уже было, а вот его значение — это моё обоснованное предположение. В коде есть центральный флаг securityMode, принимающий два значения — 0 (система безопасности отключена) и 1. Я предположил, что атрибут LEVEL должен влиять на значение этой переменной.

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

Решается она просто. Например, можно добавить в диалог галочку «больше не спрашивать» и не позволять его вызывать до перехода на другую страницу, но это настолько не в духе браузеров тех годов, что я тоже не стал этого делать. По-честному, от кого защищаться?

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

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

Но не будь нейросетей… Я уже не раз повторял это в частных разговорах, но, кажется, ни разу не писал у себя в блоге: без нейросетей я бы этим заниматься не стал. Усилие от реализации этих доработок без нейросетей во много раз перекрывает удовольствие от этой работы.

2 комментария

Выкинули ёлку

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

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

Мне не раз говорили, что срубать ёлки — плохо, потому что страдают леса. Ребята, какие ещё леса? Покупайте ёлки на официальных ёлочных базарах, где продаются ёлки из питомников, специально выращенные к празднику. Мимо одного из таких больших питомников я часто езжу, вижу как их там растят от и до.

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

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

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

5 комментариев

«Мы — Легион. Мы — Боб»

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

Похоже книга «Мы — Легион. Мы — Боб» Денниса Тейлора как раз из таких. Не скажу, что у Боба, главного героя проблемы незначительные, но решаются они без особых сложностей, да и сильных, долговременных эмоций он по этому поводу не испытывает.

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

Оставить комментарий

«В поисках утраченного ковчега»

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

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

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

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

Можно подумать, что фильм совсем детский и дети на такое внимание не обращают, но даже дочка отметила как нелепо они прячутся.

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

Четыре фигурки персонажей в разных костюмах: в шляпе и кожаной куртке, в белом тюрбане, в чёрном костюме с красным галстуком и в военной форме с фуражкой, стоят на сером фоне.
Коллекционные фигурки персонажей из фильма «В поисках утраченного ковчега»

10 комментариев

Прототипирование и ИИ

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

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

А на днях я подумал — почему бы не попробовать сделать прототип (срезав кое-какие острые углы, разумеется) при помощи ИИ? Выделил на это несколько рабочих часов, заперся в переговорки с дизайнерам и аналитиками и мы попробовали.

Выгрузить вёрстку из «Фигмы», где у нас нарисован дизайн, нам не удалось — предназначенные для этого плагины ничего не дали. Я решил с этой проблемой не бодаться, а попробовать сделать вёрстку из картинки «нулевого состояния», постепенно добавляя поведение так, как это описано в техническом задании.

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

Особенно хорошо это было заметно на иконках — элементы на них, чаще всего, те же самые, но нарисованы совсем иначе. Если остальную вёрстку я сумел выправить промптами, то иконки мы просто вытащили из «Фигмы», назвали говорящими именами и нейронка сама догадалась куда их применить.

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

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

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

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

Скриншот интерфейса редактора кода с вкладкой plan.md и открытым файлом InteractiveTag.tsx, где показаны изменения в CSS-стилях и логике расчёта позиции выпадающего списка.

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

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

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

В-третьих, этот код никак не учитывает архитектуру остального проекта, написан он с «чистого листа», совершенно изолированно, соответственно, при попытке его интегрировать его придётся серьёзно переделывать.

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

2 комментария

«Ollee Watch»

Приехала моя прелесть, ехавшая ко мне через Китай из Нидерландов. Эта штука похожа на «The Sensor Watch» — тоже вставляется внутрь корпуса часов «Касио», но возможностей у неё куда больше, — например, в ней есть шагомер и она умеет соединяться со смартфоном через «Блютуз».

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

Белый почтовый пакет с наклейкой «ollee WATCH», адресом получателя в Китае, штрихкодами и надписью «Packet Tracked STANDARD», лежащий на деревянном столе.

11 комментариев

Человек: как убить трёхчасовой вайбкодинг

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

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

Уже после обеда, решив зафиксировать, всё-таки, достигнутый результат, я создал репозиторий через git init, добавил в него все файлы через git add -A, но сообразил, что в туда попадёт слишком много мусора и решил сначала «прибраться».

Тут меня буквально на мгновение отвлекли каким-то вопросом и я, не до конца переключившись обратно, набрал вместо git reset немного другую команду — git reset −−hard, то есть вместо сброса коммита, я синхронизировал содержимое своей директории с состоянием репозитория, который я только что создал. Открываю директорию, а там ни одного файла, созданного за мой трёхчасовой сеанс вайбкодинга.

Минуту, наверное, я ошарашенно смотрел на дело рук моих, но потом вспомнил, что когда-то читал про git и его временные файлы, которые он не сразу уничтожает. И я подумал, что возможно вся проделанная работа может лежать в  одном из таких временных файлов, созданный после запуска git add -A.

В том же редакторе, где вайбкодил, — в «Курсоре», спросил у нейросети нельзя ли как-то восстановить стёртое и я оказался прав — нейросеть мне всё восстановила!

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

2 комментария

Визуализация звука

Увидел в интернете интересный эксперимент — визуализацию звука при помощи лазерной указки. Решил попробовать повторить для дочки.

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

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

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

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

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

5 комментариев

Силиконовый брат

Вроде Доли́ну, которая Кремниевая, уже мало кто называет «Силиконовой» (путаница произошла из-за того что слово «кремний» по-английски будет «silicon»), так может и Старшего Брата (Big Brother) сможем научиться не называть «Большим Братом»?

22 комментария

Год с «Дуолинго»

Как-то незаметно прошёл год, как я занимаюсь английским с «Дуолинго». Хотелось бы сказать, что я заметил как вырос мой уровень, но на самом деле я не могу с уверенностью сказать так это или нет. Хотя задания в приложении за этот год стали сложнее, у меня всё же нет ощущения, что я как-то заметно прокачался, в том смысле что ни к какому новому качеству в моей жизни это не привело.

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

Правда купил пару книг на английском и, думаю, я вполне способен прочесть их целиком без словаря, но пока как-то не приступлю — увлекла серия книг про Боба, пока не дочитаю, ни на что другие отвлекаться не хочется.

В общем, спустя год похвастаться мне особо нечем, но всё равно буду заниматься дальше, — ощущения, что я впустую трачу время у меня тоже нет. Думаю польза есть, просто год по пятнадцать минут в день — это мало.

Экран приложения с иконкой огня в очках, числом 365 и надписью «дней в ударе», галочками за Сб, Вс, Пн, кнопками «РАССКАЗАТЬ ДРУЗЬЯМ» и «ПРОДОЛЖИТЬ

Оставить комментарий

Cardputer ADV + «мышастик»

Портативное устройство Cardputer ADV с клавиатурой и экраном, показывающим статус GNSS/LoRa, лежит на коленях в синих клетчатых брюках; антенна подключена сверху.

Как говорится, когда у тебя в руке молоток, всё вокруг превращается в гвозди. Бог знает зачем купил модуль «мышастика» к «Кардпьютеру». Даже не уверен, что буду использовать его в качестве узла связи, наверное просто хотелось посмотреть какими ещё возможностями обладает это устройство, тем более, что модуль стоил недорого.

Не знаю почему, но через блютуз к модулю подцепиться не удалось, поэтому, чтобы настроить его через приложение, пришлось цепляться к смартфону шнурком. Прошивку поставил, как водится, альтернативную — с поддержкой русского языка. Скачал её в зип-архиве, положил на карточку и выбрал в M5 Laucher.

Получается с «Кардпьютером» у нас теперь на семью пять нод — две стационарные ретрансляционные на окнах квартиры, плюс ещё три — носимые.

4 комментария

«Our Red Army Ally»

Читал на днях брошюру «Our Red Army Ally» («Наш Союзник — Красная Армия»), которая была выпущена весной 1945 года американцами, чтобы объяснить бойцам что из себя представляет союзная Красная Армия и как себя вести при встрече с красноармейцами.

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

Еда проста, питательна, тяжела. Красноармеец привык к сытным супам и овощно-мясным похлёбкам, по возможности заправленным сметаной. Обычное блюдо — каша с жирным мясом. Большое количество грубого, но полезного чёрного хлеба — ещё одна основа питания. Щи — любимое блюдо.

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

В холодную погоду неразбавленная водка с кусочком селёдки на чёрном хлебе помогает согреть желудок красноармейца.

В общем, очень интересное чтиво на самом-то деле и написано хорошо. Одно мне непонятно — почему так плохо нарисован Ленин на Ордене Ленина? Скорее похоже на профиль Полифема в костюме. При этом детализация остальных рисунков нареканий не вызывает. Очень странно.

Четыре советские награды: орден Ленина, орден Красного Знамени, медаль «20 лет в РККА», медаль «За оборону Сталинграда» с подписями и краткими описаниями.

3 комментария

Слово денисовца

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

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

Получается, в теории, в наших современных языках вполне могут быть слова, доставшиеся нам от «альтернативных ветвей» человечества. К сожалению, узнать об этом нет никакой возможности. Разве что обнаружатся инопланетяне, которые уже сотни тысяч лет за нами наблюдают и отдадут нам записи того, как это всё было.

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

4 комментария

«Виола»: формулы и стилизация

Долго же я прикидывал правда ли автор «Виолы» задумывал, чтобы математические формулы у него выводились на красном фоне. С одной стороны в коде именно так, да и мне это кажется даже в чём-то логичным, с другой стороны комментарий одного из читателей посеял во мне сомнения.

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

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

Скриншот браузера Viola WWW с примерами математических формул: x²+y², интеграл, сумма a₁+...+aₙ, Σi, x/y, x²+2x+1=0, с цветными рамками и фоном.

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

Вот, кстати, как выглядело недописанное место, где можно подсмотреть что планировалось сделать:

tagPtr = STG_tagPtr("MATH");
i = STG_attr(tagPtr, "BGColor");
if (i) set("BGColor", i);
i = STG_attr(tagPtr, "FGColor");
if (i) set("FGColor", i);
i = STG_attr(tagPtr, "BDColor");
if (i) set("BDColor", i);

А то некоторые читатели недоумевают, наверное, откуда я вообще знаю что задумывал автор.

Этот кусочек выше был закомментирован и не дописан, зато из него видно, что автор собирался стилизовать задний фон (BGColor), цвет шрифта (FGColor) и цвет бордюра (BDColor).

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

6 комментариев

Собрал «Ollee Watch»

Что-то меня увлекла идея переделанных «Касио» — вторые такие часы себе уже приобрёл. Думаю, меня привлекает возможность вложить туда немного личного — хоть это и довольно просто, но их приходится собирать самостоятельно, плюс для первых своих таких часов — «The Sensor Watch» я даже написал свою игру. Кроме того, сама идея такого апгрейда довольно обычных наручных часов очень гиковская, мне такое нравится.

Правда вторые часы, «Ollee Watch» ощущаются чуть менее гиковскими, чем предыдущие и похожи на что-то, что могла выпустить какая-нибудь большая компания. Та же «Касио», например. У них, в отличие от «The Sensor Watch», есть приложение для смартфона, с которым они умеют соединяться через блютуз, NFC (я пока не разобрался зачем) и шагомер.

Шагомер — пока наиболее интересная для тут меня штука, я когда-то решил нахаживать не менее 10 тысяч шагов в день и выполнял норму, пока мог контролировать её на часах. Но с тех пор, как я приобрёл «The Sensor Watch», ношу, в основном, только их и вся эта история с шагами ушла на задний план — следить перестал, а надо бы, я думаю.

Цифровые наручные часы Casio с металлическим сетчатым ремешком на деревянном фоне; на дисплее отображается время 19:6, индикаторы SC и WR.
Мои новые часы показывают, что я сегодня прошёл 196 шагов и выполнил свою норму на ноль процентов

2 комментария

Джойстик для «Кардпьютера»

Блин, ничего не понимаю. Чтобы было удобнее играть в эмуляторе в игры на «Кардпьютере» мне нужен вот такой джойстик, как у меня на картинке. Другие модели не подходят. Называется он Joystick2 и доступен для заказа везде — на «Озоне», «Алиэкспрессе» и так далее.

Я уже везде попытался заказать, но каждый раз картина одна и та же — заказ болтается несколько дней, потом отменяется и деньги возвращаются. На «Озоне» один из продавцов, у которых я пытался его заказать, написал мне, что такой модели уже нет, не выпускается, поэтому заказ придётся отменить.

Окей, я верю, нет, не выпускается, но почему, товарищи продавцы, после отмена заказа вы не закрываете позицию в своих магазинах, а продолжаете продавать товар, которого у вас нет? Я проверил карточки всех товаров, за которые мне вернули деньги — ни один продавец не снял этот джойстик с продажи.

Белый механический микровыключатель с красной круглой кнопкой и красными контактами, установленный на тёмном фоне.

7 комментариев

← сюда туда →