
Python *
Высокоуровневый язык программирования
Парадокс Питона (The Python Paradox)
В последнем выпуске подкаста "Цинковый прод" помимо всего прочего обсуждался так называемый парадокс Питона (The Python Paradox).
Как ни странно, на Хабре нет практически ни одного упоминания об этом парадоксе. При том, что, несмотря на свою простоту, мысль очень интересная
В далеком-предалеком 2004 году, когда язык Python был чем-то необычным, немейнстримовым, вышла статья Пола Грэма, в которой он поделился своим эмпирическим наблюдением: программисты на Питоне, которых он знает, гораздо сообразительнее, чем Java-программисты.
Монады за 15 минут
Вступление
На конференции YOW! 2013 один из разработчиков языка Haskell, проф. Филип Вадлер, показал, как монады позволяют чистым функциональным языкам осуществлять императивные по сути операции, такие, как ввод-вывод и обработку исключений. Неудивительно, что интерес аудитории к этой теме породил взрывной рост публикаций о монадах в Интернет. К сожалению, бо́льшая часть этих публикаций использует примеры, написанные на функциональных языках, подразумевая, что о монадах хотят узнать новички в функциональном программировании. Но монады не специфичны для Haskell или функциональных языков, и вполне могут быть проиллюстрированы примерами на императивных языках программирования. Это и является целью данного руководства.
Чем это руководство отличается от остальных? Мы попытаемся не более чем за 15 минут «открыть» монады, используя лишь интуицию и несколько элементарных примеров кода на Python. Мы поэтому не станем теоретизировать и углубляться в философию, рассуждая о буррито, космических скафандрах, письменных столах и эндофункторах.
Обман нейронной сети для начинающих

В рамках ежегодного контеста ZeroNights HackQuest 2018 участникам предлагалось попробовать силы в целом ряде нетривиальных заданий и конкурсов. Часть одного из них была связана с генерированием adversarial-примера для нейронной сети. В наших статьях мы уже уделяли внимание методам атаки и защиты алгоритмов машинного обучения. В рамках же этой публикации мы разберем пример того, как можно было решить задание с ZeroNights Hackquest при помощи библиотеки foolbox.
DCF77: как работает система передачи сигналов точного времени?
Наверное многие, приобретающие часы или метеостанцию, видели на упаковке логотип Radio Controlled Clock или даже Atomic Clock. Это весьма удобно, ведь достаточно поставить часы на стол, и они через некоторое время автоматически настроятся на точное время.

Разберемся как это работает и напишем декодер на языке Python.
Исключения в Python теперь считаются анти-паттерном
Проблемы исключений
Трудно найти недостатки в том, с чем сталкиваешься каждый день. Привычка и зашоренность превращает баги в фичи, но давайте попробуем взглянуть на исключения непредвзято.
Исключения трудно заметить
Существует два типа исключений: «явные» создаются при помощи вызова
raise прямо в коде, который вы читаете; «скрытые» запрятаны в используемых функциях, классах, методах.Проблема в том, что «скрытые» исключения и правда трудно заметить. Покажу на примере чистой функции:
def divide(first: float, second: float) -> float:
return first / second
Функция просто делит одно число на другое, возвращая
float. Типы проверены и можно запустить что-то такое: result = divide(1, 0)
print('x / y = ', result)
Заметили? На самом деле до
print исполнение программы никогда не дойдет, потому что деление 1 на 0 – невозможная операция, она вызовет ZeroDivisionError. Да, такой код безопасен с точки зрения типов, но его все равно нельзя использовать. DHCP+Mysql сервер на Python

