Pages: 1 2 3 4 5 6
RSS
# Полёты к звёздам
std.hugeping
hugeping(ping,1) — All
2024-02-03 10:31:02


Ютуб подсунул эту лекцию и я её целиком послушал. В детстве я (как и многие в то время) бредил космосом. Надеялся что застану первый межзвёздный полёт. С возрастом, конечно, начал понимать, что не всё так просто. И в техническом и в социальном плане. Поэтому было очень интересно услышать свои озвученные мысли. Например, критика warp drive:

https://www.youtube.com/watch?v=ExdWAm3H65M&t=3355s

> Варп-драйв это... Ну это просто чушь собачья...

Идея путешествий быстрее света -- "заноза" в моём сознании, которая не даёт покоя. Причём не технически-инженерно, а -- философски. Я понимаю, что это путешествие даже невозможно помыслить. Оно просто не вписывается в рассудок, нашу логику. При условии, конечно, истинности второго постулата СТО (постоянство скорости света). А это ведь экспериментально подтверждено! В беседе с друзьями я понимал что эта "заноза", видимо, какая-то моя личная. Но, оказывается, всё-таки не только моя:

> Это (warp drive) -- не решение... Это .. релятивистская инженерия...
> Эта штука нарушает принцип причинности... Это очень мощная вещь -- принцип причинности...

И отличное заключение на тему "зачем":

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

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

И всё-равно, верю, что мечту так просто не украсть. Думаю, прямо сейчас её ростки прорастают в чьей-то детской душе. А как по-другому? По-другому просто не может быть...
P.S. Edited: 2024-02-03 10:38:13

# Разработчик токсик или неоправданные ожидания
std.club
hugeping(ping,1) — hugeping
2024-02-03 09:08:23


# Оправдания

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

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

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

# Откровенность за откровенность

Бесплатно, деньги, суд... Добро пожаловать в опенсорс! Что сказать? Я уже 1000 раз видел "перегоревших" людей, которые ожидали чего-то от меня, от сообщества или кого-то ещё. Так это не работает. Я делал INSTEAD для удовольствия и не ожидал "награды". Но и делать из меня "должника" -- не красиво.

Да, твой "багрепорт" бесполезен. Потому что:
1) Слишком много текста, иногда частично противоречивого. Описание бага должно быть:
- конкретным, лаконичным и формально точным.

Когда я получаю противоречивые и непонятные сообщения, в которых свалено сразу несколько вещей. Я не занимаюсь "докапыванием". Это бесперспективно. Я одно обдумываю сообщение, одну деталь. А мне в ответ - охапка новых впечатлений. Это тупик. Начали с того, что dpi в системах не настоящий. Начал проверять, получил несколько новых выводов -- насчёт тормозов, глюков итд. В итоге я даже уже не понимаю что именно мы обсуждаем. Кривая какая-то вылезла гнома про ускорение. Функция какая-то SDL...

2) Часть вещей о которых ты говорил оказались не тем, что я думал в начале.
- Начали с DPI которое в гноме 96, но оказалось что это всё-таки не так и масштабирование работает так, как написано. Для меня это "звоночек"-- проблема не в том, что что-то не работает технически, а в том, что тебе не нравится как это работает. А что именно не нравится - я так и не понял. Например "шрифт слишком мелкий" -- ну, что это значит конкретно? Я такое утверждение просто пропускаю, оно для _диагностики_ -- бесполезно. Наверное стоило бы хотя бы скриншоты ситуаций привести с размерами. Типа - размер этого изображения на моем мониторе AxB.

3) Навязывание своих правил игры при ведении дискуссии

Да, я оставляю за собой право не объяснять свои мысли и выводы. Во-первых -- чтобы не обижать. Во-вторых -- я знаю SDL2 и INSTEAD лучше, но чтобы объяснять свои выводы я должен написать кучу всего. Вопрос -- зачем? Если я считаю, что данных недостаточно - я никогда не гадаю -- я просто говорю -- версий нет. Что касается твоих репортов, я пробовал воспроизводить, конечно, нечто подобное. Я даже спрашивал в чате инстед. Но никто мне ничего такого не вспомнил. Я обязан был отчитаться тоже за проделанную работу, чтобы не получить порцию негатива? :)

4) Да, я потратил своё время. Которое мог бы отдохнуть, например. И я его ценю. Оно драгоценно.

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

# Гипотезы по тому, что я понял

Ты просил написать о том, что я думаю по проблемам. Чтобы это обсуждать. Думаю я вот что:

- масштабирование работает так, как задумано
- артефакты отрисовки -- проблема с системной SDL2 или зависимых библиотек
- 100% загрузка даже при движении мыши: либо неправильная диагностика (тормозит в "кнопке" во время кат сцен, но не в обычных играх), либо проблема с системной SDL2.
- ускорение мышки при прохождении окна инстеда. Воспроизвести не смог, возможно следствие смены экрана разрешения + работа SDL - но код инстеда тут не причём и контролировать это я не могу в любом случае (нет смысла вообще рассматривать этот "баг")

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

# Заключение

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

P.S. Давно подумываю о том, что Клуб себя изжил. Возможно, стоит оставить только станцию в gemini. Время форумов - ушло, пора и мне уже на покой.

P.S. Edited: 2024-02-03 09:13:22

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — hugeping
2024-02-02 21:14:37


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

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — vvs
2024-02-02 21:10:27


Когда в программе баг, его можно исправить. Но если баг у меня не воспроизводится, какой смысл гадать? Я уже написал что объяснений 100% загрузки процессора при движении мышки у меня нет. Причем тут верю тебе или нет? У меня нет версий. Никаких, кроме той, что SDL как то странно работает на твоих машинах.

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — vvs
2024-02-02 19:53:18


> У тебя есть другое объяснение?

Мне сложно объяснять то, что я не видел.

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — vvs
2024-02-02 18:38:14


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

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

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — vvs
2024-01-31 18:37:15


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

1) Если в настройках инстеда стоит HQ опция, разрешение стоит как "тема" и не стоит полный экран то:
2) Смотрится dpi в теме игры, если dpi не задано - то это принимается за 96
3) Выбирается масштабирование как: dpi системы/dpi темы
4) Масштабирование влияет как на шрифт так и на само изображение (одинаково), но масштабируется не картинка целиком, а "векторно" - масштабируются шрифты, картинки и координаты - тем самым 100% идентичности может не быть, но в целом -- будет близко
5) В некоторых системах/сборках получить dpi системы невозможно.
6) В таком случае можно задать -dpi через опцию
7) Разработчику игры с собственной темой в scr.dpi в теме нужно указать dpi (или диапазон) своего экрана на котором он разрабатывал тему

В процессе нашего обсуждения я проверил следующие утверждения:
1) При изменении -dpi масштабируется картинка, но не масштабируется шрифт - НЕ ПОДТВЕРЖДЕНО
2) В Гноме dpi всегда 96 -- НЕ ПОДТВЕРЖДЕНО (xdpyinfo показывает 96, но SDL возвращает честный dpi), проверено на разных системах с разным dpi, DPI всегда совпадает с реальным.

Проблему тормозов курсора объяснить я не смог. Мне нужна воспроизводимость, которой нет ни на одной из моих систем (bsd, несколько linux, windows, смартфон).

Я считаю, что даже не смотря на проблемы, фича с масштабированием dpi решает конкретную проблему - готовность работать на 2k/4k экранах. Если она не устраивает - ее можно
1) отключить
2) прислать другие решения - но конкретные

Больше я ничего писать на эту тему не буду.
P.S. Edited: 2024-01-31 18:38:32

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — vvs
2024-01-31 16:28:29


Я читаю твой текст и ничего не понимаю. Например ты говоришь о разных разрешениях на однои и том же мониторе... Что это вообще значит и какой в этом смысл?

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — vvs
2024-01-31 16:25:14


> Ты сам рисуешь все шрифты или используешь чужие библиотеки? И ты веришь, что эти библиотеки всегда дают одинаковый результат на разных системах?

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

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — hugeping
2024-01-31 16:01:50


Гм, например, ты пишешь что смена -dpi не влияет на шрифт. Можно 2 скриншота с -dpi 72 и -dpi 150, например?

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — vvs
2024-01-31 15:42:12


vvs> ни физический размер экрана, ни расстояние, на котором он находится

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

vvs> выдаёшь желаемое за действительное.

Я пользователь инстед и мой опыт говорит, что текущее решение приемлемо.

vvs> размер окна "Кнопки" примерно равен 31 см, но на моём компьютере он равен примерно 33 см.

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

> торый в Windows равен 1.0, а у меня - 1.058333.

Вот и подтверждение. dpi где-то может не работать. А на win 10, например, он работает.

vvs> А кто вообще сказал, что при масштабировании TrueType шрифтов используется DPI?

Код INSTEAD.

Про дробность dpi даже нечего сказать. Этл совершенно непринципиальная погрешность.

vvs> Теперь насчёт "честного" dpi, а где его взять?

Если оч. интересно, надо изучать код SDL. Мои факты: работает на всех моих линуксах и Win10. Те. откуда то, берет. Как написано в мануале сдл, так и работает.

vvs> Курсор перестаёт тормозить если указать -nocursor, причём загрузка процессора остаётся совершенно такая же: за 30% для opengl и до 100% -software. При разрешении монитора 1280x720 торможение не заметно. В чём тут загвоздка мне неизвестно.

Да, 100% - это явная аномалия. У меня нп eepc даже близко такого нет. Проблема не в коде инстеда. Либо ты смлтришь анимации кнопки, там мб что угодно.

vvs> Более того, я проверил это и на Windows XP и там то же самое. А видеокарта там совсем другая и даже OpenGL 3.3. Это особенно хорошо заметно в окне, когда курсор пролетает через весь экран и проходит то десктоп, то окно INSTEAD попеременно.

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


vvs> Я тут проверил список требуемых библиотек с помощью ldd и получил следующий список. "Нетребовательность" - понятие относительное, а так вообще INSTEAD немного похож на маленькую операционную систему. Только без обид ;)

Инстед собирается с SDL. SDL можно собрать по разному. Кроме того, можно собрать с gtk3 для файлового диалога. Но в любом случае, это не антидовод на мой тезис о том, что во время отрисовки курсора меняется маленькая область. Буквально десятко пикселей на десятлк пикселей. Даже на питоне я бы не смог написать такой код, чтобы жрать 100% при этом.

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

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — vvs
2024-01-30 21:44:00


vvs> У меня-то будут, а, например, у тебя?
vvs> Не поможет. Там либо окно слишком большое, либо шрифт слишком мелкий.

Я не понимаю, почему ты считаешь что это какое-то частное решение? Смотри, если автор игры сделал игру такой, какой ему нравится видеть на своем мониторе, ему достаточно вбить честный dpi. Соответственно, на другой системе, картинка будет выглядеть примерно так, как хотел автор. На 4к мониторе она увеличится так, чтобы размер физический окна был примерно такой же (с учетом расстояния до глаз итд). Я не понимаю почему это не должно работать? Оно именно работает.

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

vvs> А вот "Переход" - совсем не реагирует на масштабирование. А это, по-моему, одна из лучших игр на INSTEAD.

Опять же, я не понимаю. :) Я запустил переход и вижу что он реагирует на изменение dpi. И в теме и с -dpi. Никакой разницы в механике масштабирования я не заметил. Возможно, если размера экрана не хватает для выбранного коэффициента, он не будет масштабировать. Но я не помню, надо проверять. Может все таки до максимума.

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

У меня подобные проблемы были с nvidia + gnome. Правда не только в инстеде. Я не помню, как я их решил. Попробуй -software.

vvs> Явно OpenGL не используется

Да нет, используется. Спрайты грузятся заранее и потом блитятся SDL2, который ускорение должен использовать. Чтобы его отключить, пишешь -software. В общем, мне все-таки кажется что с SDL2 что-то не так. Кстати, иногда я встречал проблему когда люди собирали инстед как-то странно, и там была сместь SDL2 и SDL1 библиотек. Проверь на всякий случай ldd sdl-instead.

vvs> а INSTEAD тоже вроде не AAA видео игра.

