- PVSM.RU - https://www.pvsm.ru -

Кофе по SSH, сайты в zip-архивах. Чистый HTML лучше всего

Кофе по SSH, сайты в zip-архивах. Чистый HTML лучше всего - 1


Очень интересная штука — интернет-магазин в консоли [1]. Он позволяет авторизоваться в магазине и заказать товар (кофе), не выходя из терминала. Говорят [2], кофе из командной строки даже вкуснее, чем обычный.

Просто заходим в магазин по SSH:

ssh terminal.shop

или

ssh 172.65.113.113


… и оформляем заказ, следуя подсказкам в терминале. Правда, они доставляют только по США, а сейчас вообще все запасы кофе уже распроданы (скриншот на КДПВ). Но сама идея великолепная: зачем вообще нужны эти графические интерфейсы, чтобы исполнить простую текстовую команду «купить кофе» или «заказать такси»?

Надеемся, что компания Terminal Products, Inc. порадует и другими концептуальными проектами для терминала. Консольный браузер, почтовые клиенты [3] (на скриншоте внизу aerc [4]), CMS для управления блогом [5] и даже RSS-уведомления [6] уже есть — всё это работает в консоли.

Кофе по SSH, сайты в zip-архивах. Чистый HTML лучше всего - 2

Мало кто помнит, но в 90-е было много интернет-магазинов, которые работали через текстовый интерфейс telnet (Bookstacks, CDNow) или по SMS, ещё до распространения веба и браузеров. Для своего времени это были суперпродвинутые технологии. До сих пор можно найти несколько сайтов (ascii.theater [7], mapscii.me [8]) и игр [9], доступных через консоль (у каждой игры свой порт, внимательно читайте инструкцию).

▍ Статические сайты

В последнее время появилось несколько новых генераторов статических сайтов, а общее их количество в каталоге Jamstack [10] достигло 355 штук:

Кофе по SSH, сайты в zip-архивах. Чистый HTML лучше всего - 3

Но некоторые выделяются из общей массы. Например, Observable 2.0 [11], генератор статических сайтов с красивыми отчётами и графиками. Точнее, это опенсорсный инструмент по разработке веб-приложений для работы с данными.

Пример интерактивной диаграммы:

Кофе по SSH, сайты в zip-архивах. Чистый HTML лучше всего - 4
Время отклика по результатам анализа 7 633 176 запросов

С помощью Observable Framework [12] можно создавать красивые и функциональные веб-приложения для работы с данными. Фреймворк сочетает в себе возможности JavaScript для создания интерактивной графики и любого языка для подготовки и анализа данных: SQL, Python, R, Rust, Go и т. д. По словам разработчиков, тут есть абсолютно всё необходимое: интерактивные графики и ввод, отзывчивые сетки, темы, тёмный режим, удобная навигация с клавиатуры — и никаких ограничений для кастомизации, потому что это код.

Кофе по SSH, сайты в zip-архивах. Чистый HTML лучше всего - 5
Визуализация разработки библиотеки Observable Plot [13], включая статистику с Github, количество скачиваний с npm c 7- и 28-дневным скользящими средними, а также возраст и количество открытых проблем с течением времени

На Github выложены и другие примеры [14].

Сгенерированный сайт можно разместить на любом бесплатном хостинге [15] статических сайтов (Github) или на своём сервере. Более того, с помощью инструмента вроде Git-Proxy [16] веб-сайт раздаётся прямо из репозитория Git без его клонирования, то есть без создания локальной копии, а напрямую. Очень удобно поставить Git на каком-нибудь дешёвом VPS [15] и раздавать статический сайт таким образом.

В качестве своеобразного «генератора сайтов» можно использовать также MPA Archive [17], прямое назначение которого — упаковывать сайты или веб-приложения MPA (Multi-Page Application) в zip-архив, откуда они запускаются. То есть мы архивируем сайт:

mpa http://habr.com

…получаем файл типа habr.com.zip, а затем mpa запускается как веб-сервер, который выдаёт содержимое этого zip на localhost.

Веб-сервер libwebsockets [18] тоже умеет выдавать сайты из zip-архивов.

Всё это чем-то напоминает известный формат .mht, который объединяет в одном файле html-страничку и все её ресурсы, а также Redbean [19], где сайт и веб-сервер пакуются в один исполняемый .zip. В Firefox можно использовать расширение Single File [20]. Но они сохраняют только одну страницу, а программка mpa сохраняет сразу целый сайт.

Другой способ скачать сразу целый сайт — старый добрый wget:

wget --mirror 
     --convert-links 
     --adjust-extension 
     --page-requisites 
     --no-parent 
     --wait=0.1 
     --random-wait 
     https://www.habr.com/

▍ Новости HTMX

