LINUX.ORG.RU

Lagrange 1.18 и 1.18.1

 , , ,


1

3

Две недели назад состоялось крупное обновление Lagrange, клиента сети Gemini (статья на Википедии, веб-сайт), представленной как облегчённая альтернатива WWW и созданной с оглядкой на Gopher, но с добавлением таких улучшений, как собственный язык Gemtext для базовой разметки текста и шифрование. 29 сентября вышло обновление 1.18.1, закрывшее несколько багов прошлого релиза.

Lagrange является кроссплатформенным клиентом, использующим возможности библиотек SDL для графического ускорения и OpenSSL для шифрования. Программа поддерживает вкладки и разбивку экрана, историю посещений, закладки, поиск по сети, умные подсказки при наборе в адресной строке, показ встроенных изображений на страницах, проигрывание аудиофайлов и выбор темы оформления, и содержит встроенный новостной агрегатор. Интерфейс Lagrange напоминает типичный для современных веб-браузеров, но имеет широкие возможности для кастомизации. Подробнее с особенностями приложения можно ознакомиться, открыв в Lagrange вкладку about:help, или прочитав файл help.gmi

Исходный код программы написан на C и может быть собран на любой современной POSIX-совместимой платформе. Официальные 64-битные сборки релизов доступны для платформ Windows, macOS и GNU/Linux (AppImage). Бета-релизы доступны для мобильных платформ: iOS, Android (репозиторий F-Droid, APK)

1.18

Нововведения:

  • Поддержка отправки сообщений Misfin. Ссылки misfin:// открываются в диалоге отправки.
  • Поддержка Guppy, легковесного протокола, основанного на UDP. Добавлено Dima Krasner.
  • Titan: Поддержка параметра «редактировать» в открытых ссылках Titan. Содержимое ссылки загружается и открывается в текстовом редакторе диалога отправки. После завершения редактирования содержимое отправляется обратно на сервер.
  • Опция для отключения всех предупреждений о небезопасном подключении TLS.
  • Воспроизведения звука в формате Opus посредством libopusfile (опциональная зависимость). Добавлено Martin Chang.

Изменения и улучшения:

  • Использующий Curses консольный клиент clagrange теперь может быть собран в дополнение к GUI-версии, а не по отдельности с ней. Удален скрипт для сборки TUI.
  • Улучшена фокусировка на элементах интерфейса: клавиши со стрелками перемещают фокус на соседний виджет.
  • Контекстные меню могут управляться клавишами со стрелками, и первые буквы ярлыков пунктов меню используются для быстрого перемещения фокуса нажатием соответствующей клавиши на клавиатуре.
  • Сохраненные в закладках URL автоматически обновляются в случае постоянных перенаправлений. (Оригинальный URL продолжает храниться в bookmarks.ini).
  • Длина строки изменяется динамически (подстраивается под размер окна), включая такие поля как преформатированные блоки и строки простого текста (plain text).
  • Путь к файлу может быть набран вручную в диалоге отправки. Ранее поддерживалось только использование drag-and-drop.
  • Щелчок правой кнопкой мыши по баннеру сайта показывает контекстное меню ссылки (привязанное к корневому URL капсулы).
  • При сохранении в каталог загрузок показывается всплывающее окно для подтверждения.
  • Панель меню: При активации с клавиатуры, повторно открывается последнее открытое подменю, но не обязательно «Файл», как раньше.
  • Клавиша Return теперь фокусирует на поле набора URL.
  • О странице: Разъяснено значение «fingerprint». Отображаются тип хэша (SHA-256) и что было использовано для его вычисления (полный сертификат или только публичный ключ).
  • Обновлены символьные обозначения действия «Перейти в корень», удаленных (remote) закладок и индикатор (кнопка) закладок.
  • Gopher: Корректный парсинг типов строк Telnet 8 и T.
  • Шрифт Noto Emoji обновлен для поддержки Unicode 15.1.
  • TUI: Часто используемые клавишные комбинации показываются на месте панели меню, когда та отключена, чтобы сделать интерфейс более доступным.
  • TUI: Улучшена раскладка интерфейса, учитывая возможность использования при минимальном разрешении в 80x25.
  • TUI: Улучшено отображение различных виджетов в текстовом режиме.

