Pages: 1 2 3 4 5 6
RSS
# Оконный менеджер 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.

# Trace: Birds
std.hugeping.micro
hugeping(ping,1) — All
2022-05-20 13:36:36


У меня одна из любимых групп: Procol Harum. И вот, вчера нашёл ещё музыку, которая действует на меня просто каким-то волшебным образом! Понимаю, что о вкусах не спорят, но если вдруг, то вот:

https://www.youtube.com/watch?v=4EvoqLw_QB4&list=PLUnxGWZ-jLPYtcGYwon2PQa1N9q_GpOa0&index=38

Удалось при помощи true-grue найти все 3 альбома. Слушаю непрерывно второй день, никогда не думал, что может так действовать. В чём тут секрет?

# Фильмы о войне
std.hugeping.micro
hugeping(ping,1) — All
2022-05-12 21:40:12


Пересмотрел в очередной раз "В бой идут одни старики". Очень люблю этот фильм. Кажется, что каждый кадр в нём -- живой. По TV в это время шёл "Девятаев". Ну, думаю, дай посмотрю на современное кино... В общем, не выдержал и 20 минут. Задумался. Конечно, нельзя обобщать. Это с одной стороны. А с другой ну, действительно, есть какая-то нехорошая тенденция. Если воздушные бои - то компьютерная игра. (Кстати, наверное самые классные воздушные бои в кино я видел в "Голубом Максе" 1966 года.) Если герои -- то всегда с какой-то постмодернистской стыдливостью... Это в лучшем случае.

А потом, пока искал что-то из современного, натолкнулся на:

https://litvyakfilm.ru/

"28 панфиловцев" помните? В общем, ребята продолжают своё дело и снимают следующий свой фильм. Очень рад за них! Оказывается, мечты иногда сбываются. Только для этого надо много работать. :)

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


oldpc> О, работает. А на сайте как залогиниться? :)

Справа вверху login. Если не помнишь пароль, его можно восстановить вроде бы: https://club.hugeping.ru/reset

oldpc> И почему-то не совпадают записи в блоге в gemini и на веб-сайте.

Вообще, должны. https://hugeping.ru должен совпадать в целом с gemini://hugeping.ru

oldpc> (это тест ответа на сообщение, пишу из горящего ii-txt)

Passed!

# Re: Сказки про INSTEAD: как всё начиналось
std.club
hugeping(ping,1) — vvs
2022-05-01 09:56:02


vvs> Не знаю, заметил ли это здесь кто-нибудь ещё...
vvs> Inform 10.1.0-beta: https://github.com/ganelson/inform

Да, тоже заметил. Правда, теперь я уже вряд-ли буду заниматься ещё одним проектом. Тут и на МП то времени нет... Русификация Информ7 интересная задача. Но лично для меня, не очень актуальная. Мне (как программисту) кажется, что логику проще описывать с помощью обычного ЯП.

# Христос Воскресе!
std.hugeping
hugeping(ping,1) — All
2022-04-24 09:03:53


Думал написать в духе текущих событий, что Пасха в тяжёлое время и так далее... Потом подумал, что ведь это всегда так было. Просто у человека есть естественный "предохранитель" -- замечать только то, что в зоне непосредственного восприятия. Даже когда на небе светит солнышко, а вокруг птички да цветы -- смерть никуда не делась. Зло никуда не делось. Где-то идёт очередная война. Кто-то кричит от страха и боли. Кто-то умирает. Легко рассуждать "о высоком", когда ты сидишь в тепле, с кружкой чая в руках...

Это -- не нормально. Мир -- ненормален. "Естественный ход вещей" -- результат грехопадения. Наш мир -- сломанный мир.

Но Христос "взорвал" ад изнутри, так что теперь у нас есть путь. Мы призваны идти по нему к Небесному Иерусалиму. Кто как может. Не время опускать руки и отчаиваться. Даст Бог, прорвёмся!

> Итак, все — все войдите в радость Господа своего! И первые, и последние, примите награду; богатые и бедные, друг с другом ликуйте; воздержные и беспечные, равно почтите этот день; постившиеся и непостившиеся, возвеселитесь ныне! Трапеза обильна, насладитесь все! Телец упитанный, никто не уходи голодным! Все насладитесь пиром веры, все воспримите богатство благости!

> Никто не рыдай о своем убожестве, ибо для всех настало Царство! Никто не плачь о своих грехах, потому что из гроба воссияло прощение! Никто не бойся смерти, ибо освободила нас Спасова смерть! Объятый смертью, Он угасил смерть. Сошед во ад, Он пленил ад и огорчил того, кто коснулся Его плоти.

https://pravoslavie.ru/61346.html

Христос Воскресе!

# Отцы и дети
std.hugeping
hugeping(ping,1) — All
2022-04-16 11:42:16


# Вместо введения

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

Но моя заметка про "Точку Z стала политическим манифестом. Как обычно, разбираясь в своих мыслях, одновременно с этим я чувствовал, что обязан высказаться публично. И глядя на мнение людей, которые поддержали меня или, напротив, были разочарованы моей позицией, я понимаю, что поступил честно и по отношению к себе и по отношению к ним. Реакция на "Точку Z" стала своеобразным подтверждением того, о чём я писал. Пусть всё будет честно!

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

# Отцы и дети

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

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

> Когда-то ты был битником...

Но потом проходит время, и ты с удивлением (и даже ужасом!) начинаешь осознавать, что становишься похожим на своего отца. А твои дети -- на тебя самого, n-лет назад. Причём и своего отца ты начинаешь понимать всё больше.

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

Год 1996-й. Я счастливый возвращаюсь домой. Дома меня встречает отец. Он сидит в кресле в плохо освещённой комнате.

-- Ну что, проголосовал?
-- Проголосовал!

Отец вздыхает и качает головой. Он знает за кого я проголосовал. Конечно, в тот момент меня его вздох скорее возмущает. Ведь я голосовал за новый мир! За свободу! За уничтожение старого, закостенелого, прогнившего мира... А он -- вздыхает!

Но сейчас в этой комнате присутствует ещё один человек. Как и мой отец, он грустно улыбается глядя на 18-летнего юношу.

Да, теперь те выборы препарированы. Мы знаем, что ставка на молодёжь оправдала себя. Голосуй, или проиграешь... Опыт "западных партнёров" сработал безупречно. Холодный расчёт. И романтика молодых людей.

- https://yewtu.be/watch?v=Vd7EjvDHwQw

> ... Песня про то, как поднимается с колен родина, которой, собственно говоря, и нет, которая не то что поднимается с колен, а увязает ... все глубже, и туже, и безысходнее. И при этом петь о том, как родина подымается, — это очень мощно. // Е. Летов

Я долго не взрослел. И мне это нравилось. Молодым быть лучше, чем старым. Поэтому Болотная площадь застала меня врасплох. Помню, как бушевали мои эмоции! Свобода попрана! Это очевидно всем! К счастью, мне хватило ума не идти дальше сочувствующих всхлипов. К тому же, я любил программировать больше, чем читать новости.

Время шло, и мир постепенно показывал свою изнанку. Цинизм мироустройства на планете Земля всё чаще пробивал оборону детства и ... я перешёл в своё взрослое состояние. Вдруг, стали понятны все песни Шевчука. :) Шучу.

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

Если бы сегодня я мог оказаться в той комнате, что бы я сказал себе 18-летнему? Рассказал бы я ему, что его используют силы, цинизм которых он не может себе даже представить? Смог бы я найти слова, чтобы сообщить себе из 2012-го, что не стоит лить слёзы напрасно за людей, для которых ты -- лишь средство?

Нет, ничего не сказал бы. Не нашёл бы слов. Просто вздохнул бы и покачал головой, как мой отец когда-то. Потому что всё идёт своим чередом.

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

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

Но дети не слышат отцов. Что же остаётся? Воспитывать и держать удар, пока наши дети не повзрослели. Пока у нас ещё есть это время.

P.S. Кстати, а помните "отменённую" песню на Eurovision "Я научу тебя..." Мне она тогда очень понравилась. Послушайте, если не слышали. Культура отмены учит быть "таким как все", но не надо стесняться быть собой. ;)

https://yewtu.be/watch?v=tmAgLGk2jIY

# Re: День космонавтики
std.hugeping
hugeping(ping,1) — vvs
2022-04-12 15:46:38


hugeping>> - даже мой немощный блог/сайт пугает кого-то настолько, что заставляет прибегать к такому вот методу противодействия;

vvs> А можно пояснить для меня дурака^H^H^H^H^H^H неспециалиста? Этот пост каким-то образом попадает на mastodon или цитируется там?

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

# День космонавтики
std.hugeping
hugeping(ping,1) — All
2022-04-12 13:53:45


Вчера я опубликовал свою статью ii://RZlA1xAFOxQMrrPRYC13 "Точка Z"
Потом была DDOS атака (впрочем, я до последнего считал это совпадением).
Потом -- комментарий в gemini. Сейчас пришло вот это:

Ваши посты удалены

===

Было обнаружено, что некоторые из ваших постов нарушают одно или несколько правил сообщества, и они были удалены модераторами mastodon.social.

**Причина:** Содержимое нарушает следующие правила сообщества

- No incitement of violence or promotion of violent ideologies

Цитируемые посты:


> Новая статья на станции ping. Точка Z
> https://club.hugeping.ru/RZlA1xAFOxQMrrPRYC13
>

Просмотр: https://mastodon.social/web/statuses/108109401254905355

---

Я, конечно, не буду комментировать. Всем всё понятно. Также, приглашаю всех сомневающихся почитать посты в мастодоне, помеченные @rf и увидеть, что справедливость -- для всех разная. Но я лично понял для себя две простые вещи:

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

С днём космонавтики, друзья!

P.S. Конечно, мне теперь очень неприятно находиться на mastodon.social. Единственное, что меня сейчас сдерживает, что информацию нужно доносить любыми доступными способами. Но если я всё-таки решу уйти, заходите на https://hugeping.ru

# Re: Точка Z
std.hugeping
hugeping(ping,1) — vvs
2022-04-11 16:57:32


vvs> А я гляжу, народ-то потихоньку мигрирует с иностранных хостингов. И это не по идеологическим мотивам. Если GitHub накроется медным тазом, есть план Б?

Да где разместить код, найдём, конечно. Пока мне просто не хочется ничего ломать: какие-то дистрибутивы уже заточены на github. А так, релизы дублируются здесь, например: https://sourceforge.net/projects/instead/files/instead/

# Сегодня немного поDDOSили
std.hugeping.micro
hugeping(ping,1) — All
2022-04-11 13:26:23


Сегодня малинку немного поDDOSили. Интересно, что событие это меня как-то "взбодрило" и вообще настроило на позитивный лад. Наверное, тут как с велосипедом. Не до рефлексии. :) Да и вообще -- весело!

Написал быстро скрипт для блокировки нужных IP, перенастроил сервер, ssh. Пока тихо. Конечно, от DDOS нет защиты, особенно, если это RPI на столе. :) Но и ценность моего ресурса невысока, так что в крайнем случае, ну, полежит немного...

# Точка Z
std.hugeping
hugeping(ping,1) — All
2022-04-10 20:18:47


> Лк19:40 Но Он сказал им в ответ: сказываю вам, что если они умолкнут, то камни возопиют.

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

> Мф19:26 А Иисус, воззрев, сказал им: человекам это невозможно, Богу же все возможно.

Переживая за то, что происходит сейчас с народами России и Украины, я в очередной раз понимаю, что в такие "моменты истины" не так важно то, что ты думаешь, как то -- что ты делаешь. Жизнь каждый день ставит перед нами вопросы, на которые нельзя ответить "по шпаргалке". Не удастся остаться в "безопасности". Залечь на дно. Сделать вид, что ничего не произошло... Ведь даже бездействие будет считаться ответом.

> Если есть шаг, должен быть след.

Свой след я тоже оставлю, так устроен этот мир.

