Pull to refresh
14
0
Send message

Парный постмортем: как победить Ктулху и ещё 2000 человек

Reading time8 min
Views11K

Всем привет, меня зовут Оля. Две недели назад на CodinGame завершился очередной контест — соревнование по программированию ботов для игры. Я попала в топ-300 мирового лидерборда, поэтому хочу рассказать, почему контесты это круто, и поделиться своими секретами. А ещё секретами поделится Иван spaceorc, который попал в топ-100 того же соревнования.


Вы узнаете, как успешно выступать на соревнованиях по программированию игрового искусственного интеллекта.


Что такое CodinGame


codingame.com — обучающая платформа для разработчиков всех возрастов и уровней подготовки. Можно писать на 26 языках: от C# и Python до Bash и Haskell. Самое крутое, что задачки там не скучные и непонятные, а настоящие игры с неплохим GUI:


image

Как не только играть, но и побеждать...

Безразмерный воздушный шар. Утилитарная магия анализа размерностей

Reading time11 min
Views9.4K

На написание этой небольшой заметки меня натолкнула недавно опубликованная на Хабре статья Динамика вертикального полёта летательного аппарата легче воздуха. Захотелось написать комментарий, но он быстро перерос во что-то большее и, как кажется, более полезное.

В оригинальной статье приводится пример расчёта динамики воздушного шара или аэростата в атмосфере. При этом учитываются и сопротивление воздуха и градиенты плотности и температуры атмосферы, так что задача сводится к нетривиальному дифференциальному уравнению, которое благополучно решается численно средствами языка Python. В статье всё хорошо: шар взлетел, остановился, где надо, мы получили и предельную высоту и время подъёма. Потребовалось запустить другой шар, скажем, побольше, нагрузить его поосновательнее, или поменять водород на гелий – не проблема – поменяем параметры в программе и снова всё посчитаем. Программка понятная, линейная, работает, что же можно здесь улучшить, если не усложнять модель?

Можно сделать так, чтобы модель и расчёты стали универсально полезными не для какого-то конкретного шара, а для широкого круга задач. Можно обеспечить оптимальную точность вычислений при численном интегрировании дифференциального уравнения. Можно избавиться от необходимости вручную задавать пределы интегрирования и шаг при расчёте в широком диапазоне параметров. Наконец, можно многое рассказать о динамике полёта нашего шара и без численного решения. И для всего этого служит один давний приём, верный и надёжный, когда-то обязательный при любых расчётах на ЭВМ и до их появления, а сейчас факультативный и часто относимый к магии и искусству – приведение уравнений к безразмерному виду и собственным масштабам. Воспользуюсь задачей о воздухоплавании, как примером и покажу, насколько более осмысленным и изящным становится анализ задачи, при использовании этой техники. А потом объясню почему это может быть важным для программистов, и отчего эта статья попала в хаб «Функциональное программирование».
Читать дальше →

Амплитудная модуляция произвольного сигнала

Reading time4 min
Views11K
Как известно, АМ — вид модуляции, при которой амплитуда несущего сигнала изменяется по закону модулирующего (информационного) сигнала. Существует немало источников с теоретическим и практическим описанием АМ. Описание даётся, прежде всего, для того, чтобы показать частотный состав АМ сигнала. В качестве модулирующего сигнала обычно рассматривают однотональный сигнал. Данный сигнал задаётся простой функцией синуса. У меня всегда спрашивали, да и я задавался вопросом, как описать АМ на случай, если в качестве модулирующего сигнала будет произвольный сигнал. Именно произвольный сигнал, частотный спектр которого состоит из множества компонент, представляет интерес, так как АМ применяется в радиовещании для передачи звука.
Читать дальше →

Пронумеровать все действительные числа на отрезке [0,1]

