Pages: 1 2 3 4 5 6
RSS
# Re: openvpn
linux.14
hugeping(ping,1) — johnbrown
2020-10-11 12:35:13


Я всё-равно ничего не понял. Может быть кто-нибудь и ответит. А мне нужно понимать что происходит. Например. Openvpn это два конца. Нужна схема сети, где эти концы находятся в этой схеме. Где сервер и клиент в этой схеме. Интранет/интернет. Наты. Итд. А так, я вообще ничего не понял.

# Re: openvpn
linux.14
hugeping(ping,1) — johnbrown
2020-10-11 10:35:08


Непонятна схема. Какие машины, где стоят, где концы туннеля итд...

P.S. Сам не настраивал openvpn, но по схеме всё-равно вопросы.

# Plan 9: экстремальный KISS #1
std.hugeping
hugeping(ping,1) — All
2020-10-10 16:02:21


# Введение

Про операционную систему Plan 9 я слышал не раз. Но всё это время, мой интерес не переходил в активную фазу, ограничиваясь пассивным любопытством и чтением статей. Так продолжалось до настоящего момента, пока я всё-таки не попался в сети проекта http://9front.org

Я не буду здесь писать энциклопедическую информацию о Plan 9. Но если совсем кратко, то создатели Unix в лице Bell Labs (среди сотрудников которой числятся Кен Томпсон, Деннис Ритчи, Роб Пайк) однажды взяли и решили сделать _правильную_ ОС, без оглядки на проклятый Legacy Unix, в том числе и POSIX. Доведя идею "всё есть файл" до абсолюта и стерев грань между локальными и удалёнными файловыми системами. В качестве примера: tcp/ip это тоже файловая система. Поэтому, если мы подключим к себе удалённую ФС /net, получится что-то вроде NAT. Вот так просто и естественно. В общем, получилась бескомпромиссная, распределённая и при этом крайне простая и красивая ОС. Которая (с некоторыми оговорками) оказалась ненужной. Потому что существующие решения просто работают, и миру этого достаточно...

Но ребята из проекта http://9front.org форкнули Plan 9 и начали делать патчи, которые в том числе помогают Plan 9 работать на современном оборудовании. Итак, 9front можно сказать, это Plan 9, который лучше всего годится для того, чтобы поставить его на железо.

http://hugeping.tk/lib/uploads/mothra.png

На данный момент у меня есть работающий 9front на eeepc 1000px в котором можно даже что-то делать. До этого, я около полугода запускал 9front в qemu и читал различную информацию. И, честно говоря, мало что понимал. Я гробил файловые системы, не мог отредактировать файл и вообще... Не понимал ничего. В общем, я решил начать цикл статей о Plan 9, в которых я буду рассказывать о своём субъективном опыте. Конечно, я не знаток этой ОС, поэтому если кто-то может -- поправляйте меня в комментариях.

# Первые шаги

Итак, начнём.

Я начинал знакомство с ОС с чтения руководства dash с http://9front.org Руководство написано с юмором, с его помощью вы можете попробовать поставить 9front в qemu или на реальное железо (чего я бы пока не делал).

И вот, мы ставим ОС, отвечая на странные вопросы инсталлятора, стартуем... Иии... Что это?

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

На ноуте, в принципе, можно обойтись тачпадом. Короче, нужны три кнопки мыши. С случае тачпада это может быть тап 1, 2 или 3-мя пальцами. Или (в случае физических кнопок): 1я, 2я и 2я кнопка вместе с shift.

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

В общем, в этом окне (новые окна вы можете создавать нажав 2ю кнопку мыши и выбрав в меню New) вы можете что-то запускать. Если вы запускаете графическую программу, то её содержимое заменит собой содержимое окна. Это не то, к чему вы привыкли, но это удобно. Чем-то напоминает тайловые оконные менеджеры, когда вы заранее создаёте фреймы. Но пока просто наберите man rio и почитайте, как работать в этом странном "оконном менеджере".

Окно не скроллируется по умолчанию на новый вывод. Вы можете изменить это поведение нажав 3-ю кнопку мыши и выбрав scroll. То, что окно не скроллируется, минимизирует необходимось использования пейджера. Вы просто скроллите кнопками вверх/вниз. Хотя, пейджер всё-таки есть и называется 'p'.

Про историю команд -- забудьте. Клавиши вверх/вниз всегда скроллят окно. Перемещаться по тексту и по истории ими нельзя.

Текст в окне - это просто текст. Вы можете менять его, копировать и вставлять. Таким образом, можно воспринимать его как историю команд. Выбираете мышкой и делаете send. Команда выполнится.

Некоторые хоткеи всё-таки есть, и они -- на вес золота:

- C-a, C-e -- в начало и в конец строки;
- C-u -- стереть всё слева от курсора;
- C-f -- автодополнение путей в файловой системе (tab -- забудьте);
- C-b -- прыжок к приглашению;
- del - аналог C-c в Unix.

Ещё нюанс. Допустим, вы написали:

ls /usrr/glenda

Заметили, что опечатались. Вернулись курсором к r и стёрли его, нажали ввод.

Упс!

ls /usr
/glenda

При выполнении команд, курсор должен находиться в конце ввода! А так, выполнилась команда ls /usr. Используйте C-e.

К этому нужно привыкнуть и это непросто. Все рефлексы заточены на другое. В современных Linux командная строка обвешена дополнениями и клавиатурными сокращениями, но здесь всё не так. Что взамен? Простота! Нет никакого терминала, есть просто поток текста. И всё. Черные буквы на светлом фоне. Всё есть текст.

# Ещё несколько советов

- Используйте lc вместо ls. Вывод lc информативней. Например, после имён каталогов ставится /;

- Копирование в буфер обмена здесь называется snarf;

- Домашний каталог это $home или /usr/glenda в установке по умолчанию;