В последнее время набирает популярность HTMX [21] как более простой способ веб-разработки, где современные интерактивные интерфейсы создаются напрямую средствами HTML, что позволяет уменьшить размер сайта втрое [22] по сравнению с React. На днях вышла статья «Почему в htmx нет этапа сборки» [23]. Там объясняется, что логика использования HTMX предельно простая. Сама библиотека экстремально маленькая (14 КБ [24] в архиве), это файлик htmx.js 3500 строк на JavaScript, без зависимостей, который вы можете отредактировать перед тем, как отправить клиенту в браузер. Это гораздо проще, чем писать на TypeScript и компилировать перед выполнением, и это обеспечивает долговечность кода JavaScript. Отсутствие сборки — это концептуальное преимущество [25], которое позволяет легко редактировать старые сайты и не зависеть от компилятора.

Примеры случайных сайтов на HTMX можно посмотреть в этом веб-кольце [26] (такие кольца были популярны в 90-е [27], когда сайты схожей тематики размещают у себя на страничке ссылки на следующего и предыдущего членов кольца).

Кстати, к вопросу о HTMX. Карсон Гросс [28] недавно опубликовал серьёзное эссе о недостатках HTMX [29], где разбил эту технологию в пух и прах, честно перечислил все минусы и поиздевался над автором, который это придумал, упомянув его несерьёзный личный сайт с мемами [30]. Как такому человеку вообще можно доверять? Всё это можно воспринимать как основательную критику, если не знать, что Карсон Гросс сам и разработал HTMX.

▍ Минимализм

Минимализм нынче в моде. В этом смысле много чему есть поучиться у ветеранов демо-сцены, которые уже несколько десятилетий соревнуются в создании красивых демок (видео) размером в несколько килобайт, оптимизируя в коде каждый байт. Например, вот такая анимация «Овечка и цветок» [31] с музыкой занимает всего 8159 байт, как ни сложно в это поверить (файлы .exe [32] для видео в разном разрешении, исходный код [33]).

Демо написано на C++ для окон и инициализации OpenGL. Весь визуальный контент генерируется на GPU с помощью GLSL. Контент записан в знаковых полях расстояний [34] и визуализируется через марширование лучей [35]:

Кофе по SSH, сайты в zip-архивах. Чистый HTML лучше всего - 6

Музыка требует больших вычислений на CPU и выполняется в отдельном потоке. Более подробную информацию о создании этой 8-килобайтной анимации высокого разрешения см. здесь [36].

Кстати, к вопросу о минималистичности и о фреймворках. Как раз недавно вышел htmz [37] — минималистичный микрофреймворк (166 байт, без зависимостей и JS) для создания интерактивных и модульных сайтов на чистом HTML (например, перезагрузка фрагментов веб-страниц по нажатию ссылки, см. примеры [38]). Создан под впечатлением от HTMX и техники веб-разработки Comet [39].

Примеры:

Кофе по SSH, сайты в zip-архивах. Чистый HTML лучше всего - 7

Кофе по SSH, сайты в zip-архивах. Чистый HTML лучше всего - 8

Кофе по SSH, сайты в zip-архивах. Чистый HTML лучше всего - 9

▍ HTML-редакторы

А в чём редактировать статический HTML-сайт, если не в минималистичном HTML-редакторе? Если выбирать из классических редакторов, то раньше одним из лучших считался Composer (Компоновщик) из пакета Seamonkey [40], это наследник Mozilla и Netscape. Пакет включает браузер, почтовый клиент, RSS-ридер, IRC-чат, клиент групп новостей, HTML-редактор — всё, что нужно для работы в интернете.

Компоновщик — удобный WYSIWYG-редактор. Несмотря на свой возраст, он до сих пор работает довольно хорошо на более-менее простых сайтах HTML 4.01.

Кофе по SSH, сайты в zip-архивах. Чистый HTML лучше всего - 10
Компоновщик из комплекта Seamonkey

Из более современных редакторов можно упомянуть KompoZer [41] и HTML Notepad [42].

Кофе по SSH, сайты в zip-архивах. Чистый HTML лучше всего - 11

После многократного переписывания своих сайтов на разных фреймворках многие люди приходят к выводу, что чистый HTML лучше всего [43]. Если и использовать генератор, то только как тонкую надстройку над HTML, которая добавляет минимум абстракций и лишь минимально изменяет структуру файлов и директорий.