Reading time3 min
Views14K
В качестве доказательства несчетности действительных чисел во всех учебниках по теории множеств приводится так называемый диагональный метод Кантора (подробнее можно ознакомиться в книге «Что такое математика?», авторы Курант, Роббинс, §4. Математический анализ бесконечного. 2. Счетность множества рациональных чисел и несчетность
континуума.). Данный метод доказывает несчетность подмножества действительных чисел, принадлежащих диапазону [0,1]. Однако, если присмотреться к доказательству, становится ясно, что оно не учитывает экспоненциальный рост возможных вариантов с каждым увеличиеним порядкового номера в десятичной дроби.
Читать дальше →

Коротко о Shadowsocks, или OpenVPN не нужен (в каждом доме)

Reading time6 min
Views330K
В наши дни, когда всякие нехорошие элементы так и норовят влезть в ваш трафик и как-то там напакостить, стало модным шифрование трафика. Начинание это благое и полезное, вот только делают его зачастую избыточно. Если шифрование трафика до доверенного сервера, типа своего VPS, — ваша единственная цель, то OpenVPN для такой цели слишком наворочен. Его долго настраивать, легко обнаружить, а главное — есть подводные камни, не зная которых можно получить такую ситуацию, что VPN стоит, а трафик идёт в обход. Всё это потому, что OpenVPN задумывался больше как средство доступа к маленькой сети через Интернет, а не для доступа ко всему Интернету.
Читать дальше →

Как спрятать DNS-запросы от любопытных глаз провайдера

Reading time16 min
Views250K

Настройка 1.1.1.1 от Cloudflare и других DNS-сервисов по-прежнему требует навыков работы в командной строке



Шифрование трафика между вашим устройством и DNS-сервисом помешает посторонним лицам отслеживать трафик или подменить адрес

Смерть сетевого нейтралитета и ослабление правил для интернет-провайдеров по обработке сетевого трафика вызвали немало опасений по поводу конфиденциальности. У провайдеров (и других посторонних лиц, которые наблюдают за проходящим трафиком) уже давно есть инструмент, позволяющий легко отслеживать поведение людей в интернете: это их серверы доменных имен (DNS). Даже если они до сих пор не монетизировали эти данные (или не подменяли трафик), то наверняка скоро начнут.

DNS — это телефонный справочник Сети, выдающий фактический сетевой адрес IP, связанный с хостингом и доменными именами сайтов и других интернет-служб. Например, он превращает arstechnica.com в 50.31.169.131. Ваш интернет-провайдер предлагает DNS в пакете услуг, но он также может журналировать DNS-трафик — по сути, записывать историю ваших действий в интернете.

«Открытые» DNS-сервисы позволяют обходить сервисы провайдеров ради конфиденциальности и безопасности, а кое в каких странах — уклоняться от фильтрации контента, слежки и цензуры. 1 апреля (не шутка) компания Cloudflare запустила свой новый, бесплатный и высокопроизводительный DNS-сервис, предназначенный для повышения конфиденциальности пользователей в интернете. Он также обещает полностью скрыть DNS-трафик от посторонних глаз, используя шифрование.
Читать дальше →

1000++ способ запуска команд на удаленном компьютере

Reading time6 min
Views215K


В наше время даже для собак придумали удаленное управление.


Возвращаясь к циклу «Конспект Админа», мне хотелось бы рассказать о вариантах запуска исполняемых программ на удаленных компьютерах. Эта статья будет интересна тем, у кого еще нет систем централизованного управления, но уже есть понимание утомительности ручного обхода рабочих станций и серверов. Либо тем, кому решения «под ключ» не интересны ввиду неспортивности.

Читать дальше →

«Computer, how is my build doing?» и другие волшебные заклинания

Reading time16 min
Views5.4K
Барух Садогурский рассказывает, как с помощью сервиса голосовых команд Alexa можно добавить голосовой интерфейс к совершенно неожиданным вещам, таким как IntelliJ IDEA и Jenkins, а также, откинувшись в кресле с бокалом любимого напитка, управлять всем, чем угодно.


В основе статьи – выступление Баруха на конференции JPoint 2017 в Москве.

