
639.15
Общий рейтинг
Python *
Высокоуровневый язык программирования
Сначала показывать
Порог рейтинга
Уровень сложности
Простая напоминалка на Linux
5 мин
52K

Для людей, которые работают в офисе с персональным компьютером — бухгалтеров, инженеров, секретарей, менеджеров, специалистов, экспертов, начальников структурных подразделений и тем более директоров — сегодня обычным делом является сопровождать решение нескольких вопросов одновременно.
К примеру, звонит клиент и просит внести изменения в договор. Ты кладешь трубку — и тут звонит твой коллега и просит тебя направить ему давно забытый материал, который нужно еще постараться отыскать. Не успеваешь ты договорить с коллегой, как звонит на сотовый директор и просит составить ему небольшой отчет. А ведь до этого ты занимался своим вопросом! Нужно всё запомнить, ничего не упустить! Типичная ситуация, не правда ли?
Для того, чтобы все успевать в таких ситуациях, поможет простая напоминалка. Но что такое простая напоминалка? Каковы критерии ее простоты?
Для меня «простой напоминалкой» является та, которая действует по следующему принципу:
+26
Authomatic: python библиотека для аутентификации и авторизации
6 мин
42K
Практически любое веб-приложение предоставляет возможность авторизации пользователя с использованием учетной записи пользователя, в каком либо из известных социальных сервисов.Магия авторизации происходит строго по протоколу OAuth 1.0а и OAuth 2.0 и значительно упрощает жизнь и владельцу веб-приложения и самому пользователю.
Остается сущая мелочь, реализовать нужный протокол применительно к конкретному веб-приложению. Регистрация и вход в веб сервис TheOnlyPage с использованием учетных записей Facebook, Google, LinkedIn и Microsoft Live работают благодаря python библиотеке Authomatic.
Согласно документации Authomatic обладает следующими замечательными особенностями:
+27
Парсим на Python: Pyparsing для новичков
6 мин
191KПарсинг (синтаксический анализ) представляет собой процесс сопоставления последовательности слов или символов — так называемой формальной грамматике. Например, для строчки кода:
имеет место следующая грамматика: сначала идёт ключевое слово import, потом название модуля или цепочка имён модулей, разделённых точкой, потом ключевое слово as, а за ним — наше название импортируемому модулю.
В результате парсинга, например, может быть необходимо прийти к следующему выражению:
Данное выражение представляет собой словарь Python, который имеет два ключа: 'import' и 'as'. Значением для ключа 'import' является список, в котором по порядку перечислены названия импортируемых модулей.
Для парсинга как правило используют регулярные выражения. Для этого имеется модуль Python под названием re (regular expression — регулярное выражение). Если вам не доводилось работать с регулярными выражениями, их вид может вас испугать. Например, для строки кода 'import matplotlib.pyplot as plt' оно будет иметь вид:
К счастью, есть удобный и гибкий инструмент для парсинга, который называется Pyparsing. Главное его достоинство — он делает код более читаемым, а также позволяет проводить дополнительную обработку анализируемого текста.
В данной статье мы установим Pyparsing и создадим на нём наш первый парсер.
import matplotlib.pyplot as plt
имеет место следующая грамматика: сначала идёт ключевое слово import, потом название модуля или цепочка имён модулей, разделённых точкой, потом ключевое слово as, а за ним — наше название импортируемому модулю.
В результате парсинга, например, может быть необходимо прийти к следующему выражению:
{ 'import': [ 'matplotlib', 'pyplot' ], 'as': 'plt' }
Данное выражение представляет собой словарь Python, который имеет два ключа: 'import' и 'as'. Значением для ключа 'import' является список, в котором по порядку перечислены названия импортируемых модулей.
Для парсинга как правило используют регулярные выражения. Для этого имеется модуль Python под названием re (regular expression — регулярное выражение). Если вам не доводилось работать с регулярными выражениями, их вид может вас испугать. Например, для строки кода 'import matplotlib.pyplot as plt' оно будет иметь вид:
r'^[ \t]*import +\D+\.\D+ +as \D+'
К счастью, есть удобный и гибкий инструмент для парсинга, который называется Pyparsing. Главное его достоинство — он делает код более читаемым, а также позволяет проводить дополнительную обработку анализируемого текста.
В данной статье мы установим Pyparsing и создадим на нём наш первый парсер.
+34
ЛОЦМАН: Пишем свой WorkFlow-конфигуратор. Начало
5 мин
12KВведение
Я работаю в организации, которая начала внедрять ПО от компании АСКОН, если быть точным, то «Комплекс решений АСКОН 2013» (далее «Комплекс») + КОМПАС. Я занимаюсь администрированием этого «Комплекса». «Комплекс» имеет трехуровневую архитектуру (Клиент-Сервер приложений-Сервер БД). Ключевым продуктом «Комплекса» является ЛОЦМАН:PLM, также имеется набор утилит администрирования. Одна из утилит администрирования называется «ЛОЦМАН WorkFlow Конфигуратор» (далее WF-конфигуратор).