- Когда вы пишете что-то вроде grep, не надо заключать строки в "". Тогда в ввод эти кавычки и уйдут. Тут вам не bash, тут rc. У него совсем другие (более простые) правила эскейпинга. Можете использовать одинарные кавычки, если нужно. Например: g 'Kcaps' /sys/include/*. Да, g -- это рекурсивный grep;

- Некоторые утилиты расположены в подкаталогах. Например, ip/ping. Что это значит? Что выполняемый файл лежит в /bin/ip/ping;

- Посмотреть свой ip адрес: cat /net/ndb;

- Используйте walk | grep как аналог find;

- Скачать что-то (man hget);

- Смотреть pdf или картинки (man page);

- Браузеры: mothra, abaco (довольно падучий), можно собрать netsurf. Об этом будет другая статья;

- Для переключения раскладки можно запустить: kbmap /sys/lib/kbmap/us /sys/lib/kbmap/ru и переключать мышкой. Чтобы сделать переключение с клавиатуры, можно немного поменять rio, об этом -- в другой раз;

- Копировать каталоги здесь можно с помощью dircp, cp -R -- нет;

- fshalt -r -- перезагрузка;

- fshalt -- выключение;

- В домашнем каталоге есть bin/rc каталог. Здесь можете писать свои скрипты и они будут доступны для запуска. На самом деле, реализовано это за счёт bind. Сейчас поясню...

# Bind

В домашнем каталоге, lib/profile есть файл - который можно назвать аналогом .profile. Сделайте его cat и посмотрите. Видите?

bind -a $home/bin/rc /bin

bind позволяет делать объединение файловых систем. -a -- добавить файловую систему после. В данном случае, мы добавили bin/rc в пространство /bin. Короче, все наши скрипты из bin/rc видны в /bin. (man bind)

Следующая строка, заметьте, использует $cputype. Дело в том, что кросскомпиляция есть из коробки, и есть разные компиляторы (man 6c). И разные каталоги для бинарников для разных архитектур.

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

Поэтому в profile стартует webfs (это реалиазция http протоколов в виде файловой системы -- ну потому что здесь _всё_ реализовано в виде файловой системы) -- тогда все процессы из rio (который тоже стартует из profile) смогут работать с вебом.

То, что пространство ФС персональное для каждого процесса имеет интересный практический плюс. Например, смонтировали вы флешку, чтобы отмонтировать её -- вам достаточно прибить окно. Ну или все окна, в которых вы её смонтировали. Хотя команда unmount тоже есть (обратите внимание, не umount, а unmount).

Из profile стартует графическая система rio с флагом -i riostart.

# riostart

Делаем cat /bin/riostart.

Это вот и есть стартовый скрипт rio. Можете кастомизировать под себя. Например, запустив kbmap с нужными параметрами (переключалка раскладки клавиатуры). Упс... Мы ещё не умеем редактировать файлы.

# Редактируем временную зону в acme

Давайте начнём учиться редактировать с того, что выставим нормальную временную зону. Дело в том, что в 9front нет Российских временных зон из коробки. Но это не беда. Ведь всё есть файл!

Пишем:

acme /adm/timezone/local

Открылся редактор acme. В нём -- ваша текущая временная зона. На самом деле acme это не только редактор, это среда. Что-то вроде emacs в Plan 9. Детище Роба Пайка, который, наверняка, писал golang именно в нём. Но только это KISS emacs. :) Я не способен сейчас научить вас работать в acme (тем более, что я сам только учусь), но кратко опишу его принципы.

В acme мы имеем что-то вроде тайлового оконного менеджера. Можем создавать столбцы (3-кнопка на Newcol) и делить их на части (3-кнопка на New).

В acme тоже "всё есть текст". Это значит, что вы можете редактировать зону меню так же, как и текст. Пока не делайте этого, просто не пугайтесь если вдруг сотрёте кнопку Newcol. Просто напишите её там, где вам удобно. :)

Например, добавьте в зоне меню команду win. Просто текст win. 3-кнопкой нажмите на win и запустите "терминальное" окно внутри acme. Другие полезные команды смотрите в man acme. Вы можете писать скрипты, которые будут командами. Скрипты могут выводить текст и потреблять текст из редакторы. Таким образом, можно сделать, например, команду indent параграфа. Кроме того, acme поддерживает файловую систему (да-да, как и всё тут!), с помощью которой можно управлять редактором. Так что в acme можно читать почту и делать что-то ещё, что вам понадобится, просто дописывая нужную вам функциональность.

Поиск делается дописыванием текста после меню | Look, выделением этого текста и 3-кнопка. Так же можно просто выделять текст и жать 2-кнопку.

Открыть файл по номеру строки: добавьте к имени файла в меню :число, выберете всё это и нажмите 2-кнопку.

Режим авто-отступа есть. Он включается Indent on (да, да - допишите это в меню и выполните).

Итак, у вас открыт редактор на файле local. Надо стереть содержимое файла. Стрелочки? СТРЕЛОЧКИ СКРОЛЛЯТ ТЕКСТ! shift-стрелочки? Нет! Выделяем текст мышкой и нажимаем backspace!

Да, настал момент суровой правды. Вы не можете перемещаться по строкам с помощью стрелок курсора даже в текстовом редакторе! Так что или бегите (пока можете), или -- продолжим.

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

Да! Подсветки синтаксиса нет. Робу не нравится смотреть на код, как на новогоднюю ёлку.

Итак, вернёмся к временной зоне. Для московского времени я оставил одну строку:

MSK 10800 MSK 10800

Это временная зона GMT+3 (в секундах). Зимнее и летнее время.

Сохраняем файл. Ах, да... 3-я кнопка мыши по Put. Если Put пропал - вы сохранили файл. Выйдете из редактора самостоятельно.

Но это ещё не всё! Если у вас в BIOS время настроено в UTC, то надо сделать следующее:

acme /rc/bin/termrc.local

Впишите строку:

TIMESYNCARGS=(-ra1000000)

И сохраните. Ну или вы могли бы убрать параметр L из TIMESYNCARGS в файле /bin/termrc в самом начале, но это хуже. /bin/termrc запускает termrc.local.

/bin/termrc - это скрипт, который стартует вашу терминальную станцию.

# Немного об архитектуре

То, что вы поставили себе в qemu (или на ноутбук?), в терминах Plan 9 называется терминальной станцией. Дело в том, что Plan 9 это сетевая система, где предусмотрены разные типы станций: терминал, файловый сервер, cpu-сервер итд. Границы между ними стёрты с помощью сетевой файловой системы 9p. Теорию почитайте тут: http://doc.cat-v.org/plan_9/4th_edition/papers/ А в 9front вы получаете как бы всё в одном: терминальная станция, файловый сервер и т.д. Но в теории, это всё можно настроить на отдельных машинах. И именно так Plan-9 использовалась в Bell-Labs.

# Файловая система

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

"Файловая система" тут тоже реализована как служба-процесс. К которому можно подсоединиться и что-то сделать. Например, подключение к консоли:

con -C /srv/cwfs.ctl
help

Можете проверить fscache командой check.

CWFS это на самом деле интересная файловая система. Точнее -- файловый сервер. Он состоит как бы из двух областей. Есть fscache - в котором и идёт постоянная работа. И есть fsworm (Write Once Read Many) - это место куда архивируются данные и никогда не стираются. То-есть, когда-то ночью грязные блоки fscache сбрасываются в fsworm. Потом снова работаем с fscache. Сброс грязных блоков - это команда dump. Вы можете выполнять её руками через консоль: con -C /srv/cwfs.ctl, тем самым вы освобождаете место в кеше!

fsworm позволяет посмотреть любой слепок из тех, когда были сделаны dump. Смонтировать их можно так:

9fs dump

> Не выключайте питание во время дампа!

По началу я никак не мог понять, почему у меня кончается место на диске! Оказывается, забивался сравнительно небольшой fscache. Надо было бы сдампить его в fsworm. Конечно, cwfs на нетбуке это немного странно. :) Что я буду делать, когда забью fsworm? Вероятно, пересоздам его заново, скопировав последнее состояние в fscache?

# Редактирование plan9.ini

После первой установки, скорее всего вам понадобится поменять что-то в параметрах загрузчика. (man plan9.ini) Например, выставить более комфортное разрешение vesa. Включить acpi, поменять тип мыши и др.

Для этого надо подмонтировать специальный fat раздел:

9fs 9fat
acme /n/9fat/plan9.ini

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

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

# Доступ к файловой системе по сети из Linux

acme $home/bin/rc/export
Содержимое файла:
#!/bin/rc
aux/listen1 -t 'tcp!*!564' /bin/exportfs -r /

Запустите скрипт в окне и монтируйте с Linux:

9pfuse <адрес>:564 <точка монтирования>

Исходники системы находятся в /sys/src/ :)

# Заключение

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

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

Примерный план статей такой:

- Собираем netsurf и irc (git, hg, порты, golang);
- Изменяем исходные коды системы (смена раскладки клавиатуры);
- Музыка (и видео???);
- Мои патчи: ethernet alc, ethernet athn, acpi, vgadb;
- Сравнение исходного кода ядер: openbsd, Linux, plan9.

Если что, пишите свои предложения/вопросы.



P.S. Edited: 2020-10-11 10:28:47

# Синдром IT-вахтёрства
std.hugeping
hugeping(ping,1) — All
2020-10-06 09:53:41


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

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

Я создал заявку на решение проблемы и стал ждать. Кстати, в школе, похоже, считали, что мы просто не умеем создать аккаунт школьника или ленивые. Время шло, а ситуация нагнеталась, так как сын не мог делать Д3. Тогда я вооружился отладчиком FF и начал изучать API ЭЖД...

За вечер удалось выяснить следующее:

- Авторизация по токену проходит;
- После авторизации сервер возвращает _список_ профилей. Профиль - это описание учебного заведения и другие атрибуты. При этом профили привязываются к одному пользователю (uid);
- Возвращается список из 2-х профилей: 1-й -- старая школа, 2-й -- новая.
- Клиент пытается зайти в 1-й профиль и получает "отбой" (профиль неактивный?) в виде ошибки, которая проявляется как перенаправление на главную страницу.

Почти сразу, как я это понял, удалось заменить в cookies идентификатор профиля и мы зашли в дневник! Но работало не всё: новая версия дневника показывала пустоту.

Я снова обратился в поддержку, описал ситуацию, продиктовал номера профилей. Со мной обещали связаться.

И тогда, на следующее утро наступил второй этап.

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

Самое сложное -- подменить ответ. Удивительно, но ни FF ни Chrome не предоставляют простых (или вообще никаких?) путей сделать такое. Поэтому воспользовался таким вот проектом: https://mitmproxy.org/

В нём есть режим, замена ответа с помощью регулярки. А дальше, дело техники. Положил в систему корневой сертификат, настроил в FF auto proxy (чтобы работал только на dnevnik.mos.ru) и... Работает как часы. ;)

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

И тут приходит ответ на заявку. Та-дааам!

> "Для восстановления доступа к дневнику нужно сменить пароль..." !!!!???

Конечно же, я пытался менять пароль. Но проблема не в этом! Я же описал, что именно происходит? Похоже, вахтёр, закрывший ошибку _даже не прочитал_ репорт!

Позвонил снова, в этот раз уже откровенно орал. Объяснил снова ещё раз, попросил переоткрыть и повысить приоритет задачи. Через 3 дня пришёл ответ, что всё -- исправили!

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

Так вот, в момент первой "отписки" я в полной мере почувствовал силу IT-вахтёрства.

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

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

Я уже молчу про то, что самые важные ресурсы: сайты госуслуг и банки -- перегружены js так, что он уже просто вытекает из щелей разметки.

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

# Re: Пишу ноду ii/idec на go
idec.talks
hugeping(ping,1) — Peter
2020-09-26 12:05:55


Там от меня ушли 7 сообщений из черновиков/неотправленных? мобильного клиента... Нужно их блеклистить:

ii://2NszlFTgvhakzz7dIfvc
ii://Q03NcPZRuqeaOT5d6Tze
ii://v48ZAPJMiFbWl68YiFWU
ii://5JdRzlDtEJTfOtKCtTb4
ii://pEtdZQ4aPz7SAhFK3zwR
ii://SglNQOG3vyujcZLXjDtu
ii://flYuqUgR5SVgybdnYnVp

Извините. :)

# Re: Фантастические консоли и где они обитают
develop.16
hugeping(ping,1) — johnbrown
2020-09-26 08:49:01


Если мне захочется "живого" железа, я скорее всего выберу спектрум. В детстве я программировал на БК0010-01, а вокруг были спектрумы. Поэтому, интересно. :) Даже читал книгу по железу спека не так давно. Но реально, не уверен что руки дойдут. Много всего. :) Сейчас вот Plan-9 увлёкся.

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

# Битые текстуры на AMD Radeon Vega
linux.14
hugeping(ping,1) — All
2020-09-24 07:21:16


Купил в начале карантина два ноута: Acer Apire 3. И надо сказать, очень доволен (дёшево и эффективно). Но на ноуте частенько в 3d приложениях наблюдал битые текстуры. Не сказать, что критично, но -- напрягало. Быстрый поиск ничего не давал. Но в итоге, всё-таки нашлось:

# Переменная окружения
AMD_DEBUG=nodmacopyimage

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

P.S. Следующие компы буду брать на AMD.

# Re: Вернуться в детство с PICO-8
std.hugeping
hugeping(ping,1) — boscholeg
2020-09-23 10:06:42


> Сейчас очередь за чем? Будет пико или инстед игрушка?

Хочется написать на метапарсере.

# Re: Вернуться в детство с PICO-8
std.hugeping
hugeping(ping,1) — johnbrown
2020-09-22 16:04:26


> Спасибо за АА. Эта штука украла 2 часа моей жизни. Но, это были приятные два часы, полные взлетов и падений )

Тогда вторую мою игру зацени: https://instead.itch.io/rr

> Недавно открыл для себя фэнтези консоли. Пока присматриваюсь к TIC и ESP LGE. Битси уже в деле )

Круто! TIC тоже смотрел. Решил чередовать: INSTEAD->PICO8->INSTEAD... ;)

# Re: Unicode строки в Instead
std.prog
hugeping(ping,1) — Frost
2020-09-22 15:00:55


> print(std.game.codepage)

Конечно, так не сработает, в этот момент game ещё нет. Но в моём коде std.game проверяется внутри функции, запуск которой предполагается в момент, когда игра уже запущена. Например, в start() и позже...

# Re: Unicode строки в Instead
std.prog
hugeping(ping,1) — Frost
2020-09-22 14:36:39


> выяснилось, что std.game приводит к ошибке. Мне пришлось удалить фрагмент

Файл с игрой называется main3.lua или main.lua? Нужно, чтобы было main3.lua -- это новое INSTEAD API, старое API больше не поддерживается.

> Файл с кодом игры ведь обязан быть в кодировке UTF-8 (разве не так?). Зачем тогда эта проверка?

Формально, не обязан. Дело в том, что до сих пор есть поддержка разных кодировок, но по факту -- никто кроме utf-8 ничего не использует. И это хорошо.

# Re: Unicode строки в Instead
std.prog
hugeping(ping,1) — Frost
2020-09-22 13:34:27


> Спасибо. Я благодарен за уделенное внимание моему вопросу. Однако на текущем этапе мне сложно разбираться в коде метапарсера.

Так там были готовые функции. Просто скопировать в свою игру.

local function utf_ff(b, pos)
	if type(b) ~= 'string' or b:len() == 0 then
		return 0
	end
	local utf8 = (std.game.codepage == 'UTF-8' or std.game.codepage == 'utf-8')
	if not utf8 then return 1 end
	local i = pos or 1
	local l = 0
	if b:byte(i) < 0x80 then
		return 1
	end
	i = i + 1
	l = l + 1
	while b:byte(i) and b:byte(i) >= 0x80 and b:byte(i) <= 0xbf do
		i = i + 1
		l = l + 1
		if i > b:len() then
			break
		end
	end
	return l
end

local function utf_chars(b)
	local i = 1
	local s
	local res = {}
	local ff = std.rawget(_G, 'utf8_next') or utf_ff
	while i <= b:len() do
		s = i
		i = i + ff(b, i)
		table.insert(res,  b:sub(s, i - 1))
	end
	return res
end

Вот это реализация utf_chars, которая сделает массив с литерами из строки:

local a = utf_chars("привет")

Мне просто неизвестно, какие функции нужны.

> Вытекающий вопрос: можно ли перевести Instead на работу с LUA версии 5.3, в которой есть встроенная поддержка Юникода?

ИНСТЕД и так работает (может быть собран) с Lua от 5.1 до 5.4. Но если нужно, чтобы игра работала на всех видах установок (не только на собственной версии), нужно пользоваться 5.1. В основном это связано с тем, что бинарные сборки используют LuaJit, который 5.1 (с расширениями).

# Re: Малинка, как домашний веб сервер
pipe.2032
hugeping(ping,1) — boscholeg
2020-09-22 11:18:09


> Петр расскажи насколько равномерно корпус прогревается?
> Пробовал измерять температуру в разных частях корпуса?

Температуру смотрел только такими командами:

$ cat /sys/class/thermal/thermal_zone0/temp
$ vcgencmd measure_temp

На ощупь, верхняя часть нагрета равномерно.

> GUI и прочие десктопы ты на малинке поднял? Или работаешь через терминал?

Ничего, кроме ботов, ssh и ii-go не кручу там. Первый раз запускал графику, но потом сразу снёс. Возможно, буду экспериментировать с 9front, но не сейчас.

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

Да, правда мне по ошибке привезли корпус, в который можно ставить вентиляторы (идут в комплекте). Из-за этого, там не везде есть рёбра. Но, похоже, это не так уж и важно. Сейчас t == 39C :) Летом будет повыше, наверное.

# Re: UTF8 строки в Instead
std.prog
hugeping(ping,1) — Frost
2020-09-21 19:03:05


> Приветствую, друзья. Подскажите пожалуйста как можно работать с кириллицей в Instead. Я имею ввиду функции len; sub и другие, работающие с однобайтовой кодировкой символов.

Привет!

На самом деле, в метапарсере есть такой код. Он написан на Lua. Но, в последней версии INSTEAD есть и C реализация, которая помогает этому Lua коду.

Наверное, проще всего посмотреть как это сделано в МП. Даю наводку: https://github.com/instead-hub/metaparser/blob/master/parser/mp.lua#L87

Функция, которая из строки делает массив литер.

Рядом есть более примитивные функции: utf_len, utf_char, utf_ff и utf_bb.

А вот как определяется, какую из реализаций брать -- на Lua или на C. Чтобы работало и со старым и с новым INSTEAD:

utf = {
    bb = std.rawget(_G, 'utf8_prev') or utf_bb;
    ff = std.rawget(_G, 'utf8_next') or utf_ff;
    len = std.rawget(_G, 'utf8_len') or utf_len;
    char = std.rawget(_G, 'utf8_char') or utf_char;
};

Прототипы функций если надо я могу вспомнить, но наверное есть смысл сначала посмотреть код, может быть там и так всё будет понятно. Навскидку:

utf_len, очевидно, возвращает число литер;
utf_char(строка, номер) - возвращает литеру по позиции;
utf_ff(строка, смещение) - возвращает смещение следующей литеры;
utf_bb(строка, смещение конца) - возвращает смещение предыдущей литеры;

# Re: Вернуться в детство с PICO-8
std.hugeping
hugeping(ping,1) — johnbrown
2020-09-20 13:39:58


Про bitsy знаю, иногда смотрю игры на нём. Правда это уже скорее специализированный движок. Да и только в вебе работающий.

Ещё есть такое понятие "flat games". Тоже любопытное явление. Можно на itch поискать. Артхаус как он есть.:)

# Re: Малинка, как домашний веб сервер
pipe.2032
hugeping(ping,1) — johnbrown
2020-09-19 22:48:19


> Слабая, знаю, но надеялся, что греться хотя бы будет меньше.

Кстати, тоже думал о 3й. Боялся перегревов, а мощность мне не так уж и нужна. Но рискнул. 40C обычно температура, что очень неплохо. Правда, я корпус взял зверский-алюминевый. Как радиатор действует. Вообще, очень рад. Правда, народ пугает выходом из строя sd карт... Ну, посмотрим...

# Re: Обновления ii-go (движка узла ping)
ping.local
hugeping(ping,1) — johnbrown
2020-09-19 22:40:18


> Может стоит сделать редирект с syscall на https?

Я хочу, чтобы узел был доступен и через http. Хотя, наверное, можно сделать редирект только для syscall и не делать для http://hugeping.tk Но, кажется, это только все запутает.

# Re: Пишу ноду ii/idec на go
idec.talks
hugeping(ping,1) — Peter
2020-09-18 08:16:08


Меня убедили начать комментировать код. :)

Так что постепенно буду это делать. На данный момент описал функции в msg.go -- это базовые функции для манипуляции бандлами (decode/encode) и приём сообщений от поинтов.

https://github.com/gl00my/ii-go/blob/master/ii/msg.go

# HP Ink Tank Wireless 410 series
linux.14
hugeping(ping,1) — All
2020-09-17 06:32:53


Купил тут МФУ. Специально брал с WiFi, чтобы можно было ставить куда угодно.

Поставил, подключил по USB, включил. Запускаю hp-wificonfig и... Пишет: нет поддерживаемых принтеров.

Ну, начал отлаживаться. К счастью, написано на питоне.

В общем, вот решение:

Файл: /usr/share/hplip/data/models
Ищем строку: model1=HP Ink Tank Wireless 410
После неё ищем wifi-config=0 и меняем строчку на wifi-config=3

Теперь hp-wificonfig увидит принтер и можно будет подключить его к домашней WIFI сети.

P.S. Пишу это сообщение, так как после обновления пакета hplip потерял это изменение и разбирался повторно. :)

# Ненастоящая победа open source
std.hugeping
hugeping(ping,1) — All
2020-09-16 19:25:59


Сегодня кажется, что open source победил окончательно и бесповоротно. Компании вкладываются в разработку ядра Linux, браузера chrome, компиляторов clang и многих других сложных проектов.

clang разрабатывается с целью замены gcc. chrome -- браузер, который постепенно вытесняет firefox. Docker, gitlab, VS Code -- можно долго перечислять успешные проекты, которые созданы коммерческими компаниями и развиваются как проекты с открытым исходным кодом.

Когда-то я тоже радовался chromium, clang и другим новым классным проектам. Я видел, что их качество действительно лучше, что старичок GNU всё возится с ворохом устаревших технологий, тщетно пытаясь догнать уходящий поезд прогресса. Да он же просто смешон!

Но потом я стал кое-что подозревать...

Да, есть целый пласт проектов, которые сложно создать в режиме "базара". Компьютерные игры, работа с графикой, CAD, офисные приложения... Как пример можно привести Photoshop и gimp. Или программы видеомонтажа. Чтобы удовлетворять стандартам рынка, такие программы сами должны создаваться участниками этого рынка. Но... Представьте себе, что все компании обанкротились. И что останется?

Что будет делать сообщество с многомиллионным кодом Chrome? Сможет ли оно его развивать? Сможет ли самоорганизоваться в сообщество, способное переварить этого монстра, который уже переплюнул по своей сложности ядро ОС? Сможет ли оно самостоятельно осознать и поддерживать такие проекты как: Clang, QT, VS Code?

Ок, VS Code кажется проектом попроще, не так ли? Но на чём написан VSCode? Сможет ли сообщество сохранить инфраструктуру, которая нужна для функцилнирования такого "простого" на вид VSCode?

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

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

И здесь я снова смотрю на GNU, которая берёт на себя то, что может поднять. Да, gimp это не фотошоп. Но этот проект принадлежит нам! Да, clang, возможно современней GCC. Но GCC принадлежит нам!

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

Раньше, чтобы написать новую ОС, нужно было решить основную проблему -- поддержку оборудования. Сегодня такой краеугольной проблемой является... возможность работы современного браузера! Для проектов типа 9front http://9front.org -- это нереализуемо, если говорить о Firefox или Chrome. Но вот заставить работать NetSurf - вполне по силам одному программисту, работающему над проектом по вечерам.

И тут я задаю неудобный вопрос. А Linux-то, linux ещё наш? Или он уже стал товаром, которым торгуют корпорации?

# Блокировка Yandex рекламы
std.favorites
hugeping(ping,1) — hugeping
2020-09-15 10:21:56

# Лайфхаки
std.favorites
hugeping(ping,1) — All
2020-09-15 10:21:09


Сюда планирую собирать решения каких-то технических проблем (в основном, Linux/Unix).

# Emacs 27.1: проблема с кодировкой в gnus
linux.14
hugeping(ping,1) — All
2020-09-15 08:10:09


Решил написать сюда, чтобы не потерять.

Несколько лет пользуюсь gnus. И тут, после последнего обновления emacs, часть писем у меня стала отображаться в битой кодировке. В теле письма всё ок, стоит utf-8.

Я уже не помню, как именно удалось локализовать проблему (скорее всего просто трейсил и менял куски gnus на старый gnus из 26 emacs), но вот "волшебная строчка", которая помогла:

(setq nnheader-file-coding-system 'raw-text)

# Re: Что с станцией lessmore?
idec.talks
hugeping(ping,1) — Difrex
2020-09-14 21:34:38


Сделал исправление тоже, поставил на тебя фетч (blog.difrex). Ожидаю взаимного фетча. ;)

# Re: Что с станцией lessmore?
idec.talks
hugeping(ping,1) — Difrex
2020-09-14 20:21:52


> У меня тоже. Но это все таки данные не совсем для человека.

Ну как, curl можно автоматизировать. Я так и делал, когда переносил данные с ноды, генерировал скриптом запросы, парсил вывод. Удобнее с \n это делать.

> Ты же не будешь править тело сообщения поинта если оно пришло без \n в конце, а просто запишешь в базу.

Лучше я промолчу о том, что я делаю с сообщением поинта, а то вы меня тут заклюёте =)

> // Newline в конце добавлю, но фетчер у меня умеет и так и так.

Угу, отпишись тогда, я от тебя хочу взять fetch difrex.blog (ну и назад забирай тогда её у меня =)

# Re: Что с станцией lessmore?
idec.talks
hugeping(ping,1) — Difrex
2020-09-14 14:28:11


> Т.е. я считаю, что "\n" - это разделитель списка и если в конец вносить его, то получится, что последний элемент списка - это всегда пустая строка.

Мой довод, в основном, будет таким.

В UNIX все текстовые файлы традиционно заканчиваются на \n.

https://stackoverflow.com/questions/729692/why-should-text-files-end-with-a-newline

Стандарт POSIX определяет строку так:

> 3.206 Line
> A sequence of zero or more non- <newline> characters plus a terminating <newline> character.

Зафиксируем это и не ошибёмся. :)

# Игра R01
std.game
hugeping(ping,1) — All
2020-09-14 10:58:13


Прошёл игру-миниатюру R01 от Andrew Lobanov, которую он написал на Паровозик.

Сама игра здесь: http://instead-games.ru/game.php?ID=349

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

Конечно, в рецепты я не верю, но у игры Андрея есть ворох качеств, которые очень характерны для определённого типа игр, которые мне по душе.



# Музыка.

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

# Сказка

Да! Это сказка! Событий много, с лёгкой руки автора они сыпятся и сыпятся. Правдоподобность? Реализм? Это всё вообще не колышет. Вы ещё спросите, как летают X-wing в атмосфере с такими кабинами (фонарями, на жаргоне пилотов) и антеннами. Или почему в космосе слышны звуки. Это сказка! Как сказка и воспринимается! Очень люблю такой вот формат.

Часто меня упрекали за "картонность" персонажей в Коте. Тут тоже, персонажи выписаны кратко и картонно, что совершенно уместно в сказке. Зато мы имеем череду событий и сцен, которые не дают нам скучать.

# Плотность предметов на сцену

Часто замечаю (да и за собой тоже), как авторы злоупотребляют количеством объектов на сцене. Да, INSTEAD может и провоцирует это, но чувство меры и здравого смысла должно сдерживать автора. Когда на сцене у нас больше 3-5 ссылок-объектов или 3-4 переходов, становится сложно воспринимать игру.

Мне нравится, когда повествование "размазано" по локациям. Ходить интересно! Исследовать пространства - интересно! Это же адвенчура! И в R01 есть это чувство меры.

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

# Чего не хватает?

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

Пару миниатюрных иллюстраций украсило бы игру ещё больше. Может быть как раз одна/две картинки на финальных сценах игры/титрах.

P.S. Автор, пиши ещё!

# Re: Что с станцией lessmore?
idec.talks
hugeping(ping,1) — Difrex
2020-09-14 10:11:34


> А почему так? Я код не хочу ща читать - лень, но ты разве не разбираешь ответ в слайс? Типа,

Почему так, вопрос, который я тоже могу задать: "Разве ты не делаешь просто Printf каждого из id? Зачем вырезать последний \n?

Дело в том, что я старался писать строго. Строка с переводом строки - это однозаначность. Например, пустая строка - это тоже пустая строка и \n.

В системе, когда у нас последняя строка не содержит \n, мы не можем отличить ситуацию, прочиталась ли строка целиком?

Например, вот функция, которая используется везде при работе с сетью:

func http_req_lines(url string, fn func(string) bool) error {
	resp, err := http.Get(url)
	if err != nil {
		return err
	}
	defer resp.Body.Close()
	reader := bufio.NewReader(resp.Body)
	for {
		line, err := reader.ReadString('\n')
		if err != nil && err != io.EOF {
			return err
		}
		line = strings.TrimSuffix(line, "\n")
		if err == io.EOF {
			break
		}
		if !fn(line) {
			break
		}
	}
	return nil
}

Обрати внимание, что if err === io.EOF стоит ПЕРЕД fn(line).

А вот правка, чтоб сработало с твоей нодой:

                if err == io.EOF {

			if line != "" { /* no eol in last line? broken node? */
				fn(line)
			}
                        break
                 }

