Обновить
512K+

Python *

Высокоуровневый язык программирования

588,9
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Возможности Python 3, достойные того, чтобы ими пользовались

Время на прочтение5 мин
Охват и читатели46K
Многие программисты начали переходить со второй версии Python на третью из-за того, что уже довольно скоро поддержка Python 2 будет прекращена. Автор статьи, перевод которой мы публикуем, отмечает, что основной объём Python 3-кода, который ему доводилось видеть, выглядит как код со скобками, написанный на Python 2. По его словам, он и сам грешит чем-то подобным. Здесь он приводит примеры некоторых замечательных возможностей, доступных лишь тем, кто пользуется Python 3. Он надеется, что эти возможности облегчат жизнь тем, кто о них узнает.



Все примеры, приведённые в этом материале, написаны с использованием Python 3.7. В описании каждой возможности имеются сведения о минимальной версии Python, необходимой для её применения.
Читать дальше →

Криптография простым языком: разбираем симметричное и асимметричное шифрование на примере сюжета Звездных войн (Updated)

Время на прочтение14 мин
Охват и читатели57K
Привет всем читателям Хабра! Не так давно решил разобраться с алгоритмами шифрования и принципами работы электронной подписи. Тема, я считаю, интересная и актуальная. В процессе изучения попробовал несколько библиотек, однако самой удобной с моей точки зрения является библиотека PyCrypto. У неё прекрасная документация, сопровождаемая примерами.

image

После прочтения материала вы усвоите следующие моменты:

  1. Что такое шифрование;
  2. Чем отличается симметричное шифрование от асимметричного;
  3. В каком случае эффективнее применять симметричное, а в каких асимметричное шифрование;
  4. Что такое хеш данных и для чего он используется в шифровании;

Актуальность рассматриваемой темы постоянно растет. Применение криптографии уже давно не ограничивается шифрованием информации. Алгоритмы шифрования в том или ином виде ежедневно используется нами при посещении сайтов через протокол HTTPS, во время совершения покупок банковской картой, при общении в мессенджерах. Последние несколько лет широкое внимание привлекают блокчейн технологии, основой которых также является криптография.

Целью данной статьи является познакомить читателя с основными алгоритмами шифрования. При написании статьи, я постарался как можно большее внимание уделить вопросу практического применения. Для программирования использовался язык Python 3.6. При написании кода старался делить его на отдельные части и комментировать все ключевые моменты.

Подборка датасетов для машинного обучения

Время на прочтение6 мин
Охват и читатели204K
Привет, читатель!

Меня зовут Рушан, и я автор Telegram‑канала Нейрон. Не забудьте поделиться с коллегами или просто с теми, кому интересны такие статьи.

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

Меньше слов, больше данных.

image

Подборка датасетов для машинного обучения:


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

Бот для VK на Python с MySQL за час ч.2

Время на прочтение3 мин
Охват и читатели14K

Предисловие


Прошу извинения за то, что в первой статье не написал про работу с базой данных, но именно эта часть направлена на работу с MySQL.

3 часть будет неким дополнением, где мы рассмотрим работу с клавиатурой для бота и на этом цикл статей завершиться.

Подготовка


После прошлой статьи на руках мы должны иметь такой код:

import vk_api
from vk_api.utils import get_random_id
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
import pymysql.cursors
import requests

def get_connection():
    connection = pymysql.connect(host='you_host',
                                 user='you_user',
                                 password='you_password',
                                 db='you_db'
                                 charset='utf8mb4',
                                 cursorclass=pymysql.cursors.DictCursor)
    return connection

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

Классификация покрова земли при помощи eo-learn. Часть 2

Время на прочтение9 мин
Охват и читатели2.7K

Часть 1
Часть 3


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



Стек изображений небольшой зоны в Словении, и карта с классифицированным покровом земли, полученная, используя методы, описанные в статье.

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

Предварительная программа PyConRu-2019: два Python Core Developer’а, докладчики из Anaconda, Intel, JetBrains, Яндекса