Целью данного проекта было:
- Изучение протокола DHCP при работе в сети IPv4
- Изучение Python (немножко более чем с нуля ;) )
- замена серверу DB2DHCP (мой форк), оригинал здесь, который собирать под новую ОС всё труднее и труднее. Да и не нравится, что бинарник, который нет возможности «поменять прям щас»
- получение работоспособного сервера DHCP с возможностью выборки IP адреса абонента по mac абонента или связке mac свича+порт (Option 82)
- написание очередного велосипеда (О! это моё любимое занятие)
- получение люлей про свою косорукость на Хабрахабр (а лучше инвайта) ;)
Результат: работает ;) Опробовано на ОС FreeBSD и Ubuntu. Теоретически код можно попросить работать под любой ОС, т.к. специфических привязок в коде как будто нет.
Осторожно! Дальше много.
Ловушка (тарпит) для входящих SSH-соединений
Tarpit — это порт-ловушка, который используется для замедления входящих соединений. Если сторонняя система подключается к этому порту, то быстро закрыть соединение не получится. Ей придётся тратить свои системные ресурсы и ждать, пока соединение не прервётся по таймауту, или вручную разрывать его.
Чаще всего тарпиты применяют для защиты. Технику впервые разработали для защиты от компьютерных червей. А сейчас её можно использовать, чтобы испортить жизнь спамерам и исследователям, которые занимаются широким сканированием всех IP-адресов подряд (примеры на Хабре: Австрия, Украина).
Мой путь от Python к Go — делюсь советами и ресурсами

От переводчика: перевели для вас статью Илада Леева о переходе с Python на Go. Статья будет полезна не только начинающим программистам, но и всем, кто так либо иначе интересуется Go.
Мне нравится Python. Этот язык был моим фаворитом последние пять лет. Он дружелюбный, эффективный, и его легко выучить. Используется практически для всего: от создания простых скриптов и веб-разработки до визуализации данных и машинного обучения
Постепенное «созревание» Go, обширное комьюнити и тот факт, что все больше компаний принимают этот язык на вооружение после успешных тестов, заставили меня обратить на него внимание и углубиться в литературу. Но этот пост не о том, что лучше — Python или Go: сравнений в сети огромное количество. По моему мнению, все зависит от области применения. Я собираюсь рассказать о том, почему выбрал Go, дав несколько советов и ссылок на полезные ресурсы для всех интересующихся темой.
Как я не стал специалистом по машинному обучению
Истории успеха любят все. И на хабре их достаточно много.
«Как я получил работу с зарплатой 300 000 долларов в Кремниевой долине»
«Как я получил работу в Google»
«Как я заработал 200 000 $ в 16 лет»
«Как я попал в Топ AppStore с простым приложением курса валют»
«Как я …» и еще тысяча и одна подобная история.

Это же здорово, что человек добился успеха и решил об этом рассказать! Читаешь и радуешься за него. Но большинство таких историй объединяет одно: ты не можешь повторить путь автора! Либо ты живешь не в то время, либо не в том месте, либо ты родился мальчиком, либо…
Я думаю, что истории неуспеха в этом плане часто бывают полезней. Тебе просто не нужно делать то, что сделал автор. А это, согласитесь, гораздо проще, чем пытаться повторить чей-то опыт. Просто такими историями люди обычно не хотят делиться. А я расскажу.
IT Global Meetup #14 Петербург
Весенний слет петербургских IT-сообществ стартует в субботу! На островках сообществ можно будет ознакомиться с их деятельностью и принять участие в активностях. ITGM — не форум, не конференция. ITGM — встреча, созданная самими сообществами со свободой действий, докладов и активностей.

Iodide: интерактивный научный редактор от Mozilla
Изучение аттрактора Лоренца, а затем редактирование кода в Iodide
В последние десять лет произошёл настоящий взрыв интереса к «научным вычислениям» и «науке о данных», то есть применению вычислительных методов для поиска ответов на вопросы, анализа данных в естественных и социальных науках. Мы видим расцвет специализированных ЯП, инструментов и методов, которые помогают учёным исследовать и понимать данные и концепции, а также сообщать о своих выводах.
Но на сегодняшний день очень немногие научные инструменты используют полный коммуникационный потенциал современных браузеров. Результаты дата-майнинга не очень удобно просматривать в браузере. Поэтому сегодня Mozilla представляет Iodide — экспериментальный инструмент, который помогает учёным составлять красивые интерактивные документы с использованием веб-технологий, всё в рамках итеративного рабочего процесса, который многим знаком.
Использование локальной директории с пакетами в Python уже сейчас
В Python 3.8 предлагается добавить альтернативу виртуальным окружениям — локальную директорию с пакетами PEP 582 Python local packages directory.
Данный PEP предлагает добавить в Python механизм автоматического обнаружения директории __pypackages__ и использовать её при импорте в качестве источника установленных пакетов. Директория __pypackages__ будет иметь больший приоритет при импорте, чем глобальные или пользовательские директории с пакетами. Это позволит исключить создание, активацию или деактивацию виртуальных окружений.
Вот так будет выглядеть в Python 3.8 структура пакета с использованием __pypackages__ :
foo
__pypackages__
3.8
lib
bottle
myscript.pyВ статье я расскажу как использовать локальную директорию с пакетами не дожидаясь выхода Python 3.8.
Ближайшие события
Mountain Car: решаем классическую задачу при помощи обучения с подкреплением

