async / noway — Будни разработчика


Channel's geo and language: Russia, Russian
Category: Technologies


Персональное уютное сообщество обычного .NET разработчика
Чат: https://t.me/+plVoiwLw7tZlY2Qy

Related channels  |  Similar channels

Channel's geo and language
Russia, Russian
Statistics
Posts filter


Как же за*#ло… Эта срань под именем МТС просто не работает. Каждый день (ну или почти каждый) мобильного интернета нет и только белые списки. И можно было бы сказать, ну меры такие, что поделать, но они как-то умудряются отрубать интернет раньше (на несколько часов) до всяких уведомлений о тревогах, а когда приходит официальный отбой угроз - интернет как-то не включают обратно. И техподдержка руками разводит. Интернета нет, но вы держитесь. Или вот Вам предложение о безлимитном интернет тарифе, когда вы жалуетесь что интернета нет.


Низкий поклон РКН за выкинутые выходные. Ну, знаете, это чувство, как вы ждете с нетерпением выходных, чтобы спокойно помониторить что и как их ТСПУ определяет, что блокирует, чтобы починить то, что стабильно работало больше года? Ну вот и не советую знать, если честно.

В какой-то момент мой сервак сдох – VLESS + Reality, TCP. Причем не просто упал ВПН, или его стали детектить, а просто заблокировали адрес IP. что даже пропинговать нельзя. И естественно, что из под ВПН или не из РФ все прекрасно работает.
Ну что ж, можно перенести конфигурацию на новый сервер, поменять IP в настройках и пользовать дальше. Просидел все выходные с новым сервером, брал в Melbicom – не работает. Пробовал накрутить, добавил xHttp, менял SNI, маскировал через домен и NS записи Cloudflare, попробовал Hysteria – ничего не помогает, соединение устанавливается, но пакеты не доходят. Купил еще один сервак в Oneprovider, вдруг дело в нем.
Завелось все с самой первой / старой конфигурации. Обидно за потраченное в пустую время, купи сразу этот сервак все бы работало уже сразу, а не спустя несколько вечеров в обнимку с клодом и его ответами в стиле "Это не совпадение, а закономерность".
И досадно, что заранее не узнать, получится ли на данном VPS поднять Xray и будет ли он у нас нормально работать.

PS: да, вспомнил. Эти черти еще и стали блокировать прокси, в итоге что мои на сквиде поднятые, что купленные у провайдера - все попадало. А они много где нужны, чтобы работало просто то, что должно - нейронки, модели, какие-то сервисы, банально райдер у меня через проксю работал с копайлотом. Теперь как-то еще и с эти придумывать.


В РЖД представили робота-проводника «Володю» для высокоскоростного поезда «Сапсан»

Вот просто поражаюсь иногда новостям, ощущение – что мы с РЖД живем в каких-то параллельных реальностях. Они уже где-то ближе к "Кибердеревне", а я скорее ближе к обычной.
И да, я понимаю зачем это нужно – упоминания в СМИ, громкие заголовки и пресс-релизы, это "быть первым" в чем-то, это показать тем, кто на верху – смотрите, мы тоже в технологии можем и развиваем. Но очевидно же, что дальше популизма и маркетинга это никуда никогда и не пойдет. Роботы, конечно, развиваются и становятся все умнее и ловчее, но они иногда умудряются падать на ровном месте, а тут тесное пространство вагона, тряска, какие-то вещи в проходах, да и банальный вопрос – зачем, какую выгоду это дает, при з/п проводника в 70-100 тысяч.
Ну а главное, не хочет ли РЖД хотя бы организовать работающий интернет в своих вагонах? И ладно до нас, простых смертных пасажиров. Сами же проводники сидят без интернета и на каждой остановке состава бегают с терминалами по вагону, собирая оплату картами "пока остановились и интернет ловит".
Даже для своих же сотрудников РЖД не может дать доступ в сеть, а тут роботы.


Вот сюда еще планирую заскочить в сентябре, разминочный слет перед DotNext, куда тоже хочется попасть.
Благо, что у Озона это бесплатное мероприятие.


Планирую на 8 августа съездить на пикник. Целей особых нет, просто хорошо провести время и послушать умных людей. Да и вспомнил, что как-то избегал всякие активности, последний раз был на слете сисадминов ДСА2011. Надо как-то социализироваться, что ли.