Время на прочтение9 мин
Охват и читатели3.2K
Привет, Хабр!

24-25 июня в 95 км от Москвы пройдет седьмая российская конференция для python-программистов PYCON RUSSIA 2019.

Уже в программе: Raymond Hettinger (Python core developer, США), Michael Foord (Python core developer, Англия), Travis Oliphant (автор SciPy, NumPy, Anaconda, США), Antonio Cuni (PyPy core developer, Италия), Григорий Бакунов (Яндекс), Андрей Власовских (JetBrains), Кирилл Борисов (Booking.com), Вадим Пуштаев (Mail.Ru Group), Александр Хаёров (Chainstack), Иван Цыганов (Positive Technologies), Алексей Кузьмин (ДомКлик), Злата Обуховская (евангелист Moscow Python), Василий Литвинов (Intel). И это только предварительная программа.

Под катом — подробности программы.
Читать дальше →

Классификация покрова земли при помощи eo-learn. Часть 1

Время на прочтение6 мин
Охват и читатели3.6K

Привет, Хабр! Представляю вашему вниманию перевод статьи "Land Cover Classification with eo-learn: Part 1" автора Matic Lubej.


Часть 2
Часть 3


Предисловие


Примерно полгода назад был сделан первый коммит в репозиторий eo-learn на GitHub. Сегодня, eo-learn превратился в замечательную библиотеку с открытым исходным кодом, готовую для использования кем угодно, кто заинтересован в данных EO (Earth Observation — пр. пер.). Все в команде Sinergise ожидали момента перехода от этапа построения необходимых инструментов, к этапу их использования для машинного обучения. Пришло время представить вам серию статей, касающихся классификации покрова земли используя eo-learn


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

Реверс-инжиниринг клиента Dropbox

Время на прочтение12 мин
Охват и читатели11K
TL;DR. В статье рассказывается об обратной разработке клиента Dropbox, взломе механизмов обфускации и декомпиляции клиента на Python, а также изменении программы для активации функций отладки, которые скрыты в обычном режиме. Если вас интересует только соответствующий код и инструкции, пролистайте до конца. На момент написания статьи код совместим с последними версиями Dropbox, основанными на интерпретаторе CPython 3.6.

Введение


Dropbox очаровал меня сразу с момента своего появления. Концепция по-прежнему обманчиво проста. Вот папка. Кладёшь туда файлы. Он синхронизируется. Переходишь к другому устройству. Он опять синхронизируется. Папка и файлы теперь появились и там!

Объём скрытой фоновой работы на самом деле поражает. Во-первых, никуда не исчезают все проблемы, с которыми приходится иметь дело при создании и обслуживании кросс-платформенного приложения для основных десктопных операционных систем (OS X, Linux, Windows). Добавьте к этому поддержку различных веб-браузеров, различных мобильных операционных систем. И мы говорим только о клиентской части. Меня интересует также бэкенд Dropbox, который позволил достичь такой масштабируемости и низкой задержки с безумно тяжёлой рабочей нагрузкой, которую создают полмиллиарда пользователей.
Читать дальше →

GOSTIM: P2P F2F E2EE IM за один вечер с ГОСТ-криптографией

Время на прочтение29 мин
Охват и читатели11K
Будучи разработчиком PyGOST библиотеки (ГОСТовые криптографические примитивы на чистом Python), я нередко получаю вопросы о том, как на коленке реализовать простейший безопасный обмен сообщениями. Многие считают прикладную криптографию достаточно простой штукой, и .encrypt() вызова у блочного шифра будет достаточно для безопасной отсылки по каналу связи. Другие же считают, что прикладная криптография — удел немногих, и приемлемо, что богатые компании типа Telegram с олимпиадниками-математиками не могут реализовать безопасный протокол.