Новая жизнь для XMPP. Делаем мессенджер, который не получится заблокировать

Reading time4 min
Views59K


Идея сделать независимый от корпораций P2P мессенджер не нова, однако разработка нового протокола и клиентских приложений для него достаточно дорогой и долгий процесс. А что, если использовать старый добрый XMPP, в котором уже все давно продумано и запилено?


Но это же не настоящий peer-to-peer, скажете вы, для работы XMPP нужен собственный сервер и домен. Это так, но мы можем запустить сервер на локалхосте, а для связи с серверами других пользователей использовать скрытый сервис в виртуальной сети I2P. Использование I2P избавит нас от необходимости платить за домен с хостингом, а так же защитит наши коммуникации от преступной онлайн-слежки.


Таким образом, получаем:


  • Гибридный P2P мессенджер, который можно запускать и на пользовательских устройствах, и на полноценном сервере.
  • Фичи, которых не хватает другим P2P мессенджерам: оффлайн сообщения, хранение контактов и истории "в облаке", работа нескольких клиентов с одним аккаунтом.
  • Готовые клиентские приложения на любой вкус.
  • За счет использования I2P, неуязвим для различных *надзоров (сори за мат).

Приступим же к реализации...

Читать дальше →

Дата-центр с интересной физической защитой

Reading time3 min
Views13K


Мы используем для своего облака дата-центр DataPro. Да, интегратор «Техносерв» строил дата-центры и серверные узлы, да, мы умеем это делать, да, у нас есть нужные инженеры в штате, но мы предпочитаем отдавать именно размещение на аутсорс. Почему? Потому что дата-центр в виде IaaS — это, очень упрощая, как холодильник или склад. Ничего романтического — просто место, куда надо поставить сервер. Охлаждение, питание, регламенты и всё остальное — это очень много компетенций, которые не нужны в облаке. Хранение чужих серверов включёнными — это отдельный бизнес.

Почему мы выбрали их? Потому что они параноики в классическом военном смысле. Например, никогда не зависят от одного вендора. Или вот давайте просто дойдём до нашего сервера и посмотрим, сколько раз нас по дороге остановят.

Сначала нас остановит забор с набором датчиков. Если его потрясти в любом месте или попробовать на него залезть, то сработает датчик вибрации, и сразу выдвинется патруль охраны.
Читать дальше →

Пишем небесных пчелок на Cloud Haskell

Reading time8 min
Views6.8K

Привет, Хабр!

Прошло всего лишь каких-то 11577635 секунд с конца осенней школы GoTo в ИТМО. Неделя направления Распределённых систем началась с прототипирования распределённой системы на Cloud Haskell. Мы начали бодро и потому быстро выяснили, что существующую документацию без PhD понять сложновато — и решили написать методичку.

Под катом введение в p2p cloud haskell, немножко функционального стека прототипирования РС, мотивация и «но зачем».
Читать дальше →

Тонкий бездисковый клиент на базе Ubuntu, не требующий монтирования ФС по сети

Reading time7 min
Views49K

UPDATE 2020-11-06 Теперь проект поддерживает Ubuntu 20.04 Focal Fossa (LTS) и появился готовый вариант для сборки с использованием VMWare Horizon, наряду с FreeRDP.


logo ubuntu and windows
Изображение с сайта getwallpapers.com


История


В далёком 2013 году в одном банке использовались тонкие клиенты на основе DisklessUbuntu. С ними были некоторые проблемы, по-моему монтирование корневой ФС по сети в больших филиалах со слабой сетью работало не очень. Тогда мой хороший друг @deadroot сделал первую версию тонкого клиента, который грузился целиком в память, не требуя что-то монтировать по сети для работы.


Потом этот клиент активно допиливал я, там было сделано много полезных штук, специфичных именно для нашего сценария использования. Потом банк закрылся (отозвали лицензию), остатки исходников клиента переехали на мой гитхаб: thunclient. Пару раз я его слегка допиливал на заказ.


