Задать вопрос
  • Какой формат и расширение файлов типичного .net core бекэнд приложения?

    Нужен ли на установленный .net на платформе где будет запускаться такое .net приложение?

    Когда ты публикуешь приложение для Linux - оно будет с расширением исполняемого файла от линукса.
    А именно - ни с каким.
    Если будешь публиковать платформонезависимое приложение, то тогда будет .dll и в любом случае понадобится установленный рантайм.
    Нужен ли на установленный .net на платформе где будет запускаться такое .net приложение?

    Если публиковал с флагом --self-contained или --self-contained true, то не нужен.
    Если публиковал без флага --self-contained или с флагом --self-contained false, то нужен.

    Это всё ты мог проверить самостоятельно, просто скомпилировав хеллоу ворлд.

    PS: вот что конкретно выдаётся в результате:
    C:/workspace
    ❯ dotnet new console -o DemoLinuxPublish
    Шаблон "Консольное приложение" успешно создан.
    
    Идет обработка действий после создания...
    Выполнение "dotnet restore" для C:\workspace\DemoLinuxPublish\DemoLinuxPublish.csproj...
      Определение проектов для восстановления...
      Восстановлен C:\workspace\DemoLinuxPublish\DemoLinuxPublish.csproj (за 113 ms).
    Восстановление выполнено.
    
    
    C:/workspace took 2s
    ❯ cd .\DemoLinuxPublish\
    
    C:/workspace/DemoLinuxPublish via .NET v6.0.100  net6.0 took 12s
    ❯ dotnet publish -c Release -r linux-x64 --self-contained -v q --nologo -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:DebugType=None -p:DebugSymbols=false -p:PublishReadyToRun=true -p:PublishTrimmed=true
    
    C:/workspace/DemoLinuxPublish via .NET v6.0.100  net6.0 took 2s
    ❯ ls .\bin\Release\net6.0\linux-x64\publish\
    
        Directory: C:\workspace\DemoLinuxPublish\bin\Release\net6.0\linux-x64\publish
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a---          21.03.2022     3:25       15866695 DemoLinuxPublish

    PPS: я немного упоролся с дополнительными параметрами сборки
    Ответ написан
    2 комментария
  • Где лучше генерировать uuid для базы? В коде или в sql запросом?

    phoinixrw
    @phoinixrw
    Архитектор информационных систем
    По большому счету - без разницы.
    Но сильно зависит от того, каким образом осуществляется генерация UUID на клиенте.
    Например, при использовании rand основанного на времени, я сталкивался с проблемой уникальности при плотной вставке записей в базу данных (при плотности записи больше 10К per sec данная ошибка будет проявлятся стабильно).
    Ответ написан
    Комментировать
  • Нарушает ли переопределение конструктора принцип подстановки Лисков в частных случаях?

    @Akela_wolf
    Extreme Programmer
    Нет, не нарушает. Принцип подстановки Лисков говорит о том, что клиент не должен видеть разницы между базовым объектом (в вашем случае интерфейсом) и его потомком. То есть потомки должны соблюдать контракт, определенный предком (могут делать его строже, но не слабее)

    Конструктор не является частью интерфейса, поэтому переопределение конструктора никак принцип подстановки Лисков нарушать не будет.
    Ответ написан
    3 комментария
  • При переводе float в string, число получается с запятой, а не с точкой. Можно ли переводить float в string так, чтобы число было с точкой?

    Запятая пишется из-за того что у тебя русская культура.

    Ты можешь в ToString передать нужную культуру.
    Например:
    (42.5).ToString(System.Globalization.CultureInfo.InvariantCulture)



    При попытке вставить строку с типами float значении float из C#, выходит ошибка

    Делай параметризованные запросы, чтобы такого не было.
    Ответ написан
    Комментировать
  • Как вернуть переменную из метода в C#?

    @Janus74
    public static List<DirectoryInfo>Searcher...

    Ваш метод Void - ни чего не возвращает
    Если укажите тип возвращаемых данных, а именно List , то он будет обязан вернуть объект этого типа

    а еще, у вас ошибка в коде, из-за него код не скопилируется. В самом конце return part; - part объект объявляется только в цилке foreach, за пределами цикла, такой объект не объявлен.

    картинка
    623212d6e17f1946132380.png
    Ответ написан
    2 комментария
  • Как вернуть переменную из метода в C#?

    freeExec
    @freeExec
    Участник OpenStreetMap
    void - значит вернуть ничего
    А вот если там указать тип (string например), в место него, то нужно будет вернуть объект данного типа.
    Ответ написан
    Комментировать
  • Какой ЯП выбрать для этих целей?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    На том, который лучше знаете.
    Ответ написан
    5 комментариев
  • Какой стек технологий лучше всего подойдет для работы с объемными базами данных?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    исходя из вышеизложенного, какой бы стек технологий вы бы выбрали как разработчик чтобы решить вышеописанную задачу?

    Для начала немного контекста - 2 важных примечания:
    1) Описанная задача решается на любом упомянутом стеке, + еще десяток возможных вариантов (Java/Spring, питон, нода, дотнет, голанг и т.д.).
    2) Быстродействие системы зависит от ее самой медленной части, и в 95% случаев самая медленная часть - БД, просто в силу специфики работы: много данных со сложными связями, выборки с сортировкой и фильтрацией из большого массива и вот это все, в то время как язык бэкенда в основном выполняет достаточно простые манипуляции с уже готовыми наборами данных (за редчайшими исключениями, которых в вашем кейсе нет, или они не описаны в вопросе).

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

    Насчет стоимости и условий:
    полный самопис 150к+ (я это не тяну) или же сайт на Laravel +MySQL а дальше варьируется.
    полный самопис - либо маркетинг, либо идиотизм, писать на голом языке не будет ни одна нормальная студия, в принципе в данном случае либо используется фреймворк и заказчику преподносится как "сделано вручную программистами девственниками под светом серебряной луны", либо разработчики идиоты, мнящие себя круче всех (нет). В первом случае это то же что и "сайт на Laravel +MySQL" (норма и стандарт для среднего уровня студий), во втором - развод на мани на пустом месте и попытка продать г**но в обертке "иксклюзивнасти".

    По цене - на сегодняшний день, если я не ошибаюсь, 150к деревянных это +- 1000уе. Цена приемлемая за нормальную работу, если найдете дешевле "на Laravel" - думаю будет вообще ок. Опять же, цены штука такая, кто-то за копейки сделает хорошо, кто-то за дорого каку сляпает. Влияет так же регион, понятно что в Мск цена будет серьезно больше чем в условном Челябинске...

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

    UPD:
    проект планируется на 100 к+ посетителей в месяц...
    предупреждают что если аудитория достигнет условных 100 тысяч в месяц Лара начнет потихонечку задыхаться от нагрузки,
    ок, пусть будет 200к для наглядности.
    В среднем, если это маркетплейс, то постоянных посетителей будет не много, думаю около 10%, так что ими можно пренебречь. Условно - 200к / 30 дней = 6600 в сутки, при активных 10-12 часах посещения это ~600 в час. Пусть на 1 посетителя будет 5 запросов страниц, это 600*5=3000 в час = 50 в минуту или менее 1 запроса в секунду.
    Даже если умножить это на 30 (допустим такая пиковая нагрузка), 30rps вообще "ниачем". Не знаю кто там вам считал то это проблема, любое современное железо среднего уровня вытягивает без напряга.
    Ответ написан
    2 комментария
  • Как сделать поле, помимо ID, уникальным?

    Или при помощи атрибута:
    https://docs.microsoft.com/en-us/ef/core/modeling/...
    [Index(nameof(Url), IsUnique = true)]
    public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }
    }
    Ответ написан
    Комментировать
  • Ревью кода. Консольное приложение для создания и прохождения викторин. C#?

    1. Не ясно зачем использовал старый .net framework
    2. Зачем у Score публичные геттеры-сеттеры, если по идее класс иммутабельный и у него даже конструктор с обязательными параметрами есть?
    3. Везде есть привязка к русскому языку, что не очень хорошо, но и не смертельно.
    4. Есть небольшая проблема с именованием методов, но не критично
    5. Стандартная бинарная сериализация - зло почти всегда.
    6. Пароли в открытом виде, и даже нет никакой абстракции над форматом хранения данных (если бы была абстракция, то уже не так критично было бы)
    7. Относительные пути (нашёл в Manager.cs). Сами по себе относительные пути - это не плохо, но тут аж в родительскую папку стучится.
    8. Не понятно, почему есть всего три захардкоженных вида викторин. Разницу между ними по коду я не увидел.
    9. Главное меню в процедурном стиле с совершенно неговорящими именами методов и константами - ну это совсем уже ни в какие ворота.
    10. Нравится, что сразу есть разделение на два bounded context - прохождение викторин и создание. В принципе не сложно будет зарефакторить.

    Дальше не буду проверять. Кажется, что автор просто не достаточно проработал предметную область и не проработал архитектуру приложения, на основе этого.

    Советую почитать книги:
    "Чистая архитектура" Роберта Мартина
    "Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем" Эрика Эванса

    Не обязательно прямо целиком книги - можно просто почитать статьи и посмотреть доклады про то как следует строить архитектуру приложений.
    Вкратце:
    1. Старайся не смешивать модель предметной области и детали реализации
    2. Если делаешь обогащённые модели (с методами, которые отражают суть предметной области), то используй их повсеместно.
    3. Если делаешь анемичные модели - делай их повсеместно. Не стоит в рамках одного контекста смешивать оба подхода
    4. Код в идеале должен выглядеть так, чтобы было сразу понятно, что происходит и почему. Также должно быть очевидно, где и что нужно искать.
    5. В идеальном мире, код должен быть такой, что если бы тебе дали задачу "перенести это всё в веб", тебе бы вообще не пришлось никак менять код ядра (в данном случае проект QuizModel), и при этом не пришлось бы дублировать код из QuizCreator и QuizApp
    Ответ написан
    1 комментарий
  • Обновил VS до 2022, теперь как 2019, так и 2022 не работает, как мне решить эту проблему?

    @rPman
    посмотри есть ли файл по этому пути и к примеру на какой папке в этом пути облом (почти наверняка 14.31.31103 называется по другому)
    можно конечно поковырять реестр вручную и найти почему пути там неверные стоят но это потребует кучу усилий.

    я не знаю почему у тебя это произошло но переустановка или починка (кнопка repair в инсталяторе) должна решать такие проблемы

    совет, если repair не работает (точнее отрабатывает но проблема остается) удалить полностью всю студию, после пройтись по установка удаление программ и там удалить все что так или иначе качается ее (скорее там будут остатки от sql и возможно патчи), смотри просто по дате установки, все компоненты должны быть примерно с одной датой

    перед этим по уму нужно бы конфигурацию забакапить, есть такая опция в установщике, позже импортируешь, но есть у меня на этот счет сомнения

    https://docs.microsoft.com/ru-ru/visualstudio/inst...

    затем удали в реестре ветки, относящиеся к студии (надеюсь у тебя других версий нет) HKCU\Software\Microsoft\VisualStudio и HKLM\Software\Microsoft\VisualStudio затем можно вручную удалить оставшиеся файлы студии в program files и по уму надо пройтись по отсутствующим компонентам и их тоже разрегистрировать каким-нибудь клианером (я пользуюсь майрокофтовским sysinternails autoruns он показывает какие записи в реестре ссылаются в никуда)

    по уму еще надо в appdata профиля пользователя почистить от кучи файлов (там будут и кеши nuget например)

    вот тут нагуглилась майкрософтоваская утилита по удалению остатков студии

    и уже после этого, перезагрузивишсь, убедившись что все остатки студии удалены, заново запусти установку
    Ответ написан
    2 комментария
  • Задача пустых полок?

    @Akina
    Сетевой и системный админ, SQL-программист.
    no_name_0,
    Это продуктовый магазин
    чеки:
    с временем покупки
    с товарами с количеством
    с номером магазина

    Не поверишь...

    Достаточно просто чётко фиксировать количество товара, выставленное на полки либо снятое с них. Тогда количество товара на полках на основании этих сведений и сведений из кассовых чеков можно ПОСЧИТАТЬ! Ну плюс-минус на разбитое, утащенное в соседнюю секцию и брошенное куда попало, оставленное на кассе по причине, скажем, нехватки денег, украденное и т.п. Всего-то и делов, что вздрючить мерчендайзеров и наладить нормально учёт.

    А ты тут с вероятностями дурью маешься.
    Ответ написан
    Комментировать
  • Какой алгоритм оптимизации выбрать?

    @dmshar
    Не пойму.
    Вы курс оптимизации изучаете и вам надо сделать такое задание? Тогда вам должны были рассказать о преимуществах и недостатках каждого метода. Примените эти знания, что вам мешает?
    Или вы решили решать эту задачу вообще не имея ни малейшего представления о теме? И пришли сюда, что бы вам не зная ни ваших данных, ни вашей функции ни вашей задачи, ни ресурсов вашего компьютера кто-то по озарению ткнул в какой-нибудь метод. И вы ему поверите? По сути в таком случае вы просто попытаетесь переложить на кого-то ответственность за принимаемое решение?
    Ну вы же должны понимать, что по таким совершенно неинформативным признаком нельзя объективно выбрать "правильный метод".
    А если вдруг ваша функция столь сложна, что каждое значение вычисляется примерно 2 часа (что-то слабо себе это представляю. Вы что, на калькуляторе считаете, или как?) то попробуйте подбирать метод сильно упростив вашу функцию, и попробуйте на этой упрощенной модели проверить несколько методов оптимизации. Это же элементарное и естественное решение любого мало-мальски квалифицированного инженера.
    Ответ написан
    4 комментария
  • Как получить значения по новой экземпляру ключа в словаре?

    Самый простой вариант - объявить CellPos как record:
    public record struct CellPos(int X, int Y); //record struct, тк объект маленький и очень похож на value-object

    Тогда его можно будет использовать как ключ в словаре.
    Чуть сложнее вариант, или если ты используешь старую версию языка и рантайма (очень советую обновиться, если возможно):
    Самому добавить методы GetHashCode и Equals.
    Про то, как они должны работать, читай тут: https://docs.microsoft.com/en-us/dotnet/api/system...

    Вариант три, если не можешь никак трогать CellPos - создай новый класс, который будет реализовывать интерфейс System.Collections.Generic.IEqualityComparer<CellPos> и передавай его в словарь (там параметр есть)
    Ответ написан
    Комментировать
  • Как прикреплять пользователей к проектам?

    BorLaze
    @BorLaze
    Java developer
    users <---> projects

    у одного пользователя один проект? one-to-one
    у одного пользователя больше одного проекта? one-to-many
    много пользователей на один проект? many-to-one
    каждый пользователь может иметь больше одного проекта, и на одном проекте может быть больше одного пользователя? many-to-many
    Ответ написан
  • .net это библиотека C#?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    .NET это платформа как Java, но лучше.
    В самом низу это загрузчик и виртуальная машина + куча библиотек.
    Все это вот все и называют .NET Framework.

    ASP.NET, ado.net и куча других это конкретные реализации какой то технологии на платформе .NET.
    Ответ написан
    4 комментария
  • Передача значения в другой класс?

    @Voland69
    Сообщением, событием, вызовом метода второй формы из первой или даже в конструкторе второй формы.
    Ответ написан
    Комментировать
  • Как спрятать пароль?

    Ведь часть исходного кода порой можно глянуть сторонними инструментами.

    Если это бэкенд, то какими ещё инструментами можно глянуть без прямого доступа к исходному коду и файловой системе сервера, где это запускается?

    А так из вариантов, как убрать его из исходников - прокидывать как параметр в конфиге или в переменных среды.
    Или использовать какое-нибудь секурное хранилище.
    Например Vault или Azure Key Vault.
    Ответ написан
    Комментировать
  • Как спрятать пароль?

    @rPman
    Что и главное от кого защищаешься? от этого зависит ответ и он будет сильно разный.

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

    Этот вариант подходит только для запущенных служб/приложений а не http rest на основе cgi или модулей веб сервера (для них понадобится запустить свою службу, запросы к которой уже будут уязвимы). Метод не даст абсолютной гарантии, так как имея доступ к файлам кода бакэнда провайдер может их проанализировать и вычислить и подменить методику на менее защищенную, в особо запущенных случаях провайдер может и в оперативной памяти машины покопаться, но это особо сложный и дорогой способ, а значит маловероятен.

    В момент запуска приложение запрашивает у стороннего сервиса пароль, сторонний сервис его передает, например после ручного подтверждения оператором/владельцем.
    Советы
    - не использовать типовые технологии и предлагаемые провайдером инструменты, иначе встает вопрос от кого тогда защищаешься то?
    - обязательно реализовать ручное подтверждение оператором, администратор знает когда перезапускается веб сервер и если к нему приедет запрос на отсылку пароля в другое время - повод забеспокоиться
    - не делать это вопрос ответной системой (типа бакэнд по rpc обращается к удаленному сервису и тот сразу возвращает пароль), так как ее легко вычислить в коде и симулировать вызов, бакэнд запрашивает, но работа сервиса начнется только после того как к нему приедет соответствующий запрос

    p.s. пример простой реализации если нужно защитить данные от приглашенного администратора (вариант с заражением им трояном пока опустим, то другими способами фиксится) - все конфиги в открытом виде хранятся в определенном каталоге, по умолчанию там тестовые данные, для проверки работоспособности проекта, а на боевом сервисе или в режиме 'in production' в этот каталог складываются правильные конфиги, например монтированием из encfs, эту операцию делает специальный человек в момент перезапуска сервера вручную.

    Само собой правильно - администратор должен не настройкой заниматься, а создавать и настраивать инструменты автоматического развертывания (например образ docker или конфиги ansible), т.е. минимум два человека - один делает всю работу но не имеет доступа к паролям, только тестовые данные, другой только проверяет работу и запускает в бой.

    Разделяй и властвуй - не держи все в одном месте, разделяй сервис на несколько, чтобы критичная информация могла быть размещена отдельно от основной логики в виде простого и дубового модуля, требующего минимального и редкого обслуживания
    Ответ написан
    Комментировать
  • Как подсчитайте процент элементов в списке с LINQ?

    freeExec
    @freeExec
    Участник OpenStreetMap
    list.Take(list.Count() * 30 / 100)
    Думаю с проверкой на 100 и исключением сам сообразишь.
    Ответ написан
    Комментировать