Всё это побудило меня написать данную статью, чтобы показать, что реализация криптографических протоколов и безопасного IM-а не такая сложная задача. Однако изобретать собственные протоколы аутентификации и согласования ключей не стоит.

Hearing

В статье будет написан peer-to-peer, friend-to-friend, end-to-end зашифрованный instant messenger с SIGMA-I протоколом аутентификации и согласования ключей (на базе которого реализован IPsec IKE), используя исключительно ГОСТовые криптографические алгоритмы PyGOST библиотеки и ASN.1 кодирование сообщений библиотекой PyDERASN (про которую я уже писал раньше). Необходимое условие: он должен быть настолько прост, чтобы его можно было написать с нуля за один вечер (или рабочий день), иначе это уже не простая программа. В ней наверняка есть ошибки, излишние сложности, недочёты, плюс это моя первая программа с использованием asyncio библиотеки.
Читать дальше →

Бот для VK на Python с MySQL за час ч.1

Время на прочтение3 мин
Охват и читатели29K
В интернете есть много туториалов как написать бота для Вконтакте, но все они имеют существенные недостатки для новичков. Они дают совсем минимальную базу из-за которой в будущем новичкам будет трудно понять как работают те или иные вещи.

В этом туториале я хочу показать как сделать максимально простого бота с довольно большим базовым функционалом.

Итак начнем.

Что нам понадобится?


  • Python начиная с версии 2.7 (Весь код тестировался на версии 2.7.16 и 3.7.3)
  • Модуль PyMySQL
  • Модуль vk_api
  • Модуль requests
  • Группа Вконтакте (Внимание! Бот будет работать именно со стороны группы, а не стороны аккаунта человека)
  • База данных (включая данные о пользователе и т.д)

Подключение


Для начала подключим все библиотеки:

import vk_api
from vk_api.utils import get_random_id
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
import pymysql.cursors
import requests

Теперь можно приступить к настройке бота и базы данных.

Именно в моем случае все данные находятся в файле config.py. Вы же можете прописать их где угодно. На функционал то никак не повлияет.

Подключение базы данных


Для этого создадим функцию при помощи модуля PyMySQL:


def get_connection():
    connection = pymysql.connect(host='you_host',
                                 user='you_user',
                                 password='you_password',
                                 db='you_db'
                                 charset='utf8mb4',
                                 cursorclass=mymysql.cursors.DictCursor)
    return connection

Эта функция будет возвращать данные для дальнейшей работы с базой данных. Соответственно подставляем свои данные где видим «you_».
Читать дальше →

Python — помощник в поиске недорогих авиабилетов для тех, кто любит путешествовать

Время на прочтение15 мин
Охват и читатели31K
Автор статьи, перевод которой мы публикуем сегодня, говорит, что её цель — рассказать о разработке веб-скрапера на Python с использованием Selenium, который выполняет поиск цен на авиабилеты. При поиске билетов используются гибкие даты (+- 3 дня относительно указанных дат). Скрапер сохраняет результаты поиска в Excel-файле и отправляет тому, кто его запустил, электронное письмо с общими сведениями о том, что ему удалось найти. Задача этого проекта — помощь путешественникам в поиске наиболее выгодных предложений.



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

Глубокая нейронная сеть MuseNet пишет музыку

Время на прочтение3 мин
Охват и читатели11K
У нас 29 мая стартует курс «Нейронные сети на Python», который рассказывает о глубоком машинном обучении и учит решать самые сложные задачи, находящиеся в ведении инженера по глубокому обучению. Чтобы показать, насколько интересна и многогранна работа в сфере машинного обучения, предлагаем ознакомиться с серией переводов статей на тему нейронных сетей на Python.



Что такое MuseNet


Мы создали и представляем вам MuseNet — глубокую нейронную сеть, которая может создавать четырехминутные музыкальные композиции с помощью десяти разных инструментов. MuseNet экспериментирует, сочетая разные музыкальные стили: от кантри до шедевров Моцарта и бессмертных хитов The Beatles.

