der_y 07.07.2011 17:25
Мой OpenSource проект — смена изображений на рабочем столе
Все началось с того, что у меня накопилась большая коллекция классных изображений.Хотелось все поставить на рабочий стол, но это не реально. Нашел скрипт для автоматической смены валпаперов, т.к. устанавливать отдельное приложение для этого не хотелось.
Все бы ничего, но столкнулся с такой проблемой:
рандомный выбор 1 изображения из большого количества (4000) неравномерен, т.е. одни изображения мелькают очень часто, другие практически не появляются.
Решил этот вопрос написанием своей программы, которая работает следующим образом:
периодически сканирует папку, добавляя новые изображения в общую базу данных либо удаляя из нее старые.
Каждые 10 минут берется 200 изображений, последний показ которых отмечен наиболее поздней датой.
Из них рандомно выбирается 1 изображение и устанавливается как фон рабочего стола.
Ведется история показа для каждого изображения.
Таким образом изображения показываются в произвольном порядке, но не чаще чем другие.
Написал на java. Делал для себя по этому многие настройки спрятаны внутри.
Запуск
cd /путь/до/приложения
java -jar ImageChanger.jar /путь/до/каталога с изображениями
так же в файле "walp_gnome_change" нужно установить команду смены валпапера для вашей системы, у меня установлено для gnome 3
скачать прогу можно тут
java -jar ImageChanger.jar /путь/до/каталога с изображениями
так же в файле "walp_gnome_change" нужно установить команду смены валпапера для вашей системы, у меня установлено для gnome 3
скачать прогу можно тут
java-программисты они такие... они не умеют делать просто :) и чтобы не глючило и не выдавало исключения регулярно - тоже..
получится что за весь проход новые изображения не добавятся в список и старые не удалятся.
у меня за день успевает показаться порядка 70-80, всего их 4000+, постоянно появляются новые, а иногда удаляю старые.
К тому же при такой сортировке не исключено, что последние изображения в 1 проходе, встанут первыми во 2ом.
А в моем случае общий порядок практически 100% будет соблюдаться. Только за большое количество циклов может получиться, что какие-то изображения будут отображены на пару раз больше, чем другие (добавленные в одно время)
у меня за день успевает показаться порядка 70-80, всего их 4000+, постоянно появляются новые, а иногда удаляю старые.
К тому же при такой сортировке не исключено, что последние изображения в 1 проходе, встанут первыми во 2ом.
А в моем случае общий порядок практически 100% будет соблюдаться. Только за большое количество циклов может получиться, что какие-то изображения будут отображены на пару раз больше, чем другие (добавленные в одно время)
можно подправить функцию рандомной сортировки так, что у посдедних строк шанс быть вначале на следующем проходе очень мал. Или так же блоками оперировать - разделить все по 200 штук и их уже мешать.
Сделать несколько проходов и заloopить, так что будет не заметно повторений:)
Я просто подумал с таким каличеством картинок, что бы заметить что парочка вдруг повторилась через небольшое время - это надо сидеть и смотреть только на рабочий стол. Я за минимализм в данном случае.
Сделать несколько проходов и заloopить, так что будет не заметно повторений:)
Я просто подумал с таким каличеством картинок, что бы заметить что парочка вдруг повторилась через небольшое время - это надо сидеть и смотреть только на рабочий стол. Я за минимализм в данном случае.
Согласен, я тоже за минимализм. Например в моем варианте 160 строк, с учетом пустых строк и удобочитаемого форматирования. Мне кажется не много :)
blank screen лучше как ни крути, не отвлекает от работы, да и в тайловом вм его рабочий стол и видишь то лишь при загрузке системы..
если рабочий стол видеть лишь при запуске системы, то картинки на нем так же не будут отвлекать от работы, как и blank screen :)
в моем случае рабочий стол мелькает чаще...
сижу работаю, переключился на пустой рабочий стол или вдруг пришлось все окна свернуть, увидел клевую картинку на рабочем столе, подумал "блин крутая картинка" и дальше работаю. мелочь а приятно
в моем случае рабочий стол мелькает чаще...
сижу работаю, переключился на пустой рабочий стол или вдруг пришлось все окна свернуть, увидел клевую картинку на рабочем столе, подумал "блин крутая картинка" и дальше работаю. мелочь а приятно
Тем, кому хочется отдельную программку для этого, рекомендую DesktopNova
>> рандомный выбор 1 изображения из большого количества (4000) неравномерен, т.е. одни изображения мелькают очень часто, другие практически не появляются.
интересный у вас рандом
интересный у вас рандом
а у вас какой рандом? )
небось при запуске каждый день приложения выдающего рандомное значение с интервалом 10 минут, в диапазоне [0;4000] рандомные значения не повторяются пока не пройдут весь интервал? )
какие-то значения будут появляться чаще остальных.
небось при запуске каждый день приложения выдающего рандомное значение с интервалом 10 минут, в диапазоне [0;4000] рандомные значения не повторяются пока не пройдут весь интервал? )
какие-то значения будут появляться чаще остальных.
в пределе, да. но если у вас какие-то чаще появляются, обратитесь в нобелевский комитет )
вот задача:
рандом. в диапазоне [0;200].
программа генерирует 50 случайных значений в этом диапазоне.
если верить вашей логике, то программа за 4 запуска сгенерирует 200 уникальных значений, ни разу не повторяющихся, пройдя все значения в диапозоне [0;200].
вот код этого приложения: скачать
вот результат 1 запуска:
номер числа = количество появлений
как видно при генерировании 50 значений в этом диапазоне уже появились дубли.
запускаем 4 раза подряд используя данные из предыдущих запусков:
и того в файле получилось 129 строк, минус 2 строки комментариев и того 127 значений из 200.
какие-то значения были несколько раз, каких то небыло совсем.
пора обращаться в нобелевский комитет?
попробуйте сами запустить мой файл
рандом. в диапазоне [0;200].
программа генерирует 50 случайных значений в этом диапазоне.
если верить вашей логике, то программа за 4 запуска сгенерирует 200 уникальных значений, ни разу не повторяющихся, пройдя все значения в диапозоне [0;200].
вот код этого приложения: скачать
вот результат 1 запуска:
#
#Fri Jul 08 00:36:33 OMSST 2011
109=1
108=1
138=1
59=1
137=1
199=1
166=1
55=1
133=1
165=2
197=1
86=1
164=1
196=1
130=1
51=1
161=1
192=1
81=1
191=1
129=1
8=1
128=1
126=1
47=1
157=1
188=1
3=1
45=1
77=1
155=1
75=1
74=1
120=1
41=1
183=1
150=1
179=1
178=1
114=1
67=1
66=1
97=2
96=1
63=1
141=1
173=1
93=1
#Fri Jul 08 00:36:33 OMSST 2011
109=1
108=1
138=1
59=1
137=1
199=1
166=1
55=1
133=1
165=2
197=1
86=1
164=1
196=1
130=1
51=1
161=1
192=1
81=1
191=1
129=1
8=1
128=1
126=1
47=1
157=1
188=1
3=1
45=1
77=1
155=1
75=1
74=1
120=1
41=1
183=1
150=1
179=1
178=1
114=1
67=1
66=1
97=2
96=1
63=1
141=1
173=1
93=1
номер числа = количество появлений
как видно при генерировании 50 значений в этом диапазоне уже появились дубли.
запускаем 4 раза подряд используя данные из предыдущих запусков:
#
#Fri Jul 08 00:38:28 OMSST 2011
129=1
128=2
127=1
126=1
124=1
189=1
188=2
187=1
186=1
120=2
59=3
183=1
57=1
181=3
55=1
52=2
51=1
118=2
115=1
114=3
179=3
113=1
178=1
112=1
177=2
176=3
110=1
175=2
49=1
173=2
172=2
47=1
171=1
46=2
45=1
42=1
41=1
109=2
108=2
107=1
104=3
169=1
103=1
168=1
102=1
101=3
166=1
100=1
165=3
39=2
164=1
38=1
37=1
162=2
161=2
35=1
160=2
98=1
33=1
97=2
96=2
30=3
95=1
94=1
93=2
91=1
90=2
159=2
157=1
156=1
155=5
154=2
29=2
153=2
152=1
26=3
150=2
25=2
24=1
89=1
86=1
84=1
83=2
82=1
81=3
80=2
8=1
7=1
149=1
4=1
3=1
146=1
145=1
1=1
19=2
143=1
18=1
142=1
141=2
140=1
79=3
78=1
77=2
75=1
74=2
73=2
71=1
70=1
138=1
137=1
136=1
135=3
199=2
133=2
197=1
132=1
196=5
131=1
130=1
194=2
67=1
192=1
66=2
191=2
190=1
64=2
63=1
#Fri Jul 08 00:38:28 OMSST 2011
129=1
128=2
127=1
126=1
124=1
189=1
188=2
187=1
186=1
120=2
59=3
183=1
57=1
181=3
55=1
52=2
51=1
118=2
115=1
114=3
179=3
113=1
178=1
112=1
177=2
176=3
110=1
175=2
49=1
173=2
172=2
47=1
171=1
46=2
45=1
42=1
41=1
109=2
108=2
107=1
104=3
169=1
103=1
168=1
102=1
101=3
166=1
100=1
165=3
39=2
164=1
38=1
37=1
162=2
161=2
35=1
160=2
98=1
33=1
97=2
96=2
30=3
95=1
94=1
93=2
91=1
90=2
159=2
157=1
156=1
155=5
154=2
29=2
153=2
152=1
26=3
150=2
25=2
24=1
89=1
86=1
84=1
83=2
82=1
81=3
80=2
8=1
7=1
149=1
4=1
3=1
146=1
145=1
1=1
19=2
143=1
18=1
142=1
141=2
140=1
79=3
78=1
77=2
75=1
74=2
73=2
71=1
70=1
138=1
137=1
136=1
135=3
199=2
133=2
197=1
132=1
196=5
131=1
130=1
194=2
67=1
192=1
66=2
191=2
190=1
64=2
63=1
и того в файле получилось 129 строк, минус 2 строки комментариев и того 127 значений из 200.
какие-то значения были несколько раз, каких то небыло совсем.
пора обращаться в нобелевский комитет?
попробуйте сами запустить мой файл
"если верить вашей логике, то программа за 4 запуска сгенерирует 200 уникальных значений, " я такого бреда не говорил, если бы так было я бы в казино пошел играть ))) а вывод программы вполне нормальный, если будете изучать теорию вероятностей поймете.
пс: нобелевский комитет кстати "посылет" математиков
пс: нобелевский комитет кстати "посылет" математиков
Благо я ее уже учил.
неужели нормальный вывод программы не соответствует тому, что я сказал ранее: "рандомный выбор 1 изображения из большого количества (4000) неравномерен, т.е. одни изображения мелькают очень часто, другие практически не появляются."?
рандом не у меня интересный. он такой у всех.
неужели нормальный вывод программы не соответствует тому, что я сказал ранее: "рандомный выбор 1 изображения из большого количества (4000) неравномерен, т.е. одни изображения мелькают очень часто, другие практически не появляются."?
рандом не у меня интересный. он такой у всех.
Почему в джаре? Это же опен сурц! Код в студию, а мы заодно заревьювим.
тешу себя мыслью, что кому-то кроме автора будет интересно мое мнение. беглый взгляд по коду:
1) трай в трае траем погоняет :)
2) немного нехватает пробелов особенно+между<�операторами и :retab строго необходим
3) я бы для для такой задачи пятон или перл использовал, в яве слишком много { фигурных скобок } :)
вообще ниче так, довльно читаемо
1) трай в трае траем погоняет :)
2) немного нехватает пробелов особенно+между<�операторами и :retab строго необходим
3) я бы для для такой задачи пятон или перл использовал, в яве слишком много { фигурных скобок } :)
вообще ниче так, довльно читаемо
мой первый вариант был на питоне )
для меня нет смысла в трэе для этого приложения, какие функции туда вынести? остановить / запустить.
оно просто гонит картинки )
для меня нет смысла в трэе для этого приложения, какие функции туда вынести? остановить / запустить.
оно просто гонит картинки )
По-моему, при таком количестве изображений достаточно было показывать их по порядку, но запоминать перед выключением последний показанный файл и в следующий раз начинать со следующегоза ним. Неповторяемость обеспечивается 100% до очередного цикла, а при таком количестве порядок смены изображений не особо будет заметен, особенно, если не часто приходится видеть обои.
В крайнем случае, после каждого цикла можно делать случайную пересортировку файлов в папке.
В крайнем случае, после каждого цикла можно делать случайную пересортировку файлов в папке.
к примеру, при запуске создать список всех файлов, стасовать его и использовать циклически в петле.
при новом запуске забыть старый сортированный список, и на его месте создать новый и заново растасовать.
всё это займёт не более десяти строк на bash.
при новом запуске забыть старый сортированный список, и на его месте создать новый и заново растасовать.
всё это займёт не более десяти строк на bash.
Клёво, но при длительности сеанса работы за компьютером 6-8 часов с учётом интервала смены картинки в 10 минут будет показано 36-48 изображений (у автора за сеанс 70-80). Существует ненулевая вероятность того, что в следующий раз в при пересортировке в их число попадёт хотя бы одна картинка, показанная в предыдущий раз. Это опять же приводит к озвученной в сабже проблеме о неравномерности случайного распределения.
Не понятна причина вашего любопытства касательно моей деятельности. Меня заинтересовала поставленная автором топика задача. Можно оставить в стороне обои и решать её на абстрактном уровне, но обсуждать решения, очевидно, удобнее, разговаривая предметно.
Если это вас ТАК задело, что вы решили влезть в топик не обозначив собственных мыслей по теме, боюсь предположить, насколько вам скучно и одиноко.
Если это вас ТАК задело, что вы решили влезть в топик не обозначив собственных мыслей по теме, боюсь предположить, насколько вам скучно и одиноко.
Я бы создал файл со списком картинок рандомно отсортированными. и потом по очереди их ставил.
на следующий проход опять рандомная сортировка.