Люблю зарплатные статьи Хабра, а еще больше люблю комментарии под ними. Кто не в курсе, раз в квартал / полгода Хабр собирает данные из своей открытой формы и публикует статистику, кто и сколько в среднем получает - по отраслям, должностям, направлениям, регионам и т.д. И да, надо иметь ввиду, что форма открытая и никаких подтверждений нет - ни справки с места работы, не 2НДФЛ, ни банковской выписки, поэтому никто не мешает указать любую ЗП и должность, модерации нет никакой, ну только если указать слишком аномальные значения и не попасть в выборку.
Так вот, с каждой такой публикацией происходит раскол в комментариях. Одни говорят, что данные нереалистичные, так как они и их окружение зарабатывает больше, что мол за медианная зарплата в 200к, это же ЗП како-то джуна/ мидла в финтехе, да и цены сейчас конские и все такое.
И параллельно им другие жалуются, что данные нереалистичные, так как таких высоких зарплат нет, и вообще никто из их окружения ИТ не получает больше 120-150 тысяч, и все это люди с большим опытом и профессионалы своего дела.

И каждый раз начинается одно и тоже, что вот в регионах таких ЗП нет, и деньги только в финтехе / бигтехе или около него, да и вообще все это только в МСК. а в нашем мухосранске мы вот таких цифр не знаем.


Выполнил квест, собрал все артефакты, наконец-то. Заодно посмотрел на похорошевшую Москву без пробок на заправках.




Дней без блокировок .....0

Сегодня выпилили приложения мейл из AppStore, список прям большой: и ВК, и Одноклассники, клиент Mail, VK Video и кучу чего. Причина понятная, это регуляторные требования США / Евросоюза, санкции и вот это все. Я вообще удивлен, что все это происходит в 2026 году, почему-то банки выпилили все сразу, а структуру мейла как-то не замечали. Вот и до них добрались.
Как говорится, с чем боролись, на то и напоролись. По требованию РКН аппстор удалял все неугодное, теперь по требования кого-то от туда удаляли все то, ради чего неугодное удаляли.
Политики меряются амбициями, страдают простые люди. Грустно, честно говоря.


Наконец-то дошли руки!
Реализовал простой веб-сервис, который решал конкретно одну мою проблему – загрузка музыки из телеги.
Раньше я руками ходил по интересным тематическим каналам, куда публиковали новые релизы, я все это скачивал поштучно на комп и пополнял свою медиатеку.
Теперь есть автоматизированный парсер, который пройдется по всему списку сообществ, скачает все за указанный период, или только новое, история пишется в бд, чтобы не было лишних загрузок / дублей, логи пишутся, прогресс трекается, дашборд рисуется. Думаю допилить до какого-то полноценного self-hosted решения с загрузкой видео и документов, а затем выложить исходники, вдруг кому-то пригодится.


Ну что, пришел очередной подарок для отечественной инфрастктуры. На той неделе появились новость про Let's Encrypt присоединился к санкциям, следом GlobalSign начал отзывать сертификаты безопасности российских сайтов. В срочном порядке пришлось перезаливать серты, пересобирать контейнеры - ибо хрен знает отзовут ли серт, если да то у кого и когда, а словить SSL исключение и остаться на несколько часов / суток без клиентского трафика не очень хотелось.
Если кто, вдруг, не в курсе, то теперь в курсе, уделите внимание своим приложениям. У меня вообще Nginx Proxy manager выдает серты для всех приложений на домашнем сервере через LE бота. Если будет блок тупо по доменной зоне, то больно и грустно будет.


