Асинхронный Python и различные формы многозадачности

Не один раз видел, что не все программисты на Python понимают, в каких случаях стоит создавать отдельный процесс, а когда можно обойтись потоком. Да и к тому-же, сейчас многие могут думать, что AsyncIO — самый правильный способ писать веб-приложения. Я попробую объяснить разницу между этими формами многозадачности в Python и когда их лучше применять.

Препроцессинг кода в Python

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

Справочные модели в Django

Когда-то давно придумал милый DSL для описания таблиц-справочников (lookup tables) в моделях джанги. Это такие key-value таблицы с постоянным числом строк. Иногда хочется каждую запись представить как константу.

Учим английский для чтения технической литературы

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

Обработка ошибок в Python и Go: исключения против значений

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

Выборочная установка пакетов из нестабильной ветки в Debian

Чтобы обновить пакет до последней версии в Debian, не всегда нужно прибегать к сторонним репозиториям. Достаточно использовать пакеты из нестабильной версии (она же Debian Sid).

Перенос подписок на другой YouTube-аккаунт через Selenium

Как-то раз я переезжал с одного Google-акканунта на другой. Во многих гугловых сервисах есть импорт/экспорт, так что закладки и контакты переехали без проблем. А вот в Ютубе есть только экспорт подписок. Импорт — только руками, либо через API. Руками заходить на каждый и подписываться не хотелось, с гугловым API еще раз связываться тоже не очень. Решил попробовать Selenium для такой бытовой автоматизации. Получился скриптик.

Опыт использования Хакинтоша

До перехода на Макбук я почти год использовал так называемый «Хакинтош» — подпольно-установленная OS X на обычном PC. Она была нужна мне в роли Линукса с нативным Фотошопом. Цены на Макбуки мне тогда казались заоблачными, поэтому полистав пару тематических форумов я взялся за эксперименты.

Публикация Python пакета в PyPI

PyPI (Python Package Index, не путать с PyPy) — это репозиторий сторонних пакетов для Python. Тех самых, которые обычно ставятся через команду pip.

Приём платежей на сайте без ИП и договора

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

Однако, у нас тут тривиальная задача для небольшого сервиса: за денежку открывать пользователю дополнительные плюшки. Сервис настолько небольшой, что даже не покроет затраты на содержание ИП.

GoodForms — другой способ рендерить формы в Django

GoodForms — набор темплейт-тегов для Django, которые облегчают генерацию HTML для полей формы. Поле генерируется с помощью темплейт-тега, благодаря чему верстальщик получает полный контроль над его стилем и атрибутами.

Субботний «Хеллоу Ворд»

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

А дальше происходит магия: прочитав quick reference, я пытаюсь заставить это работать. Иногда получается, иногда не очень, но это весело. Хороший способ расти в ширину и за короткое время получить небольшой опыт в куче технологий.

Задачка — полезная бытовая автоматизация или мелочь, которую недавно делал на работе. Например, я пробовал Go в разработке бота для VK. Он отправлял девушке рандомные комплименты раз в два часа.

Подчёркиваем ссылки красиво

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

Ленивый source в zsh

Команда source, с помощью которой в оболочку подключаются инструменты вроде nvm или rvm, очень медленная. Загрузка nvm на моём Macbook с SSD занимает полсекунды. Это происходит при открытии новой вкладки или окна терминала — достаточно часто, чтобы заметить лаг. Первая мысль: source должен вызываться перед запуском команды, не раньше. То есть nvm.sh должен быть загружен перед вызовом nvm.

Сборка фронтенда в Django

Из коробки в Django нет средств для автоматизации сборки фронтенда. Ну заете, обычное дело: перевести sass в css, применить к этому автопрефиксер, а сверху кофескриптом намазать.

На манер пайплайна из рельс есть сторонние django-pipeline и django-compressor. Но собирать фронтенд его родными инструментами всё-таки удобнее. Пришла идея сделать из gulp замену collectstatic и подружить его с runserver и структурой проекта.

Способы вёрстки фронтенда в Linux

Я часто верстаю HTML-страницы. Верстаю на ноутбуке с Ubuntu. Да, небольшой разрыв шаблона: в Linux есть инструменты для разработки, но вот с продуктами от Adobe не сложилось. Существует несколько путей спасти ситуацию.

Оценка сроков разработки

Неловкая ситуация: руководство или заказчик интересуется, сколько времени займёт разработка проекта или фичи, а ответ дать не получается. Как оценивать такие задачи?

Собственная методология вёрстки

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

Monkey patching в Python

Манки патч (обезъяний патч) — возможность переопределять методы и свойства объектов во время выполнения программы. Использование манкипатчинга осуждается в сообществе, так как такой патч приводит к неочевидному поведению программы. Причём найти место внедрения такого патча в большой программе очень сложно.

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