Рисунок 1 — ЛОЦМАН WorkFlow конфигуратор
В ходе работы были выявлены основные недостатки WF-конфигуратора:
- Нет русскоязычного поиска по ФИО, есть только по логину (причем только в виде домен\логин, кстати в «Центре управления комплексом», там где добавляются пользователи в систему, вообще нет никакого поиска...);
- При большом количестве пользователей (>1K) он стал ужасно тормозить (около 4 минут на операцию добавления пользователя).
Поскольку пользователей приходилось добавлять часто и много, пришлось придумать, как оптимизировать этот процесс.
+2
И еще раз о GIL в Python
9 мин
38KПредисловие
Область, в которой мне повезло работать, называется вычислительная электрофизиология сердца. Физиология сердечной деятельности определяется электрическими процессами, происходящими на уровне отдельных клеток миокарда. Эти электрические процессы создают электрическое поле, которое достаточно легко измерить. Более того оно очень неплохо описывается в рамках математических моделей электростатики. Тут и возникает уникальная возможность строго математически описать работу сердца, а значит — и усовершенствовать методы лечения многих сердечных заболеваний.
За время работы в этой области у меня накопился некоторый опыт использования различных вычислительных технологий. На некоторые вопросы, которые могут быть интересны не только мне, я постараюсь отвечать в рамках этой публикации.
+70
Патчим процессы в Linux на лету при помощи GDB
11 мин
15KТехники перехвата функций в Linux хорошо известны и описаны в интернете. Наиболее простой метод заключается в написании динамической библиотеки с «функциями-клонами» и использовании механизма LD_PRELOAD для переопределения таблицы импорта на этапе загрузки процесса.
Недостаток LD_PRELOAD в том что необходимо контролировать запуск процесса. Для перехвата функций в уже работающем процессе или функций отсутствующих в таблице импорта можно использовать «сплайсинг» — запись команды перехода на перехватчик в начало перехватываемой функции.
Также известно, что в Python имеется модуль
Недостаток LD_PRELOAD в том что необходимо контролировать запуск процесса. Для перехвата функций в уже работающем процессе или функций отсутствующих в таблице импорта можно использовать «сплайсинг» — запись команды перехода на перехватчик в начало перехватываемой функции.
Также известно, что в Python имеется модуль
ctypes позволяющий взаимодействовать с данными и функциями языка Си (т.е. большим числом динамических библиотек имеющих Си интерфейс). Таким образом ничто не мешает перехватить функцию процесса и направить её в Python метод обёрнутый в С-callback с помощью ctypes.+33
Приглашаем на 23-й Moscow Django Meetup
2 мин
5K
Спешим сообщить, что ровно через неделю, 1 октября в офисе Mail.Ru Group состоится очередная встреча Moscow Django Meetup. В этот раз докладчиков будет двое, но выступить обещают за троих, а то и четверых.
Первым поделится с аудиторией своими опытом и знаниями Геннадий Чибисов из Яндекса. Тема доклада: «Работа с файлами с помощью django-proxy-storage». В процессе разработки практически любого веб-приложения перед разработчиками встают задачи обработки, хранения и раздачи статического контента. В Django из коробки доступен кастомизируемый механизм так называемых стораджей. В своем докладе Геннадий расскажет про небольшую библиотечку django-proxy-storage, выкованную в подземельях Яндекса, которая расширяет функционал стораджа. С помощью этой библиотечки можно творить всякие занятные вещи:- хранить дополнительную мета-информацию о файлах и на основе этих данных формировать логику выполнения всех CRUD-операций самого стораджа;
- динамически использовать несколько стораджей. Пример – хранение текстовых файлов на диске, а изображений в S3;
- выполнять автоматический фолбэк до работающего стораджа на уровне приложения;
- организовывать авторизацию раздачи файлов на основе расширенной мета-информации.
Геннадий порадует слушателей живыми примерами того, как, прибегнув к минимальному рефакторингу, каждый желающий сможет добавить в свои Django-приложения описанную выше функциональность.
+33
История: нативный загрузчик QuakeLive для Linux
5 мин
28K
С того момента, как id Software прекратила поддержку Linux и Mac и сделало Launcher для QuakeLive в виде отдельного standalone-приложения, написанного на C# с использованием кроссплатформенного фреймворка(!) для рендеринга веб-страниц в OpenGL, прошло немало времени. Я уже затюнил свой дистр для стабильного-максимального количества fps (у меня все равно слабая видеокарта), но он по-прежнему тормозил. Сейчас я расскажу, что сделал для того, чтобы поиграть в любимую игру в свободное время, в игру, с которой я начинал свое сидение за компьютером в 7 лет. Я не останусь равнодушным к таким плевкам к людям никогда. Под катом расскажу о том, как повысить производительность в игре на Linux и о том, как я сделал свой собственный Launcher.
+49
Centrifuge — я больше не буду обновлять страницу перед отправкой комментария
10 мин
26KПрошло некоторое время с тех пор, как я писал про Центрифугу в предыдущий раз. Произошло множество изменений за этот период. Многое из того, что было описано в ранних статьях (1, 2) кануло в лету, но суть и идея проекта остались прежними — это сервер рассылки real-time сообщений пользователям, подключенным из веб-браузера. Когда на вашем сайте возникает событие, о котором вам нужно моментально сообщить некоторым вашим пользователям, вы постите это событие в Центрифугу, а она, в свою очередь, отправляет его всем заинтересованным пользователям, подписанным на нужный канал. В самом простом виде это показано на схеме:

