|
|
![]() ![]() |
|
|
![]() ![]() ![]() ![]() |
|
Опции темы | Поиск в этой теме |
![]() ![]() |
![]() ![]() |
|||||
Ветеран Фонарёвки
Регистрация: 25.08.2012 Последняя активность: 22.05.2025 22:36
Сообщений: 3954
Записей в дневнике: 4 Сказал(а) спасибо: 1560
Поблагодарили: 3889 раз(а) в 1902 сообщениях
|
![]() Цитата:
Автор, Zak Wilson - товарищ, без сомнения, крутой. Не столько из-за самого приложения (там, в принципе, не бином Ньютона), сколько из-за языка, на котором оно написано. На Clojure! Под Андроид! Я просто охренел, когда первый раз пошёл на код посмотреть. Clojure сам по себе язык достаточно экзотический, а уж под Андроид - запредельно. Я вообще не знал, что это возможно. Но сам ceilingbounce - ужасен ![]() Когда впервые попользовался, после первой мысли "чего ж так коряво-то?" сразу возникла вторая "надо своё написать, я ж вроде умею немножко". И я даже набросал какой-то прототип, чего-то ковырял, но потом, как всегда, возникли более приоритетные задачи, и я забросил. Однако не так давно снова пришлось обратиться к ceilingbounce для снятия графика и снова испытать нешуточный дискомфорт. "Гештальты надо закрывать" - подумалось мне, и я сел реанимировать и добивать до минимальной кондиции полупротухший прототип. Мне не то, что не дают покоя лавры ceilingbounce - они не такие уж и пышные. Больше хотелось после долгого перерыва вернуться к разработке под Андроид, восстановить навыки, посмотреть что новенького, снова вдоволь на ровном месте нахлебаться андроидных странностей и непотебств, коих там предостаточно, ну, всё такое. Задача-то шибко интересная. И все мои хотения, в конечном итоге, были удовлетворены. ![]() Итак, собственно сабж, Lumenoid. Делать умеет то же самое, что и ceilingbounce, но, смею надеяться, более красиво, хорошо и удобно. Из основных улучшений:
Но самое основное преимущество: Lumenoid поддерживаемый (ну, пока мне не надоест ![]() Интерфейс я старался сделать максимально понятным, поэтому расписывать, как и что делать, не буду, пробуйте сами. Спрашивайте, если непонятно, это поможет мне понять, что я сделал плохо. Просто накидаю тут скриншотиков. А вот так выглядит сохранённая картинка графика. Кстати, её размеры можно настраивать. Пока никуда в открытый доступ не выкладывал, взять можно с моего яндекс.диска (версия 0.1-beta). Я в любом случае совсем не зря повозился, новый опыт и что-то даже получилось, гештальт закрылся. Но я надеюсь, что это будет интересно не только мне. ![]() Некоторые камрады жалуются на неожиданное поведение графика при отрисовке: Цитата:
Цитата:
Есть обоснованное предположение, что все эти эффекты - ничто иное, как особенности реализации датчика освещённости в конкретном устройстве. Если вы наблюдаете нечто, подобное описанному, или иное неожиданное поведение, сравните это с тем, что происходит в ceilingbounce и других приложениях люксметра, которые умеют показывать график. Мне писать имеет смысл только в случае значительного отличия в поведении Lumenoid от поведения других подобных приложений. ![]() Также есть жалобы на неожиданное поведение навигации: Цитата:
Цитата:
Цитата:
![]() Кроме управления кнопками на тулбаре и меню, в график можно ещё тыкать пальцами.
![]() Версия 0.2-beta Изменения:
Продолжение следует. ![]() Версия 0.3-beta Изменения:
![]() ![]() Версия 0.3.1-beta Изменения:
![]() Версия 0.3.2-beta Изменения:
![]() Версия 0.4-beta Изменения:
![]() Версия 0.4.1-beta Изменения, две мелочи всплыли:
![]() Версия 0.5-beta Изменения:
![]() Версия 0.5.1-beta Изменения:
![]() Версия 0.6-beta Изменения:
![]() Версия 1.0 Изменения:
Актуальная версия: 1.0 Все версии (мало ли, вдруг сломаю, чтобы откатиться можно было)
__________________
YLP Panda 4, кастомные D10 (Samsung LH351D 5000К, TIR 30°, 45°, драйвера Квантов, DDE), YLP Unicorn 1.0, ЯЛ Scorpion Х8, Convoy S8 (прошивка dandan2000, ver. 3.5СК) Всякие фонарные крепления Ссылки на TIR-линзы для Unicorn/Gekko Определитель светодиода по фотографии [Исправлено: kaa.mobil, 05.07.2023 в 08:53] |
|||||
![]() |
![]() ![]() |
Поблагодарили: 61 раз(а) |
![]() ![]() |
![]() ![]() |
|
Ветеран Фонарёвки
Регистрация: 25.08.2012 Последняя активность: 22.05.2025 22:36
Сообщений: 3954
Записей в дневнике: 4 Сказал(а) спасибо: 1560
Поблагодарили: 3889 раз(а) в 1902 сообщениях
|
![]()
Точно есть, проверено.
Цитата:
И это вы очень сильно упрощаете. Каждый сэмпл по многим причинам внутри несёт пачку дополнительной технической информации. Например, реализация паузы потребует добавления двух флажков: IsPauseStarted и IsPauseStopped. В каждом сэмпле, естественно, ибо мы не знаем, какой сэмпл окажется началом или концом паузы. Причём для подавляющего большинства точек эти флажки окажутся не нужны, однако два байта отдай. Так и набегает, поверьте. В любом случае, отрисовщику графика начинает уже плохеть на 50-70K сэмплов. Не, оно живёт, не падает, но появляются заметные лаги интерфейса, ~100-300 мс, реакция кнопок запаздывает, всё такое. Недаром в ceilingbounce после 100 минут графика точки вообще начинают отбираться раз в 10 сек (что уже совсем зашквар имхо). Да. Благосклонный админ назначил меня сатрапом этой провинции, и я теперь стартовый пост могу править. Буду править стартовый и в ленте уведомлять. |
|
![]() |
![]() ![]() |
Поблагодарили: 1 раз |
Drex (24.01.2023)
|
![]() |
![]() ![]() |
||
👀
Регистрация: 23.07.2020 Последняя активность: Сегодня 08:45
Сообщений: 10243
Записей в дневнике: 4 Сказал(а) спасибо: 65
Поблагодарили: 6892 раз(а) в 3787 сообщениях
|
![]()
Можно усреднять посекундно, тогда строк будет в пять раз меньше.
Что касается "кому оно надо" — может и не надо, но зато при необходимости всегда можно будет масштабировать какой-то участок графика и рассмотреть его в подробностях. Никогда ведь заранее не угадаешь, когда нужна будет детализация — вдруг на пятом часу начнет термоконтроль резонировать. Цитата:
Я представлял себе все проще. Есть набор данных. Каждая строка набора соответствует секунде графика. Если, к примеру, на 10 секунде была нажата пауза на 20 секунд — значит в 11 строке графика будут данные на 21 секунду реального времени. В каждой строке фиксируется показание люксметра. Если для каждой строки дополнительно фиксировать системное время — тогда в 11 строке это значение будет на 20 секунд больше, чем в 10 строке, по этой разнице и можно будет определить паузу. Цитата:
Но на декстопах списки или таблицы с большим числом строк (более тысячи) обычно бывают виртуальными. То есть они не держат в памяти всю выборку данных, а только ту часть, которую нужно отобразить на экране. В случае графиков — нужно просто усреднять на период времени, который соответствует одному экранному пикселу. Если разрешение телефона 1080x1920 точек и график занимает всю ширину экрана (1080 пикселов), значит в графике не более 1080 точек. Если на экране отрисовывается измерения за 10 часов (36000 сэмплов), значит эти данные нужно усреднить по полуминутным интервалам и получится 1200 точек, которые на графике отрисуются быстро и ресурсы потреблять не будут. |
||
![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
|
Ветеран Фонарёвки
Регистрация: 25.08.2012 Последняя активность: 22.05.2025 22:36
Сообщений: 3954
Записей в дневнике: 4 Сказал(а) спасибо: 1560
Поблагодарили: 3889 раз(а) в 1902 сообщениях
|
![]()
Там и так все усредняется достаточно интеллектуально, отбрасываются точки, лежащие не далее 1.5 попугайского люкса от локального среднего (на самом деле немного сложнее, но принцип такой). Т.е. точность остаётся высокой (выше чем у ceilingbounce, резонанс термоконтроля всяко увидите), а разрежённость становится достаточной для довольно длительных графиков. И памяти хватает. Я до 35 часов гонял, дальше поленился.
Не хочу показаться невежливым, но людям свойственно считать достаточно простым, то, в чём они не имеют печального опыта. Особенно бесит это в начальстве... Цитата:
То есть держать в памяти уже два набора данных: исходный реальный и пересчитанный для отображения. А так как "период времени, который соответствует одному экранному пикселу" постоянно изменяется, второй набор надо пересчитывать из первого на каждый чих. Не, пусть кто-нибудь другой так напишет, а я уважение выражу. [Исправлено: kaa.mobil, 24.01.2023 в 12:10] |
|
![]() |
![]() ![]() |
Поблагодарили: 1 раз |
Drex (24.01.2023)
|
![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 04.06.2013 Последняя активность: Сегодня 04:31
Сообщений: 5590
Сказал(а) спасибо: 534
Поблагодарили: 5197 раз(а) в 1841 сообщениях
|
![]()
kaa.mobil, Redmi 6a - работает, рисует рантайм, при нажатии стоп сохраняет в папку Lumenoid. Просило при запуске доступ только к "фото и мультимедиа и файлам" - выдал. CCT не показывает. По кнопкам сохраняет csv и png. После увеличения/сдвига графика png сохраняется тот же максимальный.
Иконка на столе прозрачная. MIUI 11, android 9. [Исправлено: zazara, 23.01.2023 в 17:25] |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
|
Ветеран Фонарёвки
Регистрация: 11.08.2011 Последняя активность: Сегодня 08:13
Сообщений: 10947
Записей в дневнике: 1 Сказал(а) спасибо: 2694
Поблагодарили: 12537 раз(а) в 4544 сообщениях
|
![]() Цитата:
![]() А и кстати из данных по углам можно интегральный поток посчитать , для фонарей наверное не подойдет, а вот для лампочек или голых диодов вполне.
__________________
* [Исправлено: AEDe, 23.01.2023 в 17:44] |
|
![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 25.08.2012 Последняя активность: 22.05.2025 22:36
Сообщений: 3954
Записей в дневнике: 4 Сказал(а) спасибо: 1560
Поблагодарили: 3889 раз(а) в 1902 сообщениях
|
![]() |
![]() |
![]() ![]() |
Поблагодарили: 1 раз |
AEDe (23.01.2023)
|
![]() |
![]() ![]() |
|
👀
Регистрация: 23.07.2020 Последняя активность: Сегодня 08:45
Сообщений: 10243
Записей в дневнике: 4 Сказал(а) спасибо: 65
Поблагодарили: 6892 раз(а) в 3787 сообщениях
|
![]() Цитата:
Держать в памяти один "сырой" набор данных — это менее 10 МБ и по идее для современного смартфона вообще не должно быть проблемой. У меня страница браузера в смартфоне раз в 20 больше памяти потребляет. Второй набор данных — не пересчитанный, а промежуточный, оптимизированный для быстрого пересчета. Тут проблема не в собственно занимаемом объеме данных, а в избыточном количестве точек для отображения графика — на графике с разрешением 1920x1080 точек нет никакого смысла отрисовывать несколько десятков тысяч точек, они все равно будут накладываться друг на друга (в пределах экранных пикселов). Я не знаю, какие особенности и ограничения действуют в андроиде. Но я бы думал примерно в такую сторону: 1) При любом изменении масштаба или скроллинге графика брать из "сырого" набора данных нужный участок и пересчитывать его с требуемым усреднением (исходя из временного интервала и разрешения графика). 2) Если график будет масштабироваться автоматически, то чтобы не пересчитывать постоянно усредненную выборку, немного схитрить. Например для отображения N точек использовать буфер на 2N сэмплов. Когда в буфер будет выведено N данных, то первую половину буфера можно будет усреднить через одну точку — N1=(N1+N2)/2, N2=(N3+N4)/2, N3=(N5+N6)/2, ... Таким образом будет некое скользящее окно, внутри которого количество пересчетов будет предсказуемым и не очень большим (например на 20-часовой записи пересчитывать нужно будет не все несколько сотен тысяч семплов, а только одну-две тысячи записей в буфере). В общем, тут наверное есть место для оптимизации, но это думать надо и я все-равно на андроиде не умею. Или попробую другими словами свою мысль сформулировать. Среднее считается как: V = (V1+V2+...+Vn)/n Если выборка данных изменяется, то среднее нужно пересчитывать заново. Но если выборка всегда только пополняется (то есть в нее добавляются новые данные), то можно отдельно хранить сумму выборки и количество данных в выборке. И тогда при добавлении новых данных новое значение просто прибавляется к текущей сумме Vsum, количество данных n увеличивается на 1, а среднее значение будет Vsum/n, и не потребуется повторно суммировать всю выборку. [Исправлено: alibek, 23.01.2023 в 17:42] |
|
![]() |
![]() ![]() |
![]() |
![]() ![]() |
сволочь фонарёвки
Регистрация: 27.05.2011 Последняя активность: Вчера 21:24
Сообщений: 39958
Сказал(а) спасибо: 6547
Поблагодарили: 35482 раз(а) в 16389 сообщениях
|
![]() |
![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 25.08.2012 Последняя активность: 22.05.2025 22:36
Сообщений: 3954
Записей в дневнике: 4 Сказал(а) спасибо: 1560
Поблагодарили: 3889 раз(а) в 1902 сообщениях
|
![]()
Здесь в полный рост встаёт вопрос адекватности усилий. Согласно принципу Парето "20% усилий дают 80% результата", и эти 20% усилий я уже совершил, причём достигнуый результат меня вполне устраивает. Вот не хочу я дальше в это упираться, вылавливая какие-то крохи, которых всё равно никто не заметит и не оценит. Лучше я и правда поворотную штангу на штативе построю и диаграмму направленности снимать научусь, гораздо интереснее задача.
Конечно. Никто компас и не собирался. [Исправлено: kaa.mobil, 23.01.2023 в 17:44] |
![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 25.08.2012 Последняя активность: 22.05.2025 22:36
Сообщений: 3954
Записей в дневнике: 4 Сказал(а) спасибо: 1560
Поблагодарили: 3889 раз(а) в 1902 сообщениях
|
![]()
Кстати, по каким? Нас нетипическая интересует, в плоскости экрана через середины его длинных сторон.
А, по ней он же определяет, как его положили, вверх экраном или вниз. Ок, должно норм быть. Да это ж бомба будет. Прикиньте, у Берёзового в обзорах внезапно появляется диаграмма направленности, расчёт реальной ширины оптики и, мамочки, расчётный поток (ну если по поверенному люксметру откалибруется). ![]() [Исправлено: kaa.mobil, 23.01.2023 в 17:52] |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 04.06.2013 Последняя активность: Сегодня 04:31
Сообщений: 5590
Сказал(а) спасибо: 534
Поблагодарили: 5197 раз(а) в 1841 сообщениях
|
![]() |
![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 25.08.2012 Последняя активность: 22.05.2025 22:36
Сообщений: 3954
Записей в дневнике: 4 Сказал(а) спасибо: 1560
Поблагодарили: 3889 раз(а) в 1902 сообщениях
|
![]()
Ничего подобного.
![]() |
![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 25.08.2012 Последняя активность: 22.05.2025 22:36
Сообщений: 3954
Записей в дневнике: 4 Сказал(а) спасибо: 1560
Поблагодарили: 3889 раз(а) в 1902 сообщениях
|
![]() |
![]() |
![]() ![]() |
Поблагодарили: 1 раз |
Просто Джон (23.01.2023)
|
![]() ![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 25.08.2012 Последняя активность: 22.05.2025 22:36
Сообщений: 3954
Записей в дневнике: 4 Сказал(а) спасибо: 1560
Поблагодарили: 3889 раз(а) в 1902 сообщениях
|
![]()
Заехала 0.2-бета. Описание изменений и ссылка на скачивание в конце стартового поста.
|
![]() |
![]() ![]() |