-
Разбор статьи из журнала «Код»
На Хабре – моя публикация Разбор статьи из журнала «Код» (Яндекс Практикум).
-
Зипперы в Clojure (часть 4). Поиск в XML
Оглавление
- Зипперы (часть 1). Азы навигации
- Зипперы (часть 2). Автонавигация
- Зипперы (часть 3). XML-зипперы
- Зипперы (часть 4). Поиск в XML
- Зипперы (часть 5). Редактирование
- Зипперы (часть 6). Виртуальные деревья. Обмен валют
- Зипперы (часть 7). Обход в ширину. Улучшенный обмен валют
- Зипперы (часть 8). Заключение
Предположим, нам поставили задачу: выбрать из XML магазины, где продаются айфоны. Обратите внимание: мы впервые коснулись связи между узлами, и это важно. По отдельности выбрать данные легко. Магазины — это локации, у которых тег
organization
. Айфоны — локации, в которых узел с тегомproduct
и атрибутомtype="tablet"
. Но как найти связь между ними?В прошлый раз мы разложили XML в последовательность с помощью
xml-seq
. Проблема в том, что функция порождает коллекцию узлов без какой-либо связи, что не даёт нам решить задачу. Покажем это на примере. Для начала получим цепочку узлов: -
Зипперы в Clojure (часть 3). XML-зипперы
Оглавление
- Зипперы (часть 1). Азы навигации
- Зипперы (часть 2). Автонавигация
- Зипперы (часть 3). XML-зипперы
- Зипперы (часть 4). Поиск в XML
- Зипперы (часть 5). Редактирование
- Зипперы (часть 6). Виртуальные деревья. Обмен валют
- Зипперы (часть 7). Обход в ширину. Улучшенный обмен валют
- Зипперы (часть 8). Заключение
Мощь зипперов раскрывается в полной мере при работе с XML. От других форматов он отличается тем, что задан рекурсивно. Например, JSON, YAML и другие форматы предлагают типы — числа, строки, коллекции, — у которых разный синтаксис и структура. В XML, где бы мы ни находились, текущий узел состоит из трёх элементов: тега, атрибутов и содержимого.
Тег – это короткое имя узла, например
name
илиdescription
. Атрибуты – словарь свойств и их значений. Наиболее интересно содержимое: это набор строк или других узлов. Вот как выглядит XML на псевдокоде:XML = [Tag, Attrs, [String|XML]]
Чтобы убедиться в однородности XML, рассмотрим файл с товарами поставщиков:
-
Зипперы в Clojure (часть 2). Автонавигация
Оглавление
- Зипперы (часть 1). Азы навигации
- Зипперы (часть 2). Автонавигация
- Зипперы (часть 3). XML-зипперы
- Зипперы (часть 4). Поиск в XML
- Зипперы (часть 5). Редактирование
- Зипперы (часть 6). Виртуальные деревья. Обмен валют
- Зипперы (часть 7). Обход в ширину. Улучшенный обмен валют
- Зипперы (часть 8). Заключение
Мы разобрались с тем, как перемещаться по коллекции. Однако у читателя возникнет вопрос: как мы узнаем заранее, куда двигаться? Откуда приходит путь?
Ответ покажется странным, но все же: ручная навигация по данным лишена всякого смысла. Если путь известен заранее, вам не нужен зиппер — это лишнее усложнение.
Clojure предлагает более простую работу с данными, структура которых известна. Например, если мы точно знаем, что на вход поступил вектор, второй элемент которого вектор, и нужно взять его второй элемент, воспользуемся
get-in
:(def data [1 [2 3] 4]) (get-in data [1 1]) ;; 3
-
Зипперы в Clojure (часть 1). Азы навигации
Оглавление
- Зипперы (часть 1). Азы навигации
- Зипперы (часть 2). Автонавигация
- Зипперы (часть 3). XML-зипперы
- Зипперы (часть 4). Поиск в XML
- Зипперы (часть 5). Редактирование
- Зипперы (часть 6). Виртуальные деревья. Обмен валют
- Зипперы (часть 7). Обход в ширину. Улучшенный обмен валют
- Зипперы (часть 8). Заключение
В этой главе мы рассмотрим зипперы в языке Clojure. Это необычный способ работы с коллекциями. С помощью зиппера можно обойти произвольные данные, изменить их и выполнить поиск. Зиппер — мощный инструмент, и вложения в него окупаются со временем. Вместе с тем это довольно сложная абстракция, которая требует подготовки.
Объясним зиппер простыми словами. Это обёртка над данными с набором действий. Вот некоторые из них:
- перемещение по вертикали: вниз к потомкам или вверх к родителю;
- перемещение по горизонтали: влево или вправо среди потомков;
- обход всех элементов;
- добавление, редактирование и удаление узлов.
-
Книга для читалки и телефона
Рад сообщить, что теперь книга поддерживает устройства с небольшими экранами — читалки и телефоны. Чтобы добыть эту версию книжки, перейдите на ее страницу в Gumroad. Если вы делали предзаказ, введите код, который я сообщил в письме (а если не сообщил, пинганите). Если вы до этого купили бандл, Gumroad позволит скачать новую версию бесплатно.
В дополнение к печатной версии и для планшета вы получите PDF-файлы для читалки и телефона. У них меньший размер страницы и максимально срезаны поля. Версия для телефона вытянута по вертикали, чтобы уместиться на шестидюймовых моделях. Впрочем, телефоны сегодня самых разных форматов, и возможно, под ваш зайдет версия для читалки.
-
Что там с рассылкой — 1
Основная часть книг разослана, и некоторые читатели их уже получили. Этот пост касается случаев, когда вы сделали заказ, но книги нет.
Вы получили письмо с темой “Книга выслана: xxxxxxxx”, но код не отслеживается
Это мой косяк. Дело в в том, что код из заголовка на самом деле не трек-код, а номер заказа в системе saferoute.ru. Чтобы узнать код службы, которая будет доставлять книжку, пройдите по ссылке и введите номер заказа. В следующем окне вы увидите службу доставки и ее трек номер.
Некоторые агрегаторы вроде gdeposylka.ru по номеру заказа находят конечную службу и трек-номер, но это работает в половине случаев. Извините, что так вышло.
Вы из Беларуси, но письма не было
Издательство сообщило, что в системе СДЕК произошел сбой с отправкой в этом направлении. Сейчас все налажено, в четверг мне скажут треки, и я сообщу вам.
Вы из России, но письма не было
Тут два варианта — либо книг из первого тиража не хватило, либо вы попросили книгу с подписью. Если первый вариант, ждем неделю, пока напечатают следующий (я уже заказал). Если второй вариант, то мне пришлось ждать, пока книжка придет от издательства ко мне. Получил буквально вчера, отправлю на этой неделе, треки скину.
Вы из-за границы (не Россия, не Беларусь)
Издательство не доставляет за рубеж, это буду делать я. Все аналогично — на этой неделе начну отправку Почтой России, треки скину. Текущей партии на всех не хватит, кому-то придется ждать второго тиража.
Надеюсь, все получат свои книги. Если что, пишите, разберемся.
-
О дизайне и Dropbox
Вчерашний пост о Dropbox был лишь затравкой. Я поработал с новым клиентом и подкопил интересный материал. Не столько про сам Дропбокс, сколько про дизайн в целом. Итак, поговорим о дизайне.
Многие из нас рассуждают о дизайне: этот хороший, а тут плохой. У Эпла красиво, у Андроида страшно. Вопрос, который меня беспокоит: если отбросить привычки и инфантильные термины вроде “плохо” и “хорошо”, то как можно судить о дизайне? Мне кажется, я знаю ответ. Назовем удачным тот дизайн, где каждый элемент приносит пользу.
Заметим, что определение ничего не говорит о цвете кнопки или размере шрифта. Оно одинаково подходит к сайту, книге или радиоприемнику. Все три изделия состоят из элементов. В хорошем дизайне каждый элемент отвечает на вопросы “что ты здесь делаешь” и “какую пользу несешь”.
-
Интерфейс Dropbox
У Никиты в статье Computers as I used to love them показана установка Dropbox. Легко заметить, что некогда удобный софт стал жирным монстром, где вместо одного клика нужно пять. Жаль, что Dropbox повторил судьбу Evernote и пал жертвой маркетологов и иже с ими.
Недавно понадобилось кое-что с Дропбокса, и я поставил последний клиент. Прошел ад с миллионом экранов – это, конечно, жесть. И добавлю один важный факт.
Дело в том, что Dropbox долгое время считали эталоном программы без интерфейса. В этом был его козырь, с которым он влетел с двух ног. Разве до Dropbox не было средств синхронизации? Были. Вот только Dropbox упростил процесс до минимума. Видишь папку? Кидай туда файлы, и они появятся в другом месте. Все на уровне операционной системы, копировать-вставить, перетащить мышкой. Не надо ни к чему привыкать. Да, было окошко с настройками, но обычный юзер туда не лазил — незачем.
Вы будете смеяться, но в каком-то лохматом году я делал обмен репликами в 1C на базе Дропбокса. Один комп выгружал обновления в папку, второй подхватывал, как только они там появились. Затем наоборот. Работало!
Очевидно, после ребрендинга в Dropbox взяли курс на уход от файловой системы. Теперь на любой чих открывается Электрон-приложение, похожее на очередной Slack или Teams. Это как бэ намек: вот новый гуй, бери, иначе отключим газ.
Хорошо это или плохо, судить не нам. Прежняя модель была удобной, но, возможно, в ней бизнес вышел на плато-фазу, а деньги на шеф-повара нужны. Синхронизация файлов, в общем-то, вещь простая, и рано или поздно наступает насыщение. Все довольны, все работает, а поскольку Dropbox — не банк и не мобильный оператор, предложить ему больше нечего. Даже блокчейн не подключишь и машын лерниг. Кажется, они делали почтовый клиент, но закрыли его.
Морали нет, просто наблюдение. Больше Dropbox не подходит на роль программы без интерфейса. Ушла эпоха.
-
Анонс книги на Хабре
Разместил на Хабре анонс книги. Помогите вывести новость на главную.