Старое русло Ипути в Шабринском лесу

На весенних снимках (сервиса Яндекс.Карты) леса между Гомелем и Добрушем (Шабринский лес) среди вечнозеленых хвойных лесов заметны темно-коричневые характерно изгибающиеся полосы, примыкающие к Ипути:

Вот как они выглядят в более крупном масштабе:

Ширина некоторых полос достигает полутора сотен метров:
русло Ипути

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

Читать далее

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

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

Как защититься от атаки 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. Готово!

Читать далее

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

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

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

Мое баловство с 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»).

Читать далее

Палеорусла рек в окрестностях Гомеля или Днепр впадал в … Десну

По «обычным» спутниковым снимкам трудно оценить реальные размеры русла той или иной реки. В этом случае лучше использовать цифровую модель рельефа (DEM — digital elevation model). В качестве информации о рельфе местности можно использовать данные, полученные в ходе миссии SRTM (Shuttle Radar Topography Mission), выполненной шаттлом Эндевор (Endeavour) в феврале 2000 года. Результаты миссии содержат данные о высотах геоида EGM96 с разрешением в 1 угловую секунду (около 30 метров).

Данные цифровой модели рельефа были использованы для обнаружения русел палеорек в Египте , исследования палеорек в бассейне Амазонки , поиска древнего оазиса в Китае.

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

Вот как выглядит цифровая модель рельефа, на которой хорошо заметны русла/долины рек, для окрестностей Гомеля:

А вот как выглядят (палео)русла крупных рек:

Читать далее

Бабочки в нашем саду или моя фотоохота … на бабочек, стрекоз и пауков

Бабочки — украшение сада. Эти порхающие существа так хочется рассмотреть… Конечно, бабочек можно добыть посредством энтомологического сачка. Но гуманнее и интереснее ловить бабочек в объектив фотокамеры. Ниже я привожу результаты своей «фотоохоты» на эти милые создания (мои трофеи — 13 видов бабочек, 3  вида стрекоз и 1 вид пауков)..

Голубянки

Вот такую симпатичную бабочку я приметил летом на нашем участке:
голубянка икар
голубянка икар
(3 июня 2018 года)
фотографии бабочек
(9 августа 2017 года)

Как я смог определить, это бабочка из семейства голубянок (лат. Lycaenidae) и, скорее всего, вида голубянка икар (лат. Polyommatus icarus). Читать далее