Исправления:

  • URL Titan ошибочно открывали диалог отправки при просмотре истории.
  • Запрос Titan в открытой вкладке отправлялся заново с пустым содержимым при запуске приложения.
  • Идентификация для отправки в Titan иногда выбиралась некорректно.
  • Диалогу отправки не хватало нескольких строк для ошибок при drag-and-drop.
  • Gopher: элементы форматирования Gemtext, оказавшиеся в тексте страниц Gopher, игнорируются, чтобы исключить возможность искажения визуального представления страницы.
  • Gopher: Номер порта может быть пустым на i-строках.
  • Ярлыки запроса, уже содержащие знак ?, имели в префиксе лишний ?.
  • Численные (буквенные) отметки ссылок, показываемые при навигации с использованием Alt/Option или клавишами ряда home, теперь начинаются с самого верха области просмотра.
  • Некорректный порядок обработки событий при наличии нескольких окон, когда один из виджетов находится в фокусе.
  • macOS: Навигация трекпадом на несфокусированном окне могла сработать в другом, сфокусированном окне.
  • Отсутствующая индикация фокуса в пустых списках и списках Snippets.
  • Зажатие Alt/Option (модификатор для показа номеров ссылок) при открытии ссылки запроса могло привести к отсутствию фокуса ввода во всплывающем диалоге.
  • Неправильное расстояние между символами в преформатированном блоке.
  • Подсветка первого абзаца неправильно работала с моноширинным шрифтом тела.
  • Текстовые символы иногда показывались частично обрезанными.
  • TUI: Цветовые escape-символы не учитывались при выводе.
  • TUI: Отсутствовали символы подменю.
  • TUI: Возможное зависание при показе обтекающего текста.

1.18.1

  • macOS: Исправлено открытие URI Misfin извне, средствами системы.
  • Windows: Теперь можно запомнить Lagrange как приложение для открытия URL misfin://.
  • TUI: Исправлено возможное искажение вывода.
  • TUI: Curses будет линковаться статически только при использовании опции CMake ENABLE_STATIC.
  • Обновлены переводы интерфейса.

>>> Подробности



Проверено: hobbit ()
Последнее исправление: dataman (всего исправлений: 4)
Ответ на: комментарий от u5er

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

Другими словами начать шаг за шагом идти по пути развития HTML. Это заведомо проигрышный путь. Gemini - микропротокол, и ниша у него маленькая, но в своей нише он отлично работает.

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 2)
Ответ на: комментарий от lbvf50txt

80 букв - это про Gopher. У Gemini ширину UA может любую устанавливать. Вот ответ Skyjake про таблицы:

TL;DR: Другой уровень сложности в сравнении с остальным Gemtext.

When it comes to tables, they are complicated to parse and lay out, especially when one starts to consider details like merged cells, column/row sizing, content alignment, etc. Complexity-wise, it is not at the same level as the rest of Gemtext, by far. It would be a massive hurdle for client implementers if they were expected to have support for table rendering.
Gentooshnik ★★★★★
()
Ответ на: комментарий от Gentooshnik

TL;DR: Другой уровень сложности в сравнении с остальным Gemtext.

Да. Уже на разные лады сказанно теми кому понравился Gemini одно и то же. ПО для Gemini легко реализовывать благодаря строгим ограничениям. И разъяснено почему это важно.

https://drewdevault.com/2020/11/01/What-is-Gemini-anyway.html

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 3)
Ответ на: комментарий от lbvf50txt

писать сайт на HTTP, писать зеркало на Gemini.

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

sehellion ★★★★★
()
Ответ на: комментарий от Smacker

Спасение утопающих — дело рук самих утопающих.

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

sehellion ★★★★★
()
Ответ на: комментарий от sehellion

Но по беглому просмотру обсуждени

Чтоб разобраться в Gemini надо сесть и прочитать документацию где мотивация каждого архитектурного решения понятно объяснена.

Нужно что-то на основе латеха или маркдауна.

Уже есть подобное решение называется HTML.

Да, замкнутый круг.

Это точно. Замкнутый круг перепечатывания тезисов из документации тем кто ее не прочитал.

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