Инстед очень нетребовательное приложение. Оно разрабатывалось с учетом того, чтобы работать даже по vnc протоколу (и хорошо кстати работает), потому что оно отрисовывает только изменения. Грубо говоря, когда ты ведешь курсор - ничего кроме курсора не меняется. Надо ли говорить, что даже в софтварном режиме производительности на это любого процессора достаточно? А ведь инстед хорошо работал и на АРМ КПК с 100-400 мгц.

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — hugeping
2024-01-30 21:10:04


Загрузка процессора в самой игре - 3%. В общем, не знаю. Нужно отлаживать конкретно на твоей системе.

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — hugeping
2024-01-30 21:08:14


Я скачал кнопку и запустил. Машина 12 летней давности. Запускал и без аккселерации и с ней. Работает очень гладко. Не знаю, я не смогу помочь наверное. Возможно какие-то особенности конкретной системы. Ради интереса, поставь wine и запусти windows версию. Я думаю проблемы уйдут.

Проверил 72 на разных мониторах. Я считаю что 96 как стандартный dpi лучше, всё-таки. В общем, не знаю даже, пока проблемы я не увидел. Поддержку highdpi можно выключить если она мешает сняв HQ в настройках. Вообще, предполагается что она нужна в основном для 2K и 4K мониторов.

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — vvs
2024-01-30 20:58:08


vvs> Результат-то практически тот-же, только вместо -dpi 144 я тогда пишу scr.dpi = 67 (72 тоже пойдёт, но несколько мельче).

Возможно, стоит попробовать 72 как "умолчательный" dpi. Тогда по кр мере дефолтные темы будут везде выглядеть более правильно.

vvs> И всё-равно в "Кнопке" слишком большое окно, графические глюки и тормозит курсор.

Это всё-таки уже особенностями конкретной игры.
Большое окно, значит нужно scr.dpi в теме для кнопки другое выставить и перезалить в репозиторий.
Графические глюки - не видел никогда, не знаю. Нужно воспроизведение. Пока этого нет я ничего ответить не могу. Ради интереса, можно выставить -software, если пропадут - то глюки скорее всего относятся к SDL+драйверы. Если не пропадут, возможно, к самой кнопке.

А курсор рывками, думаю, потому что игра сама отрисовывает свои кадры, в таком режиме курсор тоже отрисовывается с частотой кадров игры. То-есть, стоит скажем 25 fps и курсор рисуется так же. Так что, я думаю, это "фича" "кнопки". В прочем, там такое было только в заставках. Если не изменяет память. В INSTEAD есть режим использовать системный курсор, кстати.


Единственное отличие - в главном меню INSTEAD теперь тоже нормальный шрифт (если последней была загружена нормальная тема).

vvs> И сразу видно, что если на моём мониторе коэффициент 1.5, то на твоём мониторе тогда будет уже двойное масштабирование. Не уверен, что это всем понравится.

vvs> Кстати, курсор тормозит явно из-за отсутствия его аппаратной поддержки. В остальных (не INSTEAD) играх и приложениях такое не наблюдается.

hugeping>> На практике это даёт возможность разработчику темы написать scr.dpi = и тот dpi на котором они её разработали (на котором она хорошо смотрится). Это всё что нужно.. Вот я тебя и прошу - найди такой хороший dpi для стандартных тем, сообщи мне - и я попробую на своих мониторах..

vvs> А вот в игре "Переход" ни этот параметр, ни -dpi 144 почему-то не действуют.

vvs> Надо потестировать и в других играх, но сегодня уже поздно.

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — hugeping
2024-01-30 19:05:43


https://instead-games.ru/forum/discussion/comment/13852/#Comment_13852

На всякий случай ещё раз укажу на сообщение в котором это написано.

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — vvs
2024-01-30 19:04:28


vvs> Запускаю Tutorial: масштаб 1.058333, режим 846x634, окно, шрифт - мелкие. Выхожу, указываю -dpi 144: масштаб 1.5,

А надо было сделать не это, надо было сделать _другое_.
А именно - открыть тему которую ты используешь (.ini файл) и в теме написать
scr.dpi = 72 (или другое число)

vvs> Да, ты прав. SDL действительно видит настоящий DPI - 101.599998, хотя xdpyinfo и показывает 96x96, т.е. для инстеда менять его нет необходимости. Но это ничего не даёт на практике :(

На практике это даёт возможность разработчику темы написать scr.dpi = и тот dpi на котором они её разработали (на котором она хорошо смотрится). Это всё что нужно.. Вот я тебя и прошу - найди такой хороший dpi для стандартных тем, сообщи мне - и я попробую на своих мониторах..

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — vvs
2024-01-30 17:20:40


vvs> Странно. А это точно SDL?
Да, я вывожу printf dpi из C кода в момент взятия:

157.825241 -- это НАСТОЯЩИЙ dpi
DPI scale: 1.644013
Video mode: 1315x986@32bpp (opengl)
peter@t480:~/Devel/instead$ xdpyinfo | grep 96
  resolution:    96x96 dots per inch -- это ФИКТИВНЫЙ о котором ты говоришь 

vvs> У меня в гноме установлено масштабирование шрифта 1.5 и все приложения гнома имеют нормальный масштаб и даже Firefox.

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

vvs> Менять на 72 я особого смысла не вижу. А почему тогда именно 72? Это опять какая-то магическая константа. Мне так больше подходит 67, а кому-то может и нет.

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

vvs> Просто DPI - это достаточно окольный и ненадёжный параметр для масштабирования.

Мне пока кажется что он надёжен. Я пока не видел систем где DPI возвращается неправильно. Даже в windows оно работает как надо. Я тебе верю, но мне нужен какой-то опыт. Но я исходил из 2х предпосылок:

1) Нативные темы НОРМАЛЬНО смотрятся на ЧЕСТНЫХ dpi 96
2) SDL2 даёт верный dpi

Пп1 - возможно, я не прав. Но тогда нужно взять конкретную тему и предложить тот dpi в которой она нормально смотрится. Я попробую у себя и сравним ощущения.

Пп2 можно проверить. Воткни в graphics.c в функции gfx_get_dpi() в конце printf("%f\n", hdpi) и сравним с твоим реальным dpi;

vvs> Разве что идея растягивать окно, но ты говоришь, что это невозможно. А почему?

Потому что INSTEAD поддерживает другую парадигму -- игра жёстко привязана к определенным пропорциям и выглядит одинаково вне зависимо от масштаба. Все игры уже написаны так что привязаны к своему разрешению виртуальному. На лету это не меняется в принципе. Если это менять -- то это уже INSTEAD4. Есть другие мои движки где по другому: reinstead и rein-- если и будет инстед4 то он будет на rein.

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — hugeping
2024-01-30 14:08:42


hugeping> Какие решения ещё тут могуть быть?

Ты предлагаешь настройку "масштаб" сделать в меню?

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — vvs
2024-01-30 13:03:23


vvs> Ты мне сейчас кое-что напомнил: действительно, некоторые дистрибутивы линукса патчат гном. Так что я не удивлюсь если где-то до сих пор DPI отличается от 96.

У меня xdpyinfo показывает 96, но SDL2 возвращает что-то иное, так что масштаб становится 1.5.
Что именно берет SDL2 я не знаю, но это честный какой-то DPI.

> У меня и xdpyinfo, и SDL, и INSTEAD видят то, что я им укажу. По умолчанию 96x96, я специально меняю на DPI монитора с помощью `xrandr --dpi from-output`, но это даёт 101.6, т.е. 101.6 / 96 = 1.058333

А какие темы-игры? В принципе, можно поменять dpi с 96 на 72.

Какие решения ещё тут могуть быть?

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — vvs
2024-01-28 22:27:47


vvs> С моей точки зрения проблема здесь в том, что основная единица измерения, от которой выполняется масштабирование, выбрана произвольно. Согласно википедии, для первоначального значения DPI Apple выбрала 72 типографских пункта, что было вызвано размером экрана, соответствовавшего тогда размеру листа бумаги. Microsoft увеличила это значение ещё на треть и получилось 96. В настоящий момент оно не соответствует никакому физическому явлению и является историческим артефактом.

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

vvs> Если просто вычислить размер экрана, соответствующего разрешению 800x600 и DPI 96, то получается 10" по диагонали - это очень маленький экран.

Это если ты меряешь dpi по диагонали. В инстеде используется "горзонтальный" dpi.

vvs> Вообще, в современных версиях Windows и Linux DPI вообще нигде не используется, а есть другие API для определения масштаба изображения.

В SDL2 API предоставляет именно горизонтальный и вертикальный dpi. Я использую горизонтальный.

vvs> Особенно мешает тот факт, что реальный DPI монитора не имеет ничего общего с 96 DPI.

Вот тут я не понял. Реальный DPI монитора должен быть реальным DPI. Ну то-есть, честным DPI. Если у тебя монитор 96 dpi (горизонтальный) то предполагается что SDL2 вернет именно его и промасштабирует как dpi/dpi-темы. dpi-темы можно указать, но если она не указана - то считается что тему разработали на 96 dpi, что не очень далеко от правды, если говорить о стандартных темах.

> Например, в последних версиях Gnome этот параметр всегда принудительно устанавливается 96 DPI для любых мониторов.

Я на gnome сейчас вот в браузере пишу этот текст и у меня масштаб INSTEAD разный на двух системах. От 0.96 до 1.6. Забавно, что xdpyinfo во всех случаях показывает 96x96, но вот SDL api всё-таки возвращает откуда то "честное" dpi.

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

Это возможно только в reinstead. Там изначально масштабируемый интерфейс. А вот в INSTEAD это невозможно.

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — vvs
2024-01-28 22:07:07


> А основной вопрос был там такой: при запуске инстеда в окне шрифт по умолчанию слишком мелкий. В настройках стоят: тема и HQ. Версия инстеда 3.5.1, откомпилированная с исходников, ОС Linux (NixOS), видеорежим 1920x1080. Инстед выбирает коэффициент масштабирования 1.058333, поскольку у моего монитора DPI 101.6. Это ещё одна косметическая проблема: я не могу указать дробный DPI, но если инстед берет его от SDL, то реально использует именно это дробное значение.

Кроме видеорежима хорошо бы сказать размеры монитора, тогда бы мы проверили действительно ли dpi равен 101 :)

А вообще, в таком случае можно указать параметр -dpi число -- чтобы инстед брал именно его, а не тот, что стоит в системе. То-есть, например -dpi 150 -- коэффициент масштабирования станет 150/96

Эту настройку можно записать в профиле инстед. Я сейчас точно не скажу где он лежит (это зависит от ОС и от сборки) но в Linux думаю проще опцию добавить (командной строки).

P.S. Edited: 2024-01-28 22:07:21

# Re: Последний день лета
std.hugeping.micro
hugeping(ping,1) — hugeping
2024-01-27 13:34:54


В настройках инстеда при этом разрешение должно стоять: тема.

# Re: Последний день лета
std.hugeping.micro
hugeping(ping,1) — hugeping
2024-01-27 13:20:28


Вот обсуждение на форуме на эту тему:
https://instead-games.ru/forum/discussion/766/podderzhka-dpi-v-instead-chto-delat

Возможно, проблема существует, но мне нужно её увидеть. А так, вроде бы я вижу что масштабируется всё нормально. Странно в общем.

# Re: Последний день лета
std.hugeping.micro
hugeping(ping,1) — vvs
2024-01-27 13:08:12


Про инстед всё-таки лучше в соответствующем разделе, например ii://std.club

Вообще с dpi было все более менее нормально, в том плане что он берёт в том числе системный dpi и поддерживает highdpi. Так что для того, чтоб вообще понять что происходит нужно написать:
- Что за ОС
- Какой именно Инстед? (Собран руками, взят готовый (если да, то какой)). Например, если не ошибаюсь AppImage вариант идёт без поддержки highdpi

P.S. Да, в настройках инстеда надо указать в разделе графика - hidpi ил

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — vvs
2023-11-13 22:33:10


hugeping>> Записал и выложил новый видеоподкаст. INSTEAD и парсерные игры.

vvs> Браво! Мне понравилось.

Спасибо!

vvs> Небольшие замечания на будущее. Элизы в моем emacs вообще-то нет, требуется специально её устанавливать, зато везде есть dunnet, который почему-то не упоминается вовсе.

Потому что не знал! Почитал, прикольно.

> Так же не мешало бы упомянуть и SHRDLU, которая являлась настоящей реализацией ИИ для своего времени, тоже в MIT.

