• Почему 0,5 округляется до чётного числа?

    igolets
    @igolets
    Программист C#, MSSQL
    Я когда-то даже написал на эту тему статью.

    https://habr.com/ru/articles/801899/
    Ответ написан
    Комментировать
  • Как сделать кнопку Инфо?

    igolets
    @igolets
    Программист C#, MSSQL
    Есть такой проект, FontAwesome, в основном его используют для веба, но есть библиотеки для десктопа. Например, вот https://awesome-inc.github.io/FontAwesome.Sharp/

    Эта библиотека предлагает свой набор контролов (появляется в тулбоксе в виде отдельной группы).
    Вот такое можно сделать:
    659fa5230f7f5417068805.png
    Ответ написан
    Комментировать
  • Что стоит учить с или c++ или c#?

    igolets
    @igolets
    Программист C#, MSSQL
    На C/C++ имеет смысл смотреть в случаях:
    1. Если есть в планах разрабатывать ПО, которое работает с железом на низком уровне.
    2. Если есть в планах разрабатывать высокопроизводительное ПО.
    3. Если есть в планах разрабатывать ультра-портируемое ПО.
    4. Если есть желание разобраться как ПО на любом другом языке переводится в машинный код и как его оптимизировать.

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

    Касательно C# — я бы сказал, что он похож скорее на Java, чем на C. Как минимум, внутренней логикой. Его хорошо использовать для разработки разного рода прикладного ПО, быстрой разработки, обучения — много готовых инструментов, прощает многие ошибки. Ещё для обучения хорош Pascal — его создавали специально для этих целей.

    Учить C# рекомендую по экзаменационным курсам Microsoft — в них довольно последовательное изложение, покрывающее все существенные темы. Для C# это "Exam Ref 70-483 Programming in C#" (сам экзамен отменён с 2021, но знания особо не устарели ;) книжку в виде PDF можно найти в поиске за пару минут).

    И ещё момент — в вопросе явно не было указана степень знакомства с темой, но от себя рекомендую уделить пристальное внимание структурам данных и алгоритмам. Без этих знаний преобразовать задачу в код будет очень сложно и больно от изобретаемых велосипедов.
    Ответ написан
    Комментировать
  • Какой хостинг выбрать для ТГ бота на .Net?

    igolets
    @igolets
    Программист C#, MSSQL
    Как опцию предлагаю рассмотреть бессерверный бот. До какого-то количества вызовов вообще будет бесплатно.
    https://habr.com/ru/articles/752658/
    Ответ написан
    Комментировать
  • Как найти работающую от сети замену смартфону?

    igolets
    @igolets
    Программист C#, MSSQL
    Тут Infinix Note 30 недавно презентовали. Там обещают функцию питания в обход батареи.
    Ответ написан
    Комментировать
  • Как к триггеру привязать делегат?

    igolets
    @igolets
    Программист C#, MSSQL
    Триггеры, к сожалению, напрямую не предназначены для вызова кода. Но код можно вызывать косвенно. Навскидку могу привести следующие варианты:
    1. DataTrigger может биндится через конвертер, соответственно, будет вызываться код конвертера с передачей данных из модели. Пример https://itecnote.com/tecnote/c-wpf-calling-method-...
    2. EventTrigger может запускать TriggerAction. Можно написать свой TriggerAction и этот код будет вызываться по триггеру. Пример https://putridparrot.com/blog/a-simple-wpf-trigger...
    3. Ну и по-простому можно триггером выставлять свойство контрола, а изменение свойства обрабатывать обработчиком.
    Ответ написан
    Комментировать
  • Стоит ли переписывать старый проект на .NET6 (на голом энтузиазме)?

    igolets
    @igolets
    Программист C#, MSSQL
    Я бы предложил попробовать скушать этого слона по частям, а не замахиваться на переписывание всего с сразу.
    По мере появления новых задач локально (в тех местах, которые уже затронуты изменениями) приводить код в порядок — добавлять асинхронность, приводить в порядок типы, обновлять библиотеки.
    Собственно, на .Net6 свет клином не сошёлся, плохой код (как и хороший) можно писать на любой версии
    Ответ написан
    Комментировать
  • Почему не могу добавить компонент в Win Form?

    igolets
    @igolets
    Программист C#, MSSQL
    Обычно контрол в панели появляется если открыт дизайнер подходящий (по версии .Net и т.п.).
    Ответ написан
    Комментировать
  • Почему Студия игнорирует настройки gitignore?

    igolets
    @igolets
    Программист C#, MSSQL
    Файл .gitignore с точкой впереди названия?
    Он лежит в одной папке с папкой .git?
    Если другим клиентом пользоваться (TortoiseGit/Sourcetree), там тоже показываются файлы из игноров?
    Ответ написан
    Комментировать
  • Как обеспечить зависимость от проекта другого решения в visual studio?

    igolets
    @igolets
    Программист C#, MSSQL
    Вопрос сформулирован немного скомкано, поэтому отвечу кратко.
    Вот я уже отвечал на похожий вопрос https://qna.habr.com/q/1201580#answer_2231234
    Ответ написан
  • Имеет ли смысл использовать паттерн MVVM в приложении Winforms?

    igolets
    @igolets
    Программист C#, MSSQL
    1. WPF немного адаптирован для MVVM, но это не обязательно — масса примеров в родной документации не использует никакого MVVM. Так что я бы не связывал выбор использования MVVM с WPF.
    2. Есть готовые библиотеки для WinForms, которые умеют делать легкий MVVM. Лично я, например, работал с DevExpress и на мой взгляд, из коробки он дает даже больше, чем WPF (например, есть встроенные сервисы работы с попап окнами). Так что использовать MVVM на WinForms не сложнее, чем на WPF.
    3. И раз мы отделили вопрос MVVM от WPF/WF, нужно принципиально решать вопрос использовать ли MVVM в конкретном проекте.
    4. И, собственно, вопрос использование MVVM имеет плюсы и минусы. Плюсы — сопротивление хаосу при массированных изменениях кода, уменьшение человеческого труда при тестировании. Минусы — больше кодинга (накладные расходы на раздельную реализацию VM + юнит-тесты), не устраняет ручное тестирование до конца. Использовать MVVM без юнит-тестов смысла особо не вижу — кодить больше, выгоды никакой.


    Лично мое мнение — если нужна простая утилита «для себя», которую один раз написали и не трогают, я бы писал быстро (без MVVM и тестов). А если её будут менять, в том числе другие разработчики, а цена ошибки — деньги (например, если админятся данные клиентов по контрактам), то лучше MVVM и тесты.
    Ответ написан
    Комментировать
  • Какие приложения в jira (или другой софт) помогают отслеживать эффективность программиста?

    igolets
    @igolets
    Программист C#, MSSQL
    1. Оценивать эффективность работы, не понимая принципов разработки не получится — как минимум, высок риск демотивировать программистов.
    2. Если есть проект и в нём руководитель проекта, который занимается именно проектом, но не понимает в разработке, то по классическим структурам команд (из того же PMBOK) нужен отдельный функциональный менеджер, который будет понимать в программировании и будет отвечать за производительность (требования, собеседования, инструменты, оценки и т.п.)
    3. Эффективность очень сильно привязана к особенностям процесса разработки (agile/waterfall), особенностям проекта (например, какие цели — быстрее выдать результат, или обеспечить качество).
    4. Заставлять сотрудников отмечать время недостаточно. Если им не разъяснено зачем это нужно делать (какие могут быть последствия), они, как умные люди, начнут что-то сами себе соображать и искажать статистику. А если проверяющий не понимает их работы, то не сможет ничего обоснованно предъявить.
    5. Ну и есть у меня предположение, что за формально озвученным вопросом ("как следить за эффективной работой") скрывается настоящий вопрос ("не укладываемся в сроки/бюджеты", например). Хорошо бы начать с него, не всегда проблема решается с помощью таймшитов, возможно, у вас проблема с изменениями требований или вообще ошибочно выбрана архитектура ;) Учитывая, что в вопросе озвучен только один ПМ (без знания программирования) и ни одного технического "офицера", тут попахивает потерей управления вообще.
    Ответ написан
    Комментировать
  • Как сделать так, чтобы Git в VisualStudio не выгружал удаленные из проекта директории?

    igolets
    @igolets
    Программист C#, MSSQL
    Если удалить проект из солюшена, то связанная с ним папка не удаляется.
    Соответственно, чтобы удалить файлы, это нужно делать физически через «проводник».

    На счёт веток не понял вопрос. Если речь про git branches, то удаление для git — это обычный коммит, он попадет в другие ветки только при merge. Если ветку с удаленной папкой проекта смёрджить во вторую, то во второй файлы удалятся, если нет — не удалятся.

    При переключении с ветки, где папка проекта удалена на ветку, где она есть, файлы гитом создадутся в состоянии, в котором они были залиты в ту ветку.

    При переключении обратно — файлы должны удалиться.

    Есть шанс, что файлы не удалятся, если переключаться с ветки, где папка есть и добавлена в репозиторий в ветку, где этого проекта с папкой и файлами никогда не было.
    Ответ написан
    Комментировать
  • Как организовать структуру заказов в БД (общепит)?

    igolets
    @igolets
    Программист C#, MSSQL
    Что-то мне подсказывает, что (скорее рано, чем поздно) возникнет задача построить отчет по отказам. В этом случае я бы эту таблицу оставил как есть, но добавил ещё таблицу с отказами, с полями "заказ, блюдо, количество, пользователь, дата".
    Из бонусов — в обе таблички данные будут только добавляться, можно подбирать тип БД, который умеет в быструю вставку, с репликацией чуть проще...

    На счёт частичной оплаты не понятно — зачем вообще такое, почему недостаточно оплачивать всё и сразу. И зачем отслеживать какие именно позиции оплачены.
    Ответ написан
    2 комментария
  • Как я могу увидить те же папки на своем пк что и на android смартфоне?

    igolets
    @igolets
    Программист C#, MSSQL
    Я бы попробовал ещё команду adb shell.

    Но хранилища приложений (базы данных, кэши) так, скорее всего, увидеть не получится. Если аппарат не рутованый, то можно попытаться (шансы невелики, если честно) поперебирать приложения через команду adb run-as package_name

    Если вдруг какое-то из них будет допускать отладку, то этой командой можно будет выполнять дальнейшие команды от имени приложения, тот же ls. И посмотреть структуру скрытых данных.
    Ответ написан
    Комментировать
  • Как можно получать или ссылаться на переменные с двойным подчеркиванием при помощи sub classov?

    igolets
    @igolets
    Программист C#, MSSQL
    Вот статья по теме: https://learn.microsoft.com/en-us/aspnet/core/fund... Раздел "Environment variables".
    Там есть пример, ссылка на код (на GitHub) и вызов
    set MyKey="My key from Environment"
    set Position__Title=Environment_Editor
    set Position__Name=Environment_Rick
    dotnet run


    Собственно, под капотом следующее (тут сборная солянка, из разных классов):
    // из public class Startup
            public void ConfigureServices(IServiceCollection services)
            {
                services. Configure<PositionOptions>(Configuration.GetSection(
                                                    PositionOptions.Position));
                services.AddRazorPages();
            }
    
    // из кода, который обращается к настройкам
        public class PositionOptions
        {
            public const string Position = "Position";
    
            public string Title { get; set; }
            public string Name { get; set; }
        }
    
            public Test2Model(IOptions<PositionOptions> options)
            {
                _options = options.Value;
            }
    
            public ContentResult OnGet()
            {
                return Content($"Title: {_options.Title} \n" +
                               $"Name: {_options. Name}");
            }

    Т.е. в Вашем случае нужно:
    1. сделать класс ApiConfig (по образцу PositionOptions из примера выше)
    2. в Startup вызвать services. Configure, передав данные класса ApiConfig
    3. в коде, который дожен работать с ApiConfig запросить в конструкторе IOptions<ApiConfig>


    Второй вариант доступа такой:
    var title = Configuration["Position:Title"];
                var name = Configuration["Position:Name"];
    Ответ написан
    1 комментарий
  • Выбор архитектуры: web или desktop?

    igolets
    @igolets
    Программист C#, MSSQL
    Я бы тут ещё попробовал ответить на следующие вопросы:
    1. Какие требования к срокам выпуска приложения?
    2. Как часто будет меняться приложение?
    3. Какой перечень клиентского оборудования и операционных систем? Будут ли это планшеты на iOs, например. Если только ноуты с одинаковой операционкой — то почему?
    4. Какая интеграция с десктопом потребуется? Например, запуск в режиме киоска (без элементов операционной системы), горячие клавиши, локальная БД, интенсивные вычисления, лимиты памяти, нестандартные элементы управления (джойстики и т.п.), внешние динамики/мигалки/дисплеи, контроль активности пользователя.
    5. Много ли экранных форм и насколько они разнообразны?
    6. Какой опыт у разработчи(ка/ков)


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

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

    Удачи!
    Ответ написан
    Комментировать
  • Как реализовать подписку юзеров на других?

    igolets
    @igolets
    Программист C#, MSSQL
    Это нужно погуглить по ключевым словам "entity framework many to many fluent".

    // к User добавить 
            // Subscribers
            public ICollection<UserSubscriptions> Subscribers { get; set; }
    
    // при конфигурировании датаконтекста использовать следующий fluent синтаксис
    modelBuilder.Entity<User>()
       .HasMany(u => u.Subscriptions)
       .WithMany(u => u.Subscribers)
       .Map(cs =>
       {
           cs.MapLeftKey("UserId");
           cs.MapRightKey("SubsUserId");
           cs.ToTable("UserSubscriptions");
       });
    Ответ написан
    Комментировать
  • Как ораганизовать репозиторий для команды?

    igolets
    @igolets
    Программист C#, MSSQL
    Тут важный вопрос. Общие части системы можно редактировать, или нет?

    Если нет — можно вынести их в отдельные репы, собирать из них nuget модули и публиковать в частном nuget репозитории.

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

    1. Сделать репозитории для небольших подсистем
    2. Для каждого проекта сделать по репозиторию, составить список подсистем, которые в нём используются и
    3. В репозиторий проекта добавить подсистемы через https://git-scm.com/book/en/v2/Git-Tools-Submodules
    4. Добавить код, уникальный для проекта в виде отдельных папок в репозитории проекта.
    5. Постараться не запутаться во всём этом великолепии и не сломать друг другу работу.


    Ещё есть вариант отказаться от монолита, удариться в микросервисы. Тогда каждый кусок проекта будет независимым и можно будет его вынести в отдельную репу. Но тут может быть много работы по распилу монолита.
    Ответ написан
    1 комментарий