Есть платформы vk, fb, lj, tg где без работы, без знаний сразу можно начать выкладывать контент. Сразу ощутимый выхлоп при 0 вложений.

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 3)
Ответ на: комментарий от sehellion

А вы systemd зачем перечеркнули на своей аватарке? Так модно или вам не нравится пологаться на сложный софт в исходника которого тяжело разобратся лично. Если второе, то странно выглядит критика Gemini.

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 5)
Ответ на: комментарий от lbvf50txt

Не надо избавляться от HTTP, нужно ограничить возможность впихивать скрипты на сторону клиента там где это не надо. Для этого создан протокл Gemini.

Они не знали про галочку «отключить скрипты» в браузере?

ahdenchik
()
Ответ на: комментарий от lbvf50txt

Замкнутый круг перепечатывания тезисов из документации тем кто ее не прочитал.

Собственно, https://geminiprotocol.net/docs/faq-section-4.gmi. Ответ почти на все заданные в треде вопросы есть по ссылке.

Gentooshnik ★★★★★
()
Ответ на: комментарий от ahdenchik

Они не знали про галочку «отключить скрипты» в браузере?

Вам прекрасно известно, что большинство сайтов уже не работают без JS, так как в них напихали прелоадеров. Или не известно?

Короча Вася, ты это… ну сам понял.

lbvf50txt
()
Ответ на: комментарий от Gentooshnik

Ответ почти на все заданные в треде вопросы есть по ссылке.

Мне в таких тредах неприятно иметь дело с глупостью, но приятно встречать людей как вы. Получается инь и янь, толпа которая не всостоянии прочитать документацию и лезит спорить. И 1-2 человека с которыми можно о чём-то поговорить.

lbvf50txt
()
Ответ на: комментарий от ahdenchik

Не надо избавляться от HTTP, нужно ограничить возможность впихивать скрипты на сторону клиента там где это не надо. Для этого создан протокл Gemini.

Они не знали про галочку «отключить скрипты» в браузере?

Скорее всего знали. А много сайтов так продолжает работать?

Собственно, лет пять назад (ещё в Opera на Presto) я так и делал, но сайты один за другим становились неюзабельными.

Gentooshnik ★★★★★
()
Ответ на: комментарий от lbvf50txt

Ты потерял нить обсуждения но обвиняешь меня в непонимании. Не надо так

ahdenchik
()
Ответ на: комментарий от Gentooshnik

Собственно, лет пять назад (ещё в Opera на Presto) я так и делал, но сайты один за другим становились неюзабельными.

В основном я отключаю JS когда захожу на lj. С включеным JS там такой вал рекламы, что блокировщики не справляются. В остальном же крупные сайты не функционируют без JS вовсе. На LOR расскажут, что это прогресс и экономия трафика. Запуск 27 банеров и видоплера в углу страницы.

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 1)
Ответ на: комментарий от ahdenchik

Я прочитал документацию 3 года назад и реализовал свой сервер

Не верю.

lbvf50txt
()
Ответ на: комментарий от ahdenchik

Я прочитал документацию 3 года назад и реализовал свой сервер

В таком случае Вы задаёте вопросы на которые уже знаете ответы. Не надо так.

Gentooshnik ★★★★★
()
Ответ на: комментарий от ahdenchik

Я прочитал документацию 3 года назад и реализовал свой сервер

Теперь и я реализовал свой сервер.

  • Запускать ./server.rb.
  • Читать bombadillo gemini://127.0.0.1:2165.
  • Cервер отдает файлы из каталога src.
  • Классически отдается src/index.gmi для запроса на root.

Перед запуском надо сгенерировать ключи и сертификаты.

openssl genrsa -out server.key 2048
openssl req -new -x509 -key server.key -out server.crt -days 365 -subj "/CN=127.0.0.1"

server.rb:

#!/usr/bin/env ruby

require 'socket'
require 'openssl'
require 'uri'

# Create a TCP server
server = TCPServer.new('127.0.0.1',2165)

# Create an SSL context
ssl_context = OpenSSL::SSL::SSLContext.new
ssl_context.cert = OpenSSL::X509::Certificate.new(File.read("server.crt"))
ssl_context.key = OpenSSL::PKey::RSA.new(File.read("server.key"))