Спасибо, не знал!

> Музыка в игре временами заглушала речь, да и голос, бодрый и выразительный в начале, несколько увял к концу :(

Там много проблем было со звуком. Я даже выложил 2й ролик https://www.youtube.com/watch?v=el2Dh2HwB3s где пытался исправить звук, но возможно сделал ещё хуже. Не так просто без опыта это делать.

# Re: Новости с INSTEAD фронта
std.club
hugeping(ping,1) — hugeping
2023-11-13 17:20:33


Записал и выложил новый видеоподкаст. INSTEAD и парсерные игры.

https://www.youtube.com/watch?v=5fflaYGf9cY

# Re: Есть ли жизнь без Telegram?
std.hugeping
hugeping(ping,1) — hugeping
2023-11-06 11:01:43


Для тех, кто это прочитает.
Адрес нашей группы "Флудилка луддитов" в jabber: instead@chat.404.city

# Re: ii-net.tk
idec.talks
hugeping(ping,1) — ahamai
2023-11-06 09:25:03


ahamai> Я ее создал, Петр. :) И я до сих пор оказывается маинтайнер instead в openbsd. С версией 3.0.1

Когда уже обновишь до 3.5.1 ? :)

# Re: Есть ли жизнь без Telegram?
std.hugeping
hugeping(ping,1) — btimofeev
2023-11-06 09:23:39


>>> REDACTED FOR PRIVACY

btimofeev> На моем домене в зоне org такое тоже появилось, а раньше там была личная инфа. Вот тут пишут что это из-за GDPR https://www.vice.com/en/article/vbpgga/whois-gdpr-europe-icann-registrar

Ничего себе! Куда катится мир. :)

# Есть ли жизнь без Telegram?
std.hugeping
hugeping(ping,1) — All
2023-11-05 18:28:02


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

За это время пробовал разное, в том числе и matrix, но в итоге не был удовлетворён. А на днях почти случайно вернулся к "традиционным" irc и jabber. И был приятно удивлён! О чём и решил написать эту заметку.

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

Сначала по наводке посмотрели на ircv3 ( https://ircv3.net/ ). Как я понял это инициатива по развитию irc. Стандарт содержит расширения, которые приближают пользовательский опыт к тому, к чему привыкли люди сегодня. Попробовал. Вообще -- понравилось! Но к сожалению клиентов которые поддерживают набор нужных стандартов очень мало и они часто сырые.

Затем вспомнили Jabber, и... Оказалось, что и там тоже есть кое-какое движение. Не вдаваясь в подробности напишу, что следующая комбинация оказывается вполне годной и комфортной для "обычного" пользователя:

- Мобильное приложение: conversations (бесплатно в F-Droid, платно в google play);
// есть мнение, что бесплатный "c0nnect messenger PRO" в google play это тот же conversations, но я не проверял, я давно пользуюсь F-Droid;
- Linux/BSD приложение: dino (В Debian - назвается dino-im), на худой конец - gajim;
- Windows: gajim
- Веб приложения: https://github.com/movim/movim или https://conversejs.org
- Публичный сервер с нужными возможностями: 404.city

В такой конфигурации набор нужных расширений сервера + поддержка этих расширений клиентом создают комфортную среду для чат-комнат и обмена сообщениями. По крайней мере, вы не теряете сообщения когда уходите в оффлайн, можете обмениваться файлами/картинками, редактировать сообщения, подключаться одновременно с разных устройств итд. И получаете при этом современно выглядящий интерфейс (в том числе и web).

Понятно, что выбирая сервер 404.city мы меняем шило на мыло (я вообще не знаю, кто этот сервер поддерживает, с какими целями и т.д., и вообще - whois интересное выдаёт :))

> whois 404.city
> Registrant Street: REDACTED FOR PRIVACY
> Registrant City: REDACTED FOR PRIVACY
> Registrant State/Province: Capital Region
> Registrant Postal Code: REDACTED FOR PRIVACY
> Registrant Country: IS

И дальше подобное... А что, так можно было? :)

Но при реальном внедрении, например, на работе - стоит поднять свой сервер (тот же ejabberd или prosody), movim и... по идее наступает счастье. Осталось только самое сложное, убедить сослуживцев :)

Если вы тоже решите попробовать вернуться в jabber, то мой jid: hugeping@404.city
Адрес чата "Флудилка луддитов": instead@chat.404.city

P.S. На jabber.ru есть проблемы с регистрацией аккаунтов, да и сервер не поддерживает нужные расширения, к сожалению.
P.S. Edited: 2023-11-06 11:01:56

# Re: ii-net.tk
idec.talks
hugeping(ping,1) — ahamai
2023-11-05 15:12:32


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

# Re: ii-net.tk
idec.talks
hugeping(ping,1) — ahamai
2023-11-05 15:04:27


ahamai> Сабж мёртвый? И сеть тоже мёртвая?

Привет! Да, сеть сложно назвать живой. Хотя кто-то всё-таки есть. А ты откуда узнал про idec?

# Re: Каждый программист должен написать свой редактор
std.hugeping
hugeping(ping,1) — vvs
2023-10-26 19:23:23


Про диалог тоже слышал. А вот твой пример не понял прям совсем. :) Даже специально паузу взял, думал изучу на досуге. Загадочно и непонятно. Как ФП :)

# Re: Каждый программист должен написать свой редактор
std.hugeping
hugeping(ping,1) — vvs
2023-10-24 16:13:46


hugeping>> Правда, всё время что-то дописываю, а это немного отвлекает собственно от самой работы. :)

vvs> А ты видел Skein в Inform 7? Вообще, у этих систем много общего:

Skein не видел. Про сам Inform 7 знаю и смотрел на "код программ".. В итоге, правда, настроен довольно скептически. Может быть кому-то проще писать на таком как бы человеческом языке, но мне показалось что это принесёт больше проблем. Хотя сам неоднократно думал над DSL который бы компилировал в код INSTEAD игры, но там я думал о специализированном синтаксисе.

# Re: Каждый программист должен написать свой редактор
std.hugeping
hugeping(ping,1) — vvs
2023-10-23 22:35:41


vvs> Я могу тебя понять :)

vvs> Сегодня обновил расширение и обнаружил, что оно попало в кэш хромиума, в кэш расширений да ещё и сам установленный экземпляр.

А дописал всё-таки к red механизм подсветки синтаксиса (сейчас есть поддержка: Си, Lua, markdown и diff) и вовсю использую его на работе. Правда, всё время что-то дописываю, а это немного отвлекает собственно от самой работы. :) Да, уже вижу что написан он грязновато, но это вечная проблема.

# Re: Каждый программист должен написать свой редактор
std.hugeping
hugeping(ping,1) — vvs
2023-09-27 21:41:48


vvs> есть один редактор с поддержкой Lua первого класса - Neovim. Может тебе это будет интересно для сравнения.

Да, я в курсе. vim (который не neo) я использовал одно время (пару лет), но потом перешёл на emacs. К режимам я привык, но не полностью. Хороший редактор, и neovim хвалят очень, думаю я его ещё посмотрю.

# Re: Каждый программист должен написать свой редактор
std.hugeping
hugeping(ping,1) — hugeping
2023-09-23 10:00:41


Довольно сильно продвинулся с red!

Основные отличия будут видны, если он используется не в Windows среде:

- Теперь есть win почти как в acme, в котором можно выполнять команды и есть даже ввод-вывод через fifo;
- Запуск процессов теперь осуществляется через потоки red, что должно исключить "зависания".

Ядро rein в плане потоков было немного переработано (для поддержки ThreadDetach), но в целом - движок не пришлось менять. Пока очень доволен. Вижу как red медленно (но верно) превращается в мой личный инструмент.

P.S. Ещё бы логотип какой-то придумать... Сейчас это просто красный квадрат с рамкой, который генерируется прямо внутри кода red. Хотя, может и не плохо.

# Re: Новости с полей
idec.talks
hugeping(ping,1) — Andrew Lobanov
2023-09-12 18:16:45


AL> Думаю, ещё скомунизжу у Петра из ii-go его текстовую базу до кучи. Правда там с поиском надо покумекать как сделать, чтобы оно не кушало ресурсы как не в себя.

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

А если речь про поиск содержимого, то я его по-моему вообще не делал.

Но вообще, ii-go на удивление шустро работает, я даже не ожидал.

# Re: Документация
idec.talks
hugeping(ping,1) — neonxp
2023-09-12 15:04:10


neonxp> И я пилить сел :) на трех живых пользователей сети будет три гошных реализации 🤣

Я считаю, это прекрасно. :))

# Re: Документация
idec.talks
hugeping(ping,1) — Andrew Lobanov
2023-09-12 08:22:26


AL> Зачем это нужно?

AL> Я планирую сделать полноценные пакеты ПО для работы с IDEC-сетями. Серверную часть и клиентскую часть. В них, помимо документации по ПО хочу добавить и документацию по IDEC в целом. И, может, непосредственно по секте плохих парней.

Это просто отлично! Если нужно, для дальнейшей переработки бери фрагменты ii-go.

# Re: Победа будет Za нами!
std.hugeping
hugeping(ping,1) — kct-ac12
2023-09-11 18:47:56


kct-ac12> Слава России!

Да, бро! Только вперёд!

# Re: Каждый программист должен написать свой редактор
std.hugeping
hugeping(ping,1) — vvs
2023-09-11 18:47:36


vvs> Тогда жду, что следующим проектом станет свой язык программирования :) Нет, ну серьёзно, у Пайка были свои ОС (Plan 9 и Inferno), свой редактор Acme и свои языки - Limbo и Go. Правда он это делал не один, да и, к тому же, не бесплатно.

Я не потянул бы такое. Хотя мне уже тут советовали посмотреть Оберон. :)
Но пока я решил чисто утилитарную проблему - испытал сегодня на работе - пока всё отлично!

# Re: Атака бота
idec.talks
hugeping(ping,1) — Andrew Lobanov
2023-09-11 16:38:36


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

P.S. Интересная игра. :)

# Re: ii-net.tk
idec.talks
hugeping(ping,1) — Andrew Lobanov
2023-09-11 08:21:51


AL> Где найти apk-файл с мобильным клиентом даже и не знаю сейчас. Увы, он основательно забил на idec.

А исходники где-то лежат?

# Re: Каждый программист должен написать свой редактор
std.hugeping
hugeping(ping,1) — vvs
2023-09-10 15:34:36


vvs> https://luvit.io ? Дисклеймер: найдено в интернете, я не специалист по Lua и т.п.

Если сделать специализированный код, то - можно, конечно. Я просто старался остаться в рамках API rein. Ну и вообще, хотел сохранить простоту.

vvs> И всё же большие и сложные проекты я бы на нём делать поостерёгся.

red меньше 2000 строк в общей сложности. Lua конечно хорош как встраиваемый язык.

# Каждый программист должен написать свой редактор
std.hugeping
hugeping(ping,1) — All
2023-09-10 11:32:09


Решил написать небольшую заметку про свой новый проект. Интересно, что как и остальные, он стал эволюцией моих прошлых экспериментов. Занимаясь INSTEAD я полюбил Lua. Играя с Plan9 я сделал парсерный re:instead (в том числе и для того, чтобы можно было писать парсерные игры прямо в Plan9). Развил re:instead в rein, который стал уже скорее "платформой" приложений.

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

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

У кого-то может возникнуть вопрос. А почему я не использую vscode? Потому что моя профессия приносит мне удовольствие и я разборчив в своих предпочтениях. Что касается vscode:

- это приложение на основе браузера;
- vscode пришёл из недр корпорации.

Как я обхожусь без "фишек" современных редакторов? Наверное, мне они не так уж и нужны. Даже наоборот, вылезающие подсказки во время набора раздражают. А после acme я осознал, что и "раскраска" текста -- какая-то ненужная нелепость. Играет роль и то, что в моей области деятельности не нужно запоминать бесчисленное число методов и классов. Я могу писать код просто "из головы".

Я начал проводить всё больше времени в acme, написал для него e-mail клиент, но всё-таки нельзя сказать, что он стал моим единственным редактором. Он является естественным в своей родной среде обитания - Plan9, но для работы в Linux/Bsd* необходимо собрать plan9ports. Я не чувствовал, что инструмент "принадлежит" мне в полной мере.

