• Возрастное

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

    Раньше читал кучу ресурсов по RSS. По крайней мере источников двадцать было точно. Со временем список сократился до двух, другие надоели. То, что они пишут, либо неинтересно, либо уже пройдено. Либо у меня свое мнение, и лишний раз деребить душу не хочется.

    Занятно, что чем чаще пишет человек, тем больше этим бесит. О всяких Варламовых, Лебедевых и Навальных вспоминаю как о страшном сне. Эту дыру не заткнуть, а мне еще разбираться, какой из двадцати скопившихся постов прочесть. Раз в месяц — самое то для текущего состояния.

    Не прет почти никакое видео из Ютуба. Выщелкиваю подписки, которые когда-то ревностно искал. Не представляю, как смотреть чье-то выступление на 50 минут. Для меня это стало за гранью.

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

    Игры? Когда-то я даже жалел о том, что купил Мак — как теперь играть? Недавно посмотрел на Ютубе последний Дум. Первая мысль была — почему так однообразно? Все эти текстуры и дикая графика не прут. Раз в полгода прохожу что-то на эмуляторе первой Sony PS. При этом пользуюсь перемоткой вперед, чтобы ускорять медленные сцены.

    Не могу смотреть фильмы длинее двух часов — мука. Еле досидел Нолановский “Довод”. Если хочу что-то посмотреть, прежде всего проверяю хронометраж. Боготворю старые мульты Диснея по 80 минут с титрами. От современных 2:15 просто выворачивает.

    Уже не влекут другие языки программирования. После Кложи нельзя найти язык, который зацепит с той же силой. Зачем мне условный Golang? Коллега по работе не знает, как в нем сделать deep merge. У меня это пять строчек. И пусть оно ест в три раза больше памяти — мои силы важнее. Кроме Кложи, интересуюсь только Common Lisp-ом. Уйду в него, если с Кложей что-то пойдет не так.

    Раздражает обилие инструментов. Не хочу никаких Кубернетесов — только вчера Докеру научился. Не хочу всяких солидов, просто дайте словарь и функцию. Хочу убить тех, кто тянет в проект новые слои абстракций.

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

    Удивительным открытием оказалась своя книга. Писать ее полтора года не так изнурительно, как вести опенсорс или писать по ночам очередной “свой проект”. Вот такая асимметрия: каждый день пишешь по две страницы и норм, даже чувствуешь подъем. А после третьей недели кодинга во внеурочное время кажется, что разваливаешься на части. Болят шея и руки, глаза как помидоры, на любую мелочь готов убить.

    Опенсорс? Нет, спасибо. Чтобы закрыть ишью в опенсорсе, я взял помощника на зарплату. Что-то там контрибьютить для меня теперь так тяжело, что просто кричи.

    Такие дела. При всем этом мне, тем не менее, интересно следить за сменой привычек и восприятия. Посмотрим, что будет дальше.

  • Еще немного книг

    Выкладываю несколько прочитанных книжек. Полную подборку см. на книжной полке.

    Черный о красных. 44 года в Советском Союзе
    Роберт Робинсон

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

    Фрикономика
    Стивен Дабнер, Стивен Левитт

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

    Праведный палач. Жизнь, смерть, честь и позор в XVI веке
    Джоэл Харрингтон

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

    Джедайские техники
    Максим Дорофеев

    Набор советов о том, как справляться с задачами. Своего рода русский аналог Make Time (см. ниже). Местами наивно, но взял парку вещей на заметку.

    Программирование на Сlojure
    Чаз Эмерик, Брайан Карпер, Кристоф Гранд

    Первая книга о Сlojure на русском языке, которая вышла еще в 2013 году. Талмуд на 800 страниц. Материал не устарел, советую прочитать и сейчас. Минус в том, что мало полезных примеров, нацеленных на практику. Рад, что добрался до этой книги уже с багажом знаний о языке.

    Elements of Сlojure
    Zachary Tellman

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

    Apache Kafka. Потоковая обработка и анализ данных
    Нархид Ния, Шапира Гвен

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

    Код. Тайный язык информатики
    Петцольд Чарльз

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

    Автор, ножницы, бумага
    Николай Кононов

    Набор глав о том, как писать хороший текст. Напоминает "Пиши. Сокращай", но в другом ключе, в том числе литературном. Коротко, без воды, достойно внимания.

    Идеальный программист. Как стать профессионалом разработки ПО
    Роберт Мартин

    Мемуары и советы Роберта Мартина. Книга не столько о программировании, сколько о переговорах и отношениях в команде. Пригодится, чтобы понять: даже для программиста общение важнее кода.

    Вся кремлевская рать. Краткая история современной России
    Михаил Зыгарь

    Основные события России с 2000 по 2015 год и связанные с ними люди из Кремля. Книгу прислали в нагрузку с другой покупкой и я даже хотел ее выкинуть. Но читать оказалось так приятно, что проглотил за неделю, попутно воскрешая в памяти события прошлого и свою реакцию на них. Замечательное произведение.

  • Баг с почтой на Маке

    Наткнулся на странный баг с почтой. Касается MacOS, Mail.app и Gmail, то есть когда работаешь с Гугловым ящиком из обычного приложения на Маке. Ситуация: если долго набирать письмо, то при сохранении черновика на сервере создается новое письмо в цепочке. Выглядит так:

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

    Гуглеж показывает, что проблеме уже много лет, и она то появляется, то исчезает. Переписка в Гугло-группах напоминает синусоиду:

    • Чел 1: Письма дублируются!
    • Гугл: Починили.
    • (через год) Чел 2: опять дублируются!
    • Гугл: Починили.
    • (через полгода) Чел 3: у меня то же самое!

    На чьей стороне проблема, понять трудно. Скорей всего, при сохранении письма Mail.app не шлет какой-то айдишник или косячит с параметрами, то есть мячик на стороне Эпла. Потому что проблемы не было, пока пользовался веб-версией Gmail. Возможно, сохранение черновика опирается на параметры без документации, отчего и результат.

    Проблему легко победить. Из верхнего меню пройдите по пути Mail → Preferences → Accounts. В списке учеток выберите нужную и включите таб “Mailbox Behaviours”:

    В поле “Drafts Mailbox” откройте выпадашку, чтобы указать, где хранить черновики. Укажите последний пункт “Drafts” под секцией “On my Mac”:

    Теперь черновики будут храниться у вас на компе локально. Для коротких писем черновики вообще не нужны, а длинные лучше набирать в другой программе.

    Выставил эту опцию для всех Гугловых ящиков, и проблема ушла.

  • Книга в Читай-Городе

    Приятная возможность напомнить о книжке: теперь ее можно купить в сети “Читай-Город”. На подходе “Буквоед”. Спрашивайте везде!

  • Довод. Название

    Где-то читал, что название Tenet режиссер выбрал потому, что оно читается в обе стороны. Таким образом он проводит параллель с организацией, которая работает в обоих временных направлениях. И только недавно, когда шел и думал о чем-то краешком мозгов, догадался: а ведь русский перевод “довод” тоже читается наоборот.

    До чего же редкий случай! Нашлось слово, которое не только близко по смыслу к оригиналу (“принцип”, “догмат”), но и повторяет его семантику. Точное попадание, победа локализаторов.

    К сожалению, такое редко случается. Например, скоро выходит мультик Soul (в российском прокате — Душа). К переводу не подкопаешься, но семантика в том, что в сюжете переплетается загробная жизнь и музыка в стиле соул. То есть в названии два смысла — человеческая душа и музыка. Тут ничего не попишешь, бери что-то одно.

    А вот с Доводом зачетно вышло в плане названия. Но про сам фильм — как-нибудь в другой раз.

  • Зипперы в Clojure (часть 7). Обход в ширину. Улучшенный обмен валют

    Оглавление

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

    Алгоритм называется depth first или обход в глубину. При таком обходе код стремится в первую очередь вниз, а уже потом — в сторону (в нашем случае вправо). В этом легко убедиться, если разложить данные на части с помощью зиппера:

    (->> [1 [2 [3] 4] 5]
         zip/vector-zip
         iter-zip
         (map zip/node)
         (map println))
    
    ;; 1
    ;; [2 [3] 4]
    ;; 2
    ;; [3]
    ;; 3
    ;; 4
    ;; 5
    

    Read more →

  • Зипперы в Clojure (часть 6). Виртуальные деревья. Обмен валют

    Оглавление

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

    До сих пор вторая функция, которую мы передавали в зиппер, возвращала потомков из ветки. Для вектора это была просто seq, для XML — более сложная комбинация (comp seq :content). Оба варианта отталкиваются от родительского узла, и если потомков нет, функция вернёт nil.

    Но что если функция вернёт постоянный набор потомков:

    (fn [_]
      (seq [1 2 3]))
    

    Как поведёт себя такой зиппер? Напишем его:

    (def zip-123
      (zip/zipper any?
                  (constantly (seq [1 2 3]))
                  nil
                  1))
    

    Read more →

  • Зипперы в Clojure (часть 5). Редактирование

    Оглавление

    До сих пор мы игнорировали другую возможность зипперов. Во время обхода можно не только читать, но и менять локации. В широком плане нам доступны все операции CRUD (Create, Read, Update, Delete), знакомые из веб-разработки. Ниже мы разберем, как они работают в зипперах.

    Напомним, зиппер принимает третью функцию make-node, в которую мы до сих пор передавали nil. В ней не было нужды, потому что мы только читали данные. Зиппер вызовет функцию в момент, когда мы просим вернуть данные с учётом изменений, которые внесли в локации. Функция принимает два параметра: ветку и потомков. Ее задача — соединить их так, как это принято в дереве.

    Read more →

  • Разбор статьи из журнала «Код»

    На Хабре – моя публикация Разбор статьи из журнала «Код» (Яндекс Практикум).

  • Зипперы в Clojure (часть 4). Поиск в XML

    Оглавление

    Предположим, нам поставили задачу: из XML с товарами выбрать магазины, где продаются айфоны. Обратите внимание: мы впервые коснулись связи между узлами, и это важно. По отдельности выбрать данные легко. Магазины — это локации, у которых тег organization. Айфоны — локации, в которых узел с тегом product и атрибутом type="tablet". Но как найти связь между ними?

    В прошлый раз мы разложили XML в последовательность с помощью xml-tree. Проблема в том, что функция порождает коллекцию узлов без какой-либо связи, что не даёт нам решить задачу. Покажем это на примере. Для начала получим цепочку узлов:

    Read more →

Страница 4 из 52