Pull to refresh
9
Анатолий Саблин@ma1uta

Java разработчик

1
Subscribers
Send message

Я же правильно понимаю, что клиент “Телега” нарушал законодательство, в том числе обходил блокировки Telegram со стороны РКН? Когда используешь обычный клиент Telegram, то трафик идёт через РКН, который его блокирует, дальше на сервера Telegram. А когда используешь клиент “Телеги”, то трафик идёт на сервера “Телеги”, а дальше в обход РКН до серверов Telegram?

Также нет доступа к серверам следующих игр:

  • Elite: Dangerous

  • Warhammer40k: DarkTide

  • … и ещё куча других игр

Но на них всем плевать.

Ждём плашку от НЛО про содержимое статьи, которое может вызывать противоречивые чувства.

Два вопроса:

  • зачем прикладывать код в виде картинок?

  • что случилось с картинками, как будто их пожали в 20 шакалов?

С историей будут проблемы, хранить на мобильном клиенте не получится, она слишком быстро (2-3 года активной переписки) займёт всё свободное место. Нет варианта часть истории скидывать в архив?

Если вы используете тонкий сервер, который можно просто назвать relay-сервером, то как реализована подгрузка медиа-контента, чтобы ip-адреса не утекали? То есть, обычно сервер идёт за картинкой, скачивает и хранит у себя. Клиент никуда кроме сервера не ходит, поэтому он тянет картинку только со своего сервера. Не будет же клиент идти в обход сервера напрямую по адресу картинки, так как это утечка ip-адреса пользователя?

Да и relay-сервера видят ip-адреса пользователей. Можно выбрать relay-сервер, к которому подключаться, чтобы цепляться только к доверенным серверам?

Как сервера друг друга находят? Как работает маршрутизация, если Alice подключилась к relay1, а Bob к relay2, и Alice хочет отправить сообщение Bob-у?

  • То есть переустановка - это потеря аккаунта, доступ к нему больше не вернуть, только создавать новый?

  • Как искать других пользователей?

  • И утеря аккаунта - утеря истории?

  • Как подтверждать пользователей, то есть подтвердить, что за данным UIN-ов нужный человек (например, чтобы его добавить в закрытую группу)?

  • Как бороться с ботами и спамом, когда в открытую группу заходит кто угодно и может постить что угодно (включая запрещённую информацию)?

  • Если нужна максимальная анонимность и полноценный peer-to-peer, то смотрели в сторону Tox и Briar?

Почему решили делать своё решение? И в чём ваш протокол лучше чем matrix и xmpp?

И вопросы:

  • где s2s спецификация?

  • не увидел поддержки нескольких устройств, она есть?

  • почему сделали свою аутентификацию, а не взяли OIDC?

  • не увидел ролевой модели в чатах (админ/модератор/пользователь), она присутствует?

  • почему в спеке поддержка только одного эфемерного ключа, а не нескольких?

Если злоумышленник скомпрометировал клиентскую машину, то ни Kerberos, ни OIDC, ни SAML2.0 не помогут, они не предусматривают защиту от подобного вида атак. Тем более наличие прав администратора. Можно залезть в кэш браузера пользователя и оттуда вытащить все токены.

TGT живёт очень долго, service ticket имеют сильно меньший срок жизни, есть возможность повесить 2FA на выдачу service ticket, чтобы пользователь во-первых видел, куда идёт доступ, а во-вторых имел возможность подтвердить или отклонить доступ.


В таком случае получим, что даже при компрометации TGT злоумышленник не сможет получить доступ к сервисам, пользователь будет видеть странные запросы на доступ, куда не заходит, и отклонять их.

В Kotlin data-классы:

data class User(val id: Long, val name: String, val email: String)

В Java record-классы:

public record User(Long id, String name, String email) {}


Совместимость ломается в непредсказуемых местах. Пример: https://github.com/spotbugs/spotbugs-gradle-plugin/issues/972 - в плагине spotbugs есть два enum-а Effort и Confidence. Они лежат рядом, но после переписывания плагина на kotlin один enum недоступен, то есть вот такой конфиг:

