Задать вопрос
  • Нужно ли дробить данные при отправке через SignalR?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Да, сейчас все работает, но правильно ли это? Или включение этой опции спасает даже при отправке условно данных на 1гб?


    На ASP.NET Core есть ограничение на размер запроса в 50 Мб (или около того). Нам это не подходило - мы увеличили лимит. Но проблема лежит в другом - аллокация памяти. Большие чанки заставляют аллоцировать объекты в LOH. А там они могут лежать долго и не выгружаться.

    Я думаю разбить отправку по частям, но проблема в том, что отправляемые данные - коллекция классов


    Судя по примеру класса Details вроде ничего не мешает отправить сначала Added, а затем Removed. А если и это не поможет, то можно стримить каждый элемент: например, сначала отправляешь кол-во элементов, а потом по одному за раз.
    Смысл в том, чтобы не сериализовать один большой объект.

    А если у тебя 1Гб. то это скорее файл. Его лучше чанками отправлять и на диск сохранять. А по завершении отправки начинать читать (не полностью в память загружать, а постепенно)
    Ответ написан
    2 комментария
  • Какую библиотеку использовать для связи клиентов с сервером?

    @OwDafuq
    SignalR.
    Но с передачей 20гб вы, конечно, загнули, обычно это делают через отдельный файловый сервер-api.
    Ответ написан
    4 комментария
  • C#, обработка исключений, почему нельзя обратится к свойству, через имя класса?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    если я не хочу создавать переменную

    А вы её и так, и так не создаете: экземпляр исключения создается при возбуждении исключения (помните синтаксис - throw new Exception() )? А вот чтобы обратиться к полям/свойствам/методам этого экземпляра, надо дать ему имя в конструкции catch и обращаться к нему по этому имени. А при указании в качестве имени экземпляра имени класса, вы, как выше вам написал Василий Банников , как и в любом другом месте, обращаетесь к статическому полю (или свойству) этого класса. Такой вот синтаксис у языка C#: обработчик исключения у него - это обычный блок, никаких специальных соглашений там нет( пока что, по крайне мере ;-) ).
    Ответ написан
    2 комментария
  • Как отображать в HTML разметки ответы gRPC стрима в asp net core?

    В реальном времени ты в html так их не вставишь.
    У тебя два варианта:
    1. Если стрим конечный, то ты можешь собрать все айтемы в лист и вернуть его как обычно.

    2. Использовать websocket - тут надо будет подумать, как лучше это подружить со сложившейся у тебя архитектурой.
    Как минимум нужно будет добавить js на фронт и создавать долгоживущую задачу на бэке
    Ответ написан
    2 комментария
  • С чего начать обучение программированию?

    Предположим, вы – учитель, чья задача научить школьника/студента программированию. С чего можно начать первое занятие? Можно начать рассказывать о системах счисления, архитектуре процессора, компиляции, интерпретации и прочих вещах, но разве они и вправду так нужны новичку, которому надо просто написать змейку?

    Начинать нужно с того, зачем вообще это нужно ученику, и что у него должно получиться в результате.
    А что именно изучать - проще посмотреть как это сделано у других. Например глянь как устроен курс CS50 - это не только лишь программирование, а в целом компьютерные науки.
    Ответ написан
  • Как называются и зачем нужны такие штуки [field:]?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Это цели атрибутов - то для чего атрибут предназначается.
    RTFM
    Ответ написан
    Комментировать
  • Как связать React + GoLang?

    package main
    
    import (
        "encoding/json"
        "net/http"
    )
    
    func main() {
        http.HandleFunc("/api/data", func(w http.ResponseWriter, r *http.Request) {
            data := struct {
                Message string `json:"message"`
            }{
                Message: "Привет, мир!",
            }
    
            w.Header().Set("Content-Type", "application/json")
            w.WriteHeader(http.StatusOK)
    
            if err := json.NewEncoder(w).Encode(data); err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
            }
        })
    
        http.ListenAndServe(":3001", nil)
    }


    В целом так же как и на node, python, dotnet)
    Делаешь небольшой сервер с endpoint, в этом случае /api/data и делаешь на него запрос с react, localhost:3001/api-data, делать запросы можно через fetch, axios. Ну и описываешь route дальше. таких роутов можно делать много, это вариант http запросов. Еще есть gRCP, ну для начала лучше разобраться с этим)
    Ответ написан
    1 комментарий
  • Как выбрать монитор для программиста?

    pindschik
    @pindschik
    ФЫВА ОЛДЖ
    Во первых тут всё сугубо индивидуально, кому-то "медведь на ухо наступил", а некоторым в глаз, кому-то надо нормальный монитор и глаз видит все недостатки матрицы, а кто-то влюблен в древний выгоревший мутно-серо-зеленый бенк. Во вторых в этом вопросе нельзя обойтись только выбором монитора...

    Поскольку вас интересует только текст и два цвета, черный и белый - то:

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

    - пульсация - она невидима, но от нее возникает утомление "зрительного анализатора", хотите под вечер иметь "глаза в кучу" - сделайте себе побольше пульсации.
    Обеспечьте освещение в помещении с пульсацией не выше 5%. Установите себе локальное освещение (лампу настольную) - и тоже без пульсации. В идеале конечно - лампа накаливания, но будем реалистами... Имейте ввиду - все дешманские изделия на светодиодах - как правило дают пульсацию ближе к 100%.

    - Монитор - как правило при 100% яркости - пульсация подсветки близка к нулю. Но регулировка яркости делается на дешевом ШИМ, поэтому на 50% яркости - у вас будет 100% пульсации. Вывод - подберите матрицу, на которой на 100% яркости - будет комфортный уровень белого. И не убавляйте яркость, что бы вам тут не советовали. А вечером - если в помещении темно - включайте локальное освещение (настольную лампу).

    - Не берите очень большую диагональ - глаза имеют пределы комфортного "хода". Если вы их превысите - начнете крутить головой - это очень утомляет. Для игр широкоформатные моники - здорово, а для работы лучше два, но обычных. Формат монитора - смотря по задачам, но код обычно вертикальный, стало быть лучше монитор повыше (с соотношением сторон 16:10), хотя их теперь труднее найти за адекватные деньги.

    - Регулировка высоты. Оптимально - на уровне глаз почти верхний край монитора. А не как некоторые - ставят на поставку и потом постоянно задирают голову. Кроме того - так меньше ход глаз между экраном и клавиатурой. Стало быть присмотритесь к изделиям с регулировкой по высоте.

    - Обеспечьте пониженную блескость. Матовый экран и правильное расположение относительно окна и источников освещения.

    - Моргать. Некоторые забывают. Если это проблема и глаза пересыхают - купите очки - нулевки (ну или смотря по зрению). Очки снижают вентиляцию в районе глаз и унос влаги.
    Ответ написан
    Комментировать
  • Как выбрать монитор для программиста?

    Adamos
    @Adamos
    Матовый, а не глянцевый экран.
    Цифровой, а не аналоговый интерфейс.
    IPS или VA, а не TN - не столько потому, что передача цветов, сколько потому, что в ней наверняка не будет "кислотных" нерегулируемых цветов из-за экономии на матрице и подсветке. Я предпочитаю IPS, поскольку на тормозные VA, размывающие страницу при прокрутке, уже насмотрелся.
    24" - за глаза, если у вас обычный рабочий стол. Все эти многометровые диагонали и 2k/4k - просто эхо вау-импульсов, для работы с текстом они на хрен не нужны.
    После покупки приложить к монитору хорошо освещенный лист мелованной бумаги и отрегулировать яркость максимально близко к нему. Даже если при этом монитор потеряет яркий "витринный" вид и будет казаться тусклым и скучным. Собственно, этот пункт для глаз важнее всех выше перечисленных ;)
    Ответ написан
    4 комментария
  • Как выбрать монитор для программиста?

    @CBET_TbMbI
    На самом деле всё сугубо индивидуально. Нужно идти в магазин и смотреть самому. Одним нравится ИПС, другим наоборот, лучше самый банальный ТН.

    Из универсальных советов:
    1. Диагональ лучше побольше. Если монитор один, то на мой вкус оптимум 27-34 дюйма. Расположить рядом несколько документов или окон бесценно.
    2. Не гнаться за кучей пикселей. Иначе и шрифты и элементы управления будут весьма мелкими, что утомляет и глаза и руку на мыши. На мой вкус вполне достаточно ФуллХД (1920х1080) для мониторов поменьше или 2к (2560х1440) для мониторов побольше. Даже о 4к надо сначала хорошо подумать перед тем, как брать, не говоря уже о чём-то большем.
    3. Антибликовость/матовость хорошо, но не совсем панацея. Лучше организовать рабочее место так, чтобы блики и отражения не образовывались.
    Ответ написан
    5 комментариев
  • Нужно ли учить весь синтаксис?

    Viji
    @Viji
    DevOps Engineer
    Основные конструкты надо учить, классы, передачу типов, лямбда выражения

    эту кач... берите ))
    The C# Player's Guide (5th Edition) by RB Whitaker
    Ответ написан
    Комментировать
  • Как получить внешний API в Web API C#?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Используй GetFromJsonAsync<T>(url) метод у HttpClient.

    В T указываешь объект, который нужно десериализовать, а в url - адрес, по которому нужно послать запрос. Для httpbin, например
    client.GetFromJsonAsync<SomeObject>("httpbin.org/get");


    Класс объекта создаешь сам.

    Туториал на метаните
    Ответ написан
    1 комментарий
  • Как реализовать SQL движок в своём приложении?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    1. GraphQL - специальный язык запросов. Можно изменять/обновлять/добавлять/читать. Есть полноценный пакет, который парсит запрос и выполняет его. Можно к In memory коллекциям подкрутить. Но это не SQL

    2. OData - тоже язык запросов. Можно изменять/добавлять/читать/удалять. Он достаточно старый и разобраться сложнее. Тоже есть фреймворк, который автоматизирует работу по парсингу/выполнению. Это также не SQL

    3. In Memory sqlite - можно запустить SQLite в памяти и проксировать запросы уже ему.
    Ответ написан
    Комментировать
  • Имеет ли смысл хранить refresh-токены?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Refresh-токены хранят для проверки на повторное использование. При первом использовании ставится пометка, при попытке повторного использования блокируются все refresh-токены пользователя. При следующем обновлении с любого клиента данного пользователя потребуется полная аутентификация. Можно хранить не весь токен, а только uid токена и id пользователя.
    Ответ написан
    Комментировать
  • Как запустить сайт на С# в Ubuntu 20.04?

    https://learn.microsoft.com/ru-ru/aspnet/core/host...

    Как именно собирался он? На убунте ты сможешь запустить приложение только если используется .NET 5+ или Core, но не .NET Framework.

    Для этого тебе нужен соответствующий рантайм:
    https://learn.microsoft.com/en-us/dotnet/core/inst...
    Ответ написан
    3 комментария
  • Где можно посмотреть реализацию готовых и профессиональных WebAPI в связке с клиентом?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Microsoft создал референсный микросервисный проект - eShopOnContainers. Там есть основные паттерны проектирования, клиенты различные (ajax, mvc).

    А вообще, это только часть общего репозитория с проектами под различные кейсы - dotnet-architecture

    Если есть время, то можно и книгу прочитать по этой архитектуре
    Ответ написан
    Комментировать
  • .Net 6 где хранить настройки?

    Кажется, тут сразу три независимые вещи, которые часто хранят раздельно:

    1. Собственно настройки
    Их удобнее всего хранить в appsettings.json, который можно спокойно закоммитить в репозиторий.
    В коде можно получить к ним доступ через IConfiguration или IOptions

    2. Секреты (пароли, токены, итд)

    Строку подключения в общем то решил захардкодить.

    Остается имя админа и пароль + почта.

    Их лучше в репозитории не хранить.
    Благо IConfiguration можно наслаивать и прокидывать секреты через переменные окружения, например, или использовать какой-нибудь Vault или keyring.
    Уже упомянутый диспетчер секретов можно использовать только для разработки, но не для прода.

    3. Фича-флаги.

    Дальше динамическая смена настроек как то:
    OAUTH авторизация, которую выключать и включать можно.

    Их часто хранят в базе данных, да. Есть также несколько уже готовых решению для удобного управления фича флагами.
    Гуглить feature flags.
    https://learn.microsoft.com/en-us/azure/azure-app-...

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

    В дотнете для работы с такими конфигами есть интерфейс IOptionsMonitor
    Ответ написан
    1 комментарий
  • Как бороться с race condition при обращении к REST API во Vue?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Просто не давть пользователю повторно тыкать там, где это вызовет повторный запрос, пока идёт загрузка текущего?

    Но если хочется быть ленивым - можно просто обернуть запросы в leading debounce-promise.

    Все эти thunk и saga - полная ересь, порождённая богомерзким redux.
    Ответ написан