Удалённая работа и начало нулевых

Пока я шарахался по старому интернету «Виолой», заглянул через «Веб-архив» и на сайт к Дмитрию Завалишину. Его сайт dz.ru был в своё время очень известным, я его тогда тоже читал взахлёб. А там как-то совершенно случайно вышел на статью «Ближайшее будущее удаленной работы» 2002-года. Статью не назвать пророческой, напротив, её автор сильно ошибается в большинстве своих предсказаний:

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

Там и про искусственный интеллект есть:

Задачи искуственного интеллекта. Мое мнение, что НТР надорвется на создании искусственного интеллекта. По крайней мере не будет никакого прорыва и развитие будет происходить очень медленно с нарастанием в основном за счет базы знаний. В основном будут срабатывать частные решения в специальных задачах. Например распознавать дорогу машина будет по спец маркировке.

Про магазины:

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

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

Мултипликацио и дивизио

Пока листал «Арифметику» Магницкого, нашёл два забавных слова — «мултипликацио» и «дивизио». Видимо, тогда наряду с русскими «умножение» и «деление» использовались и их латинские аналоги.

Заголовок «Предѣленіе шестое» красными буквами, подзаголовок «мультипликацію, или умноженіе въ долгахъ» и строка «что въ семъ предѣленіи достоитъ видѣти» на фоне орнамента.
Заголовок «Предъѣленіе ведомое» и подзаголовок «Дивизіо, или дѣленіе въ долгахъ. Что есть дѣленіе въ долгахъ, и коінка емъ посвѣщяютъ;» на странице старинного печатного издания.

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

Знак рубля

У меня почему-то знак рубля (₽) очень прочно ассоциировался с Артемием Лебедевым. Я полагал, что его придумал он или кто-то из его студии. Видимо, дело в том, что Лебедев когда-то активно выступал за его принятие, и тот поднятый информационный шум связал в моей голове знак рубля и Лебедева.

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

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

Странное утверждение, так как в брошюре «Знак рубля», изданной по результатам конкурса, проведённого в 1999 году издательским домом «Коммерсантъ» и Профессиональным клубом дизайнеров-графиков «Портфелио», у знака «₽» есть автор — дизайнер Александр Владимирович Тарбеев.

Разворот книги «Знак рубля»: слева — варианты символа рубля (₽, ₪, Ru), справа — список участников акции с номерами страниц и городами, заголовок «Народная акция».
Склейка двух листов брошюры — знака рубля и его автора

Этот знак, к слову, в том конкурсе не победил — набрал только 11,14% при 23,99 у победителя.

Известно так же, что это был не первый подобный конкурс, первый проводил журнал «Финансист» в 1997-м году. И уже там предлагалось перечеркнуть букву «Р»:

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

В общем, Лебедев к этому знаку отношения не имеет. Кстати, у него в том же параграфе «Ководства» так же написано:

Раньше не было необходимости в отдельном знаке рубля.

«Раньше» — это, собственно, когда? В брошюре «Знак рубля» есть письмо от Центробанка от 17 февраля 2000 года, где сообщается следующее:

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

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

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

Разворот старинной книги с текстом на церковнославянском языке и математическими вычислениями, включая столбцы чисел и примеры деления.
«Арифметика» Леонтия Филипповича Магницкого, издание 1703 года

Например, в известнейшей «Арифметике» русского математика Магницкого 1703 года, рубль обозначается лигатурой «руб», написанной наискосок. При этом в «Википедии» есть и другие знаки.

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

AV1 и аппаратное ускорение

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

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

На картинке он обозначен как «AV1 decode», AV1 — это название кодека, которым сжата графика в формате AVIF.

График: производительность чипов Apple по видеоускорению. M3 Ultra — 1404%, M2 Ultra — 1202%, M1 Ultra — 1026%, M4 Max — 834%. Поддержка AV1, H.264, HEVC, ProRes.

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

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

Сенсорный провод

Неожиданно всплыло воспоминание из далёкого детства.

