Обновить
512K+

Python *

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

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

Про сообщества программистов

Время на прочтение7 мин
Охват и читатели35K
Этот пост назревал долгое время, но последняя запись в блоге Йэна Бикинга Saying Goodbye to Python заставила-таки меня сесть и написать его. Он скорее личный, и наверное не очень интересный, но для меня важно, что бы он где-то сохранился.

Довольно просто забыть про всех тех людей, которые сделали вас тем, кем вы сейчас являетесь, зачастую даже не подозревая об этом. Через несколько дней я и Python будем вместе уже 10 лет. Я не помню конкретно день, когда я впервые скачал интерпретатор Python’a, но благодаря моей активной интернет-жизни можно составить некий список прошлых заслуг начиная с определенной точки.
Читать дальше →

Несколько полезных полей Django

Время на прочтение4 мин
Охват и читатели24K
Я работаю штатным программистом в Санкт-Петербургском Государственном Экономическом Университете и моей задачей с недавних пор является сопровождение деятельности отдела фото-видео производства (начинающее университетское телевидение). Как только начальник управления попросил всех зарегистрироваться в Bitrix24 с целью автоматизировать отчёты, я подумал об автоматизации входящих задач (на самом деле всё немного глубже и целью была дисциплина, но к посту не относится).

Собственно, первом делом я взялся за форму заявки на фото-видео съёмку, которую, недолго думая, набросал в Django. К этому моменту мои познания фрэймворка ограничивались несколькими представлениями для вывода списков на внутреннем сервере отдела. Основной сложность в форме стали внезапно поля — хотелось одновременно и красоту навести и от ошибок ввода пользователя уберечь(ся). Особенно интересовали меня два поля — поле ввода телефона и выбора времени. О них и речь.

Начну с поля для ввода телефона. Сначала я обратился к Хабру и нашёл некий пост, однако увиденное показалось мне слишком громоздким для моей цели (ведь мне надо было просто передать телефон оператору). Я понял, что использование CharField не приведёт ни к одной из моих целей и, пошуршав документацией Django, я нашёл там MultiValueField и MultiWidget в дополнение (сразу хочу сказать, что использование только MultiValueField порождает обычную строку для ввода текста, что никакого смысла не имеет). Через несколько минут был написан код под катом.

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

AES-128. Детали и реализация на python

Время на прочтение12 мин
Охват и читатели84K
Идея написать для себя что-то шифрующее родилась довольно тривиально — пришлось завести еще одну дебетовую карту и, следовательно, хранить в голове еще один пин-код. Хранить такую информацию в открытом виде паранойя не позволяет, использовать сторонние сервисы тоже, поэтому после некоторых поисков остановился на стандарте AES. Сразу захотелось разобраться и реализовать алгоритм самому, не прибегая к дополнительным модулям.

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

Внедрение зависимостей the Python way

Время на прочтение3 мин
Охват и читатели38K
Зачем нужно внедрение зависимостей? Оно уменьшает связанность компонентов в приложение и упрощает тестирование. У некоторых разработчиков есть мнение, что внедрение зависимостей нужно только в больших проектах и что оно сильно усложняет программы. Думаю, это исторически сложилось из-за популярный фрейморков вроде Спринга или Джуса в Джаве. Особенно из-за Спринга, который является невероятным комбайном.

Python-inject — это небольшая библиотека для внедрения зависимостей в Питоне. Третья версия написана в unix-стиле, т.е. она прекрасно выполняет только одну функцию и не пытается быть всем. В отличие от уже упомянутых Спринга и Джуса Инжект не ворует конструкторы классов у разработчиков, не навязывает разработчикам необходимость писать приложение в каком-то определенном стиле и не пытается управлять всем графом объектов приложения.

Инжект практически не требует конфигурации (об этом подробнее подкатом) и очень прост в использовании.
Например в тестах
# Возможные зависимости
class Db(object): pass
class Mailer(object): pass

