• Смысл

    Смысл жизни — пожалуй, самый инфантильный вопрос, которым может задаться человек. В жизни особи не больше смысла, чем в существовании камня. Тем более, что сама постановка вопроса убога. При чем тут смысл? Почему не цель или причина? С этими словами в вопросе становится больше смысла (забавная игра слов).

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

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

  • Что там с книгой? Полгода спустя

    Есть несколько новостей насчет книжки.

    • Издательство сообщает, что скоро ее можно будет купить на Алиэкспрессе. Отношусь к этому скептически, но все же новая площадка — почему нет? Вдруг у вас там бонусные баллы, купоны и прочие ништяки, которые давно пора потратить? Вот и повод. Или вы застряли в Китае, а книги под рукой нет, и вот пожалуйста. Как будет ссылка, сразу вам сообщу.

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

    • Сделал публичным репозиторий книги! Милости прошу: igrishaev/clj-book. Проект целиком на LaTeX, Docker и немного Кложи. Уточню, что я не спец в LaTeX, поэтому приму любую критику и советы. Инструкции по сборке допишу в readme чуть позже.
    • Книга в процессе перевода на английский. Вместе с Евгением Бартовым мы работаем уже над седьмой главой. Впереди долгая шлифовка и адаптация правок из второго издания, но когда-нибудь английская книга выйдет. Меня уже завернули в The Pragmatic Programmer из-за проблем с правами, так что буду искать другой вариант.

    Пока что все. Как видно, почти каждый пункт тянет на отдельный пост, буду освещать по ходу дела.

  • Фон на созвоне

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

    Не знаю как у других, а в Google Meet можно поменять фон на картинку и даже загрузить свою. Прикольная штука, коллеги часто этим пользуются. Но до чего же скудная фантазия у людей! Один ставит тропической остров, второй — серверную стойку. Что за убожество.

    Фон должен быть не просто фоном, он должен вызывать какие-то эмоции, воспоминания. Говоря русским языком — МЭСАДЖ. За пять минут накидал фонов, которые могут найти отклик в собеседниках. Замечу, что фоны сохраняются, и дальше их можно переключать мышкой.

    Божественный ковер:

    Read more →

  • Порты и прогресс

    Сегодня утром потянулся к ноуту, чтобы вставить провод в USB Type-C. И только тогда заметил, что все четыре порта заняты.

    По часовой стрелке:

    • монитор (Type-C → Displayport, 144Hz);
    • питание ноута;
    • зарядка устройств (телефон, клавиатура, тачпад, наушники);
    • токен доступа для работы.

    Ноут с четырьмя портами у меня недавно, с осени. Хорошо помню, что как и многие другие, переживал из-за портов. Как подключать старые девайсы? А что с картами памяти? Как буду без HDMI? Таскать пачку переходников?

    На первых порах пришлось кое-что докупить: взял фирменный блок c тремя портами (USB, HDMI и Type-C):

    , а также китайский донгл с нового USB на простой:

    Однако сейчас я ими уже не пользуюсь. Пихать чужие флешки небезопасно, а любой файл проще кинуть в мессенджерах. HDMI не поддерживает герцовку выше 60, и с недавних пор мне стало это важно (потом напишу отдельно). Карты памяти? Проще подключить андроид родственника по проводу, чем выковыривать карточку. Тем более, что китайцы ставят ее под батарею и в другие интересные места.

    Словом, если бы мне кто-то сказал, что уже скоро все четыре порта Type-C будут заняты, я бы удивился.

    В этот момент я понял, что такое прогресс. Как бы ни стонали обыватели, новый порт лучше и удобней. Он маленький, мощный, поддерживает все известные форматы. По нему передают видео, звук, данные, электричество, словом, огонь. Не удивительно, что два метра кабеля Thunderbolt стоят 14(!) косарей: по сути это провод из ста проводов.

    Для экспериментов я купил короткую версию длиной 0.8 метра и доволен ей.

    Удивляет скорее то, что хотя в ноутах Apple везде новые порты, на других устройствах все еще старый Lightning. Даже в последних айфонах. Приходится держать для зарядки провод Type-C → Lightning. Этому пора положить конец — везде ставить Type-C.

  • Почитать на выходных (выпуск 32)

    Горячо советую прочесть эти две статьи:

    • Как писать статьи в IT-журналы и блоги

      Интервью с редактором журнала “Хакер” Андреем Письменным. Очень глубокий, дружелюбно поданый материал. Допускаю, что как и я, вы читали “Хакер” сто лет назад на бумаге. Даже если так, все равно прочитайте: столь качественного интервью не попадалось уже давно.

    • In-depth: Functional programming in C++

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

  • Базы данных в Clojure (1)

    В этой главе мы обсудим, как работать с реляционными базами данных из Clojure. Большую часть описания займет библиотека clojure.java.jdbc и ее надстройки. Вы узнаете, какие проблемы обычно сопровождают доступ к базам и как их решать в Clojure.

    Реляционные БД

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

    Базы данных, или сокращенно БД, бывают разных видов. Они различаются архитектурой, способом хранения информации, протоколом работы с клиентом. Некоторые базы работают только на клиенте, потому что не предлагают сетевой интерфейс. Другие хранят только текст и оставляют вывод типов на усмотрение клиента. В этой главе мы не ставим цель охватить как можно больше СУБД и способов для работы с ними. Наоборот, сфокусируем внимание на том, что вас ждет в реальном проекте. Скорей всего это будет классическая реляционная БД вроде PostgreSQL или MySQL. О них мы и будем говорить.

    Read more →

  • Зипперы в Clojure (часть 8). Заключение

    Оглавление

    В заключение рассмотрим другие возможности зипперов, которые могут быть вам полезны.

    HTML

    И прошлых примеров видно, что зипперы подходят для XML. В том числе их можно применить и для HTML. Строго говоря, синтаксис форматов отличается: некоторые HTML-элементы вроде <br> или <img> не имеют закрывающих тегов. Проблему решают парсеры, которые учитывают эти особенности. На выходе получим XML-дерево, которое поддается обходу как в примерах выше.

    Read more →

  • Помогайте (опровержение)

    Послушайте еще одну кулстори и выводы из нее.

    Недавно я смотрел код на Джаве, и не понял одну вещь. Все-таки я кложурист и в кишки JVM лажу только по необходимости. Было непонятно, почему вместо интерфейса можно передать лямбду, ведь последняя, насколько я знаю, имплементит Runnable и Callable, а в коде был левый интерфейс. Нормальный вопрос, который знает средней руки джавист. И тут Штирлиц ошибся — спросил об этом в Телеграм-чатах.

    Думаете, кто-то ответил? В целом да, но нет так, как я ожидал. Меня спросили, почему я считаю, что должно быть по-другому (хотя я не считал); зачем мне это нужно и откуда такие вопросы. При этом в одном из чатов я был уже больше года, и подозревать в троллинге было нелепо.

    Видно же, что люди знают ответ, никто, сука, никто не написал: начиная с JVM 8 компилятор адаптирует лямбды под интерфейсы с одним методом, точка. Спасибо, хоть ссылку на чей-то блог скинули после пререканий.

    И вот я сидел и обтекал с этого. Парни, вы ни какие не профессионалы, а деды, которые только и ждут реплики новичка, чтобы накинуться как воронье. Человек, который бы ответил хоть одним предложением, получил бы мое расположение навсегда. Но нет — были только еврейские вопросы обратно.

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

    Несколько лет назад я писал пост про помощь коллеге. Опровергаю: помогать коллегам нужно. Все равно вы спустите свободное время на Ютуб, а тут хотя бы польза — умножение коллективных знаний.

    На работе у нас дежурство по ответам на тикеты клиентов. Никто не любит возиться с ними, и я тоже. Но на некоторые вопросы, особенно связанные с веб-разработкой, отвечаю супер-подробно, по два экрана получается. Чел на той стороне взрывается кипятком, потому что обычно поддержке лишь бы закрыть тикет, а тут такое чтиво. Эх, мне бы так отвечали!

    Вот и сейчас я пишу этот пост после того, как ответил некоему Томасу из Швейцарии. Экран текста. Чел строит приложуху, но не идут дела. Зато благодаря моим письмам продвинулся на стадию прототипа.

    Где-то я читал басню о том, как на заре Микрософта один клиент купил Ворд и затупил. Он написал бумажное письмо с вопросами и бросил в ящик у двери офиса. Через неделю он получил ответ на четырех листах, написанный от руки одним из разработчиков. Тот чел до сих пор хранит это письмо. Вот она какая, любовь к пользователям.

    Умрете — кто о вас вспомнит? Только те, кому вы помогали. Отвечайте и тогда станете крутыми. Время никуда не убежит, все успеете. А иначе можно стать токсичным мудаком и не заметить этого.

  • Громкость

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

    Со мной это было много раз. Прислали видосик. Убавил качельку звука на минимум, тыкаю — орет. Да чтоб тебя.

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

    У цифрового дизайна этого ограничения нет. Можно сделать десять экранов или пять каналов звука: звонок, приложения, игры, будильник, что там еще… И бесконечные настройки всего этого. Орет телефон — ты же понизил уровень звонка, балда, а надо было медиа! Учись пользоваться девайсом.

    Технически я понимаю, что в телефоне может быть хоть десять каналов звука. Допускаю, что кто-то их регулирует отдельно. Но блин, на порядки чаще я вижу, как люди лихорадочно пытаются унять орущий телефон. Может, сделать наоборот — пусть громкость будет глобальной по умолчанию, а для гиков сделать настройки?

    Кстати, я даже представить не могу, где найти уровень звука Телеграма или Ватсапчика. Спрашивается, как управлять тем, чего не видно?

    Все это очень странно.

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

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

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

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

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

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

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

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

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

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

Страница 6 из 55