# Wrap the TCP server in an SSL server
ssl_server = OpenSSL::SSL::SSLServer.new(server, ssl_context)

puts "TLS Server is listening on port 2165..."

loop do
  # Accept a client connection
  ssl_client = ssl_server.accept
  puts "Client connected: #{ssl_client.peeraddr[2]}"

  # Read data from the client
  request = ssl_client.gets
  puts "Received: #{request}"

  uri = URI.parse(request.strip)
  p uri.path


  # Define path to the gmi file
  if "/" == uri.path
    file_path = "src/index.gmi" 
  else
    file_path = "src" + uri.path 
  end
  

  # Prepare a valid Gemini response
  response = ""
  if File.exists?(file_path)
    # Get data from the gmi file
    data = File.readlines(file_path).map{|x| x.strip}.join("\r\n")
    response = "20 text/gemini\r\n"
    response += data
  else
    response = "51 Not Found\r\n"
  end

  # Send a response back to the client
  ssl_client.puts  response

  # Close the client connection
  ssl_client.close
end

src/index.gmi

# Gemini content.

Links list.

=> gemini://127.0.0.1:2165 root
=> gemini://127.0.0.1:2165/first.gmi first level
=> gemini://127.0.0.1:2165/second/a.gmi second A 
=> gemini://127.0.0.1:2165/second/b.gmi second B 

And unexisted file.

=> gemini://127.0.0.1:2165/second/nofile.gmi unexisted file 

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 5)
Ответ на: комментарий от dataman

Ждём gemini://linux.org.ru. :)

А это возможно? С возможностью отправки сообщений на форум? Я думал оно ридонли, а тут какие-то редактируемые ссылки… пора смотреть уже :)

pihter ★★★★★
()
Ответ на: комментарий от pihter

А это возможно?

Вряд ли. Нужно будет конвертировать Markdown и LORCODE, как минимум.

dataman ★★★★★
()
Ответ на: комментарий от alt-tab-let

PeerTube supports custom markdown/HTML markup in some markdown fields (to create your homepage etc).

Full markdown is supported and basic HTML tags are allowed (, , etc). The style attribute is also supported.

dataman ★★★★★
()
Ответ на: комментарий от alt-tab-let

Хочу md эквивалент для ютуба

Я тоже. Не пойму, тут есть сарказм или нет?

@dataman Имеется в виду чтобы вся страница была на Markdown. А не поддержка Markdown в отдельных текстовых полях.

Gentooshnik ★★★★★
()
Ответ на: комментарий от lbvf50txt

Общаться мне удобно через email.

Ты сюда это через имейл написал? И ответ мой по почте читаешь?

Форум с сообществом – штука хорошая.

pihter ★★★★★
()
Ответ на: комментарий от Gentooshnik

How can you say Gemini is simple if it uses TLS?

Some people are upset that the TLS requirement means they need to use a TLS library to write Gemini code, whereas e.g. Gopher allows them full control by writing everything from scratch themselves.

Of course, even a «from scratch» Gopher client actually depends crucially on thousands of lines of complicated code written by other people in order to provide a functioning IP stack, DNS resolver and filesystem. Using a TLS library to provide a trustworthy implementation of cryptography is little different.

ну и где тут ответ на вопрос «нахрена им TLS»?

Лично я получил ответ чуть выше, где чудик генерит сертификат RSA. Вы просто бездари, которые не осилили.

Lrrr ★★★★★
()
Ответ на: комментарий от lbvf50txt

прочитать документацию

Пустая трата времени.

Уже есть подобное решение называется HTML.

О чем и речь. И никто не запрещает писать маложручие сайты, которые хоть links будет отображать.

HTML - слишком сложный, браузер не написать. А зачем писать еще один браузер? Это какая-то болезнь? Пусть пишут легкие сайты и используют уже написанное.

Есть платформы

О чем и речь. Если тебя нет там, то для большинства обывателей ты не существуешь. Всё, точка.

systemd зачем перечеркнули на своей аватарке? Так модно

Эта аватарка у меня со времен появления этой блоатвари еще

странно выглядит критика Gemini

