Миграция на Kotlin
#статьи #разработка #опрос
Сегодня уже огромное количество проектов, которые написаны на Kotlin. Уже не раз упоминал на канале о том, что новый проект стоит начинать только на Kotlin.
Однако как быть с текущими проектами? На деле решиться перейти на Kotlin не просто. Ведь для бизнеса чаще без разницы, как вы пишите проект: на каком языке, какая архитектура, какие подходы вы используете. Основная задача — создание «фич» вовремя.
Но что можно сказать о разработчиках? Уверен, что большинство желает пробовать новые технологии, языки программирования, библиотеки. Однако очень дорого испытывать это на рабочем приложении. Ведь если что-то пойдет не так, то исправить это будет не просто из-за недостатка опыта в конкретной сфере.
Так бывает и с переходом на Kotlin. Одной из негативных мыслей, которая может появиться, является недостаточное знание языка. Не всегда просто писать те вещи, которые ты долгое время писал на Java, а теперь должен чуть по-другому писать на Kotlin.
Наткнулся на полезную статью, где автор описывает этапы перехода на Kotlin. Он рассматривает некоторые типичные шаблоны в Android-разработке и описывает их переход на Kotlin. Мне кажется, что подобная статья полезна всем, кто переписывает свой проект на Kotlin.
А на каком языке программирования вы пишете бОльшую часть времени?
#статьи #разработка #опрос
Сегодня уже огромное количество проектов, которые написаны на Kotlin. Уже не раз упоминал на канале о том, что новый проект стоит начинать только на Kotlin.
Однако как быть с текущими проектами? На деле решиться перейти на Kotlin не просто. Ведь для бизнеса чаще без разницы, как вы пишите проект: на каком языке, какая архитектура, какие подходы вы используете. Основная задача — создание «фич» вовремя.
Но что можно сказать о разработчиках? Уверен, что большинство желает пробовать новые технологии, языки программирования, библиотеки. Однако очень дорого испытывать это на рабочем приложении. Ведь если что-то пойдет не так, то исправить это будет не просто из-за недостатка опыта в конкретной сфере.
Так бывает и с переходом на Kotlin. Одной из негативных мыслей, которая может появиться, является недостаточное знание языка. Не всегда просто писать те вещи, которые ты долгое время писал на Java, а теперь должен чуть по-другому писать на Kotlin.
Наткнулся на полезную статью, где автор описывает этапы перехода на Kotlin. Он рассматривает некоторые типичные шаблоны в Android-разработке и описывает их переход на Kotlin. Мне кажется, что подобная статья полезна всем, кто переписывает свой проект на Kotlin.
А на каком языке программирования вы пишете бОльшую часть времени?
Droidcon NYC 2018
#разработка #статьи #конференции
Я часто на канале описываю различные конференции, связанные с мобильной разработкой. Считаю, что если ты взял с конференции хотя бы одну идею и применил ее, то это уже была полезная конференция. Ну а в личном посещении главным плюсом является общение с коллегами из других компаний. Ведь доклады посмотреть можно и онлайн чуть позже, но задать свои вопросы, возможно, уже не получится.
Сегодня хочу поделиться с вами плейлистом с конференции droidcon, которая проходила в Нью-Йорке. Кстати, не так часто организаторы конференции выкладывают доклады в публичный доступ, особенно так быстро. Глаза разбегаются от огромного количества полезного материала. Вот некоторые из тем: Flutter, MotionLayout, разное применение Kotlin, архитектура, безопасность.
Для себя отметил Flutter. Возможно, наконец-то дойдут руки до того, чтобы попробовать написать на нем простое приложение. Ну и вы выбирайте и изучайте понравившуюся тему.
#разработка #статьи #конференции
Я часто на канале описываю различные конференции, связанные с мобильной разработкой. Считаю, что если ты взял с конференции хотя бы одну идею и применил ее, то это уже была полезная конференция. Ну а в личном посещении главным плюсом является общение с коллегами из других компаний. Ведь доклады посмотреть можно и онлайн чуть позже, но задать свои вопросы, возможно, уже не получится.
Сегодня хочу поделиться с вами плейлистом с конференции droidcon, которая проходила в Нью-Йорке. Кстати, не так часто организаторы конференции выкладывают доклады в публичный доступ, особенно так быстро. Глаза разбегаются от огромного количества полезного материала. Вот некоторые из тем: Flutter, MotionLayout, разное применение Kotlin, архитектура, безопасность.
Для себя отметил Flutter. Возможно, наконец-то дойдут руки до того, чтобы попробовать написать на нем простое приложение. Ну и вы выбирайте и изучайте понравившуюся тему.
AI для решения проблем с кожей
#статьи #мысли
Недавно прочитал статью о достаточно необычном применении искусственного интеллекта. В ней говорится о нескольких приложениях для борьбы с проблемами кожи на лице.
На старте необходимо ответить на несколько вопросов, связанных со с проблемами кожи, как кожа реагирует на средства для ухода, что употребляет пользователь из еды.
Но помимо этого, пользователь должен загрузить селфи. Приложение проанализирует полученную фотографию при помощи искусственного интеллекта и предложит комплекс мер для ухода. Также представляется возможность делать снимки время от времени и следить за своим прогрессом.
Успех подобных приложений в том, что они решают проблему конкретного пользователя. Существует огромное количество ресурсов, связанных с медициной, где любой пользователь может узнать нужную информацию. Однако, персонализация — это то, что отличило это приложение. Здорово, что сегодня AI помогает делать сервисы более полезными при помощи персонализации.
#статьи #мысли
Недавно прочитал статью о достаточно необычном применении искусственного интеллекта. В ней говорится о нескольких приложениях для борьбы с проблемами кожи на лице.
На старте необходимо ответить на несколько вопросов, связанных со с проблемами кожи, как кожа реагирует на средства для ухода, что употребляет пользователь из еды.
Но помимо этого, пользователь должен загрузить селфи. Приложение проанализирует полученную фотографию при помощи искусственного интеллекта и предложит комплекс мер для ухода. Также представляется возможность делать снимки время от времени и следить за своим прогрессом.
Успех подобных приложений в том, что они решают проблему конкретного пользователя. Существует огромное количество ресурсов, связанных с медициной, где любой пользователь может узнать нужную информацию. Однако, персонализация — это то, что отличило это приложение. Здорово, что сегодня AI помогает делать сервисы более полезными при помощи персонализации.
Conference call между эмуляторами
#разработка
Большинство разработчиков знает о возможности звонка в эмуляторе Android. Сделать это просто: нажмите на меню эмулятора -> Phone -> Call Device.
Для чего это нужно? Например, если вы хотите протестировать поведение своего приложения при входящем вызове. Конечно, подобная функция не создает настоящий звонок. Тем не менее помогает отсеять большинство багов, связанных с паузой приложения и его корректным поведением при входящем звонке.
Однако о еще одной интересной фиче эмуляторов узнал совсем недавно. Можно звонить с одного эмулятора на другой. Для этого необходимо набрать в качестве телефона идентификатор эмулятора, который написан в заголовке окна эмулятора: имя-эмулятора:адрес. Получаем входящий вызов, который можно скомбинировать в conference-call, если позвоним еще и при помощи меню.
Подобная фича здорово помогает, если ваше приложение напрямую связано со звонками.
#разработка
Большинство разработчиков знает о возможности звонка в эмуляторе Android. Сделать это просто: нажмите на меню эмулятора -> Phone -> Call Device.
Для чего это нужно? Например, если вы хотите протестировать поведение своего приложения при входящем вызове. Конечно, подобная функция не создает настоящий звонок. Тем не менее помогает отсеять большинство багов, связанных с паузой приложения и его корректным поведением при входящем звонке.
Однако о еще одной интересной фиче эмуляторов узнал совсем недавно. Можно звонить с одного эмулятора на другой. Для этого необходимо набрать в качестве телефона идентификатор эмулятора, который написан в заголовке окна эмулятора: имя-эмулятора:адрес. Получаем входящий вызов, который можно скомбинировать в conference-call, если позвоним еще и при помощи меню.
Подобная фича здорово помогает, если ваше приложение напрямую связано со звонками.
Android P: Priority Buckets
#разработка #статьи
В последней версии Android P был анонсирован Priority Buckets: обновление для управления расходом батарей, где система может приоритезировать ресурсы, основываясь на том, как часто и как давно использовалось приложение.
Выглядит интересно и правильно. Например, если имеется приложение, которое пользователь запускает редко, то при попытке выполнить фоновую операцию приоритет в ресурсах отдается текущему приложению и его операциям.
Поэтому, теперь приложение попадает в одну из групп:
• active — приложение, которое сейчас запущено пользователем. Интересно то, что если приложение не имеет launcher activity, то оно никогда не попадет в эту группу.
• working set — приложение, которое не запущено, но используется часто в течении дня. Например, наши любимые соц.сети.
• frequent — приложение, которое не запущено, но используется иногда в течении недели. Возможно, приложение для тренировок или такси.
• rare — приложение, которое редко используется на устройстве. Например, специальное приложение, которое вы использовали только в отпуске.
• never — приложение, которое никогда не запускалось.
Для разработчиков, есть некоторые факторы, которые стоит учитывать, особенно, когда дело касается работы в фоне. В статье приведена таблица ограничений, которые накладываются на приложения, находящиеся в определенных Buckets. Поэтому, если вашему приложению важна работа в фоне, то обязательно проверьте, как оно ведет себя на последнем Android.
#разработка #статьи
В последней версии Android P был анонсирован Priority Buckets: обновление для управления расходом батарей, где система может приоритезировать ресурсы, основываясь на том, как часто и как давно использовалось приложение.
Выглядит интересно и правильно. Например, если имеется приложение, которое пользователь запускает редко, то при попытке выполнить фоновую операцию приоритет в ресурсах отдается текущему приложению и его операциям.
Поэтому, теперь приложение попадает в одну из групп:
• active — приложение, которое сейчас запущено пользователем. Интересно то, что если приложение не имеет launcher activity, то оно никогда не попадет в эту группу.
• working set — приложение, которое не запущено, но используется часто в течении дня. Например, наши любимые соц.сети.
• frequent — приложение, которое не запущено, но используется иногда в течении недели. Возможно, приложение для тренировок или такси.
• rare — приложение, которое редко используется на устройстве. Например, специальное приложение, которое вы использовали только в отпуске.
• never — приложение, которое никогда не запускалось.
Для разработчиков, есть некоторые факторы, которые стоит учитывать, особенно, когда дело касается работы в фоне. В статье приведена таблица ограничений, которые накладываются на приложения, находящиеся в определенных Buckets. Поэтому, если вашему приложению важна работа в фоне, то обязательно проверьте, как оно ведет себя на последнем Android.
Друзья, на данном канале я никогда раньше не публиковал вакансий, но сегодня хочу попросить у вас помощи в поиске… серверного разработчика к нам в команду. Наша команда растет, задач становится больше, поэтому крайне необходим мотивированный и опытный разработчик.
Уверен, что среди вас есть много крутых спецов в серверной части. Возможно, среди них есть люди, которые хотели бы:
• работать удаленно. У нас нет привязки ни к месту, ни ко времени работы;
• работать в международной команде. На данный момент наша команда из США, Индии и России;
• каждый день прокачивать свой английский. Кроме постоянного общения с командой, можно воспользоваться курсами английского, которые оплачивает компания.
Требования:
• уверенные знания NodeJS, Express и MongoDB;
• знания React;
• опыт развертки серверов в Google Cloud (App Engine и Compute Engine);
• знание разговорного английского языка.
Если нужны подробности, то пишите мне. Расскажу все о бонусах, о ЗП и о компании.
Уверен, что среди вас есть много крутых спецов в серверной части. Возможно, среди них есть люди, которые хотели бы:
• работать удаленно. У нас нет привязки ни к месту, ни ко времени работы;
• работать в международной команде. На данный момент наша команда из США, Индии и России;
• каждый день прокачивать свой английский. Кроме постоянного общения с командой, можно воспользоваться курсами английского, которые оплачивает компания.
Требования:
• уверенные знания NodeJS, Express и MongoDB;
• знания React;
• опыт развертки серверов в Google Cloud (App Engine и Compute Engine);
• знание разговорного английского языка.
Если нужны подробности, то пишите мне. Расскажу все о бонусах, о ЗП и о компании.
Производительность ConstraintLayout
#разработка #статьи
Попалась любопытная статья о производительности ConstraintLayout. Думаю, что многие используют его в своих проектах и привыкли думать о том, что он является самым быстрым.
Автор протестировал его с другими в зависимости от располагаемых объектов.
Выяснилось, что при расположении элементов один под другим, что типично для LinearLayout, с большим отрывом выигрывает как раз LinearLayout.
При расположении View в центре наилучший результат показал FrameLayout. Был удивлен, что LinearLayout показал почти такой же результат. ConstraintLayout проиграл с большим отрывом.
Как ни странно, при создании сложных View, ConstraintLayout показывал себя как наиболее медленный.
Уверен, что в простых случаях лучше не использовать ConstraintLayout. Если достаточно LinearLayout или FrameLayout — это будет быстрее. Однако, если ваш layout сильно усложнится, то в итоге все равно придется переделать на ConstraintLayout.
Я сам уже долгое время использую ConstraintLayout для создания View, значительно снизив использование других layout. Также не замечал снижения производительности при его использовании, поэтому некоторые результаты тестов показались странными.
#разработка #статьи
Попалась любопытная статья о производительности ConstraintLayout. Думаю, что многие используют его в своих проектах и привыкли думать о том, что он является самым быстрым.
Автор протестировал его с другими в зависимости от располагаемых объектов.
Выяснилось, что при расположении элементов один под другим, что типично для LinearLayout, с большим отрывом выигрывает как раз LinearLayout.
При расположении View в центре наилучший результат показал FrameLayout. Был удивлен, что LinearLayout показал почти такой же результат. ConstraintLayout проиграл с большим отрывом.
Как ни странно, при создании сложных View, ConstraintLayout показывал себя как наиболее медленный.
Уверен, что в простых случаях лучше не использовать ConstraintLayout. Если достаточно LinearLayout или FrameLayout — это будет быстрее. Однако, если ваш layout сильно усложнится, то в итоге все равно придется переделать на ConstraintLayout.
Я сам уже долгое время использую ConstraintLayout для создания View, значительно снизив использование других layout. Также не замечал снижения производительности при его использовании, поэтому некоторые результаты тестов показались странными.
👍1
Android launchMode
#разработка
На прошлой неделе в своей работе столкнулся с проблемой разворота приложения из активных. Ответ крылся в достаточно простой вещи: неправильно настроенным launchMode для второй Activity.
Это важная вещь, и думаю, что все разработчики должны знать, как она работает. Многие используют singleTask, чтобы предотвратить создание дубликатов, но забывают про остальные модификаторы.
В понимании работы launchMode мне помогла статья с иллюстрациями работы каждого из типа: singleTop, singleTask, singleInstance, standard. Можно добавить в закладки и обращаться к ней в момент изменения launchMode.
#разработка
На прошлой неделе в своей работе столкнулся с проблемой разворота приложения из активных. Ответ крылся в достаточно простой вещи: неправильно настроенным launchMode для второй Activity.
Это важная вещь, и думаю, что все разработчики должны знать, как она работает. Многие используют singleTask, чтобы предотвратить создание дубликатов, но забывают про остальные модификаторы.
В понимании работы launchMode мне помогла статья с иллюстрациями работы каждого из типа: singleTop, singleTask, singleInstance, standard. Можно добавить в закладки и обращаться к ней в момент изменения launchMode.
👍1
Иногда я делюсь с вами анонсами конференций и митапов, и сейчас хотел бы сказать про предстоящую встречу Android-разработчиков.
7 декабря, 18:00 — Android-митап :: e-Legion, Revolut, JetBrains
Место: конференц-холл дата-центра Selectel, ул.Цветочная, 19
Спикеры:
— Николай Иготти, JetBrains: Kotlin/Native: технология и средства разработки;
— Роман Яцына, Revolut: Архитектура приложения, основанная на списках и RecyclerView. Реактивный поток данных от сети и БД до RecyclerView;
— Никита Цыганов, e-Legion: Как мы создавали виджет для одного из самых крупных мобильных операторов России: Firebase Job Dispatcher & Channels Coroutine.
Формат: доклады, вопросы и подарки, дискуссия за пиццей 🙌
Вход свободный, регистрируйся сегодня, количество мест ограничено: https://elegion.timepad.ru/event/864117/
7 декабря, 18:00 — Android-митап :: e-Legion, Revolut, JetBrains
Место: конференц-холл дата-центра Selectel, ул.Цветочная, 19
Спикеры:
— Николай Иготти, JetBrains: Kotlin/Native: технология и средства разработки;
— Роман Яцына, Revolut: Архитектура приложения, основанная на списках и RecyclerView. Реактивный поток данных от сети и БД до RecyclerView;
— Никита Цыганов, e-Legion: Как мы создавали виджет для одного из самых крупных мобильных операторов России: Firebase Job Dispatcher & Channels Coroutine.
Формат: доклады, вопросы и подарки, дискуссия за пиццей 🙌
Вход свободный, регистрируйся сегодня, количество мест ограничено: https://elegion.timepad.ru/event/864117/
👍1
Про удаленную работу
#мысли #вопрос #опрос
Недавно общался с коллегой по поводу плюсов и минусов работы в офисе или на удаленке. Пришли мы, как обычно, к выводу, что везде есть достоинства и недостатки.
Уже давно я касался темы выбора первой работы. Но уже после получения опыта есть возможность перехода на удаленную работу.
Еще меня удивляет то, что до сих пор, несмотря на актуальность и удобство удаленной работы, у многих людей есть определенные стереотипы и мнение о ней, несмотря на то, что люди никогда не работали удаленно.
У меня есть, хоть и не большой, но опыт, работы удаленно. И сейчас я понимаю, какие для меня главные достоинства и недостатки этого варианта.
И я бы хотел спросить у вас: интересно ли вам было бы услышать ответы на ваши вопросы от меня, касаемо удаленной работы?
#мысли #вопрос #опрос
Недавно общался с коллегой по поводу плюсов и минусов работы в офисе или на удаленке. Пришли мы, как обычно, к выводу, что везде есть достоинства и недостатки.
Уже давно я касался темы выбора первой работы. Но уже после получения опыта есть возможность перехода на удаленную работу.
Еще меня удивляет то, что до сих пор, несмотря на актуальность и удобство удаленной работы, у многих людей есть определенные стереотипы и мнение о ней, несмотря на то, что люди никогда не работали удаленно.
У меня есть, хоть и не большой, но опыт, работы удаленно. И сейчас я понимаю, какие для меня главные достоинства и недостатки этого варианта.
И я бы хотел спросить у вас: интересно ли вам было бы услышать ответы на ваши вопросы от меня, касаемо удаленной работы?
👍1
Про удаленную работу
#ответы #опрос
Вы задали больше 20 вопросов. Ответов было много, поэтому это потянуло не на отдельный пост, а на целую статью. Ссылка на нее тут.
Надеюсь, что мои ответы помогут вам. Если еще остались вопросы или хотите уточнить ответ на свой вопрос, то пишите, обязательно отвечу.
Обсудить тему удаленной работы можно в комментариях.
Нравится ли формат ответов-вопросов?
#ответы #опрос
Вы задали больше 20 вопросов. Ответов было много, поэтому это потянуло не на отдельный пост, а на целую статью. Ссылка на нее тут.
Надеюсь, что мои ответы помогут вам. Если еще остались вопросы или хотите уточнить ответ на свой вопрос, то пишите, обязательно отвечу.
Обсудить тему удаленной работы можно в комментариях.
Нравится ли формат ответов-вопросов?
Telegraph
Вопросы про удаленную работу
Пришло достаточно много вопросов. Приятно, что тема удаленной работы интересна. Надеюсь, что мои ответы помогут закрыть некоторые пробелы о ней. Для начала, хотелось бы сказать, что есть несколько типов удаленной работы. 1) Фриланс — суть заключается в том…
👍1
Отладка в Android Studio
#разработка #начинающим
Недавно обратились с просьбой рассказать о небольшой статье, которая описывает базовые возможности отладки Android Studio.
Опрос на канале показал, что большинство участников считает себя junior-разработчиками, поэтому статья будет полезна в большей степени им.
В статье узнаете:
• что такое отладка;
• как остановить и запустить отладку;
• что такое точки остановки;
• приостановка, остановка и заглушка точек остановки;
• информация о навигации по коду во время отладки.
Также теперь буду помечать подобные советы и статьи специальным хэштегом для удобного поиска.
#разработка #начинающим
Недавно обратились с просьбой рассказать о небольшой статье, которая описывает базовые возможности отладки Android Studio.
Опрос на канале показал, что большинство участников считает себя junior-разработчиками, поэтому статья будет полезна в большей степени им.
В статье узнаете:
• что такое отладка;
• как остановить и запустить отладку;
• что такое точки остановки;
• приостановка, остановка и заглушка точек остановки;
• информация о навигации по коду во время отладки.
Также теперь буду помечать подобные советы и статьи специальным хэштегом для удобного поиска.
👍1
Решил сделать на канале небольшой #конкурс, связанный с разработкой.
В этот четверг, 20 декабря в 18:00, будет пост с задачей. Для участия в конкурсе необходимо решить задачу в течении 24 часов с момента размещения поста. Она небольшая, писать огромное приложение не нужно.
Так как канал посвящен Android разработке, то решение можно отправить на Kotlin или на Java. Это две категории, которые оцениваются отдельно.
Партнер конкурса — канал @yegor256news. С каналом автора и блогом я познакомился во время одной из конференций. Блог будет полезен всем разработчикам. Автор делится огромным количеством статей о чистом написании кода, о культуре разработки, о тестировании.
Приз — книга Егора Бугаенко «Elegant Objects». Уверен, что о правильном написании кода стоит читать каждому разработчику, вне зависимости от уровня и языка программирования. Книга будет полезна всем. Соответственно, будет разыграно две книги: для лучшего решения на Java и на Kotlin.
Поэтому, следите за каналом и не упустите возможность выиграть полезную вещь.
В этот четверг, 20 декабря в 18:00, будет пост с задачей. Для участия в конкурсе необходимо решить задачу в течении 24 часов с момента размещения поста. Она небольшая, писать огромное приложение не нужно.
Так как канал посвящен Android разработке, то решение можно отправить на Kotlin или на Java. Это две категории, которые оцениваются отдельно.
Партнер конкурса — канал @yegor256news. С каналом автора и блогом я познакомился во время одной из конференций. Блог будет полезен всем разработчикам. Автор делится огромным количеством статей о чистом написании кода, о культуре разработки, о тестировании.
Приз — книга Егора Бугаенко «Elegant Objects». Уверен, что о правильном написании кода стоит читать каждому разработчику, вне зависимости от уровня и языка программирования. Книга будет полезна всем. Соответственно, будет разыграно две книги: для лучшего решения на Java и на Kotlin.
Поэтому, следите за каналом и не упустите возможность выиграть полезную вещь.
👍1
Фриланс из палатки
#разработка #статьи
Сегодня попалась интересная статья о разработчике, который решил попробовать сменить офисную работу на фриланс. Вроде достаточно распространенная практика среди программистов, однако автор решил вместо простой удаленной работы отправиться в путешествие на велосипеде по Европе, а в пути работать.
Его день начинался около 5-6 часов утра, на работу он делал 2-3 перерыва в день по 2-3 часа каждый. Остальное время — передвижение на велосипеде, наслаждение природой и отдых.
Интересна сама подготовка: необходимо было обеспечить непрерывный источник электричества и интернет.
Мне кажется, что в таком стиле мне было бы тяжело работать. Находясь в красивом месте, на природе, меньше всего хочется думать о работе, сложнее сосредоточиться, чем на рабочем месте. Однако статья показывает, что сегодня для работы нужен только компьютер и Интернет. Удивительно.
Ссылка на статью тут.
А вы бы смогли так работать?
#разработка #статьи
Сегодня попалась интересная статья о разработчике, который решил попробовать сменить офисную работу на фриланс. Вроде достаточно распространенная практика среди программистов, однако автор решил вместо простой удаленной работы отправиться в путешествие на велосипеде по Европе, а в пути работать.
Его день начинался около 5-6 часов утра, на работу он делал 2-3 перерыва в день по 2-3 часа каждый. Остальное время — передвижение на велосипеде, наслаждение природой и отдых.
Интересна сама подготовка: необходимо было обеспечить непрерывный источник электричества и интернет.
Мне кажется, что в таком стиле мне было бы тяжело работать. Находясь в красивом месте, на природе, меньше всего хочется думать о работе, сложнее сосредоточиться, чем на рабочем месте. Однако статья показывает, что сегодня для работы нужен только компьютер и Интернет. Удивительно.
Ссылка на статью тут.
А вы бы смогли так работать?
👍1
Задача про Рождественскую распродажу
#конкурс
Для участия в конкурсе, необходимо решить следующую задачу:
Вы хотите купить несколько игр на свой телефон, чтобы поиграть в предстоящие новогодние праздники.
Обычно все игры продаются по одной и той же цене в R рублях. Однако, впереди праздники и Google Play хочет провести Рождественскую распродажу! Поэтому, вы сможете купить игры по более низкой цене.
Условия распродажи такие. Первая игра продается по цене R. Но каждая следующая покупка обойдется на D рублей дешевле, чем предыдущая. Вы будете покупать игры, пока цена игры не станет равна минимальным M-рублей. После этого, каждая игра будет стоить M-рублей.
В вашем кошельке находится N-рублей, поэтому выходить за рамки этой суммы вы не можете. Сколько игры вы сможете купить на распродаже?
Входные данные
Строка с данными R, D, M и N.
Выходные данные
Количество игр, которое можно купить.
Ограничения
1 <= M <= R <=100
1 <= D <=100
1 <= N <= 10^4
Пример входных данных
20 3 6 85
Пример выходных данных
7
Объяснение
Первоначальная цена игры R=20. Каждая следующая покупка обходится на D=3 рубля дешевле, чем предыдущая. Минимальная цена игры M=6. В кошельке у пользователя N=85.
20 + 17 + 14 + 11 + 8 + 6 + 6 = 82.
Количество игр = 7.
Шаблоны на языке Kotlin и Java.
Условия конкурса
1. Решения принимаются в течении 24 часов. Необходимо отправить только тело функции.
2. Отправлять можно только одно решение.
3. Можно исправлять отправленное решение неограниченное количество раз. Принятым будет считаться решение, отправленное последним.
4. Победителем будет являться самая короткая функция gamesCount().
5. В подсчете количества символов считается только тело функции. Например, в примере return 0; количество символов равняется 9. Это и определяет длину решения.
6. Переименовывать функцию нельзя, как и изменять входные параметры. В Kotlin убирать return также запрещается.
7. Требований к форматированию нет, важно рабочее решение. Можно убирать пробелы между переменными и писать код в одну строку, если это не нарушит работоспособность решения.
8. В случае одинаковых по длине решений в каждом из языков, победитель будет выбран рандомно, а запись в выбором победителя будет опубликована на канале.
О призе рассказывал раньше. Это книга Егора Бугаенко «Elegant Objects». Канал автора — @yegor256news.
Отправить решение нужно сюда. Всем удачи!
#конкурс
Для участия в конкурсе, необходимо решить следующую задачу:
Вы хотите купить несколько игр на свой телефон, чтобы поиграть в предстоящие новогодние праздники.
Обычно все игры продаются по одной и той же цене в R рублях. Однако, впереди праздники и Google Play хочет провести Рождественскую распродажу! Поэтому, вы сможете купить игры по более низкой цене.
Условия распродажи такие. Первая игра продается по цене R. Но каждая следующая покупка обойдется на D рублей дешевле, чем предыдущая. Вы будете покупать игры, пока цена игры не станет равна минимальным M-рублей. После этого, каждая игра будет стоить M-рублей.
В вашем кошельке находится N-рублей, поэтому выходить за рамки этой суммы вы не можете. Сколько игры вы сможете купить на распродаже?
Входные данные
Строка с данными R, D, M и N.
Выходные данные
Количество игр, которое можно купить.
Ограничения
1 <= M <= R <=100
1 <= D <=100
1 <= N <= 10^4
Пример входных данных
20 3 6 85
Пример выходных данных
7
Объяснение
Первоначальная цена игры R=20. Каждая следующая покупка обходится на D=3 рубля дешевле, чем предыдущая. Минимальная цена игры M=6. В кошельке у пользователя N=85.
20 + 17 + 14 + 11 + 8 + 6 + 6 = 82.
Количество игр = 7.
Шаблоны на языке Kotlin и Java.
Условия конкурса
1. Решения принимаются в течении 24 часов. Необходимо отправить только тело функции.
2. Отправлять можно только одно решение.
3. Можно исправлять отправленное решение неограниченное количество раз. Принятым будет считаться решение, отправленное последним.
4. Победителем будет являться самая короткая функция gamesCount().
5. В подсчете количества символов считается только тело функции. Например, в примере return 0; количество символов равняется 9. Это и определяет длину решения.
6. Переименовывать функцию нельзя, как и изменять входные параметры. В Kotlin убирать return также запрещается.
7. Требований к форматированию нет, важно рабочее решение. Можно убирать пробелы между переменными и писать код в одну строку, если это не нарушит работоспособность решения.
8. В случае одинаковых по длине решений в каждом из языков, победитель будет выбран рандомно, а запись в выбором победителя будет опубликована на канале.
О призе рассказывал раньше. Это книга Егора Бугаенко «Elegant Objects». Канал автора — @yegor256news.
Отправить решение нужно сюда. Всем удачи!
👍1
Благодарю всех за участие в конкурсе! В скором времени будут объявлены результаты.
👍1
Android ColorFilter Mode
#разработка
На прошлой неделе столкнулся с задачей динамического создания кнопок разных цветов из кастомного drawable.
Задача достаточно простая: нужно было создать кнопку, а дальше сделать
Однако, в моем случае, у каждой кнопки была обводка. То есть, в drawable задана
ColorFilter используется для нескольких целей. Например, им можно поменять Canvas, если вы создаете с нуля свою View. Или же для изменения цвета и рендеринга ImageView и Drawable, что используется в большинстве случаев.
Также эта возможность позволяет уменьшить количество используемых в приложении иконок. Например, вам нужно использовать одну и ту же иконку, но разных цветов. Теперь можно заменить цвет в иконке при помощи фильтра, а не добавлять в приложение отдельную иконку.
Подробнее о том, как работают фильтры можно найти в этой статье. В моем случае помог Mode
#разработка
На прошлой неделе столкнулся с задачей динамического создания кнопок разных цветов из кастомного drawable.
Задача достаточно простая: нужно было создать кнопку, а дальше сделать
setBackgroundResource() и выбрать необходимый файл. Дальше задать необходимый цвет при помощи метода setColorFilter. Однако, в моем случае, у каждой кнопки была обводка. То есть, в drawable задана
<stroke>, а после применения фильтра она пропадала. Пришлось задаться вопросом и подробнее изучить тему Mode для ColorFilter. ColorFilter используется для нескольких целей. Например, им можно поменять Canvas, если вы создаете с нуля свою View. Или же для изменения цвета и рендеринга ImageView и Drawable, что используется в большинстве случаев.
Также эта возможность позволяет уменьшить количество используемых в приложении иконок. Например, вам нужно использовать одну и ту же иконку, но разных цветов. Теперь можно заменить цвет в иконке при помощи фильтра, а не добавлять в приложение отдельную иконку.
Подробнее о том, как работают фильтры можно найти в этой статье. В моем случае помог Mode
MULTIPLY, который не затронул обводку у кнопки.👍1
Результаты конкурса «Рождественская распродажа»
#конкурс
Итак, прошли выходные и я подвожу итоги конкурса. Всего прислано 72% решений на Java и 28% на Kotlin.
1) Java. Лучшие решения состоят из 47 символов. Таких решений было 3:
• return r>n?0:gamesCount(r-d>m?r-d:m,d,m,n-r)+1; — @smallcreep
• return n<m?0:gamesCount(r-d<m?m:r-d,d,m,n-r)+1; — @maxim_ivanov
• return n<r?0:r>m?1+gamesCount(r-d,d,m,n-r):n/m; — @warmouse
При помощи рандомайзера, победителем является @maxim_ivanov!
Отдельно хочу отметить решение автора @aIexmoran. Если предыдущие решения используют рекурсию, то решение автора нет. Это самое короткое решение без рекурсии — 48 символов.
• int i=0;while(m<=r){n-=r;r-=d;i++;}return i+n/m;
2) Kotlin. Тут было немного сложнее определить победителя.
В правилах я не указывал о том, что нельзя добавлять свои imports. С одной стороны, самым коротким было решение из 53 символов. Но также было решение из 58 символов, которое было похожим на короткое, но без импорта
• return if(n<r)0 else gamesCount(Math.max(r-d,m),d,m,n-r)+1 — @R1KUD0
• return if(r<=n)1+gamesCount(Math.max(r-d,m),d,m,n-r)else 0 — @Svyat
При помощи рандомайзера, победителем является @R1KUD0!
Ссылки на видео с использование рандомайзера тут и тут.
Напоминаю, что победители получат книги Егора Бугаенко «Elegant Objects»
Большое спасибо всем участникам конкурса! Мне очень понравился подобный формат, поэтому мы обязательно к нему вернемся.
Как вам подобный формат?
#конкурс
Итак, прошли выходные и я подвожу итоги конкурса. Всего прислано 72% решений на Java и 28% на Kotlin.
1) Java. Лучшие решения состоят из 47 символов. Таких решений было 3:
• return r>n?0:gamesCount(r-d>m?r-d:m,d,m,n-r)+1; — @smallcreep
• return n<m?0:gamesCount(r-d<m?m:r-d,d,m,n-r)+1; — @maxim_ivanov
• return n<r?0:r>m?1+gamesCount(r-d,d,m,n-r):n/m; — @warmouse
При помощи рандомайзера, победителем является @maxim_ivanov!
Отдельно хочу отметить решение автора @aIexmoran. Если предыдущие решения используют рекурсию, то решение автора нет. Это самое короткое решение без рекурсии — 48 символов.
• int i=0;while(m<=r){n-=r;r-=d;i++;}return i+n/m;
2) Kotlin. Тут было немного сложнее определить победителя.
В правилах я не указывал о том, что нельзя добавлять свои imports. С одной стороны, самым коротким было решение из 53 символов. Но также было решение из 58 символов, которое было похожим на короткое, но без импорта
java.lang.Math.*. Принял решение, что было бы несправедливым не отметить автора второго решения. Поэтому, я считаю, что самыми короткими решениями на Kotlin — это решения из 58 символов. Под критерии подходят 2 решения:• return if(n<r)0 else gamesCount(Math.max(r-d,m),d,m,n-r)+1 — @R1KUD0
• return if(r<=n)1+gamesCount(Math.max(r-d,m),d,m,n-r)else 0 — @Svyat
При помощи рандомайзера, победителем является @R1KUD0!
Ссылки на видео с использование рандомайзера тут и тут.
Напоминаю, что победители получат книги Егора Бугаенко «Elegant Objects»
Большое спасибо всем участникам конкурса! Мне очень понравился подобный формат, поэтому мы обязательно к нему вернемся.
Как вам подобный формат?
👍1
Еще немного о конкурсе
Вроде конкурс уже завершился, однако выяснилось, что при проверке решений я допустил ошибку.
Бдительный подписчик обнаружил, что решение победителя не проходит некоторые из тестов, которые я не использовал для проверки, а именно:
15 5 3 24
ожидается результат — 1, реальный результат — 2
37 6 10 36
ожидается результат — 0, реальный результат — 1
Решение с рекурсией также не проходит некоторые из тестов:
37 6 10 36
ожидается результат — 0, реальный результат — -3
24 8 5 24
ожидается результат — 1, реальный результат — -1
Поэтому, из опубликованных решений правильным являются два решения:
• return r>n?0:gamesCount(r-d>m?r-d:m,d,m,n-r)+1; — @smallcreep
• return n<r?0:r>m?1+gamesCount(r-d,d,m,n-r):n/m; — @warmouse
Победителем конкурса является @smallcreep
Ссылка на рандомайзер тут.
Первый конкурс на канале, в предстоящих конкурсах я обязательно буду писать больше тестов для выбора победителя.
Вроде конкурс уже завершился, однако выяснилось, что при проверке решений я допустил ошибку.
Бдительный подписчик обнаружил, что решение победителя не проходит некоторые из тестов, которые я не использовал для проверки, а именно:
15 5 3 24
ожидается результат — 1, реальный результат — 2
37 6 10 36
ожидается результат — 0, реальный результат — 1
Решение с рекурсией также не проходит некоторые из тестов:
37 6 10 36
ожидается результат — 0, реальный результат — -3
24 8 5 24
ожидается результат — 1, реальный результат — -1
Поэтому, из опубликованных решений правильным являются два решения:
• return r>n?0:gamesCount(r-d>m?r-d:m,d,m,n-r)+1; — @smallcreep
• return n<r?0:r>m?1+gamesCount(r-d,d,m,n-r):n/m; — @warmouse
Победителем конкурса является @smallcreep
Ссылка на рандомайзер тут.
Первый конкурс на канале, в предстоящих конкурсах я обязательно буду писать больше тестов для выбора победителя.
👍1
Друзья, сегодня последний день 2018 года.
В этом году канал вырос в большое сообщество людей, которые интересуются разработкой. Мне очень приятно, что вы читаете мой канал, даете обратную связь и задаете свои вопросы. Это вдохновляет на написание постов и продумывание идей для канала. Спасибо вам!
Желаю вам интересных проектов, карьерного роста, поменьше легаси-кода… ну и помнить о том, что в жизни есть не только монитор со средой разработки😉.
С Новым, 2019 годом!
В этом году канал вырос в большое сообщество людей, которые интересуются разработкой. Мне очень приятно, что вы читаете мой канал, даете обратную связь и задаете свои вопросы. Это вдохновляет на написание постов и продумывание идей для канала. Спасибо вам!
Желаю вам интересных проектов, карьерного роста, поменьше легаси-кода… ну и помнить о том, что в жизни есть не только монитор со средой разработки😉.
С Новым, 2019 годом!
👍1