Онлайн курс по Clojure

Clojure — интересный Lisp‑подобный функциональный язык. Если вы фанат круглых скобок, то программировать на этом языке интересно. К тому же Clojure компилируется в байт‑код JVM и транслируется в JavaScript. Вернее, в JS транслируется ClojureScript. Над ним работает та же команда, что и над Clojure, так что это всё‑таки один и тот же язык — за исключением некоторой разницы в типах и мелочах, зависящих от среды исполнения. При этом ресурсов для изучения этого языка не так много. Один из них — онлайн‑курс Functional programming in Clojure. ...

7 июня 2016 г.

Как управляться с большими проектами на Python

На Hacker News появилась интересная дискуссия о том, как управляться с большими Python‑проектами. Поскольку я причастен к достаточно большому проекту, то не могу удержаться и не поделиться своим видением на этот вопрос. Я составил список из трёх моментов, на которые стоит обратить внимание. 1. Обеспечьте себе безболезненную навигацию по коду В большом проекте навигация по коду и автокомплит сильно упрощают разработку и поддержку. Всё, что ломает навигацию, должно подвергаться сомнению. А это значит, что хитрые конструкции и метапрограммирование должны быть очень хорошо обоснованы: без них либо не обойтись, либо очень сложно обойтись. В остальных случаях лучше выбирать более очевидные (в том числе для тулзов) пути. ...

1 июня 2016 г.

Проект на Kivy. Часть 1. Настройка окружения

Kivy — интересный проект, который позволяет делать кроссплатформенные GUI‑приложения, включая мобильные. Я решил выяснить, можно ли использовать его для создания маленьких приложений на Python. В этой серии статей я попробую исследовать Kivy на примере клона «конструктора слов» — одного из упражнений для LingvoLeo. Эта серия — не учебник, а исследовательский лог моих попыток. В результате я планирую получить собранные приложения для трёх платформ минимум: Windows, Mac, Android. Будет здорово, если я соберу ещё и iOS‑версию. В качестве основной платформы для разработки я использую Mac, так что все инструкции по установке и настройке окружения будут для этой операционной системы. ...

16 мая 2016 г.

Модификация параметров под args или kwargs

В Python достаточно часто интерфейсы функций частично или полностью «сворачивают» с помощью *args и **kwargs. Это вполне естественно для питонистов, но вызывает вопросы при переходе с других языков. С самим «сворачиванием» никаких проблем нет. Сложности возникают при модификации аргументов: строятся проверки вокруг args и kwargs, вместо того чтобы «развернуть» интерфейс функции. Представьте себе такой кейс: есть две библиотеки, одна из которых имеет полностью прописанный интерфейс у функции foo. Вторая определяет функцию boo, которая вызывает foo. Интерфейс boo «свёрнут» с помощью *args и **kwargs: ...

4 мая 2016 г.

RoboVM закрылся. LibGDX мигрирует на Multi-OS Engine от Intel

RoboVM — проект, позволявший запускать Java‑код на iOS, — закрылся. Под ударом оказались все, кто использовал LibGDX для мобильных игр. Замену нашли быстро: LibGDX будет использовать Multi‑OS Engine от Intel. Тем не менее это хороший повод обсудить зависимости в библиотеках. 15 апреля пользователи RoboVM получили «письмо счастья»: проект закрывается. Судя по объяснению в блоге проекта, основная причина закрытия — действия Microsoft с Xamarin. В том, что теперь кроссплатформенную мобильную разработку на Java ждут трудные времена, не поспоришь. Xamarin — действительно отличная альтернатива. ...

25 апреля 2016 г.

Почему я вернулся в PyCharm

В конце января я переключался на Sublime как основную IDE для Python. Но уже через пару недель я был вынужден вернуться на PyCharm. Последние несколько недель я активно использовал Emacs. Он великолепен. И всё‑таки для рабочих проектов я снова возвращаюсь к PyCharm. Все три варианта хорошо подходят для работы с Python. Все три позволяют работать продуктивно. Так что выбирать приходится исходя из слабых сторон каждого из них. Что не так с PyCharm Есть несколько причин, почему я периодически пытаюсь сбежать в какой‑нибудь другой редактор. ...

18 апреля 2016 г.

Изменяемы типы в качестве параметров по умолчанию в Python

Почему изменяемые типы не рекомендуется использовать в качестве значений аргументов по умолчанию в Python? Если вы забрались по карьерной лестнице выше джуниора, то наверняка задумывались. И наверняка ответ был таким: «Это приводит к странным побочным эффектам». Но я почти наверняка уверен, что только малая часть разработчиков на Python сделала шаг дальше и разобралась, почему такое поведение у языка. Давайте разберёмся сначала с тем, с какими побочными эффектами имеем дело. Напишем вот такую функцию: ...

11 апреля 2016 г.

Обзор курса по Haskell на Stepic.org

Как‑то я уже упоминал курс «Функциональное программирование на языке Haskell». Наконец могу поделиться собственными впечатлениями об этом курсе. Этот курс стоит того, чтобы его пройти и сделать (или хотя бы попытаться сделать) все предложенные задания. Лучшего вводного курса по Haskell я не встречал. Огромное спасибо Денису Москвину (основной преподаватель) и команде за курс! Курс состоит из 5 блоков, каждый из которых раскрывает некоторые аспекты языка: типы данных, списки, монады и т. п. Каждый блок — это набор видеоуроков с заданиями примерно на 5–6 часов работы. ...

4 апреля 2016 г.

Масштабируемые шрифты в LibGDX

Обновление 2016‑07‑14: Я всё‑таки нашёл способ работать с TTF‑шрифтами. Работать со шрифтами в LibGDX оказалось неожиданно сложно. Создать растровый шрифт проблем нет, но вот заставить его масштабироваться под разные разрешения — реальная проблема. Более или менее рабочая практика — использовать Distance Field. После этого нужно ещё пробросить шрифт в описание скина. Попытка использовать TTF провалилась. Настроить её в LibGDX проще простого, но вот результат получается ужасным. Возможно, я не до конца разобрался с этим процессом. Если у кого‑либо из читателей есть опыт генерации красивых шрифтов из TTF, поделитесь в комментариях. ...

14 марта 2016 г.

Полезняшка: responses

Если вы используете в своём проекте requests, то наверняка сталкиваетесь с проблемами тестирования. На помощь придёт библиотека responses, которая позволяет делать моки ответов вызовов requests. Мы в своём проекте используем эту библиотеку не так давно. Хотя из‑за особенностей окружения проекта мы часто обращаемся к огромному количеству REST API смежных сервисов. И до того, как requests попалась нам на глаза, код тестов представлял из себя нечто невообразимое, трудночитаемое. Пользоваться библиотекой невероятно просто. Для иллюстрации — пара примеров из документации. ...

9 марта 2016 г.