Как стать автором
Обновить
0
0
Avrelia Kotta @dolpinn

Пользователь

Отправить сообщение

Мега-Учебник Flask, Часть 1: «Привет, Мир!»

Время на прочтение6 мин
Количество просмотров572K
Это первая статья в серии, где я буду документировать мой опыт написания веб-приложения на Python, используя микрофреймворк Flask.

Здесь список всех статей в серии:
Часть 1: Привет, Мир!
Часть 2: Шаблоны
Часть 3: Формы
Часть 4: База данных
Часть 5: Вход пользователей
Часть 6: Страница профиля и аватары
Часть 7: Unit-тестирование
Часть 8: Подписчики, контакты и друзья
Часть 9: Пагинация
Часть 10: Полнотекстовый поиск
Часть 11: Поддержка e-mail
Часть 12: Реконструкция
Часть 13: Дата и время
Часть 14: I18n and L10n
Часть 15: Ajax
Часть 16: Отладка, тестирование и профилирование
Часть 17: Развертывание на Linux (даже на Raspberry Pi!)
Часть 18: Развертывание на Heroku Cloud

Моя предыстория


Я разработчик ПО с двузначным числом лет опыта разработки комплексных приложений на нескольких языках. Впервые я познакомился с Python для создания привязок к C++ библиотеке на работе. Вдобавок к Python, я писал веб-приложения на PHP, Ruby, Smalltalk и, верите вы или нет, еще на С++. Из всего этого, я нахожу комбинацию Python/Flask самой гибкой.
Я хочу начать это долгое и удивительное путешествие
Всего голосов 63: ↑60 и ↓3+57
Комментарии31

Подборка бесплатных инструментов для разработчиков

Время на прочтение28 мин
Количество просмотров186K
Сегодня мы представляем вашему вниманию адаптированную подборку инструментов (в том числе облачных) для разработчиков, которые позволяют создавать по-настоящему качественные проекты. Здесь представлены исключительно SaaS, PaaS и IaaS сервисы, предоставляющие бесплатные пакеты для разработчиков инфраструктурного ПО.

Читать дальше →
Всего голосов 96: ↑89 и ↓7+82
Комментарии38

ТОП-10 подводных камней, на которые вы можете наткнуться при переходе на Vim

Время на прочтение5 мин
Количество просмотров15K
Согласитесь, каждый раз, когда вы видите человека, который использует Vim, вам кажется, что он знает то, чего не знаете вы. Иначе, как вы можете объяснить тот факт, что он использует редактор, который, по вашему мнению, является open-source мусором? Думайте, что хотите, но есть целый ряд причин, по которым програмисты поклоняются Vim.
Пока вы не потратите по крайней мере месяц на ознакомление с ним, вы, несомненно, будете его ненавидеть. Именно по этой причине большинство новичков работают с Vim около дня, после чего больше никогда к нему не притрагиваются. Они даже представить себе не могут, какой невероятной скоростью и гибкостью он обладает. Нужно всего-лишь найти в себе силы и преодолеть те трудности, которые встретятся вам на протяжении всего того времени, что вы знакомитесь с Vim.
Читать дальше →
Всего голосов 88: ↑66 и ↓22+44
Комментарии315

Легенда об искушении: как использовать Python для автоматизации iOS

Время на прочтение10 мин
Количество просмотров29K


Часто нам приходится совершать со своим iPhone монотонные и довольно скучные манипуляции, которые заставляют нас с завистью смотреть на десктопы с их безграничными возможностями настройки, скриптинга и автоматизации действий. Да что там десктопы — даже на пользователей Android с их вездесущим Tasker’ом, с помощью которого можно запрограммировать смартфон на что угодно. В iOS существование подобных приложений невозможно, но у нас есть небольшая лазейка.

В этой статье я хочу рассказать о Pythonista — среде разработки на языке Python (версии 2.7.5) для iOS, которая позволяет в том числе писать полноценные приложения с графическим интерфейсом. Однако мы будем использовать ее для несколько иных целей — для создания простых подсобных скриптов, которые будут автоматизировать рутинные операции.
Читать дальше →
Всего голосов 14: ↑14 и ↓0+14
Комментарии2

Креативное программирование: openFrameworks — установка и пример визуализации музыки

Время на прочтение12 мин
Количество просмотров27K


Когда вы последний раз программировали на C++?

Может быть это ваша каждодневная работа, а мой последний (до вчерашнего дня) проект на С++ был в далеком 2000 году — дипломный проект на базе Visual Studio 4.2 (хорошая, кстати, система была), и с тех пор перешёл в веб-разработку — скриптовые языки.

То есть сейчас я — начинающий на C++, но это не помешало мне за пару часов развернуть инфраструктуру, сделать и собрать мультимедийное приложение на C++, которое визуализирует музыку с разными эффектами. И в этом мне помогли:
  • открытый фреймворк для создания интерактивных приложений — openFrameworks
  • бесплатное IDE Code::Blocks