Когда горячее олово капает на руку, не до философии. Работает нерв и рефлекс. А что такое "нерв" в данном случае? Это мифология. Мифология не как вымысел или сказка, а как сама жизнь. Мировоззрение, мироощущение, человеческая архитектура. Прошивка. Firmware. (См. "Диалектика мифа", А.Ф. Лосева)

Не так давно я просматривал листовки фашистской Германии, которые сбрасывались во время ВОВ. Смотришь и холодок по коже. Вроде бы ты знаешь, что война в прошлом. Понимаешь, что в листовке написана ложь! Но всё-равно чувствуешь гадкую змеиную ползучую силу, которая затаилась, ждёт своего часа... Ждёт, пока ты дашь слабину.

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

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

Есть такой фильм "Слёзы капали" Г. Данелия. Он снят по мотивам рассказа Кира Булычёва, который в свою очередь есть аллюзия на "Снежную королеву" Г.Х. Андерсена.

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

Что такое цвет? Только лишь длина волны? Что видит любящий муж, когда смотрит на свою жену с которой прожил многие годы? Только лишь фотоны? Да нет конечно! Цвет -- это не длина волны. А любящий взгляд -- это не про фотоны.

> Мф6:22 Светильник для тела есть око. Итак, если око твое будет чисто, то все тело твое будет светло

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

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

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

Желать смерти солдатам своей армии -- быть подлецом.

Бить ножом в спину своей Родины, когда ей тяжело -- быть подлецом.

Называть бойцов ДНР и ЛНР террористами -- быть подлецом.

Это -- мой нерв. Если у вас он работает по-другому, что же... -- мы враги. Это печально, но ситуация именно такова. А если вы сомневаетесь, подумайте, что было бы, если бы советские солдаты верили тем листовкам? Думайте, изучайте, читайте. Не скрывайтесь за этим инфантильным "мне стыдно". Прислушайтесь к себе. Что там -- в прошивке? Все мы несём ответственность за наш выбор. Наш след -- это мы сами.

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

Я искренне желаю победы нашим солдатам. Я желаю падения преступного украинского режима. Я желаю свободы и мирного неба ДНР и ЛНР. Я восхищаюсь теми людьми, которые ездят на Донбасс, открыто поддерживая наших ребят, и которым не стыдно быть русскими. Очень хочется верить, что мы это всё не растеряем... А там уж -- как Бог даст.

Сегодня идёт война мифологий. Конечно, Украина лишь видимая сторона конфликта. Она -- как прокси. И сидящие за прокси понимают, что ставки -- очень высоки. Это пугает. Так ли надёжно ЯО в качестве оружия сдерживания, или цена вопроса "перебъёт" даже инстинкт самосохранения? Боюсь даже думать об этом. Мир трещит по швам. Где окажется каждый из нас?

Точка Z наступила не 24 февраля, а гораздо раньше. Просто многие из нас этого не заметили. А того, кто заметил -- мы не слушали. Пора просыпаться.

Для поднятия морального духа:

- книга "Письма с Донбасса" // Захар Прилепин
- https://t.me/patricklancasternewstoday Патрик Ланкастер
- https://vk.com/video-3156562_456244781 Призраки: солдаты забытой войны
- https://yewtu.be/watch?v=augFYP09ALQ Облака плывут над головой
- https://yewtu.be/watch?v=aEkqA5L2hl0 Мы не уйдём // Джанго

P.S. Понимаю, что моя заметка будет неприятна некоторым из вас. Поступайте как знаете, но "диванную" операцию в комментариях, если она возникнет, я буду зачищать. Моя заметка -- скорее манифест, а не приглашение к дискуссии. Я чувствую, что должен внятно и чётко обозначить свою позицию. И я её обозначил.

P.S. #2 Уподобляться некоторым разработчикам Open Source проектов я не буду. Так что INSTEAD по-прежнему открытый и интернациональный проект, в котором, кстати, есть и украинская локализация. Он принадлежит сообществу -- совершенно разным людям, которые несут собственную ответственность за свои поступки. Наука, искусство и Open Source должны принадлежать всем! В этом я никогда не сомневался.

# Re: Александр Столяров о творчестве
std.hugeping.micro
hugeping(ping,1) — mukranenburg
2022-03-27 10:32:00


mukranenburg> Писал музыку к Старцу Паисию, знаком со Столяровым. Красота и идеи, они в простоте.

Ого!

> На обсуждении фильма один молодой критик сказал: как так о святом и в виде комедии и под звуки гармошки?

Вообще, фильм можно назвать "псевдодокументальным". Так что, как не крути, это в первую очередь художественное произведение. А критики, они такие. :)

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

Почему вспомнился? Наверное, из-за самоиронии. В обоих фильмах это есть. Как противоядие против фальши.

# Re: Александр Столяров о творчестве
std.hugeping.micro
hugeping(ping,1) — vvs
2022-01-15 16:34:11


vvs> Вспоминается ещё анекдот:
vvs> ... Очнувшись, он с ликованием подумал об удачном исходе столь трудного и опасного опыта и, дрожа от нетерпения и пережитого, поспешно развернул бумажку с драгоценной записью. На ней он прочел; “Банан велик, а кожура еще больше...”

Забавно! Не раз испытывал похожее во сне. Когда "гениальная мысль" оказывается бредом. :) Тем удивительней контраст по сравнению с ощущением озарения во сне. Мысль о том, что когда-нибудь мы все вдруг проснёмся, кажется не такой уж и неверотяной... ;)

# Александр Столяров о творчестве
std.hugeping.micro
hugeping(ping,1) — All
2022-01-06 19:24:13


Смотрю фильм про Александра Столярова (знаю его по фильму "Старец Паисий и я, стоящий вверх ногами"). И тут такой забавный пассаж про творчество:

https://www.youtube.com/watch?v=RQ0HKYOR3c8&t=1221s

> Я вам говорил, что разницы между Копполой, мной и кинолюбителем из Житомира нет никакой. По большому счёту, это вопрос пиара...

# Re: Предложения или "Как нам обустроить idec?"
idec.talks
hugeping(ping,1) — ake
2021-12-23 09:23:44


ake> Добавил на своей ноде.

ake> На клиенте:
ake> Чтобы отправить сообщение кому-то, отправляем его в эху mailto.{имя ноды}.{номер поинта}. Например, mailto.ake.100
ake> Чтобы прочитать свои входящие, указываем для получения ноду mailfor.{строка авторизации}.

У меня были похожие вещи на старой ноде (на основе iing). У меня было понятие виртуальной эхи. Фактически, через них можно было делать любой запрос. Например, получить личные сообщения, делать поиск по содержимому итд. На текущей ii-go личку сделал проще. Сообщения шлются в эху .private (вообще, эхи с . у меня считаются специальными) и дальше при заборе этой эхи учитывается, что именно можно отдавать юзеру. Решение делается на основе поля To. Там кажется можно даже групповую переписку организовывать, но я сейчас не помню. Но если написать в личку All, то услышат все (через личку). :) Естественно, забор . эх нужен авторизированный. Емнип, /u/point/ расширен для этого.

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

# Re: Мысли про возможное будущее IDEC
idec.talks
hugeping(ping,1) — shaos
2021-12-23 09:11:45


>> Реализация всё ещё пишется за несколько часов :)

shaos> Это далеко не так ;)

ii подмножество idec. Если речь про ii, то всё-ещё так. :)

# Re: Предложения или "Как нам обустроить idec?"
idec.talks
hugeping(ping,1) — shaos
2021-12-23 09:02:58


shaos> И всё-таки, зачем кому-то в прошлом захотелось усложнить ii? ;)

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

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

Но я, естественно, не претендую на какой-то значимый голос в сообществе. Мой анархичный ii-go на данный момент меня полностью устраивает. И если при внедрении расширений, наследие будет работать как и работало -- вообще замечательно. На своей ноде я вряд ли буду делать что-то дополнительное, но с интересом понаблюдаю за движухой.

# Re: Предложения или "Как нам обустроить idec?"
idec.talks
hugeping(ping,1) — ake
2021-12-17 08:59:36


ake> но это будет разочаровывающим выводом и во многом будет значить, что мне здесь делать, собственно, нечего. Но другого сообщества, использующего idec, у меня нет, а энтузиазм пока есть.

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

Вот у меня была цель, сделать себе место из которого я генерю свой "контент". Я его сделал. У меня есть и личка и редактирование сообщений, экспорт в gemini и многое другое. Но наружу я смотрю просто idec-ом. Даже если никаких узлов idec не останется, это меня не беспокоит -- потому что я не могу на это никак повлиять.

Но у меня не было цели сделать из idec универсальную технологию. Допустим, у тебя эта цель (не важно, чем она диктуется) есть. Тогда я предлагаю тебе додумать до конца твои идеи и оформить их в виде конкретных предложений стандарта. Обсуждать проще конкретные технические предложения (и отдельно каждое).

Потому что, то же редактирование -- не так просто как кажется в начале.

А так, из твоих предложений мне лично интересны:
- редактирование.
- личка (правда у тебя в списке этого нет)

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

# Re: Анонс станции
idec.talks
hugeping(ping,1) — ake
2021-12-15 19:24:52


ake> Сделал открытую регистрацию поинтов на станции, но с небольшим квестом - форма регистрации находится в gemini - gemini://ake.crabdance.com:1966/enroll/intro/

Прикольная идея. :)

# Re: Программирование под ZX80 на ассемблере
zx.spectrum
hugeping(ping,1) — hugeping
2021-12-15 17:15:11


https://github.com/breakintoprogram/lib-spectrum Z80 Library Routines
http://oldmachinery.blogspot.com/2014/04/zx-sprites.html ZX sprites (интересная статья)
http://sebastianmihai.com/libzx.html libzx
https://vtrd.in/book.php Много разных книг

P.S. Edited: 2021-12-15 17:54:47

# Re: Программирование под ZX80 на ассемблере
zx.spectrum
hugeping(ping,1) — hugeping
2021-12-15 16:34:39


https://zxpress.ru/book.php?id=18 Программирование в машинных кодах и на языке ассемблера

# Re: Программирование под ZX80 на ассемблере
zx.spectrum
hugeping(ping,1) — hugeping
2021-12-14 10:57:43


К сожалению, очень многие тулзы написаны только для Windows.
В крайнем случае можно запускать в wine. Например, zx-paintbrush работает: https://sourcesolutions.itch.io/zx-paintbrush

# Re: Программирование под ZX80 на ассемблере
zx.spectrum
hugeping(ping,1) — hugeping
2021-12-14 10:09:49


http://multipaint.kameli.net/ - multipaint - для создания графики
https://github.com/errorcalc/zx_starter_pack - starter pack для виндузятников (не наш путь, но можно подсмотреть тулзы)

# Re: Эха про спектрум
zx.spectrum
hugeping(ping,1) — shaos
2021-12-13 10:39:51


Может стоило вообще про ретрокомпы эху создать? Всё-таки нас тут полтора человека...

# Re: Актуальный нодлист
idec.talks
hugeping(ping,1) — Andrew Lobanov
2021-12-13 10:34:21


{
    "nodename": "ping",
	"client": "https://club.hugeping.ru/",
	"web": "https://club.hugeping.ru",
	"sysop": "hugeping",
	"contacts": {
		"email": "gl00my@mail.ru",
		"phone": "+7xxxxxxxxxx",
		"web": "https://hugeping.ru"
	},
	"description": "Станция ping",
	"uplinks": [
		[
			"tavern",
			"5m"
		],
	]
}

Кроме этого, у меня стоит забор:
echo "difrex.blog" | ./ii-tool -lim=-16 fetch https://dynamic.lessmore.pw/idec
Не знаю, как это отобразить.

# Программирование под ZX80 на ассемблере
zx.spectrum
hugeping(ping,1) — All
2021-12-13 10:27:28


В детстве у меня была БК0010-01 и у неё был классный ассемблер (PDP-11). Не так давно я его даже освежил, портируя Boulder Dash на instead: https://instead-games.ru/game.php?ID=197 Это практически полная калька, но на Lua.

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