Так что мысль о собственном _простом_ редакторе стала приходить мне всё чаще. Наверное ещё во время работы над re:instead (который был написал под вдохновением от редактора Lite) я увидел, что это возможно.

Потом, в rein я написал простой "традиционный" редактор edit и пользовался им при разработке под rein. Ощущение инструмента в котором ты знаешь каждый "болтик" было непередаваемым!

В edit (редактор rein) в начале было много багов. Файл в edit был представлен в виде массива строк. Это удобно для навигации и отображния, но совсем неудобно для редактирования. Пока я его дописывал и фиксил баги я подумал, а что если файл представлять не массивом строк, а просто -- одной строкой? И тут же снова вспомнил acme, где изменения высоты скроллера явно намекает на то, что в качестве позиции используется смещение, а не номер строки. Стало интересно попробовать. И в этот раз я не смог погасить свой порыв. Так я и начал писать свой мини-acme.

Многие фишки acme раскрываются в полной мере в Plan9. Например, файловая система, через которую можно управлять редактором. Да, в Linux тоже можно монтировать её через fuse, но есть нюансы, которые делают этот метод не рабочим. Поэтому я был настроен делать именно "мини"-acme редактор, в котором мог бы делать свою повседневную работу. В качестве механизма расширения - конечно Lua!

Сейчас редактор доведён до полу-готового состояния и смержен в master ветку проекта rein. Редактор делается под мои предпочтения, поэтому он не будет демонстрироваться "широкой" публике, но я всё-таки решил написать этот текст на случай, если им заинтересуется кто-нибудь ещё.

Итак, особенности редактора red.

# RED -- Rein Editor

## Клавиши

В отличие от acme в red работают многие привычные комбинации клавиш:

- ctrl-c/x/v - копирование, удаление, вставка;
- ctrl-z - undo;
- ctrl-k - удаление до конца строки;
- стрелки курсора - перемещение по тексту во всех направления;
- page down/up - перемещение по тексту по странично;
- home/end - начало и конец строки;
- ctrl-w - умное выделение;
- ctrl-s - сохранение буфера (окна).
- shift-движение - выделение клавиатурой.

Как в acme (или почти как в acme) работают:

- escape - выделение последнего блока, удаление;
- ctrl-f - автодополнение путей (правда, если варинтов несколько - выдаётся первый);
- ctrl-a - начало/конец строки.

## Мышка

- аккорды acme - должны работать похоже;
- правая кнопка мыши - простой поиск как в acme;
- alt+правая кнопка мыши - простой поиск назад;
- shift + правая кнопка мыши - эмуляция средней кнопки мыши.

В отличие от acme курсор _мыши_ не прыгает на выделенный текст поиска (так как управление курсором из приложение возможно не во всех средах). Чтобы продолжить поиск нужно повторно кликнуть в пустую область где нет текста (например, справа от строки). Или кликнуть на слово для поиска этого слова.

- правая кнопка мыши на :число - прыжок на строчку.
- средняя кнопка мыши - выполнение действия: меню, вызов программ, открытие каталогов и файлов.

В acme открытие файлов и передача в plumber делается по пкм, однако это меня всегда немного раздражало. Потому что иногда клик приводит к поиску, а иногда - к действию. Захотел поискать https://... в коде, а открылся браузер. Поэтому в red все активные действия висят на средней кнопки мыши. А открытие каталогов, файлов - это тоже активные действия. Возможно, я сделал ошибку, но пока решение кажется удобным.

- умное выделение

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

## Окна

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

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

Если имя файла начинается с "+", то такой файл не сохраняется на диск. Поэтому информационные окна называются: +Errors, +Output, +Help и т.д. Вы можете любое окно сделать информационным просто добавив + в начало имени активного файла (первый файл в списке файлов в меню).

Скроллеры в отличие от acme работают традиционно - левая кнопка мыши "таскает" скроллер.

## Вызов программ

Поддержки win (запуск шелла) на данный момент нет. Это связано с тем, что полноценную поддержку процессов нужно делать через fork. Это привяжет red к Unix. К тому же, red - это lite-acme. :) Расширения red можно делать на Lua, но для запуска полноценного shell этого недостаточно.

### Возможности по запуску программ

- >cmd - запуск cmd с передачей в качестве параметра временного файла с данными;
- <cmd - запуск cmd с чтением stdout;
- !cmd - запуск cmd

Кроме того для Linux всё-таки доступна:

- |cmd - работает примерно как в acme. На вход через пайп передаётся текст или выделение и ждём выхода.

Всё это реализовано за счёт io.popen временных файлов и coroutine (переключение после чтения пачки строк). Поэтому - ненадёжно. Если вы запустите программу которая висит и ничего не выдаёт, red зависнет. Поэтому реализацию нельзя считать полноценной замену acme. Тем не менее, я пользуюсь этим механизмом для проверки орфографии.

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

### Встроенные команды

Основной механизм расширений редактора всё-таки не через запуск внешних команд, а за счёт написания процедур на Lua. Процедуры находятся в файле data/lib/red/proc.lua и на данный момент включают следующие команды:

- sub - поиск или поиск/замена построчно;
- gsub - поиск или поиск/замена глобально;
- select - синоним gsub без замены;
- find - синоним sub без замены;

Внимание! Все регулярки - регулярки на Lua!

Примеры:

select ^.*$ - выбрать всё
sub /^/ / - построчно добавлять в начало строки 4 пробела.

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

gsub ^.*$ - выделили всё (тот же select)
sub /^/ / - отработали по выделению.

Доступна форма записи поиска с / - если нужно работать с пробелами:

select / / - выбрать 2 пробела.

Другие встроенные команды:

- Getline - добавляет справа от себя текущий номер строки. Удобно для составления "закладок" в файле;
- fmt [ширина] - аналог утилиты fmt;
- grep выражение - рекурсивный поиск по содержимому файлов каталога. Каталог - dirname открытого в данный момент файла;
- Run [программа] - запуск программы rein (интеграция для разработки под rein) или текущего файла.

## Dump

При нажатии средней кнопки мыши на Dump - в текущем каталоге создаётся конфигурация сессии (файл red.dump). В сессии сохраняются все данные открытых файлов. Даже если вы сотрёте сами файлы, при восстановлении сессии они будут показаны в окнах. Если red находит в текущем каталоге red.dump он всегда его загружает. Возможно, в будущем появится опция для загрузки Dump.

## Параметры командной строки

Запуск red:

$ rein red [-fs <размер шрифта>] [файлы]

Чтобы немного ускорить запуск можно воспользоваться опциями:

$ rein -platform-nosound -platform-nojoystick ...

Для удобства я делаю себе скрипт вида:

-- red
#!/bin/sh
/home/peter/Devel/rein/rein -platform-nosound -platform-nojoystick red -fs 19 "$@"

И запускаю редактор из любого места.

## Открытие файлов по средней кнопке мыши

В файле data/lib/red/uri.lua вы можете прописать вызов внешних программ. Например, запускать просмотрщик pdf если вы нажали на строчку, которая заканчивается на .pdf.

## Настройки для типов файлов

В файле data/lib/red/presets.lua вы можете настроить поведение редактора в зависимости от типа файла (расширения). Пока доступны только размер табуляции и режим табуляции (пробелы или \t). Скорее всего появятся и другие настройки.

## Цвета

В начале red.lua в таблице conf.

# Что дальше?

Редактор ещё сыроват, но я начал его использовать и постоянно вношу доработки. Приоритет разработки - личное использование. Ведь вряд-ли вы захотите променять vscode на _это_! Не правда ли? :) Но меня это не беспокоит. Ведь теперь я точно знаю -- каждый программист должен написать собственный редактор!

У Линуса есть https://github.com/torvalds/uemacs у Роба Пайка -- acme, у Столмана emacs. А у меня теперь есть red и мне больше не нужно выбирать!

P.S. Один мой друг удивился тому, что у меня есть желание программировать после работы и тратить время на такие вот хобби проекты. Не знаю в чём дело, но с годами желание программировать у меня никогда не исчезало. И я считал что это нормальное состояние для программиста. Программирование -- это в первую очередь форма творчества, а творчество всегда лечит. Ведь творчество это свобода. Эксперимент, игра -- но никак не рутина. В хобби проекте ты можешь почувствовать это в полной мере, ведь тут ты не ограничен целесообразностью. А на работе... На работе теперь можно будет редактировать код в red :)

# Re: Победа будет Za нами!
std.hugeping
hugeping(ping,1) — hun19867
2023-09-07 11:59:28


hun19867> Слава России!

Согласен, бро! Слава России!

# Re: Мова
std.hugeping
hugeping(ping,1) — Andrew Lobanov
2023-09-06 15:15:28


AL> Какой же он секретный, если ты его уже давно в курилке так вкусно презентуешь?

Да, ну на то она и курилка :)

Вообще, мне самому нравится то, что получается. Правда, не всё прям так просто как я думал в начале. Но всё-равно, программировать интересно.

# Re: Мова
std.hugeping
hugeping(ping,1) — vvs
2023-09-05 16:14:15


vvs> P.S. Ну хоть какое-то оживление. Хотя здесь последнее время других развлечений не наблюдается: одни спамеры, увы :(

У меня просто новый секретный проект! Но, возможно, скоро я его покажу :)

# Re: Мова
std.hugeping
hugeping(ping,1) — helpingherring
2023-09-05 15:29:37


Ха-ха! Ты слишком высокого о себе мнения, мой украинский недоброжелатель. :)

# Re: Мова
std.hugeping
hugeping(ping,1) — kot-av121
2023-09-04 14:48:07


kot-av121> Интересно.

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

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

# Re: Краткая информация по этому узлу
ping.local
hugeping(ping,1) — hugeping
2023-08-23 17:07:50


Внимание!

При регистрации на станции указывайте свой настоящий e-mail. Я периодически удаляю подозрительные аккаунты, а неправильная почта -- это один из признаков.

# rein: Фаза 1.5
std.rein
hugeping(ping,1) — hugeping
2023-08-15 10:50:06


Вернулся к разработке rein. Поводом послужили записи true-grue по звуку ii://PwbZN2b4jRkK1XjVCoMd , которые выявили некоторые ошибки - недоработки. Из основных изменений:

- теперь редактор поддерживает вертикальное выделение блоков (alt модификатор);
- редактор поддерживает режиме вставки overwrite (ins);
- shift-f2 - в редакторе, "сохранить как";
- множество улучшений в voiced, в том числе работа с вертикальными блоками и проигрывание ноты во время вставки (не для режима ins);
- исправления ошибок;
- sys.window_size() - позволяет получать реальные размеры окна в системе и адаптироваться под них;
- в редакторе можно включить режим scalable. В этом режиме он будет использовать ttf шрифт (нужно положить в data/) и адаптироваться под размер окна при изменении размера окна;
- новый boot. Теперь при запуске rein он показывает доступные приложения, а также .lua файлы из текущего каталога. Каждый такой файл можно запустить (z) или открыть на редактирование (x)
- добавлен 07 tutorial (музыка).

P.S.
Последние 256 сообщений из irc #rein теперь можно смотреть в gemini: gemini://hugeping.ru/reinlog.gmi

# zvon в rein, встреча №2
std.rein
hugeping(ping,1) — hugeping
2023-08-10 19:45:11


Встреча 2
Различные типы осциляторов
Работа в трекере

https://www.youtube.com/watch?v=dPi6Kq5McnU

# Re: Мова
std.hugeping
hugeping(ping,1) — vvs
2023-08-10 15:53:06


vvs> Это уже о другом: чужая душа - потёмки и человека не узнаешь, пока не съешь с ним пуд соли :)

Я в данном контексте про себя самого, скорее.

vvs> Обидно, конечно, что на этой площадке общаться стало практически не с кем.

Да, сеть еле жива. Но мой узел все равно играет свою роль как хранилища моих заметок.

# Re: Мова
std.hugeping
hugeping(ping,1) — vvs
2023-08-10 14:56:39


vvs> У меня тут есть своё мнение. Мне кажется, что вклад в какие-то реальные события вносят только настоящие профессионалы

Ну тут всё индивидуально. И вообще, сложно не покривить душой когда столько всего намешано. Поменьше рефлексии! :)

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

vvs> в соседней теме ТС опускается до неспровоцированных личных оскорблений

