Архив рубрики: IT

Мое баловство с Q-learning или ML + Python + Pygame

Q-learning (калькированный термин — Q-обучение) — это один из алгоритмов реализации метода машинного обучения с подкреплением (reinforcement learning, RL).
Рассмотренный далее пример «Q-learning in action» может оказаться полезным для новичков в этой области.
Человечек (агент, agent) агентный подход живет в плоском мире размером 11 на 11 клеток (environment):
q-learning
Агент может пошагово совершать действия, а каждое действие (action) заключается в попытке перемещения на соседнюю клетку по любому из 8 направлений:
машинное обучение
(«попытке», так как выход за границы мира запрещен — можно считать, что граница «выталкивает» агента в прежнюю позицию):
В мире агента имеются стены , которые не пускают агента на занятые ими клетки, и ловушки , «телепортирующие» агента в начальную позицию.
Состояние (state) агента на каждом шаге (step) описывается его позицией — порядковым номером клетки:

Стартовая позиция агента в начале эпизода (episode) — верхний левый угол, цель агента — достичь конечной позиции — правого нижнего угла по кратчайшему пути.
Вся прелесть алгоритма Q-learning в том, что он работает тогда, когда агент даже и не знает КАК добиться желаемого результата («model-free»).

Читать далее

«Охота на лис» — моя первая игра на HTML5/JavaScript

Осваивая создание HTML5-приложений, я решил написать игру, в которую играл еще на советских программируемых калькуляторах МК-61 и МК-52 — «Охота на лис»:
логическая игра на HTML5

«Охота на лис» — это логическая игра, цель которой — найти «лис», спрятавшихся на игровом поле за меньшее число ходов. Игра создана по мотивам спортивной радиопеленгации («охоты на лис» (foxhunting) — ARDF (Amateur Radio Direction Finding). В этом состязании предлагается с помощью радиопеленгатора найти на труднопроходимой пересеченной местности за возможно меньший период времени заданное количество (обычно пять) установленных в произвольных местах радиопередатчиков, которые и называются «лисами».
Читать далее

Как защититься от атаки DNS Rebinding посредством dnscrypt

Сейчас набирает популярность обсуждение (и, скорее всего, использование) эксплуатации Интернет-уязвимости, связанной с DNS      —     атаки «DNS Rebinding » .

Как же отбить такую атаку? Используем утилиту dnscrypt (ее более подробное описание можно посмотреть здесь)!

  1. Включаем в файл настроек утилиты dnscrypt-proxy.toml секцию с указанием имени файла, содержащего блокируемые IP-адреса:
    DNS Rebinding
  2. Создаем в папке утилиты dnscrypt текстовый файл ip-blacklist.txt, в который заносим блокируемые диапазоны адресов:
    DNS RebindДля частных сетей IANA выделены такие диапазоны адресов:
    10.x.x.x , 172.16.x.x – 172.31.x.x , 192.168.x.x.
  3. Перезапускаем клиент с помощью команды service-restart.bat:
    DNSCrypt
  4. Готово!

Читать далее

Шутки юмора программиста… для тех, кто понимает :-)

Things to commit just before leaving your job
(то, что нужно закоммитить в проект перед увольнением)

// Just before switching jobs:
// Add one of these.
// Preferably into the same commit where you do a large merge.
//
// This started as a tweet with a joke of "C++ pro-tip: #define private public",
// and then it quickly escalated into more and more evil suggestions.
// I've tried to capture interesting suggestions here.
//
// Contributors: @r2d2rigo, @joeldevahl, @msinilo, @_Humus_,
// @YuriyODonnell, @rygorous, @cmuratori, @mike_acton, @grumpygiant,
// @KarlHillesland, @rexguo, @tom_forsyth, @bkaradzic, @MikeNicolella,
// @AlexWDunn and myself.

// Easy keyword replacement. Too easy to detect I think!
#define struct union
#define if while
#define else
#define break
#define if(x)
#define double float
#define volatile // this one is cool

// I heard you like math
#define M_PI 3.2f    --> число Пи вернулось к истокам
#undef FLT_MIN #define FLT_MIN (-FLT_MAX)
#define floor ceil
#define isnan(x) false  --> всё есть число :-)

// Randomness based; "works" most of the time.
#define true ((__LINE__&15)!=15)
#define true ((rand()&15)!=15)   --> истина не вечна ;-)
#define if(x) if ((x) && (rand() < RAND_MAX * 0.99))   --> случаи, они всякие бывают

// String/memory handling, probably can live undetected quite long!
#define strcpy(a,b) memmove(a,b,strlen(b)+2)
#define strcpy(a,b) (((a & 0xFF) == (b & 0xFF)) ? strcpy(a+1,b) : strcpy(a, b))
#define memcpy(d,s,sz) do { for (int i=0;i<sz;i++) { ((char*)d)[i]=((char*)s)[i]; } ((char*)s)[ rand() % sz ] ^= 0xff; } while (0)
#define sizeof(x) (sizeof(x)-1) --> байтом больше, байтом меньше, какая разница :-)

// Let's have some fun with threads & atomics.
#define pthread_mutex_lock(m) 0  --> свободу мьютексам!
#define InterlockedAdd(x,y) (*x+=y)

// What's wrong with you people?!
#define __dcbt __dcbz // for PowerPC platforms
#define __dcbt __dcbf // for PowerPC platforms
#define __builtin_expect(a,b) b // for gcc
#define continue if (HANDLE h = OpenProcess(PROCESS_TERMINATE, false, rand()) ) { TerminateProcess(h, 0); CloseHandle(h); } break