1) книг для начинающих
2) кросс-ассемблеров
3) что-то ещё?

В общем, информацию, которая могла бы помочь начинающим программистам на спектруме :)

Пока нашёл это:

https://zxpress.ru/book.php?id=2 (Как написать игру на ассемблере для ZX Spectrum)
https://k1.spdns.de/Develop/Projects/zasm/Distributions/ (zasm)
https://github.com/sjasmplus/sjasmplus (sjasmplus)

Если есть что подкинуть, кидайте!

# Re:instead в Google Play
std.club
hugeping(ping,1) — hugeping
2021-12-13 09:47:22


Борис Тимофеев выложил Re:instead в Google Play. Так что библиотечка парсерного сопротивления стала ещё доступнее. Не забывайте оценивать приложение, если оно вам нравится. ;)

https://play.google.com/store/apps/details?id=ru.hugeping.reinstead

#news

# Парсерное сопротивление: новые версии (МП 2.4)
std.club
hugeping(ping,1) — hugeping
2021-11-27 14:24:38


Встречайте большое обновление ПАРСЕРНОГО СОПРОТИВЛЕНИЯ!

Вышли новые версии проектов: МЕТАПАРСЕР, Re:instead и metaparser-js.

https://parser.hugeping.ru
https://instead.hugeping.ru/page/metaparser/

# МЕТАПАРСЕР 2.4

Парсерный движок для создания игр с текстовым вводом. Для использования требуется INSTEAD или Re:instead.

https://instead.hugeping.ru/page/metaparser/

Изменения:

* комната gameover теперь имеет атрибут 'gameover';
* функция getDaemons() -- получить список фоновых процессов;
* комната gameover останавливает все фоновые процессы;
* атрибут 'concealed' удаляется, когда предмет перемещается в инвентарь;
* новый метод obj.is_once() для проверки факта срабатывания obj.once();
* обновление документации;
* исправлены/улучшены некоторые сообщения.

# Re:instead 0.7

Минималистичный парсерный движок для Unix, Windows, Plan-9 и Android. В комплект включён набор игр.

* значительное улучшение кернинга при работе с freetype и libschrift;
* параметры -noautoload/-noautosave;
* новый метапарсер 2.4;
* исправления в игре "Краски октября";
* поддержка клавиши del;
* исправление при изменении размера шрифта;
* исправление смены иконки приложения в Windows;
* возможность делать синонимы команд (conf.cmd_aliases);
* Windows: перенаправлять stdout/stderr в errors.txt только если stdout не доступен;
* команды !script и !debug;
* !stop команда в autoscript.

# metaparser-js 2.4

Реализация парсера на js.

* обновление метапарсера до 2.4;
* команды !ls, !rm, !restart;
* возможность загружать и выгружать сохранения;
* возможность выгружать транскрипт (пока только в пределах одной игровой сессии);
* локализация на английский (язык выбирается по основному языку браузера).

# Re: gemini:// как дополнение idec
idec.talks
hugeping(ping,1) — ake
2021-11-17 08:59:28


ake> Ну и чтобы не казалось, я не могу сказать, что отрицательно отношусь к gemini, просто хочу критически посмотреть на всё это.

Хотел было привести свои аргументы, но передумал. :) Меня всё устраивает. Это как с велосипедными дорожками. Меня устраивает текущая ситуация, когда их нет или они построены не там и неправильно.

Так что gemini меня полностью устраивает и технически и просто как место, которое привлекает специфический контингент. Главное, чтобы не стали "расширять" дальше, как это часто бывает. Но вроде бы пока к этому нет тенденции.

Критиковать можно, но я не вижу никакого позитивного выхлопа от этой критики. :)

# Re: gemini:// как дополнение idec
idec.talks
hugeping(ping,1) — ake
2021-11-16 21:32:25


ake> Аналогично, в WWW уже есть всё, что есть в gemini, а остальным можно не пользоваться, например, ограничив себя использованием lynx или NetSurf. Зачем gemini?

Мне лично gemeni нравится таким, каким он есть. Регулярно смотрю. Интересный для меня контент там есть. Часто просто вбиваю в поисковик какое-нибудь слово и читаю блоги. Успокаиваюсь. Я рад, что таких людей -- не я один. На фоне остальных "альтернатив" -- gemini оказался прямо в тему.

Я кстати и netsurf и eww и прочим таким тоже пользуюсь, но gemini -- это всё-таки другое.

# Re: Си должен умереть?
std.hugeping
hugeping(ping,1) — nvkv
2021-11-13 11:07:23


nvkv> В общем, на мой взгляд Zig это лучшее, что случалось с этим классом языков (C/C++/Rust) за много-много лет.

Всё, надо смотреть. Убедил. :) А harelang не смотрел?

# Re: Си должен умереть?
std.hugeping
hugeping(ping,1) — vvs
2021-11-13 07:08:34


Ох, я кажется по ошибке нажал редактировать вместо ответа, прошу прощения @vvs!

# Re: Бегство от тишины
std.hugeping
hugeping(ping,1) — nvkv
2021-11-12 18:46:23


nvkv> Ну, то есть, для меня вообще А. В. Столяров не говорит ни о чем.

А я тоже не знаю кто это. :) Собственно, смотрел я не применительно к личности. Просто разговор с технарём.

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

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

# Си должен умереть?
std.hugeping
hugeping(ping,1) — All
2021-11-09 17:14:26


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

https://www.yodaiken.com/2018/12/31/undefined-behavior-and-the-purpose-of-c/

http://cmustdie.com/

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

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

Как программист на Си, я понимаю, что по современным меркам этот язык нарушает все мыслимые правила приличия. Но при этом я действительно НЕ ВИЖУ адекватной замены в той сфере где он применяется. Это как с самолётами. Неустойчивый самолёт -- маневренный и опасный. Устойчивый -- безопасный и неманевренный. Что выбрать? Что-то среднее? Чем мы готовы пожертвовать?

Представим себе, что нам нужно написать ядро ОС. Какой язык выбрать? C, C++... Rust?

Мои знания о Rust ограничены чтением книги, поэтому я недостаточно подкован для того, чтобы адекватно оценить его кандидатуру как замену Си. Субъективно, мне кажется, что Rust не сможет стать таким же массовым языком. В нём нет простоты Си. Его синтаксис многословен, а в некоторых задачах он выкручивает программисту руки. Я надеюсь, что идеи заложенные в Rust найдут реализацию в каком-то другом ЯП. Но это моё личное, субъективное мнение. Конечно, если индустрия перейдёт на Rust, я буду его использовать в любом случае. А пока, можно посмотреть на пример реализации драйвера на Си и Rust: https://lwn.net/Articles/863459/ который меня совсем не впечатляет.

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

Но не так давно я открыл для себя Си заново. Помогло мне в этом осознание:

> Код на Си прекрасен, когда он прост!

Но что значит простой код? Программисты всегда пытаются писать просто. Или нет? И можно ли писать современное ПО просто?

Посмотрите. Это реализация cat в Plan9: https://github.com/0intro/plan9/blob/master/sys/src/cmd/cat.c

А это, для сравнения, cat из coreutils: https://github.com/coreutils/coreutils/blob/master/src/cat.c

Я отдаю себе отчёт в том, что современное ПО так не пишется. Поддержка локалей и gettext. Учёт особенностей системных вызовов на разных ОС. Поддержка множества параметров. И вот, объём и сложность кода растут как снежный ком. А если вспомнить про полную поддержку Unicode (со всеми этими проклятыми эмодзи и сменой направления вывода), то становится совсем уж плохо. Мы так привыкли к универсальности "правильного" подхода, что когда ты видишь "наивный" код Plan9, то испытываешь шок. Что, так можно было?

Но если по чесноку, разве cat не должен быть именно таким, каким он остался в Plan9? :) Думаю, каждый программист чувствует здесь какую-то правду.

Си -- это портативный ассемблер. В этом его основная миссия, сила и слабость. И сегодня, когда разрыв между низким и высоким уровнем многократно увеличился, я не могу не признать, что он мало пригоден для написания сложного прикладного ПО. Но что с системным?

Системное ПО тоже стало сложнее. Как системный программист, я начинал с ядра Linux 2.2. Читать и понимать код современного ядра стало намного сложнее.

В качестве примера, посмотрите реализацию системного вызова open в ядре 2.2.
https://elixir.bootlin.com/linux/2.2.26/source/fs/open.c#L757
asmlinkage int sys_open(const char * filename, int flags, int mode)
{
	char * tmp;
	int fd, error;

	tmp = getname(filename);
	fd = PTR_ERR(tmp);
	if (!IS_ERR(tmp)) {
		lock_kernel();
		fd = get_unused_fd();
		if (fd >= 0) {
			struct file * f = filp_open(tmp, flags, mode);
			error = PTR_ERR(f);
			if (IS_ERR(f))
				goto out_error;
			fd_install(fd, f);
		}
out:
		unlock_kernel();
		putname(tmp);
	}
	return fd;

out_error:
	put_unused_fd(fd);
	fd = error;
	goto out;
}
Довольно наглядно и просто, не правда ли?

А теперь начните своё путешествие по ядру 5.10.

https://elixir.bootlin.com/linux/v5.10.78/source/fs/open.c#L1200

Вам придётся пройтись по цепочке: do_sys_open -> do_sys_openat2

https://elixir.bootlin.com/linux/v5.10.78/source/fs/open.c#L1193
https://elixir.bootlin.com/linux/v5.10.78/source/fs/open.c#L1164

SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode)
{
	if (force_o_largefile())
		flags |= O_LARGEFILE;
	return do_sys_open(AT_FDCWD, filename, flags, mode);
}

long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode)
{
	struct open_how how = build_open_how(flags, mode);
	return do_sys_openat2(dfd, filename, &how);
}

static long do_sys_openat2(int dfd, const char __user *filename,
			   struct open_how *how)
{
	struct open_flags op;
	int fd = build_open_flags(how, &op);
	struct filename *tmp;

	if (fd)
		return fd;

	tmp = getname(filename);
	if (IS_ERR(tmp))
		return PTR_ERR(tmp);

	fd = get_unused_fd_flags(how->flags);
	if (fd >= 0) {
		struct file *f = do_filp_open(dfd, tmp, &op);
		if (IS_ERR(f)) {
			put_unused_fd(fd);
			fd = PTR_ERR(f);
		} else {
			fsnotify_open(f);
			fd_install(fd, f);
		}
	}
	putname(tmp);
	return fd;
}

Необходимость изменений очевидна. Появилась подсистема fsnotify. Добавили новые системные вызовы -- пришлось нарезать функции и сводить open к openat...

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

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

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

Интересно, сколько лет ещё продержится старичок Си? А то ведь и 70-летие не за горами. :)

P.S. Ещё одна "эмоциональная" статья на тему C и C++: Почему я всё ещё люблю C, но при этом терпеть не могу C++?

https://habr.com/ru/company/ruvds/blog/562530/

# Re: Бегство от тишины
std.hugeping
hugeping(ping,1) — silverwing
2021-11-09 15:33:43


silverwing> Корень проблемы не в сервисе. Замена условного телеграма условным федиграмом исправит ситуацию с технологической стороны, но не исправит самой сути.

Точно. Об этом я и писал. Правда, немного многословно.

silverwing> А самое страшное, что если хочется чтобы тебя заметили, приходится самому кричать еще громче...

В точку.

# Притча о неверном, но мудром управляющем
std.hugeping
hugeping(ping,1) — All
2021-11-09 10:57:46


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

Лк16:1-9