Я могу удалять сообщения на этом узле, которые пришли с других узлов. Но в целом, это практика которая не приветствуется. И вообще модерирование слабо работает в idec, так как все ноды - независимы. Обычно я удалял сообщения в каких то тяжёлых случаях. Я чуть чуть посмотрел вашу "дискуссию", показалось что не такая уж она страшная и агрессия не такая уж и не спровоцированная :). Но за других людей не могу говорить, так что если надо, могу заблокировать что-то.
P.S. Edited: 2023-08-10 14:57:09

# Мова
std.hugeping
hugeping(ping,1) — All
2023-08-10 08:32:47


Вчера на станцию ping была снова проведена спам-атака.

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

Когда врагу забрасывают листовки их пишут на родном для читающих языке. Так -- эффективнее. Но украинцы-русофобы пишут мне преимущественно на мове. Это меня всегда удивляло. Действительно, если бы сообщение было одно и написано на русском, я бы наверняка прочитал его. Да и на других станциях idec его скорее всего заметили бы. А так, информационной составляющей не получилось.

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

Получается что и не ставят они перед собой цель -- донести что-либо. И сообщение на "мове" следует воспринимать как "плевок". Поэтому я перестал их читать. Из сообщений последней атаки я ухватил только ключевое слово: Умань. Значит, эта атака -- реакция на мою заметку "Никто не забыт, ничто не забыто" ii://Sr7pL59F9OV2OimsWQTx

Это даже лестно! Получается я(и моя малинка) внесли какой-никакой, но вклад в информационную войну. :)

Когда началась СВО и многие IT-шники открыто заявили: "нам стыдно, нет войне", я не хотел высовываться. Хотел отмолчаться. Ну, это как говорят -- "моя личная позиция". Зачем о ней трубить всем на свете? Зачем заниматься пропагандой?

Но в глубине души я знал. Если я не скажу прямо, что поддерживаю наших солдат, свою Родину в тяжёлое для неё время, то это будет такое-же предательство. Сейчас вижу, что написав ту первую заметку "Точка Z": ii://RZlA1xAFOxQMrrPRYC13 я всё-таки запустил какую-то цепную реакцию. Значит, всё-правильно сделал.

Моя бабушка разговаривала на суржике. Часто вспоминаю этот мягкий говор. Тогда, в Умани, я говорил бабушке: "Я хочу быть украинцем! Можно?". Никакие мова-плевки не смогут забрать у меня этих воспоминаний детства. Воспоминаний о времени, когда все мы жили в одной стране.

# zvon в rein, встречи
std.rein
hugeping(ping,1) — All
2023-08-10 07:21:31


Пётр Советов (true-grue) записал 1й ролик о звуковой подсистеме zvon (используется в rein). Демонстрируется работа в редакторе голосов voiced.

https://www.youtube.com/watch?v=F5-IFaDAxXo
P.S. Edited: 2023-08-10 19:45:20

# Re: Атака бота
idec.talks
hugeping(ping,1) — Andrew Lobanov
2023-08-10 07:17:45


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

# Укры атакуют станцию :)
ping.local
hugeping(ping,1) — All
2023-08-09 23:40:22


Ха! Сегодня была атака на мою маленькую малинку. Похоже, написали скрипт который постит сообщения непрерывно, успели загадить базу на 9Гб.

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

IP адреса атакующих:

104.28.155.206
104.28.192.94
104.28.222.238
104.28.224.94
104.28.254.238
104.28.156.60

# Re: Секретный проект: rein
std.hugeping
hugeping(ping,1) — hugeping
2023-08-06 12:04:38


Записали с true-grue первый ролик про работу со звуком в rein.

https://www.youtube.com/watch?v=F5-IFaDAxXo

# Re: Редактор acme: пишем почтовый клиент
std.hugeping
hugeping(ping,1) — vvs
2023-05-27 20:03:16


vvs> У людей бывает очень разное понятие "выразительности", смотря о каком уровне абстракции идёт речь.

Согласен. Я это скорее в ироничной форме сказал. В том смысле, что в одну строку питона можно упихать кучу разных вещей. :)

# Re: Редактор acme: пишем почтовый клиент
std.hugeping
hugeping(ping,1) — hugeping
2023-05-24 09:32:15


Давно хотел переписать свой клиент на Go или на Python. И всё-таки переписал: https://github.com/hugeping/plan9hacks/blob/master/linux/mu-query.py

Код у него почище, чем грязная реализация на Lua и его можно понять. ;)

Интересно, что не смотря на то, что python реализация на ~250 строк меньше, по объёму исходников оба скрипта очень близки. И это не смотря на выразительность Python и тот факт, что в Lua варианте пришлось многие функции писать самому...

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

https://club.hugeping.ru/lib/uploads/mu-query.png

# Re: Носители творчества
std.hugeping
hugeping(ping,1) — vvs
2023-05-17 13:51:02


vvs> а дело в том, что оно у всех "разное".

Я об этой подмене и говорю!

Разное, значит теряется "ценность"? :) Почему твоя, конкретно твоя совесть не является тем, чему можно доверять, если это "поисследовать", честно вглядевшись в себя? Ты человек, не надо этого стесняться и выкидывать все то, что невозможно разложить рассудочно. Можно же использовать все средства и возможности познания.

# Re: Носители творчества
std.hugeping
hugeping(ping,1) — vvs
2023-05-15 19:29:00


vvs> Кстати, старый вопрос: является ли подлость просто такой точкой зрения? Я не могу удовлетворительно ответить на него. С одной стороны я не могу простить подлость, но с другой - холодный рассудок мне говорит, что я субъективен и это не научно.

Мне кажется тут и осуществляется подмена. Почему субъективное не является реальным? Почему субъективное считается чем то "не настоящим"? Я этого не понимаю! Не можем померить прибором, значит этого нет? Ну, это же ерунда! Я знаю, что я чувствую красный цвет не как длину волны, а как "красный". Это не значит что мое мироощущение при этом не существует. Напротив, в мироздании есть механизм который позволяет мне это делать. Восприятие красного -- это не только восприятие длин волн!

# Носители творчества
std.hugeping
hugeping(ping,1) — All
2023-05-13 11:23:13


Я всегда сам себя убеждал что способен разделять творчество и "носителя" этого творчества. Ну, действительно, примеров, когда носитель не является образцом для подражания можно привести массу. От Хана Райзера, разработчика файловой системы ReiserFS (убил жену) до солиста Queen Фреди Меркьюри или Шопена с его ненавистью к русским. А уж среди писателей так вообще... психопаты, неврастеники и деспоты всех мастей -- встречаются сплошь и рядом. Чтобы не выглядеть провокатором, назову лишь Филип К. Дика. И что теперь, не читать? Так я рассуждал... И это работало! (Впрочем, я не мог пользоваться ReiserFS. А ведь кто-то её сопровождает.)

Но после начала СВО я незаметно для себя понял, что не хочу больше слушать БГ и Шевчука. И если БГ я и раньше слушал мало, то очень многие вещи Шевчука мне нравились! Я не установил для себя "табу", нет. И песни, вроде бы, те же... Так в чём же дело?

Я специально посмотрел интервью БГ, данное им после начала СВО каким-то либералам. Смотрел и не мог поверить. Я часто слышал мнение, мол "певец поёт ртом, а мозг и не нужен". Но объявить идиотами БГ или Шевчука -- я не могу! Как написал сам Шевчук в своём письме, он против любых войн. "Не стреляй" написана в 1980. Но он же играл солдатам в Чечне, поддерживал их. А сейчас "стыдно"?

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

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

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

Зверобой "Мой Мариуполь" https://www.youtube.com/watch?v=pJ8XXQHl8bU
Джанго "Мы не уйдём" https://www.youtube.com/watch?v=aEkqA5L2hl0
Калинов Мост "Друг" https://www.youtube.com/watch?v=Sqh6-kDr6Mo

Смешное количество "лайков" на yt -- тема для отдельной заметки.

# Координата Z // Захар Прилепин
std.hugeping.micro
hugeping(ping,1) — All
2023-05-13 09:43:39


После очередного теракта, в котором погиб Александр Шубин и чуть не погиб Захар Прилепин (слава Богу, выжил!), заказал последнюю книжку Прилепина "Координата Z". Книжка хорошая и нужная! Единственный недостаток -- короткая! Читая не спеша, закончил буквально за пару дней.

> Россия будет воевать с Украиной, пока не победит саму себя.
> Россия будет воевать сама с собой, пока не победит Украину.

Спасибо Захару за то, что он делает!

# Никто не забыт, ничто не забыто
std.hugeping
hugeping(ping,1) — All
2023-05-09 12:09:20


Мои детские воспоминания навсегда связаны с Украиной. Одноэтажный кирпичный домик в г. Умани, сосна в окне и солнечный свет в белых гардинах. И голубое летнее небо с ватными облаками. Кусочек этого детства я пытался повторить в игре "Один день лета".

Первые воспоминания о Дне Победы тоже связаны с этим украинским городком. Заполненные ветеранами трибуны стадиона, блеск золотых медалей и запах тройного одеколона дедушки. Клевер, дым от пороха... Улыбки ветеранов.

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

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

> И отрёт Бог всякую слезу с очей их, и смерти не будет уже; ни плача, ни вопля, ни болезни уже не будет, ибо прежнее прошло.

Мне больно наблюдать во что превратилась моя вторая родина-Украина и как некогда братские народы убивают друг друга. И тем большую ненависть я испытываю к империалистам США, которые выпустили это зло. К тем, кто стравил нас ради стратегических "высших" целей. И началось это задолго до СВО. Они делали и делают это всегда. Они делали это не только с нами.

Они привели к власти в Украине преступников, которые предали свой народ, создав из него бесовскую рать. Верю, что не из всех. Не хочу верить. И что теперь? Делай что должно и будь что будет! Господь разберётся. Победа будет за нами!

Знайте, несчастные бесноватые, как бы вы не пытались сделать из нас фашистов (как это топорно делали ваши хозяева переписывая историю), это не мы предали улыбки наших отцов и дедов, наше детство. Я верю, что настанет время и многие из вас стряхнут этот сатанинский дурман. А твари сидящие в кабинетах США, Англии и Европы получат своё. Мир во зле лежит, но и зло не может торжествовать вечно.

С Днём Победы! Никто не забыт, ничто не забыто! Победа будет за нами!

P.S. А ещё, в детстве, мы играли в "войнушку". И никто не хотел быть "фашистом". Интересно, где сейчас мои друзья детства?

# Re: Везение
pipe.2032
hugeping(ping,1) — Andrew Lobanov
2023-04-23 13:52:39


AL> А то, что не может быть прикручено, нужно просверлить и прикрутить %)

Вот прям на днях как раз просверлил в корпусе ноута отверстие и прикрутил болтом матрицу к креплению. Ибо родное крепление было выломано (хлипкий ACER). Тепепрь прямо приятно на ноутбук смотреть. :)

# Научно открываемый Бог
std.hugeping.micro
hugeping(ping,1) — All
2023-02-19 16:16:13


Натолкнулся на текст, который удивительно "в тему" моей старой заметки. ii://CVvGRZBv7ZzMIm0TFWeY (Абсолютно ли познание?)

Отрывок из письма А. Эйнштейна к Морису Соловину от 30 марта 1952 года (А.Эйнштейн, Собрание научных трудов, Наука, Москва, 1967, т.4, с.567):

> Вы находите удивительным, что я говорю о познаваемости мира (в той мере, в какой мы имеем право говорить о таковой) как о чуде или о вечной загадке.

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

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

http://xray.sai.msu.ru/~lipunov/text/shkl/node7.html (О проблеме сверхразума в астрофизике. // В.М.Липунов)

Упоминание цитаты заметил при просмотре youtube ролика: https://www.youtube.com/watch?v=tvzfEA75CRQ (ЧТО уничтожает ВСЕ цивилизации в космосе?)

# Re: ii.51t.ru
idec.talks
hugeping(ping,1) — iiii
2023-02-12 21:18:59


К сожалению и на этот раз станция работала не долго... :(
Снял фетч с http://ii.51t.ru

# Re: Актуальные клиенты
idec.talks
hugeping(ping,1) — Andrew Lobanov
2023-02-09 08:44:53


AL> А что там такого?

Настроение. :)

# Re: Актуальные клиенты
idec.talks
hugeping(ping,1) — Andrew Lobanov
2023-02-09 07:00:54