Они пилят сугубо маргинальную штуку, которая даже маргиналам не особо нужна.

sehellion ★★★★★
()
Ответ на: комментарий от sehellion

HTML - слишком сложный, браузер не написать.

Браузер Ladybird опередил Servo при тестировании поддержки web-технологий:

30 сентября браузер Ladybird опередил движок Servo по числу успешно пройдённых тестов из набора web-platform-tests, определяющих совместимость с эталонной web-платформой. В частности, Servo успешно проходит 1303211 проверок, Ladybird - 1518672, Firefox 131 - 1805845, Safari 204dev - 1812433, Chromium 131 - 1862747.

dataman ★★★★★
()
Ответ на: комментарий от dataman

Так Servo это в первую очередь Rust, многопоток и вынос по-максимуму на GPU.

А Serenity, при всём уважении к Андреасу, разрабатывается в стиле «да пофиг на производительность, давайте тесты проходить». Они даже начатый JIT компилятор JS выкинули.

devl547 ★★★★★
()
Последнее исправление: devl547 (всего исправлений: 1)
Ответ на: комментарий от devl547

Они даже начатый JIT компилятор JS выкинули.

А смысл его оставлять, если он планирует всё переписать на Swift?

dataman ★★★★★
()
Ответ на: комментарий от sehellion

О чем и речь. И никто не запрещает писать маложручие сайты, которые хоть links будет отображать.

Ситауция в том, что как газ который заполняет весь предоставленый объем, так же и разработчики используют все возможности языка. Писать маложручие сайты не получится, потому что границы маложручести нет. Всегда кто-то напишет сайт который использует больше ресурсов, и не работает без новых возможностей браузера. Для одного пользователя CSS уже слишком, для другого волне примлем JS новой версии, для третьего прекрасно работают современные многуоровневые фреймворки. А Gemini задает общий стандарт для отображения которого хватит программы в 100 строк, уже на своей машине вы можете как угодно рендерить: хотите в терминале, хотите в современном GUI написанном на JS с аудио/видое возможностями, генерацией меню, историей и так далее. И не программист, а пользователь определяет сколько ресурсов системы ему хочется тратить на путешествие по Geminispace.

Они пилят сугубо маргинальную штуку, которая даже маргиналам не особо нужна.

Смотря по какому критерию вы оцениваете маргинальность. Если оценивать по общей компьютерной грамотности и самотоятельности, то Gemini это для элиты, а соц. сети больше для маргинальных слоев.

А зачем писать еще один браузер?

Браузер для вас не блоатваре, а systemd который в 1000 раз проще - блотварь. Интересно.

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 4)
Ответ на: комментарий от dataman

если он планирует всё переписать на Swift?

Ну тогда помянем. Походу свой Jakt Lang он тоже решил закопать.

devl547 ★★★★★
()
Ответ на: комментарий от sehellion

прочитать документацию

Пустая трата времени.

Пустая трата времени - отвечать на вопросы ответы на которые уже есть в FAQ. Точка.

Gentooshnik ★★★★★
()
Ответ на: комментарий от debugger

Можно обойтись без таблицы? Да, можно заменить таблицу списком… Но это же будет уродство.

gopher://suckless.org:70/1/git/dwm/log.gph

Tаблицы в gopher.

        Log - dwm - dynamic window manager
HTM   [1]  git clone git://git.suckless.org/dwm
MAP   [2]  Log
MAP   [3]  Files
MAP   [4]  Refs
MAP   [5]  README
MAP   [6]  LICENSE
           ---
           Date              Commit message                            Author
MAP   [7]  2024-10-05 11:01  sync drw.{c,h} from dmenu                 Hiltjo Posthuma
MAP   [8]  2024-06-08 10:36  Add missing void to updateclientlist de…  Pontus Stenetorp
MAP   [9]  2024-03-19 11:13  bump version to 6.5                       Hiltjo Posthuma
MAP  [10]  2023-09-22 13:13  Makefile: remove the options target       Hiltjo Posthuma
MAP  [11]  2023-04-09 10:37  restore SIGCHLD sighandler to default b…  Hiltjo Posthuma
lbvf50txt
()
Ответ на: комментарий от u5er