spotbugs {
   ...
    effort =  com.github.spotbugs.snom.Effort.DEFAULT
    reportLevel = com.github.spotbugs.snom.Confidence.DEFAULT
   ...
}

приводит к ошибке на старте gradle: Cannot set the value of extension 'spotbugs' property 'reportLevel' of type com.github.spotbugs.snom.Confidence using an instance of type java.lang.Class

Приходится изгаляться через костыли:

spotbugs {
   ...
    effort =  com.github.spotbugs.snom.Effort.DEFAULT
    reportLevel = com.github.spotbugs.snom.Confidence.values()[0]
   ...
}


null-safety?

Ловим NPE в непредсказуемых местах из-за оператора !!, который любят ставить kotlin-разработчики. Или из-за библиотек на java, которые вернули внезапно null. А как вы выполняете проверку на null при переходе от nullable к nonnull?


Поддержка IDE?

И ооооооочень долгая компиляция kotlin-программы. В итоге переключение между ветками превращается в ад, когда успеваешь сходить заварить, чай, подождать когда он остынет, выпить, а компиляция ещё идёт. Именно поэтому так носятся с новым компилятором K2, одной из фич которой является более быстрая компиляция.

А на Хабре есть правило, чтобы перед публикацией статьи, автор должен прочитать минимум один раз то, что сгенерировала нейронка?

Уже очень давно сделали https://www.oversec.io/, который позволяет пересылать текст с шифрованием eye-to-eye.

9.Парадок нагрузки

Хабр утонул в низкокачественных нейрогаллюцинациях, которые авторы даже не читают перед публикацией.

Спасибо, это я знаю. Вопрос к автору статьи, зачем он предлагает в обучающем материале сделать Entity с помощью data-класса?

Расскажите, пожалуйста, почему не стоит Entity делать как data-классы?

Camunda:

  • Использует BPMN.

  • Сделана в классической клиент-серверной модели, где клиенты дёргают несколько серверов, выполняющих бизнес-процессы.

  • Ориентирована больше на условно не-IT специалистов, можно bpmn посмотреть в UI, ручками накидать процесс. Хотя кто этим занимается?

Temporal:

  • Не использует BPMN (никакого xml).

  • Построена на базе event-sourcing и горизонтального масштабирования (worker-ы можно добавлять в неограниченных количествах)

  • Больше ориентирована на разработчиков (вот вам grpc api, вот вам исходники - развлекайтесь), тут в основе код, а не диаграмма bpmn.

Виртуализация реализуется на нескольких уровнях. И каждый уровень имеет своё применение.

Виртуализация на уровне ОС - для ЦОД-ов и для поддержки других архитектур (например, надо запустить windows приложение на linux серверах и т. д.).

Виртуализация в рамках одной ОС (известна как контейнеризация) - для запуска отдельных сервисов. Это ещё на OpenVMS на железках DEC VAX делали. Потом появились Solaris Zones, FreeBSD Jail, на linux-ах это развилось в LXC, Docker, OCI/runC/containerd. И даже на linux-ах ушли от vendor lockin-а (kubernetes уже давно может запускать всё через CRI-O, где нет никакого docker-а).

Виртуализация на уровне отдельного приложение - тут flatpak, snap, bubblewrap, Citrix XenApp, которые позволяют запустить десктопное приложение в изолированной песочнице.

Виртуализация на уровне одного приложения - когда изоляция выполняется в рамках одного приложения для различных модулей. Из ярких представителей - это java application servers (WebSphere, WebLogic, Wildfly и другие).

Скорее наоборот, судя по остальным статьям, автор не один десяток лет жил в экосистеме IBM, поэтому все рассматривает исключтельно в сфере "В IBM сделали всё хорошо, а все остальные ещё доросли". Отсюда статьи подобного рода.

Information

Rating
6,229-th
Location
Россия
Registered
Activity

Specialization

Бэкенд разработчик
Старший
Git
PostgreSQL
Java
Spring Boot
Java Spring Framework
ООП
Linux
Kubernetes