В основу сети легко не наше восприятие и понимание музыки, а навык находить образцы гармонии, ритма и стиля в сотнях тысяч MIDI-файлов, а затем создавать собственные произведения. Нейросеть MuseNet использует ту же технологию, что и GPT-2 — масштабная модель обучена предсказывать наилучшие последовательности как в тексте, так и в аудио. Знание множества стилей позволяет сети создавать совершенно уникальные комбинации музыки разных поколений.
Читать дальше →

Еще более секретные Telegramмы

Время на прочтение7 мин
Охват и читатели38K

Все привыкли считать телеграм надежной и безопасной средой для передачи сообщений любого сорта. Однако, под капотом у него крутится совершенно обычная комбинация а- и симметричного шифрований, а это ведь совсем не интересно. Да и в конце концов, зачем вообще явно доверять свои сообщения третьей стороне?
КДПВ за авторством Antonio Prohías
TL;DR — изобретаем приватный скрытый канал через блокирования пользователями друг друга.

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

Ближайшие события

А не замахнуться ли нам на оптическую связь? Лазеры, космос, CubeSat

Время на прочтение8 мин
Охват и читатели6.9K

Материал, описанный ниже, является результатом совместной работы с преподавателями ТУ Ильменау в рамках местного курсового проекта (Advanced Research Project). Опыт интересный, но и не лишенный определенных сложностей. Делали мы этот проект (и ещё один) вместе с моей тогда ещё невестой — да, так вот нам повезло и учиться вместе, и поехать на стажировку в Германию. По правде сказать, эту часть работы делала в большей степени именно она, но популяризировать эту тему хочется мне.


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


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

Глубокое обучение с подкреплением: пинг-понг по сырым пикселям

Время на прочтение24 мин
Охват и читатели17K
Это давно назревшая статья об обучении с подкреплением Reinforcement Learning (RL). RL – крутая тема!

Вы, возможно, знаете, что компьютеры теперь могут автоматически учиться играть в игры ATARI (получая на вход сырые игровые пиксели!). Они бьют чемпионов мира в игру Го, виртуальные четвероногие учатся бегать и прыгать, а роботы учатся выполнять сложные задачи манипуляции, которые бросают вызов явному программированию. Оказывается, что все эти достижения не обходятся без RL. Я также заинтересовался RL в течение прошлого года: я работал с книгой Ричарда Саттона (прим.пер.: ссылка заменена), читал курс Дэвида Сильвера, смотрел лекции Джона Шульмана, написал библиотеку RL на Javascript, летом проходил практику в DeepMind, работая в группе DeepRL, и совсем недавно — в разработке OpenAI Gym, – нового инструментария RL. Так что я, конечно, был на этой волне, по крайней мере, год, но до сих пор не удосужился написать заметку о том, почему RL имеет большое значение, о чем он, как все это развивается.


Примеры использования Deep Q-Learning. Слева направо: нейросеть играет в ATARI, нейросеть играет в AlphaGo, робот складывает Лего, виртуальный четвероногий бегает по виртуальным препятствиям.
Читать дальше →

Расчёт каннибализации на основе классического A/B-теста и метод bootstrap’а

Время на прочтение12 мин
Охват и читатели21K
В данной статье рассмотрен метод расчёта каннибализации для мобильного приложения на основе классического A/B-теста. В данном случае рассматриваются и оцениваются целевые действия в рамках процесса реаттрибуции с рекламного источника (Direct, Criteo, AdWords UAC и прочих) по сравнению с целевыми действиями в группе, на которую реклама была отключена.

В статье дан обзор классических методик сравнения независимых выборок с кратким теоретическим базисом и описанием примененных библиотек, в т.ч. вкратце описывается суть метода bootstrap’а и его реализация в библиотеке FaceBook Bootstrapped, а также проблемы, возникающие на практике при применении этих методик, и способы их решения.
Читать дальше →

Вейвлет — анализ.Часть 1

Время на прочтение10 мин
Охват и читатели51K

