- 5 невероятных пасхалок и скрытых возможностей в Windows 10
- «Звездные войны» в командной строке
- «Властелин колец»
- Порт 666 для Doom
- Режим бога
- Устаревшие функции
- Как смотреть Star Wars в командной строке и терминале прямо сейчас
- Как смотреть Звездные войны в командной строке через Telnet?
- На ПК с Windows:
- В Linux и OS X:
- Сетевики нужны и вот почему
- Чем Netcat лучше telnet?
- Linux MIB в помощь
- Диагностика сети с помощью системных вызовов
- Недооцененный резолвинг
- Многопользовательская игра на Go через telnet
- Выбор технологий
- Telnet
- Game design
- Игровой процесс
- Система повреждений
- Разработка
- Telnet
- Раунды
- Каналы
- FrameBuffer
- Визуализация
- Как поиграть?
- Бонус
5 невероятных пасхалок и скрытых возможностей в Windows 10
Традиция прятать в программах и играх так называемые пасхальные яйца появилась давно. Считается, что первая такая скрытая пасхалка появилась в игре Adventure 1979 года. С тех пор многие разработчики прячут отсылки и другие интересные вещи в своих программах и играх. Это, разумеется, не обошло стороной и Windows.
«Звездные войны» в командной строке
Невероятно, но в командной строке Windows можно посмотреть фильм. Конечно, не настоящий — а текстовый. Это так называемая ASCII-анимация.
Нажмите сочетание клавиш Win + R и введите команду OptionalFeatures.exe. Откроется окно «Компоненты Windows». Найдите пункт Telnet Client и поставьте галочку напротив. Нажмите ОК и, если понадобится, перезагрузите компьютер.
Теперь снова вызовите приложение «Выполнить» через Win + R. На этот раз введите команду telnet towel.blinkenlights.nl и нажмите Enter. Если все было выполнено правильно, то откроется окно командной строки. Вы увидите текстовую интерпретацию фильма «Звёздные войны. Эпизод IV: Новая надежда». Есть также и более продвинутая цветная версия, которую можно увидеть, если у вас используется протокол IPv6.
Вы также можете посмотреть ролик на сайте asciimation.co.nz.
«Властелин колец»
Кроме «Звездных войн», в Windows 10 можно увидеть отсылку и к другому не менее популярному фильму «Властелин колец». Зайдите в «Параметры», через сочетание Win + I или правый клик на кнопке «Пуск». Найдите «Специальные возможности», далее пролистайте вниз и выберите пункт «Скрытые субтитры».
Картинка, которая используется в качестве фона для предпросмотра субтитров взята именно из фильма Питера Джексона.
Порт 666 для Doom
Легендарный шутер Doom, вышедший в 1993 году, использовал порт 666 для сетевой игры. Изначально это, конечно, была пасхалка от Id Software, разработчиков игры. Но тем не менее порт до сих пор зарезервирован за игрой.
Убедиться в этом можно самостоятельно. Пройдите по пути C:\Windows\System32\drivers\etc. Откройте файл services в любом текстовом редакторе. Найдите порт 666 и посмотрите на название слева от него.
Режим бога
В Windows 10 можно войти в так называемый режим бога (англ. God Mode). Это даже не пасхалка, а скорее скрытая возможность. Создайте папку в любом месте и присвойте ей имя GodMode.
После этого значок папки должен измениться. Здесь в удобном виде собраны настройки системы. К слову, это не единственная секретная папка в Windows. Так, можно создать полнофункциональные папки «Этот компьютер» или «Корзина» в любом удобном месте. Нужно лишь знать идентификатор, то есть текст, который идет после точки. Список идентификаторов (GUID) доступен на сайте Microsoft.
Устаревшие функции
Забавная деталь, которая остается в системе еще со времен DOS. Вы не сможете назвать папку следующими именами: CON, PRN, AUX, LPT#, COM#, NUL, CLOCK$. В DOS эти названия были зарезервированы для устройств. Конечно, вам вряд ли это когда-либо может понадобиться. Но тем не менее интересно, что такие ограничения тянутся от самых первых версий операционной системы Microsoft.
Источник
Как смотреть Star Wars в командной строке и терминале прямо сейчас
Короткие байты: Перед тем, как отправиться в ближайший кинотеатр, чтобы посмотреть последний фильм «Звездные войны», вот что Мастер Йода хочет, чтобы вы сделали. Он хочет, чтобы вы открыли командную строку / терминал, введите несколько простых команд и наблюдайте за началом саги «Звездные войны» так, как вы никогда раньше не видели. Преуспевать! Да прибудет с тобой сила!
Я знаю, что вы смотрели все фильмы «Звездных войн» давным давно — несколько раз, в нескольких порядках — на вашем телевизоре, компьютере и в каком-то кинотеатре рядом с вами. Но, со всей шумихой вокруг только что выпущенного Звездные войны: пробуждение силы, имеет смысл пересмотреть оригинальную серию.
Но почему бы не попробовать посмотреть начало — Star Wars Episode IV — в командной строке вашего компьютера в виде анимированного текста? Я не буду называть это пасхальным яйцом, как это было со времен Windows XP, и вы можете сделать то же самое в более поздних версиях Windows (или любой ОС, поддерживающей telnet).
Некоторые другие терминальные трюки, которые вам понравятся:
Telnet — это сетевой протокол, но вам не нужно беспокоиться о более подробной информации. Итак, давайте сделаем это прямо сейчас и расскажем вам, как смотреть Star Wars в командной строке через Telnet прямо сейчас:
Как смотреть Звездные войны в командной строке через Telnet?
На ПК с Windows:
Более новые версии ОС Microsoft от Microsoft не включают Telnet. Не беспокойтесь, вы можете получить это прямо сейчас с помощью простой и понятной команды в командной строке.
Шаг 1: Просто откройте командную строку на вашем ПК, введите следующую команду и нажмите ↵ Enter.
pkgmgr / iu: «TelnetClient»
Если вы видите уведомление с запросом прав администратора, введите пароль администратора и подтвердите, чтобы продолжить.
Шаг 2: Теперь перезапустите командную строку, введите следующую команду и нажмите ↵ Enter.
В Linux и OS X:
Чтобы запустить фильм Star Wars ASCII на вашем компьютере с Linux или Mac, просто откройте приложение Terminal и запустите:
После знакомых титров, Эпизод IV Звездных войн начнет играть в персонажах ASCII. Вот несколько скриншотов:
Поделитесь с друзьями, если вам понравилась эта версия Star Wars?
Читайте также: 10 потрясающих игр для Linux на базе терминалов, которые вы должны знать
Источник
Сетевики нужны и вот почему
Картинка взята из телнет-видео «Звёздных войн»: telnet towel.blinkenlights.nl
Недавно был пост о том, нужны ли сетевики. До тех пор, пока проверка доступности tcp/ip порта кажется чем-то сложным даже для администраторов БД и AD, сетевики несомненно нужны. Они особенно полезны в тех случаях, когда необходимо понять почему так плохо работает некое клиент-серверное приложение ценой в пароход.
Иногда мало знать ping и traceroute для того, чтобы понять и устранить проблему в сети. Необходимо понимать как работают все звенья в цепи, а сделать это может лишь сетевик. Рассмотрим несколько таких примеров.
Чем Netcat лучше telnet?
Практически всегда, если речь идет о проверке TCP/UDP порта стараются сделать это через telnet и приходится всякий раз просить поставить Netcat. Есть несколько причин, по которым telnet сильно проигрывает. Вот основные причины.
- telnet не умеет различать причины недоступности порта. Все, или ничего — connect, либо fail. Netcat может подсказать, в чем проблема. В этом случае все просто, такого порта в состоянии LISTENING нет.
- Не умеет в UDP, SCTP и прочие, ничего кроме TCP.
- Не имеет опций тайм-аута соединения -w и проверки без подключения -z
Теперь не говорите, что вы не знали и закопайте поглубже telnet.
Если этот хост включен и пингуется, то дело скорее всего в файрволе, а telnet этого не покажет. На самом деле все немного сложнее и зависит от настроек файрвола, чаще всего заблокированные пакеты просто отбрасываются, но при желании можно применить другие политики.
Бытует мнение, что на Windows нет альтернативы telnet, однако это неверно. Существует штатная утилита Test-NetConnection, которую можно запустить из PowerShell.
Linux MIB в помощь
Если ваш сервер вдруг перестал реагировать на внешние раздражители и клиентские запросы стали провисать, не всегда причина в выдернутом сетевом кабеле, или зависших сервисах JBoss/Tomcat. Прежде, чем заводить кейс в тех-поддержку проверьте Linux MIB. Есть множество программ, выдающих статистику ядра Linux по внутренним счетчикам SNMP. Самая распространенная из них все еще netstat.
Первая утилита более дружелюбна к пользователю, однако показывает не все переменные. Вторая же показывает весь список, однако не содержит никаких подсказок. Подробнее про отличия здесь. SNMP подсистема Linux находится в несколько обветшалом состоянии, из-за чего нужно приложить некоторые усилия для того, чтобы понять смысл и назначение тех, или иных счетчиков. Для сетевика интерес может представлять buffer overrun.
Если сервер не справляется с сетевой нагрузкой и буфер сокета перманентно переполнен, тогда ядро будет просто сбрасывать все новые пакеты и счетчик будет расти на глазах. Чтобы исправить эту ситуацию, можно добавить некоторые настраиваемые параметры в файле sysctl.conf. Текущие значения можно увидеть из файловой системы /proc.
Три значения параметра tcp_rmem/tcp_wmem обозначает соответственно минимальное, пороговое и максимальное значение. По умолчанию величины выставлены довольно разумно, поэтому менять их без веских оснований не стоит. Чаще всего такая ситуация может возникнуть на сети с пропускной способностью 10 GiB/s. После сохранения изменений в файле sysctl.conf следует выполнить systcl -p. Эта команда запускает системный вызов setsockopt (SO_RCVBUF).
Следует отметить, что буфер setsockopt(SO_RCVBUF), установленный в приложении, будет ограничен значениями, установленными в net.core.rmem_default и net.core.rmem_max и если приложение имеет буфер размером 1 мб, но net.core.rmem_max составляет всего 256 кб, то буфер сокета приложения будет ограничен этим значением.
Диагностика сети с помощью системных вызовов
Для любого сетевика WireShark абсолютно необходимый инструмент отладки, иногда — главный. Не раз и не два только благодаря WireShark удавалось спасти проект в очень сложной ситуации. Но бывают случаи, когда только в системных вызовах ядра можно увидеть сетевую проблему.
В частности отброшенные пакеты нельзя будет увидеть в tcpdump, или WireShark. Зато можно их увидеть в режиме реального времени с помощью tcpdrop из сета bcc-tools. У команды нет никаких опций, просто выполните tcpdrop. Вывод состоит из сокета, статусе соединения и флагах TCP. Далее идет трассировка стека ядра, которая привела к этому сбросу пакета.
В bcc-tools имеется еще одна очень полезная утилита tcplife, которая показывает параметры TCP соединения, в том числе, длительность сеанса. У этой команды есть некоторые опции.
Просмотр сессий выглядит так.
Может так случится, что между клиентом и сервером расположен межсетевой экран, либо IPS/IDS с набором правил по обрыву длительности TCP сессии по прошествии определенного времени, или достижении некоего объёма трафика. В этом случае диагностика подобного кейса может затянутся неопределенно долго, так как находится в слепой зоне, как со стороны клиентского, так и со стороны серверного приложения. Единственный способ понять в чему тут дело, это использовать инструменты bcc-tools .
Недооцененный резолвинг
Еще одним слепым пятном во многих проектах по внедрению, интеграции различных комплексов автоматизации и повышения производительности, является система разрешения имен ОС. Большинство приложений могут работать с ошибками если не соблюдено следующее условие.
функции getnameinfo и getaddrinfo являются заменой устаревших gethostbyname и gethostbyaddr соответственно.
Если бы IP 93.184.216.34 указывал не на example.com, а на иной хост, то и это было бы ошибкой. Только тождество результат двустороннего разрешения имен гарантирует отсутствие ошибок настройки.
Вообще-то используя утилиту host следует помнить, что она так же, как dig и nslookup используют лишь DNS для разрешения имён хостов и игнорируют записи в файле /etc/hosts. По этой причине целесообразнее использовать команду getent.
Из вывода видно, что host не обращается к файлу /etc/hosts и по этой причине не в состоянии определить IP адрес маршрутизатора. Напротив, getent ищет в этом файле и находит соответствующую запись.
Источник
Многопользовательская игра на Go через telnet
Всем привет! Меня зовут Олег и я SRE. В какой-то момент мне захотелось улучшить свои навыки программирования на Go и написать маленькую многопользовательскую игру.
Заниматься веб-анимацией или писать приложение под мобильную платформу мне не хотелось, поэтому я решил в качестве клиента использовать любимый инструмент сисадминов — telnet.
Вот что получилось:
Выбор технологий
Telnet
Про приложения, использующие telnet, я слышал уже давно. Например, небольшой отрывок из «Звёздных войн»:
Но, почему telnet, спросите Вы? Ведь netcat намного круче и современнее добавят другие. Не все знают, но telnet — это не только утилита для установления TCP-соединения. Это целый протокол, который позволяет, например, отправлять на сервер введённые данные без нажатия Enter (line feed ANSII).
Поскольку мы хотим использовать стрелочки для управления машинкой и мы не хотим каждый раз нажимать Enter, чтобы отправить последовательность символов на сервер — telnet прекрасно подходит для решения подобной задачи.
Как вариант можно было использовать
но это, прямо скажем, костыль.
Почему Go? Помимо того, что я хотел подтянуть свои навыки, в Go есть Goroutines, которые идеальны для написания «многопоточных» приложений. А поскольку мы хотим чтобы много людей играло параллельно — причин не использовать Go не было.
Так же я не так давно прочитал вот эту статью и мне было интересно попробовать визуализировать Goroutines в приложении.
Game design
Игровой процесс
Игра представляет собой мультиплеер до 5 человек в раунде. Если количество игроков будет меньше — оставшиеся слоты будут представлены ботами.
Вам нужно, играя машинкой, выжить и уничтожить соперников. Игрок может собирать бонусы или разбрасывать бомбы, которые накапливаются с течением времени.
Система повреждений
Один из интересных и спорных моментов — система повреждений. Мы решили учитывать разницу в скорости и часть машины, на которую пришелся удар.
Скорость может варьироваться. При ударе она сбрасывается до 1. При безаварийной езде через некоторое время она увеличивается до 5.
Теперь рассмотрим ситуацию, когда один игрок догоняет другого и врезается в заднюю часть автомобиля. Формулы подсчета урона для игроков будут следующие:
То есть если игрок А двигался со скоростью 4 и его догнал игрок Б со скоростью 5, игрок А потеряет 2*(5-4) = 2. Однако, атакующий игрок потеряет 4*5 = 20.
Самым же сильным повреждением окажется удар сбоку DAMAGE_SIDE = 6 и может доходить до 24.
Разработка
Хочу ещё раз напомнить, что игра создавалась в качестве учебного упражнения. Если есть у Вас есть предложения по улучшению — с радостью их приму во внимание.
Исходный код находится на github, но давайте пробежимся по основным моментам:
Telnet
Как я уже упомянул, нам требуется поддержка telnet-протокола. Для этого на стороне приложения нам требуется «поздороваться» с клиентом при помощи последовательности байт:
и считать ответ (начинается с 250).
После этого telnet-клиент будет работать с поддержкой протокола, что нам и было нужно. Подробнее можно посмотреть в исходном коде.
Данные взяты из RFC854.
Раунды
Когда новый игрок подключается к игре, мы должны добавить его в раунд. Критерии могут быть самыми разными — для нас — просто наличие свободного места. Раундом здесь выступает массив игроков. Вся структура выглядит вот так:
Если недостаточно игроков — добавляем ботов.
Каналы
Каналы в Go являются очень удобным средством синхронизации между Gorountine. Мы их используем для подготовки раунда и распределению игроков:
Заметьте, что не требуется использование Mutex, несмотря на то, что данная функция выполняется в отдельных Goroutine. Каналы в Go не позволят Вам вычитать объект несколько раз, так что модификация одного объекта исключена в этом случае.
FrameBuffer
Все игроки без исключения должны получать полную информацию о происходящем в игре. Так давайте же отправлять всем одно и то же изображение. Изначально тип FrameBuffer был просто []byte, но в какой-то момент мы решили добавить Emoji, чтобы сделать игру красочнее. А поскольку каждый такой символ занимает больше 1го байта — по факту Symbols — это массив массивов байт.
Итак, вот примерный алгоритм генерации содержимого FrameBuffer:
- Копируем подготовленную заранее карту
- Добавляем данные игрока (здоровье, количество бомб. )
- Добавляем бонус и бомбы на карту (если есть)
- Добавляем машины
Искусственного интеллекта тут, конечно же нет. Но каким-то базовым действиям боты обучены:
- Преследовать игроков (не ботов)
- Если рядом есть бонус — собрать
- Если на пути препятствие (другой игрок) — объехать
В целом боты довольно надоедливые, так что играть становится интереснее.
Визуализация
Тут мы видим несколько каналов и целую пачку Goroutine, которые заведуют игровой логикой и каналы между ними через которые они обмениваются информацией.
Одно из основных кредо Go тут полностью соблюдено:
Don’t communicate by sharing memory, share memory by communicating.
Как поиграть?
К сожалению, на Windows какие-то проблемы с emoji в терминале. У меня не было достаточно мотивации разбираться, так как я пользуюсь MacOS и Linux. Но если кто-то знает режим совместимости или ещё что-то — буду рад совету.
Для всех остальных:
Бонус
Вообще-то — это вторая игра, написанная мною. Первая была однопользовательская, но тоже очень интересная:
Источник