> Сказал же и к ученикам Своим: один человек был богат и имел управителя, на которого донесено было ему, что расточает имение его;
> и, призвав его, сказал ему: что это я слышу о тебе? дай отчет в управлении твоем, ибо ты не можешь более управлять.
> Тогда управитель сказал сам в себе: что мне делать? господин мой отнимает у меня управление домом; копать не могу, просить стыжусь;
> знаю, что сделать, чтобы приняли меня в домы свои, когда отставлен буду от управления домом.
> И, призвав должников господина своего, каждого порознь, сказал первому: сколько ты должен господину моему?
> Он сказал: сто мер масла. И сказал ему: возьми твою расписку и садись скорее, напиши: пятьдесят.
> Потом другому сказал: а ты сколько должен? Он отвечал: сто мер пшеницы. И сказал ему: возьми твою расписку и напиши: восемьдесят.
> И похвалил господин управителя неверного, что догадливо поступил; ибо сыны века сего догадливее сынов света в своем роде.
> И Я говорю вам: приобретайте себе друзей богатством неправедным, чтобы они, когда обнищаете, приняли вас в вечные обители.

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

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

Пропустив своё наблюдение через "рассудочный" аппарат, я понял, что даже не могу сформулировать "объяснение" словами. Получалось что-то неуклюжее вроде: "Да, я осознаю свою повреждённость. Я часто поступаю недостойно замыслу Бога. Тогда я хотя бы попытаюсь не требовать 'своего' с других людей. Попробую поступать по милости, а не по формальной справедливости. Даже если со мной поступили несправедливо. Разве я часто не поступаю хуже? Я хотя бы могу не затаить обиду, не 'встать в позу'. Не сказать ещё одно язвительное слово... Это малость, но я чувствую в этом правду. Как я смею уповать на милость Бога, если даже такой малости не делаю?".

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

# Бегство от тишины
std.hugeping
hugeping(ping,1) — All
2021-11-09 08:35:36


Смотрю интервью с Андреем Столяровым: https://www.youtube.com/watch?v=o111yYPqLHU

Увлекательно слушается.

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

Например, возьмём телеграм. Плохо, что это проприетарное решение. Плохо, что оно привязано к телефону и так далее. Но реальный ущерб, который я ощущаю на себе, носит скорее психологический характер. Это зависимость. Зависимость от получения потока информации в режиме 24/7 (зачастую, бесполезной и низкокачественной), от поиска социального одобрения, от эндорфинов полученных в битвах "кто-то не прав"...

Допустим, мы сделали федеративный Telegram и (невероятно!) он стал популярным. Пусть он будет работать на телефоне со свободной прошивкой. Что-то изменится в плане воздействия на психику? Безусловно, централизованный сервис -- хуже. Особенно, если говорить о соцсетях, где выдача определяется алгоритмом таким образом, чтобы повысить время удержания. Но кроме силы формируемой зависимости, будет ли какая-то принципиальная разница? Не думаю.

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

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

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

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

К сожалению, рабочий день начинается, и я беру телефон с непрочитанными сообщениями. Сколько их...

Я снова бегу от тишины...

# Re: Анонс станции
idec.talks
hugeping(ping,1) — Andrew Lobanov
2021-11-08 05:58:47


AL> Хорошо, что я свой фетчер писал, ориентируясь на то, что аплинк может выдавать произвольный мусор :)

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

# Re: Анонс станции
idec.talks
hugeping(ping,1) — hugeping
2021-11-07 21:16:52


hugeping> Попробовал сделать fetch с https://idec.textgamesinfo.ru/
hugeping> Не получилось, часть сообщений как буд-то битые... Что именно, пока не разбирался.

Скорее всего, присутствуют пустые строки в выдаче. Например:

https://idec.textgamesinfo.ru/u/m//EzHkw1q46MIQgxvT6p5G/eQbQUoX5AMe2Lmz4zncF

В выдаче встречаются пустые строки, на которые мой фетчер ругается.

# Re: Анонс станции
idec.talks
hugeping(ping,1) — Esenin Pavel
2021-11-07 20:56:09


Попробовал сделать fetch с https://idec.textgamesinfo.ru/
Не получилось, часть сообщений как буд-то битые... Что именно, пока не разбирался.

# Re: drawterm на 9front
plan.9
hugeping(ping,1) — hugeping
2021-11-07 12:14:06


Патч на drawterm, который включает fullscreen на X11
diff --git a/gui-x11/x11.c b/gui-x11/x11.c
index 74412f9..9dda3a5 100644
--- a/gui-x11/x11.c
+++ b/gui-x11/x11.c
@@ -190,6 +190,13 @@ flushmemscreen(Rectangle r)
 	XFlush(xdisplay);
 }
 
+void fullscreen(Display* dpy, Window win)
+{
+	Atom atoms[2] = { XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False), None };
+	XChangeProperty(dpy, win, XInternAtom(dpy, "_NET_WM_STATE", False),
+		XA_ATOM, 32, PropModeReplace, atoms, 1);
+}
+
 void
 screeninit(void)
 {
@@ -370,7 +377,8 @@ screeninit(void)
 			1); /* int nelements */
 		XFlush(xkmcon);
 	}
-	
+	fullscreen(xdisplay, xdrawable);
+
 	/*
 	 * put the window on the screen
 	 */

# drawterm на 9front
plan.9
hugeping(ping,1) — All
2021-11-05 09:14:03


Настроил себе drawterm на малинку с 9front.
Причём, сделал это не так, как положено, а просто с помощью запуска скрипта из lib/profile. :)
Потому что я использую малинку и как terminal. Так что мне важно, чтобы она оставалась графической.

Вот скрипт:
#!/bin/rc
#auth/factotum -n -- uncomment this if you want new instance
echo 'key proto=p9sk1 dom=rpi4 user=glenda !password=pass' > /mnt/factotum/ctl
aux/listen1 -t tcp!*!17019 /rc/bin/service/tcp17019 &

Запускаю его из lib/profile ветки terminal.
drawterm вариант от 9front.

# Re: Тарковский о деньгах и искусстве
std.hugeping.micro
hugeping(ping,1) — vvs
2021-11-04 19:47:18


vvs> "Солярис" я не принял, поскольку он слишком отличается от книги. Кажется и Лему он тоже не понравился.

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

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

# Тарковский о деньгах и искусстве
std.hugeping.micro
hugeping(ping,1) — All
2021-11-04 15:29:08


> Если убрать из человеческих занятий все относящиеся к извлечению прибыли, останется лишь искусство.

http://www.tarkovsky.net.ru/stalker/word/tarkov_last_interview.php

> Смотрел чудовищно омерзительный фильм «Possesions». Американская смесь фильма ужасов, дьявольщины, насилия, детектива и всего, чего угодно. Отвратительно. Деньги, деньги, деньги, деньги... Ничего настоящего, истинного. Ни красоты, ни правды, ни искренности, ничего. Лишь бы заработать... На это невозможно смотреть... Можно все, позволительно все, если за это «все» платят деньги.

https://www.litmir.me/br/?b=247480&p=99#section_112

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

> ...Если мы хотим, чтобы картины посмотрели большое количество народу, мы никогда не сможем сделать так, чтобы эти картины были высокого поэтического мастерства...

https://www.radioblago.ru/vremyakultury/intervyu-s-andreem-tarkovskim

# МЕТАПАРСЕР 2.3
std.club
hugeping(ping,1) — All
2021-10-23 09:06:59


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

# МЕТАПАРСЕР 2.3

* исправление TakeAll (для частей объекта);
* экспериментальный режим mp.strict_mode;
* mp.inp_delim;
* исправление в mp:match;
* исправление в mp:post_action во время abort_cmd (snapshots);
* исправления в стандартной библиотеке.

# RE:INSTEAD 0.6

* перевод Urzi на английский (спасибо, canwolf!);
* новая игра "Краски октября:;
* Android: совместимость с настройкой rotate lock;
* исправление ошибок.

// Версия для F-Droid в пути!

# Сайт парсерного сопротивления https://parser.hugeping.ru

* обновлён МП;
* добавлены новые игры: Краски октября и перевод Urzi.

# instead-cli 1.6

* обновлён до новой версии МП.

# metaparser-js 2.3

* обновлён до новой версии МП.

#news

# Re: КРАСКИ ОКТЯБРЯ
std.hugeping.micro
hugeping(ping,1) — vvs
2021-10-18 17:15:39


vvs> А почему ты решил, что тебя сейчас читают меньше, чем "Компьютерру"? По крайней мере сюда ещё кто-то пишет, в отличие от неё :)

О, с такой стороны я ещё не заходил. :) Надо потом будет ещё pdf делать из лучших статей :)

# Re: КРАСКИ ОКТЯБРЯ
std.hugeping.micro
hugeping(ping,1) — vvs
2021-10-18 16:31:50


А я всё хотел написать статью в "КОМПЬЮТЕРРУ". Всё хотел, хотел.. пока она не закрылась. :)
Теперь вот "тренируюсь" на играх и статьях здесь. Правда, непонятно кому и зачем это нужно. Хотя, как терапия, нужно мне самому. :)

# Аскетика в отладке
std.hugeping
hugeping(ping,1) — All
2021-10-18 16:29:58


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

Когда-то, разрабатывая драйверы ещё в Windows, я пользовался SoftIce. Это был такой легендарный отладчик уровня ядра. Когда я перешёл на Linux, отладчиков такого уровня я не нашёл. Это был удар. Я не мог понять как вообще можно отлаживать код без отладчика? Но шло время и постепенно я стал замечать, что основное затруднение вызывают баги такого рода, когда отладчик никак не поможет... Обычно это проблемы синхронизации, гонок, или фундаментальные проблемы (когда архитектурные решения основывались на ложных предпосылках). И вот для такого рода ошибок, как оказалось, отладчик бесполезен. Нужно только проводить эксперименты и думать, пытаться сложить все наблюдения в одну картину.

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

Учась в институте, когда мы-студенты уже считали себя крутыми программистами, сталкиваясь с необъяснимыми ситуациями, мы часто ссылались на "ошибки компилятора". Как же хочется и сегодня иногда свалить всё на "ошибку компилятора".

- Такого не может быть!
- Это проблема в тесте!
- Может быть, виноваты битые провода?

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

Работает прямо противоположный подход. Я бы назвал его аскетическим. Есть факт, и этот факт прост -- в твоей программе баг. Она несовершенна. Ты не понимаешь сути происходящего, но реальность подчиняется логике. Ты просто не видишь всей картины. Нужно смириться, собирать факты (улики) и думать, думать, думать. Не можешь связать все улики воедино? Не стоит отчаиваться! Все баги, которые ты встречал до сих пор в своей в жизни, ты решил. Каждый раз объяснение находилось, и каждый раз оно было и очевидным, и неожиданным одновременно. Так будет и в этот раз, хотя сейчас в это сложно поверить. Просто думай.

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

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

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

# КРАСКИ ОКТЯБРЯ
std.hugeping.micro
hugeping(ping,1) — All
2021-10-17 18:28:15


В 2015 году я, тогда ещё на МЕТАПАРСЕР2, написал игру "КРАСКИ СЕНТЯБРЯ". А так как для проекта Re:instead есть пока только 10 игр, я решил её портировать на новый метапарсер. Думал сейчас быстренько перенесу и будет 11 игр... Ага. Сейчас.

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

Он -- ужасен. Нет, он правда УЖАСЕН! Из этого я сделал интересный вывод. Я меняюсь. Практически каждое предложение заставляло меня морщиться и ужасаться. Загадки, конечно, тоже спорные. Поэтому их я частично переделал. Ну и графика была такого низкого качества, что пришлось нарисовать новые картинки... В итоге, получилась вроде бы не новая игра, но и уже не совсем старая. И я решил ей дать другое название. Оригинал из 2015-го назывался "КРАСКИ СЕНТЯБРЯ". Не долго думая, заменил название на "КРАСКИ ОКТЯБРЯ".

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

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

Так что, после тестирования, буду выпускать новый Re:instead с этой игрой.

# ACME в Linux: пишем почтовый клиент
plan.9
hugeping(ping,1) — hugeping
2021-10-13 17:48:36


Написал статью о том, как писал фронтенд к почте для acme:
ii://S4sJA2iZYo83k8ZnpjEX

# Редактор acme: пишем почтовый клиент
std.hugeping
hugeping(ping,1) — All
2021-10-13 17:46:59