Ох, знали бы Вы как же люто у меня пригорает от Whatsapp. Я им давно перестал пользоваться, недавно вынужденно соприкоснулся с сием великолепием и просто накрыли Вьетнамские флешбеки. Вот вам несколько моментов, которые говорят о том, что данное приложение как минимум архитектурно полное говно.
1. Из приложения нельзя выйти. Вот вообще и никак. Да, вы можете добавить аккаунт, но если Вы раз зашли, то добровольно вы не выйдите из него.
2. Ключевым элементом авторизации является устройство. Приложение хранит где-то у себя токен сессии, довольно длинный. Единственный вариант выйти – дождаться протухания токена. Но даже когда он протухнет, на том же самом устройстве с тем же самым приложением, если вы введете какой-то новый номер, вы попадете в старые чаты и контакты.
3. Веб версия – это оболочка мобильной версии. Если на телефоне пропал интернет, или сам телефон выключен, то веб версией воспользоваться нельзя.
4. Синхронизация. Это недоразумение использует нативные хранилища ОС (iCloud / Google disk) для синхронизации чатов и медиа. Соответственно, если вы меняете iPhone на андроид и наоборот, то вся ваша сохраненная история идет по одному месту.
5. Не знаю как в айфоне, но в андроиде все медиа вложения из переписок из чатов сохраняются локально в вашу коллекцию. И не в какое-то там отдельное пространство, а вот прям в фонотеку, в папку вотсапп. Я это, к сожалению, не сразу понял, поэтому моя личная галлерея, которая еще и засихронена с облаком + immich, оказалась забита сканами документов, чужих фоток, каких-то непонятных видео из разных чатов и т.д.
6. Из-за долгой неактивности тебя выкидывает из группы. Спустя какое-то долгое время неактивности меня выкинуло из группы, которую я же и создал и был владельцем и администратором (!)

Ну и, к сожалению, некоторые сервисы при попытке подвязать телефон как фактор подтверждения используют Вотсап и отправляют туда код. То, что ты когда-то им пользовался и сейчас как три года оффлайн – твои проблемы.

От греха подальше вынужден указать, что:

*Организация Meta (социальные сети Facebook, Instagram и WhatsApp) признана экстремистской и запрещена на территории РФ


Время хороших новостей, правда чисто личных. Квест магистратуры подошел к концу, сегодня защитил свою ВКР магистра. Тема: Разработка Веб-сервиса автоматизации логистических процессов на основе алгоритмов пространственной кластеризации.
Грубо говоря, на основании набора координат решали в каких местах и в каком количестве располагать транспортные средства, чтобы добиться ключевых показателей - покрытие 95+% от координат, чтобы до любого объекта можно было заехать за установленное время, 15 минут. Все это на основании дорожного графа с использованием OSRM движка и построением матрицы из реальной карты ЦФО. Пример результата на иллюстрации, для наглядности.
Теперь остаются формальности, подписи ректора и вручение. Можно выдохнуть, наконец-то.

185 0 1 18 19

Короче, у меня снова полыхает. Вслед за Яндексом, мейл отрубает свои серваки и предлагает пользоваться их почтовым клиентом, утыканным рекламным гамном по самое "не хочу". Понимать надо, бедная инди студия, у которой хватило денег на ВК, на ОК, на ICQ, на еще что поменьше, а вот без 200-400 рублей в месяц с Васи контора никак не может работать в клиентах без рекламы. Если не останет, может на Хабр статью напишу, ибо реально не смешно.


На самом деле, я без негатива / паники, такая реальность, понимаю. Мы просто в ней живем =)
Сейчас много чего ушло на потом, так как в приоритете все таки ВКР и защита магистерской. Вроде все готово, сейчас погружен в очень нудную часть со сбором подписей, отметок, нормконтролем, рецензией и т.д. Но финишная прямая прям вот как буто уже передо мной и виден финиш. Если кому интересно, тема ВКР: "Разработка системы веб-сервиса автоматизации логистических процессов на
основе алгоритмов пространственной кластеризации!
"
За таким страшным набором букв стоит довольно простая и понятная задача - разместить на карте исходя из заданных точек и условий достаточное количество объектов, которые удовлетворят заданным условиям. Грубо говоря, зная где расположены магазины, где расположить такси, чтобы они успевали до любого магазина доехать за необходимое время, и сколько их всего нужно на покрытие всех объектов. Прототип выглядит как-то так. Оно даже работает, проверял по яндекс картам, очень близко к правде. Только работает без их API и гораздо быстрее.


На фоне всех последних новостей вокруг ИТ, все ярче воспоминания от поездки в Беларусь, где все работало без всяких квнов.
Что у нас случилось за последнее время?
- заблокировали доступ к питону. На секундочку, одному из самому популярном языку, на котором делается вся автоматизация и все что связано с ИИ, нейронками и т.д.
- скамный Макс выпилили из апп стора. Интересно, как теперь будут насильно загонять бюджетников с айфонами? Андроиды принуждать покупать?)
- дропнули в Нидерландах кучу серверов из-за обхода санкций. Много конечных пользователей их - наши сограждане.
- что-то еще по мелочи, чего не помню.

