Задать вопрос
  • Есть ли хороший курс/книга про использование паттерна page object на C#?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Курс/книга ради одного паттерна - вряд ли можно найти хорошие.
    Page Object паттерн из GUI тестирования, поэтому искать там. Рекомендую курс от Selenium - https://www.seleniumtraining.com/selenium-c-sharp-...
    Там как раз есть 6 часовой туториал с проектом по Page Object, но он в платной подписке.

    Также по тестированию на C# есть книга Selenium with C# - в 12 главе описывается Page Object

    Есть статья на хабре, но думаю она только описывает этот паттерн, только для знакомства
    Ответ написан
    1 комментарий
  • Как работают SSR компоненты?

    Mike_Ro
    @Mike_Ro Куратор тега Поисковая оптимизация
    Python, JS, WordPress, SEO, Bots, Adversting
    Если я правильно понимаю работу Next.js: компоненты без состояния рендерятся на сервере и могут индексироваться поисковыми роботами

    Верно, индексация стандартная.
    А с состоянием - на стороне клиента, и роботы их не видят.

    Не совсем. Поисковики индексируют динамику, но ограниченно, и она проиграет классической статике или ssr. То, что Вы видите динамику в топе - это не заслуга динамики, а недоработка конкурентов со статикой.
    Однако в компоненте самой страницы ArticlePage у меня в любом случае будет использование useState. Значит ли это, что вся страница будет отрисовываться на клиенте?

    Не совсем. Часть страницы будет отрисована на сервере, а часть на клиенте.
    И что поисковые роботы обойдут контент страницы стороной?

    Нет, контент в любом случае будет ранжироваться, но не лучше классической статики при прочих равных.
    P.S. Вопрос, возможно, глупый, но я правда не понимаю...

    К нексту у многих имеются вопросы, поэтому Вы не первый и уж тем более, не последний :)
    Ответ написан
    Комментировать
  • Эффективный long polling запрос Telegram API каа правильно сделать?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Для чего нужен "timeout" в строке запроса?

    long polling - это когда делаешь запрос и ждешь пока произойдет окончание операции. в данном случае, окончание означает то, что какое-то событие произошло и получены обновления.
    И тут возникает вопрос - сколько ждать?
    Например, ты просто хочешь узнать есть ли новые сообщения - тут ждать не надо, ответ сразу, или это фоновый поток, который должен реагировать на каждое сообщение - тогда надо ждать пока не получишь сообщение, т.е. ждать можешь долго.
    Таймаут - это время, которое будет затрачено на эту операцию. Здесь оно выставляется в секундах.
    Если таймаут превышен, то соединение разрывается и ответа ты не получаешь, иначе в теле ответа будут нужные данные.
    Для твоего случая, ставь таймаут побольше, например, 300 - ждешь 5 минут.
    Лучше не ставить бесконечное время ожидания, т.к. что-то может сломаться, а ты об этом не узнаешь и по-факту будешь ожидать ничего
    Ответ написан
    2 комментария
  • Зачем использовать ViewData если есть свойство в PageModel?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    ViewData - это инструмент из ASP.NET Core MVC - старых MVC проектов. Он нужен, чтобы обойти строгую типизацию и передавать опциональные параметры.
    PageModel - это уже новый фреймворк, который построен поверх MVC и сделан на упор в одностраничник, т.е. мы сразу можем что на странице должно быть отображено. Поэтому ViewData уже не особо нужен.

    В итоге, использовать ViewData стоит если есть какие-то опциональные, transient данные, которые можно использовать. В примерах это заголовок страницы.
    Ответ написан
    Комментировать
  • Почему при навигации между компонентами в Blazor не погружается JS код?

    NikFaraday
    @NikFaraday
    Student full-stack Developer
    В blazor использовать кастомные JS скрипты немного сложнее чем вы думаете. Там нужно использовать такую штуку как JSRuntime. А вообще советую прочитать эту статью про JS Interop
    Ответ написан
    Комментировать
  • Как создать удаленный виртуальный дисплей большого разрешения и работать через RustDesk?

    @rPman
    Использовать xvfb (X virtual frame buffer). Устанавливаешь одноименный пакет, настраиваешь его запуск, используешь. Таких серверов может быть запущено несколько, но rustdesk может этого не ожидать (я сильно не копал но обычно если запустить rustdesk приложение с установленным DESKTOP на нужную тебе сессию, для нее он и запустится)

    p.s. linux + xvfb + rustdesk это худший способ настройки удаленного подключения
    Рекомендую x2go, сервер все сам настроит, а клиенты есть по до все. Работает на порядок эффективнее (плавнее и менее требовательный к сетевому каналу).
    Для игр не подходит.
    Ответ написан
    Комментировать
  • В чём принципиальное отличие Eager/Explicit Loading от прямого использования Join-ов через LINQ в контексте EF Core?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    То что ты описал - разные понятия.

    Например, у тебя есть one-to-many и это представляется списком (ICollection).
    class User
    {
         public string Name { get; set; }
         public ICollection<Subscription> Subscriptions { get; set; }
    }


    Eager/Explicit/Lazy Loading

    Это КОГДА ты данные будешь получать.

    Тогда действия будут следующими:
    - Eager - не важно нужны тебе эти данные или нет - они все равно будут загружены. Тут ты сразу получишь все подписки (Subscriptions) даже если тебе просто нужно узнать Name
    - Lazy - они будут загружены, только когда обратишься к этому полю, т.е. в момент обращения к полю Subscriptions
    - Explicit - это стратегия когда ты сначала подгружаешь объекты в DbContext, а потом (в будущем) когда понадобятся загрузить из памяти - без сетевых запросов. Это уже про метод Load() у DbContext.

    Select/SelectMany/GroupMany

    Это ЧТО ты хочешь получить

    Пример все тот же:
    - Select - например, тебе нужно получить только имена, тогда ты создаешь анонимные объекты:
    context.Users.Select(u => new { u.Name });
    - SelectMany - тебе нужен только список подписок всех пользователей из списка
    context.Users.Where(u => someIds.Contains(u.Id)).SelectMany(u => u.Subscriptions); // Не уверен что запрос корректный

    - GroupBy - это уже JOIN

    Смысл ты понял - это разные зоны ответственности: КОГДА получать данные и КАКИЕ данные получать
    Ответ написан
    3 комментария
  • Как реализовать функцию статистики просмотра страницы за некий период?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Важно, что бы это была статистика за день/месяц/год/всё время.
    Первое что нужно - определитесь с минимальной статистической единицей, если это день - значит храните сумму за день, табличка соответственно будет что-то типа:
    id, page_id, date, views;
    Соответственно если нужен меньший таймфрейм - дата будет уже дататайм. Далее простой джоин, груп с аггрегацией и sum()
    Ответ написан
    9 комментариев
  • Почему C# не кроссплатформенный?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    С# работает на виртуальной архитектуре

    Правильнее говорить: имеет собственный байт код. Приложения .NET не запускаются в виртуальной машине! Они компилируются JIT'ом и просто могут взаимодействовать с платформой, но нет никакой ВМ (например, песочница как в JVM отсутствует - ты видишь обычный процесс.
    Почему так?

    Потому что C# (и .NET Framework в частности) был ориентирован для работы под Windows и там очень много специфичных для нее деталей есть (взять ту же концепцию COM объектов).
    Java изначально поддерживала другую стратегию + была поддержка Linux (на котором сидели энтузиасты), что в итоге вылилось в то, что эти самые энтузиасты полюбили Java и начали писать на ней везде (а для этого надо было иметь реализацию JVM под нужную платформу)
    Сейчас ситуация меняется: .NET есть под MacOS, Linux и Windows. Это не полная кроссплатформенность, но философия другая: мы будем поддерживать несколько платформ, но делать это качественно. Сейчас упор делается в Linux и веб в частности.
    Дополнительно:
    - Спецификация открытая и ничто не мешает реализовать под свои платформы. Взять тот же .net nanoFramework, mono, unity
    - Mono вышел в 2004 году, а значит еще с тех пор .NET был кроссплатформенным
    Ответ написан
    2 комментария
  • Почему C# не кроссплатформенный?


    Почему C# не кроссплатформенный?

    На этот вопрос нельзя ответить сразу по двум причинам:
    1. C# - это язык, а язык не может быть кросс-платформенным, так как платформы в разрезе языка и нет.
    2. .NET уже много лет как кросс-платформенный.
    Начиная с уже мейнстримного .NET 8, заканчивая mono и всякой экзотикой типа nano framework


    но при этом, это не так

    Ничто нельзя запустить на "чём угодно"


    но в неё вопрос кроссплатформенности решена абсолютно полностью

    Если вопрос "абсолютно полностью" решён, то почему я не могу запускать программы, написанные на Java, на любом железе?
    Ответ написан
    Комментировать
  • Как скопировать клиентскую часть сайта?

    vabka
    @vabka Куратор тега Веб-разработка
    Есть паттерн такой "backend for frontend" - вот тебе нужно сделать как раз его.
    Отдели ту часть, которая делает SSR в отдельный проект, а те места, где идёт обращение к бизнес-логике замени на вызовы твоего web api.

    Соответственно тебе нужно будет написать web api.
    Ответ написан
    7 комментариев
  • Как перенести сайт ASP.NET Core 5 на другой хостниг без VisualStudio?

    BasiC2k
    @BasiC2k
    .NET developer (open to job offers)
    Для запуска проекта ASP.NET Core 5 нужно установить также Hosting Bundle.
    Ответ написан
    2 комментария
  • Какой Rust GUI лучше для прода в 2024?

    vabka
    @vabka Куратор тега Rust
    нынче развелось довольно много

    Не так уж и много.

    Наиболее близкое к проду, кмк - tauri из-за коммьюнити, хорошей документации, и гибкости, тк html+css.

    Если тебе допустимо immediate mode и внешний вид не сильно важен (к примеру какая-то небольшая утилита или ui для отладки в игре), то egui тоже норм.
    Ответ написан
    4 комментария
  • C#, сессии, JWT token?

    NikFaraday
    @NikFaraday
    Student full-stack Developer
    Изучите более подробно об JWT токенах и IndentityServer'е, тогда у вас не будет желания хранить их в базе) Но сможете использовать это всё для аутентификации и авторизации. Так же советую посмотреть об OAuth/OAuth2.0 и OpenId Connect

    Если что-то более простое, тогда делайте просто на куках как под mvc:
    Use cookie authentication without ASP.NET Core Identity
    ASP.NET Core - Write a Simple Cookie Authentication
    Ответ написан
    Комментировать
  • Какой ЯП подходит для производственного ERP?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Какой хочешь.
    Равнозначно

    UPD:
    Лично я, как предприниматель, бы делал выбор между C# / Java
    Причины:
    1. Сформированное, "взрослое" (mature) сообщество, которое может помочь
    2. Существуют проверенные/документированные фремворки
    3. Для общих случаев (настройка БД, создание диаграмм, документирование кода, какие-нибудь паттерны) уже есть удобные инструменты/фреймворки
    4. Рынок разработчиков большой
    5. Эти ЯП позволяют абстрагироваться от инфраструктуры или упростить работу с ней (управление памятью, вопросы ABI, версионирование, сборка и т.д.)
    Ответ написан
    1 комментарий
  • Можно ли организовать международный прием платежей для интернет магазина с помощью платежных шлюзов?

    SilenceOfWinter
    @SilenceOfWinter
    та еще зажигалка...
    технически это не сложно - прикрутить omnipay, а вот юридически в нынешних реалиях довольно проблематично - скорее всего понадобятся зарубежные коллеги иначе придется перегонять через perfectmoney и крипту
    Ответ написан
    1 комментарий
  • Можно ли организовать международный прием платежей для интернет магазина с помощью платежных шлюзов?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    хе-хе, на paypal, stripe в usdt очередь стоит

    а так все можно, с EU US регистрацией
    Ответ написан
    Комментировать
  • Можно ли организовать международный прием платежей для интернет магазина с помощью платежных шлюзов?

    Как один из вариантов интегрировать криптопроцессинг, по типу CryptoCloud, сможете принимать международные платежи, и выводить USDT и делать моментальный вывод, но есть загвоздка. Клиентам тоже придется оплачивать в криптовалюте. Тема с фиатом не будет работать. Как вариант в целом можно рассмотреть как дополнительный способ приема платжей в свой магазин, по сути вариант остается рабочим, но не во всех нишах таким популярным.
    Ответ написан
    Комментировать
  • Какой принцип безопасности при создании ссылки на оплату?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Получается цену мне передавать не надо, а только список продуктов
    Именно. С фронта должны приходить id товаров и количество. Окончательный расчёт цены выполняет бэк. Он же формирует чек и отсылает его в платёжную систему, перебрасывая клиента на переданную страницу оплаты. И в бэк же возвращается callback от платёжной системы с подтверждением транзакции.
    Ответ написан
    Комментировать
  • Картинки и файлы для проекта?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    В настройках проекта есть возможность указать файл как ресурс. Он будет копировать в выходную папку.

    В райдере это в свойствах файла задается: 657fe6fb3033c854326217.png

    P.S. параметр Copy to output directory
    Ответ написан
    5 комментариев