Введение


Рассмотрим дискретное вейвлет – преобразования (DWT), реализованное в библиотеке PyWavelets PyWavelets 1.0.3. PyWavelets — это бесплатное программное обеспечение с открытым исходным кодом, выпущенное по лицензии MIT.

При обработке данных на компьютере может выполняться дискретизированная версия непрерывного вейвлет-преобразования, основы которого описаны в моей предыдущей статье. Однако, задание дискретных значений параметров (a,b) вейвлетов с произвольным шагом Δa и Δb требует большого числа вычислений.

Кроме того, в результате получается избыточное количество коэффициентов, намного превосходящее число отсчетов исходного сигнала, которое не требуется для его реконструкции.

Дискретное вейвлет – преобразование (DWT), реализованное в библиотеке PyWavelets, обеспечивает достаточно информации как для анализа сигнала, так и для его синтеза, являясь вместе с тем экономным по числу операций и по требуемой памяти.

Когда нужно использовать вейвлет-преобразование вместо преобразования Фурье


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

Должны ли строки в Python быть итерируемы?

Время на прочтение3 мин
Охват и читатели7.5K
И сотворил Гвидо строки по образу C, по образу массивов символов сотворил их. И увидел Гвидо, что это хорошо. Или нет?

Представьте, что вы пишете совершенно идиоматичный код по обходу неких данных с вложенностью. Beautiful is better than ugly, simple is better than complex, так что вы останавливаетесь на следующем варианте кода:

from collections.abc import Iterable

def traverse(list_or_value, callback):
    if isinstance(list_or_value, Iterable):
        for item in list_or_value:
            traverse(item, callback)
    else:
        callback(list_or_value)

Вы пишите юнит-тест, и что бы вы думали? Он не работает, причём не просто не работает, а

>>> traverse({"status": "ok"}, print)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in traverse
  File "<stdin>", line 4, in traverse
  File "<stdin>", line 4, in traverse
  [Previous line repeated 989 more times]
  File "<stdin>", line 2, in traverse
  File "/usr/local/opt/python/libexec/bin/../../Frameworks/Python.framework/Versions/3.7/lib/python3.7/abc.py", line 139, in __instancecheck__
    return _abc_instancecheck(cls, instance)
RecursionError: maximum recursion depth exceeded in comparison

Как? Почему? В поисках ответа вы погрузитесь в удивительный мир коллекций бесконечной глубины.
Читать дальше →

Ищем свободное парковочное место с Python

Время на прочтение14 мин
Охват и читатели68K
image

Меня зовут Рушан, и я автор Telegram‑канала Нейрон. Не забудьте поделиться с коллегами или просто с теми, кому интересны такие статьи.

Я живу в хорошем городе. Но, как и во многих других, поиск парковочного места всегда превращается в испытание. Свободные места быстро занимают, и даже если у вас есть своё собственное, друзьям будет сложно к вам заехать, ведь им будет негде припарковаться.

Поэтому я решил направить камеру в окно и использовать глубокое обучение, чтобы мой компьютер сообщал мне, когда освободится место:

image

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

Поэтому давайте немного развлечёмся и напишем точную систему уведомлений о свободной парковке с помощью Python и глубокого обучения
Читать дальше →

MU-MIMO: один из алгоритмов реализации

Время на прочтение5 мин
Охват и читатели8.8K

Предисловие


В качестве дополнения к моей недавней статье хотелось бы также поговорить о теме MU (Multi User) MIMO. Есть у мною уже упомянутого профессора Хаардта одна очень известная статья, где он вместе со своими коллегами предлагает алгоритм разделения пользователей по нисходящему каналу (Down Link) на основе линейных методов, а именно блоковой диагонализации (Block Diagonalization) канала. Статья имеет внушающее количество цитирований, а также является краеугольной публикацией для одного из заданий экзамена. Поэтому почему бы и не разобрать основы предлагаемого алгоритма?


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