• Твит картинкой

    Наверное, вы не заметили, а на Медузе случилось эпохальное событие. Вышла статья, в которой твиты показаны не через встроенный <iframe>, а картинками. Я даже не поверил, открыл инспектор и проверил. Картинки, офигеть.

    Вёрстка странная: где-то <source>, а где-то <img> и base64. Но при всей примитивности это огромный шаг. Встроенные твиты, конечно, глупость; но как и с любой глупостью, на ее преодоление нужны силы. И чем шире заблуждение, тем сильнее должен быть рывок.

    Я никогда не мог увидеть встроенный твит. То ли это блокировщик, то ли политики CORS в браузере, а может, еще что — не важно. У меня обычный Хром и пара блокировщиков без настроек. Не грузится контент — мяч на вашей стороне. Думайте сами, как доставить его через блокировщики. Поставьте их себе и проверьте локально.

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

    Всё же нашлась в Медузе светлая голова (причём не обязательно автор статьи). Кто-то понял, что картинка должна быть картинкой, а не слоём десяти абстракций (ifame, CORS, JavaScript, etc). Твит можно удалить, заблокировать, Твиттер прилёг, админ закрыл доступ. Картинка — это снимок объекта в момент времени. Я увижу объект в том виде даже через десять лет, когда и Твиттер продадут, и твит пометят как оскорбляющий всех на свете, или ещё что.

    В Твиттере бывает видео, но уже два этих слова в одном предложении — Твиттер и видео — заставляет меня фыркнуть. Анимированных гифок на 30 секунд не надо; нормальное видео должно быть на Ютубе.

    Камней в огород заслуживают ребята, которые постят код встроенными гистами. Это за гранью: вместо того, чтобы вставить код текстом и подсветить каким-нибудь highlight.js, который везде по умолчанию, чел копирует пять строчек ямла, делает гист, копирует ссылку на iframe и вставляет в бложик. В основном так делают на Медиуме, что говорит за себя.

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

    В общем, в чьей-то голове зажглась лампа: твиты нужно вставлять картинками. Шлю тому человеку лучи добра и любви. Желаю, чтобы так было всегда и другие опомнились.

  • Возрастное

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

    Раньше читал кучу ресурсов по 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 →

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

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

Страница 2 из 50