Сейчас я пользуюсь консольным Bombadillo, на удивление удобно работать с репозиторием через протокол gopher. Несколько ссылок доступные по цифровому хоткею, продуманная структура. На 5+.

lbvf50txt
()

Честно говоря я и предположить не мог, что Gopher это так удобно. Еще вчера мне казалось, что Gopher всё, ну кому он нужен? На самом деле структурировано и быстро работать в терминале. Технология именно заточенная специально под терминал.

UPD: Плюс втом, что если требуется структурировать какую-то инфорацию для себя, то не надо городить велосипедов локальный Gopher север и в терминале получаешь максимально быстрый доступ. Более того. Gemini это по стуи расширенный Gopher можно собственные структуры текстовых файлов обходить помощи Gemini/Gopher интерфейса. Фактически реализовать опыт работы в Gopher на Gemini это добавить ссылки в шапку или вниз.

Пара строк к моему вчерашнему серверу, и можно получить навигацию по текстовым файлам.

UPD1: Еще плюс в Gopher - не надо заморачиваться с сертификатами, для локальных потребностей очень удобно.

Вывод. Есть местод для HTML, Gemini и Gopher у каждого своя ниша. Gopher это средство навигации по тестовому пространству без изобретения велосипедов. Запускается сервер, добавляется шапка и все поехали уже готовая структура с изяществом превращается из набора файлов в структурированый «сайт» с которым работает Gopher клиент.

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 3)
Ответ на: комментарий от lbvf50txt

UPD1: Еще плюс в Gopher - не надо заморачиваться с сертификатами, для локальных потребностей очень удобно.

Посмотри на guppy от dimkr.
Это гемини, но без сертификатов и через udp.

devl547 ★★★★★
()

Не поддерживается Windows XP. Очень раздражает что многие и так маргинальные проэкты с 3,5 пользователями забивают на устаревшие ОС и оборудование.

wenxuan
()
Ответ на: комментарий от wenxuan

Ставишь легковесный Linux или *BSD туда и Lagrange сверху)

Ну или собери сам под XP, исходники то открыты.

devl547 ★★★★★
()
Ответ на: комментарий от Lrrr

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

Wayland: братан, подержи моё пиво!

BydymTydym
()
Ответ на: комментарий от Lrrr

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

Этот ^ комментарий - образец того что получается когда до форумов допускают идиота.

Gentooshnik ★★★★★
()
Ответ на: комментарий от wenxuan

Как облегчённая альтернатива WWW сойдёи и сам WWW достаточно отказаться от JavaScript, CSS и HTTPS.

Вот я тоже в глубоком шоке от того, сколько у нас умников среди старперов. html 1.0 их прям совсем не устраивает, потому что… написано уже.

BydymTydym
()
Ответ на: комментарий от Gentooshnik

Не уподобляйтесь. Оскоблениями свою позицию не отстоять. Более того и Gopher и Gemini будут оскорблять из-за непонимания. Если начать оскорблять в ответ никуда это не приведет, лучше поднимать свои капсулы.

lbvf50txt
()
Ответ на: комментарий от InterVi

Затем, чтобы не грузили канал трафиком, а сайт не лагал. Mobile first, сигнал не везде хороший. Это правильная оптимизация. К ней бы ещё добавить PWA. Ну и музыку можно раздавать при поддержке webtorrent.

Почему–то это mobile first идёт в комплекте с сотнями килобайт и даже больше JavaScript, кучей CSS, с анимацыями и стилизацей всего и вся на что уходит заряд батарейки. По настоящему mobile first это WAP.

wenxuan
()
Ответ на: комментарий от lbvf50txt

Половина комментов, что тут нагенерирована, была бы невозможна без жирного, завязанного на всеми так нелюбимый web 2.0 js+css с кучей свистелок и перделок. Потому что их авторы сейчас вместо пожирания пиццы или вока из службы доставки, пердолились бы с приготовлением еды или стояли бы у вокзальной кассы, чтобы купить билет или тащили бы вместо трудолюбивого мигранта телегу с покупками по Ашану.
Воистину, человечество - самый неблагодарный вид из известных мне. Господь - жги, тут уже ничего не исправить!

BydymTydym
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.