туториал

Подписчиков:
25
Постов:
131

Разрабский пост о Painted Legend: Knights of Ink & Paper

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

Как перерисовать/раздеть любого персонажа с помощью Stable Diffusion

Сегодня я расскажу о способе дорисовывать любые рисунки с помощью инструментов Stable Diffusion. Но прежде чем я начну, убедитесь что у вас установлена свежая версия Stable Diffusion webui от Automatic1111 + расширение ControlNet 1.1 со всеми нужными моделями.
Вот видео-инструкции (смотреть по порядку):
Установили? Тогда начинаем.
Часть 1. ControlNet Inpaint
Ни для кого не секрет, что в SD существует фича под названием inpaint - это, по сути, способ сгенерировать что-то поверх существующего изображения. В интерфейсе от Automatic1111 под inpaint'ом обычно подразумевают один из режимов img2img. Это хоть и мощный инструмент, но, всё же, недостаточно точный и контролируемый. Тут на помощь приходит ControlNet Inpaint и исправляет главный недостаток "классического" inpaint'а - игнорирование контекста. Впрочем, достаточно теории переходим к практике.
Итак, возьмём изображение, которое мы хотим отредактировать.
И сразу же уменьшаем/увеличиваем его до нужного разрешения:
В моём случае с 1500x1500 до 640x640. По опыту скажу, что лучший результат получается при размере меньшей стороны от 512 до 768 пикселей, а большая сторона при этом желательно меньше 1024 пикселей.
Теперь открываем вкладку txt2img в web-gui, раскрываем ControlNet и переносим изображение на холст Unit 0, выбираем режим Inpaint и выставляем все нужные настройки (и включить не забудьте):
Теперь замазываем места, которые хотим перерисовать:
,нейронные сети,гайд,туториал,StableDiffusion,песочница
В промпт пишем то, что хотим в результате видеть. Ещё раз, пишем не то, что нужно нового добавить, а то, каким хотим видеть финальную картинку:
1girl, naked, completely nude, (best quality, masterpiece:1.2)
Негативный промпт как обычно:
EasyNegative, badhandv5, (worst quality, low quality, normal quality:1.4)
Модель подбираем поближе к стилю рисунка (реалистичный/стилизованный). В моё случае это MeinaMix_v11-inpaint.
Параметры генерации:
Всё, можно нажимать Generate до тех пор пока не появится приемлемая картинка.
Столь хороший результат обеспечивается препроцессором inpaint_only+lama - он пытается дорисовать зону под маской с учётом "наружного контекста". Это же и обеспечивает генерацию правильного цвета.
Простой случай разобрали, переходим к чему-то посложнее:
Часть 2. Style transfer
Возьмём теперь другой рисунок попробуем повторить описанный выше процесс:
Мда, мало того, что поза поехала, так ещё и стиль оказался потерян. Одного ControlNet Inpaint тут недостаточно. Надо подключать дополнительные юниты.
Нам нужно решить 2 задачи:
Повторить существующий стиль рисункаСохранить силуэт
Для решения первой задачи будем использовать ControlNet reference и ControlNet T2IA - они оба позволяют копировать стиль с изображения-референса и как нельзя лучше работают в связке.
Возвращаемся к интерфейсу ControlNet'a. Копируем исходное изображение в Unit 1 и Unit 2. Настраиваем вот так:
0 Enable
Low VRAM
Pixel Perfect
Allow Preview
Control Type
All	Canny	Depth	Normal	OpenPose	MLSD
Lineart	SoftEdge	Scribble
Inpaint	IP2P	Reference
Preprocessor
t2ia_style_clipvision
Control Weight i	Starting Control
Seg	Shuffle	Tile
None
controlnetT2IAdapter_t2iAdapterColor [c58d: /
(Все нужные модели скачать не забыли?)
А в качестве четвёртого ControlNet'a можно использовать любой, что позволяет сохранить форму: canny, depth, softedge, lineart - на ваше усмотрение и под конкретную задачу.
0 Image,нейронные сети,гайд,туториал,StableDiffusion,песочница
(Вот тут softedge)
Интересный факт: никто не запрещает отредактировать выход предпроцессора в фотошопе. Что-то убрать, что-то подрисовать. Вот где могут понадобиться навыки рисования.
Ладно, всё 4 юнита активны. Нажимаем Generate и:
Это совсем не то, нужно!
Формы сохранены, но промпт будто проигнорирован. Что случилось? Я вам скажу что: сила ControlNet'а оказалась слишком велика. Stable Diffusion попытался во время генерации воссоздать рисунок-референс да ещё и плюс inpaint там подсунул белый цвет с фона!
Как с этим бороться? Нужно уменьшить эффект двух юнитов переноса стиля (reference и T2IA), но при этом нельзя сильно уменьшать их силу, иначе перенос стиля будет ослаблен. В общем, нужно воспользоваться настройкой Starting Control Step. Она отвечает за то, на какую долю шагов генерации придётся действие ControlNet'a.
Starting Control Step 0.5, например, означает, что первую половину шагов генерация будет опираться только на промпт, а со второй половины подключится уже наш ControlNet.
В общем, план такой: слегка понижаем Control Weight (сила) у стилевых юнитов (примерно до 0.9). После этого начинаем постепенно поднимать границу начала действия стилевых юнитов. Также имеет смысл подобным же образом немного ослабить действие Inpaint'a - позволяет в некоторых случаях исправить цвета.
После нескольких попыток (и усиление промпта) получаем вот такую задницу:
,нейронные сети,гайд,туториал,StableDiffusion,песочница
Не идеально, но уже шаг в нужном направлении. На самом деле, сейчас можно (и нужно) уже именно это изображение сделать референсом. Другими словами, скопировать его во все 4 юнита и отталкиваться уже от него. И так сколько нужно раз. Пока не получится идеальный результат, либо ваша генерация окончательно не развалится.
Часть 3. img2img
Даже после получения хорошей генерации во вкладке txt2img имеет смысл несколько отшлифовать изображение уже через img2img inpaint. Главное не забудьте подключить 2 ControlNet'a для переноса стиля. Помните да, reference и T2IA.
Некоторые пункты в виде итога:
Ключ ко всему - это ControlNet (inpaint_only+lama) и ControlNet (reference_only, T2IA)
Генерацию лучше проводить поэтапно, чтобы было на что опереться в последующие шаги
Также имеет смысл разделять генерацию объектов нужной формы и затем покраску их в нужные цвета.
Подбирайте подходящие под задачу модели и/или лоры.
Не забудьте про параметры Control Weight, Starting Control Step, Ending Control Step. И про Control Mode в самом низу!
P.S. Хотел бы я чтобы кто-то обстоятельно протестировал этот метод и поделился бы потом результатами. Мне кажется, как-то можно добиться ещё большей близости к стилю оригинала, ведь задача состояла именно в этом.
Туториал закончен, теперь впечатления. Это охиренно мощная штука! Можно как угодно дорисовать любую картину, стиль вообще не важен, тем более что сейчас уже натренированы сотни моделей на все случаи жизни. Хоть скриншоты из мультфильмов/аниме, хоть картины маслом. Фильмы и фотографии вообще пройденный этап. Можно даже без использования inpaint'a просто сгенерировать сколько хочешь изображений с нуля, просто опираясь на единственный рисунок. А ведь ControlNet появился лишь в начале этого года. Короче, уже почти год прошёл, а всё это до сих пор кажется каким-то колдунством. Что грядущий день готовит...

Отличный комментарий!

а говорили что нейросети работу заберут
судя по этому туториалу теперь нужен Senior Stable Diffusion Manager чтобы только на жопу посмотреть )

