Заметки программиста feedly
Про боль, Python и JavaScript
Обработка ошибок в Python и Go: исключения против значений

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

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

Иногда свежая версия пакета просто необходима. Например, недавно мне приспичило добавить HTTP/2 в проекты. В Nginx новый протокол поддерживается начиная с версии 1.9.5, но в стабильном Debian 8 доступна только 1.6.x.

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

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

OS X мне была нужна в роли Линукса с нативным Фотошопом. Цены на Макбуки мне тогда казались заоблачными, поэтому полистав пару тематических форумов я взялся за эксперименты.

Публикация 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, я чувствую себя танкистом, смотрящим в танковую щель. Например, в случаях, кода нужно одновременно лицезреть консоль разработчика и окно браузера. В 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 файлах.