Если же я перенесу fn(line) перед err == io.EOF, то fn(line) будет вызываться для последнего \n у других нод, которые делают \n в каждой строке.

Я лично считаю, что \n быть должен, но в как бы мы не решили, это должно быть прописано в стандарте, кмк.

# Re: Что с станцией lessmore?
idec.talks
hugeping(ping,1) — Difrex
2020-09-14 07:40:15


> Хм, вот про newline в конце интересно. Это у нас нигде не описано, но и проблем ни у кого не возникало

Нужно решение комитета. )
Мне не сложно подправить, но это именно будет хак. Дополнительный блок условный. Заметил только благодаря адаптивному фетчу, который делает пробы по 1 id. Так бы просто последнее сообщение бы не взял и всё.

# Re: Что с станцией lessmore?
idec.talks
hugeping(ping,1) — Difrex
2020-09-13 21:53:55


> Fixed
Теперь есть другая проблема. Возможно, с моим фетчером.
В выводе у тебя нет последнего перевода строки. То-есть, на запрос -1:1, к примеру, приходит MsgId без \n. Как к этому относиться? Нужно ли мне переделывать?

# Plan9 Desktop Guide
std.hugeping
hugeping(ping,1) — hugeping
2020-09-13 20:32:27


Похоже, интересная статья. Оставлю для ознакомления.

https://pspodcasting.net/dan/blog/2019/plan9_desktop.html

# Re: Пишу ноду ii/idec на go
idec.talks
hugeping(ping,1) — hugeping
2020-09-13 18:03:07


Достаточно ли замены:

msg = strings.Replace(msg, "-", "+", -1) /* if it is URL base64 */
msg = strings.Replace(msg, "_", "/", -1) /* make it base64 */

И потом декодировать стандартным base64? Но там вроде еще есть заполнение в виде ===?

# Re: Пишу ноду ii/idec на go
idec.talks
hugeping(ping,1) — vit01
2020-09-13 17:26:04


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

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

Можно рассказать алгоритм?

# Re: Пишу ноду ii/idec на go
idec.talks
hugeping(ping,1) — vit01
2020-09-13 15:48:57


>> Примечание: production-реализации нод заменяют в полученной base64-строке плюс (+) и слэш (/) либо их аналоги (- и _) на буквы "A" и "Z" соответственно, дабы убрать из msgid спецсимволы.

Это про msgid речь же. А вопрос вроде касался того, в каком формате поинт шлёт бандл на ноду (POST или GET, не важно). И в каком формате отдают/получают бандлы ноды.

В стандарте есть такая фраза: (все серверы обязаны принимать как обычный, так и urlsafe-словарь, генерируются же бандлы в формате обычного base64)

Для меня эта фраза непонятна. Бандлы вроде в обычном base64, но принимать я должен в любом? Надо детектить тип base?

Я так и не понял, в каком варианте base64 я должен принимать и отдавать бандлы нодам и принимать бандлы от юзера. В итоге имеем такие варианты:

Мой:
1) Я принимаю и отдаю нодам бандлы в обычном base64 (не считая msgid, который подвергается преобразованию описанному в стандарте)

2) принимаю post/get запросы от поинтов в urlsafe base64

И вроде это работает, по крайней мере со станцией Андрея.

difrex:

1) принимает от поинтов обычный base64 но предварительно заэскейпченный

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

# Re: Пётр шевелит секту
pipe.2032
hugeping(ping,1) — Andrew Lobanov
2020-09-13 08:03:01


> Этак скоро скрипт статистики снова будет иметь смысл :)

Наверное надо где-нибудь писать про idec, все-таки. Думаю все присутствующие узнали про ii из постов на лор или чего-то подобного? Ну или организовывать тематические сообщества: инстед, план9 итд.

С другой стороны, у меня лично цели нет "набрать поинтов".

# Re: Переезд состоялся
std.hugeping
hugeping(ping,1) — artur
2020-09-12 20:30:35


> Понял-принял. Ну тогда уж надо будет поделиться здесь своими пиксельными поделищами=)

Только просьба, не в этой эхе (std.hugeping), потому что здесь мой блог. :)

# Re: Переезд состоялся
std.hugeping
hugeping(ping,1) — artur
2020-09-12 20:25:02


> Вопрос на счёт картинок с постов. В Гимпе рисовано?=)

Потому что я уменьшаю разрешение до 32x32 и режу количество цветов. Тогда картинка xpm смотрится нормально и в тексте сообщения. А так, это просто пиксельарт из интернетов.

# Re: Пишу ноду ii/idec на go
idec.talks
hugeping(ping,1) — vit01
2020-09-12 20:22:00


> Предлагаю прописать font-family: sans-serif в body-блок CSS-ки. Это сработает на всех платформах, и разница станет заметна невооружённым глазом. Попробуй хотя бы ради эксперимента

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

# Что с станцией lessmore?
idec.talks
hugeping(ping,1) — All
2020-09-12 18:55:16


Хотел было забрать блог difrex, но:

$ curl https://dynamic.lessmore.pw/idec/u/e/difrex.blog
difrex.blog
error: Internal error

# ZeroNet приложение для Android
std.hugeping
hugeping(ping,1) — hugeping
2020-09-12 18:37:00


Оказывается, за то время, что я не следил за ZeroNet, в PlayMarket появилось новое приложение. Выглядит оно получше и поудобнее. Что косвенно подтверждается оценкой приложения.

Так что относительно комфортно можно пользоваться ZN и с мобильных устройств.

Мой блог в ZN: http://127.0.0.1:43110/1HVhvrompfwLstJExofKAQ5mMss7YivVDj/

Правда, теперь там будут скорее всего только репосты с узла ping.

# Re: Пишу ноду ii/idec на go
idec.talks
hugeping(ping,1) — vit01
2020-09-12 17:48:04


> С base64, спойлерами и остальным возитесь пока сами

Так это относится только к Web части. С этим возятся поинты моей ноды.

> 1. Нужно всё-таки объединять усилия .... Кому-то из вас двоих нужно от своей репы отказаться и идти мержить код в общий котёл

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

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

Шрифты вообще не заданы нигде. Никакие. Так что используется тот шрифт, что стоит у тебя в настройках. :)

P.S. Edited: 2020-09-12 17:48:59

# Баги при редактировании и очистке базы
ping.local
hugeping(ping,1) — hugeping
2020-09-12 12:45:48


Пофиксил довольно серъёзные баги с редактированными сообщениями (менялась дата и порядок) и в процедуре clean.

Теперь должно быть всё ок.

# День программиста
std.hugeping
hugeping(ping,1) — hugeping
2020-09-12 11:30:11


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

Сегодня снова стало интересно, в чём тут дело?

Я помню, когда он только появился, я воспринял его как нелепость. И тоже не смог понять, почему? Просто какое-то странное чувство нелепости.

Наверное, я не воспринимаю день программиста как "профессиональный праздник". А именно так его и преподносят.

Я не воспринимал никогда себя как программиста в смысле профессии, ремесла. Я всегда только играл. С того самого момента, когда отец купил мне БК0010-01 и до сегодняшнего дня. И назвать это профессией для меня выглядит странным и нелепым. Что-то бытовое, скучное...

Нет, это не мой праздник.

# Re: Информационные следы или отцы и дети в кибернетической утопии
std.hugeping
hugeping(ping,1) — hugeping
2020-09-12 11:07:27


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

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

Наглядный пример противопоставления философия vs реальная жизнь. :)

# Как писать свободные игры и не сойти с ума
std.hugeping
hugeping(ping,1) — All
2020-09-12 10:35:15


// Опубликовано Aug 24, 2018

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

Поэтому я очень хорошо понимаю программистов, которые пишут игровой код для “души”. Проект INSTEAD и возник как реализация такой вот отдушины. В первую очередь он ориентировался на программистов — лириков.

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

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

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

К сожалению, “сарафанное радио” в наши дни практически не работает, поэтому “свободному” разработчику очень сложно выйти на свою аудиторию.

Свои последние игры Другой Марс http://instead-games.ru/game.php?ID=298 и Вахта http://instead-games.ru/game.php?ID=292 я пытался “продвигать” доступными мне способами, оставаясь в рамках свободного движения. Что именно я делал?

- Я попытался оживить нашу группу vk, https://vk.com/instead.club создавая на стене новости и отчёты о проделанной работе. Также включил кросспостинг в фейсбук.
- Я публиковал новость о “Вахте” в одной из крупных групп vk (название сейчас не вспомню).
- Наш старый jabber чат был интегрирован с чатом в Telegram, https://t.me/insteadtalk что в теории сделало наш чат доступней для потенциальных энтузиастов.
- В канал Telegram https://t.me/insteadclub (не путать с чатом) я также регулярно постил новости. Не говоря уже о своём twitter. https://twitter.com/peter_ru
- Я опубликовал игры на gamin.me. Здесь https://gamin.me/posts/19471 и здесь. https://gamin.me/posts/19616
- Я создал страничку на itch.io со своими играми. https://instead.itch.io/
- Я опубликовал новости на linux.org.ru. Одна из новостей — прошла. https://www.linux.org.ru/news/games/14202683 Вторую https://www.linux.org.ru/forum/games/14385869 не пропустили из за деятельности троллей, превративших тему обсуждения в религиозный спор. Подробности. ii://mwVQifrW5SHpOBeJ9niI И пояснения. ii://lYZ4akEqAiKPfIZKs1gX Забавно, но похоже “чёрный” пиар дал лучший эффект. Это и грустно и смешно.
- Я опубликовал новость на opennet. https://www.opennet.ru/opennews/art.shtml?num=49078
- Я писал о некоторых своих играх на reddit (лень искать ссылки).
- Я опубликовал две статьи на dtf.ru. https://dtf.ru/indie/24627-moy-indi-proekt-dlinoy-v-10-let https://dtf.ru/indie/24598-parsernaya-igra-drugoy-mars
- Я присутствовал в mastodon https://mastodon.social/@hugeping , idec и zeronet (как примеры “альтернативных” сетей).

Какие выводы я могу сделать?

С одной стороны, результат есть. Я узнал, что у моих игр существует целевая аудитория. И это сильно вдохновило.

С другой стороны, количество поигравших в мои игры, по меркам индустрии, очень мало. Я оцениваю это число в районе 2000 скачек (учитывая тот факт, что статистика web запусков не ведётся). Хотя, откровенно говоря, мне не очень интересна именно статистика. :)

Выкладывание игр на itch — практически ничего не даёт само по себе. Причина понятна. Для продвижения нужны рекламные показы. Площадки не создаются просто так, площадки зарабатывают. Когда на ресурсе представлены тысячи (или уже десятки тысяч?) игр, заметить конкретную игру практически невозможно.

Публикации в своем твиттере и ресурсах в соц-сетях ничего не дают. Это тоже понятно, нет подписчиков — нет хайпа. Я пытался подсунуть твит мэтрам западной интерактивной литературы. Это частично получилось, но ретвит сам по себе тоже дал очень мало. Кое что даёт публикация ссылок на reddit.

Хороший отклик я получил после размещения публикаций на dtf.ru. Наверное, это самый положительный опыт из всех попыток.

Интересно, но адресный выход на аудиторию “альтернативных” сообществ тоже работает. Последнее наблюдение наводит на интересные размышления.

Когда ты пишешь нишевую с точки зрения “мейнстрима” вещь, выход на нишевые же сообщества, похоже, неплохой вариант! Например, INSTEAD изначально работал только на Linux системах. Какой процент пользователей Linux? 3%? 4%?. Но в абсолютных цифрах это довольно много людей. И, проект, работающий на Linux может рассчитывать быть замеченным этой аудиторией! Какой процент пользователей FreeBSD? 1%? Однако, когда INSTEAD находится в портах этой системы, можно рассчитывать на то, что игры на нём будут замечены! Всё это даёт во много раз больше, чем простая публикация игры на тематическом форуме.