Медленно, но верно, редактор acme становится моим основным редактором-средой в Linux. Почему это происходит, вопрос отдельный и он не сводится к утилитарности. Проще, удобнее, быстрее -- это всё категории, которые в большей степени определяются нашими привычками. А мной в IT движет любопытство и тяга к простоте.

Идея acme очень простая, но при этом мощная. Это не редактор, это прослойка между Unix средой и человеком. Когда вы работаете с acme, "редактором" становится вся ОС. В начале это очень непривычно, но потом -- затягивает.

До последнего момента в качестве основного редактора я пользовался emacs и пользовался им как средой. То-есть, кроме собственно редактирования файлов я читал в нём почту (mu4e), общался в телеграм (telega.el), читал pdf ну и так далее...

Отвыкнуть от emacs очень сложно, а мне было интересно проводить в acme больше времени, поэтому я решил попробовать перенести в него работу с почтой.

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

# Синхронизация почты mbsync

Для синхронизации почты между Maildir на диске и imap на сервере нашлась отличная штука: isync (или mbsync). Замечательна она тем, что синхронизация работает в обе стороны. То-есть, удаляя письмо в Maildir вы тем самым удаляете его в imap mailbox. Ну и так далее. Таким образом, вы получаете единый срез почты на многих машинах и всё это прекрасным образом синхронизируется через imap.

Конфигурация выглядит примерно так:

IMAPAccount gmail
Host imap.gmail.com
User user@gmail.com
Pass password
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt

IMAPStore gmail-remote
UseUTF8Mailboxes yes
Account gmail

MaildirStore gmail-local
SubFolders Verbatim
Path ~/Mail/gmail/
Inbox ~/Mail/gmail/Inbox

Channel gmail
Far :gmail-remote:
Near :gmail-local:
Patterns * ![Gmail]* "[Gmail]/Sent Mail" "[Gmail]/9front"
Create Both
Expunge Both
SyncState *

Правда, mbsync из апстрима создаёт каталоги на диске в кодировке UTF-7. Но в aur есть пакет с поддержкой UTF-8. Обратите внимание на UseUTF8Mailboxes в конфиге. Для других Linux можно собрать версию отсюда: https://sourceforge.net/u/shashurup/isync/ci/utf8-mailboxes/tree/

После того, как всё настроили, можно поставить задачу на таймер в systemd или cron и всё.

# Индексация

Не так давно я открыл для себя mu. Mu позволяет индексировать почту в Maildir и дальше делать выборку, показ писем, распаковку аттачей и так далее. И всё это очень быстро. Вместе с mu идёт почтовый клиент для emacs -- mu4e.

Для создания базы просто делаем что-то вроде:

$ mu init --my-address='ваш емейл'

И потом периодически делаем индексацию:

$ mu index

# Идея почтового клиента на acme

Mu -- это почти полноценный клиент, по крайней мере, для чтения почты. Практически всё можно сделать из командной строки. Например, вывести последние сообщения:

$ mu find --sortfield d --reverse "" | head -n10

Чтобы просмотреть сообщение, вы должны указать путь к конкретному файлу в Maildir. Например:

mu view `mu find "" --sortfield d --reverse -f l | head -n1`

Конечно, пользоваться в таком виде почтой малореально, но возможностей для скриптования -- масса. И когда я это понял, то решил написать свой фронтенд к mu для acme.

# Приложение на acme

Acme с помощью файловой системы предоставляет доступ к некоторым функциям по работе с своими окнами, которых оказывается достаточно для написания "приложений". Если вы работаете в Plan9, то файловая система доступна всегда. Если же вы запускаете acme в рамках plan9port, то для доступа к ней можно:

1. Использовать утилиту 9p
2. Подмонтировать ФС через fuse: 9pfuse

Допустим, у нас есть скрипт hello, который доступен по PATH. Если запустить acme и вписать hello в заголовок главного окна (там где Newcol Kill Putall Dump..), а потом нажать на hello 2-й кнопкой мыши, то скрипт запустится.

Когда скрипт запускается в рамках acme, то переменная окружения winid содержит номер текущего окна или 0, если нет никаких открытых окон, кроме главного.

Для работы с файловой системы acme пока будем пользоваться 9p.

#!/bin/sh
9p ls acme
9p read acme acme/$winid/tag

Запустите этот вариант скрипта и увидите в отдельном окне корень ФС acme и список пунктов меню вашего текущего активного окна (если такое есть).

То же самое можно сделать с fuse:

#!/bin/sh
mnt=`mktemp -d /tmp/acmeXXXX`
9pfuse `namespace`/acme $mnt

ls $mnt
cat $mnt/$winid/tag

fusermount -u "$mnt" && rmdir "$mnt"

На самом деле, в теории, fuse вариант удобнее и быстрее, но я столкнулся с проблемой. Мой ноутбук с ArchLinux не хотел уходить в сон, пока есть хоть одна подмонтированная точка fuse. Так что приходится всё время монтировать и размонтировать, что не очень удобно.

В man 4 acme (из plan9port) описана файловая система acme. Я не буду здесь пересказывать эту информацию, но отмечу только некоторые моменты с которыми столкнулся.

1. По идее, мы можем считать позицию селектора (курсор + выделение) с помощью записи в ctl строки addr=dot и и последующего чтения из addr. Однако, при открытии addr он каждый раз ресетится. Таким образом, с помощью 9p вы не сможете получить текущую позицию курсора, так как это две операции: запись addr=dot и чтение addr. А нужно, открыть (и не закрывать addr), потом записать addr=dot, потом прочитать addr. Это можно проделать при использовании 9pfuse. Например:

pos=`{ echo 'addr=dot' >> $mnt/$winid/ctl; cat; }<$mnt/$winid/addr`

2. Если добавлять в окно текст (в data), содержащий в себе переводы строк, то просто так читать из event построчно не получится. Потому что первая строка будет содержать событие, а следующая -- уже просто кусок текста и так далее. Да, число символов текстового блока тоже при этом приходит, но писать обработку такого протокола на shell неудобно. Поэтому я добавлял текст только построчно.

# Версия на shell

Первую черновую версию я написал на shell. Всё, что она делала -- показывала последние 100 писем и реагировала на нажатие средней кнопки мыши на путь к письму (при этом, нужно было сначала этот путь выделить). Она была неудобна, неполна. Но очень проста. Поэтому, в качестве иллюстраций я привожу этот вариант целиком:

#!/bin/sh
mail_view()
{
	mu view "$MAILDIR/$2" --nocolor | 9p write acme/$1/data
	echo -n 'clean' | 9p write acme/$1/ctl
	toline $1 0
}

mail_ls()
{
	mu find --nocolor -s d --reverse -f "l|d|f|s" "" | \
		/usr/bin/sed -e 's|'$MAILDIR'/\([^ ]\+\)|\1|g' | \
		head -n 100 | 9p write acme/$1/data
	echo -n 'clean' | 9p write acme/$1/ctl
	toline $1 0
}

toline()
{
	echo -n "$2" | 9p write acme/$1/addr
	echo -n 'dot=addr' | 9p write acme/$1/ctl
	echo -n 'show' | 9p write acme/$1/ctl
}

if [ -z "$winid" ]; then
	exit 1
fi

# создаём новое окно
winid=`9p read acme/new/ctl | awk '{ print $1 }'`
# показываем 100 сообщений
mail_ls $winid
# добавляем "кнопку" Get
echo -n "Get" | 9p write acme/$winid/tag

# цикл обработки событий
9p read acme/$winid/event | while read a b c d e; do
	if echo "$a" | grep -q -e '^Mx' 2>/dev/null; then # mx
		if [ "$e" = "Get" ]; then
			mail_ls $winid
			continue
		fi
	elif echo "$a" | grep -q -e '^ML' 2>/dev/null; then
		if [ -f "$MAILDIR/$e" ]; then
			msgid=`9p read acme/new/ctl | awk '{ print $1 }'`
			mail_view $msgid $e
			continue
		fi
	fi
	echo "$a $b" | 9p write acme/$winid/event 2>/dev/null
done

Кстати, этот текст был вставлен в статью так:

- ввел в tagline <cat email;
- выделил этот текст;
- нажал 2ю кнопку мыши.

Обратите внимание на цикл обработки событий. Мы просто ждём их, читая из event и реагируем нужным образом. Или снова перечитываем сообщения, или открываем текст нужного сообщения в новом окне.

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

# Версия на Lua

То, что в итоге получилось, можно посмотреть тут: https://github.com/gl00my/plan9hacks/blob/master/linux/mu-query

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

1. Для отправки почты используется msmtp.

defaults
auth on
tls on
logfile ~/.msmtp.log

account gmail
host smtp.gmail.com
port 587
tls_certcheck off
from user@gmail.com
user user@gmail.com
password password

account default : gmail

2. mu-query умеет показывать запросы mu. Например, вводим в tagline: mu-query from:ivanov, выделяем, нажимаем 2-ю кнопку мыши и видим нужный результат. Если не указывать запрос, показываются последние 100 сообщений. Можно листать по 100 сообщений командой Page.

3. При просмотре сообщения все аттачи распаковываются во временную директорию. Например, если я вижу, что это html письмо, я могу дописать firefox file:/// перед путём к файлу прямо в теле сообщения и нажать.

4. На данный момент поддерживается только Reply, составление нового сообщения, удаление и пометка сообщений как Seen. Forward и добавлений аттачей нет. Это несложно добавить, но пока я не стал этого делать. Может быть, будет третья итерация уже на go. :)

5. Чтобы удалить пачку сообщений или пометить их как прочитанные нужно выделить все нужные сообщения и нажать на соответствующую "кнопку".

На данный момент я пользуюсь mu-query на постоянной основе и очень доволен. Мне действительно это удобно. И главное, я понял что относительно просто могу писать под себя интерфейсы. Например, я уже задумываюсь о команде git-log.

# Опыт acme

Если говорить о практической пользе, то кроме "персонализации" инструментария я получаю с acme тот же эффект, что получаю от Plan9. У меня разгружается сознание. Когда я работаю в emacs, мой мозг перегружен информацией о множестве клавиатурных комбинаций и конкретных рецептах. Если брать другие редакторы, то в целом, ситуация повторяется. Acme в этом плане не похож ни на один из них. Его "базис" очень простой, единообразный и при этом всё ещё мощный. Настоящий Unix инструмент!

Когда я первый раз увидел acme, я не мог даже себе представить, что в _этом_ можно работать. Что же, ещё один повод напомнить себе, что встречать по одёжке не стоит.

Кстати, об одёжке. Уверен, у 99% людей пропадает интерес к acme как только они узнают, что в нём нет подстветки синтаксиса. Или, что в этом редакторе нельзя перемещаться по строкам вверх-вниз с помощью клавиатуры... Я зря это сейчас сказал, да? :)

# Re: Про собаку, мячик и сливную решётку
std.hugeping.micro
hugeping(ping,1) — boscholeg
2021-10-13 11:03:36


boscholeg> Намекаешь на то, что тебя тащат куда-то против твоей воли? Или на беспочвенность своих страхов и сомнений?

Да в том-то и дело, что не знаю. :) Может быть, просто жалок? :) Шучу. Не знаю. Много каких-то ассоциативных образов, которые подсознательно действуют.

# Про собаку, мячик и сливную решётку
std.hugeping.micro
hugeping(ping,1) — All
2021-10-13 09:30:56


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

-- Ну не бойся, давай. Не бойся.

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

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

Я не знаю почему, но этот эпизод прямо врезался в память, и я всё время к нему возвращаюсь.

Почему сливная решётка стала для пса непреодолимой проблемой? Травма, ассоциация, что-то ещё? Помогал ли мячик в зубах бульдога преодолеть страх? Что он чувствовал, когда хозяин волок его через "страшное" препятствие?

Может быть, я тоже как эта собака?

# Re: 0 или 1
std.hugeping
hugeping(ping,1) — Andrew Lobanov
2021-10-13 08:08:49