Посмотреть, что же у меня получилось

А начиналось всё так — после очередного прослушивания музыки от одного композитора из Самары, я подумал — было бы интересно попробовать сделать визуализацию музыки, и обратился к Денису Перевалову (кто не первый год занимается созданием разнообразных интерактивных арт/перформанс систем) — он мне ответил, что это делается без проблем на базе openFrameworks и что в примерах к его книге (а он автор книги по openFrameworks), есть реализация такой задачи.

То есть мне нужно было всего лишь — установить фреймворк, доработать и собрать пример на С++… Об этом процессе — установке, настройки, и кратком описании openFrameworks и будет эта статья.

openFrameworks — это система с помощью которой можно запрограммировать интерактивное мультимедийное приложение, то есть арт, перформансы и т.п., она бесплатная, открытая и кроссплатформенная система (linux, mac, win), и так же есть версии для ARM (к примеру для RPi), и сборки для iPhone и Android.

Кстати на КДПВ — одна из инсталляций на базе openFrameworks (Семь Видеогидов. выставлено на ВДНХ в экспозиции Политехнического музея. Москва, 2014).
Читать дальше →
Всего голосов 29: ↑24 и ↓5+19
Комментарии6

Как в Яндексе используют PyTest и другие фреймворки для функционального тестирования

Время на прочтение19 мин
Количество просмотров123K
Всем привет! Меня зовут Сергей, и в Яндексе я работаю в команде автоматизации тестирования сервисов монетизации. Перед каждой командой, которая занимается задачами автоматизации тестирования, встает вопрос: «Какой [фреймворк|инструмент] выбрать для написания своих тестов?» В этом посте я хочу помочь вам на него ответить. Если быть конкретнее, речь пойдет об инструментах тестирования на языке Python, но многие из идей и выводов можно распространить на другие языки программирования, поскольку подходы часто не зависят от конкретной технологии.



В Python существует множество инструментов для написания тестов и выбор между ними неочевиден. Я опишу интересные варианты использования PyTest и расскажу о его [плюсах|минусах|неявных возможностях]. В статье вы найдёте развёрнутый пример использования Allure, который служит для создания простых и понятных отчётов автотестов. Также в примерах будет применяться фреймворк для написания матчеров — Hamcrest для Python. Надеюсь, что в итоге, те, кто сейчас в поиске инструментов для тестирования, смогут на основе изложенных примеров быстро внедрить функциональное тестирование в своем окружении. Те же, кто уже использует какой-то инструмент, смогут узнать новые подходы, варианты использования и концепции.
Читать дальше →
Всего голосов 62: ↑60 и ↓2+58
Комментарии10

Свой гобан

Время на прочтение4 мин
Количество просмотров8.6K
После продолжительной борьбы с собственными страхами, я всё-таки начал играть в Го. Дмитрий Скирюк оказал неоценимую помощь в этом нелёгком для меня деле. Играю я пока не так чтобы очень, но не собираюсь бросать начатое. Надеюсь, что постоянная практика и (умеренное) чтение учебной литературы помогут поднять мой пока невысокий уровень.

В этой статье, я не буду рассказывать о самой игре, её разновидностях, тактике и стратегии. Я хочу рассказать лишь об одном инструменте, безусловно необходимом для развития каждого начинающего игрока (под катом много картинок). 
Читать дальше →
Всего голосов 14: ↑12 и ↓2+10
Комментарии33

Профилактика ноутбука в домашних условиях

Время на прочтение5 мин
Количество просмотров193K
Доброго времени суток. Решил поделиться с вами способом в домашних условиях поддерживать на должном уровне здоровье наших любимых ноутбуков (нетбуков).
Есть одна страшная, а порой и гибельная угроза- перегрев! Многие из вас сталкиваются с тем, что ваш верный помощник обжигает колени, хотя непрерывно воет кулер, либо неплохо нагнетает температуру в уютный (может слегка пыльный) плед, которым вы укутали себя, а заодно и ноут. Тут-то стоит задуматься,- «А к чему бы это?». А ведет все к перегреву, внезапному отключению и отказу к призывам «включиться сейчас же и доиграть в игру». Не тут-то было- он включится только через определенный промежуток времени, в течение которого остынет он естественным путем. А бывает и не включаются, тогда прямая дорога в СЦ, ибо профилактика пациента уже не спасет. После диагностики выявится обычно или спаленный видеочип, либо перегретый мост. Что одно, что другое не очень приятно по цене ремонта. Так что давайте следить за своими устройствами и не доводить до крайних мер.
Читать дальше →
Всего голосов 80: ↑51 и ↓29+22
Комментарии112

