Ristretto
Алексей Федорчук
25 августа 2008 г
Быстрый и легкий вьювер растровых изображений, предназначенный для десктопа Xfce; просмотр слайд-шоу; возможность редактирования изображений через внешнюю программу. Разрабатывается в рамках проекта Xfce, что выражается в использовании ею специфических для этой среды библиотек, тесной интеграции с файловым менеджером Thunar, единстве стиля интерфейса с остальными специфическими для Xfce приложениями. Тем не менее, Ristretto — это самостоятельный пакет, а не элемент или плагин для Xfce, и, при удовлетворении зависимостей, способен работать вне её.
Пакет Ristretto находится в стадии активной разработки. Поэтому для желающих быть на острие прогресса на сайте проекта предлагается скачать cvn-версию:
и самостоятельно её откомпилировать или собрать свежую версию пакета, как это описано здесь.
После установки штатными средствами программа Ristretto автоматически попадает в группу Графика меню запуска приложений и может быть вызвана через стартовое меню панели задач Xfce или из меню рабочего стола.
Другой способ запуска программы — щелчок правой кнопкой мыши на имени файла любого поддерживаемого формата в файловом менеджере Thunar: в появившемся контекстном меню следует выбрать сначала пункт Открыть с помощью другого приложения, а затем в длинном списке этих «других » отыскать пункт Ristretto. Если есть желание увековечить этот выбор (а по ряду причин я так и делаю), достаточно отметить боксик напротив надписи Использовать эту программу для запуска этого типа файлов (прошу прощения за корявость, но именно так она дана в официальном переводе интерфейса). Теперь при одинарном щелчке левой уже кнопкой мыши на имени файлов поддерживаемых форматов будет вызываться именно Ristretto, а не какое-либо другое приложение.
Следует заметить, что при вызове Ristretto щелчком на имени файла будут открыты (и представлены в виже миниатюр, именуемых в терминологии этой программы эскизами) все файлы изображений, имеющиеся в данном каталоге.
Кстати, о поддерживаемых форматах: списка таковых отыскать мне не удалось ни в самой программе, ни на сайте её проекта. Опытным путём было установлено, что достоверно поддерживаются: GIF, JPEG, PNG, BMP, PCX и TIFF. Других, более экзотических, форматов у меня в системе не оказалось. Впрочем, приведённый список исчерпывает потребности большинства пользователей, профессионально не связанных с обработкой изображений.
В зависимости от того, каким способом мы запустили Ristretto, перед нами откроется либо пустое поле, либо изображение из «щелкнутого» файла, ниже которого — его эскиз и эскизы всех изображений текущего каталога, если таковые в нём имеются (рис. 1). А вдоль верхнего края окна Ristretto мы видим строку меню и инструментальную панель.
Инструментов на панели, прямо скажем, не богато: в наличии имеются иконки для (слева направо) открытия каталога с файлами изображений, перемещения назад и вперёд по линейке открытых файлов, увеличения и уменьшения экранного представления изображения, масштабирования изображения по размеру окна и представления его в натуральную величину. Всё.
Контекстное меню, доступное по щелчку правой кнопкой мыши на изображении, тоже изобилием пунктов не поражает воображения. Через него можно открыть и закрыть текущий файл, открыть его во внешней программе (о чем будет сказано чуть ниже), а также масштабировать в тех же градациях, что и через панель.
Посмотрим теперь, каковы возможности программы, доступные через главное меню. В нем — пять пунктов:
- Файл — открытие папки или каталога с изображениями, открытие из списка недавних файлов, просмотреть свойства изображения (подробности — чуть позже), закрыть текущий файл или все открытые, выйти из программы;
- Редактировать — здесь можно открыть файл во внешней программе и выполнить кое-какие настройки (пункт Параметры), и о том, и о другом я скажу подробнее ниже;
- Просмотр позволяет показать/скрыть инструментальную панель (по умолчанию она включена), определить местоположение эскизов открытытх файлов (горизонтально, по нижнему краю окна, как по умолчанию, или вертикально, по краю правому), а также скрыть их вообще; здесь же — то же самое масштабирование, паоворот изображения на 90 градусов вправо и влево, переключение в полноэкранный режим (выход из него — через Escape или F11)
- Переход — осуществляется Далее (как нетрудно догадаться, это вперед), Назад, к первому или последнему из загруженных изображений; пункт Воспроизведение — это запуск слайд-шоу, условия его показа задаются в пункте Параметры меню Редактирование (о чем см. Далее, то есть впереди); эскизы при просмотре слайд-шоу с экрана исчезают, появляясь опять только после приостановки;
- Помощь — может быть оказана только в узнавании автора программы и переводчика её интерфеёса (?); кроме пункта О программе, здесь нет ничего.
Теперь, как и было обещано, остановимся на пунктах, требующих более пристального внимания (благо, из совсем мало). Первый из них, с которым мы столкнулись в меню Файл, — Свойства. Как ни странно, для вывода свойств изображения привлекаются не какие-либо собственные средства, а панель свойств файлового менеджера Thunar. А может быть, это как раз закономерно — не зря же с самого начала шла речь о тесной интеграции с ним Ristretto.
Так вот, панель свойств (рис. 2) включает в себя четыре закладки: Основное, Эмблемы, Права и Изображение.
>
С первыми тремя всё становится ясно при их просмотре. Впрочем, с четвёртой тоже всё ясно: для цифровой фотографии (а в нашем примере выступает именно она) весьма подробно перечислены условия съемки и обработки (рис. 3), вплоть до программного обеспечения, применявшегося при этом — таковым оказывается Adobe Photoshop. Во избежание лишних вопросов сразу скажу, что фотография не моя, а взята с одного из «дельфиньих» сайтов. Надо сказать, что в Сети их немало, и когда-нибудь я расскажу о них подробнее — не зря же дельфин выступает тотемным животным дистрибутива Zenwalk.
Далее следует обратить внимание на меню Редактировать. Его пункт под именем Открыть в позволяет «переоткрыть» текущий файл в одной из трёх (в моей системе) программ:
- в Ristretto же (спрашивается — а на фига?);
- в GQview — это еще понять можно, возможности её по просмотру изображений и манипулированию ими существенно богаче, нежели у Ristretto;
- в GIMP — это уже совсем понятно, с его помощью текущее изображение можно отредактировать.
Изменить список внешних программ никак не получится — похоже, что его элементы берутся просто из тех пунктов группы Графика главного меню Xfce в редакции Zenwalk’а, которые действительно имеют отношение к графике (напомню, что там можно обнаружить, например, и Evince — программу, имеющую к графике ну очень косвенное отношение).
Далее в меню Редактировать я обещал остановиться на пункте Параметры, в котором можно осуществить некоторые (впрочем, весьма скромные) настройки. Так, в первой вкладке, Поведение (рис. 4), можно запретить масштабировать изображение более чем на 100 процентов от размера окна.
Во вкладке Слайдшоу (рис. 5) можно задать время, через которое сменяются кадры, установить предзагрузку изображений (убыстряет просмотр, но увеличивает время загрузки изображений, чем, впрочем, на современных машинах можно пренебречь), и определить, скрывать ли эскизы во время демонстрации.
Ну а во вкладке Дисплей (рис. 6) можно переопределить цвет фона и указать размер кэша изображений (опять же, при нынешних объемах памяти жмотничать тут не надо — следует исходить из реального размера картинок).
Вот в сущности и всё, что можно сказать про программу Ristretto. Читатель уже понял, что она не поражает ни излишеством функций, ни чрезмерностью настроек. Более того, её можно охарактеризовать как предельно аскетическую, делающую лишь то, что у неё записано в «техзадании». Обратной стороной чего является легкость и простота в обращении. И именно поэтому она близка к оптимуму для просмотра файлов изображений. А для обеспечения более иных функций, например, достаточно сложного манипулирования этими файлами, есть и другие программы, например, GQview.
Под занавес — пара слов о личных впечатлениях. Первое время работы в Zenwalk для просмотра изображений я использовал GQview. Не смотря на её несомненные достоинства (в частности, развитые средства манипулирования файлами), для моих целей она выглядела несколько громоздкой. Поэтому, наткнувшись на Ristretto, я установил её в качестве графического вьювера по умолчанию — и с тех пор ни разу об этом не пожалел. Всё, что мне надо, она делает, и делает быстро. Более же сложные манипуляции с графическими файлами всё равно требуют либо утилит командной строки, либо файлового менеджера, либо графического редактора.
Источник
Ristretto
Легкое приложение для просмотра изображений.
Ristretto — легковесное и быстрое Gtk-приложение для просмотра изображений.
Ristretto является стандартным приложением для просмотра изображений рабочей среды Xfce.
Ristretto помимо показа текущего изображения может в отдельной панели отображать миниатюры, текущего каталога, располагается он снизу (по умолчанию) или справа.
Ristretto поддерживает практически все популярные графические форматы, такие как bmp, jpg, png, gif, pbm, pgm, ppm, tiff, xbm, xpm и другие.
Панель инструментов Ristretto может скрываться. При полноэкранном режиме элементы управления отсутствуют, но может присутствовать и панель миниатюр (отключаемая функция) .
Ristretto имеет возможность просмотра изображений в режиме слайд-шоу, длительность показа изображений регулируется в настройках (от 1 до 60 секунд) .
Ristretto интегрируется с файловым менеджером Thunar и имеет функцию открытия текущего изображения в внешних приложениях (графических редакторах, каталогизаторах и прочих. ) .
Источник
Ristretto linux ��� ���
Ristretto is a fast, concurrent cache library built with a focus on performance and correctness.
The motivation to build Ristretto comes from the need for a contention-free cache in Dgraph.
Use Discuss Issues for reporting issues about this repository.
- High Hit Ratios — with our unique admission/eviction policy pairing, Ristretto’s performance is best in class.
- Eviction: SampledLFU — on par with exact LRU and better performance on Search and Database traces.
- Admission: TinyLFU — extra performance with little memory overhead (12 bits per counter).
- Fast Throughput — we use a variety of techniques for managing contention and the result is excellent throughput.
- Cost-Based Eviction — any large new item deemed valuable can evict multiple smaller items (cost could be anything).
- Fully Concurrent — you can use as many goroutines as you want with little throughput degradation.
- Metrics — optional performance metrics for throughput, hit ratios, and other stats.
- Simple API — just figure out your ideal Config values and you’re off and running.
Ristretto is production-ready. See Projects using Ristretto.
Table of Contents
The Config struct is passed to NewCache when creating Ristretto instances (see the example above).
NumCounters int64
NumCounters is the number of 4-bit access counters to keep for admission and eviction. We’ve seen good performance in setting this to 10x the number of items you expect to keep in the cache when full.
For example, if you expect each item to have a cost of 1 and MaxCost is 100, set NumCounters to 1,000. Or, if you use variable cost values but expect the cache to hold around 10,000 items when full, set NumCounters to 100,000. The important thing is the number of unique items in the full cache, not necessarily the MaxCost value.
MaxCost int64
MaxCost is how eviction decisions are made. For example, if MaxCost is 100 and a new item with a cost of 1 increases total cache cost to 101, 1 item will be evicted.
MaxCost can also be used to denote the max size in bytes. For example, if MaxCost is 1,000,000 (1MB) and the cache is full with 1,000 1KB items, a new item (that’s accepted) would cause 5 1KB items to be evicted.
MaxCost could be anything as long as it matches how you’re using the cost values when calling Set.
BufferItems int64
BufferItems is the size of the Get buffers. The best value we’ve found for this is 64.
If for some reason you see Get performance decreasing with lots of contention (you shouldn’t), try increasing this value in increments of 64. This is a fine-tuning mechanism and you probably won’t have to touch this.
Metrics bool
Metrics is true when you want real-time logging of a variety of stats. The reason this is a Config flag is because there’s a 10% throughput performance overhead.
OnEvict func(hashes [2]uint64, value interface<>, cost int64)
OnEvict is called for every eviction.
KeyToHash func(key interface<>) [2]uint64
KeyToHash is the hashing algorithm used for every key. If this is nil, Ristretto has a variety of defaults depending on the underlying interface type.
Note that if you want 128bit hashes you should use the full [2]uint64 , otherwise just fill the uint64 at the 0 position and it will behave like any 64bit hash.
Cost func(value interface<>) int64
Cost is an optional function you can pass to the Config in order to evaluate item cost at runtime, and only for the Set calls that aren’t dropped (this is useful if calculating item cost is particularly expensive and you don’t want to waste time on items that will be dropped anyways).
To signal to Ristretto that you’d like to use this Cost function:
- Set the Cost field to a non-nil function.
- When calling Set for new items or item updates, use a cost of 0.
This trace is described as «disk read accesses initiated by a large commercial search engine in response to various web search requests.»
This trace is described as «a database server running at a commercial site running an ERP application on top of a commercial database.»
This trace demonstrates a looping access pattern.
This trace is described as «references to a CODASYL database for a one hour period.»
All throughput benchmarks were ran on an Intel Core i7-8700K (3.7GHz) with 16gb of RAM.
Projects Using Ristretto
Below is a list of known projects that use Ristretto:
- Badger — Embeddable key-value DB in Go
- Dgraph — Horizontally scalable and distributed GraphQL database with a graph backend
- Vitess — Database clustering system for horizontal scaling of MySQL
- SpiceDB — Horizontally scalable permissions database
How are you achieving this performance? What shortcuts are you taking?
We go into detail in the Ristretto blog post, but in short: our throughput performance can be attributed to a mix of batching and eventual consistency. Our hit ratio performance is mostly due to an excellent admission policy and SampledLFU eviction policy.
As for «shortcuts,» the only thing Ristretto does that could be construed as one is dropping some Set calls. That means a Set call for a new item (updates are guaranteed) isn’t guaranteed to make it into the cache. The new item could be dropped at two points: when passing through the Set buffer or when passing through the admission policy. However, this doesn’t affect hit ratios much at all as we expect the most popular items to be Set multiple times and eventually make it in the cache.
Is Ristretto distributed?
No, it’s just like any other Go library that you can import into your project and use in a single process.
Источник