AL> Саму проблему я примерно понял, но не понял откуда вообще берётся этот вопрос.

Я, в общем, об этом и говорю. Остальные рассуждения, следствие вот этой вот поворотной точки. Я где-то кажется цитировал Джона Чалмерса, но не могу найти сейчас. Так что ещё раз приведу.

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

...

> В этой связи можно было бы говорить о Великом Разделении, имеющемся в области исследований сознания. Если вы считаете, что решение «легких» проблем объясняет все, что нуждается в объяснении, то у вас получается один тип теории; если вы считаете, что кроме них есть и дополнительная «трудная» проблема, то у вас будет другой ее тип. В какой-то момент общезначимые аргументы становятся затруднительны, и обсуждения зачастую сводятся к ударам по столу.

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

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

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

Так что, действительно, есть "разделение". Это удивительно. И таких разделений масса.

# Re: 0 или 1
std.hugeping
hugeping(ping,1) — vvs
2021-10-12 11:15:18


vvs> Иногда даже возникает сомнение: а действительно ли многие люди говорят на одном со мной языке?

Вот-вот... ;) Скорее всего на разных. Особенно, когда речь заходит об абстрактных понятиях. И дело тут мне кажется не только в языке, но и в том, как ощущаются понятия (или не ощущаются вообще).

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

# Re: 0 или 1
std.hugeping
hugeping(ping,1) — vvs
2021-10-04 22:41:23


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

Да, давай закроем. Я с твоим мнением согласен в той части, что касается хамства и перехода на личности. Но вмешиваться в процесс я не хочу. Форум я "дропнул" и если бы не spline, его бы не было сейчас вообще. Я модерировал его тоже не лучшим образом и тоже, скорее в авторитарном режиме (что мне не нравилось). В поддержке репозитория я тоже себя дескредитировал. Так что это spline сейчас разгребает мои долги.

Все мы имеем свои особенности. Я привык к резкости и kerber и spline и как то делаю поправку на неё. Меня могут тоже послать, но и я в принципе могу это сделать. Так и живём. Но, в общем, прими мои извинения за ситуацию. Можешь писать здесь спокойно. Если дойдёт до конфликтов и тут, я решу проблему на своей площадке.

# Re: 0 или 1
std.hugeping
hugeping(ping,1) — vvs
2021-10-04 08:41:28


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

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

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

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

P.S. Можно ещё Столлмана вспомнить. :)

# Re:instead 0.5 с поддержкой tts
std.club
hugeping(ping,1) — All
2021-10-02 10:22:07


Выпустил Re:instead 0.5 с поддержкой голосового вывода и улучшениями в Android сборке.

* поддержка голосового вывода на: Linux, Windows и Android.
* !tts команда;
* функции доступности в Android версии;
* лучшая поддержка виртуальных клавиатур Android;
* исправления ошибок.

Этот релиз не состоялся бы без помощи Nikita Tseykovets. Спасибо!

Как обычно, скачать версии для Windows/Linux и Android можно с github: https://github.com/instead-hub/reinstead

Версия в F-Droid будет через несколько дней.

#news

# Re: 0 или 1
std.hugeping
hugeping(ping,1) — vvs
2021-09-23 13:41:42


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

Моя заметка в основном о том, что одно дело -- те вещи, которые мы создаём (и, поэтому, осознаём и подчиняем их логике), а другое дело -- мы сами и другие люди, восприятие мира. Жизнь не редуцируется. В лучшем случае -- она диалектична. Законы, которые работают в логике -- работают не везде. Попытка обосновать всю нашу жизнь логически, научно или как-то ещё уложить в непротиворечивую "теорию" неизбежно будут содержать сингулярности. В нас есть (как в творении Божьем) бесконечность внутри. Тот же пример рассуждения: я смертен значит меня не существует, при кажущемся парадоксе мне соверешенно (как идеалисту) понятен. Если наше существование не утверждено Богом -- нас просто не существует.

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

Но я ни с чем не спорю, просто пояснил другими словами свою мысль.

# Re: 0 или 1
std.hugeping
hugeping(ping,1) — vvs
2021-09-21 19:47:10


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

> Программист, который не любит математические головоломки - это любопытная экзотика. Возможно он просто не умеет их готовить? (изучаем ещё и кулинарию ;)

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

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

Никогда не умел нормально (да и не любил) играть в шахматы. Решать математические головоломки. Терпеть не мог квесты с вставками игрушек на логику. (Например, были такие в Машинариуме).

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

# Re: Блокировка INSTEAD в Google Play
std.club
hugeping(ping,1) — hugeping
2021-09-21 15:49:49


Приложение снова доступно :) Ура!

# Re: RE:INSTEAD
std.club
hugeping(ping,1) — hugeping
2021-09-21 15:49:11


tts в re:instead

Со второй попытки, всё-таки, поддержку tts решил оставить. (Пока, только для Android). Спасибо Никите за помощь! Поддержка неидеальна, конечно, но пользоваться можно.

Будет в следующей версии (0.5).

# 0 или 1
std.hugeping
hugeping(ping,1) — All
2021-09-21 15:32:40


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

Не удивительно, что с годами это начинает отражаться и на психике. Один из таких "синдромов" я замечаю у себя и у некоторых знакомых программистов. Я назвал его синдром "0 или 1". Проявляется он в различных формах, но стоит за всем одно и то же.

Если высказано какое-либо суждение, ты начинаешь его раскручивать и доводить до логического конца. Интерпретация событий всегда чёрно-белая. 0 или 1? Ведь нужен конкретный и простой факт в основе. То, что хорошо помогает искать ошибки может навредить в общении. Например?

> - Смотри, я тут игру написал Color Lines.
> - Неплохо. Только цвета шариков мне не нравятся.
> - А мне, кажется, красиво.
> - Нет, слишком яркие.

(сценарий 0) Я подобрал плохие цвета. -> Они мне нравятся, значит, у меня нет вкуса. -> Зря я написал игру.

(сценарий 1) Цвета мне нравятся, а оппоненту -- нет. -> У оппонента нет вкуса, не надо учитывать его мнение. -> Зря я его спросил.

Следствие синдрома. "Если что-то может случиться, то это обязательно случится." Перекликается с законами Мерфи, да? Не случайно, ой не случайно... :)

> - Где мой паспорт?
> - Зачем тебе?
> - Я всегда беру паспорт, когда выхожу на улицу... И, кстати, где зонт?

Усиление следствия. "Если что-то случится в будущем, то это уже случилось."

> Мы смертны -> мы уже мертвы -> нас не существует и никогда не существовало.

Ещё одно следствие -- если назревает конфликт, нет смысла тянуть, ведь "он уже случился".

> - Не могу тебя видеть!
> - Если мы враги, то давай расстанемся. Если нет, то зачем эта ссора?

Наконец, невозможность делать простейшие вещи без детального понимания задачи.

> - Отрежь кусочек скотча.
> - Какой длины?
> - Просто кусочек скотча.
> - Для какой задачи нужен скотч? (попытка узнать точную длину отрезка под задачу)
> - Блин, да ты издеваешься!

// Все диалоги являются вымышленными, любое сходство -- случайно.

Годами выработанная привычка сводить всё к "да" или "нет", "всё" или "ничего", 0 или 1 -- рано или поздно находит выход, нередко приводя к раздражению, непониманию, ссорам.

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

Когда я слышу очередную "печальную" новость про программиста, я всегда с сожалением думаю, что не последнюю роль здесь сыграл синдром 0 или 1.

Мне кажется, любой программист в качестве противоядия должен иметь "аналоговое" хобби. Велосипед, гитара, рыбалка... Что угодно, что позволяет не терять связь с реальным миром и напоминать себе, что не всё решается через 0 или 1.

Берегите себя!

# Re: Деды и творчество
std.hugeping.micro
hugeping(ping,1) — vvs
2021-09-21 14:39:55


vvs> Внуки есть? Тогда не дед ;)

Дед! Дед Мороз я. :)

# Деды и творчество
std.hugeping.micro
hugeping(ping,1) — All
2021-09-21 13:08:20


Очень вдохновляют примеры, когда творчеством занимаются пожилые люди. Пётр Мамонов, Procol Harum (выпустившие альбом в 2017!), Питер Фальк в роли самого себя в Коломбо... Экзюпери написал Маленького принца после 40. В общем, если приглядеться, то в глазах взрослых с виду людей, можно разглядеть искорки детства.

Как-то на youtube случайно натолкнулся на любительский клип на одну из любимых песен Procol Harum. Вот он https://www.youtube.com/watch?v=-MnQTFa7PHI

Видеоряд + музыка совпали на 100%! Музыка резонируют с картинкой так, что на кадрах, когда барон обгоняет летящую смерть, я чувствовал мурашки по телу. Это было настолько удивительно и круто, что я посмотрел фильм, из которого был нарезан видеоряд. Вот этот фильм: https://ru.wikipedia.org/wiki/Приключения_барона_Мюнхгаузена_(фильм)

А режиссёром оказался Терри Гиллиам, известный мне главным образом только по прекрасной "Бразилии". Прочитал, что "Приключения барона Мюнхгаузена" неофициально считается одой старости и завершает трилогию, начатую картинами "Бандиты времени" и "Бразилия", которые соответствуют юности и зрелости.

Что тут сказать? "Ты не один"(c)

# Re: RE:INSTEAD
std.club
hugeping(ping,1) — hugeping
2021-09-19 13:29:01


Выпустил RE:INSTEAD 0.4

Новое:

* возможность сборки с одной из трёх библиотек рендеринга шрифтов (stb_truetype/libschrift/freetype);
* статические сборки Linux/Windows теперь собираются с freetype;
* исправление ошибок;
* системные команды теперь начинаются с ! (например, !save);
* команды !saves и !rm для просмотра и удаления сейвов.

Готовы бинарные сборки для Linux/Windows (reinstead-0.4.zip) и .apk для Android.
Обновление в F-Droid должно тоже скоро подоспеть.

https://github.com/instead-hub/reinstead/releases

# Re: Программирование как зависимость
std.hugeping.micro
hugeping(ping,1) — vvs
2021-09-18 14:46:19


В "Возвращении квантового кота" есть герой, бомж. Там он говорит что-то такое:

> Когда-то я хотел стать кандидатом наук... Писал диссертацию на тему строения материи.. Но... Мой мозг переутомился... Я пытался успокоиться и вот... Теперь я здесь...

Действительно, слышал, были такие случаи... ;)

# Re: Программирование как зависимость
std.hugeping.micro
hugeping(ping,1) — vvs
2021-09-17 20:09:52


vvs> В итоге ни одна книга в отдельности уже не может нанести мне вреда! Здорово, правда? :'D

А книга наносит вред содержимым или самим фактом чтения? :) Потому что если говорить про программирование, то тут сам процесс -- источник хронических заболеваний и повреждения нервной системы. :)

# Программирование как зависимость
std.hugeping.micro
hugeping(ping,1) — All
2021-09-15 13:12:03


Несколько дней нахожусь в программистском запое. Программирую Re:instead. Этот проект никак не связывает мне руки, поэтому чувствую эмоциональный подъём. За счёт недосыпания и насилия над нервной системой, конечно же. Это плохо, каждый раз думаю об этом и... Ничего не меняется. Страсть программирования сидит уже глубоко, и просто так победить это не получится. Да и решимости, наверное, нет. "Дай мне целомудрие и воздержание, только не сейчас" // Августин Блаженный.

Но вред от этой зависимости есть. Конечно, хочется её романтизировать и идеализировать. Но она вредит и, при этом, мало что даёт на выходе. Кто знает о проекте Re:instead? 10 человек? :) Полезен ли он? Единственная надежда на пользу, это добавление TTS поддержки для незрячих. Которую, кажется, можно было бы сделать для Android версии. Может быть попробую сделать это.

За это время отделил логику рендеринга шрифтов так, что менять библиотеки отрисовки текста стало очень просто. Сделал возможность собираться с freetype (он даёт лучшее качество на низких DPI) и с libschrift (просто до кучи). Так что теперь Re:instead может быть собран с 3-мя рендерами.