Проект написан на Python с использованием асинхронного веб-сервера Tornado. Использовать можно даже если бекенд вашего сайта написан не на Python. Хотелось бы рассказать о том, что Центрифуга представляет собой на данный момент.

Проект написан на Python с использованием асинхронного веб-сервера Tornado. Использовать можно даже если бекенд вашего сайта написан не на Python. Хотелось бы рассказать о том, что Центрифуга представляет собой на данный момент.
+52
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в степень
20 мин
85KПусть мы хотим вычислить десятимиллионное число Фибоначчи программой на Python. Функция, использующая тривиальный алгоритм, на моём компьютере будет производить вычисления более 25 минут. Но если применить к функции специальный оптимизирующий декоратор, функция вычислит ответ всего за 18 секунд (в 85 раз быстрее):

Дело в том, что перед выполнением программы интерпретатор Python компилирует все её части в специальный байт-код. Используя метод, описанный хабрапользователем SkidanovAlex, данный декоратор анализирует получившийся байт-код функции и пытается оптимизировать применяющийся там алгоритм. Далее вы увидите, что эта оптимизация может ускорять программу не в определённое количество раз, а асимптотически. Так, чем больше будет количество итераций в цикле, тем в большее количество раз ускорится оптимизированная функция по сравнению с исходной.
Эта статья расскажет о том, в каких случаях и каким образом декоратору удаётся делать подобные оптимизации. Также вы сможете сами скачать и протестировать библиотеку cpmoptimize, содержащую данный декоратор.