Ещё один пример. Размещение статей в ZeroNet с мизерной аудиторией. Однако, размещение этих же статей в блоге на medium.com осталось абсолютно незамеченным.

Камерный театр в спальном районе Москвы может рассчитывать на маленькую, но свою аудиторию! Школьная рок-группа тоже может на неё рассчитывать. :) Остальные примеры вы можете придумать сами. Думаю, что продвижение свободной игры, это все-таки в первую очередь ориентация на “свои” сообщества. А игра по правилам индустрии — это совсем другая история. Но только проблема в том, что “альтернативные” сообщества практически вымыты из современного коммерческого интернета…

Что касается меня, то я абсолютно измотан социальным взаимодействием и негативным (редким, но токсичным!) фидбеком. В очередной раз я понимаю: программировать и сочинять истории очень захватывающая вещь, но социальное взаимодействие — изматывает и подрезает крылья.

Что дальше? Не знаю. Но запасы валерьянки подходят к концу. :)

# Возвращение квантового кота: о чём игра?
std.hugeping
hugeping(ping,1) — All
2020-09-12 10:27:52


// Опубликовано Aug 23, 2018

Моя первая игра называется “Возвращение квантового кота”. Написана она была в 2009 году. Собственно говоря, с неё всё и завертелось.

По современным меркам игра очень простенькая, но если вы в неё не играли — попробуйте. http://instead-games.ru/game.php?ID=107

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

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

Вообще, это неправильный метод — рассказывать о своём творчестве в плане замысла. Часто бывает, что смыслы очень сильно зависят от восприятия конкретного человека. То-есть, это всегда диалог. И тем не менее…

Главный герой — бывший хакер, ныне дауншифтер, живущий вдали от цивилизации. После визита в магазин, у него похищают его единственного друга — кота Барсика. Фраза: “Я просто пришёл забрать своего кота” — становится девизом игры. Быстро выясняется, что похититель кота связан со зловещим институтом, который расположен недалеко от места событий.

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

В игре можно почитать рассуждения о квантовых парадоксах. В частности, о гипотетическом эксперименте Шрёдингера.

Скажу сразу, что на эту игру повлияло произведение С.Льюиса “Мерзейшая мощь”. Если вы не читали её, я рекомендую эту книгу к прочтению. Образ “зловещего института” взят оттуда.

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

Главный герой просто “знает” и просто “чувствует” сердцем, что эта истина является ложью. Он делает то, что должен — спасает кота (и мир за одно) не идя ни на какие компромиссы. Правда и любовь не нуждается в рационализации.

В качестве интересных деталей, могу привести использование сторон света. Зло — ассоциируется с западными направлениями. Добро — с восточными. Восход, закат. День и ночь.

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

Игра была встречена очень хорошо, не смотря на явные огрехи и ляпы в тексте, которые так и не были исправлены за эти 9 лет…

На этом пока всё. :) Stay tuned.

# Нелинейность в сюжетных играх
std.hugeping
hugeping(ping,1) — All
2020-09-12 10:23:11


// Опубликовано Aug 23, 2018

Недавно посмотрел ролик на YouTube про игру No Man’s Sky. Красивая игра. Одной из особенностей игры является то, что в ней широко применяется процедурная генерация. Примерно, как это было сделано в Elite, в которой генерировались звёздные карты, названия систем и экономика. Только в NMS этот приём выведен на новый технологический уровень. Генерируются формы жизни, поверхности планет и прочее и прочее.

В Elite игрок был свободен в выборе того, что он делает в мире игры. В NMS мы видим подобное. Искусственный мир без явного задания ограничений действий. Песочница. Успех Minecraft говорит нам, что такого рода игры могут быть популярными. Ещё один пример: Dwarf Fortress. Если честно, ни в одну из упомянутых игр я не играл. Во-первых, я вообще мало играю в современные игры. Во-вторых, я не большой любитель историй, рассказанных компьютером.

Когда речь заходит о сюжетных играх, очень многие высказывают мнение, что нелинейность сюжета — несомненное достоинство такого рода игр. Для меня это выглядит так, что для этих людей основной ценностью сюжетной игры является вариативность.

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

Во-вторых, саму игру мы можем выполнить в виде модели, которая пытается моделировать поведение героев, мотивы, эмоции…

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

Дело в том, что для меня, в сюжетных играх (как и в литературе, кино, театре) самым важным является не вариативность, а … сюжет! А сюжет — это раскрытие смысла! Как время в нашем мире это актуализация нашей свободы воли, так и сюжет игры служит цели раскрытия смысла!

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

Я написал только одну нелинейную игру, это “Карантин”. http://instead-games.ru/game.php?ID=124 В игре мы встречаемся с врагом, которого не знаем заранее. Фактически, это детективная история завёрнутая в стилистику рассказа Джона В. Кэмпбелла «Кто идёт?». Игра внутри себя представляет симулятор. Или, скорее, стратегию. Игра получилась очень сложной и… скучной. Да, есть люди, которым игра очень понравилась. Но для большинства игроков, она становится неинтересной после нескольких “прогонов”. Почему? Потому, что сюжет раскрывается после пары прохождений. А потом остаётся только вариативность, стратегия, интеллект… Но никакой художественной ценности…

Правда, в моей игре “Проводник” http://instead-games.ru/game.php?ID=247 две концовки. Но это тот случай, когда обе концовки просто усиливают друг друга.

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

Так книга или игра? Попробуйте написать сюжет, смысл которого был бы не в вариативности самой по себе, а в передаче некоторого замысла автора. А теперь, оформите сюжет в виде сотни параграфов с запутанными связями. Это не так то просто! В большинстве случаев, такая разбивка будет служить целям вариативности, но не передачи смысла сюжета. Вариативность, ради неё самой. Итак, жанр книги-игры хорош для развлекательной литературы, но драматическое произведение втиснуть в рамки вариативности — очень непросто.

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

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

Да, попытка написать игру, в которой сюжет генерировался бы “случайно” и был бы интересен — сродни написанию симулятора мира, в котором мы живём.

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

Также, есть мнение, что смысл чего-либо рождается субъективно в читателе, а на авторе остаётся только нарратив. Без интерпретации. В таком случае, играя в песочнице, мы наблюдаем создание различных смыслов о которых мы как автор — не беспокоимся. Читатель (игрок) развлекает себя сам.

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

# Re: Спойлеры в клубе
std.club
hugeping(ping,1) — boscholeg
2020-09-11 21:20:35


> А как назад расшифровать? Зеркальцем воспользоваться?

Ага. Или мозгом. :)

# Re: Подкасты переехали на soundcloud
std.club
hugeping(ping,1) — artur
2020-09-12 11:31:54


> Но если не надо --> не буду

Смотри на своё усмотрение. Мне ещё тут предлагали в яндекс-музыку залить. Вроде бы есть раздел: не музыка.

Подкасты нужно писать рассчитанные на широкую аудиторию, все-таки. А сейчас так и вообще - видео.

Где я, где инстед и где видео? :)
P.S. Edited: 2020-09-12 11:31:49

# Re: Подкасты переехали на soundcloud
std.club
hugeping(ping,1) — artur
2020-09-12 11:32:19


> Ну я загружу туда.

Честно говоря, мне кажется наши подкасты там вызовут нездоровую реакцию. Может не стоит?

С другой стороны, смотри сам. Я осяду здесь, а соц-сети пусть живут где-то там. :)
P.S. Edited: 2020-09-12 11:32:13

# Re: Подкасты переехали на soundcloud
std.club
hugeping(ping,1) — artur
2020-09-12 11:32:35


> А можно подкасты загрузить в ВК?

Я честно говоря не знаю что и как там делать. И немного побаиваюсь vk. :) Пусть пока в soundcloud полежат. Тем более, что уже неактуальны.
P.S. Edited: 2020-09-12 11:32:31

# Re: Признание в любви к Го от старого сишника
develop.16
hugeping(ping,1) — boscholeg
2020-09-11 12:46:28


> Вы его так рекламируете. Что хочется прям почитать про этот ваш Го.

Если нравится Си, то понравится и Go. Хотя я был уже подготовлен Питоном и Lua, но всё-равно, думаю, понравится.

# Подкасты переехали на soundcloud
std.club
hugeping(ping,1) — hugeping
2020-09-12 11:31:15


В связи с переездом все подкасты INSTEAD перенесены сюда: https://soundcloud.com/hugeping
P.S. Edited: 2020-09-12 11:31:08

# Признание в любви к Го от старого сишника
develop.16
hugeping(ping,1) — All
2020-09-10 19:45:35


Что бы там не говорили злопыхатели, golang прекрасен! Пока делал ноду, полюбил его ещё больше. Конечно, пока пишу совсем не "идеоматичный" код, но начал постепенно его чувствовать.

Лично для меня это что-то вроде "Си" на стероидах. Что-то между низким уровнем (с его простотой) и современными более абстрактными языками. Идеален для написания бекендов!

А его кросскомпиляция? Наконец-то я избавился от вороха зависимостей, dependency hellов и избежал унылой участи запускать всё в контейнерах. И всё это благодаря go!

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

Короче, Роб Пайк рулит! Спасибо за наше счастливое детство!

# Переезд состоялся
std.hugeping
hugeping(ping,1) — hugeping
2020-09-10 19:28:53


Вот и всё.

Дроплет syscall.ru на DigitalOcean, который служил верой и правдой 7 лет - дропнут. Долго не мог себя заставить нажать кнопочку Destroy. Заходил посмотреть "в последний раз". Но надо уметь выбрасывать старый хлам, чтобы освободить пространство, в том числе и для мыслей.

Так что, вместо syscall и вороха блогов теперь останется только https://hugeping.tk

Маленький, простой, быстрый...

P.S. https://syscall.ru и https://club.syscall.ru тоже работают, и ведут на https://hugeping.tk



# Re: Обновления ii-go (движка узла ping)
ping.local
hugeping(ping,1) — hugeping
2020-09-10 18:36:20


Теперь узел должен работать по https.

https://hugeping.tk или https://club.syscall.ru - должны работать.

Для обеспечения поддержки https используется reverse proxy: https://github.com/gl00my/ii-go/tree/master/contrib/secure

Зависимость autocert внешняяm, но компонент необязательный, поэтому принцип KISS ii-go не нарушен. :)

# Поведение клика на дату последнего сообщения на главной
ping.local
hugeping(ping,1) — hugeping
2020-09-10 11:00:49


Поменял поведение клика на дату сообщения на главной странице.

Теперь клик приведёт вас к последним 100 сообщениям в выбранной эхе. Тогда вы не пропустите новые сообщения из других топиков.

Чтобы вернуться в привычный вид топиков - нажмите на символ # у сообщения (перейти к сообщению) или на название эхи в шапке ноды.

# Перенос club.syscall.ru на станцию ping
std.club
hugeping(ping,1) — All
2020-09-10 10:38:52


Назад пути нет. Делегирую домены на сервера Яндекс. В относительно скором времени club.syscall.ru и syscall.ru будут указывать на станцию http://hugeping.tk

База поинтов не сохранится, но сообщения сохранятся. Если вы заинтересованы в общении на станции, уже можно регистрироваться на https://hugeping.tk
Новая станция больше похожа на форум.

Сервер крутится на малинке, как будет со стабильностью - не знаю. Статус проекта - личный арт-проект без всякой ответственности. http://hugeping.tk/rOf069UX8K24yAzvWa9N#rOf069UX8K24yAzvWa9N

В общем, поехали! :)

# Re: Малинка, как домашний веб сервер
pipe.2032
hugeping(ping,1) — boscholeg
2020-09-10 10:28:29


> Вот кстати вопрос доверия Гитхабу. Ты уверен что он не рухнет в одночасье?

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

А вот за игры я больше не отвечаю, только за свои. Свои - доверяю github в принципе. Копии репозиториев, опять же, у меня на рабочих машинах всегда есть.

# Re: Малинка, как домашний веб сервер
pipe.2032
hugeping(ping,1) — boscholeg
2020-09-10 10:05:30


> Помнишь я тебе рассказывал про флэшки для промышленного применения?
> Их не зря советуют брать для одноплатников.

Да уж, ну, будем смотреть. Бекапов мало, важность ресурса - низкая. Так что не так страшно, надеюсь...

Все INSTEAD ресурсы я уже давно перенаправлял на github. Так что на малине только этот личный проект + боты для метапарсерных игр и чата.

# Re: Малинка, как домашний веб сервер
pipe.2032
hugeping(ping,1) — btimofeev
2020-09-10 09:31:45


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

Ого, интересно. Уже делаю бекап...

# Re: http://hugeping.tk как арт-проект
std.hugeping
hugeping(ping,1) — hugeping
2020-09-10 09:13:19


Ну и у всех этих /rss ссылок можно убрать rss - будут просто странички.

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

# Re: Bolder Dash с БК0010–01
std.hugeping
hugeping(ping,1) — boscholeg
2020-09-10 09:11:55


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

Да, помню такая же штука была. Писал игру. Поиграли. Выключили - всё. :)

> Обязательно попробую поиграться и сыну покажу.

Там есть встроенный спрятанный редактор. На компе кажется нажать E в момент выбора уровня или в самом уровне. А на андроиде, какая-то хитрая комбинация касаний. :) У меня сын делал уровни с интересом и давал мне проходить. Ещё игра пишет демки прохождений.

# Re: http://hugeping.tk как арт-проект
std.hugeping
hugeping(ping,1) — boscholeg
2020-09-10 09:08:13


> Петр чем читать новые сообщения? Есть какой-то клиент?
Где про это почитать?

Вообще, вот: https://ii-net.tk/

Но можно просто RSS зацепить: ii://MaNXQnvizFFCxbmm7303

# Re: http://hugeping.tk как арт-проект
std.hugeping
hugeping(ping,1) — boscholeg
2020-09-10 08:19:01


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

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

# http://hugeping.tk как арт-проект
std.hugeping
hugeping(ping,1) — hugeping
2020-09-10 07:59:06


Чем больше шлифую ii-go, тем больше мне нравится то, что получается.

Откуда во мне появилась тяга к такой вот экстремальщине? Не знаю.

Процесс, похоже, идёт последовательно.

Сначала мне понравился Linux, потом тайловые оконные менеджеры, потом OpenBSD, потом заинтересовался Plan9...

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

А вот с играми или тем же ii-go, ты никогда заранее не знаешь, что из этого всего выйдет. :) Нода, конечно, не получилась совсем уж минималистичной. Думаю, она занимает около 64кб кода на go. Но всё-таки, если сравнивать с мейнстримом...

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



P.S. Вот взять даже эту картинку. Что бы мы сделали на нормальном форуме? Фигак jpg на 1мб, фигак аттач. Форум фигак в postgresql. А тут? Я нашел картинку, довёл ее до нативного разрешения, привёл к 4-цветной палитре и вставил в тело сообщения. Сообщение превратилось в base64 строку и добавилось в конец текстового файла базы. Ну, разве это не прекрасно? :) Почувствуйте красоту в простом!

# Re: ii-tool clean
ping.local
hugeping(ping,1) — hugeping
2020-09-10 07:29:53


Долго думал, какую favicon поставить для узла. В итоге, остановился на этом:



# Re: Пишу ноду ii/idec на go
idec.talks
hugeping(ping,1) — hugeping
2020-09-10 06:10:23


> Да. Все что после него это base64. Вообще, может быть стоит сделать по другому. Я сделал как было проще...

Вообще, я думал про начало/конец тега base64. И в веб версии это будет шикарно, в том числе и для картинок. Но если такое внедрять в консольные клиенты, всё-таки, одно сообщение - один base64 аттач - это более понятная и простая схема...

В любом случае, если назреет какой-то стандарт на эту тему, попробую поддержать. :)

# Re: Пишу ноду ii/idec на go
idec.talks
hugeping(ping,1) — Andrew Lobanov
2020-09-10 05:44:16


> Главное, чтобы в x/c правильно отображалось :)

