Деревья без рекурсии

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

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

Есть как минимум три относительно простые задачи, которые связаны с деревьями:

  • как узнать всех родителей некоего элемента в плоском связном списке (иными словами, восстановить иерархию без построения дерева; узнать путь до элемента);
  • как построить иерархическую структуру, имея на руках только плоский связный список его узлов;
  • как вывернуть эту иерархию обратно в плоский связный список.

Возможно, ты удивишься, но для решения всех трёх задач рекурсия не нужна. Ниже будут их решения. Они элементарны, но неочевидны (хотя казалось бы).

Быстродействие коллекций Laravel

Photo by Bruno Guerrero on Unsplash

Привет. Это небольшой пост-шпаргалка. В нём речь пойдёт о классах Illuminate\Support\{Collection, LazyCollection}.

Я обожаю коллекции Laravel. Они очень гибки и комфортны в использовании при обработке массивов данных. Однако это балует и расслабляет разработчика. Более того, вся философия Laravel и good practices вертятся вокруг гибкости и простоты написания кода. Всё это может плохо сказаться (и в итоге сказывается) на производительности бекенда.

Ниже рассмотрим несколько конкретных случаев, на которые следует обратить внимание.

Опубликовано
В рубрике blog Отмечено ,

Резервное копирование фотографий со смартфона

a person holding a smart phone in their hand
Photo by Vitalii Khodzinskyi on Unsplash

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

Всё базируется на нескольких простых вещах:

  • Syncthing;
  • inotify-tools;
  • демонизированный shell-скрипт.

На десктопе — Ubuntu, на смартфоне — Android. Базовые хотелки:

  • логирование;
  • конфигурирование;
  • копирование фоток из директории Syncthing в безопасное место;
  • обработка нескопированных вовремя фоток.

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

План понятен, погнали делать.

Домашний сервер на Ubuntu 22.04 LTS. Часть 1: покупка, настройка, старт

a hard drive being removed from a hard drive
Photo by Andrey Matveev on Unsplash

Привет. Вообще, я не хотел писать пост об этом сюда, потому что в сети уже навалом такого добра, повторяться не хочется. Да и в моём канале уже есть некоторые выкладки по хештегу #околоNAS. Там, скорее, поток мыслей и прикидки как бы сделать дома сервачок.

Но пока разбирался с сабжем, подумал — да чё нет-то? Возьму и запилю посты в блоге, с нормальной конкретикой. Я же пишу о том, как сам решаю свои проблемы, вот и будет кому-то ещё пища для размышлений. И себе будущему, чтобы не забыть.

Зачин, как я люблю, небольшой предысторией.

Я давно возжелал домой какой-нибудь сервачок. В сущности, варианта было два: Synology DS220+ или самосборка с авиты. Оба подхода валидны и жизнеспособны, однако мне хотелось гибкости, юзер-френдливости, кастомизируемости, да подешевше и чтоб компактно. Это, знаешь ли, сложно совместить.

Дома валялся еле живой ноутбук HP Pavilion G6, прикинул палец к носу, погонял думы… Однако, долго ли, коротко ли, купил я себе б/у системник Dexp Aquilon O111.

Как установить драйвер wi-fi адаптера Dexp WFA-601 (RTL8811AU) на Ubuntu (обновляемый пост)

Привет. Я тут прикупил вот такой девайс:

Зачем — рассказал здесь. Предполагаю когда-нибудь заменить его нормальным PCI-E или подвести витуху, а до тех пор сойдёт и он. На коробке заявлена поддержка Linux, ценник невысок, мои требования к нему пока тоже. Главное, чтобы он работал и была антенна.

Я не могу спокойно смотреть на USB wi-fi свистульки: на коробке заявляется до 600 Мбит/сек (чем, впрочем, формально не врут), но USB2.0 даже в режиме High-Speed не может пропускать выше 480. USB-не-3.* безальтернативно будет узким горлышком при передаче данных. Этот адаптер хотя бы пару стен пробьёт, а наносвистоперделки без антенн — это просто смешно.

Дома у меня почти все компы на убунтах, посему я ожидал некоторые приключения (можно сказать, знал на что шёл при покупке). И хотя они не были увлекательными, я их прошёл и ниже даю выкладки по результатам.

Этот способ у меня сработал на Ubuntu 22.* и 23.* с абсолютно разным железом, но на 24.04 пришлось вновь гуглить решение.