# Внедряем зависимости в класс пользователя
class User(object):
    db = inject.attr(Db)
    mailer = inject.attr(Mailer)
    
    def __init__(self, name):
        self.name = name
    
    def register(self):
        self.db.save(self)
        self.mailer.send_welcome_email(self.name)


 # Используем в тестах inmemory базу данных и моки.
class TestUser(unittest.TestCase):
    def setUp(self):
        inject.clear_and_configure(lambda binder: binder \
            .bind(Db, InMemoryDb()) \
            .bind(Mailer, Mock()))
        
        self.mailer = inject.instance(Mailer)
    
    def test_register__should_send_welcome_email(self):
        # Пример теста.
        user = User('John Doe')
        
        # Регистрируем нового пользователя.
        user.register()
        
        # Должно отправиться письмо с приветствием.
        self.mailer.send_welcome_email.assert_called_with('John Doe')


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

Игровой движок Godot отдали в общественное пользование

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


Создатели движка Godot опубликовали исходный код под свободной лицензией MIT, так что теперь любой желающий может использовать его для создания собственных 2D- и 3D-игр. Авторы программы утверждают, что Godot предоставляет богатый набор функций и новый подход к разработке игр, что в совокупности «позволяет разработчикам-одиночкам и группам работать более эффективно, чем когда-либо». Они также отмечают простоту и лёгкость освоения программы: язык программирования похож на Python.
Читать дальше →

Python-digest #13. Новости, интересные проекты, статьи и интервью [31 января 2014 — 9 февраля 2014]

Время на прочтение3 мин
Охват и читатели15K
Эх, как знал, что чертова дюжина не хорошее число. В этот раз выпуск свежих новостей о python и близлежащих технологиях запоздал. Причиной тому завал на работе. На самом деле подготовка дайджеста даже с уже готовыми новостями занимает довольно продолжительное время. Придется перенести выпуски на субботу, чтобы я делал их спокойно и не случалось срывов как в этот раз.


Хочу сказать традиционное спасибо owlman75 за иллюстрацию к выпуску. Он пока readonly, но возможно опубликует интересную статью подходящую нашему дайджесту и получит от кого-нибудь приглашение. Говорят частенько это делает НЛО.

Самих статей на этой неделе не очень много. Все получающие PythonWeekly и PythonCoders не дадут соврать — там тоже не было ничего особо интересного. Хочу сказать, что информационный фон python-сообщества формируем мы сами — поэтому поддерживайте любимый ЯП: пишите статьи, афишируйте свои интересные проекты, экспериментируйте с новшествами.

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

Google Calendar, как бесплатный СМС гейт

Время на прочтение4 мин
Охват и читатели67K
Вы знали, что google календарь может отправлять СМС напоминания? Скорее всего, да. Я сам этим пользуюсь постоянно. А знали ли вы, что с помощью таких напоминаний можно сделать себе СМС оповещения? А вот можно. Эдакий персональный бесплатный СМС гейт. Я об этом когда-то давно читал, но тогда мне это нужно не было. Недавно понадобилось отправлять СМС оповещения от железки аля умный дом и я вспомнил об этом способе. Вспомнил, нашел готовый django модуль, реализующий его, и подключил к своему сайту. Работает! На все у меня ушло где-то пол часа. Но обо всем по порядку.
Читать дальше →

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

Время на прочтение4 мин
Охват и читатели33K
На хабре уже не раз поднималась тема изучения английского языка (пруф). Она рассматривалась с разных ракурсов. Кто-то писал, что не зачем учить слова, при изучении иностранного. Кто-то делился способами, коих великое множество, от простых карточек, до целой тетради, исписанной по самое не хочу. В конце концов есть LinguaLeo, так же замечательный сервис, на котором без дополнительной платы можно учить по 10 слов в день. Хотя иногда платить не хочется, а 10 слов кажутся весьма небольшим количество для молодого организма, который познает таинства и прелести иностранной мовы. Тогда возможно этот скрипт вам будет полезен.
Читать дальше →

Python на страже кошелька

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


