[>]
Re: Эффективность против простоты
std.hugeping
hugeping(ping,1) — vvs
2020-12-05 17:05:02
Сложное, это не просто сумма простых частей. А простое, это не значит низкоуровневое.
Понятно, что сама мера, зависит от ситуации и личности. Например, INSTEAD не так прост, как мне хотелось бы, потому что я писал его для других людей в том числе. Но в то же самое время, я сейчас пишу игру в Plan9 на консольной версии метапарсера, прямо в редакторе ACME запуская его. И мне это по душе.
Вероятно, в данном случае грань определяется степенью аскетики, которую ты готов пойти ради понятности и простоты. Причём аскетика, как мне кажется, не всегда потеря. Ты просто выбрасываешь лишнее за борт.
Например, я не готов набирать тексты в редакторе ed, хотя он ещё проще. :) Но я спокойно могу пожертвовать подсветкой синтаксиса. Или современным вебом.
Ещё пример. Средство синхронизации rcu в ядре. Какой прирост они обеспечивают? Стоит ли жертвовать скоростью ради более простого кода? Это выбор, который определяется задачей.
А ещё, кроме простоты есть эффективность решений. Красивое решение, это максимум простоты при максимуме эффективности.
Формула: красота = эффективность/сложность.
Например, ACME редактор прост, но для своей простоты он удивительно эффективен. emacs - может больше. Но сложность emacs несоизмеримо больше.
Ещё пример. latex vs troff. Разница - огромна. Функции -- близки.
Так что, на мой взгляд, простота и аскетика, способность отказаться от "блажи", поиск красивых решений -- всегда идут рядом с приципом KISS.
[>]
Re: Эффективность против простоты
std.hugeping
hugeping(ping,1) — vvs
2020-12-05 17:36:11
vvs> Тут чувствуется одно противоречие. Программист - он еще и пользователь, зачастую очень ленивый.
А в чём противоречие? Во первых, не все эти программисты пробовали разные подходы. Почему не пробовали, это отдельный вопрос. Во-вторых, очень многое решает привычка. Мне лично очень нравится ломать свои привычки. Изучать новое. Поэтому я перепробовал много ОС и много разных подходов. Лично мой опыт -- большинство прибамбасов это просто свистелки, навязанные маркетингом. Я совершенно спокойно программирую без автодополнения кода. Если оно есть - могу с ним. Я не вижу вообще, что это как то критично.
Правда, мне очень тяжело разбираться в сложных интерфейсах. Например, в X Code я так и не освоился, мне проще было бы собирать самому вызывая компилятор с нужными опциями. Потому что это понятно и просто.
Я люблю аналогию -- велосипед без скоростей и со скоростями. В 90% случаев, вам не нужен велосипед со скоростями, а односкоростной велик проще в обслуживании, легче итд. Правда, так как бизнес заточен на извлечение прибыли, то односкоростные велосипеды в массе своей делаются тяжёлыми и из плохих компонентов -- но это уже отдельная история.
vvs> Лично мне больше нравится, когда решение моей задачи я доверяю компилятору.
Сейчас идёт сравнение с ассемблером? Я лично тоже доверяю компилятору. На ассемблере я давно не пишу (хотя сталкиваюсь с ним при отладке). Си -- один из примеров, когда коэффициент красоты (эффективность/сложность) -- очень хороший. Он и создавался как переносимый ассемблер.
[>]
Re: Эффективность против простоты
std.hugeping
hugeping(ping,1) — hugeping
2020-12-05 17:53:51
Я тут подумал, что есть ещё одна аналогия.
Учась в школе/институте, я часто встречался с ситуацией, когда проще не заучивать формулу, а выводить её, если она понадобится. Это не значит, что ты всегда её выводишь, ведь если она тебе нужна часто, то ты естественным образом запомнишь её. Но тут важен подход -- если ты понимаешь базовые принципы и систему вообще -- остальное есть следствие. Конечно, бывают такие вещи, которые нереально сложно и долго выводить самому.
В KISS, грубо говоря, зная как работают кирпичики, ты строишь свои знания/навыки естественным способом. В сложном графическом приложении - ты должен запомнить все элементы и способы работы с ними. Но вот, меняется приложение -- и всё начинается заново...
То-есть в простом подходе, не плодятся сложные уникальные сущности, но по разному комбинируются простые. Это и есть Unix подход. Только Linux уходит от него всё дальше... Понятно, что когда мы говорим о такой задаче, как обработка/редактирование видео, например, Unix подход может превратиться в ту самую "сложную" формулу. Так что, очевидно, простота работает не везде. Но можно к ней хотя бы стремиться.
[>]
Re: Эффективность против простоты
std.hugeping
hugeping(ping,1) — vvs
2020-12-05 18:09:36
vvs> Это просто? Вроде да. Но это только синтаксический сахар.
Ну, ФП это кмк не только синтаксический сахар. Думаю, это тоже простота. Я, кстати, пытался читать книжку по Haskell несколько раз и кажется, начал что-то понимать. :) В каком-то смысле там тоже простота - все эти ленивые вычисления и чистые функции. :) Но применить мне это не где, потому что проще всё-таки писать императивно. Тоже привычка.
[>]
Эха по Plan 9
plan.9
hugeping(ping,1) — All
2020-12-05 19:52:27
Долго думал, создавать ли эху. Просто потому, что есть риск того, что она никогда не наполнится.
С другой стороны, уже несколько раз хотел где-то записать заметки/ссылки на интересные ресурсы и было негде. Так что, всё-таки создаю.
Если что, грохнуть всегда можно потом.
[>]
Re: Эффективность против простоты
std.hugeping
hugeping(ping,1) — vvs
2020-12-06 19:11:01
Я тоже немного запутаю.
Когда говорили про Plan9, true-grue прислал мне один свой комментарий, который, на мой взгляд, в тему разговора. Особенно там, где про чувства к инструменту.
http://fforum.winglion.ru/viewtopic.php?p=40887&sid=b952e062260f48b8f6b6b45f8e76b3d0#p40887
Далее цитата.
Форт-метод -- метод создания инструментария для решения задач. Каковы же его отличительные стороны? Ориентированность на личность, на кустаря-одиночку, независимого от чужого инструментария. Использующему форт-метод разработчику требуются большие опыт и знания. Ведь он, подобно Родену, изучив "глыбу мрамора" знаний и технологий, отсекает от нее все лишнее для себя, путем тщательного отбора из большого числа возможностей. Аналогия с искусством тут неслучайна, ведь автор не просто создает полезный инструмент, а такой, которому он будет испытывать чувства. Отсюда стремление к элегантности, красоте конструкций, миниатюризации. Его инструмент -- средство индивидуального пользования для решения собственных задач. Поддержка в рабочем состоянии, независимость от чужих технологий -- все это накладывает отпечаток на структуру инструмента. Отсюда требования к простоте и регулярности конструкции. Минимализм и единообразие часто приводят к тому, что одни и те же элементы такого инструментария используются нетривиальным образом для различных целей. Это требует определенного мастерства в освоении, в духе процесса бритья топором или использования надфиля в качестве пилки для ногтей. В целом, форт-метод добавляет к результату яркий отпечаток индивидуальности создателя.
[>]
Re: Эффективность против простоты
std.hugeping
hugeping(ping,1) — Andrew Lobanov
2020-12-07 09:11:59
AL> Да. Эти компиляторы очень сложные с инженерной точки зрения. И как и везде это имеет две стороны: они позволяют достаточно простые вещи, но они достаточно сложны.
Сложность это не просто размер кода, это _комплексность_. Например, сложность ядра Linux высока не столько из-за размера, сколько из-за сложного взаимодействия компонентов. Так что компилятор компилятору -- рознь.
Я не специалист в ФП, но мне кажется идеи, которые реализует тот же Haskell сами по себе просты. Но, не буду лезть в область, в которой я нуб.
В качестве элегантных (и при этом мощных) вещей можно привести: Форт, Лисп.
[>]
Re: Эффективность против простоты
std.hugeping
hugeping(ping,1) — vvs
2020-12-07 14:26:00
vvs> Комплексность сложно оценить, в отличие от размера. Я вот понятия не имею, что сложнее устроено: солнечная система или электрон?
Ну мы же говорили о том, что человек создал. Скажем, сравнительно оценить сложность: ядра Linux, OpenBSD, FreeBSD, HaikuOS и Plan9 вполне себе сравнивается. :)
vvs> Я там вижу две составляющие: логика и эстетика. Опять же, первую оценить относительно просто, в отличие от второй.
Оценить - несложно. Формально доказать - сложно. Но у кого стоит такая цель? У меня - нет такой. :)
[>]
Re: Эффективность против простоты
std.hugeping
hugeping(ping,1) — vvs
2020-12-07 15:44:15
Да нет, видно там всё по коду.
Собственно, об этом и статья. Я за время своей работы часто сравнивал реализации одних и тех же вещей в разных ОС. Конечно, часто сложность обусловлена тем, что мы хотим чего-то добиться (например, скорости). Но и откровенно плохие решения, это просто плохие решения.
[>]
Re: Эффективность против простоты
std.hugeping
hugeping(ping,1) — vvs
2020-12-07 15:54:52
vvs> Другой пример. Одна ОС реализует аппаратную защиту памяти, а другая полагается для этого на компилятор, как Singularity.
Это уже не сложность, по-моему, а разный подход к решению проблемы. То-есть, сказать только по вот этой-вот части - нельзя ничего.
Про Singularity я, к сожалению, ничего не знаю. Очевидно, в этой ОС проблема выполнения недоверенного (нативного) кода как-то решается. Или там вообще нет такого понятия и всё проходит через их язык. Но, тоже решение. Может быть, и нормально. Хоть и не традиционно.
Так же, есть вещи, которые изменить нельзя. Например, сложная система команд целевого процессора. Ну, взять тот же vliw.
Но всё-равно, сложные решения чаще становятся непредсказуемыми. Уязвимости в интел процессорах сейчас все бросились искать. Ну, в том числе, потому что срезали углы. Старались оптимизировать всё. Вопрос цены. Но мне часто кажется, что задача выжать скорость любой ценой, в том числе и за счёт сильных ухищрений, это скорее следствие конкуренции... :)
[>]
Re: Эффективность против простоты
std.hugeping
hugeping(ping,1) — vvs
2020-12-07 16:47:35
vvs> Инженерное решение - это всегда компромисс между желанием и имеющимися ресурсами. Наука и искусство этим напрямую не связаны, хотя, например, физика косвенно зависит от инженерных решений.
Можно ли сказать, что какие-то числа объективно большие, а какие-то -- не очень большие?
На первый взгляд, нельзя. Ведь всегда можно выбрать число больше. И вообще, 10 это много или мало? Относительно 1 -- много! Но мне кажется, что есть всё-таки какая-то мера сложности, которая должна оцениваться относительно меры сложности человека и мира, в котором он живёт.
Например, грубо говоря, нам вряд-ли понадобится число, которое имеет те же порядки, что и число атомов в видимой вселенной. Или по другому, для типовых прикладных задач, мы работаем с гораздо меньшими числами.
Были 8битные процессоры. Объективно -- не хватало. Потом 16, лучше, но не всегда хватало. 32 бита! Вообще отлично! На самом деле 32 бит для большинства задач хватало, а то что больше - ну писали библиотеки. Но вот адресное пространство 32 бит, как-то не очень... 64 бита. Нужно ли 128бит? 256? 512? (Я не про векторные инструкции и не про специализированные аккселераторы крипты, к примеру, а именно про регистры общего назначения).
Возможно, будет новый виток развития, где уже никто не будет писать на Си и на ассемблере, и адресные пространства будут такими, что понадобится 256-битные адреса.... Не знаю. Мне сейчас кажется, что всё-таки будет некий предел, который ограничит дальнейший рост.
Ну это как с размерами мозга. Каким может быть максимальный объём мозга, чтобы он работал? Так вот, где-то читал статью, что он не может быть слишком большим. Возникают большие задержки итд итп. То-есть, размер мозга оптимален.
Та же скорость света - как предел распространения сигнала.
Так что мне кажется, что тут можно говорить об антропном принципе в оценке сложности. :)
Насчёт Singularity возникли мысли, но уже не буду писать, а то много текста. :)
[>]
Бывают крылья у художников
std.hugeping
hugeping(ping,1) — hugeping
2020-12-12 16:49:57
Только что услышал на канале "Культура".
Передача "Линия жизни. Евгений Стеблов" от 12.10.2020
Бывают крылья у художников,
Портных и железнодорожников,
Но лишь художники открыли,
Как прорастают эти крылья. А прорастают они так,
Из ничего, из ниоткуда.
Нет объяснения у чуда,
И я на это не мастак.
Геннадий Шпаликов
[>]
Re: Установка INSTEAD-EM и INSTEAD-JS на vps
std.tech
hugeping(ping,1) — lnp3
2020-12-17 16:22:14
В дистрибутиве INSTEAD-EM есть файл README. Прямо внутри zip архива.
Если что-то непонятно в этом README, можно спросить здесь, но уже конкретней.
По instead-js не смогу проконсультировать. Проще всего спросить на телеграм каналах @insteadtalk или @insteadchat у автора (@technix),
[>]
Re: Установка INSTEAD-EM и INSTEAD-JS на vps
std.tech
hugeping(ping,1) — lnp3
2020-12-18 18:18:15
lnp3> Сначала решил делать стандартно, а теперь хочется переделать на парсер. Мне кажется, так интереснее, но времени переделка может отнять много. Думаю.
Я бы не стал переделывать, если часть кода уже написана.
На самом деле, парсер ещё сузит аудиторию.
[>]
Анонимность и искренность
std.hugeping
hugeping(ping,1) — All
2021-01-20 10:39:36
Вчера в очередной раз вспомнил почему-то живой журнал. Давным-давно, когда он ещё был популярен, мне нравилось писать там заметки и читать других людей. И казалось, интересного материала там было достаточно.
Что значит интересного? Умного и искреннего. Сейчас, или я постарел, или интернет стал другим, или всё вместе, но я не вижу ни на одной из площадок ничего похожего на то, чем был живой журнал.
Потом посмотрел на IDEC, подумал, что давно не писал никаких заметок и тут... вдруг почувствовал один интересный момент.
Я давно публикуюсь в интернете под своим реальным именем. Я всегда считал, что если человек стесняется/прячется, то и цена его словам -- грош. Но в том же ЖЖ я публиковался под ником. Меня никто не знал. Работодатель, друзья, родственники. И я поймал себя на мысли что сам этот факт может работать как триггер!
Сейчас, как только я собираюсь что-то написать включается внутренний фильтр, который настроен на мою роль. Фильтр не пускает на выхлоп какие-то личные мысли. О вере, о любви, о жизненном опыте. Всё это рубится на корню. Но в ЖЖ я писал именно об этом.
Почему это происходит, понятно. Есть роль и она отыгрывается. Как работа. Меня знают и ожидают тех вещей, что я могу "выдать" и подсознание работает на это.
Например, если я собираюсь написать пост о Христе, внутренний цензор говорит мне, что-то вроде: Ну сейчас опять атеисты/агностики придут и будут спорить, а мне придётся быть корректным. Не стоит. А может быть, я напишу что-то неканонично? Тоже не годится! Я же православный! Думаю написать о каких-то переломных мировоззренческих моментах. Например о том, что внутренне "Я" нифига не стареет. И в 42 ты такой-же 10-летний мальчишка. Это могут найти знакомые/родственники/работодатели. Что подумают? Ну и понеслось. Даже сейчас мне захотелось отредактировать последний абзац, но не в этот раз. :)
Можно писать дневник лично, и тогда проблемы такой нет. Но ведь и отклик иногда очень важен. С людьми, которые поймут тебя, окажутся на одной волне.
Современные социальные сети в принципе не анонимны. (Я сейчас не говорю о настоящей анонимности, понятно, что вычислить тебя могут в любом случае, а о регистрации по своим реальным именам.) И тут я задумался. Возможно, в анонимности есть своё благо, которое состоит в том, чтобы дать возможность сбросить "роль". Стать чуть честнее.
Возможно, окончательно потеряв анонимность, мы упустили возможность быть искренней перед собой хотя бы иногда.
[>]
Редактор ACME
plan.9
hugeping(ping,1) — All
2021-01-20 12:17:21
Я не буду писать руководство по этому редактору. Но мне хотелось в этой небольшой заметке обозначить главную идею редактора. Дело в том, что когда я начинал осваивать acme мне не хватало именно этого -- понимания центральной идеи, архитектуры. Что это вообще такое? Нечто, непохожее ни на один существующий редактор. Да как можно в нём работать?
А идея у acme оказалась простой и при этом мощной. Я в течении 2-х месяцев разрабатывал в нём игру с текстовым вводом, и это было удобно. Привык настолько, что забыл даже часть клавиатурных комбинаций emacs. :)
Итак, в чём идея acme? Идея acme состоит в том, чтобы дать прослойку между ОС и человеком в виде TUI. И это всё.
1) Acme - это просто столбцы, в которых могут создаваться "окна", отображающие текст. Просто текст, поток текста. Без цвета, стилей, номеров строк... Лишь текст.
2) Над окнами есть области, в которых тоже может быть текст, которые играют роль меню.
3) Меню и окнами можно управлять с помощью записи в специальные файлы. С помощью чтения, можно получать события и информацию о текущем содержимом окон и меню.
4) Вы можете "выполнять" команды системы прямо из текста и/или меню. Например, вызывать спеллчекер, форматирование кода, увеличение отступа -- всё это должно быть Unix командами, которые будут выполняться для всего текста или выделенной его части. Текст приходит через stdin и выходит через stdout. Текст может быть внедрён в редактируемый текст или отображаться в отдельном окне (например, ошибки компилятора). Скрипт может понимать, что он запущен из среды acme и управлять редактором через файловую систему!
5) Можно открывать и просматривать файлы/каталоги, переходить на нужные строки, делать поиск в тексте. Всё это делается "выполнением" текста. Есть базовая возможность делать обработку текста на языке, который похож на sed. (Встроенная команда Edit).
При такой простой идее получается, что acme это не просто редактор, а интерфейс к ОС! Настоящий Unix подход, у которого есть неоспоримое преимущество -- простота и низкий порог вхождения! Никаких сочетаний клавиш, всё интуитивно понятно и естественно. Как только привыкаешь к этому, чувствуешь как твоя голова отдыхает!
Не смотря на простоту, acme оказывается мощным. В том числе благодаря возможности работать с ним, как с файловой системой. Так как мы можем ловить события редактора и управлять им, то, к примеру, для acme есть почтовый клиент Mail, который выглядит так же, как и всё остальное -- просто текст с активными элементами. Можно запустить win -- "терминал" и выполнять в нём команды. acme умеет дампить и восстанавливать своё состояние. Сразу оговорюсь, до мощи Emacs acme далеко. Хотя бы потому, что в acme окнах возможно отображать только текст. Но учитывая его простоту, мощности на строку кода у acme больше!
Когда я использовал acme для написания игры, то выглядело это примерно так:
1) Левый столбец содержал окна с кодом и окно, в котором я запускал консольный метапарсер, через который прогонял автоскрипт (все команды игры, для полного прохождения).
2) Правый столбец содержал окна: вывод спеллчекера, файл с автокомандами.
Интересно то, что со временем строка меню обросла теми командами, которые я использовал больше всего именно при работе над игрой. Там были фрагменты строк для поиска, какие-то выбранные места кода, запуск форматирования кода и прочее. Таким образом, acme подстраивался под конкретную задачу. Это было удобно и сам факт показался мне интересным.
В общем, acme -- отличный пример удачного применения KISS подхода. Теперь, кроме emacs в Linux я также использую и acme и этот опыт мне нравится. Переходя с emacs на acme, отчётливо чувствуешь разницу подходов и то, как освобождаются ресурсы в твоей голове, когда можно забыть, хотя бы на время, все эти клавиатурные комбинации. :)
[>]
Re: Анонимность и искренность
std.hugeping
hugeping(ping,1) — Andrew Lobanov
2021-01-21 16:33:41
AL> Но это моё личное мнение и я не хочу затевать спор на эту тему. По старому интернету я всё равно тоже немного скучаю.
Я когда писал заметку, всё думал про Фидо написать, но так и не написал.
Согласен, в Фидо не было анонимности. Но мне кажется, что и формат общения там был несколько иным. Мне сейчас уже трудно вспомнить, но кажется, я там больше как раз флеймил и "навязывал", чем размышлял. :) Но был нетмейл, по которому общение шло уже более мирно-интимно.
Наверное, всё-таки, формат блога, это другое.
[>]
Re: Трансляция моего блога в ЖЖ и в Telegram
std.hugeping
hugeping(ping,1) — boscholeg
2021-01-25 07:36:17
boscholeg> Тогда надо еще добавить трансляцию сообщений в ютуб. Там есть сообщество и можно постить сообщения. Этим сейчас активно пользуются.
Да цели особенной нет. Просто решил почитать ЖЖ в его текущем виде, сделал аккаунт. Потом понял, что могу запостить туда сообщения с ноды. И понеслась. :)
Вообще, похоже, я застрял в прошлом. Вчера, например, искал инструкцию по завязыванию галстуков. Долго искал, потому что в большинстве случаев это были юиуб-ролики, а я хотел текст + картинки. В итоге сдался и вместо текста запускал и смотрел видосик. :( Не знаю, не люблю видео. От видосов у меня обычно стресс, потому что приходится напрягаться и держать себя в тонусе. Ну это почти как принять телефонный звонок. :)
[>]
Re: scene_use в stead3
std.prog
hugeping(ping,1) — Dima
2021-01-25 09:28:11
Dima> Вопрос: как реализовать данный метод в стед3 через классы. Например: в сцене есть свободный конец веревки и я хочу привязать его к другому объекту сцены или инвентаря, при этом не добавляя конец веревки в инвентарь.
В stead3 данный метод (use предмета сцены на предмет сцены) был признан ошибочным и упразднён.
Так что, предполагается, что конец верёвки таки добавится в инвентарь (или просто верёвка), а при выходе из сцены писать что-то вроде: ты бросил верёвку.
Если очень хочется, можно пытаться сделать что-то своё (например, меняя форму курсора как сделано в модуле use:
https://github.com/instead-hub/stead3-modules/tree/master/use ), но штатного механизма - нет.
[>]
Re: Трансляция моего блога в ЖЖ и в Telegram
std.hugeping
hugeping(ping,1) — hugeping
2021-01-30 11:06:07
В общем, свобода свободой, но всё довольно-таки грустно.
1. В своё время, приложение для VK с приложением для метапарсера не прошло модерацию в формулировке "не интересно".
2. Товарищи из ЖЖ молча удалили трансляцию моего блога. API я их не мучал, залил все статьи в первый день и 4 дня трансляций не было.
3. В Zen для импорта RSS с сайта нужно, чтобы у каждой статьи была картинка минимум 300px. Но, это ладно, можно сделать (и даже - сгенерировать из банка). Но главное, трансляция невозможна без:
- монетизации;
- вставки js кода;
- одобрения "интересности" контента (тут смотрим на пп.1)
Теперь мне понятно, почему из сети пропали интересные мне материалы. Единственное, что остаётся, существовать в подполье (или закрываться).
[>]
Re: Трансляция моего блога в ЖЖ и в Telegram
std.hugeping
hugeping(ping,1) — Andrew Lobanov
2021-02-01 04:53:36
hugeping>> Сделал трансляцию своего блога в gemini. gemini://hugeping.tk
AL> Не открывается. Только gemini://syscall.ru доступен :)
В некоторых клиентах (амфора) и правда, ругается на сертификат. Вероятно, придется более сложный сервер поднимать, чтобы можно было несколько сертификатов использовать.
[>]
Re: Трансляция моего блога в ЖЖ и в Telegram
std.hugeping
hugeping(ping,1) — boscholeg
2021-02-01 06:48:51
boscholeg> Спрашивается, кто дал право решать, что кому интересно, а что нет.
Ну в случае VK, понятно. Парсерные игры "не радуют". :) Сегодня текст -- это не круто. На самом деле, грустное явление.
boscholeg> Надо искать единомышленников и дербанить Яндекс петициями.
На Яндекс Zen я в итоге не сунулся даже. Так что и петиции писать нет смысла. :) Там просто ориентация на коммерцию сразу же.
boscholeg> Появляется идея некоей "неподконтрольной" общественной площадки. Но вот как её организовать?
Мне не нравится слово "неподконтрольная". Все мы видим, какой контент в основном присутствует в даркнетах, например. Нет, я бы озвучил проблему так:
> На данный момент не существует широко известных общественных некоммерческих площадок.
Ну, как бы, и ладно. Не очень то и хотелось. У меня есть "станция ping", этого достаточно.
[>]
Потерянный Internet
std.hugeping
hugeping(ping,1) — All
2021-02-01 08:35:34
После молчаливой блокировки моего аккаунта в ЖЖ, на который я транслировал свои статьи из блога, я снова задумался о том, что интернет мы потеряли окончательно.
Начал смотреть другие площадки и понял, наконец, простую истину. Все они ориентированы на коммерцию. Например, трансляция сайта в Zen предполагает монетизацию с самого начала. Кроме того, на свой сайт ты должен поместить js код. Для трансляции RSS в Facebook тоже нужно что-то вроде "бизнес" аккаунта. Для твиттера нужен телефон и перевод аккаунта в новый статус. В общем, везде я натыкался на вот это вот: "продвижение", "бизнес аккаунт", "маркетинг". Потом вспомнил ситуацию с моими парсерными играми в VK, которые не были одобрены с формулировкой "не привлекательны для пользователей"...
Короче, я прозрел окончательно. Я понял, почему я перестал находить статьи, которые были бы мне интересны: честные, личные, умные. Ещё раз вспомню прекрасную "Компьютерру". У этого журнала не было шансов, ведь он не представлял ценность для рекламодателей... Тот контент который мне нужен просто выдавлен слепым, уродливым и жадным современным shit-вебом.
Мой блог присутствует в ZeroNet. Но по техническим причинам, автоматическая трансляция туда моих статей затруднена. ZeroNet это, фактически, раздача сайтов по torrent протоколу. Для автоматического обновления контента, мне нужно постоянно держать сайт ZeroNet поднятым. Да и саму трансляцию надо ещё суметь написать.
Тогда я снова обратил внимание на #fideverse. И лично для себя пришёл к выводу, к которому прихожу каждый раз, когда возвращаюсь к этой теме. А слежу я за ней давно, ещё с появления Diaspora. В общем, главная ошибка fediverse-движения -- это попытка копировать современный Web2.0. Смысл понятен. Смотрите, у нас мастодон как твиттер, только лучше! Беда только в том, что "обычным" и "нормальным" людям уютно находиться в золотой клетке. Технические особенности их не волнуют. А законы распространения и поддержки контента -- одинаковы и в fideverse и в коммерческом вебе! Только в твиттере "всплывает" одно, а в мастодоне -- другое. А так, ну то же самое: мемасики, мат, политические лозунги, прочий флуд... Формат способствует. Ориентироваться надо не на "обывателя".
Мы отвыкли читать, думать. Отвыкли от тишины. Не знаю как вы, а я за собой это отчётливо замечаю. Современный веб разрывает сознание на околки, за каждый из которых ведётся отчаянная борьба маркетоидов.
В общем, в качестве жеста отчаяния я снова спустился в "подполье" и поднял "капсулу" в gemini. Что такое gemini?
https://gemini.circumlunar.space/
Кратко, это "исправленный" до необходимого минимума gopher. В частности, UTF-8, разметка в виде упрощённого markdown и поддержка tls (хотя, лично моё мнение, tls -- это уже лишнее). Для просмотра страничек есть свои браузеры и web-прокси. Есть поисковая система.
gemini появился не так давно, но стремительный рост числа клиентов и серверов вдохновляет! Клиенты есть и под Plan9.
В общем, такой экстремальный дауншифтинг в сеть, в которой есть только информация. И честно говоря, мне это нравится. Я бы сказал, что станция ping пытается следовать тем же ориентирам. IDEC и gemini прекрасно дополняют друг-друга! Я предлагаю вам посмотреть на gemeni самим. По крайней мере это любопытно. А любопытство, надеюсь, у нас ещё осталось. :)
До связи!
А ниже я написал немного информации для старта.
* lagrange -- изумительной красоты браузер с фронтендом на SDL2. Сейчас пользуюсь именно им.
https://github.com/skyjake/lagrange
* amfora -- консольный браузер. Неплохо выглядит, но lagrange -- красивее и удобнее.
* deedum -- для Android.
https://play.google.com/store/apps/details?id=ca.snoe.deedum&hl=en&gl=US
Смотрел серверы на go. Их много. Я запомнил два.
* brown-molly -- похоже, "стандарт" сервера.
https://tildegit.org/solderpunk/molly-brown
* net-gemini -- очень маленький, использую его со своими изменениями
https://github.com/jackdoe/net-gemini
Сначала боялся, что придётся морочиться с letsencrypt. Но нет, gemini признаёт самоподписанные сертификаты. Поэтому, просто:
openssl req \
-x509 \
-out somesite.tk.cer \
-keyout somesite.tk.key \
-newkey rsa:2048 \
-days 3650 \
-nodes \
-sha256 \
-subj '/CN=somesite.tk' \
-extensions EXT \
-config <( printf "[dn]\nCN=somesite.tk\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:somesite.tk\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth" )
somesite.tk заменить на FQDN своего ресурса.
Подмножество маркдауна. Есть секции (#). Есть преформатированный текст (```). Есть список (*). Ссылки оформляются особым образом. По одной на каждой строке. Подробности:
https://gemini.circumlunar.space/docs/specification.html
Создаём каталог с файлами .gmi. Стартовый файл обычно называется index.gmi (может зависеть от сервера, но пока все серверы, что я смотрел, работали именно с index.gmi). Генерим ключ и сертификат и запускаем сервер. И это всё! Теперь свою "капсулу" стоит добавить в
gemini://gus.guru
Вы можете раздавать картинки и другие файлы, просто создайте на них относительные ссылки в .gmi файле:
=> /images/cat.png Тут котик!
Картинки отлично смотрятся в браузере lagrange!
*
gemini://gus.guru -- поисковик
*
gemini://wp.glv.one -- Википедия (прокси?)
*
gemini://hugeping.tk -- станция ping
[>]
Re: Потерянный Internet
std.hugeping
hugeping(ping,1) — hugeping
2021-02-01 09:15:58
Пока я писал это сообщение, от техподдержки ЖЖ пришёл ответ.
В общем, кросспостинг возможен только с помощью "профессионального" пакета.
Прекрасная иллюстрация, правда? :)
[>]
Re: Потерянный Internet
std.hugeping
hugeping(ping,1) — vvs
2021-02-02 16:24:34
vvs> А вот, кстати, в чем разница между публикацией в сети и в печати?
vvs> ... Такие площадки способствуют возникновению мотивов для вовлечения людей в потребительство и борьбу за власть, что не случайно, КМК.
Да, есть о чём подумать. :)
[>]
Цензура на станции пинг
ping.local
hugeping(ping,1) — All
2021-02-03 13:24:00
Сегодня я заблеклистил одно сообщение. За всё время это 2-й или 3-й случай (не считая технических блокировок). Точно не помню.
Не смотря на то, что станция ping является моим личным авторским проектом и я заявляю себя здесь самодуром и диктатором, есть некоторый скользкий момент. Станция находится в общении с другими узлами сети idec, и моё самодурство влияет на других людей. Поэтому, я чувствую необходимость пояснить свою позицию.
Я могу заблеклистить сообщение в следующих случаях:
- если оно содержит мат;
- если оно оскорбляет других людей;
- политические лозунги, призывы, оскорбление властей;
- нарушает законодательство.
Кроме описанных случаев, как диктатор-самодур я могу действовать по ситуации.
К сожалению, я несу ответственность за присутствие ресурса в сети.
Если вам необходим доступ к сообщениям без цензуры и вас не устраивает данная ситуация, используйте другие узлы.
[>]
Запуск нового экземпляра acme в plan9port
plan.9
hugeping(ping,1) — hugeping
2021-02-04 21:48:59
Если запустить acme из plan9port, а затем попробовать запустить его снова, то получим ошибку, вроде такой:
> 9pserve: announce unix!/tmp/ns.peter.:0/acme: Address already in use acme: can't post service: 9pserve failed
Поэтому, у меня есть простой скрипт, который запускает acme если он ещё не был запущен. А в последующие разы открывает файл через plumber в уже существующем экземпляре acme. Выглядит скрипт так:
#!/bin/sh
9
PAGER=nobs
MANPAGER=nobs
# Default font for Plan 9 programs.
font=/mnt/font/GoMono/14a/font
# Equivalent variables for rc(1).
home=$HOME
prompt="$ "
# if you want to use rc instead of your shell within acme, uncomment the following line
shell=rc
user=$USER
export \
font\
home\
shell\
prompt\
user\
PAGER\
MANPAGER
if ! pidof plumber >/dev/null; then
plumber
fi
if pidof acme >/dev/null; then
plumb -d edit "$@"
else
acme -f /mnt/font/Iosevka/14a/font "$@" &
fi
Но иногда хочется все-таки запустить ещё один (или не один) acme! Оказывается, это возможно!
#!/bin/sh
export NAMESPACE=`mktemp -d /tmp/acmeXXXX`
9
PAGER=nobs
MANPAGER=nobs
# Default font for Plan 9 programs.
font=/mnt/font/GoMono/14a/font
# Equivalent variables for rc(1).
home=$HOME
prompt="$ "
# if you want to use rc instead of your shell within acme, uncomment the following line
shell=rc
user=$USER
export \
font\
home\
shell\
prompt\
user\
PAGER\
MANPAGER
plumber "$NAMESPACE"
acme -f /mnt/font/Iosevka/14a/font "$@"
for p in `pidof plumber`; do
if cat /proc/$p/cmdline | grep -q "$NAMESPACE"; then
kill $p
break
fi
done
rmdir $NAMESPACE
Скрипт запустит столько acme, сколько понадобится.
[>]
Re: Обновления ii-go (движка узла ping)
ping.local
hugeping(ping,1) — hugeping
2021-02-05 12:57:48
В ii-go влиты внутренние изменения. Пристально смотрим на стабильность работы. :)
1) ii-gemini для генерации блога gemini
2) ii-tool sort и дополнительные ключи выборки
3) внутренние изменения, которые должны улучшить скорость.
[>]
Бороздим интернет без браузера
std.hugeping
hugeping(ping,1) — All
2021-02-08 08:53:07
После погружения в gemini и создания своей "капсулы" в нём, мне стало интересно сделать какие-то свои сервисы. Сначала, я прикрутил прогноз погоды по данным METAR-станций. Потом -- добавил поиск по Библии. И тут я понял, что формат gemini просто идеален для использования его как простого интерфейса для личных сервисов!
Выдача gemini -- простой текст. При этом, ссылки всегда находятся на отдельной строке. Это очень наглядно и здорово. Имея свой gemini-сервер и наполняя его нужными сервисами, ты получаешь удобный, чистый и наглядный интерфейс из любого уголка сети!
В Plan9 нет (и не может быть) современного браузера. Почему его не может быть, хорошо описано здесь:
https://habr.com/ru/post/541196/ Это сильно пересекается с моей заметкой о ненастоящей победе open source:
ii://HZhphc84EsazyASVPck3 Поэтому, в Plan 9 я уже сталкивался с ситуациями, когда мне приходилось делать запросы к веб-ресурсам руками, чтобы авторизоваться, получить нужную информацию в удобном виде и т.д. Но каждый раз это была уникальная ситуация.
А что если совместить всё? Формат gemini -- как чистая выдача. Прямые запросы -- для получения той информации сети, которая нужна. Очищенная от тонн мусора. Оформление полученного инструмента как утилит командной строки, для применения их прямо в acme, а также в виде сервисов gemini! Это может быть интересно!
Есть ситуации, когда сайт предоставляет свой контент через rss. Здесь всё понятно. Но таких сайтов немного. Особенно тех, которые предоставляют в ленте статьи целиком. Есть ситуации, когда сайт отдаёт свои данные по общедоступному rest API. Но это тоже не является общей ситуацией и требует детального изучения этого API. Поэтому я начал с утилиты, которая бы делала GET запрос и вытаскивала из HTML только те узлы документа, которые мне нужны.
Написал, конечно же, на go:
https://github.com/gl00my/clearweb/tree/master/htmlcut
Утилита крайне простая! Мы просто задаём тип элемента, одно из ключевых свойств и режим поиска: regexp/совпадение/нахождение подстроки. Если какой-то узел попал в выборку, то в неё же попадёт и все вложенные элементы. Не смотря на свою примитивность, оказалось, что таких функций достаточно. Добавив режим отрицания логики и запуская утилиту в UNIX-конвеерах я смог получать дистиллированный текст статей из: живого журнала, хабра, stackoverflow...
У нас есть текст статьи, но читать его с html тегами невозможно. На github я нашёл утилиту html2gmi и оказалось, что она отлично работает!
Я почистил её от лишних мне функций, и немного поменял для нужного мне поведения:
https://github.com/gl00my/clearweb/tree/master/htmlgmi
В качестве примера работы утилит в связке, приведу пример чтения статьи на habr:
curl -s "$1" | htmlcut -val '(post\_full|comment\_\_message|user\-info\_inline)' -regexp | htmlgmi -m -n
А вот фрагмент выдачи для статьи, которую я упоминал выше:
Увидев вот эту публикацию [8] про браузерные войны, я хотел было написать альтернативное наблюдение за тем, как мы докатились до такой жизни. Но Дрю ДеВолт уже всё сказал за меня.
Начиная с первых войн между Netscape и IE, главным инструментом в конкурентной борьбе браузеров стала функциональность. Вот только стратегия неограниченного роста и расширения — совершенно безумная. Слишком долго мы позволяли ей продолжаться.
С помощью wget я скачал все 1217 спецификаций W3C [9], опубликованных на текущий момент 1. Существенная часть из них должна быть реализована в браузере, чтобы современный веб работал. Я подсчитал объём этих спецификаций. Как думаете, насколько сложен современный веб?
=> https://habr.com/ru/post/541180/ [8]
=> https://www.w3.org/TR/ [9] спецификаций W3C
Не знаю как у вас, а у меня при просмотре статьи в таком формате радостно щемит сердце.
Результат меня вдохновил! Я понял, что могу читать интернет прямо в acme! Просто запуская нужные скрипты. Или написав прокси-скрипт, который сам анализирует ссылки и обрабатывает выдачу.
Но сначала нужно было решить проблему с поиском. Мне нужно было искать в acme! Ну, или из консоли.
В gemini на капсуле Толстоевского
gemini://rawtext.club/~tolstoevsky/ я узнал о таком метапоисковике как searx, который использует в своей работе google, duckduckgo и так далее. При этом, он не собирает телеметрию. SearX показался мне очень удобным и для начала я просто прогнал его выдачу через свои утилиты:
curl -s -X POST -F 'q='"$q" -F 'category_general=1' -F 'pageno='"$page" https://search.fedi.life/search | htmlcut -val '(result.content|external.link|result.header)' -regexp | htmlgmi -l 0 -m -n
Результат понравился:
INSTEAD [1]
http://instead-hub.github.io
Instead | Definition of Instead by Merriam-Webster [2]
=> http://instead-hub.github.io [1].
Просто абзац текста, ссылка. Абзац текста, ссылка. Где то на этом моменте я начал плакать от умиления. Но парсинг HTML вывода это всё-таки грубо. Почитав про API SearX я узнал, что можно получать выдачу прямо в RSS! И написал ещё одну примитивную программу на go, которая делает всю работу:
https://github.com/gl00my/clearweb/tree/master/searx
Итак, мечта сбылась. Я могу искать в интернете откуда угодно. Из консоли. Из acme. На сервере gemini. И мне не нужен браузер!
Теперь не составило труда оформить поисковик в виде gemini сервиса. Что я и сделал.
gemini://hugeping.tk/searx
Я немного увлёкся, и проксировал вывод выдачи на stackoverflow.com так, что теперь можно искать статьи и читать их не уходя из gemini.
Скрипт вывода статьи на stackoverflow получился таким:
curl -s "$1" | htmlcut -val '(js\-post\-body|answers\-subheader)' -regexp | htmlcut -val '(js\-filter)' -regexp -not | htmlgmi -l 0 -m -n
Узнавать нужные элементы вёрстки удобно в инспекторе Firefox.
Что дальше?
За бортом осталась OAuth авторизация. Она тоже может быть оформлена в виде небольших утилит, но пока я этим не занимался.
Главное открытие, которым я хотел поделиться в этой статье, состоит в том, что победить интернет можно и это не так сложно, как кажется на первый взгляд! Да, в выдаче большинства ресурсов находится 99% шлака, но вырезать %1 нужного контента -- посильная задача. И вдруг оказывается, что доступ к нужной информации в веб не обязательно предполагает запуск браузера и приём тонн мусора в свою голову. Эта мысль вдохновляет и поощряет на дальнейшие эксперименты.
> Но на вершине самой высокой и неприступной скалы сидят золотой и красный дракон. Кто это? А это банковские сайты и госуслуги. Удастся ли приручить и их? Пока страшно об этом даже думать, правда? :)
[>]
INSTEAD 3.3.3
std.club
hugeping(ping,1) — All
2021-02-10 11:14:41
Выпустил INSTEAD 3.3.3.
Список изменений:
* добавлен параметр темы scr.col.brd (цвет бордюра);
* поддержка RTL (при сборке с _USE_HARFBUZZ и новым SDL_ttf);
* добавлен флаг instead.tiny в минимальной версии;
* готовность сборки с emscripten 2.0.12;
* gtk3 сборка включается по умолчанию;
* параметр сборки APPIMAGE;
* новая реализация анимированных gif (из движка удалён LGPL код);
* возможность сборки с lua5.4;
* исправления ошибок.
Бинарные сборки будут появляться по мере готовности.
Творите с удовольствием. :)
[>]
Re: INSTEAD 3.3.3
std.club
hugeping(ping,1) — artur
2021-02-11 10:15:36
>>добавлен параметр темы scr.col.brd (цвет бордюра);
artur> Это, грубо говоря, рамочка вокруг картинок?
Это облась, которая возникает при масштабировании всей темы. Например, квадратная тема на широком мониторе. Справа и слева будут полосы. Теперь этот цвет можно задать.
[>]
Залечь на дно
std.hugeping
hugeping(ping,1) — All
2021-02-13 19:13:09
Уже давно заметил, что после выпуска очередной игры, период подъёма и эйфории сменяется чувством полного опустошения. И ситуация с игрой "Луна-9" не стала исключением. Хотя мне и казалось, что на этот раз я работал относительно "спокойно" и вообще стал гораздо более толстокожим... Не сработало.
Многие люди делают игры, пишут книги, рисуют и занимаются другим творчеством. Возможно, некоторые считают, что делают что-то особенное. При этом, очевидно, только немногие получают признание. Когда ты увлечён, когда твоя история живёт в голове днём и ночью -- всё в порядке! В этот момент творчество не требует оправдания. Ты делаешь то, что должен. Окрыляющая сила удерживает тебя от падения. Но этот период заканчивается и снова начинаются вопросы. Основной из которых -- зачем?
Я отдаю себе отчёт, что делаю странные вещи, которые вряд-ли можно назвать "играми" в полном смысле этого слова. Я точно не знаю, есть ли у меня аудитория, а если есть, какая она. Я не знаю, делаю ли я что-то хорошее, или работаю "в стол". Моё творчество не носит коммерческий характер, поэтому у меня нет обратной связи в виде "продаж". Мои попытки "продвигать" игры часто захлёбываются. Нередко, встречаются с грубой и циничной реакцией, что портит нервы. То-есть, в моменты отсутствия той самой окрыляющей силы, мой здравый смысл говорит мне: брось, это никому не нужно! Ты заигрался. Ты тратишь свою жизнь впустую! Спустить на землю. Твои игры унылы, занимайся работой, семьёй, бытом. Читай больше книг. Не трать свои ресурсы впустую!
И мне нечего возразить ему, этому здравому смыслу. Творчество иррационально и убыточно.
В этот момент всё хорошее забывается, и я погружаюсь в суровую реальность. В реальность, а которой я осознаю, что моё графоманство -- всего лишь эскапизм. Который никому не нужен, кроме меня самого. Но, быть может, стоит признать это и выйти из уютного мирка, который создаёт та самая окрыляющая сила? Есть много других способов отдохнуть.
В этот раз я решил ещё раз сбросить с себя ненужные мне сетевые связи. Покинул большинство чатов в Discord, Telegram. Ушёл из ФИДО. Закрыл проект "чат-метапарсер". Это были парсерные игры в виде чат-ботов для VK, Telegram, Discord. Кроме того, я не писал о своей игре на linux.org.ru, gamin.ru и dtf.ru... Но всё-равно, накрыло...
Сейчас мне кажется, что "Луна-9" моя последняя игра. Пора возвращаться в реальность. Убрать лишний мусор. Залечь на дно...