>>> Gemini, кстати, вполне себе использую почти каждый день. Как и idec.
Ordos>> С idec понятно, а как можно использовать Gemini каждый день? Что там такого любопытного?

Если вопрос ставится так "что там такого", то считаю, что гемини тебе не нужен :)

P.S. В гемини есть адекватный поисковик по содержимому, вбиваешь туда, к примеру, plan9, и смотришь :)

# Re: В математике все говорят о Боге // А. Савватеев
std.hugeping
hugeping(ping,1) — vvs
2023-01-21 16:43:08


Спасибо за отклик. Да, постараюсь почаще что-то выкладывать. :)

# Снова openbsd
std.hugeping.micro
hugeping(ping,1) — All
2023-01-21 12:41:02


После долгого перерыва расчехлил старый thinkpad и накатил на него openbsd, которая там и стояла когда-то... Поставил и в очередной раз проникся. Чисто, просто, дубово. Всё как я люблю. Правда, пришлось кое-что отключить в настройках по умолчанию:
1) включить hyperthereading в /etc/sysctl.conf (в openbsd это по умолчанию оключено теперь)
2) отключить в /etc/rc запуск reorder_kernel

В качестве оконного менеджера не стал особо мудрствовать и выбрал cwm.

openbsd вроде как во главу угла ставит "безопасность", но мне кажется любят её не за это, а за тот самый KISS.

P.S. Сейчас снова приходится работать с ядром Linux и, в основном, это вызывает негативные эмоции. Очень много кода, который написан "как попало" и сделать с этим, похоже, ничего нельзя. Это плата за популярность о которой, вроде, все мечтали... Интересно, сколько таких "разачаровавшихся" хакеров в openbsd? :)

# Re: боны поны и прочее
idec.talks
hugeping(ping,1) — Andrew Lobanov
2023-01-21 12:05:53


AL> В народе это называется "бабский аргумент". Тематику разделять это нормально. Плодить сущности ради плодения сущностей - это не нормально.

Я кстати не против перейти на новую болталку, но только ЕСЛИ на это согласятся остальные. Иначе, у нас просто будет две эхи... С другой стороны, действиетельно, я могу просто почистить старые сообщения и всё... Просто лень. :)

# В математике все говорят о Боге // А. Савватеев
std.hugeping
hugeping(ping,1) — All
2023-01-21 11:59:49


Уже несколько раз случайно находил ролики Алексея Савватеева на yt-канале "Пост-Наука". Хорошие ролики и сам Алексей вызвал у меня симпатию. Приятно слушать увлечённого и искреннего человека, да ещё с долей самоиронии. Подобное чувство я испытываю к людям с пытливым умом и которые относятся к своему делу как к игре или вызову. Неправильно думать что это заносчивость или пренебрежительность. Скорее, форма "юродства" или смирения. Восхищение истиной. Отношение к своей работе как к искусству, но вместе с тем осознание своего несовершенства. В этом состоянии сложно обладать чувством собственной важности и человек больше похож на ребёнка с детской непосредственностью и искрящейся радостью. Но, кажется, я увлёкся... :)

Так вот, true-grue кинул ссылку на ещё одну его "лекцию": https://youtu.be/Vz2Rl2bijaU которую я и предлагаю вашему вниманию.

Посмотрел с интересом! Как оказалось, Алексей -- верующий. Большинство вещей о которых он говорит для меня были не новы. Но в очередной раз я понял, что очень часто важно даже не то _что_ именно говорит человек, а _как_ говорит. И что вообще, кто-то говорит на те темы что тебя беспокоят. Например, когда речь зашла о чудесах и Алексей быстро их "проклассифицировал" я почувствовал, что такая непосредственность действует заразительно.

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

По поводу возможности ИИ обрести самосознание. Раньше я считал как и Алексей, что это принципиально невозможно. Сейчас я допускаю такую возможность, так как она не противоречит мысленному эксперименту. Здесь есть аналогия с теорией эволюции -- мы лишь наблюдаем развёртывание процесса. Если ИИ станет самосознающим, это будет "рождение" механизм которого мы всё-равно не "грокнем". Да, мы будем понимать что если мы сделаем "так", то робот будет вести себя как человек. Но "осознать" как происходит зарождение мы не сможем. В таком случае мы не создали жизнь, мы лишь создали условия для её зарождения.

А ещё захотелось дополнить выступление такой мыслью. Мир и человек так удивительно устроены, что одни и те же факты могут трактоваться и в пользу "доказательства" бытия Бога и против него. Для меня этот факт очень удивителен и сам по себе является личным "доказательством". Действительно, всё зависит от самого человека и его свободной воли. Богу нужно сердце и свободный выбор. Если ты его делаешь, то весь мир вопиёт о Нём. Если ты идёшь в другую сторону, тебе поможет кто-то другой... ;) Я уже не раз приводил пример с гелиоцентрической моделью. Если бы Земля была центром вселенной, то (как мне кажется) это был бы неопровержимый довод в пользу "доказательства" бытия Бога. Сейчас мы с одной стороны не считаем Землю центром всего, а с другой стороны... с точки зрения всей вселенной вопрос уже не кажется таким простым. Антропный принцип. Барионная асимметрия. Да и даже сам принцип относительности... На "гуманитарном" уровне это можно воспринимать как дополнительные доводы к сильному антропному принципу.

В общем, такие "передачи" нужны. Нужно говорить. Не молчать. Даже если "не до того" и даже если устал "от безжалостных уличных драм"(c).

# Re: Изменения по tgistation.ru
idec.talks
hugeping(ping,1) — ii.51t.ru
2023-01-14 17:33:36


ii.51t.ru> и какие эхи ты фетчишь?

https://club.hugeping.ru/list.txt

ii.51t.ru> так я и выносил вопрос на все станции. все станции молчат. pipe.2032 давно не использовалась, а таскать 3500 сообщений туда-сюда из чатовой эхи смысла нет. именно поэтому изначально был обязательный постфикс, чтобы "освежать" эхи а старую инфу уводить в архив.

Сейчас фетч "поумнел" и он адаптивный, то-есть все 3500 сообщений фечнутся только один раз. На сеть нагрузки с моей стороны никакой. В общем, я пока забираю pipe2032.

> хотя у hugeping тоже нет https,

Он есть, просто не принудительный.

ii.51t.ru> вопрос только в std.hugeping - там основная жизнь, но это всё-таки блог конкретной станции, конкретного автора. возможно, придётся режим read-only предусмотреть.

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

# Re: Изменения по tgistation.ru
idec.talks
hugeping(ping,1) — iiii
2023-01-14 13:40:57


iiii> Пётр, я с тебя фетчу idec.talks и pipe.2033

iiii> 1. сделай бекфетч с http://ii.51t.ru/ii/ :)
iiii> 2. что думаешь о создании эхи pipe.2033 и отправке 2032 в архив
iiii> 3. стоит ли гейтовать std.hugeping

iiii> у меня станция заточена под http и старые браузеры (проверено на win95 с ie4)

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

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

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

# rein: Фаза 1
std.rein
hugeping(ping,1) — All
2023-01-14 10:06:12


Соратников найти не удалось, поэтому наполеоновские планы были скорректированы. Можно сказать, что проект сейчас находится на стадии "Фаза 1", которую я описываю так:

# Приоритет на личное использование

Средства разработки будут допиливаться не до состояния "продукта для всех", а до необходимого минимума. Например, не будет аналога splore pico8 (сетевого репозитория). Запуск "приложений" будет осуществляться из ком. строки (rein edit, например). Для создания игр этого достаточно, так как игра вместе с rein это приложение вида - распаковал и запустил.

Развитие инструментария - дело сообщества (инструменты пишутся на самом rein), но раз сообщество не удаётся собрать, то буду пользоваться чем есть.

# Андроид версии пока не будет

Для того, чтобы показать игру друзьям с телефонами есть emscripten вариант, который работает неплохо. Android версию собрать несложно, но опять же - на неё нужно время и силы. Зачем? Для личных нужд мне этого сейчас не требуется.

# Пиара не будет

Пока не будет никакого "выпуска rein". Потому что выпуск ничего не даст. В современном мире нужно заниматься работой с аудиторией, чтобы это принесло хоть какие-то плоды. На это у меня нет времени (да и желания). Пиар возможен, вероятно, после появления игр и появления хоть какого-то сообщества.

# Никаких новых фич до выпуска игры

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

# Готовность

Готов для личного использования автором rein и энтузиастами. :) В целом, все основные функции присутствуют и опробованы. Api меняться (значительно) не должно. github страничка доведена до "презентабельного" состояния: https://github.com/hugeping/rein

Эху std.rain я оставлю, пусть будет, если вдруг всё-таки будут обсуждаться какие-то вопросы.

# Мысли

В очередной раз стало понятно, что есть разные задачи. 1) сам движок 2) создание творческой группы людей, в которой этот движок мог бы занять своё место. В том числе и в статусе средства для обучения программированию. Тот самый "кружок программистов", ламповый уют и электронные журналы с подкастами :) И задача 2, возможно, даже гораздо сложнее, особенно если представить себе гипотетическую аудиторию rein :) В общем, сейчас я не вижу реальной "почвы", кроме собственного увлечения, а создать эту почву -- совсем другая история. Но, по крайней мере, часть работы проделана. :)

До связи!

# Re: Изменения по tgistation.ru
idec.talks
hugeping(ping,1) — iiii
2023-01-14 09:31:29


В кои-то веки -- оживление!

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

P.S. gemini требует ssl и это для меня существенный минус. Выкидывает за борт всё ретро сразу. Хотя в остальном gemini мне очень нравится...

# rein: ищу соратников
std.rein
hugeping(ping,1) — hugeping
2022-12-24 20:09:21


Опубликовано здесь: https://www.linux.org.ru/forum/talks/17069851

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

Что такое rein?

Если кто-то слышал о таком движке как INSTEAD (а может быть, и о "камерном" reinstead), то постепенная эволюция и тяга к минимализму привели к появлению очередной "игрушки" для экспериментов. Кратко - это переносимое "микроядро" на Си + SDL2 для графики + Luajit в качестве языка программирования + интересный синтез звука (синтезатор пишет true-grue). Так же, если вам интересны такие вещи как: PICO-8 и TIC-80/uxn/Decker/instead/reinstead - то rein имеет что-то общее с каждым из этих проектов, но всё-таки у него свой путь и своя философия.

Более развёрнуто: https://github.com/hugeping/rein/blob/master/doc/api-ru.md

Скриншоты: https://github.com/hugeping/rein

На данный момент есть демки, включая порт моей старой игры с pico-8 с ужасным кодом, но тем не менее:

Emscripten вариант в браузере: https://club.hugeping.ru/lib/uploads/rein/rein.html?aadv.lua) -- (возможно потребуется кликнуть по canvas для звука)

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

Если возникнут вопросы, можно придти на irc канал irc.oftc.net #rein или на станцию ping: https://club.hugeping.ru/std.rein/

Или соберите rein (из зависимостей только SDL2 и luajit) и запустите: ./rein irc - клиент автоматически подключит вас к чату.

Страница проекта на github: https://github.com/hugeping/rein

# Эха по rein
std.rein
hugeping(ping,1) — All
2022-12-24 20:05:29


Чтобы было место, где можно обсуждать вопросы движка, создал эху std.rein.

# Re: Солярисы
std.hugeping
hugeping(ping,1) — vvs
2022-11-29 09:02:26


vvs> КМК Тарковского так хорошо приняли на Западе именно потому, что он отказался от СССР.

Конечно, этот элемент тоже есть. Но в том же Солярисе, Сталкере или Рублёве я не вижу "полит" повестки. Для меня это "вечные" фильмы. И думаю, они такими и являются.

А вот Жертвоприношение я не понял. Показалось уже какое-то "европейское" кино...

# Солярисы
std.hugeping
hugeping(ping,1) — All
2022-11-28 12:35:43


Мне очень нравится фильм "Солярис" Тарковского. Книгу С. Лема я читал давно, и кажется, что она не произвела на меня особого впечатления. Тот самый случай, когда фильм -- самостоятельное произведение.

Лет 20 назад смотрел американский вариант Соляриса. И помню, что в целом он мне тоже понравился. И как-то решил пересмотреть и его. Сравнить с воспоминаниями. Может быть понять, как сильно изменился я за это время.

