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

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

  • Зипперы в Clojure (часть 4). Поиск в XML

    Оглавление

    Предположим, нам поставили задачу: из XML с товарами выбрать магазины, где продаются айфоны. Обратите внимание: мы впервые коснулись связи между узлами, и это важно. По отдельности выбрать данные легко. Магазины — это локации, у которых где тег узла organization. Айфоны — локации, в которых узел с тегом product и атрибутом type="tablet". Но как найти связь между ними? Из второго набора получить первый?

    В прошлой части мы разложили XML последовательность с помощью xml-tree. Проблема xml-tree в том, что она порождает коллекцию узлов в одном направлении — от вершины вниз. Для примера выведем теги узлов. Часть (remove nil?) нужна, чтобы отсечь nil для текстового содержимого.

    Read more →

  • Зипперы в Clojure (часть 3). XML-зипперы

    Оглавление

    Мощь зипперов раскрывается в полной мере при работе с XML. От других форматов он отличается тем, что задан рекурсивно. Так, JSON, YAML и другие форматы предлагают типы — числа, строки, коллекции, — у которых разный синтаксис и структура. В XML, где бы мы ни находились, текущий узел состоит из трех компонентов: имени тега, атрибутов и содержимого. Содержимое может быть строкой и набором других узлов. На псевдокоде это можно выразить рекурсивной записью:

    XML = [Tag, Attrs, String|[XML]]
    

    Чтобы убедиться в однородности XML, рассмотрим условный файл с выгрузкой товаров:

    Read more →

  • Зипперы в Clojure (часть 2). Автонавигация

    Оглавление

    Итак, мы разобрались с тем, как перемещаться по коллекции. Однако у читателя возникнет вопрос: откуда приходит путь? Как мы узнаем заранее, в каком направлении двигаться?

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

    Дело в том, что Clojure предлагает более эффективный способ добраться до вложенных данных с известной структурой. Если мы точно знаем, что на вход поступил вектор, второй элемент которого вектор, обратимся к get-in:

    (get-in [1 [2 3] 4] [1 1])
    3
    

    Read more →

  • Зипперы в Clojure (часть 1). Азы навигации

    Оглавление

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

    Объясним зиппер простыми словами. Это обертка над данными, которая предлагает универсальные действия над ними. Перечислим основные действия:

    • перемещение по глубине: вниз к потомкам или вверх к родителю;
    • перемещение по ширине: влево или вправо среди потомков;
    • обход всей структуры данных;
    • добавление, редактирование и удаление узлов.

    Read more →

  • Книга для читалки и телефона

    Рад сообщить, что теперь книга поддерживает устройства с небольшими экранами — читалки и телефоны. Чтобы добыть эту версию книжки, перейдите на ее страницу в Gumroad. Если вы делали предзаказ, введите код, который я сообщил в письме (а если не сообщил, пинганите). Если вы до этого купили бандл, Gumroad позволит скачать новую версию бесплатно.

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

    Read more →

  • Что там с рассылкой — 1

    Основная часть книг разослана, и некоторые читатели их уже получили. Этот пост касается случаев, когда вы сделали заказ, но книги нет.

    Вы получили письмо с темой “Книга выслана: xxxxxxxx”, но код не отслеживается

    Это мой косяк. Дело в в том, что код из заголовка на самом деле не трек-код, а номер заказа в системе saferoute.ru. Чтобы узнать код службы, которая будет доставлять книжку, пройдите по ссылке и введите номер заказа. В следующем окне вы увидите службу доставки и ее трек номер.

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

    Вы из Беларуси, но письма не было

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

    Вы из России, но письма не было

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

    Вы из-за границы (не Россия, не Беларусь)

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

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

  • О дизайне и Dropbox

    Вчерашний пост о Dropbox был лишь затравкой. Я поработал с новым клиентом и подкопил интересный материал. Не столько про сам Дропбокс, сколько про дизайн в целом. Итак, поговорим о дизайне.

    Многие из нас рассуждают о дизайне: этот хороший, а тут плохой. У Эпла красиво, у Андроида страшно. Вопрос, который меня беспокоит: если отбросить привычки и инфантильные термины вроде “плохо” и “хорошо”, то как можно судить о дизайне? Мне кажется, я знаю ответ. Назовем удачным тот дизайн, где каждый элемент приносит пользу.

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

    Read more →

  • Интерфейс Dropbox

    У Никиты в статье Computers as I used to love them показана установка Dropbox. Легко заметить, что некогда удобный софт стал жирным монстром, где вместо одного клика нужно пять. Жаль, что Dropbox повторил судьбу Evernote и пал жертвой маркетологов и иже с ими.

    Недавно понадобилось кое-что с Дропбокса, и я поставил последний клиент. Прошел ад с миллионом экранов – это, конечно, жесть. И добавлю один важный факт.

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

    Вы будете смеяться, но в каком-то лохматом году я делал обмен репликами в 1C на базе Дропбокса. Один комп выгружал обновления в папку, второй подхватывал, как только они там появились. Затем наоборот. Работало!

    Очевидно, после ребрендинга в Dropbox взяли курс на уход от файловой системы. Теперь на любой чих открывается Электрон-приложение, похожее на очередной Slack или Teams. Это как бэ намек: вот новый гуй, бери, иначе отключим газ.

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

    Морали нет, просто наблюдение. Больше Dropbox не подходит на роль программы без интерфейса. Ушла эпоха.

  • Анонс книги на Хабре

    Разместил на Хабре анонс книги. Помогите вывести новость на главную.

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