Из других новинок:

  • Стриминг HTML не по порядку [44], без использования JavaScript, исходный код [45], демо [46]. Смысл в том, что контент с сервера передаётся клиенту по мере генерации, в случайном порядке. Так гораздо эффективнее, чем каждый раз дожидаться очередного фрагмента в очереди.

    Рендеринг частей DOM отдельно от остальных частей производится с помощью Shadow DOM [47].

  • 67 трюков по дебагу в браузере [48].
  • Предсказание текста на JS [49], без использования LLM.
    Кофе по SSH, сайты в zip-архивах. Чистый HTML лучше всего - 12

    Здесь используется новая техника ArT DeCo (Anchor Tree with Decaying Context) для хранения двух уровней контекста. Первый уровень — акроним трёх слов перед якорем, второй уровень — акроним трёх слов перед первым уровнем, исходный код [50]. Работает для английского языка со словарём в MessagePack [51], можно использовать в своих проектах.

Автор: Анатолий Ализар

Источник [52]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ssh/392338

Ссылки в тексте:

[1] интернет-магазин в консоли: https://www.terminal.shop/

[2] Говорят: https://www.terminal.shop/faq

[3] почтовые клиенты: https://en.wikipedia.org/wiki/Text-based_email_client

[4] aerc: https://aerc-mail.org/

[5] CMS для управления блогом: https://pico.sh/prose

[6] RSS-уведомления: https://pico.sh/feeds

[7] ascii.theater: https://ascii.theater/

[8] mapscii.me: https://github.com/rastapasta/mapscii

[9] игр: https://overthewire.org/wargames/

[10] каталоге Jamstack: https://jamstack.org/generators/

[11] Observable 2.0: https://observablehq.com/blog/observable-2-0

[12] Observable Framework: https://observablehq.com/framework/examples/api/

[13] Observable Plot: https://observablehq.com/plot/

[14] примеры: https://github.com/observablehq/framework/tree/main/examples

[15] хостинге: https://www.reg.ru/?rlink=reflink-717

[16] Git-Proxy: https://mediocregopher.com/posts/git-proxy

[17] MPA Archive: https://github.com/potahtml/mpa-archive

[18] libwebsockets: https://libwebsockets.org/

[19] Redbean: https://redbean.dev/

[20] Single File: https://addons.mozilla.org/en-US/firefox/addon/single-file/

[21] HTMX: https://htmx.org/

[22] втрое: https://htmx.org/essays/a-real-world-react-to-htmx-port/

[23] «Почему в htmx нет этапа сборки»: https://htmx.org/essays/no-build-step/

[24] 14 КБ: https://unpkg.com/htmx.org/dist/

[25] концептуальное преимущество: https://jvns.ca/blog/2023/02/16/writing-javascript-without-a-build-system/

[26] веб-кольце: https://htmx.org/webring/

[27] были популярны в 90-е: https://en.wikipedia.org/wiki/Webring

[28] Карсон Гросс: https://habr.com/ru/companies/ruvds/articles/814193/

[29] серьёзное эссе о недостатках HTMX: https://htmx.org/essays/htmx-sucks/

[30] мемами: https://htmx.org/essays/#memes

[31] «Овечка и цветок»: https://www.ctrl-alt-test.fr/the-sheep-and-the-flower/

[32] файлы .exe: https://aduprat.com/pub/The_Sheep_and_the_Flower.zip

[33] исходный код: https://github.com/ctrl-alt-test/mouton

[34] знаковых полях расстояний: https://en.wikipedia.org/wiki/Signed_distance_function

[35] марширование лучей: https://en.wikipedia.org/wiki/Volume_ray_casting

[36] здесь: https://www.ctrl-alt-test.fr/2024/how-we-made-an-animated-movie-in-8kb/

[37] htmz: https://leanrada.com/htmz/

[38] примеры: https://leanrada.com/htmz/#examples

[39] Comet: https://en.wikipedia.org/wiki/Comet_(programming)

[40] Seamonkey: https://www.seamonkey-project.org/

[41] KompoZer: https://kompozer.sourceforge.net/

[42] HTML Notepad: https://html-notepad.com/

[43] чистый HTML лучше всего: https://ankarstrom.se/~john/articles/html/

[44] Стриминг HTML не по порядку: https://lamplightdev.com/blog/2024/01/10/streaming-html-out-of-order-without-javascript/

[45] исходный код: https://github.com/lamplightdev/ooo

[46] демо: https://ooo.lamplightdev.workers.dev/

[47] Shadow DOM: https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_shadow_DOM

[48] 67 трюков по дебагу в браузере: https://alan.norbauer.com/articles/browser-debugging-tricks

[49] Предсказание текста на JS: https://www.adamgrant.info/tiny-predictive-text

[50] исходный код: https://github.com/adamjgrant/Tiny-Predictive-Text

[51] MessagePack: https://msgpack.org/

[52] Источник: https://habr.com/ru/companies/ruvds/articles/821443/?utm_source=habrahabr&utm_medium=rss&utm_campaign=821443