Короче, цените сегодня, завтра может быть и хуже – мысль, которую я усвоил за последние 10 лет.


Помню, что обещал еще продолжение про валидацию, но до отъезда не успел написать, а потом уехал на отдых в Беларусь. Хоть и брал с собой ноутбук, признаюсь честно – не хотел его открывать, чтобы просто отдохнуть головой. В Беларуси очень понравилось – красивые объекты, улицы, замки, вкусная кухня, приятные цены. Про то, что интернет работает без всех этих ваших КВНов я уж молчу. Если интересно – могу подробнее рассказать, неделю на машине, проехали через всю страну и есть чем поделиться ;) Ну и без сувинира тоже не ухела.

А пока решил рассказать про интересные детали авторизации, вдруг кому-то пригодится. Ну и на выходных напишу про валидацию.

Ну и также, замечательная учеба. Надо собраться силами и сделать что нужно - все работы, отчеты, ВКР... Поэтому да, немного вот пропадаю, но везде и сразу не успеваю, к тому же как-то так вышло, что на работе приходится работать сразу с двумя командами, задачи поступают с двух сторон, и рутины стало в два раза больше - дейлики, синки, грумминги, ретро – это все люблю-люблю 🙃🫠.


Но вообще, механизм классный, но у него есть один подводный камень, не совсем очевидный, скажем так. И изначально про него и хотел рассказать, но сначала нужно было погрузить в контекст, да и мало ли, кто-то вдруг не знает, что механизм авторизации чуть интереснее чем аттрибуты и мидлвари. Так вот.

Есть метод
Task AuthorizeAsync(
ClaimsPrincipal user,
object? resource,
string policyName);

Мы передаем Пользователя, какой-то ресурс для определения прав и имя политики, чтобы понять что нам вообще нужно проверить. И вот в хэндлере мы делаем такой гибкий механизм
protected override Task HandleRequirementAsync(
AuthorizationHandlerContext context,
AuthorizationRequirement.CanViewVacancyRequirement requirement,
Vacancy resource)
{

if (context.User.IsInRole("Admin") )
{
_logger.LogInformation("User {UserName} has admin role", context.User.Identity.Name);
context.Succeed(requirement);
return Task.CompletedTask;
}

…
If (resource.Initiator?.InitiatorCodeAd == userAdCode)
{
context.Succeed(requirement);
return Task.CompletedTask;
}

_logger.LogInformation("Доступ запрещен: пользователь {UserName} не имеет прав", context.User.Identity?.Name);
return Task.CompletedTask;
}


Вроде все выглядит логично – проверили сначала базовые статичные правила, например клеймы из контектса, потом смотрим на ресурс и поределяем доступ для конкретного пользователя. Логика простая, админа мы всегда пустим, а дальше по обстоятельствам.
Представьте мое лицо, когда меня, как админа, не пустило в систему по запрошенному ресурсу? Я сто раз перепроверил токен, клеймы, правила – все как должно быть, но не пускает. В логах ни ошибки, ни исключения, вообще ничего – просто отказ и все. Знаете в чем дело? Был по ошибке передан не правильный объект, другого типа, а не тот что ожидался. Из-за того, что метод принимает object, то есть вообще все, что угодно, никаких ошибок при билде не было, а то что не удалось объект привести к нашему типу – фреймворк просто отбрасывает такой запрос, не выбрасывает наверх исключение, не логирует попытку, просто отклоняет запрос и все. Но казалось бы, причем тут объект, ведь мы ранее в методе проверяем базовые роли, не обращаемся к объекту, мы заранее можем знать можно ли пропустить пользователя или нет? Но вот в этом и есть особенность данного метода, под капотом сначала собирается контекст, потом передается в связанный хэндлер, а внутри уже хэндлера идет приведение
if (context.Resource is TResource resource)
{
foreach (var req in context.PendingRequirements.OfType())
{
await HandleRequirementAsync(context, req, resource).ConfigureAwait(false);
}
…
}