Как перерисовать любой рисунок с помощью StableDiffusion

Нужно:
Установленный и настроенный свежий Automatic1111 web-guiУстановленное расширение ControlNet, и все нужные модели к немуУмение хоть сколько-нибудь с этим работать
Всё происходит во вкладке txt2img
Сначала берём исходное изображение, кладём его в 2 вкладки ControlNet'a и включаем их. Вот как-то так:
ControlNet vi. 1.224 ControlNet Unit О
Single Image
13 Image
ControlNet Unit 1 ControlNet Unit 2 Batch,нейронные сети,гайд,туториал,StableDiffusion,песочница
Первую вкладку (Unit 0) настраиваем следующим образом:
Control Type
All	Canny Depth Normal		OpenPose	MLSD
Lineart	SoftEdge Scribble	Seg	Shuffle	Tile
Inpaint	IP2P O Reference	T2IA		
Preprocessor
reference_only
Control Weight	1
Starting Control
0;3	Ending Control
Step
1

Style Fidelity (only for "Balanced" mode)
0,5
Control Mode
Balanced
А вот так вторую (Unit 1):
Два инстанса нужны, потому что первый отвечает за передачу стиля, а второй обеспечивает генерацию поверх существующего изображения с учётом контекста.
Осталось нарисовать маску:
,нейронные сети,гайд,туториал,StableDiffusion,песочница
Параметры генерации, промпты:
В промпте, то что хотим сгенерировать в зоне маски 
Позитивный - (white flowers:1.1), (best quality, masterpiece:1.2)
Негативный как обычно - EasyNegative, (worst quality, low quality, normal quality:1.4), (painting of bad artist:1.2)
Нажимаем Generate и получаем:
Пара моментов:
Старайтесь генерировать поближе (насколько возможно) к оригинальному разрешение. Hires. fix лучше не использовать - он ломает тонкие детали.
Нужен подходящий чекпойнт в зависимости от стиля оригинального рисунка. Под реалистичные рисунки реалистичные модели, под стилизованные - стилизованные.
Cегодня мы поговорим об установке и использовании графической панели 3X-UI для сервера X-Ray с поддержкой всего того, что умеет X-Ray: Shadowsocks-2022, VLESS с XTLS и т.д.
Почему 3X-UI? Существует, на самом деле, довольно много панелей для V2Ray/XRay: оригинальный X-UI, Marzban, Libertea, Hiddify. Проблема в том, что в процессе экспериментов у меня и ряда других хабраюзеров заставить их нормально работать с пол-пинка не получилось. Например, одним из требований была установка в Docker (чтобы не создавать бардак в системе и не запускать непонятные bash-скрипты на хосте вне контейнера), и на этом этапе отвалились уже многие панели: у каких-то установка падала еще на этапе разворачивания docker-контейнера из-за ошибок в скриптах, какие-то устанавливались, но не могли нормально запуститься (фронтенд говорил, что не может подключиться к бэкенду), какие-то в итоге запускались, и после получаса тыканья везде в попытках переключить язык с китайского или фарси хотя бы на английский выяснялось что что-то глючит или не работает.
3X-UI, который является доработанным форком оригинального X-UI, в сравнении со всем вышеописанным, почти идеален: легко устанавливается в Docker, сразу на английском с возможностью переключения на русский, имеет в себе все что надо - и главное, работает! Пара багов, конечно, тоже нашлась, но они не критичны и о них будет чуть позже.
Update: в конце мая в своем Telegram-канале автор 3X-UI написал, что возможно больше не будет работать над проектом, но есть альтернатива - еще один из форков оригинального X-UI под названием (внезапно!) X-UI, который очень похож на 3X-UI и тоже работает без проблем.
Установка
Официальный репозиторий 3X-UI: https://github.com/MHSanaei/3x-ui
Официальный репозиторий форка X-UI: https://github.com/alireza0/x-ui
Итак, дано: VPS с IPv4 (неплохо бы иметь еще IPv6, но не обязательно) и Debian либо Ubuntu Linux (на других дистрибутивах суть будет примерно та же самая). И установленные Docker и docker-compose (если вдруг нет - следуйте инструкциям для вашего дистрибутива, у меня без проблем установилось простым "apt install docker.io docker-compose"). Ну и git в придачу.
Сначала клонируем исходники. Лучше всего использовать последнюю стабильную версию, можно проверить в "Releases" на гитхабе.
Для 3X-UI:
git clone https://github.com/MHSanaei/3x-ui.git
cd 3x-ui
git checkout v1.4.6
Для X-UI:
git clone https://github.com/alireza0/x-ui.git
cd x-ui
git checkout 1.4.1
Запускаем docker-compose:
docker-compose up -d
Готово! Вы восхитительны! Я серьезно, все, панель установлена и работает.
Дело осталось за малым - настроить ее:
Для 3X-UI идем браузером по адресу http://yourserverip:2053/panel/, где yourserverip - IP-адрес вашего сервера или доменное имя, если оно у вас есть и настроено (обратите внимание, протокол http://, а не https://). Для X-UI нужно сначала посмотреть с помощью команды "docker logs x-ui", на каком именно порту запустилась панель.
Логинимся под стандартными реквизитами admin/admin и видим нашу прекрасную панель управления:
Первым делом я советую сделать несколько вещей. Перейти в "Settings" (настройки) и там:
Изменить порт на котором работает панель со стандартного 2053 на какой-нибудь другой (лучше всего где-нибудь в верхнем конце диапазона, до 65535);
Изменить корневой путь URL-адреса панели с / на что-то типа /mysecretpanelroot/;
При желании переключить язык на русский (но имейте в виду, в русском переводе есть некоторые неточности сбивающие с толку);
На второй вкладке "Настройки безопасности" изменить стандартный админский пароль на свой;
После чего сохраняем настройки и рестартуем панель. Нужно будет изменить URL с учетом нового порта и пути, заданных в настройках.
Все вышеперечисленное необходимо для защиты от тупых скрипткиддисов залетных кулхакеров, которые случайно могут наткнуться на вашу панельку при массовом сканировании адресов. Другие советы по повышению безопасности я приведу в конце статьи.
Создаем подключения
Идем в раздел меню Inbounds (в русском переводе он почему-то называется "Пользователи", это неправильно и сбивает с толку). Нажимаем "Add Inbound" ("Добавить пользователя"):
Всего входящих/исходящих: о в / о в Количество пользователей: о)
+ Добавить пользователя I = Общие действия
поиск
Меню
Включить,shadowsocks,3x-ui,туториал,длиннопост,habr,geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор,telegram,VPN
Появляется милое окошо. Сначала добавим возможность подключаться через Shadowsocks-2022.
"Remark" (Примечание) - ввести что угодно, это просто человекочитаемое название;
"Протокол" выбираем shadowsocks;
"Listening IP" (в русском переводе называется "Порт IP", и это тоже неправильно и запутывает) можно оставить пустым, тогда сервер будет слушать на всех IP-адресах, либо можно явно указать требуемый;
"Порт" - панель выберет рандомный.
Далее настраиваем пользователя (в момент создания inbound'а создается один, других при желании можно добавить позже):
Поле "Email" на самом деле не обязательно должно содержать емайл, может быть любой текст (имя пользователя) - панель генерирует рандомный набор символов, если вы хотите создавать несколько разных пользователей (например, раздать аккаунты друзьям, смотреть кто сколько накачал и при желании блокировать доступ), то лучше вбить сюда что-то человекочитаемое и понятное;
"Subscription" - пока что можно вбить тот же самый юзернейм (о подписках я расскажу чуть позже).
Дальше снова идут настройки протокола:
"Шифрование" - выбираем что-нибудь что начинается с "2022", вариант по умолчанию вполне неплох;
"Пароль" (ключ) панель сгенерирует автоматически с правильной длиной для выбранного метода шифрования.
Нажимаем "Создать" и на этом настройка для Shadowsocks закончена, им уже можно пользоваться.
примечание:
SS
включить:
протокол: shadowsocks порт IPO: 81.35.155.2 Порт: 51258 Общий расход (GB) О: О Дата окончания О
v Клиент
Telegram ID О:
ограничение по IP О О
Общий расход (GB) О: О
Начать со времени первого подключения: Д
Дата окончания О
Шифрование:	2022-blake3-aes-256-gcm
Теперь переходим к настройке VLESS с XTLS-Reality. Тут все будет чуточку сложнее, но в целом так же просто.
"Remark" (Примечание) - любое название;
"Протокол" - "vless",
"Listening IP" ("Порт IP", который на самом деле не порт, а адрес) - оставляем пустым, либо задаем вручную если надо;
"Порт" - вместо рандомного ставим 443;
Добавить пользователя
X
примечание: Reality	включить:
протокол: vless порт IP О:
Порт:	443
Общий расход (GB) ©: О Дата окончания О
v Клиент
Email : О t3882vbj
ID: О 17caff16-859a-4f 14-ea9e-995f 1 delcb09 Subscription©: О userl Telegram ID©: ограничение no IP ©:
Flow: xtls-rprx-vision
Далее переходим к настройкам клиента.
"Email" - как в и в прошлом пункте, лучше указать что-то человекочитаемое и понятное. Важно: пользователи разных подключений не могут иметь один и тот же емайл (например, наш новый VLESS и старый Shadowsocks созданный в предыдущем пункте), поэтому можно добавить какой-нибудь префикс (например user1vl) для избежания конфликтов.
"Subscription" - тут наоборот, лучше будет если текст в этом поле будет совпадать с тем, что вы задали для Shadowsocks (подробности ниже). Внимание: в отличие от 3X-UI, в X-UI поле Subscription по умолчанию не отображается, нужно сначала активировать функционал подписок в настройках панели.
"Flow" - надо выбрать "xtls-rprx-vision". Обратите внимание, поле Flow (см. скриншот) появится только после того, как чуть ниже вы поставите галочку на пункте "Reality". То есть лучше всего настривать так: сначала ставите галочку Reality, а потом заполняете поля с настройками пользователя.
Дальше у нас идут настройки транспорта:
"Reality" - как уже сказано выше, должно быть активно;
"XTLS" - наоборот, должно быть неактивно (это немного запутывает, не смотря на то, что Reality тоже относится к XTLS, здесь под XTLS подразумеваются только устаревшие версии протокола, и галочки "XTLS" и "Reality" в панели являются взаимоисключающими);
"uTLS" - по умолчанию "firefox", я обычно выбираю "chrome", по факту особо без разницы (главное чтобы не "android", могут быть проблемы с клиентами);
"Домен" - на самом деле это не домен, а адрес для подключения к вашему серверу. Можно оставить пустым, тогда панель автоматически подставит IP-адрес или домен, по которому вы обращаетесь в панели на сервере.
"ShortIds" - панель сгенерирует рандомный ID;
"Public Key", "Private Key" - можно кликнуть на "Get new keys", и панель сама сгенерирует новые для вас;
"Dest" и "Server names" - вот это самое интересное, это домен, под который вы будете маскироваться. По умолчанию панель предлагает маскировку под yahoo.com и www.yahoo.com с переадресацией на yahoo.com:443, но лучше выбрать какой-нибудь другой домен, как описано в предыдущей статье;
Fallbacks: |
протокол передачи: TCP AcceptProxyProtocol:	HTTP маскировка:
TLS: СШ Reality©:	XTLS© СЖ
Show: uTLS: домен:
dest:	yahoo.com :443
Server Names: yahoo.com,www.yahoo.com Shortlds: c793166c Private Key:
Public Key:
E Get New Key
SAHNmwubAXnenKEAcJQURUUfucOXLaqi
Сохраняем введенную форму, и - всё! Настройка завершена.
После этого на странице видим примерно вот это:
Если тыкнуть на кнопочку "Меню" соответствующую нужному протоколу, можно его активировать/деактивировать, сбросить счетчики трафика, добавить пользователей (в том числе сгенерировать разом N аккаунтов по шаблону), и самое главное - раскрыв (плюсиком) список пользователей, можно посмотреть настройки подключения для вбивания в клиенты для этого пользователя.
Нажав на значок QR-кода, панель покажет QR-код, который можно отсканировать камерой в мобильных клиентах (v2rayNG или Nekobox на Android, Wings X/FoXray или Shadowrocket на iOS). Подробнее о клиентах читайте в этой статье.
ремарочка
Обратите внимание, v2rayNG и Nekobox из сторов основаны на старой версии XRay и еще не поддерживают Reality, нужно переключиться на бета-канал или устанавливать APK с гитхаба.
QR-код
X
Нажмите на QR-код, чтобы скопировать
Email: "t3882vbj”
vless://17caff16-859a-4f14-ea9e-995f1dc1cb09@81.35.155.2:443?type=tcp&security=reality&fp=chrome&pbk=zlFm5XMXSZes7LYQ7FiIzpl5faEaKwptPFB3pKFmB0A&sni=yahoo.com&flow=xtls-rprx-vision&sid=49eab435#Reality-t3882vbj,shadowsocks,3x-ui
Нажав на иконку информации (с буквой "i") можно посмотреть настройки для вбивания в десктопные клиенты, в том числе и URL, который можно скопировать и вставить.
Под дестоп я рекомендую Nekobox (есть под Windows, Linux и билды от сообщества для MacOS). Подробнее о клиентах читайте в этой статье.
Подробнее
X
протокол | viess j Адрес	I 81.35.155.2 j
Порт	| 443 |
reality: включено | reality домен:
протокол передачи
хост
путь
пусто
0
Клиент
id	| 17caff16-859a-4f14-ea9e-995fldc1cb09
flow	I xtls-rprx-vision I
email t3882vbj
статус
использование
0В/0В(0В)
Общий расход
I
краткая настройка Nekobox
Если вы раньше им не пользовались, нужно переключить его на использование движка sing-box, Preferences -> Basic Settings -> Core.
Далее копируем URL подключения в буфер обмена, в Nekobox нажимаем Server -> Add profile from clipboard - вжух, и у нас в списке добавилось новое подключение!
Сохраняем, кликаем правой кнопкой мыши на новый сервер в списке, жмем Start, и проверяем подключение выбрав там же Current Select -> URL test.
Если все нормально, то галочками "VPN Mode" или "System proxy" можно завернуть трафик всех приложений на прокси.
Там же вы можете найти "subscription URL". Это - специальным образом сгенерированный список подключений для клиентов. Помните, вы указывали "Subscription" при создании пользователя? При запросе по такому subscription URL, сервер выдаст список настроек (сервера, ключи) для всех подключений с этим ID в поле subscription. Многие клиенты (включая v2rayNG, v2rayN, Nekobox, и другие) умеют автоматически либо по запросу скачивать настройки с таких URL и добавлять их к себе - таким образом, если вы добавили какие-то новые протоколы или решили поменять конфигурацию, пользователи могут легко получить новые параметры с вашего сервера.
Внимание: в отличие от 3X-UI, в X-UI поле Subscription по умолчанию не отображается и вообще функционал подписок по умолчанию отключен, его нужно активировать в настройках панели.
Дополнительные настройки
В менюшках панели можно найти много интересностей, например, можно запретить клиентам качать торренты (если у вас на сервере не слишком широкий канал или есть лимит трафика), добавить фильтр доменов рекламных сервисов, запретить доступ к порносайтам (ума не приложу, кому вообще в жизни может понадобиться такая ужасная функция).
А еще можно заблокировать доступ через сервер к IP-адресам и доменам Ирана, Китая и России (Россия здесь в отличной компании, не правда ли?) - это нужно если вы по ряду соображений настроили на клиентах доступ к российским сайтам напрямую, и хотите заблокировать их на сервере чтобы случайно не вылезти в рунет через него из-за ошибок в настройках.
Отключить подключение к диапазонам 1Р-адресов Ирана
Измените конфигурацию, чтобы отключить подключение к диапазонам 1Р-адресов Ирана. Перезагрузите панель для применения настроек.
Отключить подключение к доменам Ирана
Измените конфигурацию, чтобы отключить подключение к доменам Ирана.
Про опцию запрета IPv6 для Google
При включенном IPv6 в TUN-режиме есть одна проблема. Nekobox (возможно другие клиенты тоже, не проверял) в качестве "внутреннего" IPv6 адреса использует адрес из такого зарезервированного диапазона (ULA), где они должны генерироваться рандомно, и вероятность случайного совпадения двух рандомных адресов ничтожна. То есть такой адрес должен быть уникальным, но в Nekobox он наоборот захардкожен один для всех случаев, и в итоге некоторые сервисы, которые могут каким-то образом получать и анализировать локальные адреса клиентов (например, Google с его телеметрией в Chrome и в Android), считают всех клиентов с таким внутренним адресом... одним и тем же клиентом, после чего матчат их то ли с геолокацией, то ли с другими внутренними адресами, то ли и с тем и с тем, и в итоге в ряде случаев все пользователи Nekobox (и возможно других клиентов) для Гугла выглядят как юзеры откуда-то из Ирана, Китая или Азербайджана, вплоть до того, что со временем Гугл начинает считать публичный адрес прокси-сервера тоже иранским/китайским/etc, и это приводит к довольно забавным эффектам.
Варианты решения: не использовать TUN-режим (он же VPN mode), либо в правилах маршрутизации запретить доступ до Google по IPv6, что и позволяют сделать некоторые форки X-UI.
Улучшения и баги
Сначала о паре багов.
При установке в Docker не получается посмотреть логи Xray, панель выплевывает ошибку. Иногда что-то подсмотреть и понять можно используя команду "docker logs 3x-ui", но там логи довольно куцые. Будем надеяться, что в следущих версиях это исправят (зарепортите им там кто-нибудь, а?).
Второй баг - не удается создать несколько inbounds с одним и тем же портом, но разными listening IP - панель ругается. Из-за этого, например, нельзя реализовать классическую схему с XTLS-Reality слушающем на 443 порту на IPv4-адресе, и VLESS+Websockets или VLESS+gRPC для работы через CDN (как запасной вариант) на IPv6 адресе. Опять же, будем надется, что авторы это когда-нибудь пофиксят.
Из того, что можно улучшить при конфигурации - по умолчанию панель слушает на чистом HTTP, без шифрования. Вариантов решения несколько:
Если у вас есть домен (даже бесплатный от no-ip, freenom, dynu), то можно установить certbot от letsencrypt, запросить сертификат для своего домена, положить его в папку ./certs (внутри директории, куда вы склонировали 3x-ui) или сделать туда симлинки, и указать путь к ключам в панели в виде /root/cert/privkey.pem и /root/cert/public.crt. Не забудьте добавить post-update hook для рестарта контейнера;
Другой вариант - поменять в настройках listen IP для панели на 127.0.0.1 - после этого панель станет недоступна "снаружи", но на нее всегда можно будет зайти с помощью SSH:
"ssh -L 8080:localhost:2053 your_server_ip" - тогда вбивая в браузере http://localhost:8080, подключение через SSH пойдет на локальный порт 2053 сервера, где и слушает ваша панель;
Третий вариант - повесить на сетевой интерфейс на сервере еще один "виртуальный" IP-адрес: прописать в /etc/network/interfaces что-то типа
iface lo:1 inet static
address 192.88.99.1
network 192.88.99.0
netmask 255.255.255.0
и настроить панель, чтобы она слушала только на нем. Тогда "снаружи" панель будет недоступна, но при подключении через Shadowsocks/VLESS-прокси вы сможете до нее достучаться по этому адресу.
Telegram
И занимательное на последок. Панель может работать как Telegram-бот :)
Сначала обращаемся к боту BotFather и просим его зарегистрировать нового бота:
'O' o ^ A a 67% 19:41
<-
BotFather •
bot
/newbot 19:40vi,
Alright, a new bot. How are we going to call it? Please choose a name for your bot.
19:40
Good. Now let's choose a username for your bot. It must end in 'bot'. Like this, for example: TetrisBot ortetris_bot.	19:40
19:41 Vi'
Sorry,
Он сгенерирует для вас API-токен. Его надо вставить в настройки панели, и там же указать ваш ID как админа (его можно запросить у бота userinfobot):
После этого можно разговаривать с панелью через Telegram - смотреть статистику, делать бэкапы конфигурации, и т.д.
'O' O * A a 67% 19:43
<-
bot
May 16
/Start i9:42
Hello^r %
Welcome to yourhostname management bot I can do some magics for you, please choose:
19:42
Server Usage	Get DB Backup
Get Inbounds	Deplete soon
Commands
__Hostname: yourhostname
i^X-UI Version: 1.4.6
^»IP:W. nb ■	172.17.0.1 172

