LINUX.ORG.RU

Вышла Pictura Noctis 1.0.0

 , , , ,


0

4

Pictura Noctis — программа для установки случайной картинки в качестве обоев рабочего стола из указанной директории в Noctalia Shell из командной строки, написана на Rust.

Особенности реализации:

  • Программа на компилируемом языке, работает быстрее, чем скрипты на bash/Python.
  • Резервуарная выборка (reservoir sampling), что может быть важно, если в вашей коллекции десятки тысяч обоев.
  • clap + thiserror + tracing — качество «как в продакшене».
  • Таймауты, человеческие коды возврата, --dry-run.
  • Поддержка символических ссылок с защитой от циклов.

Как собрать:

git clone https://git@git.sourcecraft.dev/saahriktu/pictura-noctis.git
cd pictura-noctis
cargo build --release
После компиляции появится готовый бинарник:
$ ./target/release/pictura_noctis -V
Pictura Noctis 1.0.0
$ du -h ./target/release/pictura_noctis
2,3M    ./target/release/pictura_noctis
$

>>> Git-репозиторий

★★★★★

Проверено: cetjs2 ()
Последнее исправление: cetjs2 (всего исправлений: 4)

программа для установки случайной картинки в качестве обоев рабочего стола

Программа на компилируемом языке, работает быстрее, чем скрипты на bash/Python.

Ну тут конечно без скорости никак :)

frunobulax ★★★★★
()

программа для установки … обоев рабочего стола

… работает быстрее, чем скрипты на bash/Python

Да это именно та область где скорость решает.

ptah_alexs ★★★★★
()
Последнее исправление: ptah_alexs (всего исправлений: 1)

reservoir sampling

Самое интересное в новости. :)

dataman ★★★★★
()

Интересно, как dry-run работает, показывает/не показывает/ничего не делает?

Обрати внимание, гит ещё не на расте! Доколе!

ssh2 ★★★★★
()
Ответ на: комментарий от ssh2

Интересно, как dry-run работает, показывает/не показывает/ничего не делает?

Показывает путь к выбранной обое, но не устанавливает её.

saahriktu ★★★★★
() автор топика

то что в 199x году делалось онлайнером в кронтабе, современные пориджи переосмыслили в rust нейрослоп кодец.

Итоги.

gagarin0 ★
()

программа для установки случайной картинки в качестве обоев рабочего стола из указанной директории в Noctalia Shell из командной строки, написана на Rust

Новости, которые мы заслужили.

MoldAndLimeHoney ★★★
()
Ответ на: комментарий от hobbit

Добавил тебе тег «от автора».

Ещё бы я познаю Rust, но места уже нет.

dataman ★★★★★
()

Если это исключительно для noctalia, то почему не плагином к ней самой? Зачем плодить сущности?

Loki13 ★★★★★
()
Ответ на: комментарий от ptah_alexs

а че вы хотите? пока скрипты будут думать - пользователю уже осточертеет текущая валпаперина! :о)

sunjob ★★★★★
()

день добрый!
в молодости, когда «тока тока» - было реально желание написать «что-то подобное»...
со временем понял, что меня устроит только черный и пустой рабочий стол.
так и повелось с тех пор :о)

sunjob ★★★★★
()

работает быстрее, чем скрипты на bash/Python.

60 WPS (Wallpapers per second)? :)

Оптимизация мелочей это в целом хорошо, так как сейчас например cinnamon у которого морда настроек на питоне думает там где думать не должно. Но касательно обоев, вроде как и к сожалению чтобы оно сохранялось, надо дёргать дбасы и прочие записи в xconfы/dconfы, а это всё нивелирует скорость делания дел, до них. Отдельным особняком без DE стоит X11 Root обоина, но там всё быстрее быстрого feh умеет делать.

Резервуарная выборка

Вот это интересно, спасибо, надо почитать.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от Loki13

Затем, что командная строка - наше всё! Суть именно в этом.

А так возможность задать директорию и установить из неё случайную обою мышкой, вроде как, есть и в самой Noctalia Shell без дополнительных плагинов.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Так плагинами noctalia shell можно управлять из командной строки. Что-то вроде:

noctalia msg plugin call <id_плагина> <имя_метода> [аргументы]

PS: Так что из причин остается «Я не хочу Lua, я хочу Rust». Тоже весомый аргумент, почему бы так и не ответить.

Loki13 ★★★★★
()
Последнее исправление: Loki13 (всего исправлений: 1)
Ответ на: комментарий от Loki13

Так вот, эта программа и вызывает

qs -c noctalia-shell ipc call wallpaper set <path>
Но перед этим же ещё нужно выбрать обою и правильно обработать все возможные ошибки. Собственно, только это она и делает.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от frunobulax

Программа на компилируемом языке, работает быстрее, чем скрипты на bash/Python.

Во времена Python 2 числодробильные вещи, тупо перенесённые с Си на Питон, могли работать в 600 (шестьсот) раз медленнее :) То есть программа могла выполнять 1-секундную задачу 10 минут. Поэтому современные питонисты всё стараются через сишные библиотеки, list comprehension и т.п. Bash был ещё медленнее, и его ускорить не пытались.

question4 ★★★★★
()
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от Loki13

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

saahriktu ★★★★★
() автор топика
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от saahriktu

И не дай бог повреждение памяти! А то ведь обоина не установится или, не дай боже, вызовется rm ~/.wp/.. -rf

BruteForce ★★★★★
()