Очень надеюсь, что багов не будет. Хотя опыт показывает, что когда всё работает сразу, это означает наличие скрытых багов. :)

# Re: Пишу ноду ii/idec на go
idec.talks
hugeping(ping,1) — Difrex
2020-09-09 22:40:26


> Фетчу тебя. Пока все идет нормально.

Отлично! :)

# Re: Пишу ноду ii/idec на go
idec.talks
hugeping(ping,1) — Difrex
2020-09-09 22:39:46


>> @base64: имя файла - всё, что после этой строки берется как base64 аттач демка тут
> Т.е. этот тег должен находится в конце тела сообщения?

Да. Все что после него это base64. Вообще, может быть стоит сделать по другому. Я сделал как было проще...

# Re: Пишу ноду ii/idec на go
idec.talks
hugeping(ping,1) — btimofeev
2020-09-09 22:20:45


> Просто тогда в колонке это надо назвать не посты, а ответы, наверное.

Согласен, завтра сделаю.

# Re: Пишу ноду ii/idec на go
idec.talks
hugeping(ping,1) — btimofeev
2020-09-09 20:26:32


> У тебя почему-то в топиках количество сообщений выводится на одно меньше, чем сообщений в топике на самом деле

Не заметил в чате.

Я специально вычитаю 1. Как это сделано на punbb форуме. Типа это ответы на пост. Не считая заголовок. 0 - нет ответов.

В принципе, фича, но можно поменять в коде....

# matterbridge - объединение чатов на go
std.hugeping
hugeping(ping,1) — hugeping
2020-09-09 19:03:14


Сегодня нагуглил такой вот проектик: https://github.com/42wim/matterbridge
На go. Связывает несколько чатов в один. Испытал с чатами инстеда - discord, jabber и telegram. Просто настраиватея и работает! Оставил крутиться на малинке. :)

# Короткие заметки
std.hugeping
hugeping(ping,1) — All
2020-09-09 19:01:21


В этот топик буду писать короткие мысли и прочий флуд.
P.S. Edited: 2020-12-03 13:35:55

# ii-tool clean
ping.local
hugeping(ping,1) — hugeping
2020-09-09 16:08:32


Когда кто-то редактирует сообщение, то в базу добавляется новая версия этого сообщения. Я добавил в ii-tool команду clean, которая удаляет все старые версии сообщений и сокращает размер базы.

Команду стоит применять во время выключенного сервера ii-go.

# Краткая информация по этому узлу
ping.local
hugeping(ping,1) — All
2020-09-09 14:39:37


Добро пожаловать на станцию ping!

Станция ping - авторский проект Петра Косых (hugeping) ( ii://ay2xlGQxSQ0tZQqXwwku ). Функционирование станции ping не связано с поддержкой каких-либо проектов или общественно-полезной деятельностью. Станцию следует воспринимать как личный проект для самовыражения, который развивается в соответствии с видением его основателя в режиме жёсткой диктатуры.

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

Движок форума называется ii-go: https://github.com/hugeping/ii-go

Станция ping - один из узлов в сети idec: https://github.com/idec-net/new-docs/blob/master/main.md

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

Каждая из лент/эх доступна по RSS, так вы можете отслеживать новые сообщения.

Ниже приводится краткая справка по форматированию сообщений в ii-go.

Если вам нужно вставить код. Начните его со строки ==== и закончите строкой ====

print("Hello, world!")

Далее рассмотрим остальные теги (каждый из них представлен исходным кодом и представлением в сообщении.

@spoiler: Это спойлер!
!релйопс отЭ :reliops@

> Это цитирование
> Это цитирование


P.S. Это комментарии
// И это тоже
P.S. Это комментарии
// И это тоже

# Это заголовок
## Заголовок 2
### Заголовок 3
=== Или используйте для заголовков символ =
# Это заголовок
## Заголовок 2
### Заголовок 3
=== Или используйте для заголовков символ =

Вы можете вставлять картинки в формате xpm2 или xpm3 прямо в тексте. Но помните об ограничении на размер. Изображения до 128x128 в палитре 64 цветов скорее всего подойдут. ;)



Вы можете загрузить себе автар в профиле, тоже скопировав xpm файл в форму. Где делать xpm? Точно умеет gimp.

И, наконец, вы можете сделать аттач файла - написав специальный тег и имя файла, а затем скопировав данные в формате base64:

@base64: logo.png
base64 данные до конца сообщения
logo.png

# Личная страница hugeping
ping.local
hugeping(ping,1) — All
2020-09-12 09:21:59


Информация о станции ping: ii://rOf069UX8K24yAzvWa9N

Блог: https://hugeping.ru
Капсула в gemini: gemini://hugeping.ru

Движок INSTEAD: http://instead.hugeping.ru
Парсерный минимализм: https://parser.hugeping.ru

Некоторые из моих игр: https://instead.itch.io
Все игры на INSTEAD можно найти здесь: http://instead-games.ru

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

Telegram: https://t.me/hugeping
Jabber: hugeping@404.city




P.S. Edited: 2023-11-06 15:01:13

# Re: Ленты RSS в клубе
std.club
hugeping(ping,1) — Peter
2020-09-09 09:25:19


> Теперь можно получать сводную ленту из нескольких эх. Например, все эхи инстеда в одной RSS ленте:
> authstr можно посмотреть в личном профиле

На новом движке ii-go не так:

http://hugeping.tk/echo/all/rss - Все сообщения
http://hugeping.tk/echo/echo.name/rss - Выбранная эха echo.name
http://hugeping.tk/to/User/rss - Сообщения для User
http://hugeping.tk/from/User/rss - Сообщения от User

# Re: Спойлеры в клубе
std.club
hugeping(ping,1) — Peter
2020-09-09 09:22:14


> Теперь, если в вашем сообщении встречается строчка: %%spoiler%%

На новом движке ii-go теперь по другому.

@spoiler: А это спойлер!

!релйопс отэ А :reliops@

# Обновления ii-go (движка узла ping)
ping.local
hugeping(ping,1) — All
2020-09-09 09:18:31


Сегодня выложил документацию: https://github.com/gl00my/ii-go
Также, сменил формат лент с RSS на Atom.

# Re: Пишу ноду ii/idec на go
idec.talks
hugeping(ping,1) — hugeping
2020-09-09 08:24:07


Написал базовую документацию. На этом пока всё, буду потихоньку развивать ноду, но уже не так экстемально. :)

Если кого-то будут интересовать детали, расскажу или дополню доку.

https://github.com/gl00my/ii-go/blob/master/README.md

# Re: Сказки про INSTEAD: как всё начиналось
std.club
hugeping(ping,1) — hugeping
2020-09-09 06:29:45


Иллюстрация #2
2.png

# Re: Сказки про INSTEAD: как всё начиналось
std.club
hugeping(ping,1) — hugeping
2020-09-09 06:29:00


Иллюстрация #1
1.png

# Сказки про INSTEAD: как всё начиналось
std.club
hugeping(ping,1) — All
2020-09-09 06:21:00


> Опубликовано 09.05.2010

Уже больше года назад, увидела свет первая публичная версия INSTEAD и игра «Возвращение квантового кота». В то же время я написал статью в электронный журнал LGT о том, как создавался движок…

# Стать режиссёром

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

Еще учась в институте, воспитанные лучшими квестами Lucas Arts, мы с моим другом пытались писать графический «плоский» квест, но как это часто бывает не хватило мотивации, да и терпения… Я писал тогда на смеси ассемблера и C. В результате не был написан даже движок.

Несколько лет назад, уже работая с Linux, я узнал о таком старом жанре компьютерных игр, как Interactive Fiction (интерактивная литература). Было похоже, что это то-что нужно! Днем рождения жанра считается 1975 год, когда Уилл Кроутер написал первый текстовый квест, Adventure. В этом квесте общение с игроком осуществлялось посредством ввода и вывода текстовой информации. Эта особенность и стала ключевой для игр жанра IF. Многие IF-игры очень похожи на книги. Кроме того, так как вывод игры это текст — автор не обязан быть художником, создание IF игры в целом гораздо проще создания графического квеста в стиле 90х. При этом, как и в случае интересной книги, сюжет определяет все. Фактически — написание такой игры это написание сценария — огромный простор для творчества, посильного для одного человека.

На данный момент, самыми популярными и старыми платформами для создания IF игр являются TADS и Inform. Для своего первого квеста я выбрал Inform. Но тут возникла сложность — русский язык гораздо тяжелее анализировать (парсить). К счастью, на тот момент Денисом Гаевым уже была сделана русификация Inform компилятора и я начал писать пробную историю на Inform.

Inform был удивителен! Я понял, что применение объектно-ориентированного подхода в программировании объектов реального мира — захватывающая и творческая задача. Помню, как программировал поведение лифта, имитируя его движения с этажа на этаж, раскрытие дверей, состояние кнопок… Через несколько дней я дал попробовать то, что получалось коллегам по работе и сделал следующие неутешительные выводы.

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

Русский Inform был отложен. Но я все еще хотел написать свой квест.

# Первая попытка

Состояние жанра IF в Росии далеко от того, чтобы вызывать оптимизм. Тем не менее существуют проекты, которые являясь платформами для IF игр не реализуют парсерный ввод. В качестве примеров можно привести платформы URQ и QSP. Игры на этих платформах относят к так называемому «менюшному» типу, когда пользователь фактически выбирает варианты действий, хотя вывод игры по-прежнему является текстом. Графика и звуки тоже могут поддерживаться движком, но они скорее дополнение — как иллюстрации в книге.

Потратив некоторое время на изучение существующих движков я понял, что они не подходят. Я уже был «испорчен» Inform’ом в том смысле, что мне нравилась объектная ориентированность языка. Кроме того, я был в то время «фанатичным» и последовательным Linux’оидом, а данные платформы изначально были написаны для DOS и Windows. Качество существующих квестов под эти платформы меня тоже не удовлетворило, особенно в сравнении с английскими аналогами, и я начал продумывать свой движок.

В качестве языка я сначала планировал использовать какой-то простой basic-подобный скриптовый язык, но как-то наткнулся на Lua и был поражён его простотой, расширяемостью и лёгкостью его встраивания в C. И я просто начал писать движок на Lua.

В качестве идеи была выбрана следующая модель:

Внутри мир игры является объектно-ориентированным. Что-то вроде упрощённого Inform.

Диалоги должны выглядеть в стиле квестов 90-х. Вообще, диалоги всегда были одной из любимых особенностей графических квестов.

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

Схема взаимодействий объектов выбрана примерно такая, как она сделана в игре Goblins: игрок выбирает мышкой объект или действует объектом на другой объект — тоже мышкой, щелкая по словам, представляющие объекты. Игрок может переходить с локации на локацию, щёлкая по их именам.

Первоначальная версия движка на Lua оказалась очень простой — несколько сотен строк. Кроме того, движок писался одновременно с игрой — я просто включал в движок все то, что упрощало код игры. Так родилась тестовая версия квеста о сотрудниках института в котором я работал и об их борьбе со злом. Движок, как я уже сказал, представлял собой просто скрипт на lua, взаимодействие с ним осуществлялось через стандартный ввод/вывод. Это позволило реализовать графический интерфейс просто как надстройку, написанную на tcl/tk. Это был unix way — очень просто. Выглядело, конечно, грубовато, но в качестве концепта годилось. Весь проект — чуть больше 1000 строк, не считая 2000 строк самой игры.

Идея графического интерфейса была предельно проста. Слева: текст с игрой. Справа — столбец с объектами инвентаря. Кликая мышкой можно было взаимодействовать с объектами и комбинировать их.


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

# Обратно в 80-е

Все это время в моем подсознании зрела мысль, что квест еще не написан, а движок — не идеален… Я прочитал документацию по Lua еще раз и понял что все, что я написал — хлам. К счастью хлама было не много, и я переписал движок с чистого листа, учитывая ошибки и узкие места игры — концепта. На этот раз получилось около полутора тысяч строк на Lua, все еще достаточно просто и гораздо проще (и, надеюсь, достаточно гибко), чем существующие «менюшные» движки. И вот, дописывая движок меня прорвало — я начал писать свой «первый» квест, о хакере дауншифтире и парадоксах квантовой механики. Как и в случае с концептом, движок дорабатывался во время написания игры. В отличие от игры-концепта, я изначально планировал консольное, а не графическое управление игрой. С одной стороны, это добавляло шарма и сближало игру с классическими IF играми, с другой стороны — использование библиотеки readline делало управление игрой довольно комфортной.

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

Игру я писал «запоем», около месяца, и когда, наконец она была готова — я с трепетом отдал ее знакомым друзьям программистам.

Игру встретили хорошо, пару недель мы отлавливали ошибки и шероховатости в игровых ситуациях и потом я попытался подсунуть игру жене. Это был провал. Текстовый ввод — то, что для меня казалось достоинством, оказалось непреодолимым барьером.

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

# Графика

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

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

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

Для этого использовалась следующая нехитрая техника:

1.Создать копию слоя.
2.На верхнем слое: инвертировать цвет.
3.Гауссовое размытие верхнего слоя.
4.50% прозрачности верхнего слоя.
5.Объеденить видимые слои.
6.Порог.
7.Ручная работа.

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

Параллельно шла работа над графической средой, которая действительно оказалась довольно простой в реализации. Всего менее четырех с половиной тысяч строк кода на C. Это было гораздо проще всего того, что я видел.

В конце встал вопрос по поводу оформления интерфейса моей первой игры. Для рисования графических элементов я использовал Inkscape, который успел полюбить при разработке прошлой SDL игры — Color Lines. Основной проблемой стал подбор удачной подложки под текст и графику. Изначально я думал использовать просто белый фон, да и картинки были нарисованы с учётом белого фона. Но посидев пару часов со своим другом Сергеем, была выбрана подложка в виде старой книжной страницы для текста и ещё одна замысловатая текстура — для подложки под инвентарь. Правда возникла проблема — наброски были нарисованы на белом фоне и просто так рисовать их поверх текстуры было нельзя. Но, как оказалось, в gimp это решалось очень просто — переводом слоя в альфа-канал. (Слой->Прозрачность->Цвет в альфа-канал). Результат нам очень понравился.

#Звук

Примерно в это время команда с http://websound.ru выпустила диск ремэйков олдскул треков — reTracked #2 http://retracked.org Закачав его в свою Nokia N800 я был очарован композицией Liberty. Я и раньше подумывал о звуковом сопровождении игры, но теперь я знал точно, что будет играть в последней сцене.

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

# Эффект LOR

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

Небольшое сообщество, собранное вокруг IF игр в России это в основном Windows пользователи, и я собирался попросить кого-нибудь портировать мою игрушку под эту систему, сам я не использовал Windows с тех пор, когда перестал под неё программировать. Теоретически, процесс обещал быть простым — SDL и lua — кросс платформенные вещи и давно собраны для Windows. Но так вышло, что единственный знакомый мне Windows программист (кстати, он же портировал Color Lines) был занят другими делами и я, сделав тарболл, просто выложил его на страничку, быстро созданную на google sites. Потом я кинул ссылку на linux.org.ru и уехал домой.

Результат меня поразил. Посетители linux.org.ru пробовали мою игру и она им нравилась! Вы должны знать особенности данного ресурса, чтобы понять, что это означало для меня. Фактически, не было ни одного негативного отзыва. Люди играли в мою игру! Конечно те, кто так или иначе были знакомы с жанром, но все-таки это было неожиданно. В результате превышения трафика (я так и не нашел информации, какая именно граница считается у них лимитирующей) google sites временно отключил мою страничку и мне пришлось переносить проект в google code http://instead.googlecode.com и на всякий случай — на sourceforge. Потом, несколько человек писали мне в jabber и я исправил несколько ошибок в движке.

# Что дальше?

