Полезная утилита для Debian/Ubuntu
Недавно открыл для себя утилиту управлениям репозиториями extrepo. С её помощью можно легко находить и подключать дополнительные репозитории. Что-то вроде add-apt-repository из Ubuntu, но больше ориентирована на встроенный список репозиториев.
Использованием очень простое. Найти репозиторий:
Вывод будет примерно таким:
Далее подключаем репозиторий:
Ну и далее всё как обычно)
Настройки утилиты расположены в /etc/extrepo/config.yaml. Из ценного там есть возможность включить поддержку репозиториев с non-DFSG лицензиями.
Недавно открыл для себя утилиту управлениям репозиториями extrepo. С её помощью можно легко находить и подключать дополнительные репозитории. Что-то вроде add-apt-repository из Ubuntu, но больше ориентирована на встроенный список репозиториев.
Использованием очень простое. Найти репозиторий:
extrepo search wine
Вывод будет примерно таким:
Found winehq:
---
description: WineHQ packages
gpg-key-checksum:
sha256: 012326dba01e3853f262af95b840d8e3539a23ede80be2e82f30a721d4678e26
gpg-key-file: winehq.asc
policy: main
source:
Architectures: amd64 i386
Components: main
Suites: trixie
Types: deb deb-src
URIs: https://dl.winehq.org/wine-builds/debian
Далее подключаем репозиторий:
extrepo enable winehq
Ну и далее всё как обычно)
Настройки утилиты расположены в /etc/extrepo/config.yaml. Из ценного там есть возможность включить поддержку репозиториев с non-DFSG лицензиями.
👍1
Про нейросети
Многие мои коллеги используют Cursor IDE или подключают Copilot, DeepSeek или что-то ещё. Я вобщем-то тоже не остался в стороне. У меня есть и зарубежные карты и зарубежные сервера, но мне немного лениво постоянно с этим заморачиваться, поэтому я в итоге начал использовать отечественные продукты, хотя они и не такие мощные как "зарубежные аналоги".
Я попробовал sourcecraft-ассистента от Яндекс, но он там существует как дополнение к платформе sourcecraft.dev и я так и не нашёл способа докупить токены без покупки других ресурсов на платформе.
В итоге я использую VSCode с плагином GigaChat от Сбера. Интересно что PHP-код он подсказывает гораздо лучше sourcecraft. Для борьбы с галлюцинациями хорошо помогают нормальные LSP: для PHP использую intelephense, для Perl - Perl::LanguageServer, для Go - gopls (а есть альтернативы?)).
Всё жду когда за Gigachat начнут брать деньги, но платить скорее всего буду. Собственный мозг не заменяет, но работу упрощает и ускоряет. А ещё многие картинки в этом канале сгенерированы ботом @gigachat_bot.
А вы пользуетесь нейросетями в своей работе? Какими и для каких сценариев?
Многие мои коллеги используют Cursor IDE или подключают Copilot, DeepSeek или что-то ещё. Я вобщем-то тоже не остался в стороне. У меня есть и зарубежные карты и зарубежные сервера, но мне немного лениво постоянно с этим заморачиваться, поэтому я в итоге начал использовать отечественные продукты, хотя они и не такие мощные как "зарубежные аналоги".
Я попробовал sourcecraft-ассистента от Яндекс, но он там существует как дополнение к платформе sourcecraft.dev и я так и не нашёл способа докупить токены без покупки других ресурсов на платформе.
В итоге я использую VSCode с плагином GigaChat от Сбера. Интересно что PHP-код он подсказывает гораздо лучше sourcecraft. Для борьбы с галлюцинациями хорошо помогают нормальные LSP: для PHP использую intelephense, для Perl - Perl::LanguageServer, для Go - gopls (а есть альтернативы?)).
Всё жду когда за Gigachat начнут брать деньги, но платить скорее всего буду. Собственный мозг не заменяет, но работу упрощает и ускоряет. А ещё многие картинки в этом канале сгенерированы ботом @gigachat_bot.
А вы пользуетесь нейросетями в своей работе? Какими и для каких сценариев?
Копировал файл на сервер по scp и получил сообщение:
Это что-то новое)
** WARNING: connection is not using a post-quantum key exchange algorithm.
** This session may be vulnerable to "store now, decrypt later" attacks.
** The server may need to be upgraded. See https://openssh.com/pq.html
Это что-то новое)
Несколько лет назад довелось заполнять декларацию 3-НДФЛ. Пришлось использовать специальное приложение "Декларация 2023", которое было только под Windows. К счастью оно нормально запускалось под Wine.
Сегодня обнаружил что есть новая версия этого приложения под названием "Декларация 2025" (да, нейминг и версионирование у них довольно простые), которая существует в том числе и в версии для Linux.
Беглое изучения содержимого deb-пакета показало что:
1. Используется фреймворк SkiaSharp и значит скорее всего приложение написано на .NET.
2. При установке пакета запускается скрипт, который перебирая директории в /home пытается всем пользователям создать по ярлыку на рабочем столе, проворачивая при этом на детородном органе и спецификации XDG и возможность иметь домашний каталог не в /home.
3. В окружении wayland на HiDPI-мониторе интерфейс не масштабируется и выглядит очень мелким.
4. RPM-пакета нет. Кому надо - alien вам в руки.
Ну и исходники по традиции нам не положили. Так же нет и описания схемы XML-документа, который эта штука генерирует. Так что написать своё такое же но другое приложение будет затруднительно.
Но в любом случае это огромный шаг вперёд, который можно только приветствовать.
P.S. Ссылку не даю чтобы не обвинили в ангажированности. Кому надо найдёт сам легко и быстро.
Сегодня обнаружил что есть новая версия этого приложения под названием "Декларация 2025" (да, нейминг и версионирование у них довольно простые), которая существует в том числе и в версии для Linux.
Беглое изучения содержимого deb-пакета показало что:
1. Используется фреймворк SkiaSharp и значит скорее всего приложение написано на .NET.
2. При установке пакета запускается скрипт, который перебирая директории в /home пытается всем пользователям создать по ярлыку на рабочем столе, проворачивая при этом на детородном органе и спецификации XDG и возможность иметь домашний каталог не в /home.
3. В окружении wayland на HiDPI-мониторе интерфейс не масштабируется и выглядит очень мелким.
4. RPM-пакета нет. Кому надо - alien вам в руки.
Ну и исходники по традиции нам не положили. Так же нет и описания схемы XML-документа, который эта штука генерирует. Так что написать своё такое же но другое приложение будет затруднительно.
Но в любом случае это огромный шаг вперёд, который можно только приветствовать.
P.S. Ссылку не даю чтобы не обвинили в ангажированности. Кому надо найдёт сам легко и быстро.
Два года назад, в декабре 2023, купил себе ноутбук Digma Pro Magnus M. Машинка для работы даже сейчас выглядит неплохо: 16.1" экран с разрешением 2K, 16GB памяти (почти сразу заменил на 32GB) и 512GB NVMe (сейчас 1TB NVMe + 1TB mSATA) и процессор Ryzen 9 5900HX.
В последнее время стал без всякого повода запускать вентиляторы на полную мощность. Мне это надоело и сегодня ночью я полез решать эту проблему. За два года работы в основном у меня на столе этот девайс двумя вентиляторами всосал столько пыли, сколько не всасывал ни один предыдущий ноутбук. Оба вентилятора были забиты полностью и потому ничего не охлаждали. Минут сорок потратил на чистку системы охлаждения.
Но систему охлаждения хотя бы можно почистить. Гораздо большей печалью оказался заметно вздувшийся аккумулятор. В итоге нашёл в китае и заказал. Срок доставки - месяц. Надеюсь за это время ничего больше не случится.
ЧСХ до этого был HP Probook G6 430, который сначала три года проработал у меня, а потом отправился служить моей жене. Пыли до сих пор столько не набрал и аккумулятор хоть и утратил часть ёмкости но как минимум не вздулся.
Вобщем пока я малость разочарован "отечественным" производителем.
В последнее время стал без всякого повода запускать вентиляторы на полную мощность. Мне это надоело и сегодня ночью я полез решать эту проблему. За два года работы в основном у меня на столе этот девайс двумя вентиляторами всосал столько пыли, сколько не всасывал ни один предыдущий ноутбук. Оба вентилятора были забиты полностью и потому ничего не охлаждали. Минут сорок потратил на чистку системы охлаждения.
Но систему охлаждения хотя бы можно почистить. Гораздо большей печалью оказался заметно вздувшийся аккумулятор. В итоге нашёл в китае и заказал. Срок доставки - месяц. Надеюсь за это время ничего больше не случится.
ЧСХ до этого был HP Probook G6 430, который сначала три года проработал у меня, а потом отправился служить моей жене. Пыли до сих пор столько не набрал и аккумулятор хоть и утратил часть ёмкости но как минимум не вздулся.
Вобщем пока я малость разочарован "отечественным" производителем.
Обнаружил в Debian интересное. С первого февраля apt не доверяет sha1-подписям. Но многие репозитории до сих пор используют sha1-подпись и при использовании apt такие репозитории игнорируются. Однако Discover из состава KDE абсолютно ничего не смущает и он вполне успешно использует репозитории с устаревшей подписью.
Отдельно интересен список репозиториев использующих устаревший алгоритм подписи. Среди них официальные репозитории Microsoft, Softmaker, Sublimetext, Яндекс, Окуляр-ГОСТ, DBeaver и многие другие. Т.е. в основном те, от кого меньше всего ждёшь такого спокойного отношения к безопасности.
Отдельно интересен список репозиториев использующих устаревший алгоритм подписи. Среди них официальные репозитории Microsoft, Softmaker, Sublimetext, Яндекс, Окуляр-ГОСТ, DBeaver и многие другие. Т.е. в основном те, от кого меньше всего ждёшь такого спокойного отношения к безопасности.
Тут обнаружилось что пересланые в Max фоточки доступны по прямым ссылкам всем желающим. Пресс-служба мессенджера отбрехивается в духе "вывсёврёти". Защитники мессенджера настаивают что перебор всех вариантов слишком сложен и потому найти что-то затруднительно.
Я проверил и действительно можно достать прямую ссылку на картинку и картинка по ней доступна. Про возможность перебора ничего пока говорить не готов. Мне это не очень интересно.
Интересно другое: эдак ведь можно использовать Max как CDN: слать картинки друг другу и потом доставать на них ссылки и использовать. Не так удобно как в каком-то S3-совместимом хранилище, но зато бесплатно)
Ну и боюсь что всякие сумрачные люди уже продумывают схемы с использованием этой истории. Ведь мы по сути получаем хранилище, которое доступно дажена парковке во время ограничений интернета (через белые списки).
Я проверил и действительно можно достать прямую ссылку на картинку и картинка по ней доступна. Про возможность перебора ничего пока говорить не готов. Мне это не очень интересно.
Интересно другое: эдак ведь можно использовать Max как CDN: слать картинки друг другу и потом доставать на них ссылки и использовать. Не так удобно как в каком-то S3-совместимом хранилище, но зато бесплатно)
Ну и боюсь что всякие сумрачные люди уже продумывают схемы с использованием этой истории. Ведь мы по сути получаем хранилище, которое доступно даже
К - Костыль
Reg.Ru рассылает своим клиентам письма с уведомлением о том что GlobalSign теперь выпускает сертификаты не на 365 дней, а на 199. И потому при оплате за год будут выпускаться два сертификата: первый на 199 дней, и второй ещё на 166 после окончания основного. Выглядит жутко.
По-моему это скрытая реклама letsencrypt)
Reg.Ru рассылает своим клиентам письма с уведомлением о том что GlobalSign теперь выпускает сертификаты не на 365 дней, а на 199. И потому при оплате за год будут выпускаться два сертификата: первый на 199 дней, и второй ещё на 166 после окончания основного. Выглядит жутко.
По-моему это скрытая реклама letsencrypt)
Yellow Leaf
Тут обнаружилось что пересланые в Max фоточки доступны по прямым ссылкам всем желающим. Пресс-служба мессенджера отбрехивается в духе "вывсёврёти". Защитники мессенджера настаивают что перебор всех вариантов слишком сложен и потому найти что-то затруднительно.…
Попробовал передавать через Max файлы вместо картинок.
Плохая новость: файлы доступны по прямой ссылке вида:
https://fd.oneme.ru/getfile?sig=....&expires=1773273131002&clientType=6&id=351856972&userId=5179147
Хорошая: есть защита от перебора. При попытке перебирать идентификаторы получаем ошибку "invalid signature".
Но в любом случае получается есть возможность сформировать ссылку на какой-то зловред, которая будет открываться всегда. А доставлять её можно например в СМС. Ну или ещё как. Что очень и очень плохо.
Плохая новость: файлы доступны по прямой ссылке вида:
https://fd.oneme.ru/getfile?sig=....&expires=1773273131002&clientType=6&id=351856972&userId=5179147
Хорошая: есть защита от перебора. При попытке перебирать идентификаторы получаем ошибку "invalid signature".
Но в любом случае получается есть возможность сформировать ссылку на какой-то зловред, которая будет открываться всегда. А доставлять её можно например в СМС. Ну или ещё как. Что очень и очень плохо.
Кейс с картинками в Max показал что не все разработчики знают как защищать картинки и прочие файлы от не санкционированного доступа в веб.
Тот же Telegram в веб-версии использует ссылки вида https://web.telegram.org/some-key и даже не смотря на статичность этого some-key доступ имеют только те кто должен его иметь. Сделать это можно по разному. Мне нравится вариант на базе nginx. Делается это примерно так:
1. Описываем именованный location с типом internal (доступ к таким location снаружи закрыт) примерно так:
Далее описываем основной location и правила рерайта в нём:
PHP использовать не обязательно. Обработчик можно написать на чём угодно. Важно чтобы этот обрабтчик:
1. Находил по ключу в БД путь к файлу
2. Смотрел права доступа на файл в БД
3. Проверял имеет ли запрашивающий файл пользователь достаточно прав (на основе cookie и/или заголовков)
4.1 При отсутствии разрешения отдавал ошибку 403
4.2 При наличии разрешения отдавал заголовок:
Здесь используется фича прокси-модуля в nginx: заголовок X-Accel-Redirect не отправляется клиенту, а указывает серверу что отправить клиенту в качестве ответа.
Таким образом запрашивая ссылку https://your.domain/files/somekey пользователь либо получит ошибку 403, либо получит файл. При этом реальное местоположение файла раскрыто не будет и доступа по прямой ссылке не будет.
P.S. Если будет интересно расскажу как в таких системах реализуется загрузка файла и что делать если веб-приложение работает на одном домене, а хранилище файлов находится на другом.
Тот же Telegram в веб-версии использует ссылки вида https://web.telegram.org/some-key и даже не смотря на статичность этого some-key доступ имеют только те кто должен его иметь. Сделать это можно по разному. Мне нравится вариант на базе nginx. Делается это примерно так:
1. Описываем именованный location с типом internal (доступ к таким location снаружи закрыт) примерно так:
location @private {
internal;
root /var/www/private;
}Далее описываем основной location и правила рерайта в нём:
location / {
root /var/www/public;
rewrite ^/files/(.*) /getfile.php?key=$1 last;
}PHP использовать не обязательно. Обработчик можно написать на чём угодно. Важно чтобы этот обрабтчик:
1. Находил по ключу в БД путь к файлу
2. Смотрел права доступа на файл в БД
3. Проверял имеет ли запрашивающий файл пользователь достаточно прав (на основе cookie и/или заголовков)
4.1 При отсутствии разрешения отдавал ошибку 403
4.2 При наличии разрешения отдавал заголовок:
X-Accel-Redirect: @private/path/to/file
Здесь используется фича прокси-модуля в nginx: заголовок X-Accel-Redirect не отправляется клиенту, а указывает серверу что отправить клиенту в качестве ответа.
Таким образом запрашивая ссылку https://your.domain/files/somekey пользователь либо получит ошибку 403, либо получит файл. При этом реальное местоположение файла раскрыто не будет и доступа по прямой ссылке не будет.
P.S. Если будет интересно расскажу как в таких системах реализуется загрузка файла и что делать если веб-приложение работает на одном домене, а хранилище файлов находится на другом.
👍1
По работе продираюсь через бот-API национального мессенджера. Уже завалил босса получил токен. Делюсь опытом.
1. Регистрируемся на платформе МСП
2. Указываем данные юрлица. Минимум ИП. Самозанятые - мимо.
3. Подтверждаем данные через госуслуги или один из банков на выбор. Выбор банков ограничен Сбером, Альфой и Т-Банком.
4. После подтверждения юрлица подаём заявку на создание бота
5. После ручной модерации ВОЗМОЖНО бот будет создан
6. В случае успеха на предыдщуем пункте получаем токен и приступаем к разработке.
Чтобы нам было веселее:
- Документация весьма поверхностная. К счастью есть готовые библиотеки для Typescript и Go. На последнем я как раз и пишу бота.
- Подтверждение юрлица: после регистрации на платформе надо перейти на госуслуги по ссылке с платформы и зайти с правами генерального директора. Никак иначе. Варианта отправить запрос на госуслуги чтобы гендир его там принял и подтвердил - нет. Поэтому пришлось согласовывать время и в четыре руки проходить авторизацию.
- Постоянно натыкаешься на сообщения "будет реализовано позже". Даже URL slug у бота нельзя задать.
P.S. Прошу прощения за обилие постов про национальный мессенджер. Просто последнее время на работе занимаюсь в основном им.
1. Регистрируемся на платформе МСП
2. Указываем данные юрлица. Минимум ИП. Самозанятые - мимо.
3. Подтверждаем данные через госуслуги или один из банков на выбор. Выбор банков ограничен Сбером, Альфой и Т-Банком.
4. После подтверждения юрлица подаём заявку на создание бота
5. После ручной модерации ВОЗМОЖНО бот будет создан
6. В случае успеха на предыдщуем пункте получаем токен и приступаем к разработке.
Чтобы нам было веселее:
- Документация весьма поверхностная. К счастью есть готовые библиотеки для Typescript и Go. На последнем я как раз и пишу бота.
- Подтверждение юрлица: после регистрации на платформе надо перейти на госуслуги по ссылке с платформы и зайти с правами генерального директора. Никак иначе. Варианта отправить запрос на госуслуги чтобы гендир его там принял и подтвердил - нет. Поэтому пришлось согласовывать время и в четыре руки проходить авторизацию.
- Постоянно натыкаешься на сообщения "будет реализовано позже". Даже URL slug у бота нельзя задать.
P.S. Прошу прощения за обилие постов про национальный мессенджер. Просто последнее время на работе занимаюсь в основном им.
👍1👌1
Оффтоп
Знаю многих людей, которые время от времени что-то покупают на вторичном рынке. Сам тоже отношусь к ним. Вобщем-то это здорово когда какая-то вещь получает вторую жизнь.
Но время от времени сталкиваюсь с людьми, которые делают покупки на вторичном рынке смыслом жизни. Ну и пусть. У каждого свои развлечения и увлечения. Но некоторые становятся настоящими воинами и идут в бой, убеждая других что только так и надо жить.
Когда покупаешь что-то новое эти персонажи начинают тебя убеждать что ты совершил глупость, заплатив втридорога, когда мог купить гораздо дешевле на вторичке. По их мнению подержанная иномарка обязательно лучше новой отечественной, подержанный макбук лучше нового от условного Dexp и т.д. и т.п.
И вот недавно я вдруг понял: вот этим своим походом против новых вещей эти люди буквально мочатся против ветра, ведь чтобы они могли покупать что либо на вторичном рынке, кто-то должен покупать новые вещи.
И чё-т так грустно стало. Не знаю почему. Возможно потому что я опять разочаровался в умственных способностях большого количества людей.
Знаю многих людей, которые время от времени что-то покупают на вторичном рынке. Сам тоже отношусь к ним. Вобщем-то это здорово когда какая-то вещь получает вторую жизнь.
Но время от времени сталкиваюсь с людьми, которые делают покупки на вторичном рынке смыслом жизни. Ну и пусть. У каждого свои развлечения и увлечения. Но некоторые становятся настоящими воинами и идут в бой, убеждая других что только так и надо жить.
Когда покупаешь что-то новое эти персонажи начинают тебя убеждать что ты совершил глупость, заплатив втридорога, когда мог купить гораздо дешевле на вторичке. По их мнению подержанная иномарка обязательно лучше новой отечественной, подержанный макбук лучше нового от условного Dexp и т.д. и т.п.
И вот недавно я вдруг понял: вот этим своим походом против новых вещей эти люди буквально мочатся против ветра, ведь чтобы они могли покупать что либо на вторичном рынке, кто-то должен покупать новые вещи.
И чё-т так грустно стало. Не знаю почему. Возможно потому что я опять разочаровался в умственных способностях большого количества людей.
😁1
Есть API, написанное на PHP и отдающее ответы в JSON. Есть клиент, написанный на Go. Время от времени клиент давится ответом. В лог падает такое:
Изучение показало что проблема в типизации PHP. Вернее в практически полном её отсутствии. Функция json_encode в отсутствии строгой типизации пытается "думать на ходу", в итоге если строковое поле содержит только цифры - кодирует его как int, а если не только - то как строку.
При этом клиентская библиотека на том же PHP не видит никаких проблем и прожёвывает ответ. А вот Go с его строгой типизацией давится. Ищу решение.
json: cannot unmarshal number into Go struct field .data.attributes.code of type string
Изучение показало что проблема в типизации PHP. Вернее в практически полном её отсутствии. Функция json_encode в отсутствии строгой типизации пытается "думать на ходу", в итоге если строковое поле содержит только цифры - кодирует его как int, а если не только - то как строку.
При этом клиентская библиотека на том же PHP не видит никаких проблем и прожёвывает ответ. А вот Go с его строгой типизацией давится. Ищу решение.
Забавно что в PHP 8 (а может и 7) можно нормально генерировать json. И способ даже чем-то похож на Go)
Примерно так:
Но почему-то таким путём идут далеко не все, предпочитая что-то такое:
Примерно так:
<?php
class MyClass {
public string $strVal = "";
}
$obj = new('MyClass');
$obj->strVal = "789";
print json_encode($obj);
Но почему-то таким путём идут далеко не все, предпочитая что-то такое:
<?php
print json_encode([ "strVal" => "789" ]);
В национальном мессенджере появился бот @id1658140062_bot, которому кидаешь адрес, а он возвращает ссылку на домовой чат.
Имеешь ли ты какое-то отношение к этому дому - никак не проверяется.
Представляю какие возможности для спамеров и прочих мошенников открывает этот бот.
Методом тыка обнаружил одно ограничение: с казанского IP бот выдаёт только ссылки на казанские чаты. Если у меня есть жильё в другом городе то похоже чтобы найти чат надо ехать в тот город и оттуда запускать бота)
Чатов частных домов к счастью (или к сожалению) там нет)
Имеешь ли ты какое-то отношение к этому дому - никак не проверяется.
Представляю какие возможности для спамеров и прочих мошенников открывает этот бот.
Методом тыка обнаружил одно ограничение: с казанского IP бот выдаёт только ссылки на казанские чаты. Если у меня есть жильё в другом городе то похоже чтобы найти чат надо ехать в тот город и оттуда запускать бота)
Чатов частных домов к счастью (или к сожалению) там нет)
Яндекс выпустил приложение Интернетометр для измерения скорости интернета на смартфонах с Android. В отличие от конкурентов приложение Яндекса не позволяет выбрать точку, до которой измеряется скорость. Тестирование всегда происходит до серверов Яндекса, которые входят в "белые списки" и работают даже при ограничениях интернета.
У нас в Татарстане во время ограничений сервисы не из "белого списка" продолжают работать, но скорость ограничивается до ~250kbit/s. В итоге хоть и со скрипом, но пользоваться можно.
Вчера немного проехался по Татарстану, Марий Эл и Чувашии и посмотрел как в реальности работают эти самые белые списки в других регионах. Теперь знаю что, например, приложение Ак-Барс банка не входит в "белые списки". Но зато Яндекс Интернетометр всю дорогу убеждал меня что у меня "Отличный интернет" и "Можно комфортно смотреть видео в 2K/4K".
У нас в Татарстане во время ограничений сервисы не из "белого списка" продолжают работать, но скорость ограничивается до ~250kbit/s. В итоге хоть и со скрипом, но пользоваться можно.
Вчера немного проехался по Татарстану, Марий Эл и Чувашии и посмотрел как в реальности работают эти самые белые списки в других регионах. Теперь знаю что, например, приложение Ак-Барс банка не входит в "белые списки". Но зато Яндекс Интернетометр всю дорогу убеждал меня что у меня "Отличный интернет" и "Можно комфортно смотреть видео в 2K/4K".
Немного новостей: "Qt Book Reader 0.1.0". Подробнее: https://www.ylsoftware.com/news/773
Коды подтверждения в Max: они приходят и как будто это хорошо. Но в настольном приложении при нажатии на кнопку "Просмотреть код" получаем сообщение о возможности получения кода только в мобильном приложении. Ровно такая же история в веб-версии.
Сейчас по работе начинаем работу над мини приложением для Max и подозреваю что и там мне будет о чём рассказать.
Сейчас по работе начинаем работу над мини приложением для Max и подозреваю что и там мне будет о чём рассказать.
👌1