Недавно у меня дошли руки сделать из этой кучи страшных ненадёжных скриптов достаточно удобное для использования решение:


  • Vagrant поднимает виртуалку, которую можно настраивать как обычную рабочую станцию.
  • Одним скриптом из неё собирается готовые для загрузки по сети файлы, лишнее вырезается.
  • Vagrant поднимает виртуальный PXE сервер и сетевой клиент для проверки получившейся сборки.
Читать дальше →

Cuckoo 2.0. Собираем лучшую open source платформу анализа вредоносных файлов

Reading time28 min
Views54K

Cuckoo Sandbox logo
Приветствую Хабр!


4 года назад я публиковал инструкцию по сборке платформы динамического анализа вредоносных файлов Cuckoo Sandbox 1.2. За это время проект успел обрасти внушительным функционалом и огромным комьюнити, недавно обновившись до версии 2.0, которая больше полутора лет висела в стадии Release Candidate.


Я наконец-то подготовил для вас полнейший мануал по сборке Cuckoo Sandbox 2.0.5 со всеми плюшками, какие есть в проекте на данный момент, с упаковкой Cuckoo в venv и без использования root, добавив более 12-ти security утилит в песочницу! По совокупности собранного материала, не побоюсь сказать: "Это самый полный и выверенный шаг в шаг гайд из всех опубликованных в интернете на данный момент". Тем кто, осилит статью до конца — дам маленький совет, что делать, когда песочница собрана и как получить максимальный профит с автоматизации процессов ИБ своими сиилами с помощью опенсорса. Всем гикам, вирусным аналитикам, безопасникам, ребятам из SOC, CERT, CSIRT и просто любителям потыкать кнопки в терминале — добро пожаловать под кат!

Читать дальше →

Система типов в математике

Reading time11 min
Views16K
Время от времени мне встречаются вопросы по математике, которые в каком-то смысле можно назвать «грамматически неверными».

Пример. «Интервал $[0, 1]$ является замкнутым или открытым?»
Пример. «Является ли $\{ 1, 2, 3 \}$ группой?»
Пример. «Каков ряд Фурье для $\sin x + \sin \pi x$

А вот ещё более глупые примеры.

Пример. «Является ли прямоугольник простым?»
Пример. "$17 \in 3$?"
Пример. «Каков ряд Фурье для пустого множества?»

Объединяет все эти примеры то, что они являются ошибками типизации: это попытки применения некого математического процесса к математическому объекту, который никак не может быть входными данными для него. Если для ответа на эти вопросы вы попытаетесь написать программу на каком-нибудь высоко математическом языке программирования, то она (я надеюсь!) не скомпилируется.

Математические объекты обычно не воспринимаются явно как имеющие типы в том же смысле, что и объекты в языках программирования с системой типов. Предполагается, что обычная математика должна формализироваться в системе Цермело — Френкеля (ZF), возможно, с аксиомой выбора, а в ZF каждый математический объект конструируется как множество. В этом смысле все эти объекты имеют одинаковый тип. (В частности, вопрос "$17 \in 3$" вполне логичен в ZF! И это одна из причин, по которой стоит не любить ZF в качестве основы для математики.) Однако, мне кажется, что на практике математические объекты неявно воспринимаются, как имеющие типы, и такой образ мышления математики усваивают, но не часто обсуждают.
Читать дальше →

На волнах эффекта Ли: Питонизируем генерацию DAF

Reading time7 min
Views5.5K
imageПо статистике 1-4 % населения Земли подвержены дефекту речи, характеризующимся частой пролонгацией звуков (слогов, слов) и/или частыми остановками в речи, нарушающими ритмическое ее течение. В простонародье этот феномен известен как заикание.