Дело в том, что перед выполнением программы интерпретатор Python компилирует все её части в специальный байт-код. Используя метод, описанный хабрапользователем SkidanovAlex, данный декоратор анализирует получившийся байт-код функции и пытается оптимизировать применяющийся там алгоритм. Далее вы увидите, что эта оптимизация может ускорять программу не в определённое количество раз, а асимптотически. Так, чем больше будет количество итераций в цикле, тем в большее количество раз ускорится оптимизированная функция по сравнению с исходной.
Эта статья расскажет о том, в каких случаях и каким образом декоратору удаётся делать подобные оптимизации. Также вы сможете сами скачать и протестировать библиотеку cpmoptimize, содержащую данный декоратор.
+209
Python-digest #35. Новости, интересные проекты, статьи и интервью [27 июля 2014 — 03 августа 2014]
4 мин
14K
Дайджест был опубликован ранее, но определенным причинам был исключен с хабра, сейчас же было принято решение вернуть его обратно.
Очередной выпуск новостей из мира Python.
За иллюстрацию к посту, как и раньше, благодарим owlman75, а так же alrusdi за идею дайджестов и за то, что я по прежнему могу публиковать эти дайджесты для вас.
В этом выпуске у нас вот такие интересные новости собрались: свеженькие уязвимости в django, в релизах второй релиз кандидат Django 1.7, APScheduler 3.0, Pylint 1.3 / Astroid 1.2, django-extensions 1.3.9, boto 2.32.0 и еще много интересных библиотек и статей для изучения.
+34
Учим старую собаку новым трюкам или как я научился любить str.format и отказался от %
7 мин
64KПеревод
Предлагаю вниманию читателей хабры и поклонникам python перевод довольно объемной статьи о форматировании строк. Сказка будет правдивой и намек в ней будет на то, что консерваторам стоит иногда рассматривать что-то новое, даже если привычка упорно сопротивляется.Предугадывая любознательность читателей, склонных задавать вопросы не по теме разговора, скажу, что картинка имеет опосредованное отношение к python, правда не самое приятное. Предлагаю найти почему в качестве домашнего задания.
Жду замечания по ошибкам в оформлении и опечаткам в личку — с меня традиционные хабраплюшки.
+61
Ближайшие события
Уравнение или всё же наблюдение?
6 мин
20K
Запятошка: Устраивайся поудобнее, Жучок, мы будем с тобой сегодня проводить мысленные эксперименты со свободно падающими телами.
Жучок: А это как? Тела будут падать в моём воображении? Прямо так и вижу: обнажённые тела, летящие на фоне звёздного неба…
Запятошка: Тела, конечно, воображаемые, но не настолько большие, чтобы быть обнажёнными. Вообще, речь пойдёт о свободном падении тел в однородном гравитационном поле.
+39
Впечатления от посещения EuroPython 2014
14 мин
12K
Одна из отличительных особенностей языка Python — это посвящённые этому языку конференции, так называемые PyConы. Не так давно мне удалось побывать на одном таком PyCon-е — EuroPython 2014. EuroPython — это одна из наиболее крупных европейских ежегодных конференций по языку Python, которая три последних года проводилась во Флоренции, а в 2014м — первый раз в Берлине. Пока свежи воспоминания решил написать небольшой отчётик — что и как было.+31
Вместе веселей: python + flask + google app engine
6 мин
29KТуториал
Предыстория: я, как и многие на Хабрахабре, чертовски люблю слушать музыку. Чаще всего делаю это в ВКонтакте. Иногда уже сфомированный плейлист надоедает — хочется чего-нибудь нового; но так, чтобы не сильно отличалось от того, что уже есть. Для этого на всех сервисах, предоставляющих возможность прослушивания музыки, существуют рекомендации. Признаюсь честно, рекомендации в ВКонтакте меня ужасают. Может кому-то нравится, но у меня тамошний подбор вызывает желание закрыть браузер (ИМХО, конечно). В общем, решил я эту ситуацию для себя исправить и реализовать свои собственные рекомендации с использованием API ВКонтакте и Last.fm. Так как я много слышал и читал про Google App Engine, но никогда его не использовал, решено было приобщиться к этой платформе.
Сразу скажу, что тонкости взаимодействия с API или алгоритм подбора рекомендаций здесь я описывать не буду. Об этом — в следующих статьях, может быть. В данной статье описан только процесс создания, настройки и деплоя приложения на платформе Google App Engine с использованием python и flask.
Об опечатках и неточностях просьба сообщать в личку. Спасибо.
Сразу скажу, что тонкости взаимодействия с API или алгоритм подбора рекомендаций здесь я описывать не буду. Об этом — в следующих статьях, может быть. В данной статье описан только процесс создания, настройки и деплоя приложения на платформе Google App Engine с использованием python и flask.
Об опечатках и неточностях просьба сообщать в личку. Спасибо.
+18
Thunderargs: практика использования. Часть 2
12 мин
3.1KТуториал
История создания
Часть 1
Добрый день. Вкратце напомню, что thunderargs — библиотека, которая даёт использовать аннотации для обработки входящих аргументов.
Кроме того, она даёт возможность достаточно просто накидать гейт, который будет эти самые аргументы для функции вытаскивать откуда-нибудь ещё. Например, из объекта request во фласке. И в итоге мы вместо
делаем
Думаю, все хотя бы примерно поняли о чём будет речь в статье. Всё, что в ней описано — размышления о будущем проекта и примерная расстановка «майлстоунов» по нему. Ну и, разумеется, первые наброски всяких-разных фич.
Часть 1
Добрый день. Вкратце напомню, что thunderargs — библиотека, которая даёт использовать аннотации для обработки входящих аргументов.
Кроме того, она даёт возможность достаточно просто накидать гейт, который будет эти самые аргументы для функции вытаскивать откуда-нибудь ещё. Например, из объекта request во фласке. И в итоге мы вместо
@app.route('/ugly_calc', dont_wrap=True)
def ugly_calc():
x, y = int(request.args['x']), int(request.args['y'])
op_key = request.args.get('op')
if not op_key:
op_key = '+'
op = OPERATION.get(op_key)
return str(op(x, y))
делаем
@app.route('/calc')
def calc(x:Arg(int), y:Arg(int), op:Arg(str, default='+')):
return str(OPERATION[op](x, y))
Думаю, все хотя бы примерно поняли о чём будет речь в статье. Всё, что в ней описано — размышления о будущем проекта и примерная расстановка «майлстоунов» по нему. Ну и, разумеется, первые наброски всяких-разных фич.
В этой части
- Рассмотрим структурные изменения в проекте и пару критических ошибок в изначальной структуре
- Разберёмся как работают валидаторы и как можно кастомизировать выдаваемые ими ошибки
- Создадим зачатки специализированных аргументов (IntArg, StrArg, ListArg и так далее)
- Подготовим класс, который будет автоматически вытаскивать объект из базы по id, поступившему в запросе
- Будем генерировать точки входа по классу модели
- Реализуем листенеры и посмотрим как можно сделать валидатор для нескольких аргументов
- Убедимся, что информацию о структуре аргументов можно смело переносить в БД, и ничего нам за это не будет
- И, наконец, порассуждаем о мелких интересностях, так и не реализованных в рамках этих экспериментов
+9
Минималистичный issue tracker на Django
11 мин
19KТуториал
В этой статье рассказывается, как за короткое время решить с помощью фреймворка Django, простую, но интересную задачу: создание системы баг-трекинга (система тикетов) для своего проекта. Наша система будет интегрирована с системой аутентификации пользователей Django и административным интерфейсом. Несмотря на свою примитивность, такое приложение, при некотором усовершенствовании, вполне может быть полезно для разработчика-одиночки или небольшой группы.


