Добавлено 64 новых эмодзи:
Все паки: первый • второй • третий • четвертый • пятый • шестой
Сайт и миниапп с названиями, поиском и фильтрами
#emoji@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
1 7 2 2 1 1
Челлендж завершился. Теперь все квадратики зеленые. За август решена 31 задача уровня изи. Поднялся в рейтинге на 272 793 место. Выдали шестой почетный бейдж 365 Days Badge.
• Slowest Key
• Percentage of Users Attended a Contest
• Sort Array by Increasing Frequency
• Widest Vertical Area Between Two Points Containing No Points
• Check Array Formation Through Concatenation
• Get Maximum in Generated Array
• Defuse the Bomb
• Design an Ordered Stream
• Average Time of Process per Machine
• Check If Two String Arrays are Equivalent
• Fix Names in a Table
• Maximum Repeating Substring
• Richest Customer Wealth
• Goal Parser Interpretation
• Invalid Tweets
• Count the Number of Consistent Strings
• Count of Matches in Tournament
• Daily Leads and Partners
• Reformat Phone Number
• Number of Students Unable to Eat Lunch
• Determine if String Halves Are Alike
• Maximum Units on a Truck
• Calculate Money in Leetcode Bank
• Decode XORed Array
• Number Of Rectangles That Can Form The Largest Square
• Find Followers Count
• The Number of Employees Which Report to Each Employee
• Find the Highest Altitude
• Latest Time by Replacing Hidden Digits
• Maximum Number of Balls in a Box
• Find Total Time Spent by Each Employee
#leetcode@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
Как работать с Plurals-ресурсами в Android
Plurals – это строковый ресурс, который подставляет правильную словоформу в тексте с числом. Набор форм зависит от языка: где-то хватает «one» и «other», а в сложных локалях есть «few», «many», иногда «zero» и «two». Система сама решает, какую форму подставить: «1 день», «2 дня», «5 дней». Благодаря этому интерфейс звучит естественно на любом языке, без ручной склейки строк и поломки грамматики.
Выбор используемой строки осуществляется на основе грамматической необходимости. Правила могут быть сложными для определенного языка и количества. Поэтому Android предоставляет методы для выбора подходящего ресурса.
Ни на одном проекте я не видел правильного применения plurals. Чаще всего разработчики обманываются буквальной трактовкой форм: zero не означает только число 0, а two не подходит только для числа 2. Если не опираться на plurals, получить верную фразу будет невозможно. Поэтому я решил исследовать эту тему в новом видео.
🐗 Смотреть на Ютубе
🐗 Смотреть на Бусти
🐗 Исходники на Гитхабе
🐗 Документация в Роадмапе
#video@foundout
Plurals – это строковый ресурс, который подставляет правильную словоформу в тексте с числом. Набор форм зависит от языка: где-то хватает «one» и «other», а в сложных локалях есть «few», «many», иногда «zero» и «two». Система сама решает, какую форму подставить: «1 день», «2 дня», «5 дней». Благодаря этому интерфейс звучит естественно на любом языке, без ручной склейки строк и поломки грамматики.
Выбор используемой строки осуществляется на основе грамматической необходимости. Правила могут быть сложными для определенного языка и количества. Поэтому Android предоставляет методы для выбора подходящего ресурса.
Ни на одном проекте я не видел правильного применения plurals. Чаще всего разработчики обманываются буквальной трактовкой форм: zero не означает только число 0, а two не подходит только для числа 2. Если не опираться на plurals, получить верную фразу будет невозможно. Поэтому я решил исследовать эту тему в новом видео.
#video@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
Год назад ноушен покинул нас и перестал работать в России. Импульсивный алармизм в телеграм каналах начался еще за 2 недели до его ожидаемого ухода: как же быть, куда бежать.
Откуда ни возьмись повылезали десятки альтернатив и потенциальных убийц. Я потыкал штук 20. Почти все утонули у берега. Выделяется только обсидиан. Но у него другая философия. Возможно, что я дед, закрытый ко всему новому, но ноушен продолжаю пользовать, как и раньше. Если водить – то мерседес.
Это не доставляет особых неудобств, потому что я несколько лет назад переехал на ПМЖ в Виртуальные Приватные Нидерланды. А в Россию возвращаюсь, чтобы зайти на госуслуги или оплатить покупку на маркете.
Я использую браузерную версию ноушена, приложения для мака, айфона и андроида. Помимо роадмапа у меня там отслеживание тренировок, рецепты, планы поездок, сценарии, черновики и другая интерактивная информация.
Все прочие недоступные сервисы, когда открываешь их без впн, просто показывают заглушку, что не из той страны постучался. Ноушен делает больше – сразу разлогинивает на всех устройствах. Приходится заново входить. Пару раз наплодил так лишних рабочих пространств. Ну и спелл чекер включается, приходится отключать.
Самое главное и удивительное – веб-страницы работают прекрасно и без впн.
Please open Telegram to view this post
VIEW IN TELEGRAM
Оцифровал все свои записанные собесы. Теперь их в любое время можно посмотреть по подписке Жалкий детский уровень на бусти. С описанием, таймкодами и ссылками на задачи.
Всего 28 записей: 3 техскрининга, 22 техсобеса, 7 вторых этапов и 4 встречи с руководителями/CTO/Product Owner. Теория, лайвкодинги, систем дизайн и софты. Разрешили нейросети + скрытное использование нейросетей. Компании:🐗 Альфа Банк, 🐗 МТС Линк, 🐗 Uzum Technologies, 🐗 Т-Банк, 🐗 Авито, 🐗 Озон, 🐗 Купибилет, 🐗 МВидео-Эльдорадо, 🐗 Flowwow, 🐗 Банк ДОМ РФ, 🐗 Яндекс, 🐗 Movavi, 🐗 Иннотех, 🐗 Банк-131, 🐗 Сбер, 🐗 VK и 🐗 Rutube.
Осень, руки чешутся пообстукиваться и пощупать рыночек. Много слухов, что найм сдох и не сравнится с 2022-2024 годами. Каждый год труднее предыдущего. Денежная инфляция приводит к джобхоппингу, а инфляция опыта к тому, что залетать надо сразу на синьора. И еще вайбкодить просят в прямом эфире. Буду это изучать.
Всего 28 записей: 3 техскрининга, 22 техсобеса, 7 вторых этапов и 4 встречи с руководителями/CTO/Product Owner. Теория, лайвкодинги, систем дизайн и софты. Разрешили нейросети + скрытное использование нейросетей. Компании:
Осень, руки чешутся пообстукиваться и пощупать рыночек. Много слухов, что найм сдох и не сравнится с 2022-2024 годами. Каждый год труднее предыдущего. Денежная инфляция приводит к джобхоппингу, а инфляция опыта к тому, что залетать надо сразу на синьора. И еще вайбкодить просят в прямом эфире. Буду это изучать.
Please open Telegram to view this post
VIEW IN TELEGRAM
Добавлено 72 новых эмодзи.
Обновлено 9 эмодзи
Все паки: первый • второй • третий • четвертый • пятый • шестой
Сайт и миниапп с названиями, поиском и фильтрами
#emoji@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
Сидишь, ничего не подозреваешь. А потом вжух – узнаешь, что задолжал. Вынь да положь 18k кровно заработанных.
Оказывается, есть такой налог на доход, полученный со вкладов в банках. И до 1 декабря надо занести за 2024 год, если накосил больше 210k. С суммы превышения снимут 13%. Средняя ставка по всем вкладам таким образом снизилась на 0.84 п.п.
Все цифры плавающие, что сумма, что процент. В следующем году будут новые. Ни пуша, ни смс, ни емейла, ни бумажки в ящик, к слову, не прилетело. Самому надо в личном кабинете проверять.
Оказывается, есть такой налог на доход, полученный со вкладов в банках. И до 1 декабря надо занести за 2024 год, если накосил больше 210k. С суммы превышения снимут 13%. Средняя ставка по всем вкладам таким образом снизилась на 0.84 п.п.
Все цифры плавающие, что сумма, что процент. В следующем году будут новые. Ни пуша, ни смс, ни емейла, ни бумажки в ящик, к слову, не прилетело. Самому надо в личном кабинете проверять.
Как в последнее время работает оплата подписки ChatGPT Plus.
Плачу за нее $20/мес. Каждый раз новой предоплаченной иностранной картой. Аккаунт один.
13 июня в очередной раз оплатил. Через месяц, 14 июля, начала отображаться плашка: «не смогли списать средства, проверьте реквизиты». Закрыл ее, нажав на крестик. Доступ к подписке остался.
Понимаю – лояльность, конкуренция и все такое, но доступ к Plus у меня пропал только 4 августа. Через 3 недели после первого неудачного списания. 5 августа продлился с новой карты. 4 сентября очередной платеж не прошел и опять появилась плашка. Закрыл ее и продолжил пользоваться до 28 сентября.
Если я правильно понял систему, сегодня я оплачиваю ChatGPT Plus и буду пользоваться месяц + еще 21 день бесплатно. До 20 ноября.
Спасибо, дядя Сэм!
upd из будущего:
отменилась 25 ноября
Плачу за нее $20/мес. Каждый раз новой предоплаченной иностранной картой. Аккаунт один.
13 июня в очередной раз оплатил. Через месяц, 14 июля, начала отображаться плашка: «не смогли списать средства, проверьте реквизиты». Закрыл ее, нажав на крестик. Доступ к подписке остался.
Понимаю – лояльность, конкуренция и все такое, но доступ к Plus у меня пропал только 4 августа. Через 3 недели после первого неудачного списания. 5 августа продлился с новой карты. 4 сентября очередной платеж не прошел и опять появилась плашка. Закрыл ее и продолжил пользоваться до 28 сентября.
Если я правильно понял систему, сегодня я оплачиваю ChatGPT Plus и буду пользоваться месяц + еще 21 день бесплатно. До 20 ноября.
Спасибо, дядя Сэм!
upd из будущего:
отменилась 25 ноября
This media is not supported in your browser
VIEW IN TELEGRAM
Почему айтишники не моются
Забывают поесть.
И просят, чтобы их не отвлекали.
Может показаться, что тема надуманная. Но тейк не взят с потолка. Треды «что делать с коллегой-засранцем» всплывают регулярно. Меняются лишь способы реагирования. От диффузии ответственности и риска выглядеть угнетателем до прямого безоценочного разговора.
В норме взрослый человек принимает душ хотя бы раз в день. Питается регулярно – примерно каждые 3–4 часа в период бодрствования. И поддерживает базовую эмоциональную устойчивость: не срывается на других и не копит раздражение.
Айтишная же работа создает среду, в которой эти базовые циклы системно нарушаются. Постоянная когнитивная нагрузка, высокая ответственность и фоновая тревога делают нас слепыми к сигналам тела. Ведь они мешают концентрации. Так и ухудшается забота о себе, нарушается режим питания и снижается терпимость к людям. Формат занятости не спасает. Офис или удаленка – механизм один и тот же: постоянная умственная мобилизация, при которой тело превращается в обслуживающий придаток к мозгу.
Ловушек много. Выделю три:
1. Страх выпасть из контекста
Именно из-за него легко послать нахер того, кто отвлекает. Способность удерживать в голове десятки переменных – то, за что рынок так ценит разработчиков. Дебажишь сложный баг, держишь в голове цепочку вызовов, состояние стека и поведение API – любое уведомление или вопрос мгновенно рушат всю конструкцию. Текущее состояние фокуса воспринимается как хрупкий ресурс – «если сейчас отойду, уже не вернусь в это состояние». Тело ставится на паузу.
2. Петля исправлений
В голове айтишного существа живет искажение: «сейчас доделаю – и полетим». Проект, крупную фичу, задачу на день – не важно. Накодил задачу, прошел ревью, закинул в куа и уже полон решимости навернуть хрючева. Но тут тестировщик пишет: «не работает, надо переделать». Боишься потерять контекст и думаешь «щас быстро гляну». Фиксы, ревью, повторный тест. Навязчивое ощущение, что ты обязан исправить всё немедленно, ведь «должен был сделать идеально с первого раза». В этой петле контроля и вины теряется внимание к базовым потребностям. Такая сверхотдача легко приводит к потере эффективности. Начинаешь делать хуже то, ради чего вообще сидел без перерывов.
3. Постоянная фоновая тревога
В айти часто возникает ощущение, что задача критична. На малейшую ошибку мозг реагирует как на угрозу – мобилизуется и вовремя не восстанавливается. Параллельно работает синдром самозванца – ты здесь по недоразумению, вот-вот раскусят. Из-за этого любое отставание или неудача воспринимаются как доказательство собственной несостоятельности. И добивает ситуацию среда сравнения: коллеги бесконечно что-то делают и делятся успехами. На их фоне твой день, потраченный на одну сложную задачу, выглядит провалом. Отсюда страх отстать. Любая пауза – даже чтобы поесть – ощущается как шаг назад. Итог предсказуем – хронический стресс, срывы и полная потеря внимания к себе.
Финал этой истории всегда один – возвращение к себе. Начать заново себя любить и уважать. Кто-то приходит к этому через осознанность, а кто-то – через выгорание. Чем больше жизни в днях, тем ценнее ощущается время и тем меньше хочется тратить его впустую на переработки.
Забывают поесть.
И просят, чтобы их не отвлекали.
Может показаться, что тема надуманная. Но тейк не взят с потолка. Треды «что делать с коллегой-засранцем» всплывают регулярно. Меняются лишь способы реагирования. От диффузии ответственности и риска выглядеть угнетателем до прямого безоценочного разговора.
В норме взрослый человек принимает душ хотя бы раз в день. Питается регулярно – примерно каждые 3–4 часа в период бодрствования. И поддерживает базовую эмоциональную устойчивость: не срывается на других и не копит раздражение.
Айтишная же работа создает среду, в которой эти базовые циклы системно нарушаются. Постоянная когнитивная нагрузка, высокая ответственность и фоновая тревога делают нас слепыми к сигналам тела. Ведь они мешают концентрации. Так и ухудшается забота о себе, нарушается режим питания и снижается терпимость к людям. Формат занятости не спасает. Офис или удаленка – механизм один и тот же: постоянная умственная мобилизация, при которой тело превращается в обслуживающий придаток к мозгу.
Ловушек много. Выделю три:
1. Страх выпасть из контекста
Именно из-за него легко послать нахер того, кто отвлекает. Способность удерживать в голове десятки переменных – то, за что рынок так ценит разработчиков. Дебажишь сложный баг, держишь в голове цепочку вызовов, состояние стека и поведение API – любое уведомление или вопрос мгновенно рушат всю конструкцию. Текущее состояние фокуса воспринимается как хрупкий ресурс – «если сейчас отойду, уже не вернусь в это состояние». Тело ставится на паузу.
2. Петля исправлений
В голове айтишного существа живет искажение: «сейчас доделаю – и полетим». Проект, крупную фичу, задачу на день – не важно. Накодил задачу, прошел ревью, закинул в куа и уже полон решимости навернуть хрючева. Но тут тестировщик пишет: «не работает, надо переделать». Боишься потерять контекст и думаешь «щас быстро гляну». Фиксы, ревью, повторный тест. Навязчивое ощущение, что ты обязан исправить всё немедленно, ведь «должен был сделать идеально с первого раза». В этой петле контроля и вины теряется внимание к базовым потребностям. Такая сверхотдача легко приводит к потере эффективности. Начинаешь делать хуже то, ради чего вообще сидел без перерывов.
3. Постоянная фоновая тревога
В айти часто возникает ощущение, что задача критична. На малейшую ошибку мозг реагирует как на угрозу – мобилизуется и вовремя не восстанавливается. Параллельно работает синдром самозванца – ты здесь по недоразумению, вот-вот раскусят. Из-за этого любое отставание или неудача воспринимаются как доказательство собственной несостоятельности. И добивает ситуацию среда сравнения: коллеги бесконечно что-то делают и делятся успехами. На их фоне твой день, потраченный на одну сложную задачу, выглядит провалом. Отсюда страх отстать. Любая пауза – даже чтобы поесть – ощущается как шаг назад. Итог предсказуем – хронический стресс, срывы и полная потеря внимания к себе.
Финал этой истории всегда один – возвращение к себе. Начать заново себя любить и уважать. Кто-то приходит к этому через осознанность, а кто-то – через выгорание. Чем больше жизни в днях, тем ценнее ощущается время и тем меньше хочется тратить его впустую на переработки.
Гравировка не нужна
Уже несколько лет у нас не продаются маки с двойной гравировкой клавиатуры. Это когда символы латиницы и кириллицы располагаются в противоположных углах клавиши. Есть следующие опции: купить мак только с английской раскладкой, или сделать лазерную гравировку после покупки. В последнем случае русские буквы просто нарисуют в углу клавиш. Английские будут по центру. Из недостатков такой клавы разве что шрифт отличается от яблочного San Francisco.
Кириллицу могут сразу на Тайване нарисовать, в соседнем цеху. Будет из коробки, но все равно не такая как делала когда-то эппл.
В этом году решил попользовать мак без гравировки, только с латинскими буквами. И не заметил никакой разницы вообще. Текст одинаково быстро набирается и на русском и на английском. С чем это связано – не понятно. Может быть привычка. Может быть тот факт, что половину времени мак подключен к монитору, где используется внешняя клавиатура с русской раскладкой. Бывают моменты, когда я забываю, где буква Ю и тыкаю все клавиши в ее районе расположения пока не найдется. Других неудобств нет. Гравировка не нужна.
Уже несколько лет у нас не продаются маки с двойной гравировкой клавиатуры. Это когда символы латиницы и кириллицы располагаются в противоположных углах клавиши. Есть следующие опции: купить мак только с английской раскладкой, или сделать лазерную гравировку после покупки. В последнем случае русские буквы просто нарисуют в углу клавиш. Английские будут по центру. Из недостатков такой клавы разве что шрифт отличается от яблочного San Francisco.
Кириллицу могут сразу на Тайване нарисовать, в соседнем цеху. Будет из коробки, но все равно не такая как делала когда-то эппл.
В этом году решил попользовать мак без гравировки, только с латинскими буквами. И не заметил никакой разницы вообще. Текст одинаково быстро набирается и на русском и на английском. С чем это связано – не понятно. Может быть привычка. Может быть тот факт, что половину времени мак подключен к монитору, где используется внешняя клавиатура с русской раскладкой. Бывают моменты, когда я забываю, где буква Ю и тыкаю все клавиши в ее районе расположения пока не найдется. Других неудобств нет. Гравировка не нужна.
Какой бывает работа с бэкендом
Бывает, что API-методы хорошо описаны в сваггере. Состояние авторизации, список параметров, выбор content-type и схема. Для каждого метода прописаны типы ошибок, которые он генерирует. Контракт определяется бэкендом, тебя не спрашивают. Ты формашлеп.
Бывает, что добавление новых и изменение старых методов на бэкенде согласовывают с тобой. Тебя спрашивают про совместимость и миграции, формат данных и ограничения, ошибки и идемпотентность, название полей и их регистр.
Бывает, что ты полностью отвечаешь за контракт. Какие поля нужны на клиенте, какие сортировки, фильтры и лимиты применять. Бэкендер идет делать. Ты архитектор.
Бывает, что сервер использует сквозную модель – шлёт только нужные NotNull-поля. Клиент кладет их сразу в Room, без каких-либо мапперов. Меньше ошибок трансформаций, проще тесты, быстрее доставка фич. Встречается такая схема очень редко.
Бывают стейтфулл-клиенты. Все получаемые из сети данные хранятся в Room. База данных – единый источник истины. Входящие данные мерджатся через upsert с транзакциями. Данные читаются реактивно, UI подписан на Flow и мгновенно получает апдейты. База мигрируется, заранее проектируется схема с ForeignKey.
Бывают стейтлесс-клиенты. UI живет по принципу Loading-Content-Error. Каждый запрос несет весь контекст. Вместо локальной базы – in-memory-кэш на время жизни экрана. Пагинация детерминирована. Ошибки маппятся на понятные состояния. Такой клиент легко масштабировать и тестировать.
Бывают приложения на сокетах. Клиент держит постоянное TLS-соединение, авторизуется и поддерживает канал. Сообщения идут по протоколу JSON. При обрыве – реконнект. Надо учитывать жизненный цикл.
Бывает, что сваггера и документации нет вообще. Бэкендер пропал. Айосник потерялся. Аналитик не нанимался. Делаешь новые методы, разбирая код iOS-клиента и копируя его вызовы. Проверяешь запросы через Postman. Выявляешь формат ошибок.
Бывает, твое приложение начинают использовать в дарксторах (подвал -1 этаж). Интернет там ловит только у входа. Было – тонкий клиент и 20 сетевых запросов. Стало – толстый клиент и 2 сетевых запроса. Остальные 18 превратились в локальную синхронизацию данных в Room.
Бывает наступает эпоха херового мобильного интернета. Все глушат, шатают и отключают. Позволяем запросам на изменение стейта (без получения данных) выполняться локально. Они хранятся в руме как упорядоченная цепочка вызовов. Приложение отслеживает состояние сети и через воркменеджер выполяет их пачкой по порядку. И это даже работает.
Нужно быть готовым ко всему.
Бывает, что API-методы хорошо описаны в сваггере. Состояние авторизации, список параметров, выбор content-type и схема. Для каждого метода прописаны типы ошибок, которые он генерирует. Контракт определяется бэкендом, тебя не спрашивают. Ты формашлеп.
Бывает, что добавление новых и изменение старых методов на бэкенде согласовывают с тобой. Тебя спрашивают про совместимость и миграции, формат данных и ограничения, ошибки и идемпотентность, название полей и их регистр.
Бывает, что ты полностью отвечаешь за контракт. Какие поля нужны на клиенте, какие сортировки, фильтры и лимиты применять. Бэкендер идет делать. Ты архитектор.
Бывает, что сервер использует сквозную модель – шлёт только нужные NotNull-поля. Клиент кладет их сразу в Room, без каких-либо мапперов. Меньше ошибок трансформаций, проще тесты, быстрее доставка фич. Встречается такая схема очень редко.
Бывают стейтфулл-клиенты. Все получаемые из сети данные хранятся в Room. База данных – единый источник истины. Входящие данные мерджатся через upsert с транзакциями. Данные читаются реактивно, UI подписан на Flow и мгновенно получает апдейты. База мигрируется, заранее проектируется схема с ForeignKey.
Бывают стейтлесс-клиенты. UI живет по принципу Loading-Content-Error. Каждый запрос несет весь контекст. Вместо локальной базы – in-memory-кэш на время жизни экрана. Пагинация детерминирована. Ошибки маппятся на понятные состояния. Такой клиент легко масштабировать и тестировать.
Бывают приложения на сокетах. Клиент держит постоянное TLS-соединение, авторизуется и поддерживает канал. Сообщения идут по протоколу JSON. При обрыве – реконнект. Надо учитывать жизненный цикл.
Бывает, что сваггера и документации нет вообще. Бэкендер пропал. Айосник потерялся. Аналитик не нанимался. Делаешь новые методы, разбирая код iOS-клиента и копируя его вызовы. Проверяешь запросы через Postman. Выявляешь формат ошибок.
Бывает, твое приложение начинают использовать в дарксторах (подвал -1 этаж). Интернет там ловит только у входа. Было – тонкий клиент и 20 сетевых запросов. Стало – толстый клиент и 2 сетевых запроса. Остальные 18 превратились в локальную синхронизацию данных в Room.
Бывает наступает эпоха херового мобильного интернета. Все глушат, шатают и отключают. Позволяем запросам на изменение стейта (без получения данных) выполняться локально. Они хранятся в руме как упорядоченная цепочка вызовов. Приложение отслеживает состояние сети и через воркменеджер выполяет их пачкой по порядку. И это даже работает.
Нужно быть готовым ко всему.
Обновление эмодзипака
Добавлено 100 новых эмодзи.
🐗 Kotlin
🐗 Kotlin Multiplatform
🐗 OpenAI Sora
🐗 Model Context Protocol
🐗 Qoder
🐗 Google Chrome Canary
🐗 Google Messages
🐗 Google Files
🐗 Google Palm
🐗 Google News
🐗 Google Fonts
🐗 Google Travel
🐗 Google Family Link
🐗 Google Play Pass
🐗 Google Classroom
🐗 Google Street View
🐗 Google Authenticator
🐗 Google Fi Eireless
🐗 Google Currents
🐗 Google Identity Platform
🐗 Google Developers
🐗 Google Shopping
🐗 Google Search Console
🐗 Google Arts Culture
🐗 Google Finance
🐗 Google Analytics
🐗 Google Cloud Code
🐗 Google My Business
🐗 Google Scholar
🐗 Google Developer Program
🐗 Google Ad Manager
🐗 Oracle PL/SQL
🐗 Adobe PDF
🐗 EA-Play
🐗 Sony Playstation Plus
🐗 Santa Monica Studio
🐗 Sony PS Remote Play
🐗 Frostbite
🐗 OCaml
🐗 Gleam
🐗 BitTorrent
🐗 Microsoft Todo
🐗 Microsoft Forms
🐗 ASML
🐗 Яндекс Афиша
🐗 Яндекс Деливери
🐗 Яндекс Лавка
🐗 Яндекс Заправки
🐗 Яндекс Практикум
🐗 Proton Authenticator
🐗 Proton Drive
🐗 Proton Pass
🐗 Proton VPN
🐗 Proton Wallet
🐗 Proton Calendar
🐗 Proton Meet
🐗 Proton Lumo
🐗 FastAPI
🐗 Giga Chat
🐗 Wink
🐗 Firecrawl
🐗 Dynatrace
🐗 Tproger
🐗 Mapbox
🐗 Segment
🐗 WHATWG
🐗 Jasmine
🐗 PowerSync
🐗 Zen Browser
🐗 Ahrefs
🐗 Semrush
🐗 Sourcegraph
🐗 Tidal
🐗 Zig
🐗 Sass
🐗 ESLint
🐗 Elementor
🐗 Pulumi
🐗 Factory ai
🐗 Mubi
🐗 Accenture
🐗 Hedra
🐗 Firefiles ai
🐗 WeShop
🐗 Sider
🐗 Ideogram
🐗 Udio
🐗 Flair ai
🐗 Kling AI
🐗 Warp
🐗 Civitai
🐗 Vodafone
🐗 OpenTelemetry
🐗 Mixpanel
🐗 n8n
🐗 Expedia
🐗 Hostinger
🐗 XRP
🐗 UML
🐗 Heygen
Все паки: первый • второй • третий • четвертый • пятый • шестой • седьмой • восьмой
Сайт и миниапп с названиями, поиском и фильтрами
#emoji@foundout
Добавлено 100 новых эмодзи.
Все паки: первый • второй • третий • четвертый • пятый • шестой • седьмой • восьмой
Сайт и миниапп с названиями, поиском и фильтрами
#emoji@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
Обновлен 41 эмодзи
🐗 ⮕ 🐗 Cursor
🐗 ⮕ 🐗 Huawei
🐗 ⮕ 🐗 Microsoft OneDrive
🐗 ⮕ 🐗 Microsoft Teams
🐗 ⮕ 🐗 Microsoft Word
🐗 ⮕ 🐗 Microsoft Excel
🐗 ⮕ 🐗 Microsoft PowerPoint
🐗 ⮕ 🐗 Microsoft Access
🐗 ⮕ 🐗 Microsoft OneNote
🐗 ⮕ 🐗 Microsoft Outlook
🐗 ⮕ 🐗 Microsoft SharePoint
🐗 ⮕ 🐗 Microsoft Defender
🐗 ⮕ 🐗 Meizu
🐗 ⮕ 🐗 Ubisoft
🐗 ⮕ 🐗 Electronic Arts
🐗 ⮕ 🐗 CSS
🐗 ⮕ 🐗 Parallels
🐗 ⮕ 🐗 Nginx
🐗 ⮕ 🐗 DigitalOcean
🐗 ⮕ 🐗 MQTT
🐗 ⮕ 🐗 Udacity
🐗 ⮕ 🐗 Google WebRTC
🐗 ⮕ 🐗 Google Waymo
🐗 ⮕ 🐗 ReCaptcha
🐗 ⮕ 🐗 Hubspot
🐗 ⮕ 🐗 Tron
🐗 ⮕ 🐗 Stellar
🐗 ⮕ 🐗 CakePHP
🐗 ⮕ 🐗 Erlang
🐗 ⮕ 🐗 Verizon
🐗 ⮕ 🐗 Micron
🐗 ⮕ 🐗 Siemens
🐗 ⮕ 🐗 Wordpress
🐗 ⮕ 🐗 Unsplash
🐗 ⮕ 🐗 Giphy
🐗 ⮕ 🐗 Arduino
🐗 ⮕ 🐗 Wolfram
🐗 ⮕ 🐗 Sisense
🐗 ⮕ 🐗 Tencent
🐗 ⮕ 🐗 Typeform
🐗 ⮕ 🐗 Drupal
Please open Telegram to view this post
VIEW IN TELEGRAM
Удалено 40 эмодзи
На ранних этапах я делал дубликаты некоторых эмодзи, когда не мог определиться с правильной палитрой. Больше копий нет.
🐗 🐗 🐗 🐗 🐗 🐗 🐗 🐗
🐗 🐗 🐗 🐗 🐗 🐗 🐗 🐗
🐗 🐗 🐗 🐗 🐗 🐗 🐗 🐗
🐗 🐗 🐗 🐗 🐗 🐗 🐗 🐗
🐗 🐗 🐗 🐗 🐗 🐗 🐗 🐗
На ранних этапах я делал дубликаты некоторых эмодзи, когда не мог определиться с правильной палитрой. Больше копий нет.
Please open Telegram to view this post
VIEW IN TELEGRAM
Новый адаптивный эмодзипак
Добавлен новый пак с 48 адаптивными эмодзи. Они автоматически подстраивают свой цвет под акцентную тему пользователя.
Адаптивные эмодзи можно добавить:
• в шапку профиля
• в фон своих реплаев
• в шапку канала
• в фон реплаев канала
• в шапку группового чата
🐗 Android
🐗 Google
🐗 Material3
🐗 Jetpack Compose
🐗 Compose Multiplatform
🐗 Android Studio
🐗 Firebase Studio
🐗 Gradle
🐗 Kotlin
🐗 Kotlin Multiplatform
🐗 JetBrains AI
🐗 TensorFlow
🐗 Gemini
🐗 Apple
🐗 Swift
🐗 Git
🐗 Node.js
🐗 JavaScript
🐗 TypeScript
🐗 Go
🐗 LeetCode
🐗 Yandex CodeRun
🐗 Telegram
🐗 Slack
🐗 ChatGPT
🐗 OpenAI Sora
🐗 Perplexity
🐗 Claude AI
🐗 DeepSeek
🐗 Cursor
🐗 X
🐗 Grok
🐗 Meta
🐗 Notion
🐗 Instagram
🐗 GitHub
🐗 Boosty
🐗 Figma
🐗 YouTube
🐗 YouTube Shorts
🐗 HeadHunter
🐗 Bitcoin
🐗 Unreal Engine
🐗 Unity
🐗 Huawei
🐗 Binance
🐗 Docker
🐗 Discord
#emoji@foundout
Добавлен новый пак с 48 адаптивными эмодзи. Они автоматически подстраивают свой цвет под акцентную тему пользователя.
Адаптивные эмодзи можно добавить:
• в шапку профиля
• в фон своих реплаев
• в шапку канала
• в фон реплаев канала
• в шапку группового чата
#emoji@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
Не смахивай приложения
Многие прогрессивные ребята говорят, что на смартфоне не нужно смахивать приложения из апп свитчера. Ведь умные операционки автоматически приостанавливает неиспользуемые приложения, управляют памятью, выгружают из фона и вообще тратят больше энергии на запуск, чем на восстановление. Сижу в айфончике по 18 часов в день и скажу, что тупее совета не слышал.
Конечно же нужно смахивать приложения на смартфоне. То есть закрывать их. Убивать процесс. И не париться, что в следующий раз оно запустится с холодного старта.
Recent menu – удобный способ быстро переключаться между приложениями: в одном скопировать, в другом вставить. Если не смахивать приложения, карусель быстро забивается, и пользоваться ей становится неудобно. Валидно, если у тебя всего 20 приложений и все помещаются на один экран. Но когда их 200 и чтобы просто заказать еду нужно открыть 6 разных – это не работает.
Также смартфон начинает тормозить, когда свернуто слишком много приложений. От этого просто не спастись. Хотелось бы, чтобы при сворачивании приложения сохраняли стек экранов и не заставляли заново втыкать на долгий сплэш скрин – но такого нет. Особенно этим болен инстаграм. Нужно 6 раз кликнуть, чтобы добраться до рилса в сохраненках. Свернул – развернул – потерял стек – повторил. Никакой пользы от сворачивания.
И как невероятно приятно смахнуть все приложения – будто отметил дела зелёными чекбоксами. Мозг радуется и получает свое ощущение завершённости.
Многие прогрессивные ребята говорят, что на смартфоне не нужно смахивать приложения из апп свитчера. Ведь умные операционки автоматически приостанавливает неиспользуемые приложения, управляют памятью, выгружают из фона и вообще тратят больше энергии на запуск, чем на восстановление. Сижу в айфончике по 18 часов в день и скажу, что тупее совета не слышал.
Конечно же нужно смахивать приложения на смартфоне. То есть закрывать их. Убивать процесс. И не париться, что в следующий раз оно запустится с холодного старта.
Recent menu – удобный способ быстро переключаться между приложениями: в одном скопировать, в другом вставить. Если не смахивать приложения, карусель быстро забивается, и пользоваться ей становится неудобно. Валидно, если у тебя всего 20 приложений и все помещаются на один экран. Но когда их 200 и чтобы просто заказать еду нужно открыть 6 разных – это не работает.
Также смартфон начинает тормозить, когда свернуто слишком много приложений. От этого просто не спастись. Хотелось бы, чтобы при сворачивании приложения сохраняли стек экранов и не заставляли заново втыкать на долгий сплэш скрин – но такого нет. Особенно этим болен инстаграм. Нужно 6 раз кликнуть, чтобы добраться до рилса в сохраненках. Свернул – развернул – потерял стек – повторил. Никакой пользы от сворачивания.
И как невероятно приятно смахнуть все приложения – будто отметил дела зелёными чекбоксами. Мозг радуется и получает свое ощущение завершённости.
Как разделить Android-приложение на Google и Huawei с помощью Flavors
Элегантное разделение проекта на отдельные сборки для магазинов Google Play, Huawei AppGallery и F-Droid, используя механизм Product Flavors. Он позволяет в рамках одной кодовой базы собирать APK с разными SDK, конфигурациями и зависимостями.
Код разнесен по платформенным модулям :gms, :hms и :foss. Все они реализуют общий контракт из :common, где описан интерфейс AppInteractor. Благодаря этому основной код приложения работает с единой абстракцией, не зная, какой именно сервис подключён – Google или Huawei.
Каждая реализация живет в своём модуле и подключает нужные зависимости: FirebaseAnalytics для Google и HiAnalytics для Huawei. В FOSS-вариант не подключается ничего. Связывание выполняется через модуль :inject, где с помощью Hilt определяется, какая реализация будет подставлена в зависимости от активного flavor.
В приложении задаются три flavors: gms, hms и foss. implementation-конфигурации гарантируют, что в сборку попадет только нужный код. Для плагинов добавлены переменные, вынесенные в buildSrc, чтобы подключать их условно.
Результат – три полностью автономных APK: один использует сервисы Google, другой – Huawei, а третий подходит для F-Droid и устройств без проприетарных SDK. Такой подход даёт гибкость и минимум дублирования, а главное – позволяет поддерживать все экосистемы Android-устройств из одной кодовой базы.
🐗 Смотреть на Ютубе
🐗 Смотреть на Бусти
🐗 Исходники на Гитхабе
🐗 Документация в Роадмапе
#video@foundout
Элегантное разделение проекта на отдельные сборки для магазинов Google Play, Huawei AppGallery и F-Droid, используя механизм Product Flavors. Он позволяет в рамках одной кодовой базы собирать APK с разными SDK, конфигурациями и зависимостями.
Код разнесен по платформенным модулям :gms, :hms и :foss. Все они реализуют общий контракт из :common, где описан интерфейс AppInteractor. Благодаря этому основной код приложения работает с единой абстракцией, не зная, какой именно сервис подключён – Google или Huawei.
Каждая реализация живет в своём модуле и подключает нужные зависимости: FirebaseAnalytics для Google и HiAnalytics для Huawei. В FOSS-вариант не подключается ничего. Связывание выполняется через модуль :inject, где с помощью Hilt определяется, какая реализация будет подставлена в зависимости от активного flavor.
В приложении задаются три flavors: gms, hms и foss. implementation-конфигурации гарантируют, что в сборку попадет только нужный код. Для плагинов добавлены переменные, вынесенные в buildSrc, чтобы подключать их условно.
Результат – три полностью автономных APK: один использует сервисы Google, другой – Huawei, а третий подходит для F-Droid и устройств без проприетарных SDK. Такой подход даёт гибкость и минимум дублирования, а главное – позволяет поддерживать все экосистемы Android-устройств из одной кодовой базы.
#video@foundout
Please open Telegram to view this post
VIEW IN TELEGRAM
Расшифровка KMP-собеса
Когда сталкиваешься с задачей применить нейросети, быстро обнаруживаешь, что вокруг один скам на скаме. Работающих сервисов почти нет: донатные помойки на чужом API, либо кривые решения с рекламой.
У меня наметился собес на Kotlin Multiplatform девелопера, начал готовиться. Решил взять топ-100 вопросов и заучить ответы. Для этого расшифровать этот недавний собес с ютуба и вытащить оттуда все вопросы.
Хорошо, что это делается понятно и бесплатно. Сначала нужно достать mp3 из видео. Его продолжительность – 2 часа. Весит такой файл в битрейте 320 kbps почти 300 MB. Гугл не хочет, чтобы ты скачивал видосики с его ютуба. В поисковой выдаче не будет сервиса загрузки видео на комп. Немцы также не поощряют интернет-пиратство, поэтому надо еще и впн отключить. Идем в DuckDuckGo и снимаем галку безопасный поиск. Первая ссылка будет рабочей.
Затем надо установить Whisper от OpenAI для расшифровки аудио в текст. Для запуска понадобится Python. Причем не самый новый, подойдет версия 3.12.5. Дальше через CLI скормить ей аудиофайл. Прогнал на модели large-v3 с самой высокой точностью. Более легкие (medium/small/base/tiny) работают быстрее, но чаще ошибаются. Ждешь дольше, чем смотреть сам видос на скорости 0.5. Зато на выходе пять файлов: .txt, .srt, .tsv, .vtt и .json, включая полный транскрипт всей аудиозаписи и сегменты с таймкодами.
.txt сразу отправляется в ChatGPT, который достает из него список вопросов для собеса. Даже на категории поделил:
Когда сталкиваешься с задачей применить нейросети, быстро обнаруживаешь, что вокруг один скам на скаме. Работающих сервисов почти нет: донатные помойки на чужом API, либо кривые решения с рекламой.
У меня наметился собес на Kotlin Multiplatform девелопера, начал готовиться. Решил взять топ-100 вопросов и заучить ответы. Для этого расшифровать этот недавний собес с ютуба и вытащить оттуда все вопросы.
Хорошо, что это делается понятно и бесплатно. Сначала нужно достать mp3 из видео. Его продолжительность – 2 часа. Весит такой файл в битрейте 320 kbps почти 300 MB. Гугл не хочет, чтобы ты скачивал видосики с его ютуба. В поисковой выдаче не будет сервиса загрузки видео на комп. Немцы также не поощряют интернет-пиратство, поэтому надо еще и впн отключить. Идем в DuckDuckGo и снимаем галку безопасный поиск. Первая ссылка будет рабочей.
Затем надо установить Whisper от OpenAI для расшифровки аудио в текст. Для запуска понадобится Python. Причем не самый новый, подойдет версия 3.12.5. Дальше через CLI скормить ей аудиофайл. Прогнал на модели large-v3 с самой высокой точностью. Более легкие (medium/small/base/tiny) работают быстрее, но чаще ошибаются. Ждешь дольше, чем смотреть сам видос на скорости 0.5. Зато на выходе пять файлов: .txt, .srt, .tsv, .vtt и .json, включая полный транскрипт всей аудиозаписи и сегменты с таймкодами.
.txt сразу отправляется в ChatGPT, который достает из него список вопросов для собеса. Даже на категории поделил:
опыт, роль, зона ответственности
1. Расскажи про свой опыт мобильной разработки и конкретно про работу с KMP.
2. В чём состоит работа команды мобильной инфраструктуры, какие задачи она решает и где проходит граница её ответственности?
3. В каких проектах и в каком объёме использовался Compose Multiplatform и общий код?
4. Приходилось ли интегрировать общий KMP-код в iOS через Swift и какие трудности возникали?
5. Как распространялась KMP-библиотека между проектами, какие подходы пробовали и что выбрали?
архитектура и модули
6. Какие модули выделить при миграции на KMP и как разделить бизнес-логику, платформенный слой и UI?
7. Какие недостатки есть в текущей архитектуре (Activity, ViewModel, Repository) и как переработать структуру слоёв?
8. Как относишься к использованию Android-специфичных сущностей (Context, Color, Date, LiveData) в коде общего модуля?
9. Какие части проекта не вынести в KMP без адаптации и как ее организовать?
10. Как изменить работу с базой данных, чтобы она стала мультиплатформенной и работала на iOS и Android?
базы данных и хранилища
11. Какой движок хранения данных выбрать для KMP-проекта и почему?
12. Как организовать фабрику БД в KMP при разных драйверах и настройках платформ?
13. Как решать вопрос схемы, миграций и доступа к базе в KMP, чтобы код был единым на обеих платформах?
14. Как заменить SharedPreferences на KMP-совместимое хранилище?
DI и зависимости
15. Какой DI-фреймворк оптимален для KMP и почему?
16. Чем DI с кодогенерацией отличается от DI без неё и почему это важно в KMP?
17. Как внедрять зависимости в общий код и платформенные реализации без дублирования?
сетевой слой
18. Чем заменить Retrofit в KMP и почему предпочтителен Ktor?
19. Как организовать API, сериализацию и обработку ошибок, чтобы всё работало на обеих платформах?
UI и презентационный слой
20. Если UI на iOS остаётся нативным, а на Android – Compose или XML, как настроить общие ViewModel, чтобы их жизненный цикл согласовывался на обеих платформах?
21. Как связать жизненный цикл SwiftUI/UIViewController с жизненным циклом ViewModel?
22. Как организовать форматирование данных (дат, сумм, цветов, ресурсов), чтобы UI-логика не попадала в общий модуль?
23. Почему хранение UI-логики (строк и цветов) в модели данных – плохая практика и как это исправить?
expect/actual и платформенные зависимости
24. Какие зависимости стоит выносить в общий код через expect/actual, а какие – через DI?
25. Какие ограничения у expect/actual и когда этот механизм лучше не использовать?
26. Как передавать Android Context или iOS-специфичные объекты в общий модуль?
27. Какие best practices есть для организации платформенных реализаций?
Interop (Kotlin → iOS)
28. Какие основные проблемы есть в текущем Objective-C Interop?
29. Как преобразовать Kotlin enum в удобный Swift enum?
30. Как исправить ситуацию, когда generic из Kotlin становится nullable в Swift?
31. Когда нужна обёртка для Flow, чтобы корректно использовать его из Swift?
32. Какие готовые решения есть для безопасной работы с Flow и suspend-функциями в Swift?
33. Какие ограничения есть у suspend в Swift и как правильно передавать completion-callbacks?
34. Что такое Swift Export и какие задачи он решает по сравнению с interop?
35. Как подключать стороннюю iOS-библиотеку через cinterop и что он генерирует?
36. Какой формат у сгенерированных хедеров и как Kotlin-код получает доступ к Objective-C API?
37. В чём разница между статическим и динамическим iOS-фреймворком и какой вариант выбрать?
38. Зачем нужен XCFramework и какие проблемы он решает?
компиляция и память (Kotlin/Native)
39. Чем компиляция JVM отличается от Kotlin/Native на уровнях фронтенда и бэкенда?
40. Что такое FIR/IR и какую роль они играют при компиляции в Native?
41. Чем память Kotlin/Native отличается от JVM GC и iOS ARC?
42. Как решается проблема циклических ссылок между объектами Kotlin и Swift/Objective-C?
43. Какие риски возникают при смешении моделей GC и ARC в одном приложении?
44. Какие стратегии работы с памятью рекомендуются при interop и где нужно быть осторожным?
🐗 А здесь правильные ответы.
1. Расскажи про свой опыт мобильной разработки и конкретно про работу с KMP.
2. В чём состоит работа команды мобильной инфраструктуры, какие задачи она решает и где проходит граница её ответственности?
3. В каких проектах и в каком объёме использовался Compose Multiplatform и общий код?
4. Приходилось ли интегрировать общий KMP-код в iOS через Swift и какие трудности возникали?
5. Как распространялась KMP-библиотека между проектами, какие подходы пробовали и что выбрали?
архитектура и модули
6. Какие модули выделить при миграции на KMP и как разделить бизнес-логику, платформенный слой и UI?
7. Какие недостатки есть в текущей архитектуре (Activity, ViewModel, Repository) и как переработать структуру слоёв?
8. Как относишься к использованию Android-специфичных сущностей (Context, Color, Date, LiveData) в коде общего модуля?
9. Какие части проекта не вынести в KMP без адаптации и как ее организовать?
10. Как изменить работу с базой данных, чтобы она стала мультиплатформенной и работала на iOS и Android?
базы данных и хранилища
11. Какой движок хранения данных выбрать для KMP-проекта и почему?
12. Как организовать фабрику БД в KMP при разных драйверах и настройках платформ?
13. Как решать вопрос схемы, миграций и доступа к базе в KMP, чтобы код был единым на обеих платформах?
14. Как заменить SharedPreferences на KMP-совместимое хранилище?
DI и зависимости
15. Какой DI-фреймворк оптимален для KMP и почему?
16. Чем DI с кодогенерацией отличается от DI без неё и почему это важно в KMP?
17. Как внедрять зависимости в общий код и платформенные реализации без дублирования?
сетевой слой
18. Чем заменить Retrofit в KMP и почему предпочтителен Ktor?
19. Как организовать API, сериализацию и обработку ошибок, чтобы всё работало на обеих платформах?
UI и презентационный слой
20. Если UI на iOS остаётся нативным, а на Android – Compose или XML, как настроить общие ViewModel, чтобы их жизненный цикл согласовывался на обеих платформах?
21. Как связать жизненный цикл SwiftUI/UIViewController с жизненным циклом ViewModel?
22. Как организовать форматирование данных (дат, сумм, цветов, ресурсов), чтобы UI-логика не попадала в общий модуль?
23. Почему хранение UI-логики (строк и цветов) в модели данных – плохая практика и как это исправить?
expect/actual и платформенные зависимости
24. Какие зависимости стоит выносить в общий код через expect/actual, а какие – через DI?
25. Какие ограничения у expect/actual и когда этот механизм лучше не использовать?
26. Как передавать Android Context или iOS-специфичные объекты в общий модуль?
27. Какие best practices есть для организации платформенных реализаций?
Interop (Kotlin → iOS)
28. Какие основные проблемы есть в текущем Objective-C Interop?
29. Как преобразовать Kotlin enum в удобный Swift enum?
30. Как исправить ситуацию, когда generic из Kotlin становится nullable в Swift?
31. Когда нужна обёртка для Flow, чтобы корректно использовать его из Swift?
32. Какие готовые решения есть для безопасной работы с Flow и suspend-функциями в Swift?
33. Какие ограничения есть у suspend в Swift и как правильно передавать completion-callbacks?
34. Что такое Swift Export и какие задачи он решает по сравнению с interop?
35. Как подключать стороннюю iOS-библиотеку через cinterop и что он генерирует?
36. Какой формат у сгенерированных хедеров и как Kotlin-код получает доступ к Objective-C API?
37. В чём разница между статическим и динамическим iOS-фреймворком и какой вариант выбрать?
38. Зачем нужен XCFramework и какие проблемы он решает?
компиляция и память (Kotlin/Native)
39. Чем компиляция JVM отличается от Kotlin/Native на уровнях фронтенда и бэкенда?
40. Что такое FIR/IR и какую роль они играют при компиляции в Native?
41. Чем память Kotlin/Native отличается от JVM GC и iOS ARC?
42. Как решается проблема циклических ссылок между объектами Kotlin и Swift/Objective-C?
43. Какие риски возникают при смешении моделей GC и ARC в одном приложении?
44. Какие стратегии работы с памятью рекомендуются при interop и где нужно быть осторожным?
Please open Telegram to view this post
VIEW IN TELEGRAM