Превращаем 1366x768 монитор в FullHD

Дорогой дневник, работая за нищебродским ноутбуком с разрешением 1366x768, я чувствую себя танкистом, смотрящим в танковую щель. Например, в случаях, кода нужно одновременно лицезреть консоль разработчика и окно браузера. В Linux есть способ это исправить, увеличив разрешение, например, до 1920x1080.

Про Codewars

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

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

Наследование и композиция с Polymer

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

В ловушке овертайма

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

Прототипирование рабочего процесса

В прошлом году рекламное-агентство Bluecadet, где я работаю, начало редизайн проекта для Института Франклина — известный в Филадельфии музей науки претерпевает крупнейший этап развития в своей истории. Я и мои коллеги были рады, потому что мы не только могли поработать со знаковым учреждением, но и включить ряд методов отзывчивого веб-дизайна в наш рабочий процесс: атомарный дизайн, HTML-прототипы, стилевые тайлы, коллажи элементов и руководства стиля для фронтенда. Мы создали серию быстрых прототипов, которые дали возможность гармоничного балансирования между дизайном и разработкой. Мы чувствовали, что это возможность провести капитальный ремонт рабочего процесса, от начала и до конца.

Динамически-создаваемые «асинхронные скрипты» являются вредными

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

Битва стандартов: PSR-0 против PSR-4

Если вы уже достаточно хорошо знаете PHP, вы наверняка слышали о стандартах PSR-0 и PSR-4, которые позволяют автоматически загружать требуемые классы в момент их вызова, без использования таких конструкций как require и include. В заметке мы сравним эти два подхода, разберемся в проблемах и приемуществах каждого и подумаем, что все-таки лучше.

Linode или DigitalOcean

Пришло СМС уведомление из банка о списании семисот российских рублей в пользу VPS хостера Linode. Мне наконец начало казаться, что это многовато для хостинга домашней странички и периодического запуска каких-нибудь экспериментов.

Ведясь на годный пиар и вкусные тарифы DigitalOcean я не выдержал и решил таки переехать к ним. Но нельзя просто взять и переехать. Пришлось покрасноглазить ночку и посравнивать производительность. Итак, тесты гонялись с помощью утилиты sysbench на похожих тарифах в идентичных окружениях: Debian 7 Wheezy x64 с ядром Linux 3.2.0. Виртуалки абсолютно чистые, ничем другим не занятые.

Синтаксический сахар в именах CSS классов

Вам когда-нибудь не хватало выразительности CSS в области именования селекторов? А вот мне не хватало. Еще когда-то давно, кода я только экспериментировал с разными методологиями и еще не познал дзен в виде независимых блоков мне хотелось как-то более наглядно отделять классы-модификаторы от имени модуля и тому подобные вещи. Мало кто знает, но в названиях классов, помимо букв и символов -, _, можно использовать любые спецсимволы. Благодаря этому можно добавить немного выразительности в разметку.

BEML — HTML препроцессор для BEM

Я начинаю потихоньку понимать выражение «БЭМ головного мозга», ну а что поделать, больного уже не спасти. На этот раз в голове моей родилась мысль облегчить написание БЭМ разметки путем небольшого расширения HTML синтаксиса (до этого я все эти длиннющие классы руками писал, ога). Название BEMHTML уже несправедливо занято ребятами из Яндекса, поэтому пусть будет BEML.

Значение модели по умолчанию в AngularJS

Вот нужно мне в AngularJS красиво задать дефолтное значение для модели прямо в HTML. Например, имеем input, значение которого мы, по какой-то причине, не хотим дергать с сервера. На Stackoverflow нам скорее всего посоветуют проставить значение в контроллере, что не кошерно, я например не использую роутинг и не хочу парсить URL, чтобы получить ID текущего элемента, на то есть серверный шаблонизатор, который пропихнет нужное мне значение в нужное поле, а заодно и в скоуп.

Организация проекта в MODX Revolution

Праздники. Делать особо нечего, а спиртное на столе наконец-то закончилось. Что ж, буду делиться опытом, глядишь, что-нибудь полезное узнаете. В заметке я расскажу, как организовать струкуру более-менее крупного проекта в MODX Revolution так, чтобы потом его можно было удобно расширять и не путаться. На мой взгляд, это одно из ключевых моментов при разработке, однако, всякие уроки, которыми напичкан интернет, уделяют этому делу слишком мало внимания.

jQuery.BEM — декларативный подход к работе с версткой по БЭМ методу

Уже много всего сказано про БЭМ, чем он хорош, чем плох, и повторяться сегодня мы не будем. Ниже рассказ про то, как работать с БЭМ DOM из jQuery в небольших проектах, где совесть и время не позволяют прикрутить bem-tools, bem-bl и bemhtml, а поработать с удобной системой верстки все-же хочется, оставив позади длинные селекторы в js файлах.