// Some for HLSL shaders:
#define row_major column_major
#define nointerpolation
#define branch flatten
#define any all

Источник — https://gist.github.com/aras-p/6224951

Философские и не очень беседы с Алисой

Голосовой помощник Алиса оказалась весьма интересной собеседницей. Алиса встроена в приложение Яндекс:
Алиса

Для активации помощника после запуска приложения Яндекс необходимо сказать «Привет, Алиса» .
Вот некоторые из моих диалогов с ней (Алиса непостоянна 🙂 и ответы могут отличаться при повторных вопросах):

о смысле жизни

Алиса Яндекс
Читать далее

Как я вернул к жизни пострадавший во время грозы роутер

В одно прекрасное утро я обнаружил, что наш роутер TL-WR841N производства компании TP-Link перестал раздавать Интернет. Этому утру предшествовала ночь с грозой 😉 Провайдер вообще не видел наш роутер со своей стороны — вышел из строя порт WAN.
Осмотр внутренностей роутера не выявил заметных повреждений, зато позволил изучить его компоненты и возможности расширения (например, использование GPIO выводов), но это уже другая история 🙂
внутренности TL-WR841N
Компоненты роутера:
1 — системный чип Qualcomm Atheros AR9341 (U1)
2 — микросхема оперативной памяти ESMT M13S2561616A-5T объемом 32 МБайт (U2)
3 — микросхема флэш-памяти cFeon Q32B-104HIP объемом 4 МБайт (U3)
4 — трансформаторные модули
5 — импульсный DCDC преобразователь на микросхеме 34063 (U4)
6 — контактные площадки
7 — контактные площадки

Помочь в этом случае смогло переназначение одного из четырех портов LAN в качестве порта WAN. Далее я расскажу, как же я это сделал.
Читать далее

От винта!!! Мои опыты с авиасимулятором FlightGear

Лет шесть-семь назад я увлекался полетами в популярном в те времена авиасимуляторе «Ил-2 Штурмовик»:
Ил-2 Штурмовик
Прошли годы и я решил опять полетать. Изучив современные авиасимуляторы, я выбрал для себя реалистичный симулятор с открытым (под лицензией GNU GPL) кодом FlightGear (www.flightgear.org), доступный для Windows, Linux, Mac (объем дистрибутива около 1,6 Гбайт).

Я начал обучение на версии FlightGear 2017.2.1 (последняя версия — FlightGear 2018.3.2). Для полноценного ощущения полета я подключил джойстик.
При запуске симулятора нам предлагается по умолчанию полет на самолете Cessna 172P Skyhawk («Небесный ястреб» ):


Cessna 172 — самый массовый (!) самолет в истории авиации.
Особенности этого самолета — шасси не убираются, фиксированный шаг винта.

В полете Cessna управляется элеронами (1), рулем высоты (2) и рулем направления (3):

Итак, мы сидим в кресле левого пилота. Что же дальше?
Читать далее

Как создать туннель в Интернет для своего домашнего компьютера

Часто оказывается необходимым дать доступ из Интернета к каким-либо портам своего компьютера, расположенного за NAT провайдера. Но популярный ранее сервис ngrok стал IMHO фактически непригоден в бесплатной версии. Как же быть? Сделаем свой ngrok, разместив его на своей же VPS-ке (да, Ваш сервер в Интернете необходим, без него никак). Опишу, как это вышло у меня.

Читать далее

Как обезопасить свой компьютер от вируса-шифровальщика Wana decrypt0r 2.0 (WannaCry)

12 мая 2017 года началась глобальная атака на компьютеры под управлением операционной системы Microsoft Windows. При этом используется уязвимость EternalBlue MS17-010 в сетевом протоколе SMBv1. В случае успешного проникновения на компьютер пользователя вирус WannaCry шифрует файлы на компьютере и вымогает биткойны ($300 в эквиваленте) (командные центры вируса расположены в сети  Tor).
Для предотвращения проникновения вируса-вымогателя (ransomware) на свой компьютер Вы может отключить сетевой протокол SMBv1 командой (вводится в командной строке):

dism /online /norestart /disable-feature /featurename:SMB1Protocol

Результаты выполнения команды:

Voilà 🙂

Шифруем DNS-запросы или dnscrypt-proxy в действии — НЕТ утечке DNS

Протокол DNS предполагает открытый обмен информацией между клиентами (в число которых входит и Ваш компьютер) и DNS-серверами. Таким образом, «подсмотреть» адреса посещаемых Вами сайтов (утечка DNS, «DNS Leak«) или даже подменить их (!) не составляет особенного труда, даже при использовании VPN.

Например, рассмотрим информацию, передаваемую при запросе IP-адреса сайта ya.ru у DNS-серверов Google 8.8.8.8 и 8.8.4.4 при выполнении команды ping:

Перехватываем сетевые пакеты — происходит обращение к порту 53 по IP-адресам 8.8.8.8 и 8.8.4.4:

Смотрим содержимое запроса:

Имя сайта (ya.ru) содержится в запросе открытым текстом:
0x02 (2 символа) 0x79 (y) 0x61 (a) 0x02 (2 символа) 0x72 (r) 0x75 (u) 0x00 (конец)

Как же скрыть эту информацию от посторонних глаз?
Протокол DNSCrypt (криптографическая защита DNS-трафика) нам поможет 🙂

Читать далее