Однажды забрел я на сайт мобильного оператора в поисках чего-нибудь интересного. Интересным оказалось только наличие большого количества разнообразных тарифных планов на любой вкус и цвет. Тут — низкий тариф внутри сети, там — тарификация по длительности звонка, а вот и фиксированная плата за звонок. В общем, маркетологи подзаработали на славу. На сайтах других операторов картина была похожая. Мне стало интересно, насколько мои расходы на мобильную связь изменились бы в зависимости от выбранного тарифа. Но одной только силы мысли оказалось недостаточно, чтобы проанализировать статистику звонков за последние месяцы и сопоставить их со всеми тарифами. Решив отложить это дело до лучших времен, нажимаю Alt+Tab и попадаю — правильно, в консоль с заголовком Python 2.7.5+ и манящим приглашением >>>
Итак, вызов принят!

Выпущен обновленный PyCharm 3.1 с поддержкой Python 3.4 и Django 1.6: что стало лучше?

Время на прочтение4 мин
Охват и читатели23K
Хотим поделиться радостью: мы только что выпустили PyCharm 3.1. Это — хоть и минорный, но все же наполненный новой функциональностью релиз PyCharm. Как вы знаете, PyCharm начиная с версии 3.0 доступен как в платном варианте PyCharm Professional Edition, так и в бесплатном с открытым исходным кодом — PyCharm Community Edition.

Загрузите PyCharm 3.1 прямо сейчас (и продолжайте читать, пока он загружается).

Новый PyCharm 3.1 теперь поддерживает последние версии Python 3.4 и Django 1.6. Мы не обошли вниманием и поддержку Google App Engine — она заметно улучшена. В PyCharm 3.1 также интегрированы улучшения, сделанные в последнее время в общей для всех наших IDE платформе — IntelliJ.

Что нового?


Поддерживается Python 3.4


image

PyCharm 3.1 поддерживает Python 3.4, включая новые стандартные библиотеки и последние новшества языка. Можно смело переключаться на новый интерпретатор и работать, наслаждаясь новыми фичами Python.
а еще?

Vim-крокет

Время на прочтение7 мин
Охват и читатели16K
Переводчик из меня совершенно никакой, но я просто не мог пройти мимо этой статьи, ибо она излучает волны крутости, а концентрация дзена в ней зашкаливает. Поэтому welcome.

Введение


Недавно я обнаружил интересную игру под названием VimGolf. Цель этой игры заключается в том, чтобы преобразовать кусок текста из одной формы в другую наименьшим возможным количеством нажатий клавиш. Пока я играл на этом сайте с разными пазлами, мне стало любопытно — а какие привычки редактирования текста есть у меня? Мне захотелось лучше понять способы манипулирования текстом в Vim и проверить, смогу ли я найти неэффективные моменты в моем рабочем процессе. Я провожу огромное количество времени в моем текстовом редакторе, поэтому устранение даже незначительных шероховатостей может привести к значительному увеличению производительности. В этом посте я расскажу о своем анализе и о том, как я уменьшил количество нажатий клавиш при использовании Vim. Я назвал эту игру Vim-крокет.
Читать дальше →

Простейший способ добавить WebSocket в Django

Время на прочтение4 мин
Охват и читатели30K
Примечение переводчика: вебсокеты и Django — это довольно сложная тема, которая уже не раз поднималась на хабрахабре и основной идеей является написание параллельного бэкенда для вебсокетов. Автор же предлагает довольно лаконичное решение этой проблемы, которому правда еще предстоит проверка временем.

TL;DR — Я пришел к очень простому решению для работы с вебсокетами в Django. Все что вам нужно — это установить django-websocket-request, запустить скрипт, и теперь ваше приложение поддерживает вебсокеты! Это решение заставляет Django думать, будто он получает нормальный (в какой-то мере) HTTP-запрос, поэтому оно будет совместимо почти со всем вашим существующим кодом. Решение работает нормально как с Django Rest Framework, так и с обычными функциями-представлениями и представлениями, основанными на классах (Class Based Views).
Читать дальше →