Не буду стесняться и скажу сразу: фильм мне снова понравился! Да, произведение Тарковского это другая весовая категория. Да, американский Солярис сделан "по мотивам" нашей картины (и снова, идеям книги оставлено второстепенное место). Да, можно сказать что новый фильм -- американское кино, более грубое, "попсовое" и даже вульгарное... Но. Но что-то после просмотра засело в душе. Так же как и 20 лет назад. В чём дело?

И тут я понял, что секрет кроется в том, что американский фильм дополняет картину Тарковского! Не повторяет целиком, но дополняет. Содержит элемент, которого не хватило Тарковскому!

При всей грубой упрощённости и наивности американской версии, там есть то, чего не хватает (совсем чуть-чуть) нашему Солярису!

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

Так вот, если здесь -- возвращение блудного сына, то в американском Солярисе, за довольно грубой формой скрывается, на мой взгляд, недостающий компонент:

> -- Everything we've done is forgiven...

Диалектика. Бог не только справедлив, но и милостив.

В фильме Тарковского, мы смиренно созерцаем икону. Не дерзаем сделать шаг. А в американском фильме оказываемся "по ту сторону". Наивно, грубовато, просто, напролом. Но это есть!

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

> Откр.21:1-4 И увидел я новое небо и новую землю, ибо прежнее небо и прежняя земля миновали, и моря уже нет.

Без оговорок. "Нам всё прощено". Эта мысль -- как молния.

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

P.S. Кстати, картина Содерберга можно сказать "провалилась" в прокате. Я не удивляюсь. Но всё-таки, почему всегда так?
P.S. Edited: 2022-11-28 12:43:25

# Секретный проект: rein
std.hugeping
hugeping(ping,1) — All
2022-11-22 17:51:00


Я давно не делал никаких заметок. Конечно, отчасти это связано с тем что происходит в мире. "Не до того!". Да и бытовые проблемы никуда не делись. Но сейчас есть повод написать, если и не статью, то хотя бы заметку о том, чем я занимаюсь. "Я всё-таки пою, ведь кто-нибудь услышит"(c).

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

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

Re:instead -- интересный, но всё-таки камерный. Наверняка я ещё вернусь к нему (если будет такая возможность), но в целом -- он готов.

То, что пишу сейчас, я назвал rein. Это игрушка, которая вобрала в себя элементы всего того что я делал раньше, но с учётом накопленного опыта. Там есть что-то от instead и re:instead. Идеи pico8 и uxn. В нём я сделал то, что так и не смог (побоялся!) сделать в INSTEAD. И то, что совершенно не нужно re:instead...

Звуковую систему пишет true-grue -- и это очень интересный опыт. Во первых, вдвоём писать веселее! А во-вторых, я уверен что учусь у него новому. В том числе и писать код чище. Или хотя бы стремиться к этому. :) Звуковую подсистему я никогда не смог бы написать сам, хотя всегда мечтал, чтобы она была и в instead и в reinstead. Речь, конечно, идёт о синтезе. Так что без true-grue проект был бы невозможен. И я немного паранойю по этому поводу, так как привык рассчитывать только на себя.

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

P.S. В этот раз я решил проявить упорство и для обсуждений #rein и не только создал irc канал. Всё! Больше никаких телеграм-чатов! Так что если что, заходите в на irc.oftc.net канал #rein.

# Re: Краткая информация по этому узлу
ping.local
hugeping(ping,1) — hugeping
2022-11-16 17:01:01


vvs>> Так вот же: номера 31 и 33 - 11 марта и 25 августа.

hugeping> Вот теперь заметил, два сообщения. Сейчас посмотрим что это...

Похоже, что я показываю записи в том порядке, в котором они приходят на станцию. А вот тег pubDate содержит в себе дату из исходного сообщения. Тут два варианта:

1) сбитое время на станции, с которой пришло сообщение
2) сообщение "долго" до нас шло

Оба варианты возможны, но лента показывается в том порядке, в каком сообщения дошли до станции.
P.S. Edited: 2022-11-16 17:01:13

# Re: Краткая информация по этому узлу
ping.local
hugeping(ping,1) — vvs
2022-11-16 16:40:49


vvs> Так вот же: номера 31 и 33 - 11 марта и 25 августа.

Вот теперь заметил, два сообщения. Сейчас посмотрим что это...

# Re: Краткая информация по этому узлу
ping.local
hugeping(ping,1) — vvs
2022-11-16 10:39:25


vvs> Сейчас проверил - те же глюки.

Я так и проверил. Вроде всё чисто. Ну вот команда, например:

curl -s https://club.hugeping.ru/echo/all/rss | grep -oP '(?<=<pubDate>).*?(?=</pubDate>)'
Выдаёт даты публикаций. Всего публикаций 100. Порядок дат, от самых свежих: 2022-11-15 14:04:43 до самых старых: 2022-01-21 09:32:52

Если воспроизведёшь на этом скрипте, скажи конкретную позицию-запись в потоке. Я не вижу проблем.

# Re: Краткая информация по этому узлу
ping.local
hugeping(ping,1) — hugeping
2022-11-15 06:00:19


Посмотрел содержимое: https://club.hugeping.ru/echo/all/rss

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

P.S. Сам читаю через RSS читалку на андроиде, вроде не замечал такой проблемы.

# Re: Краткая информация по этому узлу
ping.local
hugeping(ping,1) — vvs
2022-11-15 05:34:38


vvs> Какие-то глюки. Забираю ленту по RSS и вперемешку с сентябрём идут сообщения за март и даже за август прошлого года.

А можно указать конкретный url rss ленты?

# Переименовал github аккаунт
std.hugeping.micro
hugeping(ping,1) — All
2022-11-13 19:02:41


Теперь мои личные репозитории находятся здесь: https://github.com/hugeping

gl00my -- это ник из затянувшегося переходного возраста, который вызывает сейчас скорее неприятие и я постепенно от него избавлялся.

А история hugeping (хотя он тоже из "детства") -- довольно забавная и не связана с позерством.

Просто, когда-то я играл с бразильцами-школьниками в одну замечательную 2d ctf сетевую игру. У меня был длинный пинг, и я проигрывал. Но игра мне так нравилась, что я играл не смотря на проблемы с откликом. Помню, меня кикали с сервера за что-то, а его ронял. А потом написал бота, который активировался автоматически если отпустить клавиши... Бот делал предсказание траекторий поэтому я стал играть довольно эффективно, даже не смотря на пинг :)

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

Всегда с теплотой вспоминаю это время, почему-то. В общем, hugeping лучше gl00my. :)

# Использование github workflow
std.club
hugeping(ping,1) — hugeping
2022-08-28 18:19:03


Некоторое время назад у проекта INSTEAD на github отвалился travis-CI. В чём там дело я не помню сейчас, но несколько месяцев CI не работала. Вообще, мне не очень нравится идея завязываться на инфраструктуру которую предоставляют компании. Поэтому сначала я думал просто радикально отказаться от всё этой "блажи". Но как-то постепенно я начал переводить все проекты на рельсы github workflow...

Я понял, что сами по себе сценарии могут быть полезны в плане изучения. Например, теперь можно увидеть как собирается версия emscripten: https://github.com/instead-hub/instead/blob/master/.github/workflows/emscripten.yml

Можно изучить сценарий и повторить уже на реальной машине.

На данный момент автоматизирована сборка проектов: instead, instead-cli, metaparser, metaparser-js.

P.S. С instead есть нюанс, собранная версия под Windows -- нерабочая (битая таблица импорта). Похоже, причина в mingw в Ubuntu. Имейте в виду. Интересно, что в wine, при всём этом, она работает. :)

# Re: тест
pipe.2032
hugeping(ping,1) — oldpc
2022-05-31 18:31:59


oldpc> А откуда у меня пароль, у меня только authstr? Помнится, у меня можно было просто в поле пароля, даже без логина, запихнуть, и всё равно пускало :)

oldpc> Ладно, iitxt спасёт :)

Вот по этой сыслке ( https://club.hugeping.ru/reset ) зная authstr можно создать новый пароль и заходить через web.

# Re: Оконный менеджер bspwm
std.hugeping
hugeping(ping,1) — old.pc
2022-05-31 08:44:11


old.pc> Честно говоря, i3wm не производит впечатления "готового из коробки".

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

И трей, кстати, в i3wm из коробки есть. Это значит, что штатная панелька i3bar его поддерживает, и не надо запускать что-то вроде stalonetray (если трей вообще нужен).

По сравнению со всеми остальными тайловыми wm что я пробовал, он был самым дружественным. Да, awesome я обошёл стороной, так как считал его "динамическим" wm, которые мне не очень нравятся.

# Re: Оконный менеджер bspwm
std.hugeping
hugeping(ping,1) — btimofeev
2022-05-30 10:40:57


btimofeev> А что мешает дома для разных пользователей использовать разные wm?

Банальная лень. Так просто включил - побраузил - выключил. (Комп всегда в режиме suspend to ram). И таких "заходов" в течении дня -- масса. :)

А так, можно конечно. Но мне gnome3 в целом нравится, так что я не сильно страдаю. :)

# Re: Оконный менеджер bspwm
std.hugeping
hugeping(ping,1) — vvs
2022-05-29 17:14:12


Да я тоже люблю: tmux, emacs, acme и vim тоже пользовался. И всё это может сосуществовать с любым wm.

vvs> P.S. А ты объектно ориентированное программирование в bash видел?

Не, не видел. На баше я очень много писал, но я его не люблю. За нечитаемость, за неочевидные нюансы экранирования и подстановок. Особенно после того, как увидел rc из Plan9. Так что сложные вещи я стараюсь на нём не писать.

> сам же написанный на bash и вычисление с помощью eval.

Вот это кошмар с точки зрения безопасности :) Любая малейшая ошибка и твой скрипт начинает выполнять код, поданный извне. Конечно, для быта он годится.

# Оконный менеджер bspwm
std.hugeping
hugeping(ping,1) — All
2022-05-29 12:27:46


# Эксперименты с оконными менеджерами

Я люблю экспериментировать с рабочей средой в Linux. Редакторы, оконные менеджеры, способы создания документации и т.д. Думаю, меня гнали по этому пути любопытство и жажда эксперимента (в том числе и над собой). Помню как в своём первом Linux (KSI Linux) мне решительно не понравились gnome 2 и kde 2. Тогда же я обнаружил прекрасный WindowMaker и процесс был запущен.

Я перепробовал массу оконных менеджеров. В разные периоды меня кидало от минималистических wm до полновесных рабочих столов. Но фундаментально стиль работы не менялся. "Вынос мозга" случился после ion3. Очень достойный тайловый менеджер (написанный харизматичным автором) дал новые ощущения и я подсел! Стоит ли говорить, что на ion3 я не остановился? Тайловые менеджеры тогда набирали популярность и я пробовал всё, что выглядело интересным: dwm, wmii, musca, xmonad, ratpoison, i3wm... Обычные wm я тоже пробовал, но после выхода gnome 3 интерес к экспериментам угас, так как gnome3 в качестве обычного десктопа мне очень понравился.

# Золотой набор

После выхода gnome3 я постепенно успокоился и у меня сформировался свой "золотой" набор.

- Для работы: i3wm (+dmenu).
- Для дома (компьютер, который использую не только я): gnome3.

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

Интересно что wmii был создан с оглядкой на acme! Только вот про Plan 9 и acme я узнал гораздо позже.

Кстати, раз уж зашёл разговор про Plan 9... В rio ("оконном менеджере" Plan 9) при абсолютной аскетичности сохраняется высокая практичность окружения. Я пытался сделать подобие rio на основе fvwm2 (с частичным успехом), но оставил эту попытку. Слишком уж разный "путь" у Linux и Plan 9. Например, в rio ты заранее создаёшь окна в которых запускаются программы, но программа не создаёт окон сама! Интересно, что небезызвестный Drew DeVault делал эмуляцию такого поведения в своём "клоне" wio: https://drewdevault.com/2019/05/01/Announcing-wio.html Но всё это выглядит как подделка, если честно. Так что я оставил Plan 9 "плановое", а Linux - "линуксовое".

# Новое знакомство: bspwm