Instead — так я назвал платформу, легко собирается в Unix среде, например, практически без изменений он собрался для Nokia N8XX, но все-еще не собран для Windows пользователей. Я думаю, что рано или поздно версия для Windows должна появиться, но пока её нет. Что касается развития платформы, то я придерживаюсь той мысли, что платформа это средство, а не цель. Главное — это интересная история. Движок — всего лишь способ запустить игру. Если найдутся люди, которые напишут что-нибудь на instead, и потребуется расширение возможностей движка — они будут расширены.

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

# Язык и сознание
std.hugeping
hugeping(ping,1) — All
2020-09-09 06:10:50


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

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

ii://yEBVIVlseU2SZu5WbOVC

Так вот. Я, конечно, понимал, что английский вариант будет проще, но не ожидал, что настолько проще!

Теперь для меня очевидно, что слабое распространение (и развитие) игр с текстовым вводом у нас в первую очередь связано с отличиями языков, а уже потом — со всем остальным.

Раньше я считал, что сознание не сильно завязано на язык. Думал я это на основании собственного опыта интуитивного мышления, когда замечал, что мысли часто не облекаются в слова. То-есть, человеческая архитектура, на фундаментальном уровне, не зависит от “прошивки”. Но теперь мне кажется, что язык определённо влияет на сознание и это влияние существенно.

Один простой пример. В русском языке у нас большинство неодушевлённых предметов имеет род. В английском не так. Конечно, там тоже есть “ship” как “she” и так далее, но это все-таки скорее исключение. То-есть, говоря “ложка” или “нож” — я ловлю себя на мысли, что моё отношение к этим предметам окрашивается в разные оттенки в зависимости от рода! В английском это “it” — и всё тут. С точки зрения разума — всё верно. Это предмет, какой тут может быть род?

Но в русском, я действительно чувствую, что подушка — это “она”. Что топор — это “он”. Если вы со мной не согласны, проведите мысленный эксперимент. Представьте, что “облако” получило мужской род (“облак летит по небу”). Или “топор” стал женского рода (“Топр была острой”). Уверен, разницу вы почувствуете.

Винтовка и карабин. Согласитесь, оба слова, означая похожие вещи, осознаются по-разному! А ещё мне кажется, что это осознание будет разным у мужчин и женщин. Удивительно! Таких примеров можно привести массу, и это даже забавно — обнаруживать в себе эмоциональное отношение к неодушевлённым вещам.

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

ii://iIKozvIkN197sjQFx2Hh

Так что русский язык очень эмоционален и выразителен. И мне лично это нравится. Почему? Не потому ли, что я уже изменён языком (прошивкой)? Или, все-таки, потому, что мой язык мне соответствует?

В общем, философия языка, должно быть, очень глубокая и интересная тема…


P.S. Edited: 2020-09-09 06:10:02

# Малинка, как домашний веб сервер
pipe.2032
hugeping(ping,1) — All
2020-09-08 21:45:01


Думал думал, и всё-таки не выдержал.

Купил малинку, взял статический адрес у провайдера и постепенно перетаскиваю свое барахло с Digital Ocean.

Да, идеологически неправильно, но железка под боком это как то... Ближе. :) Сразу понимаешь, что вот оно. :)

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

В качестве dns-hosting на яндекс смотрю. Вроде бы бесплатно? Не хотелось бы ещё платить за это...

P.S. Кто то ещё здесь гоняет малину для этих целей?

# Re: Пишу ноду ii/idec на go
idec.talks
hugeping(ping,1) — Peter
2020-09-08 19:32:26


В общем, я поднял свою ноду - персональный арт-проект: http://hugeping.tk

Сейчас идёт синк с http://club.syscall.ru , но я буду его закрывать...
Прошу всех, кто с меня фетчит, переходить на http://hugeping.tk и отписаться о возникновении проблем.

Испытываю по живому. :)

За одно сливаю теперь свои материалы с разных источников. Хочу, чтобы хранилось всё в одном месте.

# Произведение и время
std.hugeping
hugeping(ping,1) — All
2020-09-08 19:21:01


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

Меня всегда интересовал механизм этого узнавания. Каким образом произведение вдруг становится признанным? Что или кто является критерием?



Вот и “Моби Дик” Германа Мелвилла не был принят современниками. Приведу несколько цитат:

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

> После разгромной критики вышедшего спустя год готического романа «Пьер, или Двусмысленности» (Pierre, or The Ambiguities, 1852), — где изображён писатель, который среди шумной толпы чувствует себя таким же одиноким, как на полюсе, — Мелвилл стал публиковаться анонимно, печатая рассказы в журналах.

> Когда Мелвилл умер в 1891 году, то был уже настолько забыт, что автор короткого некролога в «Нью-Йорк таймс» не сумел правильно написать его имя.

> С 1920-х началось переосмысление Мелвилла, и его признали классиком мировой литературы.

Началось переосмысление. Выглядит загадочно, правда? В английской статье на Wikipedia этот момент описан подробнее (спасибо @techniX).

> The “Melville Revival” of the late 1910s and 1920s brought about a reassessment of his work. The centennial of his birth was in 1919. Carl Van Doren’s 1917 article on Melville in a standard history of American literature was the start of renewed appreciation. Van Doren also encouraged Raymond Weaver, who wrote the author’s first full-length biography, Herman Melville: Mariner and Mystic (1921).

По русски об этом можно прочитать в этой статье. https://daily.afisha.ru/brain/1028-mobi-dik-germana-melvilla-nesvoevremennyj-shedevr/ Итак, американский критик и биограф Карл Ван Дорен https://en.wikipedia.org/wiki/Carl_Van_Doren написал статью, потом (на 100-летие автора), посвятил целый раздел в своей книге. Способствовал созданию биографии… И вот, закрутилось!

Так что, после 70 лет люди, наконец, доросли до понимания творчества Мелвилла? Или, может быть, вернулась мода на романтизм? Или в 1851 году критики “перекрыли кислород”, а через 70 лет нашёлся другой критик? Не знаю, я не искусствовед и я могу только удивляться.

Эта история интересна тем, что показывает нам удивительный и простой факт — произведение существует вне времени! Или даже “сквозь” время. Автора давно нет с нами, но в умах, сердцах людей снова создаются образы, которые чувствовал и создавал писатель. А бумага, оказывается, это довольно надёжный носитель информации!

Мы живём в цифровую эпоху. Что будет с десятками тысяч игр, художественных и музыкальных произведений через 50, 70, 100 лет? Станет ли что-нибудь из этого наследием культуры, или все сгинет в забытье и устаревших технологиях? Очевидно, сейчас мы наблюдаем “перенасыщение”, но кто в наши дни возьмёт на себя роль “критерия”? Или всё, что нам остаётся — хранить традицию? Узнал бы цифровой мир нового Достоевского, или талантливый автор был бы задушен монетизацией, мотивацией, изучением ЦА и другими особенностями современного “культурного рынка”?

Интересные вопросы, на которые лично у меня нет ответов.

# Re: Язык и сознание
std.hugeping
hugeping(ping,1) — hugeping
2020-09-08 19:06:26


Иллюстрация #2
2.png

# Re: Язык и сознание
std.hugeping
hugeping(ping,1) — hugeping
2020-09-08 19:05:33


Иллюстрация #1
1.png

# Эффективность против простоты
std.hugeping
hugeping(ping,1) — All
2020-09-08 18:53:37


Простой код — изящный и понятный код. Он работает предсказуемым образом, в нём легко выявить ошибки ещё на стадии написания. Наконец, он просто красив! Какой программист не стремится к простому коду? Когда мы представляем себе идеальный код — мы обычно имеем в виду именно простой, красивый исходный код! Но почему мы пишем нечто совсем другое?

Уравнение прямой — что может быть проще?

Ах + Ву + С = 0

Формула существует в мире идеальном. Но попробуем нарисовать отрезок прямой в грубой действительности — на растровом мониторе. Мы можем, конечно, выразить y через x и, увеличивая на 1 x, рассчитывать y. (Или x от y, для вертикальных отрезков). Потом ставить пиксель в координаты (x, y). Простой алгоритм. Только, никто так не делает. Медленно, неэффективно. Вы наверняка слышали об алгоритме Брезенхэма, который используется в таких случаях. К примеру, реализация рисования отрезка в INSTEAD (на C), выглядит так:

static __inline void line0(struct lua_pixels *hdr, int x1, int y1, int dx, int dy, int xd, unsigned char *col)
{
    int dy2 = dy * 2;
    int dyx2 = dy2 - dx * 2;
    int err = dy2 - dx;
    unsigned char *ptr = NULL;
    int w = hdr->w; int h = hdr->h;    int ly = w * 4;
    int lx = xd * 4;    while ((x1 < 0 || y1 < 0 || x1 >= w) && dx --) {
        if (err >= 0) {
            y1 ++;
            err += dyx2;
        } else {
            err += dy2;
        }
        x1 += xd;
    }
    if (dx < 0)
        return;
    ptr = (unsigned char*)(hdr + 1);
    ptr += (y1 * w + x1) << 2;    pixel(col, ptr);
    while (dx --) {
        if (err >= 0) {
            y1 ++;
            if (y1 >= h)
                break;
            ptr += ly;
            err += dyx2;
        } else {
            err += dy2;
        }
        x1 += xd;
        if (x1 >= w || x1 < 0)
            break;
        ptr += lx;
        pixel(col, ptr);
    }
    return;
}

static __inline void line1(struct lua_pixels *hdr, int x1, int y1, int dx, int dy, int xd, unsigned char *col)
{
    int dx2 = dx * 2;
    int dxy2 = dx2 - dy * 2;
    int err = dx2 - dy;
    int w = hdr->w; int h = hdr->h;
    unsigned char *ptr = NULL;
    int ly = w * 4;
    int lx = xd * 4;    while ((x1 < 0 || y1 < 0 || x1 >= w) && dy --) {
        if (err >= 0) {
                x1 += xd;
            err += dxy2;
        } else {
            err += dx2;
        }
        y1 ++;
    }
    if (dy < 0)
        return;    ptr = (unsigned char*)(hdr + 1);
    ptr += (y1 * w + x1) << 2;    pixel(col, ptr);    while (dy --) {
        if (err >= 0) {
            x1 += xd;
            if (x1 < 0 || x1 >= w)
                break;
            ptr += lx;
            err += dxy2;
        } else {
            err += dx2;
        }
        y1 ++;
        if (y1 >= h)
            break;
        ptr += ly;
        pixel(col, ptr);
    }
    return;
}

static void line(struct lua_pixels *src, 
int x1, int y1, int x2, int y2, 
int r, int g, int b, int a)
{
    int dx, dy, tmp;
    unsigned char col[4];
    if (y1 > y2) {
        tmp = y1; y1 = y2; y2 = tmp;
        tmp = x1; x1 = x2; x2 = tmp;
    }
    col[0] = r; col[1] = g; col[2] = b; col[3] = a;
    if (y1 >= src->h)
        return;
    if (y2 < 0)
        return;
    if (x1 < x2) {
        if (x2 < 0)
            return;
        if (x1 >= src->w)
            return;
    } else {
        if (x1 < 0)
            return;
        if (x2 >= src->w)
            return;
    }
    dx = x2 - x1;
    dy = y2 - y1;
    if (dx > 0) {
        if (dx > dy) {
            line0(src, x1, y1, dx, dy, 1, col);
        } else {
            line1(src, x1, y1, dx, dy, 1, col);
        }
    } else {
        dx = -dx;
        if (dx > dy) {
            line0(src, x1, y1, dx, dy, -1, col);
        } else {
            line1(src, x1, y1, dx, dy, -1, col);
        }
    }
    src->dirty = 1;
}

И это — весрия без анти-альясинга… Согласитесь, понять из алгоритма, что именно он делает, не так-то просто…

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

Я очень люблю OpenBSD за её простоту. Если сравнивать с современным Linux — это небо и земля! Но я понимаю, что за простоту пришлось заплатить… эффективностью. Ядро Linux очень сложное! Очень хитрые способы синхронизации (взять хотя бы rcu) разросшийся код системных вызовов… Даже если сравнивать один и тот же код разных версий — разница будет видна невооружённым глазом. Например, код из версии ядра 3.16:

void __napi_complete(struct napi_struct *n)
{
    BUG_ON(!test_bit(NAPI_STATE_SCHED, &n->state));
    BUG_ON(n->gro_list);
    list_del(&n->poll_list);
    smp_mb__before_atomic();
    clear_bit(NAPI_STATE_SCHED, &n->state);
}
void napi_complete(struct napi_struct *n)
{
    unsigned long flags;`    /*
     * don't let napi dequeue from the cpu poll list
     * just in case its running on a different cpu
     */
    if (unlikely(test_bit(NAPI_STATE_NPSVC, &n->state)))
        return;`    napi_gro_flush(n, false);
    local_irq_save(flags);
    __napi_complete(n);
    local_irq_restore(flags);
}

А вот аналогичный код, но уже из 4.18

bool napi_complete_done(struct napi_struct *n, int work_done)
{
    unsigned long flags, val, new;    /*
     * 1) Don't let napi dequeue from the cpu poll list
     *    just in case its running on a different cpu.
     * 2) If we are busy polling, do nothing here, we have
     *    the guarantee we will be called later.
     */
    if (unlikely(n->state & (NAPIF_STATE_NPSVC |
                 NAPIF_STATE_IN_BUSY_POLL)))
        return false;    if (n->gro_list) {
        unsigned long timeout = 0;        if (work_done)
            timeout = n->dev->gro_flush_timeout;        if (timeout)
            hrtimer_start(&n->timer, ns_to_ktime(timeout),
                      HRTIMER_MODE_REL_PINNED);
        else
            napi_gro_flush(n, false);
    }
    if (unlikely(!list_empty(&n->poll_list))) {
        /* If n->poll_list is not empty, we need to mask irqs */
        local_irq_save(flags);
        list_del_init(&n->poll_list);
        local_irq_restore(flags);
    }    do {
        val = READ_ONCE(n->state);        WARN_ON_ONCE(!(val & NAPIF_STATE_SCHED));        new = val & ~(NAPIF_STATE_MISSED | NAPIF_STATE_SCHED);        /* If STATE_MISSED was set, leave STATE_SCHED set,
         * because we will call napi->poll() one more time.
         * This C code was suggested by Alexander Duyck to help gcc.
         */
        new |= (val & NAPIF_STATE_MISSED) / NAPIF_STATE_MISSED *
                            NAPIF_STATE_SCHED;
    } while (cmpxchg(&n->state, val, new) != val);    if (unlikely(val & NAPIF_STATE_MISSED)) {
        __napi_schedule(n);
        return false;
    }    return true;
}
EXPORT_SYMBOL(napi_complete_done);

Кроме очевидного увеличения объёма кода тут присутствует любопытный фрагмент. Обратите внимание на конструкцию:

new |= (val & NAPIF_STATE_MISSED) / NAPIF_STATE_MISSED * NAPIF_STATE_SCHED;

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

Сложность кода растёт, простота теряется… Нельзя назвать ядро Linux примером плохого кода, но и красивым этот код можно назвать лишь с натяжкой.

К сожалению, мир в котором мы живём — это мир компромиссов.

Мы можем следовать одному из принципов:

- Linux — стихийная хакерская разработка;
- OpenBSD — принцип простоты в абсолюте;
- Проект https://suckless.org/ — принцип простоты до абсурда.

А можем пытаться выбрать что-то среднее. Но только ведь мы мечтаем об идеальном коде! А идеалы не терпят компромиссов. Так что в качестве отдушины, я пользуюсь на ноутбуке OpenBSD. А в INSTEAD я стараюсь придерживаться серединного пути. Но все-таки, все-таки все идеи приходят из мира идеального. Так что, даже в ядре Linux мы можем увидеть отголоски кода нашей мечты. :)

# Bolder Dash с БК0010–01
std.hugeping
hugeping(ping,1) — All
2020-09-08 18:49:46


