
Влад Кибенко // qbnk // Mini Apps, Development and Me
Стример, разработчик, блогер. Улучшаю платформу Telegram Mini Apps, создаю исключительные продукты, выступаю на конференциях.
Лобби: t.me/heyqbnk_chat
Twitch: twitch.tv/qbnk
Лобби: t.me/heyqbnk_chat
Twitch: twitch.tv/qbnk
TGlist रेटिंग
0
0
प्रकारसार्वजनिक
सत्यापन
असत्यापितविश्वसनीयता
अविश्वसनीयस्थान
भाषाअन्य
चैनल निर्माण की तिथिAug 05, 2022
TGlist में जोड़ा गया
Mar 24, 2025संलग्न समूह
समूह "Влад Кибенко // qbnk // Mini Apps, Development and Me" में नवीनतम पोस्ट
21.04.202505:20
Напоследок покажу пример. У нас наверняка в каждом приложении будет какой-нибудь файлик (или компонент), который описывает стили для текущей платформы. Например, для iOS у нас один шрифт, для Android — другой.
Чтобы корректно использовать плагин, нужно завести вот такие файлы:
Ну и сам блок (из методологии BEM) GlobalStyles:
При сборке под iOS, импорты GlobalStyles.common.scss и GlobalStyles.android.scss будут порезаны 🔪 и в итоге в бандл их CSS-код не попадет.
Плагин расписывать не буду, вы можете найти исходники в отдельном репозитории, который я под всю эту идею выделил — conditional-substitution-example (сам плагин). С позавчерашней трансляции я его подпилил, чтобы учесть больше кейсов и срезать больше ненужного кода. В каких-то местах пришлось отказаться от регулярных выражений в пользу парсинга в AST (начинается вот тут), так как их стало совсем недостаточно.
// Заключение
Какой итог? Мы сделали так, что имея одно приложение, мы генерируем N отдельных бандлов, которые загружаются пользователями без overhead-а. Клиент берет только тот бандл, который специфичен для его платформы.
Теперь знаете где это использовать еще эффективнее? В Платформере. Он позволяет указывать разные ссылки для разных платформ. Вы собираете приложение, получаете N бандлов, выгружаете в Mate, а Платформеру под каждую платформу отдаете ссылку на index-файл специфичный для этой платформы. И всё.
Вот так вот можно значительно улучшить жизнь не только разработчикам, но и пользователям. Надеюсь, что эта идея пойдет в народ и разработчики смогут сделать приятно всем.
Не бойтесь писать полезные плагины, не бойтесь писать эффективные решения. Это не всегда так сложно, как кажется. На этом у меня всё, пользуйтесь на здоровье, и продуктивной недели! 😇
Чтобы корректно использовать плагин, нужно завести вот такие файлы:
Ну и сам блок (из методологии BEM) GlobalStyles:
При сборке под iOS, импорты GlobalStyles.common.scss и GlobalStyles.android.scss будут порезаны 🔪 и в итоге в бандл их CSS-код не попадет.
Плагин расписывать не буду, вы можете найти исходники в отдельном репозитории, который я под всю эту идею выделил — conditional-substitution-example (сам плагин). С позавчерашней трансляции я его подпилил, чтобы учесть больше кейсов и срезать больше ненужного кода. В каких-то местах пришлось отказаться от регулярных выражений в пользу парсинга в AST (начинается вот тут), так как их стало совсем недостаточно.
// Заключение
Какой итог? Мы сделали так, что имея одно приложение, мы генерируем N отдельных бандлов, которые загружаются пользователями без overhead-а. Клиент берет только тот бандл, который специфичен для его платформы.
Теперь знаете где это использовать еще эффективнее? В Платформере. Он позволяет указывать разные ссылки для разных платформ. Вы собираете приложение, получаете N бандлов, выгружаете в Mate, а Платформеру под каждую платформу отдаете ссылку на index-файл специфичный для этой платформы. И всё.
Вот так вот можно значительно улучшить жизнь не только разработчикам, но и пользователям. Надеюсь, что эта идея пойдет в народ и разработчики смогут сделать приятно всем.
Не бойтесь писать полезные плагины, не бойтесь писать эффективные решения. Это не всегда так сложно, как кажется. На этом у меня всё, пользуйтесь на здоровье, и продуктивной недели! 😇
19.04.202511:07
Трансляция запущена!
Разработка Android UI в Platformer-е / Solid.js
— Software and Game Development
— twitch.tv/qbnk
Разработка Android UI в Platformer-е / Solid.js
— Software and Game Development
— twitch.tv/qbnk
16.04.202515:00
🫵 We Need You, Developer
Это не учебная тревога. Вчера Павел согласился принять нашу помощь, поэтому приглашаю всех, кому не безразлична судьба Telegram Mini Apps, принять участие вгрупповом сексе волонтерском событии для разработчиков.
Задача заключается в следующем — необходимо собрать документ, в котором мы распишем все насущные баги, которые очень хотелось бы закрыть. Речи о запросе на какие-то новые фичи нет, мы не рискуем, не входим в азарт, поставили — забрали. От нас требуется доложить только о самых важных багах, которые ломают опыт разработчиков и пользователей, формализовать это, и в уже пережёванном виде передать Павлу.
У меня на памяти много важных проблем, на которые стоило бы обратить внимание, но я приглашаю вас, разработчиков, подсобить мне в этом деле. Просто как минимум потому, что я мог про что-то забыть. Принимаю заявки в чате @devs_cis.
Если хотите участвовать, то следуйте правилам:
— Полностью описывайте кейс воспроизведения. Указывайте платформу и пошагово расписывайте, что нужно сделать для воспроизведения проблемы. Всегда проверяйте, что используете актуальную версию клиента.
— Опционально. Описывайте причины возникновения проблемы и возможные способы её решения.
Я буду перепроверять все репорты, приводить их к необходимому формату, приоритизировать, и добавлять в документ. Публичный дашборд будет в Notion, его мы, вероятно, и передадим Павлу: ссылка на дашборд.
Это не учебная тревога. Вчера Павел согласился принять нашу помощь, поэтому приглашаю всех, кому не безразлична судьба Telegram Mini Apps, принять участие в
Задача заключается в следующем — необходимо собрать документ, в котором мы распишем все насущные баги, которые очень хотелось бы закрыть. Речи о запросе на какие-то новые фичи нет, мы не рискуем, не входим в азарт, поставили — забрали. От нас требуется доложить только о самых важных багах, которые ломают опыт разработчиков и пользователей, формализовать это, и в уже пережёванном виде передать Павлу.
У меня на памяти много важных проблем, на которые стоило бы обратить внимание, но я приглашаю вас, разработчиков, подсобить мне в этом деле. Просто как минимум потому, что я мог про что-то забыть. Принимаю заявки в чате @devs_cis.
Если хотите участвовать, то следуйте правилам:
— Полностью описывайте кейс воспроизведения. Указывайте платформу и пошагово расписывайте, что нужно сделать для воспроизведения проблемы. Всегда проверяйте, что используете актуальную версию клиента.
— Опционально. Описывайте причины возникновения проблемы и возможные способы её решения.
Я буду перепроверять все репорты, приводить их к необходимому формату, приоритизировать, и добавлять в документ. Публичный дашборд будет в Notion, его мы, вероятно, и передадим Павлу: ссылка на дашборд.


15.04.202517:02
Павел ответил. Работаем.
25.03.202516:00
Как порядочный гражданин, купил лицензию на WebStorm и GoLand на год. Обидно было осознать, что я потерял свою скидку из-за того, что получил Open Source лицензию на год. Эх..
Что удивительно, WebStorm перестал показывать уведомление о том, что услуги в России они не предоставляют. То-ли баг, то-ли повезло так.
Что удивительно, WebStorm перестал показывать уведомление о том, что услуги в России они не предоставляют. То-ли баг, то-ли повезло так.


24.03.202515:49
Трансляция запущена!
29 лет. Запомните меня таким
— Just Chatting
— twitch.tv/qbnk
29 лет. Запомните меня таким
— Just Chatting
— twitch.tv/qbnk
24.03.202509:12
🥳 Вот и 29 мне уже
Очередная достигнутая вершина в жизни любого живого организма — прожить год и не помереть. Этого, в целом, достаточно 😀
Если быть серьезным, то и в этом году были достаточно примечательные события — мы перебрались обратно в Тюмень, я ушел из Яндекса и устроился в организацию в TON, ездил на конференции с выступлениями, и наконец довел проект до состояния, которым уже кое-как можно пользоваться. Это был насыщенный воспоминаниями год, и я надеюсь, что таких будет еще больше впереди.
Как я уже когда-то говорил, День Рождения — это один из немногих дней в моей жизни, который буквально ощущается по-другому. Он будто бы улыбается тебе. Воздух пропитан какой-то атмосферой, которая говорит тебе, что это твой день. Жаль, конечно, что выпал он на рабочий день, но что уж тут поделаешь? ☹️
В общем, расписывать тут шибко не буду, остановлюсь на этом. Запомните меня таким в 29 — со смешными усиками, улыбкой и мимическими морщинами 😎
P.S. Сегодня с определенной долей вероятности включу трансляцию в 18:30. Работать не будем, поболтаем по душам, посмотрим видео, обсудим будущее канала на твиче.
Очередная достигнутая вершина в жизни любого живого организма — прожить год и не помереть. Этого, в целом, достаточно 😀
Если быть серьезным, то и в этом году были достаточно примечательные события — мы перебрались обратно в Тюмень, я ушел из Яндекса и устроился в организацию в TON, ездил на конференции с выступлениями, и наконец довел проект до состояния, которым уже кое-как можно пользоваться. Это был насыщенный воспоминаниями год, и я надеюсь, что таких будет еще больше впереди.
Как я уже когда-то говорил, День Рождения — это один из немногих дней в моей жизни, который буквально ощущается по-другому. Он будто бы улыбается тебе. Воздух пропитан какой-то атмосферой, которая говорит тебе, что это твой день. Жаль, конечно, что выпал он на рабочий день, но что уж тут поделаешь? ☹️
В общем, расписывать тут шибко не буду, остановлюсь на этом. Запомните меня таким в 29 — со смешными усиками, улыбкой и мимическими морщинами 😎
P.S. Сегодня с определенной долей вероятности включу трансляцию в 18:30. Работать не будем, поболтаем по душам, посмотрим видео, обсудим будущее канала на твиче.
23.03.202511:22
Трансляция запущена!
Заканчиваем работу над Платформером
— Software and Game Development
— twitch.tv/qbnk
Заканчиваем работу над Платформером
— Software and Game Development
— twitch.tv/qbnk
23.03.202510:20
Привет. Сегодня включаемся в 14:30, будем дорабатывать Платформер. Осталось совсем немного. Расскажу интересных вещей, связанных с разработкой и не только.
Не опаздывайте! 🥸
Не опаздывайте! 🥸
17.03.202507:25
😏 Я нашел идеальное решение
Идеального решения не существует, это кликбейт, но я нашел отличное решение. Речь, конечно же, о том, чем мы занимаемся на трансляциях — Telegram UI Kit for Solid.js.
На прошлом стриме я рассказывал о потенциальной не столь значительной проблеме как сложная структура компонентов. Ловите пример списка с одним элементом:
Толстовато выглядит, неправда-ли? Тогда я сказал, что в этом ничего плохого нет (в этом и правда ничего плохого нет), потому как в моем понимании задача разрабатываемой мной библиотеки — дать максимально гибкий и простой набор компонентов не выходящий за то, что есть в UI Kit-е. Пользователь уже сам решает как эту гибкость использовать, и если она не нужна, то он может написать переиспользуемые компоненты, состоящие из вот этих непростых структур.
В данном примере каждый из компонентов отвечает за определенную часть структуры более сложного вышестоящего компонента. У ListIosItem может быть только 2 элемента — ListIosItemLeft и ListIosItemBody. У ListIosItemBody только ListIosItemBodyLeft и ListIosItemBodyRight. Каждый из этих компонентов описывает определенный элемент в родительском компоненте, и двинуться в сторону от этой структуры не выйдет, можно лишь повлиять на сами элементы, их атрибуты и события.
Прелесть этого подхода заключается в том, что каждый элемент компонента можно гибко настроить. Это отлично вписывается в случай, когда автор библиотеки упустил для тебя что-то важное, но при этом не переиспользуемое, то есть ты не пойдешь создавать PR с этими изменениями потому как другим разработчикам твои изменения не будут нужны.
Ну а вот если говорить о минусах — то это громоздкость. Для описания элемента списка с одним лэйблом придется использовать 5 компонентов, что не очень удобно.
Ну и знаете что? Я случайным образом пришел к решению, которое всё так же сохраняет гибкость, но избавляет разработчика от обязательности использовать структуру выше. Теперь можно обойтись вот таким кодом, вместо того, что был до этого:
Идея получается достаточно проста — ты используешь только те суб-компоненты большого компонента, которые хочешь модифицировать. Все остальные остаются со своими стандартными настройками. То есть если я хочу подкрутить ListIosItemBody, то код будет уже такой:
Есть ощущение, что я переизобрел слоты, но исходя из тех реализаций этого подхода, что я видел, общего он имеет только идею. В любом случае здорово, что это получилось абсолютно случайно, и при этом решает проблему.
UI Платформера сделаем до конца месяца, бета будет открытой 🫰
Всем хорошей рабочей недели!
Идеального решения не существует, это кликбейт, но я нашел отличное решение. Речь, конечно же, о том, чем мы занимаемся на трансляциях — Telegram UI Kit for Solid.js.
На прошлом стриме я рассказывал о потенциальной не столь значительной проблеме как сложная структура компонентов. Ловите пример списка с одним элементом:
Толстовато выглядит, неправда-ли? Тогда я сказал, что в этом ничего плохого нет (в этом и правда ничего плохого нет), потому как в моем понимании задача разрабатываемой мной библиотеки — дать максимально гибкий и простой набор компонентов не выходящий за то, что есть в UI Kit-е. Пользователь уже сам решает как эту гибкость использовать, и если она не нужна, то он может написать переиспользуемые компоненты, состоящие из вот этих непростых структур.
В данном примере каждый из компонентов отвечает за определенную часть структуры более сложного вышестоящего компонента. У ListIosItem может быть только 2 элемента — ListIosItemLeft и ListIosItemBody. У ListIosItemBody только ListIosItemBodyLeft и ListIosItemBodyRight. Каждый из этих компонентов описывает определенный элемент в родительском компоненте, и двинуться в сторону от этой структуры не выйдет, можно лишь повлиять на сами элементы, их атрибуты и события.
Прелесть этого подхода заключается в том, что каждый элемент компонента можно гибко настроить. Это отлично вписывается в случай, когда автор библиотеки упустил для тебя что-то важное, но при этом не переиспользуемое, то есть ты не пойдешь создавать PR с этими изменениями потому как другим разработчикам твои изменения не будут нужны.
Ну а вот если говорить о минусах — то это громоздкость. Для описания элемента списка с одним лэйблом придется использовать 5 компонентов, что не очень удобно.
Ну и знаете что? Я случайным образом пришел к решению, которое всё так же сохраняет гибкость, но избавляет разработчика от обязательности использовать структуру выше. Теперь можно обойтись вот таким кодом, вместо того, что был до этого:
Идея получается достаточно проста — ты используешь только те суб-компоненты большого компонента, которые хочешь модифицировать. Все остальные остаются со своими стандартными настройками. То есть если я хочу подкрутить ListIosItemBody, то код будет уже такой:
Есть ощущение, что я переизобрел слоты, но исходя из тех реализаций этого подхода, что я видел, общего он имеет только идею. В любом случае здорово, что это получилось абсолютно случайно, и при этом решает проблему.
UI Платформера сделаем до конца месяца, бета будет открытой 🫰
Всем хорошей рабочей недели!
14.03.202515:22
Трансляция запущена!
Developing Platformer UI and Telegram UI Kit using Solid.js!
— Software and Game Development
— twitch.tv/qbnk
Developing Platformer UI and Telegram UI Kit using Solid.js!
— Software and Game Development
— twitch.tv/qbnk
14.03.202511:09
Sup, lads! 👋
Сегодня включимся примерно к 6 часам, может чуть раньше, может чуть позже. На трансляции будем подпиливать интерфейса Платформера, я вам покажу его текущее состояние и то, что в интерфейсе уже работает. Не опаздывайте, интро шибко долгим не будет.
Хорошего дня и до встречи!
Сегодня включимся примерно к 6 часам, может чуть раньше, может чуть позже. На трансляции будем подпиливать интерфейса Платформера, я вам покажу его текущее состояние и то, что в интерфейсе уже работает. Не опаздывайте, интро шибко долгим не будет.
Хорошего дня и до встречи!
12.03.202508:44
Я уже даже не знаю, над чем конкретно тут посмеяться, так много идей.
Давайте поясню, потому что у нас наверняка много новичков-программистов.
Во-первых, факт того, что язык является оберткой над другим языком, не является недостатком. Это просто факт в случае TypeScript, из него ничего не вытащить.
Во-вторых, будучи ИБ-шником по образованию, слышать термин "дешифровка" просто уморительно. Дешифровка — это про взлом алгоритма шифрования, либо же подбор его параметров с попыткой получить исходные данные из зашифрованных. Расшифровка — процесс, обратный шифрованию, то есть преобразование зашифрованных данных к первоначальному виду, имея необходимые для этого данные. Видимо, автор имел ввиду "парсинг" или "валидацию", но как при этом в голову могло прийти слово "дешифровка", вообще непонятно.
В-третьих, строгость типизации не имеет ничего общего с валидацией данных, полученных из третьих источников. Ты хоть на C# пиши, данные валидировать все равно придется, и это проблема абсолютно любого языка. То что кто-то используя TypeScript пишет "response as MyType" — не проблема TypeScript-а, а разработчика с руками из попы.
В общем, кек. Или как там принято? Ауф?
Давайте поясню, потому что у нас наверняка много новичков-программистов.
Во-первых, факт того, что язык является оберткой над другим языком, не является недостатком. Это просто факт в случае TypeScript, из него ничего не вытащить.
Во-вторых, будучи ИБ-шником по образованию, слышать термин "дешифровка" просто уморительно. Дешифровка — это про взлом алгоритма шифрования, либо же подбор его параметров с попыткой получить исходные данные из зашифрованных. Расшифровка — процесс, обратный шифрованию, то есть преобразование зашифрованных данных к первоначальному виду, имея необходимые для этого данные. Видимо, автор имел ввиду "парсинг" или "валидацию", но как при этом в голову могло прийти слово "дешифровка", вообще непонятно.
В-третьих, строгость типизации не имеет ничего общего с валидацией данных, полученных из третьих источников. Ты хоть на C# пиши, данные валидировать все равно придется, и это проблема абсолютно любого языка. То что кто-то используя TypeScript пишет "response as MyType" — не проблема TypeScript-а, а разработчика с руками из попы.
В общем, кек. Или как там принято? Ауф?


11.03.202507:37
🪙 Платная личка в Telegram
Совсем недавно Telegram обзавёлся новым полезным функционалом, позволяющим взымать плату за сообщения от пользователей, не находящихся в списке контактов. Продублирую своё мнение, которое озвучивал на трансляции.
Подобный функционал является чуть ли не самой базовой вещью в социальных сетях и мессенджерах. Иногда пользователи просто не хотят видеть сообщение от непонятно кого, да и спам лишний получать тоже не хотят, поэтому и пользуются такой опцией. Очевидно, что везде он бесплатный, но Telegram решил пойти по иному пути.
Уже долгое время вокруг проблемы с личкой придумывались всякие workaround-ы, и вот, появилось более-менее конечное, рабочее решение. До появления Telegram Premium ограничивать список пользователей, которые могут тебе писать, нельзя было от слова "совсем". После появления премиума, у пользователей появилась возможность ограничить список пользователей контактами и другими пользователями с премиумом. Сами понимаете, это всё ещё не решает изначальную проблему, так как у многих пользователей / ботов есть премиум.
Теперь же, у пользователей есть возможность выставить плату за одно сообщение в случае, если пользователь находится вне списка контактов. Важно, что для конкретных пользователей это требование можно отключать, а звезды за сообщения возвращать.
Стоимость сообщения настраивается и варьируется от 1 до 10 000 звезд. Да, наличие лимита всё ещё нельзя считать невозможностью написать в личку, но важно понимать, что если поставить лимит в 10 000, то вам вряд ли кто-то напишет, а если и напишет, то вы на этом неплохо заработаете 🫰 Ну а что боты? Они точно с таким ценником писать не станут.
Напоследок отмечу, что кроме того, что изначальная проблема решена, Команда выработала отличную идею, которая помогает заработать не только Telegram (через покупку звезд), но и пользователям. Такой подход к реализации функционала можно взять на заметку, потому как так хорошо монетизировать функционал, который в других проектах по умолчанию бесплатный, не так уж и просто, и чаще заканчивается провалом.
В общем, фича однозначно полезная, буду пользоваться 💯
Совсем недавно Telegram обзавёлся новым полезным функционалом, позволяющим взымать плату за сообщения от пользователей, не находящихся в списке контактов. Продублирую своё мнение, которое озвучивал на трансляции.
Подобный функционал является чуть ли не самой базовой вещью в социальных сетях и мессенджерах. Иногда пользователи просто не хотят видеть сообщение от непонятно кого, да и спам лишний получать тоже не хотят, поэтому и пользуются такой опцией. Очевидно, что везде он бесплатный, но Telegram решил пойти по иному пути.
Уже долгое время вокруг проблемы с личкой придумывались всякие workaround-ы, и вот, появилось более-менее конечное, рабочее решение. До появления Telegram Premium ограничивать список пользователей, которые могут тебе писать, нельзя было от слова "совсем". После появления премиума, у пользователей появилась возможность ограничить список пользователей контактами и другими пользователями с премиумом. Сами понимаете, это всё ещё не решает изначальную проблему, так как у многих пользователей / ботов есть премиум.
Теперь же, у пользователей есть возможность выставить плату за одно сообщение в случае, если пользователь находится вне списка контактов. Важно, что для конкретных пользователей это требование можно отключать, а звезды за сообщения возвращать.
Стоимость сообщения настраивается и варьируется от 1 до 10 000 звезд. Да, наличие лимита всё ещё нельзя считать невозможностью написать в личку, но важно понимать, что если поставить лимит в 10 000, то вам вряд ли кто-то напишет, а если и напишет, то вы на этом неплохо заработаете 🫰 Ну а что боты? Они точно с таким ценником писать не станут.
Напоследок отмечу, что кроме того, что изначальная проблема решена, Команда выработала отличную идею, которая помогает заработать не только Telegram (через покупку звезд), но и пользователям. Такой подход к реализации функционала можно взять на заметку, потому как так хорошо монетизировать функционал, который в других проектах по умолчанию бесплатный, не так уж и просто, и чаще заканчивается провалом.
В общем, фича однозначно полезная, буду пользоваться 💯
09.03.202508:54
Трансляция запущена!
Development and shit!
— Software and Game Development
— twitch.tv/qbnk
Development and shit!
— Software and Game Development
— twitch.tv/qbnk
रिकॉर्ड
23.04.202523:59
1.8Kसदस्य15.04.202520:13
200उद्धरण सूचकांक27.02.202523:59
923प्रति पोस्ट औसत दृश्य19.04.202523:59
1.1Kप्रति विज्ञापन पोस्ट औसत दृश्य15.04.202520:13
98.55%ER24.02.202504:26
51.85%ERRअधिक कार्यक्षमता अनलॉक करने के लिए लॉगिन करें।