Мне тогда было лет шесть, может, даже меньше. Мы жили у Мойкиных — снимали у них квартиру, пока они уехали «на Север» на заработки. В те годы в СССР там, в суровых северных краях, можно было скопить приличные деньги.

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

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

Папа и мне предложил попробовать — показал как касаться пальцем. Мама тут же всполошилась — не ударит ли током? Но папа возмутился и уверил её, что напряжение низкое и мне ничего не грозит.

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

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

Что прикупить из нейросетей?

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

У меня оформлена самая дешёвая ($22,4 в месяц) подписка на ChatGPT, и то только из-за функции глубокого поиска. За эти деньги нейросеть может несколько раз (точно не помню, ни разу не упирался в лимит) очень тщательно, порой десятки минут, шерстить интернет с заданной вами целью, а затем кратко обобщить найденное.

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

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

Кроме того, у меня есть самая дешёвая ($20) подписка на «Курсор», чтобы программировать, но сейчас мне не хватает, я всё время докупаю токены. Планирую перейти на более дорогой тариф ($80), но, учитывая мои аппетиты, может и этого не хватить. Когда «Виола» надоест, вернусь обратно на самый дешёвый.

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

«Виола» и эпоха раннего интернета

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

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

На моём скриншоте две программы для «Виолы» от автора браузера.

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

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

Скриншоты интерфейса ViolaWWW: слева — окно «doodle» с рисунком кота и фигур, справа — «Continuously Updating Field» с кодом скрипта monitorBar.v и заголовком в тулбаре.

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

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

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

netscape.security.PrivilegeManager.enablePrivilege('UniversalFileAccess')
netscape.security.PrivilegeManager.enablePrivilege("UniversalConnect")

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

В общем, думаю пока как всё сделать лучшим образом.

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

Как рождался CSS

Мне стало интересно: автор «Виолы» первым догадался отделить стилизацию элементов от структуры, или эта идея уже активно обсуждалась? Нашёл объёмное исследование о том, как зарождался CSS. Браузер «Виола» со своими собственными таблицами стилей там тоже упомянут.

Оказалось, что таблицы стилей как концепция гораздо старше самого веба. Ещё в конце 1970-х Брайан Рид из Университета Карнеги—Меллон разработал систему разметки «Скрайб». Она стала темой его докторской диссертации, защищённой в 1980 году, за которую в 1982-м Рид получил премию имени Грейс Мюррей Хоппер, присуждаемую Ассоциацией вычислительной техники (ACM).

Язык разметки описывал структуру документа — слова, строки, страницы, интервалы, заголовки, подстрочные примечания, нумерацию, оглавление и т. д. — по принципу, близкому к HTML. Далее специальный компилятор использовал базу стилей (Style Database), где хранились определения оформления — шрифты, поля, отступы и прочие параметры.

Сравнение разметки: ручные пометки, слова-разделители, escape-символы (@i, @b, @begin) для курсива, жирного, цитат.
Описание разметки «Скрайба», скриншот из руководства (октябрь 1980 года)

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

Синтаксис «Виолы» был не самым продуманным, не был и единственным, но был одним из первых — он появился уже в 1993 году.

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

Шахматы в «Виоле»

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

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

Скриншот веб-страницы «A Chess Board» с шахматной доской, где белые фигуры стоят на 1–2 рядах, чёрные — на 7–8, а на 4-м и 5-м рядах по одной пешке каждого цвета.

Потихоньку начинаю смотреть что же не работает в интерпретаторе встроенного языка. Что меня поражает до сих пор — это возможность на нём дописывать браузер.

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

/* Show original URL when loading via Wayback Machine */
dispURL = docURL;
/* Rule: find "https://web.archive.org/web/", then drop until next '/' */
wbPrefix = "https://web.archive.org/web/";
wbAt = findPattern(dispURL, wbPrefix);

if (wbAt != -1) {
    wbAfter = wbAt + 1;
    wbRest = nthChar(dispURL, wbAfter, 999);
    wbSlash = findPattern(wbRest, "/");

    if (wbSlash != -1) {
        dispURL = nthChar(wbRest, wbSlash + 1, 999);
    }
}
mvw.doc.url("show", dispURL);

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

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