Winulator: запуск игр 90-х на Android OS

Время на прочтение1 мин
Количество просмотров101K


Сейчас для Adnroid существует большое количество приложений, которые позволяют запускать на этой мобильной ОС приложения для DOS, игры для Sega/Dendy и прочее. Вскоре количество таких проектов пополнится еще одним, проектом Winulator. Это ПО, позволяющее запускать игры 90-х на смартфонах и планшетах с Android OS. Пока что релиза нет, но проект, по словам разработчика (он один), уже практически готов к запуску, и есть видео, демонстрирующее нам все достоинства Winulator.

Читать дальше →
Всего голосов 53: ↑47 и ↓6+41
Комментарии73

100 достойных компьютерных игр для DOS, появившихся в восьмидесятых и девяностых годах

Время на прочтение1 мин
Количество просмотров57K
Во блоге «Geeks are Sexy» 30 июня была опубликована инфографика «List of Worthwhile DOS Games», первоисточником которой является одноимённая блогозапись во блоге «Information2Share» от 4 июня.

Красота её столь значительна, что я полагаю необходимым упомянуть о ней и на Хабрахабре.

Сотня отобранных для инфографики компьютерных игр представлена в качестве матрицы 10×10 элементов, изображённых на чёрном фоне в форме дискет — вот уменьшенный пример:

[фрагмент]

Идите и глядите: «List of Worthwhile DOS Games» (4337×4762 пиксела, 7 793 317 байтов).

Читать дальше →
Всего голосов 66: ↑60 и ↓6+54
Комментарии154

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

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

Я достаточно часто сталкивался с подобным мнением и не придавал ему особого значения, но когда женский коллектив нашей организации поздравил программистов с 23-м февраля по доброму назвав их «космическими войсками», решил всё же расставить определенные акценты в данном вопросе, т.к. одна из моих профессий связана напрямую с психоанализом. Да и баш уже не молчит.

И что же них такого деформированного?
Всего голосов 461: ↑436 и ↓25+411
Комментарии558

Тайм-менеджмент для разгильдяев

Время на прочтение3 мин
Количество просмотров23K
«Провести время?! Ишь чего захотела! Время не проведешь!» /Л.Кэролл. «Алиса в стране чудес». Пер. Б.Заходера/

Недавно посетил лекцию Глеба Архангельского о тайм-менеджменте и решил поделиться своими мыслями на эту тему. Я нисколько не ставлю под сомнения классическую теорию тайм-менеджмента и ее достижения. Однако, мне показалось, что она может не подойти многим людям. В частности, я точно не хотел бы по ней жить — моя жизнь стала бы предсказуема, как железная дорога в Германии, а потому скучна и неинтересна. Мне кажется, муза к человеку, пользующемуся тайм-менеджментом не придет (или придет, немного посидит и уйдет), т.к. в любой момент времени такой человек будет корпеть над заранее запланированным списком дел.

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

Читать дальше →
Всего голосов 93: ↑87 и ↓6+81
Комментарии74

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

Время на прочтение2 мин
Количество просмотров114K

Всем привет.

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

Пост будет о том, как удалось обойти лимит на одну порцию, установленный в столовой.
Как не остаться голодным?
Всего голосов 266: ↑255 и ↓11+244
Комментарии53

Эффективная многопоточность в Python

Время на прочтение7 мин
Количество просмотров76K
Хочу поделиться простым рецептом, как можно эффективно выполнять большое число http-запросов и других задач ввода-вывода из обычного Питона. Самое правильное, что можно было бы сделать — использовать асинхронные фреймворки вроде Торнадо или gevent. Но иногда этот вариант не подходит, потому что встроить event loop в уже существующий проект проблематично.

В моем случае уже существовало Django-приложение, из которого примерно раз в месяц нужно было выгрузить немного очень мелких файлов на AWS s3. Шло время, количество файлов стало приближаться к 50 тысячам, и выгружать их по очереди стало утомительным. Как известно, s3 не поддерживает множественное обновление за один PUT-запрос, а установленная опытным путем максимальная скорость запросов с сервера ec2 в том же датацентре не превышает 17 в секунду (что очень не мало, кстати). Таким образом, время обновления для 50 тысяч файлов стало приближаться к одному часу.

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

Получается, всего-то нужен пул потоков, который будет выполнять запросы. К счастью, такой пул уже написан. Начиная с версии 3.2 для унификации всей асинхронной работы в Питоне появилась библиотека concurrent.futures. Для второй версии Питона есть бекпорт под именем futures. Код до безобразия прост:

from concurrent.futures import ThreadPoolExecutor

with ThreadPoolExecutor(concurrency) as executor:
    for _ in executor.map(upload, queryset):
        pass