Тип не подходит, метод отрабатывает впустую, результата нет, нет результата – значит и доступа нет. И поэтому даже не будет проверки ролей, клеймов и т.д., что мы укажем до обращения к ресурсу. Вот так вот бывает.
Ну и что делать с этой информацией? Стараться разделять типы проверок, и те которым конкретный ресурс не нужен, выносить в отдельные хэндлеры. Другой вариант – это написать обертку, и закрыть ее дженериком
public static Task AuthorizeResourceAsync( this IAuthorizationService service, ClaimsPrincipal user, T resource, string policyName) where T : IHasCustomAccess { }

Тогда неподходящий тип не получится передать, ну если только не вызывать напрямую, минуя наше расширение.


Еще один интересный кейс из рабочей практики.

В нашем фреймворке есть мощный механизм для аутентификации и авторизации, можно использовать ролевую модель или более новую на базе клеймов. Есть IAuthorizationService

С методом
AuthorizeAsync(ClaimsPrincipal, Object, String)

Соответственно, мы можем сделать свой набор прав
public class AuthorizationRequirement
{
public class CanViewRequirement : IAuthorizationRequirement { }

}


Создать политику
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("CanViewPolicy", policy =>
policy.AddRequirements(new AuthorizationRequirement.CanViewRequirement()));
});

И создать свой хэндлер
public class CustomAuthorizationHandler : AuthorizationHandler
{

…
protected override Task HandleRequirementAsync(
AuthorizationHandlerContext context,
AuthorizationRequirement.CanViewRequirement requirement,
Model resource)
{
///
}
…
}

И наконец вызывать на конкретном ресурсе (Model), очень просто и красиво
var authResult = await _authorizationService.AuthorizeAsync(User, OurObject, "CanViewPolicy");

if (!authResult.Succeeded)
{
return Forbid();
}


Кто не знал такого – знайте, что так можно. Возможно, кто-то спросит зачем это, ведь есть и ролевка, и клеймы, и можно делать свои аттрибуты и отклонять запросы на уровне эндпоинтов?
А я отвечу: часто, особенно во всяких корпоративных CRM, доступ строится динамически исходя из конкретного пользователя и конкретного ресурса, куда запрашивается доступ. Банальный пример, флоу какого-то документа в документообороте. Тут понятно, что подписывает руководитель, какие-то промежуточные визы ставят связанные службы (юристы, экономисты, и т.д.), но вот доступ к какому-то документу, или файлу, или действию может только инициатор, а еще чаще требуется чтобы доступ имел инициатор и его непосредственный руководитель.
И вот как раз для таких сценариев очень удобно использовать этот механизм, обращаемся к ресурсру, смотрим кто автор, смотрим куда-то в 1C / AD – кто там руководитель, смотрим потом уже в контекст Http запроса и определяем, а можно ли отдать документ или нет.


Завтра будет продолжение про валидацию, есть еще из практики интересный момент. А пока предлагаю почитать про то, как РСХБ пытается объяснить, зачем нам нужен цифровой рубль. И спасибо интернету, что существуют комментарии, так как если в вылизанной статье все можно очень красиво преподнести, то вот на прямые вопросы реальных людей часто ответить нечего.

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

Какую проблему это все должно решать - решительно не понятно. Вся безналичка сейчас максимально прозрачна, ФНС может смотреть ваши счета в режиме он лайн, накладывать любые аресты, а банк требовать документы и не проводить переводы. И это реальность.
Также у нас и так уже много типа прозрачных систем, те же самые гос закупки, но назвать их чистыми, честными и открытыми – язык не повернется. Да, гораздо лучше, чем 20 лет назад без них, но и до честности там очень далеко.
В итоге получим инструмент, который со времен станет карательным, как РКН со всеми его хорошими предлогами. И если сейчас, чтобы кого-то наказать нужно идти в суд, приказ там оформлять, или какой-то документ, какая-то процедура происходит, есть порядок уведомления, срок на реагирование,потом это все уходит в банк, банк ограничивает движения по счету, то в скором будущем можно будет просто одной кнопкой заблокировать все деньги, на всех счетах разом. А возможно даже и те деньги, которые ушли другим людям (неважно уже легитимно, или нет).

20 last posts shown.