Отличный комментарий!

Есть ещё паразитный вариант.
,GUTTERTONGUE,туториал,merfolk,скелет,кости
Мы не можем показать этот контент
Вероятные причины: копирастия или "запрещенная" тематика

Как незаметно прокачать английский язык и не страдать при этом

А сейчас я вам подробно расскажу, как прокачать высокий скилл английского языка. Но сначала несколько важных оговорок:
1. Я специально не использую слово "выучить". Потому что учить ничего не надо. Тупая зубрёжка слов, правил, времён, исключений и прочей хуеты ничего, кроме скуки и отвращения у вас не вызовет. Так что это не волшебный рецепт "Как выучить английский до Upper Intermediate за 5 недель". Это будет не 5 недель, а гораздо, гораздо дольше.
2. Дешёвого по затратам времени и ресурсов решения задачи прокачать язык -- не существует. Вы либо учите по классике на всяких там курсах по секретным методикам КГБ, сжигая нервные клетки от зачастую бесполезных усилий и через какое-то время получаете более-менее средний уровень, либо учите на позитиве и удовольствии, но займёт это в разы, а то и на порядки больше времени.
3. Я нихуя не лингвист, и даже не гуманитарий. Всё нижеизложенное это мой личный, уникальный опыт тотального непрофессионала в области языков, сложенный в том числе из непреодолимых семейных обстоятельств.
Биографический бэк, чтобы было понятно, с чего и как я начинал.
Суровые школьные годы
Всего в своей юности я сменил 6 разных средних школ. Первй класс (ещё в СССР) в специализированной средней школе с углублённым английским. Чему первоклассников учат на уроках английского, тем более в совке, можете себе представить -- там максимум алфавит, счёт до двадцати и базовая фонетика опять же алфавита, на этом всё. Это ни о чём вообще.
Потом я посрался с класручкой и перешёл в другую школу поближе к дому. Но она не была специализированной, и иностранный там начинался с 4-го класса (с 5-го для "прыжковых" потоков). Но это был французский. За полтора года в этой школе я кое-как насобачился составлять и произносить простые фразы из простых слов типа "меня зовут ололёша, а тебя?", но всё это выветрилось к хуям через год после того, как я ушёл и из этой школы. До сих пор помню только, как на французском читается "u", вот так:
,реактор образовательный,английский язык,самообразование,написал сам,гайд,туториал,делай как я,длиннотекст
Потом я седьмой класс отучился в сельской восьмилетней школе в глухих ебенях, где в моём классе были только я и три девки, которые меня нещадно пиздили просто потому, что я там был самый дохуя умный во всём, кроме иностранного языка. Но в этой школе был немецкий. На уроках которого я тупо и молча таращился на учителя, а остальные делали вид, что я пустое место.
Ещё год (восьмой класс) я чалился в ещё более другой школе, по соседству от той, где французский. Там был английский, но просвистев мимо уже 7 классов, я ровно нихуя не понимал, что вообще происходит и где мои вещи.
Следующий год (девятый класс) был опять в той самой сельской школе с немецким, где меня опять пиздили те же три девки по той же причине. Если тут самые глазастые обнаружили девятый класс в восьмилетней школе, спросите у своих предков, как это получилось. Середина 90-х, мы развлекались как могли.
И наконец два последних класса (10 и 11) я проторчал в так называемой "вечерке". Это, как бы помягче сказать, очень особенное место. Туда переводили две совершенно разные категории молодых людей -- либо тех, кто уже официально работал (как я), и не мог посещать обычную школу ни с утра, ни во вторую смену. Туда же переводили весь "тяжёлый" спецконтингент из обычных школ -- всяких там бандитов, проституток, наркоманов, беременных и прочее. Для такого спецконтингента программа двух лет (10-11 классы) была растянута на три (10-11-12 классы), куча предметов была исключена и занятия проводились четыре дня в неделю. Я, как опять же, самый дохуя умный (это было не сложно среди такой публики) перепрыгнул после 10-го класса сразу в 12. Но, вот незадача, иностранного языка в вечерке не было вообще, ни в каком классе.
Получив уникальный в своём роде аттестат об окончании 12-го класса, я оказался как тот квадратный трёхчлен, только не квадратный -- с хаотическими обрывочными воспоминаниями об английском, немецком и французском языках, не зная фактически нихуя по теории и грамматике.
Суровые университетские годы
(НТУУ "КПИ", если кому интересно, выпуск магистратуры 2003)
Не знаю, как сейчас, а тогда "обучение" английскому языку в этом ведущем техническом университете страны было полностью спрофанировано. То есть это не было и обучением даже, ни в каком смысле. Имея две мощнейшие кафедры английского языка, универ осилил отрядить к нам одну ветхую бабульку, которая нам задавала так называемые "тысячи". Тысяча (в смысле тысяча знаков) -- это рандомный фрагмент околотехнического текста на английском, который надо было при ней выборочно прочитать и выборочно перевести. Задания на следующее занятие выдавались в виде "подготовьте пять тысяч". Или семь, как её левая пятка захочет. И на этом всё. Совсем всё. Ахаха, при окончании магистратуры нам почему-то надо было сдавать кандидатский минимум, в том числе по иностранному языку. Блядь!
Но я сдал и сейчас объясню почему и как.
Путь просветления
Дело в том, что уже после окончания средней школы в моей мятежной душе поселилось глубокое недоверие ко всем организованным коллективным формам обучения иностранному языку. Проще говоря, я понял, что ни школа, ни универ, ни какие-то там курсы "...за 6 недель" не дадут мне ровно нихуя. И надо сжать очко в стальной кулак и ебашить самому.
Но на самом деле ебашить, не осознавая того, я начал ещё раньше, в далёком детстве.
Это был конец 80-х, мы... Ах, да. Большинство моих корешей во дворе выёбывались друг перед другом клонами Nintendo Game & Watch, известными любителям самого вкусного пломбира под именем "Ну погоди!" и прочего, пацаны с предками побогаче щеголяли Тетрисами "99 in 1", а вообще мажоры -- редкими в то время NES'ами.
Меня, хвала небесам, путь консоледрочерства миновал, так как батя притащил с работы уже более менее ПК -- продукт сумрачного беларусского гения, ЕСПЭВМ модели ЕС-1840.
И разумеется, я начал часами напролёт играть во все игры, какие батя только смог достать на радиорынке. Локализованных с английского хоть как-нибудь среди них почти не было. А те, что были, как бы это помягче сказать... Вот в оригинальной версии Sopwith В конце игры на экране всплывал титр THE END. А в "локализованной" каким-то остроумным умельцем версии -- "PIZDEC". Да, выглядели тогдашние аркадные воздушные бои
. В общем, приходилось пополнять словарный запас, как говорится, прямо в бою.
В первой половине 90-х я уже более-менее наигрался, потянуло в программирование. Пекарня появилась чуть помощнее, появился диалапный модем, но Инет был ещё слишком дорогой. Путь лежал в BBS и Fido. Чтобы хоть как-то расти в программиста, неизбежно приходится читать тонны документации, локализации которой по тем временам было ещё меньше, чем в игрушках.
К 1997 году, поступая в универ, я уже более-менее бегло мог прочитать практически любой технический текст на английском и понять о чём речь. И вообразил себя ниибацо крутым.
Но тут мир накрыло пиздой Джоан Роулинг и все ебанулись. И я тоже, хоть и не сразу, а только после того, как прочитал "Философский камень" в переводе на русский в бумажном виде. Дальше точно не помню, то ли на волне энтузиазма добрые люди спиздили оригинал "Тайной комнаты" прямо из типографии, то ли кто-то её в первый же день отсканил и распознал, но факт такой, что цифровая версия вот она, а перевод ещё даже не начинали. И я начал прогрызаться в этот ёбаный Chamber of Secrets, и едрить как же это было сложно поначалу. У литературного английского в художественных произведениях вокабуляр на порядок больше, чем в любом техническом тексте. Там у каждой поеботы есть своё устоявшееся и известное название, и достаточно раскидать правильные предлоги, кое где сыпануть глаголов с причастиями и хуяк -- технический текст готов.
Но худлит не таков. Особенно фэнтези, особенно с викторианско-викканскими замашками, и особенно -- написанный на британском английском. Но пасаран. Сижу до утра таращусь в текст, периодически переключая на CONTEXT и ProMT в сложных случаях и читаю, читаю, до упора, до отупения, пока глаза не начинают слипаться. И, о чудо -- с каждой следующей книгой необходимость лезть в словарь возникала всё реже. Я прочитал в оригинале все семь книг, причём "Дары Смерти" вообще на похуй, не глядя в словарь совсем, но уже вовсе не поэтому. Тут есть нюанс.
Начало 2000-х это бум домонетов и победное шествие широкополосного доступа по городам и сёлам. Диалапы с xDSLами уходят в историю, и меня тянет похакерствовать. Как в инете, так и в сетях X.25/X.28. Что, конечно же, требует чтения ещё большего количества всяких сугубо англоязычных доков, туториалов и логов, которые ещё и не всегда простым смертным доступны.
История этого периода заслуживает отдельного длиннопоста, поэтому я скипану пару лет и дам сразу вывод -- я еду в США на два года (2005-2006) работать в IT. Нет, не Кремниевая долина, упаси Аллах.
Майами Бич, детка
Сказать, что я очковал перед поездкой -- это ничего не сказать. Да, я чтением книг (не только ГП) и доков наработал себе охуенный словарный запас и уже мог влёт осилить любой текст. И более-менее сносно выразить свою мысль на письме. Но там же живые люди будут! С ними же надо будет РАЗГОВАРИВАТЬ! АААААА!!!!!
Пересадка в Скипхоле. Таможенный офицер что-то у меня спросил, но я, конечно же, нихуя не понял и кое-как пролепетал заранее заученное "please, speak slowly". Чел вошёл в положение и снизил темп речи до понятного мне. В общем, ничего страшного. Следующая пересадка в JFK. Эту ебанину размером в 20 квадратных километров надо было быстро-быстро пересечь почти из конца в конец минут за 40, чтобы успеть на следующий рейс. Куда бежать -- хуй знает, Скипхол-то маленький, там всё рядом и пешком, а тут внутри аэропорта даже своя отдельная электричка есть.
Бегу к будке с информацией, где дежурная бабка в отвёт на моё "speak slowly" кое-как втолковала куда двигаться.
Да, товарищи. Погружение в язык -- это, безусловно, самый эффективный способ поставить восприятие устной речи и наладить свою фонетику. Но как же это пиздец некомфортно бывает. Мне немножко повезло, так как в нашем офисе были мексы, австрийцы, один британец и всего парочку местных. Если б я прилетел куда-нибудь в Техас -- туши свет, кидай гранату. Начальник мой был из Техаса, они не разговаривают, они гудят и это гудение прерывается какой-то мешаниной звуков, должной изображать человеческую артикуляцию.
Также я для себя открыл двух самых страшных врагов для языкового погруженца -- это телефон и числительные. Телефон сильно режет частоты. Даже если ты уже долго общаешься с кем-то, более-менее привык к манере его речи -- всё равно, он тебе позвонит по телефону и ты нихуя не поймёшь, кроме отдельных слов. Бесит.
Числительные
Сука, я до сих пор путаю, как произносятся девять и восемь. Приходится каждый раз делать над собой мыслительное усилие, особенно после того, как я там познакомился с одной местной девушкой, и, когда дело дошло до секса, предложил ей 68 (шестьдесят ВОСЕМЬ, да). Там прямо культурный шок за всех предков от самого Мэйфлауэра на её лице отразился.
Вообще любые многозначные числа на слух воспринимаются гораздо труднее обычных слов, потому что у числительных нет фиксированной формы, к которой можно привыкнуть как бы откинуть её распознавание "в фон". Накладываются ещё местные особенности, например произносить номера годов, типа "1954" не через "тысяча девятьсот...", а "nineteen fifty four". Или считать четырёхзначные числа сотнями. 1700 это не "тысячу семьсот", а "seventeen hundred", но только если это не год. Не говоря уже о привычке местных совать свои сраные "dozen" (дюжины) куда ни попадя. Вот реально, он оценивая численность какой-то тусы, скажет не "пару десятков", а "few dozen".
Но это всё лирика, а теперь практика. Мне надо было как-то ставить произношение, учитывая что круг ежедневного общения у меня только из соседей по дому и сотрудников, а так-то я интроверт-сыч, конечно же, и в свободное время предпочитаю чиллить дома.
Что же делать?
Так вот, если вы попадёте в такую ситуацию, надо начать потреблять англоязычный контент с субтитрами на английском же языке.
ВАЖНО! ОЧЕНЬ ВАЖНО! Язык звуковой дорожки и язык субтитров -- должен быть одинаковым, именно тем, который вы пытаетесь у себя прокачать!
Я встречал немало долбоёбов, которые с пеной у рта рассказывали, как они включали русские субтитры с английской дорожкой (или наоборот) и им это якобы дохуя помогло. Нет. Это пиздёж! Это не работает!
Я подключил местное кабельное ТВ с сабами и начал смотреть по Discovery и History Channel практически всё подряд, что там шло. Тогда ещё состоялось моё знакомство с Mythbusters и я скачал и пересмотрел с сабами их всех. Туда же пошли Law&Order, Law&Order SVU, ну и по мелочам всякое.
И да, через примерно год я уже довольно бегло базарил с местными, даже с чёрными (но надо отметить, в тех местах у них специфический диалект не выражен).
Но как же...
Предвидя град тухлых помидоров на тему "обещал выдать рецепт прокачки языка на кухне, а сам в языковую среду свалил трепаться с нативами", я вам вот что скажу. С тех пор прошло уже более 15 лет. Количество доступного вам англоязычного контента с сабами увеличилось на порядки. Как и количество доступных книг на английском языке. Появились всякие сервисы, где можно найти носителя языка и попиздеть с ним. У меня не было и десятой доли возможностей, которая сейчас есть у вас, да и ехал я туда не за этим вообще.
Немного грусти перед выводами
Рано или поздно сказка заканчивается, и я вернулся домой. В моём окружении резко не осталось никого, кто владеет разговорным английским хотя бы на таком же уровне, как у меня. Без постоянной прокачки скилл начинает откатываться обратно, и нихуя с этим сделать нельзя. Когда я вернулся из Штатов, меня в одном тоже достаточно известном университете погнали на квалификационную комиссию, без прохождения которой не получится пройти конкурс на профессора. А там было собеседование на английском языке, с вроде бы как профессиональными филологами. Я эту комиссию вынес тогда с полупинка в дискуссии своим майамско-бичским акцентом, а сейчас бы уже не смог.
Кстати, тривия: как отличить того, кто жил во Флориде, от того, кто там не жил. Если жил, "Флорида" с ударением на "о", если нет -- то "и" (как и в испанском, откуда это слово).
Так вот, чтобы не растерять скилл, я не то, чтобы "занимаюсь ежедневно", нет, это просто стало такой вот жизненной привычкой -- каждый день просматривать час-два-три или сколько получится англоязычного контента с сабами. Не только фильмы или сериалы (кстати, хвала богам Рутрекера за то что там всегда есть оригинальные дорожки), но и Ютуб-каналы.
Продолжаю читать книги. Кроме ГП и HPMOR, я осилил His Dark Materials Пуллмана, весь Азимовский роботический цикл, весь Гиперион Симмонса (пиздец депрессивная нудятина), Сильмариллион и ещё много всякой мелочи. Читаю и ищу инфу только на английской Википедии, и не только из-за языка, кстати. И не только для поиска чего-то но и иногда просто несколько рандомных статей оттуда перед сном.
Тренировать произношение не перед кем, это очень хуёво. Было время я набрал себе аспирантов-иностранцев, но толку от них в этом смысле никакого -- в Нигерии английский вроде как государственный язык, но ну его нахуй, он разговаривал даже хуже чем американские негры.
Остаётся ещё ебошить писательский скилл, насколько это возможно -- я пишу приключенческое фэнтези, с магами, замками и, ебать их в сраку, героями. Готовые куски закидываю на Scribophile, и вот там сидят такие зубры, что могут доебаться до каждой запятой. Очень полезное место. 50+ страниц уже награфоманил и это только чуть меньше половины сюжета по плану.
Выводы
За всё это время, т.е. фактически за всю свою историю соприкосновения с английским, я так и не выучил ни одного ёбаного правила грамматики. Пишу и говорю на интуиции, и если спросят -- не смогу объяснить, почему так правильно, а так -- нет. Хуй его знает, почему. Я так ЧУВСТВУЮ, я так ПРИВЫК, они бы ТАК написали. Я в душе не ебу, почему "The little green men" правильно, а "The green little men" -- неправильно. Оказывается, потому, что в английском есть order of adjectives, по которому размер это третья позиция а цвет -- шестая и они должны идти по возрастанию. Вот вы наверняка даже не знали, что такое правило вообще существует (в славянских языках его нет, там прилагательные можно сыпать в любом порядке). И таких правил там дохуя, и если вы думаете, что можно ебануться головой, их все выучить и вы тогда "выучите язык" -- нет. Открыть рот и выдать фразу понятную нативам, это вам не поможет.
Итак, попробуем подытожить и систематизировать всё сказанное. Так сказать, TL;DR
Я разделяю скилл владения языком на четыре категории: чтение, письмо, устная речь, восприятие устной речи. Каждая из них прокачивается отдельно, но они также немного связаны друг с другом.
Чтение ===> Письмо
Восприятие устной речи ===> Устная речь

Работает это примерно так: прокачивая чтение, вы
а) расширяете словарный запас; любое ранее непонятное слово вы крепко запомните максимум после второго-третьего визита за ним в словарь;
б) подсознательно запоминаете типичные синтаксические конструкции, благодаря чему они потом на письме будут использоваться интуитивно;

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

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

В конце гонцов, это всегда годный повод понтануться.
Professor explaining the subject
Me trying to study on my own
Indian guy on Youtube explaining the subject,it-юмор,geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор,туториал,без перевода
Здесь мы собираем самые интересные картинки, арты, комиксы, мемасики по теме туториал (+131 постов - туториал)