• Тетрадь

    Иногда меня охватывают приступы продуктивности: я записываю задачи, ставлю помидоры и пишу в блог об эффективности.

    Это временно. Потом меня отпускает, и я веду дела как все: урывисто и ситуативно.

    Только одну вещь удалось сделать привычкой: вести тетрадь. Пишу в нее список дел, мелкие заметки, схемы. Одно время даже вел дневник. И должен сказать, тетрадь — великая вещь.

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

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

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

    В тетради можно записать список дел на месяц вперед, сделать одно и забить. А через месяц вернуться и продолжить, и дела рано или поздно будут сделаны. Прямо сейчас пролистал на двадцать страниц назад. Весь лист А4 занят списком дел в две колонки. Когда-то он казался мне адом, а сегодня в нем осталось два не зачеркнутых пункта. И таких страниц хватает.

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

  • Книга в ДМК-Пресс

    Моя книга про Кложу выходит в издательстве ДМК-Пресс. Ожидаемая дата — середина ноября. Твердый переплет, формат B5 (165x235 мм).

    Внимание: на время предзаказа цена 799 рублей (вместо 999 рублей). С промокодом

    Grishaev_Clojure20
    

    она станет еще меньше. Если вы бываете в книжных магазинах, то знаете, что компьютерных книг дешевле тысячи почти не бывает. А тут такое предложение! Надо брать.

    Книга почти ничем не отличается от второго издания, что вышло в Ридеро. Исправил опечатки и неточности в коде, на которые указали читатели. Особая благодарность Алексею Иванцову, который не просто нашел ошибки, но и оформил их в виде PR к репозиторию книги. Мне оставалось только нажать кнопку, чтобы их принять.

    Кроме того, собрал и залил исправленные PDF на Gumroad. Если вы уже покупали там, зайдите и скачайте новые файлы. Если нет — самое время купить, цена всего пять долларов.

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

    Во-вторых, приятно, что ДМК-Пресс — издание с долгой историей и богатым списком выпущенных книг. Именно в ДМК девять лет назад вышло “Программирование на Clojure” — тот самый альманах на 800 страниц. Он кстати, почти не устарел, советую прочитать. Вдвойне приятно, что моя книга займет место рядом с ним.

    Что это значит для читателя? Главное — книгу в твердой обложке теперь можно купить не только у меня, а на сайте ДМК или в магазине. Это главная проблема Ридеро: у них нет массовой печати в твердой обложке, только разовый (и потому дорогой) тираж. Так что теперь не обязательно слать мне Яндекс.Деньги: заказывайте на сайте ДМК. Однако я всегда рад подписать книжку и отправить в любую страну.

  • Реляционные базы данных в Clojure

    Содержание

    Реляционные базы данных

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

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

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

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

    Реляционные базы данных называют так из за модели реляционной алгебры. Это изящная математическая модель с набором операций, например выборкой, проекцией, декартовым произведением и другими. Из модели следуют строгие правила о том, как работает та или иная операция. Поэтому базы данных работают не спонтанно, а по четким алгебраическим правилам. Из этих правил следуют нормальные формы (первая, вторая и третья), доказать которые можно аналитически, а не на глаз.

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

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

    Read more →

  • Мертвые программы

    Самые лучшие программы — те, что обыватели называют “мертвыми”. То есть те, что обновляются либо никогда, либо редко и по мелочам. Иной раз поражаюсь: собеседник вроде неглуп, но Sublime Editor у него считается мертвым. Видите ли, давно не обновлялся.

    Не обновлялся, и что? Это же прекрасно! Никаких неожиданностей с интерфейсом, дуракцих фич, синхронизации учетной записи, облачной подписки, что там еще… Как в старые добрые времена. Поставил Фотошоп версии пять, через год вышел шестой. А не через день, как сегодня. И нельзя запустить, пока не скачаешь.

    Желая обновлений, вы сами накликаете беду. Пусть будет софт, который не обновляется. Такой, чтобы из года в год мы получали ту же программу, что и раньше. Глупцы не понимают, что индустрия насыпет им обновлений сверх меры. Оно вам надо? Софт, который из года в год работает одинаково, – разве не будет он глотком воздуха в этом аду?

    Удивляюсь тем, кто отслеживает грядущие фичи и расстраивается, если их нет в релизе. Я всегда полагался только на то, что идет из коробки. Нахожу забавным обзоры релизов какой-нибудь IDE от Джетбрейнс. Тут заработал автокомплит! А здесь новое окошко! Прокрутка на 3.3 процента плавнее! Поддержка эмодзи, вы слышали! Смехота и только.

    Сердце моего окружения — это именно мертвые программы: Emacs, Git, Bash, утилиты GNU, LaTeX. В них я могу создать программу, сайт, книгу. Они обновляются, но это не играет роли: я использую только то, что в них уже много лет. Если завтра за их поддержку введут смертную казнь, мне хватит их на оставшуюся жизнь. Они не отвалятся из-за протухшей учетной записи, заблокированной кредитки или переезда в Крым-наш.

    Это очень круто и дает настоящую, неподдельную радость.

  • Принтеры

    Пожалуй, самая нелепая, не поддающаяся описанию вещь в нашем мире — это принтеры.

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

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

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

    Самая феерия — это дозаправка картриджа. Производитель считает, что ты должен купить новый у официалов, и если вставить заправленный картридж, система его не увидит. Для своего принтера нагуглил инструкцию (копирую как есть):

    • Включите аппарат и откройте крышку.
    • Теперь выключите принтер.
    • Зажмите клавишу «Go» на клавиатуре панели управления устройства и не отпускайте.
    • Снова включите принтер.
    • Дождитесь пока начнут гореть все индикаторы кроме «Ready».
    • После еще три секунды подержите и отпустите «Go».
    • Теперь 10 раз нажмите «Go» и следите, чтобы после каждого загорался индикатор «Ready» именно зеленым цветом.
    • После делаем небольшую паузу. В это время должны гореть три лампочки вверху.
    • И снова кнопку «Go» жмем 5 раз.
    • После этих мероприятий лампочки еще некоторое время помигают разными оттенками.
    • В конце лампочка «Ready» должна начать постоянно светится.

    Удивительно, но это дерьмо работает. Реально, если нажать, подержать, помигать, отпустить и так далее, то принтер подхватит заправленный картридж. Не знаю плакать или смеяться. Представьте, если после замены воздушного фильтра в машине надо зажать тормоз и газ, открыть все двери и перекреститься. А тут всерьез.

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

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

  • Что я делаю

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

    Менторю пару девушек: студентку и школьницу. Делаю это бесплатно, потому что не вижу смысла брать с них денег. Путь лучше в будущем научат кого-то еще.

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

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

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

    А блог… Что ж, пусть со временем он станет архивом. Реальные дела важнее.

  • Анонс главы. Базы данных в Сlojure

    Только что закончил черновик главы о реляционных базах в Сlojure. Вышло сто страниц А4; в книжных страницах это около ста шестидесяти. Мой самый большой текст.

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

    Посмотрел на дату публикации того огрызка и не поверил: ноябрь 2020 года. Прошел почти год! С возрастом время летит незаметно.

    Впереди еще несколько этапов чистки, и только потом опубликую главу. Думаю, ждать осталось месяц.

  • Медуза

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

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

    Повесткой я называю тезисы и идеи, за которые кто-то топит. Например, моя повестка — программирование, Лисп и ФП, образование, книги, управление временем. Повестка условного Варламова — урбанистика, архитектура, политика, общественные события. В блоге повестка обязательна: читатель сразу должен понять, за что топит автор, и исходя из этого уйти или остаться. У меня, как и у всех, есть мнение насчет госдолга США и как поднять Россию с колен, но я стараюсь не писать на эти темы. В первую очередь из уважения к читателям.

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

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

    Талибы(1) — плохо. Навальный — жертва. Его расследования — круто. Коронавирус — главная угроза обществу. Вакцинация — хорошо. Тот, кто отрицает — ковид-диссидент (даже термин придумали). Песков несет пургу. Стеб над Путиным. Несправедливое отношение к геям и неграм. Ущемление лесбийских пар в России.

    Ощущение, что Медуза возомнила себя транслятором передовых идей Европы и пытается окультурить отсталую Россию. Культурное прокси в Риге.

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

    После признания ингантом Медуза ведет себя, как обидевшаяся женщина. В заголовках — пассивная агрессия, стеб, сарказм. Так быть не должно. А еще эмодзи в заголовках. Если смешно, то ржачный смайлик. Если грустно, то плачущий. Какое дно.

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

    Конечно, каждый из нас нуждается в толковании событий. Хорошо то или иное событие или нет, молодцы эти ребята или нет. Поставили скульптуру в виде говна глины. Если коллеги заспорят в курилке, за что мне топить? Говно или искусство? Для этого и существует блоггинг — люди делятся мнением, а читатель выбирает, к какому лагерю примкнуть. Но тут важны две вещи.

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

    Это все равно что клевать мертвечину.

    (1): вроде бы считаются запрещенной в России организацией, так что вынужден дать эту сноску.

  • Стратегия

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

    • нужно нанимать только фулстек-разработчиков;
    • нужно вставать в 5 утра;
    • нужно читать по три книги в месяц

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

    Что делать? Менять технический стек? Закупать книги? Ставить будильник?

    Чтобы все объяснить, прибегу к дешевому трюку — аналогии.

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

    У слова “стратегия” есть и другой смысл — набор действий в игре. Например, удачная комбинация конкретных юнитов. Или порядок постойки зданий. Или покупка предметов и зачистки монстров для раскачки.

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

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

    Теперь обратно к говорящим из Ютуба. Рынок — это игра, в которой многие факторы не определены. Жизнь постоянно корректирует его законы. Нет стратегии, которая обязательно принесет прибыль.

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

    Нужно вставать в 5 утра? Обратитесь к истории про Стивена Хокинга, когда он совершил открытие ложась в кровать поздно ночью.

    Надо держать монореп? У тех успешных ребят отдельные репы.

    И так далее.

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

    Вывод? Смотри Ютуб, почитывай Хабр, но следуй своему пути.

  • Ссылки на выходные (выпуск 36)

    Этот выпуск посвящаю Федору Борщеву. Федор – программист, консультант, занимался Медузой и другими масштабными проектами. Полную информацию о нем вы найдете на сайте, а я прикладываю несколько заметок, чтобы подогреть интерес.

Страница 58 из 111