Python-digest #12. Новости, интересные проекты, статьи и интервью [24 января 2013 — 31 января 2014]

Время на прочтение3 мин
Охват и читатели13K
Итак, снова новости о Python и близлежащих технологиях. Сегодня много интересного о Wheels и пакетах в целом, MoviePy, AI для игр, русская документация по argparser и другое.

Огромное спасибо тем, кто прислал новости на инструмент для создания дайджестов и тем кто помог прикрутить к нему домен pythondigest.ru (inetava, vaal особенно). Он теперь наш как
минимум на два с половиной года. Спасибо огромное owlman за предоставленную иллюстрацию.

Обсуждение. Похоже что последнее время очень часто всплывает тема о пакетах модулей и управлении ими. Как думаете грянет ли революция на эту тему? Может кто-то предложит очень удобный инструмент, который заменит pip и PyPI, или возродится Anaconda? А как вы на своем предприятии организуете работу с пакетами? Какие критерии для вас важны в пакетном менеджере?

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

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

Построение модели SARIMA с помощью Python+R

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

Введение


Добрый день, уважаемые читатели.
После написания предыдущего поста про анализ временных рядов на Python, я решил исправить замечания, которые были указаны в комментариях, но при их исправлении я столкнулся с рядом проблем, например при построении сезонной модели ARIMA, т.к. подобной функции а пакете statsmodels я не нашел. В итоге я решил использовать для этого функции из R, а поиски привели меня к библиотеке rpy2 которая позволяетиспользовать функции из библиотек упомянутого языка.
У многих может возникнуть вопрос «зачем это нужно?», ведь проще просто взять R и выполнить всю работу в нем. Я полность согласен с этим утверждением, но как мне кажется, если данные требуют предварительной обработки, то ее проще произвести на Python, а возможности R использовать при необходимости именно для анализа.
Кроме этого, будет показано как интегрировать результаты выдачи работы функции R в IPython Notebook.
Читать дальше →

Python на колёсах

Время на прочтение7 мин
Охват и читатели133K
Инфраструктура системы пакетов для Python долго подвергалась критике как от разработчиков, так и от системных администраторов. Долгое время даже само комьюнити не могло прийти к соглашению, какие именно инструменты использовать в каждом конкретном случае. Уже существуют distutils, setuptools, distribute, distutils2 в качестве базовых механизмов распространения и virtualenv, buildout, easy_install и pip в качестве высокоуровневых инструментов управления всем этим беспорядком.

До setuptools основным форматом распространения были исходные файлы или некоторые бинарные MSI-дистрибутивы для Windows. Под Linux были изначально сломанный bdist_dumb и bdist_rpm, который работал только на системах, основанных на Red Hat. Но даже bdist_rpm работал недостаточно хорошо для того, чтобы люди начали его использовать.

Несколько лет назад PJE попытался исправить эту проблему, предоставив смесь из setuptools и pkg_resources для улучшения distutils и добавления метаданных в Python-пакеты. В дополнение к этому он написал утилиту easy_install для их установки. По причине отсутствия формата распространения, поддерживающего метаданные, был предоставлен формат 'яиц' [egg].

Python eggs – обычные zip-архивы, содержащие python-пакет и необходимые метаданные. Хотя многие люди, вероятно, никогда намеренно не собирали egg'и, их формат метаданных до сих пор жив-здоров. И все разворачивают свои проекты с использованием setuptools.

К сожалению, некоторое время спустя сообщество разделилось, и часть его провозгласила смерть бинарных форматов и 'яиц' в частности. После этого pip, замена easy_install, перестал принимать egg-формат.

Потом прошло еще немного времени, и отказ от бинарных пакетов стал доставлять неудобства. Люди всё больше и больше стали деплоить на облачные сервера, а необходимость перекомпиляции C-шных библиотек на каждой машине не слишком радует. Так как 'яйца' на тот момент были малопонятны (я так полагаю), их переделали в новых PEP-ах, и назвали 'колёсами' [wheels].
Читать дальше →

PyQt. Управляем памятью, собираем мусор