Мой английский

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

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

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

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

Ева говорит

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

— Папа, а у тебя в детстве была мечта?
— Ну конечно, целый список, — клад найти или в космос полететь…
— И что, сбылось что-то?
— Конечно, клад нашёл, например!
— Клад, — это мы с мамой, да?
— Это очень хорошая версия, дочка, но я имел ввиду монеты…
29.08.2024

⁂

— Папа, а ты всё на свете видел?
— Дааа, — я своих мыслях, пишу программу, поэтому отвечаю на автомате.
— А как верблюды какают, тоже видел? — дочь, видимо поняла, что я её не слушаю.
— Чтоооо? — я, наконец, отвлёкся от кода на Пайтоне и в шоке переспрашиваю.
01.01.2025

⁂

С чувством:
— Папа, я вырасту художницей, певицей и… — пытается подобрать феминитив, неуверенно, — …игрицей-гитарицей, что ли?
09.01.2025

⁂

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

⁂

На днях обсуждали с дочкой условную и безусловную любовь, утром, по дороге на стоянку:
— Мамочка, я тебя люблю больше, чем ты меня!
— Почему это?
— Потому что ты меня родила!
Пока мама ищет контраргументы, поворачивается ко мне:
— Папочка, я тебя больше люблю, чем ты меня!
— Почему?!
Ни секунды не задумываясь:
— Па-та-му-шта!
24.10.2025

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

Скриптовый язык «Виолы»

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

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

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

Скриншот интерфейса браузера ViolaWWW Hypermedia Browser (V 3.3) с предупреждением о бета-версии, описанием функций поддержки HTML 3.0 и навигационными элементами.

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

Патч Бармина

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

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

Я решил посмотреть, нет ли в XPM тех же уязвимостей и, если они есть, — исправить.

Одна из уязвимостей, которую мы рассматривали, — запуск произвольных команд. Мы её, конечно, закрыли, но посмотрите, что нейросеть предложила в качестве теста на отсутствие уязвимости: запуск команды rm -rf /, которая, если бы сработала, удалила бы на диске всё, до чего у неё был бы доступ.