Мне повезло, программировать я начал в лет 13, когда у нас в стране появились доступные компьютеры. Я был счастливым обладателем машины под названием БК0010–01. Конечно, сейчас даже стыдно озвучивать её характеристики. Но главное — на этом можно было программировать! Вообще, в каком то смысле было проще. В то время всё было просто. Железо — простое. Программы — простые. Сегодня, между человеком и машиной столько слоёв абстракции, что пробиться сквозь них очень тяжело. А в то время, ты мог программировать прямо в машинных кодах. Или вообще, на листке бумаги… Аналоговый мир впервые встретился с цифровым. (Кстати, успех таких проектов как PICO-8 или TIC-80 объясняется, как мне кажется, попыткой снова придать программированию простоту и радость творчества, которую у нас забрали.)

Так вот, я из тех людей, которые научились программировать благодаря играм. Я играл в игры и хотел делать такие же. Это и было основным стимулом для изучения возможностей БК. Одной из первых игр, в которые я играл была игра Bolder Dash.



Конечно, я тогда не мог знать, что Bolder Dash не самобытная игра на БК. Игра поразила меня своей сложностью. В то время я едва смог пройти несколько уровней, но не оставлял попыток пройти игру дальше.

Интересно, что потом, когда у меня появился уже x86 компьютер и я познакомился с разными вариантами Bolder Dash, я каждый раз был разочарован. Да, в этих играх человечек тоже толкал камни в разные стороны, но… Игра была абсолютно иной! В ней не было интеллектуальности! Скорее, рутинные уровни. Тяжёлое впечатление, словно ты играешь в sudoku или разгадываешь кроссворд. Каждый раз я с теплом вспоминал болдера с “бэкашки”…

В одной из версий INSTEAD, я добавил возможность создавать простые 2-D игры. Вот тогда (или чуть позже) я и вспомнил про Bolder Dash.

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

Кстати, в то время я уже знал, что автор игры на БК (Мелентьев А.В.) был вдохновлён игрой Bolder Dash на Atari. Но он не играл в неё, а просто видел. После этого, он по памяти написал свою реализацию. Как здорово, что он не скопировал оригинал, и получилась совершенно новая игра!

Реверс кода PDP-11 оказался приятной и несложной задачей, буквально за несколько дней я воссоздал оригинальный алгоритм на Lua. С некоторыми улучшениями. :) Интересно, но я обратил внимание на тот факт, что функции часто начинались с “красивых” адресов, а между блоками кода часто были пропуски. Тогда я не мог этого понять, но ответ оказался простым! Игра писалась непосредственно в машинных кодах! Без использования ассемблера!

Кстати, вот так выглядит первый уровень игры в Lua реализации.

--$Name:STANDARD
--$Name(ru):СТАНДАРТ
maps = {
-- 0
"################",
"#+@@@@@@@@@@@@@#",
"#::::::@@::::::#",
"#::::::@@::::::#",
"#::::::@@::::::#",
"#:::@@@@@@@@:::#",
"#:::@::::::@:::#",
"#:::@: $$ :@:::#",
"#:::@: $$ :@:::#",
"#:::@: $$ :@:::#",
"#::##########::#",
"#::    %     ::#",
"#::          ::#",
"#::@@@@$$@@@@::#",
"#::::::::::::::#",
"################",

Ещё несколько дней, и болдер даш заработал на INSTEAD!

Когда я рассказывал об игре знакомым и говорил, что это “Болдер Даш”, всегда происходил эффект ложного узнавания. Люди думали, что понимают о чём идёт речь, и это мешало. Так как этот “Болдер” совершенно самобытная игра. Поэтому, я назвал игру “Miner Bold”.

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

Так в чём же уникальность гнёмплея этой игры, по сравнению с оригинальным Bolder Dash, которого мы все знаем?

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

В физике тоже есть нюансы. Например, вы можете толкать камни вверх. А также, делать это на лету… В некоторых ситуациях… :) В некоторых ситуациях, можно даже “пугать” врагов. Конечно, эта механика следствие очень простого кода, но и она придаёт игре свой шарм.

Кроме оригинальных уровней, я добавил библиотеку дополнительных лабиринтов. Игра пишет демки успешных прохождений, которыми можно потом обмениваться (Пишутся они в каталог с сейвами). Если не нажимать на кнопки при старте, то игра покажет уже записанные демки. Также запустить демку можно кнопочкой “d” из меню выбора уровня (предварительно записав демку или взяв ее у товарища и подложив в каталог с игрой).

В игру можно играть на Android с помощью жестов. Только играйте двумя руками одновременно, тогда управление становится не хуже клавиатурного. Проверено мной и сыном, игра проходима. :)
Всем БКшникам — привет! :)

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

# О творчестве (цитаты)
std.hugeping
hugeping(ping,1) — All
2020-09-08 18:45:41


Aug 23, 2018 · 2 min read

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

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

Главный элемент творчества — чувство личной свободы.
(Чехов)

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

Совершенства достигает лишь тот, кто отказывается от всяческих средств, ведущих к сознательной утрировке.
(Поль Валери)

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

Чтобы хорошо писать, надо разучиться грамматике.
(Гёте)

Чем недоступнее рассудку произведение, тем оно выше.
(Гёте)

Кто хочет понять поэта, должен идти в страну поэта.
(Гёте)

Мне важно установить в этом фильме то специфически человеческое, нерастворимое, неразложимое, что кристаллизуется в душе каждого и составляет его ценность. Ведь при всём том, что внешне герои, казалось бы, терпят фиаско, на самом деле каждый из них обретает нечто неоценимо более важное: веру, ощущение в себе самого главного. Это главное живёт в каждом человеке.
(Тарковский о “Сталкере”)

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

Набрать нужное количество слов — это не самое трудное. Куда труднее сочинить рассказ как таковой; литературное творчество — процесс загадочный до жути. Вам так хочется сделать все правильно, вы лезете вон из кожи, на каждом шагу беспощадно судите себя — и в итоге оказываетесь в глухом тупике. Тысячи и тысячи написанных слов не сложились во что-либо приемлемое; среди дикого сумбура невозможно найти правильный курс.
Р.Шекли

# Абсолютно ли познание?
std.hugeping
hugeping(ping,1) — All
2020-09-08 18:44:00


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

Я хочу привести что то вроде мысленного эксперимента, который иллюстрирует мои мысли по поводу границ материализма.

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

Это настолько нам привычно и интуитивно, что часто остается незаметным. Так как все, что мы можем помыслить – формулируется в рамках нашего же мышления. Например, логика для нас – синоним истинности рассуждений.

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

Теперь, представим себе, что существует реальность. Настоящий мир весь целиком. Сам в себе. Или, упрощенно – истина. Многие ученые верят в это.

Частью этого мира являются люди. Люди пользуются мышлением (язык, математика, логика). Если встать на позицию материализма, то можно сказать что язык, математика, логика (мышление) – сформированы средой. Например, причинно - следственные связи логики – это отражение направленности времени. Математика – суть закономерностей мира. И так далее.

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

Но если язык сам по себе порождение мира, то какие у нас вообще есть основания считать, что созданный миром язык таков, чтобы мир мог быть им полностью описан? Мир, создающий язык, на котором он может быть полностью описан? Если язык действительно таков, то не похоже ли это все на осознающий себя мир?

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

Если же мы верим в то, что язык способен вместить в себя истину, то это тоже приводит нас к религиозному взгляду, который можно отнести к пантеизму. Но в случае пантеизма мы приходим к тому, что бог – это мы. Но почему же тогда человек в этом мире так несчастен? Так что, на мой взгляд, и в этом случае ответом может быть только бытие Бога.

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

Мы часто делаем подмены, во время наших рассуждений. Например, мы считаем “пространство” чем то самими собой разумеющимся. Хотя таким оно было только во времена Ньютона. Что такое пространство? Что такое движение? Вообще, философия науки на данный момент находится в стагнации. Да, мы даже не способны осознать даже такое “простое” понятие как движение! Любая физическая истина, будучи сформулированной, теряет абсолютность. Любая истина, выраженная логикой – теряет абсолютность. В качестве примера, попробуйте представить абсолютную истину, сформулированную физиком? У вас не получится.

Свобода воли – еще один интересный пример. Как бы мы не рассуждали, мы приходим либо к ее отрицанию, либо к ее “нефизичности”.

Само понятие “существует” – тоже предмет отдельного разговора.

Для меня, сам факт того, что человек пытается “заглянуть за край” является одним из доказательств бытия Божия. Мне кажется крайне неэкономично было бы мертвому и безжизненному абсолюту создавать человека с бесконечностью в душе. Но как бы вы не считали, во что бы вы не верили, я твердо убежден – ваш выбор обусловлен прежде всего не логикой, а сердцем. А если ваше сердце говорит одно, а логика – другое. Не бойтесь – логика хитрит. На мой взгляд, это еще одно “доказательство” бытия Бога, которое выражено в том, что человек свободен в своем выборе.

И в заключении, еще один пример. Многие из нас во сне делали нелепые поступки, чувствуя (во сне!) их абсолютную логичность. Просыпаясь же, мы удивлялись нелепости сна. Почему же мысль о том, что человек может “проснуться” в новую жизнь может казаться нелепой?

# Фиксированная передача
std.hugeping
hugeping(ping,1) — All
2020-09-08 18:42:25


Летом я езжу в городе на “глухаре” – велосипеде с фиксированной передачей. Глядя на множество стереотипов и предубеждений, которые связаны с этим типом велосипеда, мне захотелось хотя бы немного исправить это положение вещей и я перевел одну из статей Шелдона Брауна (довольно известного в велосипедных кругах веломеханика) на тему фиксированной передачи… Надеюсь, она окажется кому-то полезной…

Автор статьи: Шелдон Браун (Sheldon Brown)
Оригинал статьи на английском http://www.sheldonbrown.com/fixed.html

Перевод: Петр Косых

Я все равно думаю, что переключение передач может понадобиться только людям за сорок пять. Не лучше ли одержать победу силой своих собственных мышц без помощи искусственного переключателя? Мы теряем твердость. Что до меня, дайте мне “глухарь”! – Анри Дегранж (Henri Desgrange), L'Équipe article of 1902

# Что такое фикс и почему он может вам понадобиться?

Самый старый и простой тип велосипеда – “глухарь”. Это односкоростной велосипед без фривила (односкоростной кассеты): то есть, когда велосипед в движении, педали постоянно вращаются. На фиксе вы не сможете ехать по инерции.

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

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

# Для удовольствия

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

Конечно, нужно решиться на этот шаг и пройти через период привыкания. Но как только он пройдет, вы обретете совершенно новое удовольствие от езды на велосипеде. Когда вы едете на фиксе, вы чувствуете более тесную связь с велосипедом и дорогой. Есть какая то предельная, незамутненная простота в фиксированной передаче, которая может оказаться для вас крайне привлекательной. Каким то образом, как только заканчивается период привыкания, оказывается, что езда на глухаре приносит большее удовольствие, чем езда на велосипеде с передачами и трещеткой! Если вы не верите моим словам, почитайте отзывы о фиксированной передаче. http://www.sheldonbrown.com/fixed-testimonial.html

# Для поддержания формы

Езда на фиксе – отличное упражнение. Когда вам нужно взобраться в подъем, вам не нужно думать о том, когда менять передачу, потому что у вас она одна. Вместо этого, вы знаете, что нужно просто встать и поднажать, даже если расчет (передача) слишком высока, чтобы быть оптимальной для подъема. Это делает вас сильнее.

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

На спусках вы не можете катиться по инерции, а передача слишком низкая. Это заставляет вас педалировать с большим каденсом http://www.sheldonbrown.com/gloss_ca-g.html#cadence, чем на многоскоростном велосипеде. Педалирование с более высоким каденсом разрабатывает ваши ноги. Высокая частота вращения заставляет вас учиться более равномерному и плавному педалированию – если вы не будете правильно педалировать, вы будете подскакивать в седле.

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

# Чувство контроля

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

Это же самое чувство сцепления научит вас с какой силой тормозить передним тормозом без заметного отрыва заднего колеса от поверхности. Многие фиксеры используют только передний тормоз – с глухой передачей задний тормоз практически не нужен.

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

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

# Эффективность трансмиссии

Фикс заметно легче, чем многоскоростной велосипед сравнимого качества, из за отсутствия заднего тормоза, дюрайлеров http://www.sheldonbrown.com/gloss_da-o.html#derailer, манеток, лишних звезд http://www.sheldonbrown.com/gloss_sp-ss.html#sprocket . Фикс также имеет существенно более короткую цепь.

Правильно собранный фикс имеет идеальный чейнлайн http://www.sheldonbrown.com/gloss_ch.html#chainline . Это, а также отсутствие дюрайлеров, настолько сильно повышает эффективность трансмиссии, что вы это почувствуете.

# Трековые велосипеды

Многие люди думают, что фиксы и трековые http://www.sheldonbrown.com/gloss_tp-z.html#track велосипеды это синонимы, но это не так.

Трековые велосипеды созданы для использования на велодромах (велосипедных треках). Некоторые велосипедисты ездят на них и по дорогам, но они неидеальны для дорог.

Трековые велосипеды отличаются от шоссейных http://www.sheldonbrown.com/gloss_ri-z.html#road еще больше, чем отличаются от них фиксы.

Трековые велосипеды не имеют тормозов. Тормоза не нужны на треке, так как все едут в одном направлении, и никто из рядом едущих велосипедистов не может (и не должен) останавливаться быстрее вас. (На большинстве треков, в целях безопасности, тормоза запрещены!)

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

Геометрия рамы http://www.sheldonbrown.com/gloss_e-f.html#frame у трекового велосипеда также отличается от рам дорожных велосипедов. Так как на треке нет выбоин и неровностей, обычно рамы делаются более жесткими, с большими углами. Это хорошо для маневренности, но делает жесткой езду по реальным дорогам.

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

На трековых велосипедах не используются эксцентрики http://www.sheldonbrown.com/gloss_q.html#quick , что усложняет обслуживание в дорожных условиях.

На трековые велосипеды нельзя установить крылья http://www.sheldonbrown.com/gloss_e-f.html#fender , что ограничивает их полезность в плохую погоду.

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

Если вы заинтересовались трековыми гонками, посмотрите сайт Майка Глада The drome. http://www.velodrome.com/

# Дорожные фиксы

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

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

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

Вы можете купить готовый дорожный фикс, но у меня есть подробная статья переделка в фикс, http://www.sheldonbrown.com/fixed-conversion.html которая может помочь вам собрать свой.

# Фиксы из горных велосипедов

Фикс из горного велосипеда может стать универсальным транспортным средством для езды в городе и, при наличии авантюризма, его можно брать в лес. Горные велосипеды обычно имеют адекватный клиренс, правда с другой стороны, у большинства из них вертикальные дропауты. http://www.sheldonbrown.com/fixeda.html#vertical

У меня есть фикс на основе старого Bridgestone CB-3 http://sheldonbrown.org/bicycle.html#cb3 для плохих зимних условий, с 28/15. Это дает хорошую низкую передачу с расчетом 3.63 (49" / 3.88 м), http://www.sheldonbrown.com/gain.html которая позволяет мне ехать настолько быстро, насколько я считаю безопасным ездить по заснеженным улицам. Такая низкая передача делает передний тормоз почти бесполезным: низкая передача позволяет мне быстро тормозить велосипед за счет сопротивления вращению, особенно учитывая тот факт, что на ней сильно не разгонишься.

У меня есть пару горных фиксов с флип-флоп втулками, http://www.sheldonbrown.com/fixed.html#flipflop так что у меня на одной стороне втулки фиксированная передача, а на другой стороне получаются две передачи со свободным ходом. Это достигается с помощью двух передних звезд и двух звездочек на трещетке. (Трещетка на самом деле старая 5 или 6-скоростная у которой 3 звезды заменены на проставки.)

Спереди у меня стоит двойная система 42/52, которую я использую с 19-зубчатой фиксированной звездочкой, или с трещеткой с 20/30 зубцами. Все это дает 3 работающих комбинаций:

	Расчет 	Дюймы 	Метры 	Использование
