-
Громкость
Сто раз наблюдал такую картину. Стоит в очереди или транспорте человек, тыкает пальцами в телефон, чего-то свайпает. Вдруг из телефона вырывается рев: заставка, музыка, крики. Просто чел открыл видео и в сотый раз наступил на грабли: у телефона и видео в приложении разный уровень звука.
Со мной это было много раз. Прислали видосик. Убавил качельку звука на минимум, тыкаю — орет. Да чтоб тебя.
Не понимаю, кто придумал это поведение. Зачем что-то отдельно регулировать, если хватает глобального уровня? Вы где-нибудь видели телевизор, который запоминает звук под каждый канал? Или радио, где под каждую станцию на панели отдельная ручка громкости? Вот оно, ограничение физического дизайна: нельзя вкатить глупость на ровном месте, тебя поправят инженеры.
У цифрового дизайна этого ограничения нет. Можно сделать десять экранов или пять каналов звука: звонок, приложения, игры, будильник, что там еще… И бесконечные настройки всего этого. Орет телефон — ты же понизил уровень звонка, балда, а надо было медиа! Учись пользоваться девайсом.
Технически я понимаю, что в телефоне может быть хоть десять каналов звука. Допускаю, что кто-то их регулирует отдельно. Но блин, на порядки чаще я вижу, как люди лихорадочно пытаются унять орущий телефон. Может, сделать наоборот — пусть громкость будет глобальной по умолчанию, а для гиков сделать настройки?
Кстати, я даже представить не могу, где найти уровень звука Телеграма или Ватсапчика. Спрашивается, как управлять тем, чего не видно?
Все это очень странно.
-
Твит картинкой
Наверное, вы не заметили, а на Медузе случилось эпохальное событие. Вышла статья, в которой твиты показаны не через встроенный
<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). Обход в ширину. Улучшенный обмен валют
Оглавление
- Зипперы (часть 1). Азы навигации
- Зипперы (часть 2). Автонавигация
- Зипперы (часть 3). XML-зипперы
- Зипперы (часть 4). Поиск в XML
- Зипперы (часть 5). Редактирование
- Зипперы (часть 6). Виртуальные деревья. Обмен валют
- Зипперы (часть 7). Обход в ширину. Улучшенный обмен валют
- Зипперы (часть 8). Заключение
В прошлый раз мы работали с деревом валют, чтобы построить цепочку обмена. Мы нашли решение задачи, но упомянули, что в особых случаях дерево может получиться бесконечным. Объясним, как это возможно. Для этого вспомним, как
zip/next
обходит дерево.Алгоритм называется depth first search или обход в глубину. При таком обходе код стремится в первую очередь вниз, а уже потом — в сторону (в нашем случае вправо). В этом легко убедиться, если разложить данные на части с помощью зиппера:
(->> [1 [2 [3] 4] 5] zip/vector-zip iter-zip (map zip/node) (map println)) ;; 1 ;; [2 [3] 4] ;; 2 ;; [3] ;; 3 ;; 4 ;; 5
-
Зипперы в Clojure (часть 6). Виртуальные деревья. Обмен валют
Оглавление
- Зипперы (часть 1). Азы навигации
- Зипперы (часть 2). Автонавигация
- Зипперы (часть 3). XML-зипперы
- Зипперы (часть 4). Поиск в XML
- Зипперы (часть 5). Редактирование
- Зипперы (часть 6). Виртуальные деревья. Обмен валют
- Зипперы (часть 7). Обход в ширину. Улучшенный обмен валют
- Зипперы (часть 8). Заключение
Предыдущих занятий было достаточно, чтобы перейти к экспериментам над зипперами. Предлагаем читателю подумать над необычным примером.
До сих пор вторая функция, которую мы передавали в зиппер, возвращала потомков из ветки. Для вектора это была просто
seq
, для XML — более сложная комбинация(comp seq :content)
. Оба варианта отталкиваются от родительского узла, и если потомков нет, функция вернётnil
.Но что если функция вернёт постоянный набор потомков:
(fn [_] (seq [1 2 3]))
Как поведёт себя такой зиппер? Напишем его:
(def zip-123 (zip/zipper any? (constantly (seq [1 2 3])) nil 1))
-
Зипперы в Clojure (часть 5). Редактирование
Оглавление
- Зипперы (часть 1). Азы навигации
- Зипперы (часть 2). Автонавигация
- Зипперы (часть 3). XML-зипперы
- Зипперы (часть 4). Поиск в XML
- Зипперы (часть 5). Редактирование
- Зипперы (часть 6). Виртуальные деревья. Обмен валют
- Зипперы (часть 7). Обход в ширину. Улучшенный обмен валют
- Зипперы (часть 8). Заключение
До сих пор мы игнорировали другую возможность зипперов. Во время обхода можно не только читать, но и менять локации. В широком плане нам доступны все операции CRUD (Create, Read, Update, Delete), знакомые из веб-разработки. Ниже мы разберем, как они работают в зипперах.
Напомним, зиппер принимает третью функцию
make-node
, в которую до сих пор мы передавалиnil
. В ней не было нужды, потому что мы только читали данные. Зиппер вызовет функцию в момент, когда мы просим вернуть данные с учётом изменений, которые внесли в локации. Функция принимает два параметра: ветку и потомков. Ее задача — соединить их должным образом.