Бинарные сборки 0.4 будут уже на freetype.

# netsurf и iconv
plan.9
hugeping(ping,1) — All
2021-09-12 22:11:57


Те, кто пользуются 9front наверняка знают, что есть порт netsurf: https://github.com/netsurf-plan9/netsurf

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

Я взял iconv реализацию из openwrt и грязным образом прикрутил к netsurf. Положил в свой репозиторий: https://github.com/gl00my/plan9hacks

P.S. Кроме этого, у меня там есть ещё какие-то патчи, которые что-то исправляют в плане русского и шрифтов.

# RE:INSTEAD
std.club
hugeping(ping,1) — All
2021-09-12 16:11:47


Выпущен Re:instead 0.3. В новой версии:

- Настройка conf.width: максимальное число символов в строке;
- Обновлён Метапарсер;
- Исправлены ошибки;
- Улучшена Android версия.

Также, Re:instead уже можно поставить из F-Droid! Правда, пока только прошлую версию (0.2).

https://github.com/instead-hub/reinstead/releases/tag/0.3

#news

P.S. Edited: 2021-09-19 13:24:33

# 07.09.2021 - F-Droid и бан INSTEAD в Google Play
std.hugeping.micro
hugeping(ping,1) — All
2021-09-07 18:30:43


Последние дни занимался тем, что добавлял re:instead в F-Droid. И это, похоже, удалось! Сегодня смержили в мастер ветку. Так что остаётся только ждать, когда обновится репозиторий, искать и ставить приложение reinstead.

Вчера INSTEAD ланчер от Бориса Тимофеева был забанен на Google Play. С одной стороны, я расстроился. С другой -- это закономерно. Свободное ПО всегда будет встречать сопротивление. Наверное, можно попробовать оспорить решение, объяснив что INSTEAD не устанавливает ПО, а качает Lua скрипты игр... И Борис попробует это сделать. Но мне кажется, окончательно сбросить с себя ярмо корпорации -- тоже неплохой вариант. Так или иначе, INSTEAD доступен через в F-Droid...

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

P.S. Edited: 2021-09-07 18:32:14

# Блокировка INSTEAD в Google Play
std.club
hugeping(ping,1) — All
2021-09-05 19:04:07


Сегодня выпустил re:instead. Сделал также merge реквест в f-droid. Настроение выполненной работы держалось до самого вечера, когда пришли тревожные новости...

# INSTEAD от btimofeev заблокирован в Google Play #

Что они там нашли, не знаю... Вероятно, не нравится установка Lua кода из сторонних источников. Что же, закономерный оскал капитализма.

На самом деле, неуместность INSTEAD на коммерческой площадке чувствовалась и раньше. И вот, сейчас мы получили логическую развязку. INSTEAD не место на площадке Apple. Не место на площадке Google.

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

Напомню, что скачать приложение вы можете из репозитория открытых проектов на F-Droid: https://f-droid.org/en/packages/org.emunix.insteadlauncher/

Я обновил ссылку на https://instead.hugeping.ru на приложение для Android.

#news

# RE:INSTEAD 0.2
std.club
hugeping(ping,1) — All
2021-09-05 11:33:05


Сегодня, тихо и незаметно, выпущено обновление re:instead 0.2!

RE:INSTEAD это приложение проекта "ПАРСЕРНОЕ СОПРОТИВЛЕНИЕ"

https://parser.hugeping.ru

которое предлагает вашему вниманию сборник парсерных игр в минималистичном формате. Сборки подготовлены для: Windows, Linux и Android. Для других ОС (включая Plan9, MacOS X, BSD*) предлагается тривиальная самостоятельная сборка из исходных кодов.

Изменений масса:

- изменение размера шрифта клавишами ctrl-+/-/0;
- поддержка автоскриптов через параметр -i <autoscript>;
- значительное ускорение работы;
- исправления в играх;
- поддержка сохранения настроек;
- порт на Android;
- исправление ошибок и прочие улучшения.

Сборку для android пока можно скачать прямо в виде .apk файла. А потом, я надеюсь, приложение примут в F-Droid. Соответствующий merge request уже создан.

Проект на github: https://github.com/instead-hub/reinstead

Руководство для игроков: https://github.com/instead-hub/reinstead/releases/download/0.2/manual.pdf

Бинарные сборки: https://github.com/instead-hub/reinstead/releases

#news

# МЕТАПАРСЕР 2.2.1
std.club
hugeping(ping,1) — All
2021-09-04 17:52:33


Обновлён метапарсер.

- Исправлено формирование с/со в русской библиотеке;
- Исправлены сохранения в metaparser.js.

Обновлениы: metaparser, metaparser-js(до 2.2.2). Заменена сборка instead-cli(1.5).

#news

# 04.09.2021
std.hugeping.micro
hugeping(ping,1) — All
2021-09-04 09:43:30


За последние дни практически закончил re:instead. Версия для ANDROID работает и играется приемлемо. Очень много доработок, в том числе и в плане производительности. re:instead будет распространяться только в виде комплекта игр, гарантированно хорошо работающих в этом интерпретаторе. Никаких ланчеров и скачиваний из сети.

Также пробросил микроблог из gemini на https://hugeping.ru
Сомневаюсь, транслировать ли эти сообщения микроблога в twitter/mastadon/telegram или это будет только засорять... Пока они транслируются только в телеграм.

Накопил много тем для блога, но программировать пока интереснее. :)

# Надвигается беда
std.hugeping
hugeping(ping,1) — All
2021-09-04 08:54:33


Случайностей в жизни не бывает. Думал ли я, посещая с семьёй воронежский цирк, что это приведёт меня к книге, в которой я прочитаю нужные мне строчки? А ведь так всё и произошло!

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

## Рей Бредбери. Надвигается беда

В детстве и в институте я не очень любил Бредбери. Тогда я читал фантастику запоем, но другую -- понятную мне. А Бредбери вызывал скорее недоумение. О чём это всё? И только в зрелом возрасте я обнаружил, что он стал мне ближе и понятней. По восприятию, где-то рядом с Гофманом, которого я тоже начал открывать.

Книга отличная. Читал и не мог остановиться. Близко было всё. И главные герои -- подростки. И религиозные мотивы в фундаменте. И переплетение реального и идеального.

> - Папа.. а я хороший человек?
> - Думаю, да. Точно знаю - да, - был ответ.
> - Это... поможет, когда придется действительно туго?
> - Обязательно.
> - И спасет, когда придется спасаться? Ну, если вокруг, например, все плохие и на много миль - ни одного хорошего? Тогда как?
> - И тогда пригодится.
> - Хотя ведь пользы от этого не очень-то много, верно?
> - Знаешь, это ведь не для тела, это все-таки больше для души.

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

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

Аллюзия была настолько сильная, что ошибиться невозможно.

> ... Одного только не говорят они людям, катающимся под их музыку...
> - Чего? - не утерпел Джим.
> - А того, что если ты в одном обличье стал несчастным грешником, то и в любом другом им останешься.

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

> - Эй, что вы там прижимаете? - М-р Дарк прищурился. А, Библия! Очаровательно! Как это по-детски наивно и свежо.
> - Вы читали ее, мистер Дарк?
> - Представьте, читал. Скажу даже больше. Каждую главу этой книги, каждый стих вы можете прочесть на мне, сэр...

Но всё-таки, как мне кажется, назвать повесть христианской будет не вполне правдой. Ближе к концу события развиваются в таком ключе, что в какой-то момент я даже почувствовал недоумение. Так что же такое карнавал? И кто такой Дарк? Почему борьба с ним возможна именно тем способом, который обнаружил Чарьльз Хэллуэй?

> - Ну что? Удивлены? Могу даже почитать вам. - Дым от сигареты м-ра Дарка завихрялся над шелестящими страницами.
> - А вы, конечно, ожидали, что я рассыплюсь прямо перед вами? К вашему несчастью, это все - легенды. Жизнь, это очаровательное скопище самых разных понятий, продолжается, как видите. Она движет сама себя и сама себя оберегает, а смысл ей придает неистовость. А я - не последний в легионе необузданных.

Можно ли верить Дарку, отцу лжи? Но и Чарльз Хэллуэй, порой, сообщает нам со страниц книги нечто не всегда понятное.

К концу книги эти вопросы, на мой взгляд, не разрешаются и в полной мере не преодолеваются. Это, в свою очередь, оставляет колкое послевкусие вопроса. Так о чём же повесть? О жизни, детстве, взрослении, о человеческих страстях. Но действует ли в этом мире Бог? Доверившись книге, я чувствовал что болтаюсь между двумя состояниями: ощущением присутствия Бога и ужасом богооставленности. В повести, не смотря на всю её "сказочность", присутствует парадоксальность реального мира. В ней нет прямого рецепта, хотя сначала кажется, что есть. И это переплетение фантастики и реализма делает повесть пронзительно острой.

> "У Зла есть только одна сила, та, которой наделяем его мы. От меня ты ничего не получишь. Наоборот, я заберу у тебя все. И тогда тебе останется только погибнуть".

И вот мы уже почти добрались до конца. Счастливого конца?

> - Да, сынок. Теперь уж всю жизнь придется быть начеку. Все только начинается. Они неторопливо обогнули карусель.
> - А как же мы их узнаем? - допытывался Вилли. - На кого они будут похожи?
> - Может быть, они уже здесь, - тихо ответил отец.
> Оба друга быстро огляделись. Но поблизости была только карусель да они сами. Тогда Вилли поднес руки к лицу и внимательно осмотрел их, перевел взгляд на Джима и снова на отца.
> Чарльз Хэллуэй кивнул. Только один раз.

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

P.S. Кстати, такое же разочарование было у меня от просмотра фильма "1984", который на фоне книги показался блеклым и невыразительным.

# Re: 26-08-2021
std.hugeping.micro
hugeping(ping,1) — vvs
2021-09-02 21:38:22


vvs> Это из майкрософта человек :)

Довели, беднягу. :)))

Да, тенденция есть! Это интересный феномен. Люди перегружены.

# Re: 26-08-2021
std.hugeping.micro
hugeping(ping,1) — vvs
2021-08-31 18:16:09


О, спасибо! Посмотрим...
Может быть, тяга к простоте -- это возрастное? :)

# Последний день лета
std.hugeping.micro
hugeping(ping,1) — All
2021-08-31 18:15:23


Всё-таки выпустил в последний день лета INSTEAD 3.4.0. Этот релиз сильно задержался и несёт в себе долгожданную поддержку HiDPI.

Помню, как в 2009 (или в 2008?) писал первую игру "Одна старая история", которая начиналась в последний день лета... Конечно, я тогда думать не мог, что это хобби растянется на >10 лет. Думаю, так или иначе, оно повлияло на меня. В том числе в профессиональном плане.

https://instead.hugeping.ru/post/2021-08-31-instead-3-4-0/

# INSTEAD 3.4.0 вышел!
std.club
hugeping(ping,1) — All
2021-08-31 16:07:33


На исходе последнего дня лета вышел INSTEAD 3.4.0! Версия с поддержкой hi-dpi экранов и возможностью создавать игры с адаптивными темами. Список изменений:

- исправление в pxl:fill_triangle (сортировка вершин);
- исправлена сборка с новым SDL_image;
- корректная работа с масштабированием в Windows (dpi awarness);
- поддержка высоких dpi (если включена опция HQ);
- новый параметр -dpi;
- новая функция instead.screen_dpi();
- новый параметр theme scr.gfx.scale;
- новый параметр theme scr.dpi;
- новый параметр theme scr.scale_aware (1|2) - поддержка адаптивных тем;
- возможность запуска игры через командную строку по пути к main?.lua файлу;
- более качественное масштабирование картинки сцены;
- обновлён SDL для windows сборки;
- улучшение: используется GetModuleName для нахождения полного пути к .exe (Windows);
- новая функция pxl:tosprite (конвертация pxl в sprite с масштабированием);
- ускорение pxl:fill;
- экспериментальная поддержка сборки с gtk4.0 (пока отключено).