52/19 Фикс. 	5.45 	71.2 	5.70 	Обычная дорога
52/20 Трещ. 	4.90 	64.1 	5.13 	Устал или холмы
42/30 Трещ. 	2.64 	34.4 	2.75 	Бездорожье

Комбинации 52/30 и 42/20 невозможны из за длины цепи. Я меняю передачи руками… да, плохой способ, так что я и не делаю это часто.

Брюс Ингл, участник Charles River Wheelmen, http://www.crw.org/ подкинул мне идею получше, он сделал тройной фикс на основе горного велосипеда. Он использовал кассетную втулку Шимано, http://www.sheldonbrown.com/k7.html запаяв механизм трещетки. Я немного волнуюсь относительно перспектив на будущее у этой втулки, в частности, насчет соединения между корпусом барабана и втулки, но я думаю я попробую повторить этот вариант. Он получил:

	Расчет 	Дюймы 	Метры
48/20 Фикс. 	4.65 	62.4 	4.99
42/26 Фикс. 	3.13 	42 	3.36
36/32 Фикс. 	2.18 	29.3 	2.34

# Трансмиссия

1/8" или 3/32"

Многие велосипедисты с трека используют более толстую цепь, чем цепи на многоскоростных велосипедах. Многоскоростная цепь имеет номинальную внутреннюю ширину в 3/32". На односкоростных велосипедах, включая большинство трековых, используются более широкие цепи в 1/8". Вы можете купить фиксированные звездочки обоих размеров.

(Некоторые люди по ошибке воспринимают ширину как шаг звена, говоря о “шоссейном” шаге или “трековом” шаге. Это ошибка. Шаг это расстояние от центра до центра между роликами, и все современные велосипедные цепи имеют одинаковый шаг, ½"/12.7 мм)

В большинстве случаев я бы порекомендовал использовать многоскоростной размер 3/32". Он легче, более совместим с вашими передними звездами от многоскоростных велосипедов, и, вероятно, сделает работу трансмисии мягче (вследствие скошенных боковых пластин) в случае, если на велосипеде неидеальный чайнлайн.

Судя по моему опыту, 3/32" цепи не менее надежны или прочны чем 1/8".

Для истинных ретро-ценителей, есть другой вариант – это 1" x 3/16" цепи. Этот размер был распространен на треке и требует специальных звездочек с числом зубцов вдвое меньшим, чем у стандартных звездочек с шагом ½". Настоящие трековые гонщики использовали цепь без роликов. Таких цепей больше нет. Но роликовые цепи такого размера еще где-то можно достать.

Еще более запутывает ситуацию шаг цепи в 10 мм. продвигаемый Шимано http://www.sheldonbrown.com/gloss_sa-o.html#shimano несколько лет назад. Идея была в том, чтобы сэкономить на весе, сделав все меньше. Идея, время которой так и не пришло.

# Продление жизни звездочек и цепи

Если вы хотите продлить жизнь цепи и звездочек, выбирайте четное число зубьев, если это возможно. Смотрите мою статью по продлению жизни цепи. http://www.sheldonbrown.com/chain-life.html

# Центровка передней звезды

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

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

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

Затяните немного бонки и все перепроверьте. Затягивайте бонки в равномерной последовательности, как это делается с гайками на колесах у машин. Моя обычная последовательность начинается с затягивания бонки напротив шатуна, затем пропустить 2 бонки по часовой стрелке (144 градуса), затянуть одну, пропустить еще 2 по часовой стрелке, и так далее. Никогда не затягивайте две соседние бонки. Вы можете выбрать противоположное направление движения, но попытайтесь выработать привычку всегда начинать из одной точки и всегда идти в одном направлением. Это уменьшит вероятность случайно пропустить бонку.

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

# Установка заднего колеса

Когда вы устанавливаете заднее колесо на фиксе – или на любом велосипеде с одной скоростью –, существуют три вещи, которые вы должны настроить одновременно:

- Колесо должно стоять прямо. Это, в основном, означает, что передний край колеса должен быть точно посредине между перьями рамы. Если у колеса симметричный зонт, и вы отцентрировали его относительно перьев, то колесо выровнено прямо.
- Натяжение цепи должно быть правильным. (См. предыдущий раздел)
- Гайки на оси или эксцентрики должны быть затянуты туго. Замечание: если у вас ось на гайках, жизненно необходимо, чтобы резьбы были правильно смазаны консистентной или жидкой смазкой. Вам следует также смазать поверхность контакта в том месте, где гайка давит на шайбу которая контактирует с рамой.

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

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

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

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

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

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

> Мне нравится сначала освободить правую часть оси, натянуть цепь немного сильнее, чем нужно, и ударить по цепи гаечным ключом, как описывает Шелдон в процедуре центрирования передней звезды. Таким образом, я могу сдвинуть ось совсем немного вперед, чтобы цепь была хорошо натянута. Колесо при этом немного повернется, и нужно будет настроить позицию левого конца оси, но это уже почти не повлияет на натяжение цепи. – Джон Аллен

Замечание: этот способ не работает с втулками на эксцентриках, но с ними обычно меньше проблем.

# Выбор расчета

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

Я живу в Новой Англии с небольшими холмами. Для велосипеда с обычными дорожными колесами и 165 мм. шатунами я понял, что для меня, передача 42/15 подходит лучше всего. Это дает передачу 5.77 (75.6" / 6.05 м). Это достаточно мало для того, чтобы я мог въезжать в горки где я обычно езжу, но достаточно много, чтобы я мог достаточно быстро съезжать вниз.

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

Те, кто живут в плоских местах, скорее всего предпочтут что-нибудь значительно большее. Когда я посещал мою сестру в Иллиноисе, я повернул мое колесо и использовал 42/14, передачу 6.18 (81.0" / 6.48 м).

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

Раздельщики часто предпочитают что-нибудь еще более высокое. (Многие британские триалисты предпочитают фиксы для этих соревнований.) Берил Бартон (Beryl Burton), вероятно, самая известная триалистка в истори, использовала почти исключительно фикс. Если мне не изменяет память, она обычно ездила на 52/14 или 52/13!

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

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

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

# Большее или меньшее число зубцов?

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

Например, 36/12, 39/13, 42/14, 45/15 и 48/16 все дают одну и ту же передачу 3:1. Что выбрать?

	                 Больше         Меньше
Хорошо: 	Немного меньшее трение 	Немного легче
	Более долгая жизнь цепи/кога 	Больший клиренс до земли
	Меньшее напряжение цепи 	Больший клиренс до перьев
Плохо: 	Немного тяжелее 	Быстрый износ цепи/кога
	Иногда проблемы с клиренсом до перьев 	Большее напряжение цепи
		(и вероятность смещения оси)

Эти различия в основном незначительны. Большинству велосипедистов подойдут звезды от 30 зубцов для техничного внедорожного использования, 40 зубцов для дороги и 50 для использования на треке.

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

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

# Флип/флоп втулки

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

Наиболее распространенное использование таких втулок – это установка фиксированной звездочки на одной стороне и фривила на другой. Обычно, фривил ставят на 1 или 2 зубца больше, чем фиксированная звездочка.

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

- Более низкая передача облегчит подъем.
- Фривил позволит вам ехать по инерции (отдохнуть) на спусках (что было бы утомительно на такой низкой передаче, если бы она была глухой.)

Для каждого зубца разницы, позиция задней оси будет меняться на 1/8" (3 мм.)

Также, вам понадобятся два тормоза, если вы собираетесь использовать фривил.

Вы также можете использовать две разные фиксированные звездочки. В таком случае я бы порекомендовал разницу в 1 зуб. Я использую 14 и 15 коги с 42 звездой впереди на паре моих велосипедов.

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

Бывают двойные фиксированные втулки, и, как по мне, это наиболее желательная конфигурация. Такое устройство наиболее универсально, потому что вы можете накрутить 1 или 2 фиксированные звезды или 1 или 2 фривила.

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

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

# BMX фдип-флоп втулки

Есть еще один тип “флип-флоп” втулок, в основном используемых в BMX. Этот тип имеет резьбу для двух фривилов, без резьбы для локринга. Одна сторона это стандартная 1.375" резьба, другая – более мелкая метрическая резьба. Она сделана для того, чтобы устанавливать более мелкие фривилы, чем те, которые устанавливаются на обычную втулку (14 и 15 зубцов).

# Педали

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

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

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

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

# Начало езды

Езда на велосипеде требует подходящей техники старта. http://sheldonbrown.com/starting.html Многие велосипедисты имеют плохие навыки старта езды, такие как закидывание ноги на ходу или подпрыгивание на старте. Эти методы работают на фиксе еще хуже, чем они работают на обычном велосипеде.

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

Я использовал край седла, чтобы приподнять велосипед, но я таким образом порвал Brooks Pro http://sheldonbrown.com/leather.html – оторвались заклепки, которые крепят кожу к рамке седла!

Мой друг, Осман Исван недавно подсказал мне другой способ. Трюк в том, чтобы взять велосипед, поставить ногу на педаль, зажать передний тормоз и надавить на руль от себя. Сила давления на руль заставит приподняться заднее колесо и можно будет прокрутить педали в нужную позицию.

# Остановка

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

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

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

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

# Торможение

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

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

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

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

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

Некоторые фиксеры стараются не использовать тормоз за исключением экстренных ситуаций. Я не уверен в том, что это хорошая идея. Очень тяжелая и постоянная нагрузка сопротивления педалированию широко зарекомендовала себя как вредная для ног. Она является контр-продуктивной для развития мышц и координации педалирования. Загуглите “eccentric contraction” для дополнительной информации. http://www.google.com/search?client=safari&rls=en&q=eccentric+contraction&ie=UTF-8&oe=UTF-8 Eccentric contraction зарекомендовала себя как причина микро-разрывов в мышечной ткани, так что это ослабляет ваши мышцы, в отличие от других физических нагрузок.

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

> Физиология упражнений относительно новая наука. Микро-разрывы в мускулах сейчас считаются началом укрепления мышц. Распространенные упражнения для строительства мускул – поднятие тяжестей, отжимания, приседания. Nautilus и Cybex тренажеры и так далее используют eccentric contraction – вы поднимаете штангу, или свое тело, или тянете рычаг, затем опускаете. Но число повторений в упражнениях намного меньше, чем при езде на велосипеде, обычно 2 или 3 подхода из 10 повторений, вместо тысяч за час педалирования. Тяжелые нагрузки при сопротивлении вращению педалей, возможно, вредная вещь по той же причине, что и низкий каденс. Сильная нагрузка, повторенная много раз, ведет к излишнему травмированию, и будет истощать, а не наращивать мышцы. – Джон Аллен

# Скип-стоп (скидинг)

Велосипедистам не использующим тормоза следует освоить технику, называемую скип-стоп. Это примем с помощью которого вы можете заблокировать заднее колесо усилием ног.

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

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

Вам действительно стоит научиться этому приему! Его проще делать на большей скорости.

Чем меньше передача, тем более эффективно вы можете “тормозить” путем сопротивления вращению педалей.

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

Смотрите мою статью Торможение и маневрирование http://sheldonbrown.com/brakturn.html для более детальной информации.

# Скид патчи

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

Велосипедисты которые планируют делать много скип-стопов должны учитывать передачу при выборе звезд. Математика выбора довольно проста:

- Упростите передачу к самому маленькому (меньшим числом зубцов) эквиваленту в виде отношения чисел. Назовем передачу p/q.
- Если числитель p у дроби – четный, то число скид-патчей равно q. Скид-патчи равномерно распределены по покрышке, если их больше одного.
- Если вы способны скидить с обоих позиций и числитель нечетный, число возможных скид-патчей удваивается. Скид-патчи с одной позиции (одна из ног впереди) лягут в промежутках между скид-патчами для другой позиции (эта же нога – позади).

Например:

48/12 упрощается до 4.1, таким образом тут будет только 1 пятно контакта (скид-патч).

45/15 упрощается до 3/1, таким образом будет только 1 скид-патч, или 2 если вы умеете скидить с обоих позиций.

42/15 упрощается до 14/5, то есть тут будет 5 скид патчей.

44/16 упрощается до 11/4, то есть тут 4 скид патча, или 8 – если вы умеете скидить с обоих позиций.

Дробь 43/15 не может быть упрощена, так что тут 15 скид патчей, или 30 – если вы умеете скидить с обоих позиций.

Объяснение: давайте посмотрим на 45/15 или 3/1. Заднее колесо поворачивается точно 3 раза за каждый оборот шатунов, таким образом, если одна и та же нога в передней позиции, одно и то же место покрышки будет протираться при торможении. ½ поворот шатунов соответствует другой позиции (другая нога впереди) и это повернет заднее колесо на 1 ½ оборота. Таким образом, пятном контакта станет противоположная точка на шине. Аналогично, для более больших отношений, если числитель четный, скид-патчи будут попадать на одно и то же место не зависимо от того, какой шатун впереди. Но если числитель нечетный, скид-патчи будут чередоваться. Табличка для Excel от Джона Алена http://sheldonbrown.com/skidpatch.xls помогает вычислить число скид-патчей для любой комбинации звезд.

Задний тормоз тоже оставляет протертости. Переднее колесо не уходит в занос при нормальном торможении. Передний тормоз также может остановить велосипед намного быстрее, но требует осторожного обращения, чтобы избежать выкидывания велосипедиста через руль: см. мою статью по торможению и маневрированию. http://sheldonbrown.com/brakturn.html

# Опасности фикса

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

# Чирканье педалью

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

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

Насколько именно эта проблема опасна зависит от высоты каретки, длинны шатунов и устройства педалей.

Большинство моих фиксов имеют 165 мм. шатуны, что дает немного больше клиренса, чем дали бы 170 мм. шатуны. которые обычно используются на дорожных велосипедах. Также, я стараюсь использовать такие педали, которые не сильно торчат наружу.

> Избегание зацепления педалью это одна из причин не следовать обычному совету Шелдона http://sheldonbrown.com/brakturn.html#leaning стараться держать свое тело и велосипед на одной линии во время крутых поворотов. Если вы наклоните туловище по направлению поворота, велосипед будет устойчивей, но с другой стороны… – Джон Аллен

# Соскок цепи и блокировка колеса

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

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

# Зажевывание пальцев, брюк, шнурков

Другая большая опасность фикса существует во время работы с велосипедом на стенде. Если вы крутите педаль рукой и случайно палец или предмет одежды попадет в цепь или звездочку, имейте в виду, что вращательный момент не даст остановиться трансмиссии. Вы можете потерять палец!

> Тут были изображения отрубленных пальцев. Вы можете посмотреть их здесь. – Прим. пер. http://www.sheldonbrown.com/fixed.html

Простите, за эти ужасные фото, но это реальная опасность!

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

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

Я искренне надеюсь, что моя статья убедит некоторых из читателей попробовать прокатиться на глухаре, и, быть может, вам понравится фиксированная передача так же сильно, как она нравится мне. У меня есть 11 фиксов! http://www.sheldonbrown.com/fixed-scb.html

# Познаваемость и антропный принцип
std.hugeping
hugeping(ping,1) — All
2020-09-08 18:27:04


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

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

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

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

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

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

Интуитивно мы понимаем, что все эти рассуждения выглядят нелепо. Возвращая антропный принцип в полном смысле (говоря, что Бог сотворил вселенную для нас) – наш разум более не вступает в конфликт с интуицией. Я не знаю, доберемся ли мы до звезд, но это вполне возможно, если Бог подарил нам эти звезды. Антропный принцип предполагает, что вселенная познаваема, ибо она создана для нас. Человек архитектурно сродственен миру. Конечно, это не означает, что мы гарантированно начнем бороздить просторы галактики, но хотя бы дает основание для надежд на то, что мы все-таки способны вместить в себя вселенную.

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

Pages: 1 2 3 4 5 6