Делаем современное веб-приложение с нуля
В этой статье мы попробуем набросать boilerplate простейшего веб-приложения со следующей архитектурой:

Что мы покроем:
- настройка dev-окружения в docker-compose.
- создание бэкенда на Flask.
- создание фронтенда на Express.
- сборка JS с помощью Webpack.
- React, Redux и server side rendering.
- очереди задач с RQ.
Как побывать в корейском университете с помощью Network File System

Предисловие
Давным-давно в начале 2000-х многие развлекались тем, что регулярно «сканировали» сети своего провайдера, а иногда и более далекие цели на предмет обнаружения Windows машин и ресурсов на них (SMB), доступных на чтение (запись). Процесс поиска был примитивен: задавался диапазон IP-адресов или маска сети и посредством различных инструментов — LANguard Network Scanner, xIntruder и подобных — сканировались адреса и находились сервера. Зачастую на обнаруженных машинах оказывались доступными на чтение, реже на запись, различные сетевые ресурсы (диски, принтеры, директории). Через анонимную сессию посредством IPC$ и пользователя «Guest» удавалось перечислять ресурсы на машине, иногда находились члены «Administrators» без паролей, а иногда, после более «активного» воздействия в отношении обнаруженных машин, удавалось найти сервера с ОС Windows NT 4.0 или Windows 2000 Server. Если удача соблаговолила обнаружить машины с распространенной тогда Windows 98, то становилось проще — в те времена в указанной ОС содержалось множество разных уязвимостей, в том числе в реализации работы с SMB, брутфорс для получения доступа к ресурсу осуществлялся за считанные минуты даже на dial-up соединениях. Для желающих окунуться в старину здесь подробно написано про «доступ» к Windows 9x — Hacking Exposed: Network Security Secrets & Solutions. Chapter 4: Hacking Windows 95/98 and Me. Но далее в статье речь не об этом.
Приватные методы без нижнего подчеркивания и интерфейсы в Python

Привет, Habr. Недавно угорел по дизайну — модификаторам доступа и интерфейсам, потом перенес это на язык программирования Python. Прошу под кат — делюсь результатами и как это работает. Для заинтересовавшихся в конце статьи есть ссылка на проект на Github.
Как в Kiwi.com тестируют 1000 проектов на Python
Это название доклада Alex Viscreanu на Moscow Python Conf ++. До выступления еще две недели, но я, конечно, уже обо всем расспросил Алекса и под катом поделюсь спойлерами и бэкстейджем подготовки доклада: что это за опенсорсный Зоопарк такой, что он делает с нашим Python кодом и чем отличается от mypy сотоварищи.
— Расскажи немного о Kiwi, чем ты занимаешься в компании?
Kiwi.com — онлайн турагентство с секретным соусом. Компания основана в Чехии в 2012 под названием Skypicker, а в 2016 сервис сменил название и переехал на Kiwi.com. Сейчас Kiwi.com в пятерке крупнейших агрегаторов авиабилетов в Европе.
Классная фича Kiwi.com для пользователей в том, что мы находим варианты стыковок для рейсов авиакомпаний, которые обычно не работают вместе, и берем на себя решение всевозможных проблем при стыковке.
Чтобы вы оценили наши масштабы, вот цифры о Kiwi.com: 90 000 000+ ежедневных поисков, 25 000 ежедневно продаваемых мест и более 15 000 000 000 доступных комбинаций рейсов.
10 шагов к успешному Python-проекту

Подборка @pythonetc, февраль 2019

Это девятая подборка советов про Python и программирование из моего авторского канала @pythonetc.
Предыдущие подборки.
Сравнение структур
Иногда при тестировании бывает нужно сравнить сложные структуры, игнорируя некоторые значения. Обычно это можно сделать, сравнивая конкретные значения из такой структуры: