Информация для тех, кто собрался вещать музыку в войс чате наподобие @tginfofm.
Молчу про шумодав, детект голоса, автоматическую регулировку громкости, эхоподавление и прочие обработки звука в клиентах.
Всё вышеперечисленное отключить можно (этого ещё никто не сделал), но повысить битрейт для хоть минимального качества музыки – нельзя.
Точнее повышайте, не проблема, только пересадите всех слушателей на ваш кастомный Telegram клиент, который будет готов декодировать в завышенном вами битрейте и молитесь, чтобы сервера TG не фильтровали и(или) ограничивали как-то ещё 🤷♂️
Ссылка со скриншота: Opus Recommended Settings.
Спасибо @mmelk за помощь в разборе составляющих качественного звука.
P.S. Надо отдать должное, Opus в 32к куда лучше MP3 в 32к. Ссылки на сравнение в комментах ✨
Молчу про шумодав, детект голоса, автоматическую регулировку громкости, эхоподавление и прочие обработки звука в клиентах.
Всё вышеперечисленное отключить можно (этого ещё никто не сделал), но повысить битрейт для хоть минимального качества музыки – нельзя.
Точнее повышайте, не проблема, только пересадите всех слушателей на ваш кастомный Telegram клиент, который будет готов декодировать в завышенном вами битрейте и молитесь, чтобы сервера TG не фильтровали и(или) ограничивали как-то ещё 🤷♂️
Ссылка со скриншота: Opus Recommended Settings.
Спасибо @mmelk за помощь в разборе составляющих качественного звука.
P.S. Надо отдать должное, Opus в 32к куда лучше MP3 в 32к. Ссылки на сравнение в комментах ✨
Групповые звонки в Telegram были запланированы давно и именно в том виде, в котором находятся в бета-версии сейчас
Пояснение к скриншотам:
1. История изменений TLRPC в Telegram клиенте для Android.
2. tdesktop api.tl.
3. Актуальная схема с core.t.tlinks.run.
Я не могу поверить, но всё это время MTproto методы для работы с групповыми чатами давно были спроектированы. Эта реализация, с использованием текстовых чатов и возможностью создать к ним голосовой, пригласить в него людей, управлять участниками и в конце концов разрушить его - существует три года.
TLRPC файл от 2017 года. Сообщение коммита: "Update to 4.6.0"
Сравнивая с обновлённым кодом Telegram Desktop можно увидеть изменения. Так, например, раньше планировалась возможность кикнуть участника только из голосового чата. В текущей реализации можно замутить и кикнуть из группы.
Видать, в 2017 году libtgvoip не вывезла групповые чаты. После переезда на WebRTC решили вернуться к старой фиче ✨
Пояснение к скриншотам:
1. История изменений TLRPC в Telegram клиенте для Android.
2. tdesktop api.tl.
3. Актуальная схема с core.t.tlinks.run.
Я не могу поверить, но всё это время MTproto методы для работы с групповыми чатами давно были спроектированы. Эта реализация, с использованием текстовых чатов и возможностью создать к ним голосовой, пригласить в него людей, управлять участниками и в конце концов разрушить его - существует три года.
TLRPC файл от 2017 года. Сообщение коммита: "Update to 4.6.0"
Сравнивая с обновлённым кодом Telegram Desktop можно увидеть изменения. Так, например, раньше планировалась возможность кикнуть участника только из голосового чата. В текущей реализации можно замутить и кикнуть из группы.
Видать, в 2017 году libtgvoip не вывезла групповые чаты. После переезда на WebRTC решили вернуться к старой фиче ✨
Как вам жизнь без телеги? Я чета всего лишился. Думал куда зайти, чтобы связаться хоть с кем-то, дабы уточнить один ли я такой
Восстановление паролей с пикселизированных скриншотов
Не прошёл мимо статьи, а набросал взаимодействие с инструментом depix через Telegram бота. Во-первых так быстрее благодаря серверному CPU, а во-вторых удобнее 🙃
Бот не рассчитан на публичное использование, а каждый хостит для себя. Задача прожерливая и занимает минуты.
Самого инструмента не было на PyPi - опубликовал. Теперь пощупать его можно установив через pip:
После установки выполняем команду depix в терминале передав нужные аргументы.
Исходный код бота: https://github.com/MarshalX/DepixToolBot ✨
Не прошёл мимо статьи, а набросал взаимодействие с инструментом depix через Telegram бота. Во-первых так быстрее благодаря серверному CPU, а во-вторых удобнее 🙃
Бот не рассчитан на публичное использование, а каждый хостит для себя. Задача прожерливая и занимает минуты.
Самого инструмента не было на PyPi - опубликовал. Теперь пощупать его можно установив через pip:
pip install depix
После установки выполняем команду depix в терминале передав нужные аргументы.
Исходный код бота: https://github.com/MarshalX/DepixToolBot ✨
Forwarded from Marshal's live
Я пишу 2 open source либы для работы со звонками, видеозвонками и групповыми звонками в Telegram.
https://pypi.org/project/tgcalls/ - python binding for tgcalls
https://pypi.org/project/pytgcalls/ - pyrogram + первая либа
https://github.com/tgcalls - моя орга с пока что приватными репами и прочим стафом
@tgcallslib - канальчик для всей будущей движухи связанной с этим (ожидается ещё проекта 2-3 от других разрабочитков. Там будет не биндинг, а переписанный tgcalls на aiortc)
Как pytgvoip от @mandarinka_thoughts ♥️, но теперь не для libtgvoip, а для tgcalls.
Текущий статус: могу звонить, принимать звонки, присоединяться к войс чатам, записывать звук в файл/выводить на устройство и воспроизводить звук из файла/с микрофона.
Абсолютно все прошлые сообщения связанные с этим проектом тут: @MarshalR
Репы будут на личном акке, поэтому если хотите уведомление на GitHub’e, то жмите на follow ✨
https://pypi.org/project/tgcalls/ - python binding for tgcalls
https://pypi.org/project/pytgcalls/ - pyrogram + первая либа
https://github.com/tgcalls - моя орга с пока что приватными репами и прочим стафом
@tgcallslib - канальчик для всей будущей движухи связанной с этим (ожидается ещё проекта 2-3 от других разрабочитков. Там будет не биндинг, а переписанный tgcalls на aiortc)
Как pytgvoip от @mandarinka_thoughts ♥️, но теперь не для libtgvoip, а для tgcalls.
Текущий статус: могу звонить, принимать звонки, присоединяться к войс чатам, записывать звук в файл/выводить на устройство и воспроизводить звук из файла/с микрофона.
Абсолютно все прошлые сообщения связанные с этим проектом тут: @MarshalR
Репы будут на личном акке, поэтому если хотите уведомление на GitHub’e, то жмите на follow ✨
Marshal's channel
Мой 2019 - год первооткрытий! Пару пунктов чутка затрагивают 2018. В этом году я первый раз: - начал проще общаться с девушками; - поцеловался; - влюбился; - любил; - совместно жил; - уходил в отдельную комнату для работы; - пережил расстование; - пристрастился…
Мой 2020 - мост между студ жизнью и РАБотой
Прочитал свой пост за 2019 и просто вааау. Куча воспоминаний. Не знаю удалось ли переплюнуть самого себя, но, как минимум, свои вопросы я решил. Стал ли год глобальнее? Нууу, лол, трында в жизни поменялось, офк да.
Первые два квартала года и начало третьего активно сопровождались разработкой ЯМ либы и бота, учебой, прохождением всевозможных врачей. Попутно еще была работа
Январь:
- зарепортил баг с uri в tdesktop
- рассказал про Chatbase, DI, особенность ЯМ с XSS
- поделился тем, что накодили для vk coin'ов в 2019
- задумал написать сервис для отложки постов в тг
- продолжил воевать с администрацией УО что я не поеду на бесполезный конкурс
- узнал кто такая Аня
- окончательно переехал на хакинтош
- поигрался с каким-то интересным тестовым на джанго
- начал искать непризывное заболевание
- начал ежедневно делать физические упражнения пробуя привить себе привычку. Делал ежедневные отчеты в @MarshalR (r - reports, это сейчас он live 🙁 )
Февраль:
- осознал, что мне помимо армии грозит еще отработка после учебы и начал пытаться в Яндух попасть
- попытка найти новое место работы через хабр (Под капотом бота-клиента Яндекс.Музыки)
- Яндух отказал, не знаю что делать с распредом
- Яндух отказал в стажке. Сроки по распреду начали жать
- ищу хоть какую-нибудь компанию, что возьмёт меня по распреду
- начал серию постов про Python
Март:
- жопа по распреду, смотрю на все варианты
- переписал личный сайт на headless cms (gatsby)
- жирная серия обнов для ЯМ бота, чтобы сделать его более доступным и привлекательным для новых пользователей
- деанон профунктора
- невероятная история как я нашел себе распред в последний день сдачи вызова, о которой я не рассказал публично, лол 😄
- наконец-то задокал все классы ЯМ либы (докал с лета)
- opener (конкурс-марафон с задачками) напомнил о себе. Мысли про участие даже нет
Апрель:
- социальный мониторинг
- зумбот, модерация в маркетплейсе
- какого-то черта мы с тимой уже на 10 задаче opener'a
- вдохновился вирусологией
- переезд с фф на вивальди (теперь вновь на фф)
Май:
- инлайн в ЯМ и в целом улучшение бота во всем. Именно в мае он стал таким, какой есть сейчас
- где-то тут работа над дипломом, предзащита
- мы призёры Opener 2020!
- понакупал чутка рекламы для ЯМ бота перед защитой дипа (ям бот == дип)
Июнь:
- защита диплома и его получение
- проект по работе на новом для меня языке и технологиях (TypeScript + InversifyJS + Express + Firebase (cloud functions, firestore). Собсна на это и ушел весь месяц 😄
- текущий трек в инлайне ЯМ бота, баг ЯМ в поиске
- Opener 2020: Самый сок
- думаю о надобности дальнейшего поступления
Июль:
- инлайн в зум боте, дали красивую юзерку
- перешёл на споти, пока-пока ЯМ
- работал...
Август:
- поступил в ВУЗ
- начал играться с генерацией PDF’ок
- Беларусь
- в ночь с 30 на 31 решаю срочно покинуть страну
Сентябрь:
- занимаюсь доками, визой
- 9 числа я в Польше
- скитаюсь по лагерям
- ищу квартиру
Октябрь:
- переезжаю в Варшаву
- пишу про генерацию пдфок
- привыкаю к новой жизни, проблемы со сном
Ноябрь:
- 2фа в телеге
- восстанавливаюсь в работе
Декабрь:
- проявляю лютый интерес к групповым войс чатам в тг
- баг в звонилке unigram
- начинаю проекты связанные со звонками
- графана для ям и зум бота
Я точно знаю с чего начну свой 21й 😏
А теперь, Илюха, привет. Я знаю, что ты это перечитаешь только в декабре 21го года. Ты мне скажи, че по языкам? Польский выучил? А английский? Если даже не взялся, то ты балбес. Это тебя блочит. Ты ещё в Польше? Как там год прошел, доволен собой? Есть о чем рассказать хоть или совсем лень тебя погубила? В любом случае с НГ тебя. Может хоть 22й ты встретишь не в одиночестве. Не подведи, я же не просто так чем-то тут занимался...
Всех с наступающим, а кого-то уже с наступившим!
Сделайте свой следующий год ЛУЧШЕ, ЧЕМ ЭТОТ!!! ✨
Прочитал свой пост за 2019 и просто вааау. Куча воспоминаний. Не знаю удалось ли переплюнуть самого себя, но, как минимум, свои вопросы я решил. Стал ли год глобальнее? Нууу, лол, трында в жизни поменялось, офк да.
Первые два квартала года и начало третьего активно сопровождались разработкой ЯМ либы и бота, учебой, прохождением всевозможных врачей. Попутно еще была работа
Январь:
- зарепортил баг с uri в tdesktop
- рассказал про Chatbase, DI, особенность ЯМ с XSS
- поделился тем, что накодили для vk coin'ов в 2019
- задумал написать сервис для отложки постов в тг
- продолжил воевать с администрацией УО что я не поеду на бесполезный конкурс
- узнал кто такая Аня
- окончательно переехал на хакинтош
- поигрался с каким-то интересным тестовым на джанго
- начал искать непризывное заболевание
- начал ежедневно делать физические упражнения пробуя привить себе привычку. Делал ежедневные отчеты в @MarshalR (r - reports, это сейчас он live 🙁 )
Февраль:
- осознал, что мне помимо армии грозит еще отработка после учебы и начал пытаться в Яндух попасть
- попытка найти новое место работы через хабр (Под капотом бота-клиента Яндекс.Музыки)
- Яндух отказал, не знаю что делать с распредом
- Яндух отказал в стажке. Сроки по распреду начали жать
- ищу хоть какую-нибудь компанию, что возьмёт меня по распреду
- начал серию постов про Python
Март:
- жопа по распреду, смотрю на все варианты
- переписал личный сайт на headless cms (gatsby)
- жирная серия обнов для ЯМ бота, чтобы сделать его более доступным и привлекательным для новых пользователей
- деанон профунктора
- невероятная история как я нашел себе распред в последний день сдачи вызова, о которой я не рассказал публично, лол 😄
- наконец-то задокал все классы ЯМ либы (докал с лета)
- opener (конкурс-марафон с задачками) напомнил о себе. Мысли про участие даже нет
Апрель:
- социальный мониторинг
- зумбот, модерация в маркетплейсе
- какого-то черта мы с тимой уже на 10 задаче opener'a
- вдохновился вирусологией
- переезд с фф на вивальди (теперь вновь на фф)
Май:
- инлайн в ЯМ и в целом улучшение бота во всем. Именно в мае он стал таким, какой есть сейчас
- где-то тут работа над дипломом, предзащита
- мы призёры Opener 2020!
- понакупал чутка рекламы для ЯМ бота перед защитой дипа (ям бот == дип)
Июнь:
- защита диплома и его получение
- проект по работе на новом для меня языке и технологиях (TypeScript + InversifyJS + Express + Firebase (cloud functions, firestore). Собсна на это и ушел весь месяц 😄
- текущий трек в инлайне ЯМ бота, баг ЯМ в поиске
- Opener 2020: Самый сок
- думаю о надобности дальнейшего поступления
Июль:
- инлайн в зум боте, дали красивую юзерку
- перешёл на споти, пока-пока ЯМ
- работал...
Август:
- поступил в ВУЗ
- начал играться с генерацией PDF’ок
- Беларусь
- в ночь с 30 на 31 решаю срочно покинуть страну
Сентябрь:
- занимаюсь доками, визой
- 9 числа я в Польше
- скитаюсь по лагерям
- ищу квартиру
Октябрь:
- переезжаю в Варшаву
- пишу про генерацию пдфок
- привыкаю к новой жизни, проблемы со сном
Ноябрь:
- 2фа в телеге
- восстанавливаюсь в работе
Декабрь:
- проявляю лютый интерес к групповым войс чатам в тг
- баг в звонилке unigram
- начинаю проекты связанные со звонками
- графана для ям и зум бота
Я точно знаю с чего начну свой 21й 😏
А теперь, Илюха, привет. Я знаю, что ты это перечитаешь только в декабре 21го года. Ты мне скажи, че по языкам? Польский выучил? А английский? Если даже не взялся, то ты балбес. Это тебя блочит. Ты ещё в Польше? Как там год прошел, доволен собой? Есть о чем рассказать хоть или совсем лень тебя погубила? В любом случае с НГ тебя. Может хоть 22й ты встретишь не в одиночестве. Не подведи, я же не просто так чем-то тут занимался...
Всех с наступающим, а кого-то уже с наступившим!
Сделайте свой следующий год ЛУЧШЕ, ЧЕМ ЭТОТ!!! ✨
Marshal's channel
Клуб анонимных Дедов Морозов/Тайных сант Давайте обмениваться подарками к Новому Году! Идея проста: регистрируемся указывая ФИО и адрес доставки, ждём жеребьёвки, отправляем подарок незнакомцу и получаем свой! Платформы для участия: - https://habra-adm.ru/…
Спасибо тебе, Санта из Швейцарии ❤️ сверху слева крышка от коробки 🤗
Всякие онлайн тесты
1. Тип личности
2. Психологический профиль
3. Тест на определение расстройства личности (там предупреждение не просто так 😒)
4. https://mycreativetype.com/ (на англе)
5. Тест Сонди
Мои результаты:
1. Делец, ESTP-A
2. Агрессивный реалист
3. Нарциссическое расстройство личности
4. “You are the Visionary”
5. Интерпретация
С первым тестом весьма согласен, а второй проходил два раза. При первом прохождении практически не читал вторые варианты ответов, если подходил первый. Оказалось, что второй может быть куда правильнее первого. Так при первом прохождении я вообще оказался модником с заниженной самооценкой 🤡 Второй конечно не радует зашкаливанием агрессивности, но это куда больше похоже на правду. Третий раз проходить вообще не вижу смысла. Ошибок при прохождении не допускал, но местами просто скользкое мнение
Может ещё что проходили? Кто готов поделиться своими результатами? 👉👈
Upd. Добавил и прошёл ещё 3 теста по вашим предложкам
1. Тип личности
2. Психологический профиль
3. Тест на определение расстройства личности (там предупреждение не просто так 😒)
4. https://mycreativetype.com/ (на англе)
5. Тест Сонди
Мои результаты:
1. Делец, ESTP-A
2. Агрессивный реалист
3. Нарциссическое расстройство личности
4. “You are the Visionary”
5. Интерпретация
С первым тестом весьма согласен, а второй проходил два раза. При первом прохождении практически не читал вторые варианты ответов, если подходил первый. Оказалось, что второй может быть куда правильнее первого. Так при первом прохождении я вообще оказался модником с заниженной самооценкой 🤡 Второй конечно не радует зашкаливанием агрессивности, но это куда больше похоже на правду. Третий раз проходить вообще не вижу смысла. Ошибок при прохождении не допускал, но местами просто скользкое мнение
Может ещё что проходили? Кто готов поделиться своими результатами? 👉👈
Upd. Добавил и прошёл ещё 3 теста по вашим предложкам
ГруппировОЧКА на БД или на клиенте?
Описание: имеется три таблицы (пользователь, приложение, ключ) в psql. Пользователь может иметь приложения, а ключи связывают приложения и пользователей.
User:
- id
- name
- email
Application:
- id
- title
Key:
- id
- User
- Application
Задача: получить список ключей для отправки писем на почту. Один пользователь должен получить одно письмо на приложение вне зависимости от количества ключей. Какой именно ключ из множества для конкретного пользователя и приложения мы получим не важно
Решение 1: получаем все ключи, заводим словарик, проходясь по каждому ключу генерируем уникальный ключ для словаря состоящий из ID пользователя и ID приложения, пихаем значения по ключу не заботясь было ли до этого какое-то или нет.
Результат: список значений словаря.
Решение 2: вспоминаем (в моем случае узнаём) про DISTINCT ON и скармливаем ему два поля: пользователь, приложение.
Результат: ответ от БД.
Можете не вдаваться в детали так как вопрос общий. А на чём бы вы основали своё решение в подобных задачах? На БД или на клиенте? Где бы вы предпочли группировать данные и почему? Вот это всякое про лёгкое масштабирование приложений и т.д.
P.S. Пересмотрев своё старое решение другой задачи я ужаснулся словарю в словаре, в котором список, а подумав о количестве данных и насчитав ~900 итераций в пике остался довольным, что написал это за минуту, а не колупался с SQL.
Описание: имеется три таблицы (пользователь, приложение, ключ) в psql. Пользователь может иметь приложения, а ключи связывают приложения и пользователей.
User:
- id
- name
Application:
- id
- title
Key:
- id
- User
- Application
Задача: получить список ключей для отправки писем на почту. Один пользователь должен получить одно письмо на приложение вне зависимости от количества ключей. Какой именно ключ из множества для конкретного пользователя и приложения мы получим не важно
Решение 1: получаем все ключи, заводим словарик, проходясь по каждому ключу генерируем уникальный ключ для словаря состоящий из ID пользователя и ID приложения, пихаем значения по ключу не заботясь было ли до этого какое-то или нет.
Результат: список значений словаря.
Решение 2: вспоминаем (в моем случае узнаём) про DISTINCT ON и скармливаем ему два поля: пользователь, приложение.
Результат: ответ от БД.
Можете не вдаваться в детали так как вопрос общий. А на чём бы вы основали своё решение в подобных задачах? На БД или на клиенте? Где бы вы предпочли группировать данные и почему? Вот это всякое про лёгкое масштабирование приложений и т.д.
P.S. Пересмотрев своё старое решение другой задачи я ужаснулся словарю в словаре, в котором список, а подумав о количестве данных и насчитав ~900 итераций в пике остался довольным, что написал это за минуту, а не колупался с SQL.
Дело сделано
Знаете принцип Парето? Тот, который про 80% результата за 20% усилий, а дальше что-то тяжко. Оставшиеся 80% усилий на 20% результата. Дык вот живой пример – разработка библиотеки.
Получить версию, на которой можно было создавать проекты не составило труда, а написать документацию, примеры, unit тесты, добавить все поля в модели заняло полтора года. По большей части конечно из-за того, что пропал интерес и развитие библиотеки стало рутиной.
Несмотря на отсутствие стабильной версии за всё время люди создали много прекрасных проектов. Некоторые использовали библиотеку (50 штук с открытым кодом на GitHub), некоторые брали за пример и работали с API на других ЯП. Так, например, был создан альтернативный клиент для android авто.
GitHub - yandex-music-api наконец-то достигла версии 1.0.0 с более чем 300 звездами 🎉
Развиваться есть куда!
- Асинхронная версия библиотеки.
- Модели с использованием pydantic.
- Интеграционные тесты.
Ваш вклад максимально приветствуется ✨
Знаете принцип Парето? Тот, который про 80% результата за 20% усилий, а дальше что-то тяжко. Оставшиеся 80% усилий на 20% результата. Дык вот живой пример – разработка библиотеки.
Получить версию, на которой можно было создавать проекты не составило труда, а написать документацию, примеры, unit тесты, добавить все поля в модели заняло полтора года. По большей части конечно из-за того, что пропал интерес и развитие библиотеки стало рутиной.
Несмотря на отсутствие стабильной версии за всё время люди создали много прекрасных проектов. Некоторые использовали библиотеку (50 штук с открытым кодом на GitHub), некоторые брали за пример и работали с API на других ЯП. Так, например, был создан альтернативный клиент для android авто.
GitHub - yandex-music-api наконец-то достигла версии 1.0.0 с более чем 300 звездами 🎉
Развиваться есть куда!
- Асинхронная версия библиотеки.
- Модели с использованием pydantic.
- Интеграционные тесты.
Ваш вклад максимально приветствуется ✨
Marshal's channel
Пока все хайпят на видеозвонках и анимированных аватарках в Telegram beta, давайте взглянем на PEP 622 от 23 числа (вчера)! Предлагается добавить операторы для реализации паттерна сопоставления с образцом. Необходимо это для того, чтобы упростить взаимодействие…
https://github.com/gvanrossum/patma. Там в readme ещё ссылка на форк CPython (Python 3.10) с полной реализацией
GitHub
GitHub - gvanrossum/patma: Pattern Matching
Pattern Matching. Contribute to gvanrossum/patma development by creating an account on GitHub.
Marshal's channel
Последние дни я активно изучаю Firebase, годная вещь. Отсюда и интерес к JS. Так вот, я уже записал какой-то войс на 10 мин, где пересказываю плейлист по Cloud Functions их и вот-вот накидаю init commit по работе в новый проект. Призываю всех вас посмотреть…
Cloud Firestore
Примитивная NoSQL база. Единственное её преимущество – это отсутствие надобности в разворачивании, масштабировании.
Она отстаёт во всём не давая ничего революционного. Просто живёт в экосистеме Google. Так, например, можно повесить Cloud Function-trigger, который будет обрабатывать какое-то действие в базе (удаление, добавление, изменение). И это жизненно необходимо!
Не стану вспоминать уж всё, с чем я столкнулся при работе с этой базой, но вот основные пункты, которые помню хорошо:
- отсутствуют агрегации. Приходится реализовывать подсчёт данных самостоятельно на триггерах. Так и советуют делать в официальной документации;
- до недавнего времени отсутствовал даже оператор != в where. Были доступны следующие базовые операторы: < <= == >= > array-contains array-contains-any;
- баги, из-за которых невозможны некоторые запросы (issues открыты на GitHab’e);
- локальный эмулятор базы спокойно живёт без индексов, когда после деплоя вдруг оказывается что нужно было завести индекс. Оно тебе сгенерирует ссылку для создания и поймет по каким полям, но это уже после того, как задеплоил. Без создания индекса запросы нельзя делать 🤷
Аннотаций там всего несколько. Из основных это DocumentId и ServerTimestamp. Остальные ~4 мне не пригодились. Там какой-то Exclude и PropertyName ещё есть…
Про Security Rules отдельная история. Там можно такое вытворять, что клиенты без backend’a могут общаться с базой для реализации какой-нибудь онлайн игры в шахматы. Самое интересное, что первый клиент не сможет читать/изменять данные (хода игрока, например) второго.
Надо отдать должное разработчикам. Проект развивается. Так, относительно недавно, завезли оператор !=, not-in (только вот они убили обратную совместимость. Чтобы обновиться, нужно перелопатить проект или сидите без новых операторов). Представляете какого жить без них?
Спасибо хоть за WriteBatch ✨
Примитивная NoSQL база. Единственное её преимущество – это отсутствие надобности в разворачивании, масштабировании.
Она отстаёт во всём не давая ничего революционного. Просто живёт в экосистеме Google. Так, например, можно повесить Cloud Function-trigger, который будет обрабатывать какое-то действие в базе (удаление, добавление, изменение). И это жизненно необходимо!
Не стану вспоминать уж всё, с чем я столкнулся при работе с этой базой, но вот основные пункты, которые помню хорошо:
- отсутствуют агрегации. Приходится реализовывать подсчёт данных самостоятельно на триггерах. Так и советуют делать в официальной документации;
- до недавнего времени отсутствовал даже оператор != в where. Были доступны следующие базовые операторы: < <= == >= > array-contains array-contains-any;
- баги, из-за которых невозможны некоторые запросы (issues открыты на GitHab’e);
- локальный эмулятор базы спокойно живёт без индексов, когда после деплоя вдруг оказывается что нужно было завести индекс. Оно тебе сгенерирует ссылку для создания и поймет по каким полям, но это уже после того, как задеплоил. Без создания индекса запросы нельзя делать 🤷
Аннотаций там всего несколько. Из основных это DocumentId и ServerTimestamp. Остальные ~4 мне не пригодились. Там какой-то Exclude и PropertyName ещё есть…
Про Security Rules отдельная история. Там можно такое вытворять, что клиенты без backend’a могут общаться с базой для реализации какой-нибудь онлайн игры в шахматы. Самое интересное, что первый клиент не сможет читать/изменять данные (хода игрока, например) второго.
Надо отдать должное разработчикам. Проект развивается. Так, относительно недавно, завезли оператор !=, not-in (только вот они убили обратную совместимость. Чтобы обновиться, нужно перелопатить проект или сидите без новых операторов). Представляете какого жить без них?
Спасибо хоть за WriteBatch ✨
Forwarded from яркие и красочные сны
CVE-2021-3177 Python 3.x through 3.9.1 has a buffer overflow in PyCArg_repr in _ctypes/callproc.c, which may lead to remote code execution in certain Python applications that accept floating-point numbers as untrusted input, as demonstrated by a 1e300 argument to c_double.from_param. This occurs because sprintf is used unsafely
>>> import ctypes
>>> x = ctypes.c_double.from_param(1e300)
>>> repr(x)
Segmentation fault
Clubhouse – разбор внутрянки
Популярный сервис для голосового общения в отдельных комнатах. Невероятно простое во всём. По своей реализации уступает даже войс чатам Telegram. Если вы думали, что приложение выглядит “бедно” и написали бы такое за пару недель, то сейчас ваша временна́я оценка упадет. Под капотом ещё всё проще!
Сервис состоит из 4 компонентов:
- приложение на iOS
- REST API
- сервер Agora
- сервер PubNub
Первые два пункта интуитивно понятны. Всё за Cloudflare, внутри API больше 100 методов от обновления имени аккаунта, до получения клуба и поиска пользователей.
Чего я правда не ожидал – это использование Agora. Я был в шоке от того, как хорошо Clubhouse держит нагрузку и в целом сделал такой стабильный RTC. Как оказалось, они просо использовали готовый PaaS. Подключили SDK и интегрировались со своим API.
Для интеграции с Agora генерируется RTC Token для каждого захода в комнату. Роли (спикер, слушатель) вшиты в токены. Поэтому при выдаче вам разрешения на высказаться у вас произойдет переподключение к комнате с новым токеном.
PubHub – платформа для realtime коммуникации. Взяли IaaS, заинтегрировались и работает на ура. Используется в комнатах для быстрого обновления новых участников, статусов микрофонов, перехода пользователей из одной роли в другую, поднятие рук и так далее.
Вот и всё приложение. Из интересного ещё можно добавить, что шифрование контролируется удалённо и включено далеко не всегда. MITM работает на ура. Любой аккаунт можно угнать перебрав четырехзначный код.
Библиотека на Python для работы с API: https://github.com/stypr/clubhouse-py (запросы через requests, отдаёт словарь из JSON’a). Есть интеграция с Agora. Можно передавать звук.
Аудит провёл специалист из Кореи: https://theori.io/research/korean/analyzing-clubhouse/
Популярный сервис для голосового общения в отдельных комнатах. Невероятно простое во всём. По своей реализации уступает даже войс чатам Telegram. Если вы думали, что приложение выглядит “бедно” и написали бы такое за пару недель, то сейчас ваша временна́я оценка упадет. Под капотом ещё всё проще!
Сервис состоит из 4 компонентов:
- приложение на iOS
- REST API
- сервер Agora
- сервер PubNub
Первые два пункта интуитивно понятны. Всё за Cloudflare, внутри API больше 100 методов от обновления имени аккаунта, до получения клуба и поиска пользователей.
Чего я правда не ожидал – это использование Agora. Я был в шоке от того, как хорошо Clubhouse держит нагрузку и в целом сделал такой стабильный RTC. Как оказалось, они просо использовали готовый PaaS. Подключили SDK и интегрировались со своим API.
Для интеграции с Agora генерируется RTC Token для каждого захода в комнату. Роли (спикер, слушатель) вшиты в токены. Поэтому при выдаче вам разрешения на высказаться у вас произойдет переподключение к комнате с новым токеном.
PubHub – платформа для realtime коммуникации. Взяли IaaS, заинтегрировались и работает на ура. Используется в комнатах для быстрого обновления новых участников, статусов микрофонов, перехода пользователей из одной роли в другую, поднятие рук и так далее.
Вот и всё приложение. Из интересного ещё можно добавить, что шифрование контролируется удалённо и включено далеко не всегда. MITM работает на ура. Любой аккаунт можно угнать перебрав четырехзначный код.
Библиотека на Python для работы с API: https://github.com/stypr/clubhouse-py (запросы через requests, отдаёт словарь из JSON’a). Есть интеграция с Agora. Можно передавать звук.
Аудит провёл специалист из Кореи: https://theori.io/research/korean/analyzing-clubhouse/