Здесь concurrency — число рабочих потоков, upload — функция, выполняющую саму задачу, queryset — итератор объектов, которые по одному будут передаваться в задачу. Уже этот код при concurrency в 150 смог пропихнуть на сервера Амазона ≈450 запросов в секунду.
Читать дальше →
Всего голосов 31: ↑27 и ↓4+23
Комментарии12

Мега-Учебник Flask, Часть 9: Пагинация

Время на прочтение9 мин
Количество просмотров34K
Это девятая статья в серии, где я описываю свой опыт написания веб-приложения на Python с использованием микрофреймворка Flask.

Цель данного руководства — разработать довольно функциональное приложение-микроблог, которое я за полным отсутствием оригинальности решил назвать microblog.



Краткое повторение



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

Сегодня мы, опираясь на то, что мы сделали в прошлый раз, доведем наше приложение до ума, чтобы оно принимало и доставляло настоящий контент для наших пользователей. Сегодня мы попрощаемся с последним из наших фейковых объектов!
Хочу знать больше...
Всего голосов 12: ↑12 и ↓0+12
Комментарии4

Красивые трейсбеки в Python

Время на прочтение1 мин
Количество просмотров21K
Как часто вам присылают подобные отчеты об ошибке?

Traceback (most recent call last):
...
  File "...", line ..., in ...
    process(lst[index])
IndexError: list index out of range


Ох, если бы только узнать значение lst и index на тот момент...

python-catcher — автоматическая генерация HTML-трейсбеков с локальными переменными и исходниками, + загрузка в интернет — пользуйтесь на здоровье.



Читать дальше →
Всего голосов 94: ↑89 и ↓5+84
Комментарии21

Вышла третья книга «Простая Наука»

Время на прочтение2 мин
Количество просмотров96K
image

То, что я сейчас вам представлю, мы создавали в течение трех интересных и насыщенных месяцев. Первый месяц ушел на подготовку опытов. А когда у нас в руках оказались все видео- и фотоматериалы, мы приступили к верстке и монтажу. И если говорить лично о моем мнении, то результатом я очень доволен.
Читать дальше →
Всего голосов 133: ↑123 и ↓10+113
Комментарии41

Использование Python в многопоточном приложении на C++ и настоящая многопоточность в Python

Время на прочтение7 мин
Количество просмотров40K
Все более или менее знающие Python разработчики знают про такую жуткую вещь как GIL. Глобальный блокировщик всего процесса до тех пор пока Python выполняется в одном из потоков. Он даёт потоко-защищённость методами сравнимыми с садизмом, поскольку любая неявная блокировка в многопоточном приложении смерти подобна, всё что опиралось на параллельное выполнение, умирает в мучениях, раз за разом натыкаясь на блокировку GIL.
Известно что по сей день из-за этого скорбного факта программисты на C++ используют Python-обёртки по большей части лишь в однопоточных приложениях, а программисты на Python пытаются всех убедить, что им и так неплохо живётся.
Казалось бы, если поток порождён в C++, он не знает ни о каком GIL, используй Python без блокировок и радуйся. Радость разработчика однако закончится уже на втором потоке запросившем область глобальных переменных без блокировки.
Однако есть путь ведущий к светлому будущему!
Этот путь был изначально в таком языке как Perl, он же поддерживается в Си-API языка Python и я ума не приложу почему подобный механизм не включен в один из стандартных модулей Python! Способ по сути сводит использование различных под-интерпретаторов Python в разных потоках, причём используя свой GIL для каждого(!!!) без всякого шаманства и магии, просто последовательно вызвав несколько функций и стандартного набора Си-API языка Python!
Читать дальше →
Всего голосов 76: ↑72 и ↓4+68
Комментарии50

Python на Хабре

Время на прочтение7 мин
Количество просмотров451K
Некоторое время назад, в силу определенных причин, мне пришла в голову мысль о том, чтобы начать изучать какой-нибудь новый язык программирования. В качестве альтернатив для этого начинания я определил два языка: Java и Python. После продолжительного метания между ними и сопутствующих нытья и долбежки головой о стену (у меня с новыми языками всегда так — сомнения, раздумья, проблема выбора и т.д.), я все-таки остановился на Python. Окей, выбор сделан. Что дальше? А дальше я стал искать материал для изучения…
Читать дальше →
Всего голосов 182: ↑162 и ↓20+142
Комментарии65

ABC: Always Be Coding (не переставай программировать)

Время на прочтение5 мин
Количество просмотров74K


Как получить работу инженера?

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

# x = количество компаний, в которых ты проходил собеседования

# y = количество предложений о работе, которые ты получил

рейтинг = 100 * log(x) * y / x



Если твой рейтинг < 90, обязательно прочти это. Если > 120, возможно, тебе это не нужно, но, все равно прочти.

Читать дальше →
Всего голосов 109: ↑90 и ↓19+71
Комментарии58

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирована
Активность