Бинарные сборки будут появляться по мере готовности.

#news

# RE:INSTEAD на Android
std.hugeping.micro
hugeping(ping,1) — All
2021-08-29 19:29:51


Всё-таки, что-то получилось! Только что закоммитил в contrib проекта reinstead https://github.com/instead-hub/reinstead исходники для сборки Android версии.

Конечно, это ещё не релиз, но, вроде бы, в целом -- работает. Заодно, перевёл reinstead на работу с SDL render Api (он стал работать заметно быстрее).

К сожалению, из-за REINSTEAD сдвигается релиз его старшего брата (INSTEAD).

# Играю с Android
std.hugeping.micro
hugeping(ping,1) — All
2021-08-28 12:50:37


Ради интереса решил попробовать собрать reinstead на Android. Я думал, что всё будет просто. Но нашлись нюансы...

В результате войны в течении 2-х дней с Java/ndk и отладкой SDL получился прототип. https://twitter.com/peter_ru/status/1431581688728010755

Но я пока не уверен, что буду доводить его до конца.

Пока работал со всем этим, меня не покидало ощущение перегруженности и текучести современных технологий. POSIX всё-таки более фундаментальная вещь. 50 лет Си уже существует, сколько ещё технологий он переживёт?

P.S. Список тем для блога растёт, но между программированием и блогом я всегда выбираю первое. Надеюсь, скоро будет перерыв и я напишу новые заметки. :)

# 26-08-2021
std.hugeping.micro
hugeping(ping,1) — All
2021-08-26 15:18:11


Продолжил работу над RE:INSTEAD. Всё-таки, очень нравится мне этот проект. Отдушина от сложных вещей. Что сделано:

- изменение размера шрифта на-лету (ctrl+/ctrl-);
- поддержка автоскриптов (опция -i);
- поддержка прокруткой тасканием (для возможного порта на android).

Рад, что проект https://parser.hugeping.ru известен незрячим. Это даёт смысл его существованию!

# Микроблог
std.hugeping.micro
hugeping(ping,1) — All
2021-08-26 15:12:36


Решил создать эху std.hugeping.micro как замену твиттеру/мастадону.
Возможно, потом настрою трансляцию отсюда.

# metaparser-js 2.2.1
std.club
hugeping(ping,1) — All
2021-08-25 16:29:13


Обновлёна js версия метапарсера до версии 2.2.1.

Изменения:
- исправлена работа старой js версии, которая активизируется если браузер не поддерживает wasm;
- исправлена доступность для незрячих (спасибо Даниилу Гусеву за помощь в отладке).

#news

# RE:INSTEAD 0.1
std.club
hugeping(ping,1) — All
2021-08-15 09:48:26


Сегодня вышла в свет первая версия нового проекта RE:INSTEAD!

Что это: https://github.com/instead-hub/reinstead/blob/master/MANIFEST.md
Скриншоты: https://github.com/instead-hub/reinstead/blob/master/README.md

Вы можете скачать готовую сборку, которая должна работать на Linux (64 бита) и Windows. Также, проект собирается в 9front (Plan9).

https://github.com/instead-hub/reinstead/

RE:INSTEAD распространяется с играми проекта "ПАРСЕРНОЕ СОПРОТИВЛЕНИЕ", которые лицензированы под лицензией CC SA 4.0.

http://parser.hugeping.ru/

#plan9
#news

# МЕТАПАРСЕР 2.2
std.club
hugeping(ping,1) — All
2021-08-15 09:41:50


Выпустил новую версию метапарсера. Исправление содержит исправления ошибок, поэтому рекомендуется для всех авторов.

* исправлено падение при вызове mp:myself();
* исправлено поведение Meta команд;
* исправлен std.busy();
* бекпорт исправлений из проекта re:instead.

С новым модулем выпущены: metaparser, metaparser-js, instead-cli

https://instead.hugeping.ru/page/metaparser/
https://parser.hugeping.ru

#news

# МЕТАПАРСЕР 2.1
std.club
hugeping(ping,1) — All
2021-07-31 14:55:18


Выпустил новую версию метапарсера.

* transcript больше не включается автоматически по команде autoscript;
* mp.detailed_attr;
* mp.msg.INCOMPLETE_NOUN/SECOND_NOUN/UNKNOWN_VERB переписаны;
* mp:content переписан;
* mp:footer();
* mp:verb_filter() (ru: лучшее детектирование глаголов);
* ru: исправлен глагол #Insert;
* исправления в автодополнении;
* исправления в английской библиотеке.

Рекомендую обновиться, если вы пишете свои игры с использованием МЕТАПАРСЕРА.

Выпущены: metaparser, metaparser-js, instead-cli

https://instead.hugeping.ru/page/metaparser/
https://parser.hugeping.ru

#news
P.S. Edited: 2021-07-31 18:43:00

# Консольный телеграм клиент (работающий)
linux.14
hugeping(ping,1) — All
2021-07-27 13:37:31


Форк telegram-cli, который работает: https://github.com/kenorb-contrib/tg
Конечно, есть прекрасная telega.el, но иногда хочется чего-то более изощрённого.

# shithub
plan.9
hugeping(ping,1) — hugeping
2021-07-27 07:51:48


https://shithub.us - git9 репозитории разного софта под 9front.

# Книги, которые на меня повлияли
std.hugeping
hugeping(ping,1) — All
2021-07-25 20:01:11


> Значит, нужные книги ты в детстве читал! (с) Высоцкий

* Книги, которые на меня повлияли. *

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

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

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

А до этого была гремучая смесь из произведений Экзюпери, фантастики Филип К. Дика, эзотерики Р. Баха и книг различных философов (среди которых запомнилась "Я и ты" Мартина Бубера). И, возможно, всё это тоже не было лишним. Хотя, большую часть того что я читал в этот период я не стал бы включать в список.

Но, мысленно отбирая книги, я заметил, что что-то не так.

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

Потом я вспомнил, как давным-давно удивлялся наличию "Одиссеи капитана Блада" в одном из подобных списков (к сожалению, не вспомню сейчас у кого именно я её увидел). И тут я понял, что книги, которые действительно влияли на моё мышление следует искать в детстве!

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

Знакомство с первой книгой состоялось так.

Мне лет 13. Мы с отцом гуляем по нашему району и обнаруживаем библиотеку. Заходим внутрь. Отец предлагает чтобы я взял что-нибудь почитать. Что меня интересует? Конечно, фантастика! Желательно, развлекательная. На полке стоит убитая в хлам книжка небольшого формата в тонком переплёте. Так как я поскорее хочу покинуть это место и выйти на свежий воздух, быстро пролистав томик, говорю: "Беру эту!".

Я потом долго искал книжку по описанию в интернете и нашёл! Это: "Опрокинутый мир" К. Приста.

Дальше, будут спойлеры. Чтобы не пересказывать сюжет, я просто помещу ссылку на статью в wiki: https://ru.wikipedia.org/wiki/Опрокинутый_мир

Я помню, что "Опрокинутый мир" подействовал на меня как удар. Привычная почва ушла из под ног и моё восприятие вывернулось наизнанку. Прямо как у героя романа.

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

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

В школе по наводке друга я неожиданно увлёкся Стругацкими. Как сейчас понимаю, они стали для меня детоводителем из развлекательной фантастики к более взрослой литературе.

Я прочитал рассказ (как оказалось, повесть), который для меня повторил мотивы, которые я увидел в "Опрокинутом мире". Речь идёт о "Парне из преисподней": https://ru.wikipedia.org/wiki/Парень_из_преисподней

Перечитав повесть недавно, я сравнил впечатления со школьными воспоминаниями и они совпали не везде. В памяти я снова получил закрепление понимания относительности реальности. Или, скорее, реальности как жизни. Субъективность всегда воспринималась как нечто ненастоящее, ложное. Но я начал понимать, что это заблуждение! Что субъективное восприятие и есть настоящая реальность, как и сама жизнь. Нередуцируемая на что-то более примитивное.

Реальность парня из преисподней в моих воспоминаниях не была разрушена. Он жил войной, и война осталась с ним навсегда. Он не смог остаться в "новом мире", и вернулся в старый. Разрушенный, больной, но настоящий дом. Его миф устоял.

> – Я хочу знать, кто победил.
> Корней очень долго молчал, по лицу его ничего нельзя было разобрать. Гаг сел – не держали ноги. Рядом из траншеи торчала голова Драмбы. Гаг бессмысленно уставился на нее.
> – Я ведь уже объяснял тебе, – сказал наконец Корней. – Никто не победил. Вернее, все победили.
> Гаг процедил сквозь зубы:
> – Объясняли... Мало ли что вы мне объясняли. Я этого не понимаю. У кого осталось устье Тары? Это, может быть, вам все равно, у кого оно осталось, а нам не все равно!
> Корней медленно покачал головой.
> – Вам тоже все равно, – устало сказал он. – Армий там больше нет – только гражданское население...
> – Ага! – сказал Гаг. – Значит, крысоедов оттуда выбили?
> – Да нет же... – Корней страдальчески сморщился. – Армий вообще больше не существует, понимаешь? Из устья Тары никто никого не выбивал. Просто и алайцы, и имперцы побросали оружие и разошлись по домам.
> – Это невозможно, – сказал Гаг спокойно. – Я не понимаю, зачем вы мне все это рассказываете, Корней. Я вам не верю. Я вообще не понимаю, чего вам от меня надо. Зачем вы меня здесь держите? Если я вам не нужен – отпустите. А если нужен – говорите прямо...

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

В общем, список из книг я так и не составил. Но в очередной раз понял, что записывать прочитанное стоит. Чтобы не искать это потом долго и мучительно в интернете. :)

# Пётр Мамонов
std.hugeping
hugeping(ping,1) — hugeping
2021-07-15 19:33:19


Упокой, Господи, душу раба Твоего Петра.


Посмотрел интервью, очень тёплое и искреннее ощущение.

https://m.youtube.com/watch?v=MQNahSdqFCU

# Re: Анонс станции
idec.talks
hugeping(ping,1) — ake
2021-07-07 18:31:05


ake> Тогда ведь получается, что по существу IDEC, как протокол, и как сеть, практически ортогонален этим применениям.

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

ake> Я даже не столько о стандарте, хотя там тоже можно много чего придумать и сделать, а о сообществе. Всё-таки в сети с десятком пользователей можно хоть TCP over avian carriers брать, было бы что обсуждать.

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

# Re: Анонс станции
idec.talks
hugeping(ping,1) — ake
2021-07-06 21:16:22


>> Тут тихо. Но, надеюсь, IDEC ещё шевелится
ake> Не было бы это шевеление конвульсиями, будет жалко.

Ну, я лично получил от idec то, что хотел и даже без оглядки на наличие других станций. Моя нода ii-go стала единым источником данных для gemini капсулы и моего блога в вебе. А также для телеграмм каналов. И все это просто текст.

ake> А есть ли какие-то мысли о его перспективах и, страшно сказать, развитии?

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

ake> Но чем дальше думал, тем менее обоснованной казалась идея (несмотря на концептуальную близость сетей) - писать сообщения из gemini не выйдёт;

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

# Re: Анонс станции
idec.talks
hugeping(ping,1) — ake
2021-07-06 10:34:42


ake> Следуя девизу "каждому пользователю сети по станции" организовал собственную.

Привет! Тут тихо. Но, надеюсь, IDEC ещё шевелится. :)

ake> Пока нет веб-интерфейса, можно использовать gemini-гейт - gemini://ake.crabdance.com:1966/

lagrange пишет, что срок действия сертификата истёк.

# Re: Работа
std.hugeping
hugeping(ping,1) — vvs
2021-06-29 15:28:54


vvs> Больше всех получают мошенники, воры и спекулянты, а вовсе не программисты. Не надо себе льстить ;)

Так я и не писал про то, что программисты получают больше всех. Мысль была не в этом.

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

Pages: 1 2 3 4 5 6