• Виджет опечаток

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

    Делай раз — выделяем текст:

    Делай два — жмем Ctrl+Enter, открывается черновик. В какой именно программе, зависит от настроек системы:

    Делай три — отправляем, мне падает вот такое письмо:

    Все довольны и смеются. Проверял в Хроме, Сафари и FF. Под виндой не могу, сообщите, если что не так. На Маке работает Command в дополнение к Control. Скрипт простой как лопата, будут предложения — пишите.

    Уточню, сервисы вроде orphus.ru уже не работают. Видимо, их абузили спамом. Рассылать письма по запросу это прохладная история.

    Уже когда закончил, коллега подсказал способ с formspree. Это сервис-агрегатор форм. Умеет слать письма, стыкуется в Гуглом, понимает AJAX. Возможно, в будущем переделаю виджет под него.

  • Тесты в Clojure (второй фрагмент)

    Продолжение первой части

    Содержание

    Read more →

  • Антисемитизм

    Советский Союз, при всем его равенстве и братстве, был антисемитским государством. Еще в раннем детстве я заметил, что взрослые подмечают национальность там, где в этом нет смысла. Например, в передаче “Что? Где? Когда?” крупье обращается к условному господину Шпильману, и все такие — о, еврей. С таинственной полуулыбкой, как будто раскрыли шпиона. Или в титрах: продюсер Кацман. Ага, вот этот парень.

    Помню, прочитал фантастический рассказ “Песок” о космонавтах, которые застряли на планете-пустыне. Одного из героев звали Шапиро. Я пытался пересказать сюжет бабушке, но она без конца перебивала меня словами “Шапиро это еврей, это еврейская фамилия”.

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

    В великой державе с равными возможностями страдали не только евреи, но и представители всех национальных меньшинств. Вспомним, как основатели Яндекса не поступили в ВГУ. У одного еврейские корни, у второго казахские. Значит, на образование высшего ранга претендовать вы не можете.

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

  • Тесты в Clojure (фрагмент главы)

    В последней главе мы поговорим о тестировании приложений. Читатель узнает, что такое тесты и каких типов они бывают. Мы рассмотрим методы тестирования и хорошие практики. Постараемся избежать лишней сложности: не будем злоупотреблять терминами вроде TDD и BDT. Покажем, что в мире Clojure легко писать и поддерживать тесты.

    Содержание

    Read more →

  • Сохранение страницы

    Вот что меня удивляет. Хром и браузеры на WebKit захватили весь мир, фирмы выбрасывают старые движки, Мейл.ру и Яндексы ставят офисному планктону хромовые поделки. И до сих пор не решена банальная проблема. Я хочу сохранить страницу на диск, а потом открыть ее и увидеть в том же виде.

    Простое сохранение страницы работает не всегда. Вот прямо сейчас проделайте следующее. У вас же Хром, да? Откройте любой проект на Гитхабе, хоть этот, например:

    good

    Сохраните страницу на диск (Ctrl/Command + S). Теперь откройте html-файл. Как оно?

    ugly

    Ужасно. Причина в том, что Хром ограничивает доступ к локальному ресурсу из-за CORS-ограничений. Безопасность и все такое, но в итоге я не вижу страницу. То же самое в любом Хромо-браузере: Опере, Edge, поделки от русских фирм. И даже в Сафари. А вот Firefox и, внезапно, Internet Explorer показывают нормально.

    С сохранением страниц всегда была беда, сколько помню. Какие-то браузеры сохраняют исходный код страницы. Например, если это SPA, то вы ничего не увидите. Другие не скачивают стили и ресурсы. Если я хочу сохранить страницу, чтобы прочесть ее в самолете или поезде, то нет никакой гарантии, что все пройдет нормально. Открыл в поезде ноут, а там голый HTML. Извини друг, просто это небезопасно.

    Другая странность — браузеры до сих пор не могут сделать скриншот страницы. Я в курсе про тысячи расширений для Хрома, но вопрос все равно открыт. На техническом уровне любой браузер может выплюнуть картинку. Я писал либу для протокола WebDriver, и это работает даже для Phantom.js. Послал запрос, получил PNG в Base64. Зачем плодить расширения там, где все и так есть, непонятно.

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

  • Что там с книгой?

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

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

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

    Книжные издательства отвечают в течение месяца, а чаще всего вообще не отвечают. Я уже написал два письма месяц назад и не получил ответа. Но вообще я их не виню: слышал от одного человека, что издательства просто заваливают рукописями. Сейчас каждый пятый что-то пишет и жаждет опубликовать. Для издательства выбрать книгу это как нам нанять фронтендера: все кричат, что они Д’Артаньяны, а на деле… вы поняли.

    Намереваюсь выпустить книгу только в бумажном варианте. Не потому, что опасаюсь пиратства — время, которое я на нее потратил, я не окуплю, даже если книга пойдет за 5000 рублей за экземпляр. Просто хочу, чтобы книгу прочитали. Если вы скачаете ее на диск в виде файла, пусть даже за деньги, то, наверное, забросите в папку “прочесть позже”, и так она останется там навсегда. Давайте честно, когда в последний раз вы прочли книгу от корки до корки с монитора? Я бумажные-то еле-еле дочитываю, а уж сколько скачал pdf-ок…

    Спрашивали, как отблагодарить за книгу, предлагали завести патреон. Кто-то даже сказал — не писать же тебе пустое спасибо, давай хоть денег дам. Все в точности наоборот. Зачем мне, главе семьи, сотруднику швейцарской фирмы, ваши двести рублей? Ну, наберется их на три тысячи, и что? Гораздо лучше, если вы пришлете абзац текста о том, как вам помогла книга. Что в ней хорошего, где косяки, опечатки. Одно такое письмо даст заряд для новой главы или даже книги. Так что все это не про деньги. Мотивация, вот что важно.

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

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

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

    Кто-то из гостей конференции посетовал, что книгу заканчивать рано, еще столько всего не сказано. Но я ведь не говорил, что после этой книги больше не буду писать про Кложу! В моей тетради записан конспект, и все, что я пока написал (около 300 страниц), покрывает его где-то на четверть. Так что тема для материала есть, была бы только воля все это сделать.

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

    В своей книге я касаюсь нескольких тем. Я не ставлю цель покрыть весь язык — это уже сделали до меня. В этом и отличие: я беру узкую тему и копаю так глубоко, насколько это возможно. В типичной книге про исключения написана страничка. У меня это глава. Про системы вообще никто не пишет. У меня про это 55 страниц. И все — практика, практика, практика. Все опробовано на себе: работает или нет, и когда, и при каких условиях, и почему так, а не иначе, и что там сидит под крышкой. Аналогов я не видел.

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

  • Доклад Make Time

    На прошлом митапе рассказал о книге Make Time. Это о том, как находить время на личные проекты без ущерба для работы и семьи. Перечислил практики, которые удалось закрепить. Горячо рекомендую купить и прочесть эту книжку. Другие клевые книжки смотрите на книжной полке.

  • Системы в Clojure

    В этой главе мы поговорим о системах. Рассмотрим, как составить проект из отдельных частей и заставить их работать вместе.

    Содержание

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

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

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

    Read more →

  • Слабые фильмы

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

    Это случается все чаще и чаще. То ли я постарел, то ли ожидаю слишком многого. Я далеко не киноман — появляюсь в кинотеатре раз в три месяца. Мои чувства не притуплены бесконечными сериалами и фильмами. Может, в этом и проблема, как ни парадоксально?

    Я вспомнил фильмы, от которых многого ожидал, но в итоге они оказались слабыми.

    Магазинные воришки

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

    Read more →

  • Плохие проекты

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

    Проект не подготовлен к старту

    К сожалению, не каждый проект готов к старту после того, как вы скачали его код. И редко когда в проекте есть скрипт или Make-файл, который подготовит все нужное. Хотя технически это возможно.

    Например, в условный Makefile можно засунуть установку виртуального окружения, утилит и пакетов, перенос файлов, скачивание ресурсов с сервера… но почти никто этого не делает. Приходится долбить коллег тупыми вопросами. Где взять этот файлик? Почему не ставится эта библиотека?

    Причина кроется в лени и неуважении к коллегам. Если ты проделал рутинную подготовку, то почему бы не скопировать команды терминала в файл? Разве не очевидно, что следующий разработчик пойдет по тем же граблям?

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

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

    Read more →

Страница 1 из 46