-
Люблю паттерны
Паттерн – повторяющийся узор, которым можно покрыть поверхность любой площади. Хорошую подборку можно посмотреть на сайте Лебедева. А еще хорошие паттерны встречаются в жизни:
-
Недостатки питона
Я один из тех, кто проводит в Датаарте собеседования по Питону. За два года провел около пятидесяти собеседований. Я веду специальный список, в котором собираю наиболее интересные вопросы к кандидатам. Интересные – не значит сложные или такие, чтобы запутать или унизить собеседника. Цель собеседования – определить, подходит нам кандидат или нет. Интересные вопросы дают кандидату возможность выговориться, рассказать о прошлом опыте, привычках. На такой вопрос нельзя ответить однозначно да или нет. Это аналог открытого вопроса в переговорах.
Один из интересных вопросов звучит так – какие в Питоне есть недостатки? Как вы с ними боретесь?
Вопрос замечателен своей глубиной. Это значит, что на каждую ответную реплику можно задать уточняющий вопрос, продвигаясь вглубь, пока у кого-то из нас двоих не закончится запас знаний в предметной области.
Весьма дурным ответом считаю, что в Питоне нет недостатков. Кандидат расписывается в своей неопытности. Идеального языка программирования нет. Скорее, он только начал работать с Питоном и прибывает в эйфории, когда вместо 15 строчек можно сделать то же одной.
Подвох кроется в том, что фактически в Питоне нет недостатков, но есть особенности, которые нужно знать. Ведь если б были откровенные недостатки, их бы исправили, и получился бы идеальный язык. Но этого не происходит, и вряд ли произойдет в будущем.
Когда кандидат приводит в пример какую-то слабую особенность Питона, я в первую очередь интересуюсь, в какой ситуации кандидат с ней столкнулся и как разрешил. Часто случается, что тот или иной аргумент взят с Хабра или ЛОРа, то есть не имеет отношения к реальности.
Ниже привожу потенциальные ответы и свои комментарии к ним. В конце – свою точку зрения на поставленный вопрос.
Ответ номер один – медленное быстродействие Питона. Сразу же интересуюсь, насколько медленнее, в каких именно случаях. Приходилось ли писать такой код, когда алгоритм упирается в производительность интерпретатора. На самом деле, редко кто может этим похвастаться. Питон чаще используется в вебе, а любой веб – это клубок сетевых вызовов. Типичное веб-приложение дергает чужие урлы, читает базу, лазит в мемкеш. Большая часть времени уходит на ожидание сокетов. Это сводит производительность интерпретатора к математической погрешности.
Далее, ГИЛ – глобальный замок, который не дает исполнятся нескольким тредам одновременно. Опять же, вопрос – какие задачи лучше решаются тредами? В вебе все работает на процессах. Порождение треда на каждый запрос убьет систему в два счета. ОК, в чем разница между тредами и процессами (модули Threading и Multiprocessing)? Без ответов на эти вопросы аргумент не принимается.
Строки и изменения в третьем Питоне – повсеместный Юникод. Спрашиваю, в чем были проблемы со строками во второй ветке. Как кодируется и декодируется Юникод. Сколько байт тратит UTF-8 на один символ? Какие операции быстрей – на Юникоде или на 8-битных строках? Заметил – тот, кто понимает работу со строками, исправлениям в тройке не рады.
В процессе ответа кандидат имеет полное право спросить мою точку зрения на недостатки Питона. Отвечаю примерно так.
Производительность Питона является косвенным недостатком. Столкнуться в вебе с ним практически нереально. В практике у меня был случай, когда утилита на Питоне сильно проигрывала аналогичной утилите на Си. Я пытался распарить лог Энджинкса размером в пять гигабайт. Если ngxtop сделал это за час, то другая утилита (не помню название) – за пять минут. Это тот случай, когда критические участки кода нужно выносить из Питона на Си или использовать другие утилиты.
Есть у меня претензии к оформлению кода с использованием
*args, **kwargs
. Сама по себе это классная штука, но некоторые используют достоинства языка себе во вред. Например, функция или конструктор принимают много необязательных параметров. Хорошим тоном будет перечислить их все в сигнатуре со значениямиNone
. Однако, попадаются те, кто просто лепит*args, **kwargs
, и внутри тела функции разбарет их вручную. В лучшем случае в докстринге указано, что можно передавать. Это ломает автокомплит, подсказки в редакторах, вынуждает читать код. Короче, выходит проигрыш в усилиях – поленившись один раз, разработчик вынуждает напрягаться других многократно.Строки и третий Питон. Моя точка зрения здесь лаконична. Разработчик, который хорошо знает, как устроены кодировки и Юникод, не получит в тройке никаких преимуществ, наоборот – только боль. Очень часто мы работаем с 8-битными строками, сплитим, тримим, делаем замену. Да, по сути это байты, но что с того? На каждый чих переводить байты в Юникод, я считаю, глупо. В тройке потенциальные трудности со стоками спрятали в черный ящик. Оставили начинающих разработчиков в неведении, что происходит под капотом. Незнание кодировок рано или поздно выстрелит в самый неприятный момент.
Вот примерно таким я вижу ответ на вопрос о недостатках Питона. Согласитесь, из ответа можно получить много информации о кандидате и его опыте.
Задавайте открытые вопросы на собеседованиях. Не провоцируйте холивар, но подталкивайте к полному, развернутому ответу. Вы больше узнаете о кандидате, он будет к вам расположен, т.к. вы – слушатель. Принять окончательное решение – брать на работу или нет – станет проще.
-
Депардье
Вот дурак этот Депардье. Позорно бежал из страны, в которой, собственно, и сделал карьеру. Бежал, чтобы сохранить бабло. Сам я тоже против прогрессивной шкалы, да и вообще против налогов. Но, блядь, на кой хрен тебе столько денег? Еще больше пузо отращивать? Вложись в новые технологии. Перечисли раковым больным. Инвестируй стартапы. Жертвуй неизлечимым котикам. Да почитай, наконец, чем Билл Гейтц с женой занимаются, они подскажут. Рано или поздно с таким пузом возникнут болячки, и любые деньги станут не в счет. Ну сделай же мир лучше! Вместо этого Депардье едет в Россию, получает паспорт и теперь готов за нее умирать. Занавес.
-
Боремся со ссылками в новом табе
Прекрасное расширение для Хрома Death To _blank заставляет все ссылки открываться в текущем окне. Это очень классно. Теперь не нужно страдать из-за СЕО-дрочеров и просто дебилов, не желающих отпускать посетителя с сайта. На каждую хитрую жопу есть хер с винтом. В опциях можно указать домены, для которых правило не действует. По умолчанию добавлены Гмейл и еще чей-то почтовик.
Если выражаться без эмоций, то открывать ссылки в новом окне – моветон. Пользователь сам решит, что ему нужно – в этой странице или в новой. Есть хоткеи (клик с управляющей клавишей) и пункт в выпадающем меню. Ссылка в новом окне нужна только в приложениях, мимикрирующих под десктоп, например, почтовики, бухгалтерские веб-морды, сложные админки. Открывать все в новом табе – рак головы.
-
Статичный блог для queryfeed.net
У Кверифида появился уютный бложек с РСС-лентой. Посты оттуда автоматом транслируются в твиттер и фейсбук проекта.
Отдельная история о том, как выбирал движок для блога. Ставить на сервер Пых, Апач и Мускуль ой как не хотелось, ведь все это говно придется мониторить. И тут мне вспомнился принцип идеального объекта. Это когда функции объекта есть, а объекта нет. Значит, нужно, чтобы блог был, но не пришлось бы париться с установкой софта и поддержкой. Решение – сделать статичный блог на базе какого-то генератора. Наполнять его и генерить статику на локальной машине, заливать через Гитхаб или scp.
Генераторов статичных сайтов сейчас уйма. На этом и других сайтах можно посмотреть сравнительные таблицы. Я выбрал вот этот движок, потому что, судя по описанию, он очень прост, есть подробная документация, широкое сообщество. Действительно, вот неполный список сайтов с исходниками. Можно смотреть, как сделаны чужие блоги, заимствовать удачные решения.
Я не буду подробно описывать процесс работы с таким блогом, благо документация хорошая. Скажу, что произвело на меня впечатление.
Наполнять и сопровождать такой блог оказалось экстремально просто. Ваш блог – это набор файлов и папок. Страницы и посты можно писать на нескольких языках разметок, я предпочитаю обычный Маркдаун – проще и удобней еще ничего не придумали. Шаблоны – это обычный html с вкраплениями управляющих конструкций. Скрипт jekyll генерит из этой папки другую папку, в котором готовый сайт с РСС-лентой. Если нужно поменять дизайн – поправили шаблоны, снова сгенерили.
Исходники такого блога храним на Гитхабе или еще где. Благодая системе контроля версий разрешается море проблем – сразу есть версионирование страниц, например. Захотели – откатили комит, вернули старую страницу, собрали, залили. С таким блогом может работать сразу группа людей: кто-то написал статью, залил пулл-реквест, прошел ревью, смерджил, залил на сервер. Красота.
Не нужно заморачиватсья с установкой софта. Настроить правильно, с учетом всех требований безопасности похапэ, Апач и БД – дело нескольких дней. Гуглю по словам “setup php apache mysql”, по ссылкам открываются простыни на 10 экранов вроде этой. Потом в вашем Друпале или Вордпрессе найдут дыру и школие поломает сервер. Статичный блог этих недостатков лишен. Он раздается Энджинксом напрямую с реактивной скоростью, быстрее ничего быть не может.
Полный констроль за шаблоном и скриптами. В CMS это делается модулями, каждый притормаживает систему. В статичном блоге так: вставил скрипт Гугло-аналитики – пошла аналитика, вставил код комментариев от Disqus – подключились коменты. Все по-быстрому и малой кровью.
Словом, движком jekyll я люто-бешено доволен, всем советую. Если довести тему и интерфейс до уровня той же Эгеи, получится супер-связка.
Комментарии из старого блога
06/04/15 Александр Рянин: Пробовал переехать на Октопрэсс, но не удалось всё правильно установить. Настраивал на Мак ОС.
Почему выбрали именно Джэкил?
06/04/15 Иван Гришаев: Потому что в каком-то рейтинге он оказался сверху. Документация очень простая. Еще важно количество комитов в репозитории. Взгляните: https://github.com/jekyll/jekyll – почти 6000 комитов и 500 участников. Ну и на практике все оказалось просто.
06/04/15 Роман:
Это когда функции объекта есть, а объекта нет.
Вордпрессе найдут дыру и школие поломает сервер
Мне на ум приходит не тризовская, а даосская аналогия: «Как можно убить то, что никогда не было живым?»
Горячо рекомендую «StaticPress».
06/04/15 Иван Гришаев: Спасибо, но вряд ли возьмусь за него. По части сложности WP на порядки сожнее Jekyll.
-
10 уроков на Хекслете
Вот я сделал 10 уроков про Питон. Рассказал про основы синтаксиста, базовые типы, коллекции, итерацию, функции, строки и юникод, логические операторы. Пока что все уроки бесплатны.
Все видосы лежат в моем плейлисте на Ютубе. В общей сложности из посмотрели примерно 4000 человек. На уроки подписалось около 2000 человек. Если хотя бы десятая часть освоит Питон, буду гордиться своим вкладом.
-
Срач на Руфабуле
Я почитываю Руфабулу, авторы туда пишут хорошие – Никонов, Нестеренко. Но, сука, даже взрослые образованные люди начинают срач из-за предлога в/на в отношении Украины! А другие поддерживают. Это какой-то пиздец. Ощущение, что попал на подростковый форум, где каждый – филолог с двадцатилетним стажем. Еще раз – в этой серии постов препираются взрослые люди с несколькии образованиями, семьями, детьми. Они выясняют, писать одну букву или две перед словом “Украина”. Пожелаем им удачи.
Неполное собрание сочинений:
- http://rufabula.com/author/alina-vituhnovskaya/535
- http://rufabula.com/author/sklyarov/533
- http://rufabula.com/author/mironova/536
Несколько пунктов на заметку:
- Спорить бессмысленно, и вот почему.
- “Великий и могучий” – это такой затасканый баян, что фейспалм.
- Носитель языка никому ничего не должен, в том числе и самому языку. Пишите в или на – как захочется.
-
Успехи учащихся
-
Величайший мудизм —
отсутствие ссылки unsubscribe в очередной левой рассылке с сайта, где ты один раз. JWPlayer, например.
-
Девять уроков на Хеслете
Я делаю уроки по Питону на Хекслете. Сегодня в курсе “Введение в Питон” уже девять уроков. Готовлю десятый с вопросами для самопроверки. Чтобы научиться Питону, запишитесь на курс. Я делаю уроки с упором на практику, не развожу демагогию, пресекаю холиварные вопросы (какой оператор форматирования использовать). Я отвечаю на сообщения, обсуждаю решения практических заданий в личной переписке. Чтобы программировать на выразительном языке, запишитесь на курс.