Многие годы я использовал i3wm и gnome3 и до сих пор считаю это лучшим "набором", который могу рекомендовать всем. Но время от времени я продолжал экспериментировать. Например, познакомился с cwm. В "наборе" своё место занял tmux. И вот, на днях, решил посмотреть на bspwm. Мне этот оконный менеджер настолько понравился, что я решил написать эту заметку. Говорю сразу -- достойный wm! Для любопытных программистов. :)

# К сути

Обычно упоминают что bspwm работает с окнами как с бинарным деревом. Это первая строчка в man bspwm и, честно говоря, с чисто практической точки зрения для меня это мало что значит. Мне же хочется сделать упор на "практике". А с практической точки зрения "суть такова"(c):

- bspwm конфигурируется и управляется только одним способом: утилитой bspc;
- чтобы управлять bspwm с клавиатуры используется внешний "демон" горячих клавиш (обычно sxhkd) из которого вызывается bspc;
- bspwm не поддерживает никаких панелей и прочих "свистелок". Но с помощью bspc вы можете слушать нужные вам события и делать что хотите;
- bspwm выглядит сбалансированным и отполированным как и i3wm. Многие вещи сделаны "интуитивно-верно".

То-есть, мы видим вполне себе тот самый Unix-way да ещё и в качественном исполнении. Вообще, когда я начинал играться с bspwm меня пугала перспектива писать портянки на shell, как это часто бывает. Но... Обо всём по порядку...

# Конфиг bspwm

Конфигурация bspwm это просто shell скрипт в котором в основном присутствуют вызовы bspc. Я приведу фрагменты своего конфига для иллюстрации. Интересно, что файл получается простым, потому что в нём не заданы горячие клавиши. Только конфигурация самого wm!

#! /bin/sh

pgrep -x sxhkd > /dev/null || sxhkd & # запуск демона горячих клавищ
pgrep -x panel > /dev/null || panel & # запуск панельки (об этом - ниже)

setxkbmap -layout "us,ru" -variant "winkeys" -option "grp:caps_toggle,compose:ralt,grp_led:scroll" # раскладка

xsetroot -cursor_name left_ptr # курсор вместо символа X

bspc monitor -d 1 2 3 4 5 6 7 8 9 0 # рабочие столы

bspc config removal_adjustment false # при удалении окна не ребалансить
bspc config swallow_first_click true # первый клик не идёт в приложение

bspc rule -a librewolf desktop='^4' # пример правила
bspc rule -a Xdialog state=floating # ещё пример правила

bspc config pointer_modifier mod4 # ресайзим и таскаем окна мышкой
bspc config pointer_action1 move
bspc config pointer_action2 resize_side
bspc config pointer_action2 resize_corner
bspc config focused_border_color '#ff0000' # рамка активного окна поярче

На самом деле это практически весь конфиг, кроме каких-то локальных нюансов.

# Конфиг sxhkd

Теперь, sxhkd. На самом деле вам не нужно будет писать этот файл с нуля, можно взять типовой из share/doc/bspwm/examples и начать использовать его. В качестве примера, приведу фрагменты своей конфигурации:

XF86AudioLowerVolume
        amixer -q sset Master 10%-

XF86AudioRaiseVolume
        amixer -q sset Master 10%+

# terminal emulator
super + Return
        st

# focus the node in the given direction
super + {_,shift + }{h,j,k,l}
        bspc node -{f,s} {west,south,north,east}

Тут тоже есть простота. Она состоит в том, что ничего кроме горячих клавиш и реакций на них (в виде запуска утилит) в конфиге нет.

# Панелька

В примерах bspwm есть панелька на основе shell скрипта и lemonbar. Я не люблю портянки на shell (хотя и умею их писать и понимать) поэтому я изучил как она работает и написал свою...

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

Что за информация? Например: информация о номерах десктопов, активном десктопе, режиме окна и так далее. Эту информацию нам может предоставить bspc. В режиме bspc subscribe report мы получаем события этого оконного менеджера. Но кроме десктопов нам нужны ещё: часы, батарея, раскладка. Ну и так далее, по вкусу.

Панелька из примеров делает fifo и направляет в эту fifo вывод различных утилит, которые запущены в режиме монитора (выводят строчку в stdout при изменении информации). Например, xtitle -s. Далее, скрипт на sh читает из fifo общий поток, парсит его и даёт на вход lemonbar. Я подумал, что это полотно легко переписать на go (go-рутиты идеально здесь подходят). Я приведу фрагмент того, что у меня получилось:

func read(fname string) string {
// читает файл и возвращает строку
// ...
}

// запускает процесс и отправляет его вывод в канал
func cmd_reader(out chan<- string, prog string, args ...string) {
	cmd := exec.Command(prog, args...)
	pipe, _ := cmd.StdoutPipe()
	reader := bufio.NewReader(pipe)
	cmd.Start()
	for {
		output, _, err := reader.ReadLine()
		if err != nil || err == io.EOF {
			break
		}
		out <- string(output)
	}
}
// парсим информацию о десктопе
func bsp_parse(item string) string {
	c := item[0:1]
	var U, F, B string;
	U = "#144b6c"
	nam := item[1:]
	switch c {
	case "f": // free desktop
		F = "#737171"
		B = "#333232"
		// далее F= B= в каждом case (FoOuU) пропущено для краткости
	case "F": // active free desktop
	case "o": // occupied desktop
	case "O": // focused occupied
	case "u": // urgent
	case "U": // focused urgent
	case "L","T","G":
		F = "#ffffff"
		B = "#333232"
		return fmt.Sprintf("%%{F%s}%%{B%s} %s %%{B-}%%{F-}", F, B, nam)
	default:
		return ""
	}
	return fmt.Sprintf("%%{F%s}%%{B%s}%%{U%s}%%{+u}%%{A:bspc desktop -f %s:} %s %%{A}%%{B-}%%{F-}%%{-u}",
		F, B, U, nam, nam)
}

func main() {
	bspc_in := make(chan string)
	xtitle_in := make(chan string)
	mail_in := make(chan string)
	xkb_in := make(chan string)
	go cmd_reader(bspc_in, "bspc", "subscribe", "report") // десктопы
	go cmd_reader(xtitle_in, "xtitle", "-s") // заголовок окна
	go cmd_reader(mail_in, "checkmail", "-s") // новая почта
	go cmd_reader(xkb_in, "xkbmon") // раскладка
	var bspc, bat, clock, mail, xtitle, xkb string;
	for {
		select {
		case bspc = <-bspc_in:
		case xtitle = <-xtitle_in:
		case mail = <-mail_in:
		case xkb = <-xkb_in:
		case <-time.After(time.Second * 30):
		}
		if bspc == "" {
			continue
		}
		bat = read("/sys/class/power_supply/BAT1/status")
		bat += ":" + read("/sys/class/power_supply/BAT1/capacity")
		curt := time.Now()
		clock = curt.Format("02-01-2006 Mon 15:04")
		bsp := strings.Split(bspc, ":")
		desk := ""
		for _, item := range bsp {
			desk += bsp_parse(item)
		}
		fmt.Printf("%%{l}%s%%{c}%s%%{r}%s %s%% %%{F#000000}%%{B#ffffff}%s%%{B-}%%{F-}[%s]\n", desk, xtitle, mail, bat, clock, xkb)
	}
}

Программа совсем простая, написанная под конкретную ситуацию как скрипт. Конечно, можно было взять готовую панель. Можно было взять вместо lemonbar что-то другое. Но мне лично проще, когда я понимаю происходящее полностью и могу это контролировать. Да, монитор раскладки я написал на C. Тоже небольшая программка.

# Особенности использования

В целом, bspwm из коробки вполне себе годен, но мне не хватало некоторых вещей. На этих нюансах остановлюсь подробнее.

Если в запущенном wm просто начать запускать терминал по super + Return, то заполняться пространство будет примерно так (что-то вроде спирали Фибоначчи):

+----------+----------+
|          |          |
|          |          |
|          |          |
+----+-----|          |
|    |     |          |
|    +--+--+          |
|    |  +--+          |
+----+--+--+----------+

При этом, если закрыть какое-то из окон, то оставшиеся окна автоматически "сбалансируются". Это напоминает поведение динамических wm (которое мне не нравится). К счастью, в bspwm есть настройка: bspc config removal_adjustment false.

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

super + shift + Return # запуск "вертикально"
        bspc node -p south; \
        st

Таким образом, я могу быстро создавать терминалы в одном столбце:

+----------+----------+
|          |          |
+----------+          |
|          |          |
+----------+     2    |
|    1     |          |
+----------+          |
|          |          |
+----------+----------+

Далее, выбрав определенный терминал хоткеями или мышкой можно максимизировать его на всё пространство (режим монокля, по умолчанию super + m) или поменять его (1) с самым большим окном (2) примерно так, как это сделано в dwm. (Для этого используется хоткей super + g).

# swap the current node and the biggest window
super + g
        bspc node -s biggest.local
# в дефолтном примере было: bspc node -s biggest.window
# в таком режиме большое окно выбиралось со всех десктопов
# что было неудобно
# заменил на .local

Мне ещё не хватало возможности растянуть терминал вертикально:

+----------+----------+
+----------+          |
+----------+     2    |
|          |          |
|    1     |          |
|          |          |
|          |          |
+----------+          |
+----------+----------+

Я смог добиться такого поведения, правда, небольшим хаком:

super + v
	bspc node north#north#north#north#north#north -z top 0 -2000; \
	bspc node north#north#north#north#north -z top 0 -2000; \
	bspc node north#north#north#north -z top 0 -2000; \
	bspc node north#north#north -z top 0 -2000; \
	bspc node north#north -z top 0 -2000; \
	bspc node north -z top 0 -2000; \
	bspc node -z top 0 -2000; \
	bspc node -z bottom 0 2000

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

Всё эти хитрости помогли мне заменить табы и стек окон в i3wm.

Ещё одна штука, которая мне нравилась ещё по Plan9 -- возможность именовать окна по ситуации. В случае bspwm, правда, именуем не окна, а рабочие столы. Я написал скрипт, который вызывает Xdialog (Xdialog --stdout --under-mouse --inputbox "Window name" 0 0) и просит имя для текущего десктопа. Потом делает: bspc desktop focused --rename имя. Повесил на хоткей и всё -- можно именовать!

Ещё один пример гибкости простых решений. Скрипт который делает все окна на 9м десктопе "плавающими". За основу был взят пример с Arch wiki, но немного доработан (отслеживается не только создание, но и перемещение node):

#!/bin/bash

# change the desktop number here
FLOATING_DESKTOP_ID=$(bspc query -D -d '^9')

bspc subscribe node_add node_transfer | while read -a msg ; do
    if [ "${msg[0]}" = "node_transfer" ]; then
        desk_id=${msg[5]}
        wid=${msg[3]}
    else
        desk_id=${msg[2]}
        wid=${msg[4]}
    fi
    [ "$FLOATING_DESKTOP_ID" = "$desk_id" ] && bspc node "$wid" -t floating
done

# Хакерская штучка

bswpm создаёт впечатление добротной и отполированной хакерской "штучки". Например, по умолчанию super + tab работает именно так как нужно! Переключаясь между последними двумя рабочими столами. Работа с окнами просто реактивная. Изменение размера окон мышкой работает тоже отлично. Также мышкой можно перемещать тайловые окна, меняя их местами. Много мелочей, которые незаметны, когда они работают "правильно". По стабильности на данный момент тоже нареканий нет. Кстати, параллельно с bspwm я также посмотрел herbstluftwm (никак не могу выучить название этого wm!). Но ощущения "отполированности" с этим wm у меня не возникло, хотя тоже -- неплохой тайловый менеджер и подход к управлению/конфигурированию очень похож.

# Вместо заключения

Функционально i3wm и bspwm близки. Но i3wm предоставляет большинство функций "из коробки". С другой стороны, в bspwm благодаря простоте устройства многие вещи выглядят менее "захламлёнными" и "раздражающими". То что есть -- работает предсказуемо и отлично. Это для меня уже привычная характеристика для простых инструментов.

И если i3wm я могу рекомендовать всем без исключения программистам, то bspwm уже скорее для любопытных минималистов. Но, как мне кажется, любопытство -- одно из наших основных (программистских) качеств. Ведь правда? :) Ну а на моём рабочем ноутбуке bspwm уже заменил i3wm.

Pages: 1 2 3 4 5 6