Массив тестовых данных для проверки обработки имён файлов, включая валидные случаи и попытки инъекции команд через символы ;, |, $(), `, &, >.

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

Вайбкодинг: как убить трёхчасовую работу

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

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

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

Когда пришёл, всё уже было готово, но я решил проверить перед коммитом — всё ли в порядке. Скомпилировал, запустил один из тестов… и всё развалилось. В сердцах пишу в чат с нейросеткой капсом: «ЧТО ТЫ НАДЕЛАЛ, ТЫ ВСЁ ИСПОРТИЛ». Понимаю, что бесполезно, но на меня так накатило, что куда-то надо было сбросить всю злость.

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

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

Скриншот браузера Viola: адрес gopher://gopher.floodgap.com/1/world и список ссылок на серверы Gopher, включая Floodgap Systems, Greatest hits и новые серверы.
Мы сейчас в аэропорту, летим в отпуск, интересно, что «гофер» открывается, а он работает через порт 70, обычно нестандартные порты не работают в аэропортах

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

Светофор: идея

У меня уже лет пятнадцать крутится в голове одна идея, до которой всё никак не доходили руки. Но недавно мне прислали приглашение потестировать новую нейросеть для генерации видео — Sora 2. Я решил воспользоваться приглашением и, заодно, визуализировать эту старую задумку.

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

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

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

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

Транслит в «Виоле»

Пытаюсь улучшить транслит в браузере «Виола», который я продолжаю ковырять. Напомню: чтобы не менять шрифты, я сделал транслитерацию для языков, буквы которых отсутствуют в кодировке ISO-8859-1 — именно в ней всё работает по умолчанию.

Кодировка сейчас обрабатывается в три прохода.

На первом шаге я определяю кодировку страницы: смотрю её в заголовке Content-Type или в x-archive-guessed-charset — такой заголовок использует «Веб-архив».
Если кодировка отличается от UTF-8, выполняю перекодирование с помощью библиотеки iconv.

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

И на третьем шаге я опять вызываю iconv в режиме TRANSLIT, чтобы перегнать оставшиеся значки — то, что буквами не является, всякие там буллиты, кавычки и так далее.

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

Результат моих усилий — на скриншоте. Кажется, вариант по центру читается проще, чем правый. Но есть очевидные проблемы с буквами «ц» и «щ»: они у меня передаются как «u,» и «w,» соответственно, и этот знак запятой здорово сбивает темп чтения — заставляет спотыкаться. Пока думаю дальше.

Сравнение трёх вариантов транслитерации русского текста: оригинал, визуально (Leetspeak) и ICU BGN (бразер), демонстрирующее различия в передаче кириллицы латиницей.

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

STG: таблицы стилей в «Виоле»

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

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

Оказалось — показалось, в браузере было реализовано даже меньше.

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

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

<link rel="style" href="HTML_sodium.stg">

Таблиц может быть подключено много и они работают «вниз», то есть от момента включения в код ниже места включения применяются стили, которые там описаны.

Селекторов всего два — можно выбрать тег или стиль тега (это работает немного не так как в CSS):

(BODY,SECTION
     BGColor=green
     FGColor=red
     (P)
     (KBD
          BDColor=black
          border=1
     )
)

Что тут написано? Что в тегах BODY и SECTION будет зелёный фон и красный цвет шрифта, а кроме того эти атрибуты унаследуют теги P и KBD, причём у последнего будет ещё и чёрный бордюр.

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

Ещё есть стилизованный браузером элементы, некие встроенные стили (например, WARNING, NOTE и так далее), которые можно навешивать на произвольные теги при помощи атрибута STYLE. На картинке пример того как выглядит встроенный стиль WARNING: оранжевый бордюр и картинка.

Скриншот редактора кода с HTML-файлом html_5.html, содержащим заголовок STYLE и параграф с классом WARNING, отображающий предупреждение с иконкой восклицательного знака.

К тегам, помеченным атрибутом STYLE тоже можно применять собственные стили:

(P
    BGColor=white
    FGColor=black
    {STYLE "WARNING"
        FGColor=red
        fontSlant=italic
    }
)

У тега P здесь белый фон и чёрный цвет шрифта, а если у него есть атрибут STYLE, равный WARNING, то добавляются ещё два стиля, определяющие красный шрифт наклонного начертания.

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

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

Скриншот ViolaWWW с заголовком «A simple stylesheets test»: красный фон H1, синие и зелёные блоки адресов, текст с разными стилями.
Тестовый пример с сайта «Виолы», открытый собранным мною браузером

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

Продолжаю возиться с «Виолой»

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

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

Если желаете тоже прикоснуться к истории, проект лежит на «Гитхабе», можно попробовать себе его собрать. Только сразу скажу — я собираю под «МакОС», под другие платформы без переделки собрать не получится.

Скриншот веб-страницы Viola Home Page в браузере ViolaWWW: заголовок, описание гипермедийного инструмента Viola и ссылки на документацию, демо и скриншоты.

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

Привет из прошлой жизни

Вчера разбирали старые бумаги, нашли привет из прошлой жизни — когда мы жили в Москве, а я работал в «Яндексе», ещё в старом офисе — на Таганке. В конверте каталог компании Lush, 2008-го года, как видно.

Белый конверт с логотипом «Яндекс» и рукописными надписями «Галинке» и «Степанову», внутри — новогодний каталог 2008 года, на деревянном столе.

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

«Мышастик»: MeshPocket

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

Чатится я собираюсь с женой, отдам ей T-Deck — у неё «Айфон», с установкой приложения там сложности, а у этого устройства собственная клавиатура.

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

Белый автоматизированный прибор с жёлтой рамкой, логотипом «HELTEC AUTOMATION» вверху и надписью «Powered» внизу, на бежевом фоне.

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