На данный момент мир не знает панацеи, на 100 % избавляющей от заикания, однако существует преинтереснейший метод, позволяющий с тем или иным успехом купировать это речевое нарушение у большинства заикающихся. Метод основан на эффекте Ли, заключающемся во влиянии задержки акустической слуховой афферентации на плавность речи, и носит название DAF (Delayed Auditory Feedback).

Ниже рассмотрим пример построения на коленке простого генератора речевой обратной связи силами Python и PyQt. У-у-ух, it's gonna be fun!
Читать дальше →

Браузер != Браузерный движок

Reading time8 min
Views53K


Всем привет!


В данной статье я хочу поделиться мыслями на счёт создания собственного браузерного движка. Мы рассмотрим текущие браузеры и браузерные движки. Вспомним про Modest и узнаем его нелёгкую судьбу.


Это будет цикл статей в которых мы создадим свой собственный минималистичный браузерный движок. Каждая статья будет подкреплена реальным кодом и примерами.
По прошествии десяти статей у нас с вами будет минимальная рабочая версия браузерного движка, сильно минимальная. После этого, если запал не уйдёт и будет интерес сообщества, продолжим, и в итоге доберёмся до JS.


И конечно, первым делом необходимо понять, что такое браузер и браузерный движок.

Приступим!

В защиту swap'а [в Linux]: распространенные заблуждения

Reading time14 min
Views165K
Прим. перев.: Эта увлекательная статья, в подробностях раскрывающая предназначение swap в Linux и отвечающая на распространённое заблуждение на этот счёт, написана Chris Down — SRE из Facebook, который, в частности, занимается разработкой новых метрик в ядре, помогающих анализировать нагрузку на оперативную память. И начинает он своё повествование с лаконичного TL;DR…

Читать дальше →

Объект в футляре или Optional в Java 8 и Java 9. Часть 2: «Как это делается в Java 8»

Reading time16 min
Views30K
Объект в футляре
Классу Optional посвящено немало статей и tutorials, в том числе этот и этот на Хабре.
Большинство из них рассказывают как вызываются методы этого класса. Я в этом tutorial делаю упор на то зачем, почему, в каких случаях можно (а скорее даже нужно) применять тот или иной метод класса. Я думаю, это очень важно, ибо как показал опрос после первой статьи этого tutorial, далеко не все Java — программисты вошли во вкус использования всей мощи методов этого класса.
Для лучшего объяснения методов класса я буду использовать более сложные и наглядные примеры, чем в большинстве других tutotials — кофеварку, фильтрационную установку, миксер и т.д.
Это вторая статья серии, посвящённая использованию класса Optional при обработке объектов с динамической структурой. В первой статье было рассказано о способах избежания NullPointerException в ситуациях, когда вы не можете или не хотите использовать Optional.
В этой статье мы рассмотрим все методы класса в том виде, как их предоставляет Java 8. Расширения класса в Java 9 рассмотрены в третьей статье этой серии. Четвертая статья посвящена необходимому (с точки зрения автора) дополнению к этому классу.
Ну а в пятой статье я рассказываю о том, где внутри класса следует применять Optional, подвожу итоги и дарю каждому читателю, дочитавшему серию до конца, ценный подарок.
Читать дальше →

Объект в футляре или Optional в Java 8 и Java 9. Часть 3: «Что добавилось в Java 9»

Reading time6 min
Views12K
Объект в футляре
Это третья статья серии, посвящённая использованию класса Optional при обработке объектов с динамической структурой. В первой статье было рассказано о способах избежания NullPointerException в ситуациях, когда вы не можете или не хотите использовать Optional.
Вторая статья посвящена описанию методов класса Optional в том виде, как он появился в Java 8.
Эта статья описывает методы класса, появившиеся в Java 9.
Четвертая статья посвящена необходимому (с точки зрения автора) дополнению к этому классу. Ну а в пятой статье я рассказываю о том, где внутри класса следует применять Optional, подвожу итоги и дарю каждому читателю, дочитавшему серию до конца, ценный подарок.
Читать дальше →

Information

Rating
9,228-th
Registered
Activity