Живут же люди, уолпеперины разглядывают, меняют их. Других дел на компе и нет наверное.

imul ★★★★★
()
Ответ на: комментарий от ptah_alexs

Да ради такого и топовое железо брать надо.

imul ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

У французов по этому поводу есть хорошая поговорка - enculer les mouches.

imul ★★★★★
()

Резервуарная выборка (reservoir sampling), что может быть важно, если в вашей коллекции десятки тысяч обоев.

Потому что для reservoir sampling понадобятся десятки тысяч генераций псевдослучайных чисел вместо одного. И вот тут-то и пригодится ускорение от перехода на компилируемый язык.

akho ★★
()
Ответ на: комментарий от akho

Программа использует библиотеку fastrand

Типичная пропускная способность: ~1–3 млрд чисел/сек (несколько наносекунд на число)

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от sunjob

со временем понял, что меня устроит только черный и пустой рабочий стол

OMG! Кровь из глаз!
Серый жеж и никак иначе.

BydymTydym ★★
()
Ответ на: комментарий от imul

Живут же люди, уолпеперины разглядывают, меняют их. Других дел на компе и нет наверное.

Это Rust дал им время для свободного разглядывания обоев. Пока мы были, как проклятые, прикованы к С, на медитирование и творческий выбор сил и времени не хватало, но пришел Rust и сделал женщину Востока свободной нам кросивое!

BydymTydym ★★
()
Ответ на: комментарий от saahriktu

вы храните visited, можно просто из него выбрать, без резервуаров. С одной генерацией случайного. Будет быстрее и проще.

Либо постараться не хранить visited.

В любом случае — сравнить производительность с find | shuf, задуматься.

akho ★★
()
Ответ на: комментарий от akho

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

Во-вторых, visited в программе нужен ещё и для защиты от зацикливания при наличии симлинков.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

полный обход файлов производится далеко не всегда

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

visited в программе нужен ещё и для защиты от зацикливания при наличии симлинков

поэтому и «постараться», да.

akho ★★
()
Ответ на: комментарий от akho

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

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

А где же тогда профит от резервуарной равномерной выборки? Профит в том, что хранится. Программа не хранит список всех обнаруженных вариантов.

В visited хранится список директорий для защиты от циклов.

saahriktu ★★★★★
() автор топика
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от saahriktu

А, visited — директории. Тогда вопросы снимаю.

(все с телефона смотрю одним глазом, простите)

akho ★★
()
Ответ на: комментарий от sunjob

кто-же против, используйте какой вам нравиться! а то сразу «о-м-г»… :о)

Кстати. Заинтересовался сейчас вопросом «а какой у меня десктоп?» и с удивлением выяснил что даже не серый, а стандартный дебиановский с волнистыми линиями. Будь проклята кнопка максимизации окна, что украла из моей жизни лучшие обои!

BydymTydym ★★
()

Новые. Нескучные. Твои.

medik ★★★
()
Ответ на: комментарий от question4

могли работать в 600 (шестьсот) раз медленнее :)

Так это же зависит от задачи, где это критично а где нет.

Для меня питон выполняет всякие рутинные штуки которые руками слишком муторно делать. Я никакой не программист и наверное глянув в мой код можно что-то там сделать быстрее и лучше и понятнее для других программистов. Но я пишу только для себя как понятно мне (list comprehension знаю, но там тож такое - если вложены друг в друга можно на пустом месте сделать непонятно).

Даже если он будет работать 10 минут, он выполнит работую которую руками ковырять - пару рабочих дней. Так что мне норм) На баше я такой налабаю в write-only (проверено :D)

frunobulax ★★★★★
()

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

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Вы всё врёти, вот вам контр что-то: 200000 обоин, обновляются непредсказуемым образом, количество тоже плавает. Обновляются так часто, что съедает до 80% io целевой системы. Случайную обоину надо выбирать в среднем в 20 раз реже, чем происходит обновление коллекции. Пристутствуют симлинки, в т.ч. устраивающие циклы с фейерверками.

BruteForce ★★★★★
()
Ответ на: комментарий от BruteForce

Значит добавляем демона-обновлятора, через который и обоина добавляется, и индекс обновляется. Очевидно же.

P.S. Я, вот, тоже с моря на прошлой неделе приехал, а тут осень уже. Но крышка, ничего, держится, чего и вам желаю.

P.P.S. Ладно, кого я обманываю, я тоже хочу в вашу специальную олимпиаду. Чего тут делать надо? Просто найти случайную картинку в файлопомойке с symlink’ами или ещё какие ограничения?

ugoday ★★★★★
()
Ответ на: комментарий от ptah_alexs

Может и решает, если ТС сам своё облако обоев поддерживает и оно на расте. Правда не на клиентах.

peregrine ★★★★★
()
Ответ на: комментарий от ugoday

Я думаю, что требования укладываются в такой список:

  • Резервуарная выборка
  • в коллекции десятки тысяч обоев.
  • Возможность выставить таймаут для qs
  • человеческие коды возврата (я так понял, что это значит вот это)
  • –dry-run, возможность не запускать qs
  • Поддержка символических ссылок с защитой от циклов.

Глубину поддиректорий никто не устанавливал, у меня 1024. Предела обходимых директорий тоже, у меня 0.9*2^23.


Требование резервуарной выборки можно заменить на более слабое требование однопроходности + равномерность выбора обоины.

BruteForce ★★★★★
()
Последнее исправление: BruteForce (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.