An
Привет. Фундаментальный вопрос про инвалидацию кэша. Допустим, на бэкенде есть метод возвращающий постранично список каких-то объектов. Хочется кэшировать их в локальную БД приложения, для просмотра оффлайн, но т.к. свойства объектов могут меняться, главным источником правды всегда остается бэкенд. Кто как поступает в таких случаях? Полностью дропаете кэш, если есть интернет и можно получить хотя бы первую страничку данных от бэкенда? Или как-то частично обновляете локальную БД? И как тогда, во втором случае, боретесь с "разрывами" актуальных данных, когда часть обновленна, часть нет, часть вообще отсутствует?
⚡️Мухамед
Здравствуйте народ, у меня есть BarChart библиотека Mpa, кто нибудь знает как изменить цвет при клике, нигде не нашел инфу, меняет только основной цвет или отдельных элементов
Ivansuper
Еще как менее надежный вариант -- делаешь очередной запрос на сервер. Если данные с локальным кешем разошлись -- дропай весь кеш
Mike
If-Modified-Since 😏
An
Еще как менее надежный вариант -- делаешь очередной запрос на сервер. Если данные с локальным кешем разошлись -- дропай весь кеш
проблема в том, что я не могу знать точно, разошлись они или нет, т.к. ответ постраничный. может на первых пяти страницах всё как в кэше, а где-нибудь потом данные будут уже несовпадать с кэшированными
Ivansuper
Если же какая то страница очередная сошлась, значит данные пока актуальны
An
Вообще хорошим решением выглядит некий метод на бэкенде, который по хэшу локальной версии возвращает дифф данных, который можно накатить и получить полностью актуальную локальную копию. Но если нет возможности воздействовать на бэкенд, этот вариант отваливается
Anatoly
Если же какая то страница очередная сошлась, значит данные пока актуальны
И что он будет грузить каждую страницу чтобы проверить кеш? В чем смысл кеша тогда, если запрос будет выполняться.
An
Монструозно и неэффективно в твоем случае скорее всего
Почему? По-моему как раз таки самый оптимальный вариант
Ivansuper
Ivansuper
Anatoly
If-Modified-Since 😏
Вот самый лучший вариант
Mike
Вот самый лучший вариант
реализовать как?)
Ivansuper
"накатить обновления" обычно ведет к инкрементальным долгим обновлениям в случаях когда давно не обновлялось. Проще просто с сервера хеш актуальности смотреть
An
Если же какая то страница очередная сошлась, значит данные пока актуальны
В общем-то, логичнее тогда дропнуть сразу весь кэш, если есть возможность получать данные из сети, независимо от их соответствия с локальной копией. И кэшировать по мере прогрузки (скроллинга списка). Потому что несколько "одинаковых" по содержимому страниц от бэкенде и в локальной копии всё ещё не гарантируют, что и дальше они идентичны, а туда пользователь может в итоге и недоскроллить.
Anatoly
реализовать как?)
Это ответственность бэкенда)
An
как это на сервере реализовать?
Завести табличку с историей изменения данных
An
Я так и сказал что дропать его полностью если не сошлось : )
Я в том сообщении говорю, о том что надо дропать в любом случае, даже если сошлись
Ivansuper
Понимаешь, у тебя есть локальный кеш, он валидный сам в себе. Пока точечные ответы сервера с ним совпадают, он остается валидным. Если один ответ где то не совпал, значит надо точно весь обновить. Как то так. Но тебе тогда надо делать дифф утилиту
An
Не понимаю, почему он валидный сам по себе)
Ali
Я так и сказал что дропать его полностью если не сошлось : )
а не проще просто запрашивать данные порционно, чем гонять трафик в пустую ?
An
Не понимаю, почему он валидный сам по себе)
В моём понимании, он должен априори считаться невалидным всегда, т.к. валидность его может быть доказана только получением абсолютно всех данных от бэкенда
Ivansuper
Не понимаю, почему он валидный сам по себе)
Попробуй расчертить на листке бумаги состояния кеша, запросы на сервер и его изменение, и проследи визуально что как
An
а не проще просто запрашивать данные порционно, чем гонять трафик в пустую ?
Порционность и вносит главную проблему. Т.к. данные мы можем сравнивать только кусочками
Ivansuper
Порционность и вносит главную проблему. Т.к. данные мы можем сравнивать только кусочками
Ты эти данные потом как то используешь для других запросов на сервер?
Ivansuper
Если они используются в обе стороны, то тогда да, проблема актуальности есть
An
Ты эти данные потом как то используешь для других запросов на сервер?
В общем случае нет, грубо говоря это "история действий". Кое-что может использоваться, но бэкенд вернёт ошибку и хуже никому не станет. Но меня больше интересовало как вообще принято в таких ситуациях поступать) Задача выглядит весьма типичной)
Ivansuper
Ну тебе вариантов накидали) Подумай как лучше будет
An
Окей, спасибо) Я тут ещё докладик с мобиуса нагуглил на эту тему, пойду тоже посмотрю.
Ivansuper
Тут надо обычно сидеть и говорить с заказчиком/бэкэндером
Николай
Ребят. Оцените данный списочек моих "скилов". Хотел узнать чего мне ещё нужно доучить для того что бы стать полноценным junior adnroid developer ? Уже два года как знаком с разработкой под андроид. Себя спецом далеко не считаю. Скорее придурком, который временами гуглит даже то, что уже использовал. Хочется уже увидеть горизонт необходимых скилов, с которыми я смогу подать резюме в норм компанию, а не шарагу. 1. Активности. Фрагменты. Их жизненный цикл и взаимодействие. Работа с Intent, PendingIntent, виды Intent.ACTION. 2. Базовые элементы View. Так же могу работать и с другими елементами и библиотеками(при наличии документации). 3. MVVM. MutableLiveData. 4. Service 5. Broadcast Receiver 6. Recycler View. Paging Library. 7. JSON, XML. 8. Room. SQL. Немного знаю проектирование и нормализацию БД. 9. Picasso (умею пользоваться). 10. Retrofit. OkHTTP. 11. Notification. 12. В основном в разметке работаю с linearLayout, constraintLayout, drawerLayout, frameLayout. 13. Умею применять FrescoImageViewer. 14. Умею делать SnackBar, Toast, Toolbar, выдвижную шторку в NavigationDrawer. 15. При необходимости могу написать кастомный type конвертер для GSON. 16. Могу работать с камерой, сканировать QR/Bar коды в оффлайн режиме. Код пишу на Java. Перейду на Kotlin только при необходимости. Он меня уж очень отпугивает своим синтаксисом. Знаком со стеком JAVA EE, также проходил в университете курс обучения C/С++ в котором была работа с WIN API и многопоточностью. Умею использовать: 1. Servlet, Filter, знаю как они работают, какие есть скоупы. 2. Знаю какие есть MIME типы. Умею работать с некоторыми. 2. JSP, JSF, HTML и чуток CSS. 3. JDBC. 4. JWT. 5. Session, Cookies 6. Умею работать с HTTP, WebScoket на стороне как клиента так и сервера. О Spring, Hibernate я мало что знаю так как сделал выбор для старта карьеры в пользу ведроида и остановил изучение Enterprise. Так же за спиной 2 части курса Cisco CCNA. Но они особо отношения к Android не имеют.
An
"Активности". Сразу в утиль. Сорре.
An
Активити. Это имя собственное. Не надо его переводить.
Ivansuper
Ребят. Оцените данный списочек моих "скилов". Хотел узнать чего мне ещё нужно доучить для того что бы стать полноценным junior adnroid developer ? Уже два года как знаком с разработкой под андроид. Себя спецом далеко не считаю. Скорее придурком, который временами гуглит даже то, что уже использовал. Хочется уже увидеть горизонт необходимых скилов, с которыми я смогу подать резюме в норм компанию, а не шарагу. 1. Активности. Фрагменты. Их жизненный цикл и взаимодействие. Работа с Intent, PendingIntent, виды Intent.ACTION. 2. Базовые элементы View. Так же могу работать и с другими елементами и библиотеками(при наличии документации). 3. MVVM. MutableLiveData. 4. Service 5. Broadcast Receiver 6. Recycler View. Paging Library. 7. JSON, XML. 8. Room. SQL. Немного знаю проектирование и нормализацию БД. 9. Picasso (умею пользоваться). 10. Retrofit. OkHTTP. 11. Notification. 12. В основном в разметке работаю с linearLayout, constraintLayout, drawerLayout, frameLayout. 13. Умею применять FrescoImageViewer. 14. Умею делать SnackBar, Toast, Toolbar, выдвижную шторку в NavigationDrawer. 15. При необходимости могу написать кастомный type конвертер для GSON. 16. Могу работать с камерой, сканировать QR/Bar коды в оффлайн режиме. Код пишу на Java. Перейду на Kotlin только при необходимости. Он меня уж очень отпугивает своим синтаксисом. Знаком со стеком JAVA EE, также проходил в университете курс обучения C/С++ в котором была работа с WIN API и многопоточностью. Умею использовать: 1. Servlet, Filter, знаю как они работают, какие есть скоупы. 2. Знаю какие есть MIME типы. Умею работать с некоторыми. 2. JSP, JSF, HTML и чуток CSS. 3. JDBC. 4. JWT. 5. Session, Cookies 6. Умею работать с HTTP, WebScoket на стороне как клиента так и сервера. О Spring, Hibernate я мало что знаю так как сделал выбор для старта карьеры в пользу ведроида и остановил изучение Enterprise. Так же за спиной 2 части курса Cisco CCNA. Но они особо отношения к Android не имеют.
Чтобы стать джуниором тебе надо одно -- работать начать
Николай
Чтобы стать джуниором тебе надо одно -- работать начать
ну а по самих технологиях? Прийду такой в кантору, а мне зададут вопросов тону по тем механизмам о которых я не знаю и пошлют "учиться" дальше. Так всю жизнь учиться буду
Ivansuper
Если придешь на место для джуниора, тебя не будут до удушья валить
Ivansuper
Иначе можешь вечно бояться и вечно учиться
Ivansuper
К тому же, сходить пару раз и понять что требуют сейчас даст тебе как раз ответ на "что надо подучить"
Ali
Ребят. Оцените данный списочек моих "скилов". Хотел узнать чего мне ещё нужно доучить для того что бы стать полноценным junior adnroid developer ? Уже два года как знаком с разработкой под андроид. Себя спецом далеко не считаю. Скорее придурком, который временами гуглит даже то, что уже использовал. Хочется уже увидеть горизонт необходимых скилов, с которыми я смогу подать резюме в норм компанию, а не шарагу. 1. Активности. Фрагменты. Их жизненный цикл и взаимодействие. Работа с Intent, PendingIntent, виды Intent.ACTION. 2. Базовые элементы View. Так же могу работать и с другими елементами и библиотеками(при наличии документации). 3. MVVM. MutableLiveData. 4. Service 5. Broadcast Receiver 6. Recycler View. Paging Library. 7. JSON, XML. 8. Room. SQL. Немного знаю проектирование и нормализацию БД. 9. Picasso (умею пользоваться). 10. Retrofit. OkHTTP. 11. Notification. 12. В основном в разметке работаю с linearLayout, constraintLayout, drawerLayout, frameLayout. 13. Умею применять FrescoImageViewer. 14. Умею делать SnackBar, Toast, Toolbar, выдвижную шторку в NavigationDrawer. 15. При необходимости могу написать кастомный type конвертер для GSON. 16. Могу работать с камерой, сканировать QR/Bar коды в оффлайн режиме. Код пишу на Java. Перейду на Kotlin только при необходимости. Он меня уж очень отпугивает своим синтаксисом. Знаком со стеком JAVA EE, также проходил в университете курс обучения C/С++ в котором была работа с WIN API и многопоточностью. Умею использовать: 1. Servlet, Filter, знаю как они работают, какие есть скоупы. 2. Знаю какие есть MIME типы. Умею работать с некоторыми. 2. JSP, JSF, HTML и чуток CSS. 3. JDBC. 4. JWT. 5. Session, Cookies 6. Умею работать с HTTP, WebScoket на стороне как клиента так и сервера. О Spring, Hibernate я мало что знаю так как сделал выбор для старта карьеры в пользу ведроида и остановил изучение Enterprise. Так же за спиной 2 части курса Cisco CCNA. Но они особо отношения к Android не имеют.
гита в списке нехватает
Николай
гита в списке нехватает
Да ну умею с ним работать. Изучал паттерны ветвлений но так как не работал в компаниях то без практики побоялся в список его добавлять.
Michil Shkulyov
Чтобы стать джуниором тебе надо одно -- работать начать
Но если он живёт в условном Мухосранске, где нет Android вакансий
Ivansuper
Но если он живёт в условном Мухосранске, где нет Android вакансий
Можно удаленку поискать. ЗП не будет небесной, но стаж пойдет, а это ему повлияет
Michil Shkulyov
Наскока мне известно там мало вакансий на jun, и то за них куча народу грызется
Ivansuper
Хочешь — найдешь. Надо — сделаешь. Вам в прикол себя демотивировать?
Michil Shkulyov
Лучше переехать
Ivansuper
Переехать ему или нет он решит сам
Николай
К тому же, сходить пару раз и понять что требуют сейчас даст тебе как раз ответ на "что надо подучить"
"Сходил" раз. Попал в кантору в которой нету вообще андроид разрабов. Платят 2 000грн в месяц. Уже полтора месяца там просидел. Разного рода поручения делал. Оценивал проекты. На мне хотят заработать. Пытаются найти под меня проекты да такие, где нужно полноценный клиент сделать для магазина или скажем свой Reverse VNC Server сделать... Я как бы через REST API могу сделать клиента без проблем. Но вот когда дело касается красивых дизайнов и анимаций как в современных дорогих приложениях то я тут ноль. Вот сижу и думаю, что делать дальше. Со стажировки не свалил потому что меня сильно не задрачивают, а я сейчас универ заканчиваю, нужно диплом успеть доделать.
Толк
Увааемые подскажите! Нужно сделать страницу регистрации в приложении из двух этапов (экранов, страниц) с анимаций сладом между ними. Как логичнее всего сделать? Через просто вью и их видимость, фрагменты или двумя активити?
Николай
Беда в том, что без опыта работы бывает по 6 часов уходит решение проблемы. Был бы возле меня мидл он бы мне подсказал название класса или механизма для решения. А так сам сиди и вся ответственность на мне
Max
Как вывести текст на имейдж баттон?
Mike
Как вывести текст на имейдж баттон?
Никак, это это же имеджБаттон. Возьми баттон + бэкграунд.
Max
Он как бы есть, но перекрывается картинкой, изображение пнг если закидывать в обычную кнопку то при смене настроек(смена темы) происходят такие приколы - кнопка обретает цвет темы
Сергей
Как вывести текст на имейдж баттон?
Нарисовать по канве к примеру.
Max
Никак, это это же имеджБаттон. Возьми баттон + бэкграунд.
В имейдж баттон текствью засунуть никак нельзя)?
Mike
В имейдж баттон текствью засунуть никак нельзя)?
нет, имиджБаттон/имиджВью — не контейнеры
Сергей
Можно. Наследуемся и пишем.
Max
Да емае, а как тогда это решить без перевода изображения в вектор?
Сергей
Свой класс
Max
Проще, средствами конструктора фрагментов можно это обойти?