+14
Django 1.7
1 мин
21KПосле почти года разработки вышел долгожданный релиз Django 1.7.

Ключевые изменения новой версии

Ключевые изменения новой версии
- Прекращена поддержка Python 2.6.
- Добавлена поддержка миграций непосредственно в сам фреймворк. Здесь можно посмотреть инструкции о переходе с South.
- Переработан механизм загрузки приложений. Теперь models.py — необязателен.
- Изменения в Field API, в частности, добавлен обязательный метод deconstruct() для поддержки миграций.
- Добавлена возможность вызова QuerySet напрямую из менеджера. Также теперь можно указывать необходимый менеджер при использовании связи между моделями.
- Новая система для проверки проекта и диагностики ошибок, вместо validate добавлена команда check.
+46
Приглашаем на Moscow Django MeetUp № 22
3 мин
5.4K
Дамы и господа, в четверг в офисе Mail.Ru Group пройдёт 22-я по счёту ежемесячная встреча Moscow Django MeetUp! В этот раз вы сможете услышать мудрые речи трёх докладчиков, которые выступят на сильно разные темы. В первых рядах выступающих окажется не кто иной, как Григорий Петров (Digital October).
Григорий регулярно выступает на конференциях не просто так. Он считает, что это приносит пользу не только сообществу разработчиков, но и ему самому. Специально для данного митапа Григорий подготовил доклад, в рамках которого вы услышите соображения программиста о публичных выступлениях, силе воли, нужности презентации и ключевой роли гипокампа в профессиональном росте айтишника. Доклад разбит на три части:+33
Вклад авторов
kesn 2847.0DmitrySpb79 1664.0badcasedaily1 1359.4ru_vds 1279.6ph_piter 1176.6pushtaev 1058.0grigoryvp 1006.0Firemoon 985.0homm 969.0