Время на прочтение6 мин
Охват и читатели21K
image
Давным давно был язык С. И были в нем 2 функции управляющие памятью — malloc и free. Но это было слишком сложно.
Посмотрел на это Бьёрн Страуструп и решил что нужно сделать все проще. И изобрел С++. В дополнение к malloc/free там появились new/delete, деструкторы, RAII, auto и shared указатели.
Посмотрел на это Гвидо ван Россум, и решил, что С++ тоже не достаточно прост. Он решил идти другим путем и придумал Python, в котором даже malloc и free нет.
А тем временем норвежские троли создали на С++ GUI-библиотеку Qt, которая упрощает управление памятью для своих объектов за счет того, что сама их удаляет, когда посчитает нужным.
Phil Thompson расстроился, что отличной библиотеки Qt нету для замечательного языка Python. И решил их объединить проектом PyQt. Однако, как оказалось, если скрестить разные парадигмы управления памятью, обязательно вылезут побочные эффекты. Давайте посмотрим какие…
Читать дальше →

Пишем мониторинг наличия билетов на РЖД

Время на прочтение3 мин
Охват и читатели38K
Не раз слышал от своих знакомых, что было бы неплохо увидеть сайт который будет мониторить наличие свободных мест на ржд. Про себя я думал — «да неплохо бы» и благополучно забывал, но пост заставил меня вспомнить навыки копи паста, которыми я владею в совершенстве и обернуть это дело в питонячий код. Сразу оговорюсь что именно про мониторинг будет во второй части, а в этой будет про то: как ходить на РЖД из питона, что это за загадочный sleep про который писали в предыдущем посту и как живется на Google App Engine. Итак приступим:
image
Читать дальше →

Четыре метода загрузки изображений с веб-сайта с помощью Python

Время на прочтение2 мин
Охват и читатели148K
Недавно пришлось по работе написать простенький парсер на питоне, который бы скачивал с сайта изображения (по идее тот же самый парсер может качать не только изображения, но и файлы других форматов) и сохранял их на диске. Всего я нашел в интернете четыре метода. В этой статье я их решил собрать все вместе.

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

Python-digest #11. Новости, интересные проекты, статьи и интервью [17 января 2013 — 24 января 2014]

Время на прочтение3 мин
Охват и читатели10K
Продолжаем собирать свежие новости, информацию о проектах, интересные статьи о python и относящихся к нему технологиях. В этот раз много статей на русском из блога Максима Никитенко, которые он сам прислал через форму добавления новости на инструменте для создания дайджеста.

Мобильная версия

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

Просьба! Мне бы хотелось перенести инструмент создания дайджеста на какой-нибудь более python-related домен. Может кто-нибудь поможет денежкой (600р. в год) или сам купит домен и делегирует на мой хостинг? Не хаброжители могут написать мне по этому поводу (да и любым другим) в скайп: alrusdi
На год уже есть спасибо inetava
И продление на второй год спасибо vaal

Опрос о рассылке. Прошел слушок, что из-за недостататочного количества плюсиков или секретной политики хабры дайджест не всегда попадает в мобильную ленту. Добавил в пост опрос нужно ли организовать почтовую рассылку с анонсом очередного выпуска.

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

Почему существует так много Питонов?

Время на прочтение9 мин
Охват и читатели146K
Питон изумителен.

Удивительно, но это довольно неоднозначное заявление. Что я имею ввиду под “Питоном”? Может, абстрактный интерфейс Питона? Или CPython, распространенная реализация Питона (не путать с похожим по названию Cython)? Или я имею ввиду что-то совсем иное? Может, я косвенно ссылаюсь на Jython, или IronPython, или PyPy. Или может я отвлекся так сильно, что говорю о RPython или RubyPython (которые очень сильно отличаются).

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

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

В этом посте я начну с нуля и пройдусь по разным реализациям Питона, а закончу подробным введением в PyPy, за которым, по моему мнению, будущее языка.

Все начинается с понимания того, чем на самом деле является “Питон”.
Читать дальше →