Задать вопрос
  • Как создать команду и организовать современный процесс разработки на C#/.NET?

    Однако, понимая, что команда застряла где-то в каменном веке, хочется хотя бы с чего-то начать.

    Ну вот с гита и начните - он вам даст нормальные возможности и для тестирования и для CI.
    Вы можете сказать - гит штука гибкая, нужно иметь какие-то требования к организации процесса чтобы подстроить под себя. Это верно, поэтому пока будете объяснять людям чем гит может быть полезен, сами поймёте что вам нужно.

    Современный процесс разработки диктуется не языком и даже не платформой, а требованиями бизнеса к гибкости, коротким релизам и быстрому MVP, а также пониманием того, что "если они могут выкатываться 2 раза в день - то и нам бы надо почаще, чем раз в 3 месяца".
    Ответ написан
  • Использование итераторов foreach?

    Nipheris
    @Nipheris Куратор тега C#
    Не должно быть duck typing в строго типизированном языке.

    Это не duck typing, это структурная типизация. Проверки, как вы могли заметить, выполняются во время компиляции, а не выполнения - где ж тут duck typing? А то что наследоваться не обязательно от опр. интерфейса - так что ж тут плохого? Язык даёт синтаксический сахар в виде foreach, задача компилятора - сгенерить код, содержащий вызовы определённых методов с определённой сигнатурой, не более. Это задача именно что для структурной типизации, когда компилятору без разницы что у вас там за класс и какие у него интерфейсы, лишь бы можно было сгенерировать нужный код, и это правильно.
    В конце-концов шаблоны в C++ работают точно также. И for-range циклы в C++ работают похожим образом (требуют чтобы были реализованы нужные методы, или свободные функции, принимающие аргумент нужного типа). В C# советуют реализовывать интерфейс, т.к. это даёт дополнительные возможности: а) передавать объект туда, где ожидается этот интерфейс (т.к. C# всё таки в основном язык с номинативной типизацией); б) контролировать что вы не забыли ничего реализовать.

    Прочитал, но по факту, класс всё равно реализует IEnumerable, просто явно об этом не заявляет.

    Не соглашусь, довольно спорный момент. Номинативная типизация говорит, что если только явное заявление о том, что мы реализуем какой-то интерфейс, даёт нам отношение is-a между классом и интерфейсом. Если мы НЕ говорим, что реализуем IEnumerable, то мы его НЕ реализуем, даже если у нас там такие же методы.

    И да, разберитесь заодно в разнице между статической и строгой типизацией, если вы не оговорились в комментарии, а действительно не понимаете разницы.
    Ответ написан
  • Как создаются большие игры на c++ или c#?

    Nipheris
    @Nipheris Куратор тега C++
    1. Разработка крупных игровых проектов имеет как минимум те же особенности, что и разработка крупных приложений вообще. Раз вопрос о движках, не будем рассматривать прочие аспекты, такие как построение игровой модели, графический дизайн игры, написание сюжета и пр. Разработка движка, как большого проекта, требует:
    - умение поставить начальные технические условия, которые будут заложены в архитектуру проекта (чтобы потом не было очень больно это всё менять);
    - умение разбить движок на крупные подсистемы и выстроить между ними необходимые интерфейсы, чтобы каждую из подсистем отдать на разработку в отдельную команду;
    - умение получить MVP в разумные сроки и строить дальнейшую разработку итеративно.

    2. Как большой проект, связанный именно с компьютерной графикой, проект движка предполагает:
    - что немалая часть кода будет писаться с учётом архитектурных особенностей аппаратуры - например, если ваш движок будет пытаться передавать слишком много данных по шине на видеокарту (постоянно гонять геометрию/текстуры), то скорость шины быстро станет узким местом и никакое новейшее оборудование вам не поможет.
    - что графический код рано или поздно может потребовать мелких оптимизаций (вплоть до переписывания супернагруженных мест на ассемблере под каждую поддерживаемую аппаратную платформу);
    - что графический код сегодня требует серьезного понимая физики света и цветовосприятия.

    Для всех тех, кто понимает как реализовать вышеописанное, C++ и C# - лишь инструменты и жизненная необходимость, чтобы получить всё это, поэтому про знание языков даже говорить не буду, это подразумевается.
    Ответ написан
    Комментировать
  • Свой gps трекер с выводом на свой сервер?

    https://www.traccar.org/devices/

    Раз на Traccar можно натравить любой девайс из вышеуказанного списка, то и на вашу софтину тоже можно будет. Как уже сказали выше, любой нормальный трекер должен позволят прописывать хост и TCP-порт, на который он будет стучаться и передавать данные по своему протоколу.
    Ответ написан
    Комментировать
  • Как несколько раз записать в List массив с одним и тем же именем но разными значениями?

    Nipheris
    @Nipheris Куратор тега C#
    Конечно у вас будет один и тот же массив, вы ведь его один раз создали снаружи цикла.

    В C# массив - ссылочный тип. Это значит что ваша переменная anyArr хранит в качестве значения ссылку (!) на массив. Если вы скопируете значение переменной, что вы по сути делаете в строке arrList.Add(anyArr); вы скопируете эту самую ссылку на массив, но не сам массив (в результате ссылка на один и тот же массив будет помещена в список 6 раз).

    Если хотите иметь 6 разных массивов - создавайте их в цикле, или копируйте исходный, смотря что вам нужно делать. В любом случае, вам нужно 6 разных объектов типа object[] .

    Затем читайте про типы-значения и типы-ссылки в C#.
    Ответ написан
    2 комментария
  • Какая лучше практика подключения внешних зависимостей в Webpack?

    Плохо искали:
    Split add and vendor code
    This will remove all modules in the vendor chunk from the app chunk. The bundle.js will now contain just your app code, without any of its dependencies. These are in vendor.bundle.js.
    Ответ написан
    1 комментарий
  • Существует ли в Typescript возможность использования динамической памяти?

    В TypeScript нет и не может быть иной модели управления памятью, нежели в JS, т.к. TypeScript это надмножество JS, добавляющее статическую типизацию и ещё ряд плюшек. Компиляция из TS в JS происходит довольно прямолинейно, ничего вроде своего менеджера памяти или прочих абстракций там нет.

    Поэтому нужность ручного управления памятью (вы ведь это понимаете под динамической памятью?) в TS сводится к вопросу нужности ручного управления памятью в JS. Я не уверен, что последний вопрос корректен, т.к. язык - это набор готовых решений, среди которых стратегия управления памятью - вещь довольно базовая, от неё очень много зависит в языке и его экосистеме, поэтому просто так такая вещь меняться не будет, обычно такие решения принимаются ещё при создании языка и более не пересматриваются.

    Поэтому вопрос переходит к тому, какой язык вам нужен. Хотите попытаться писать браузерный код на C++? Попробуйте поэкспериментировать с WebAssembly.
    Ответ написан
    Комментировать
  • Дружба C# и Linux, как?

    Nipheris
    @Nipheris Куратор тега C#
    Гуглите .NET Core / Mono.
    Ответ написан
    Комментировать
  • Формирование класса С++?

    Тот код что в вопросе нужно поместить в хедер, затем тело конструктора перенести из хедера в cpp-шник.
    Ответ написан
    Комментировать
  • Куда исчезает память с диска "С"?

    TreeSize Free для начала. Ну и сразу посмотрите размер файла подкачки (pagefile.sys) и сколько жрёт файл гибернации (hyberfil.sys) в корне диска. Чтобы иметь файловый менеджер который не скрывает лишнего от ваших глаз, можно установить Far Manager.
    Ответ написан
    3 комментария
  • Как организовать сложную бизнес-логику?

    Nipheris
    @Nipheris Куратор тега C#
    Такой подход называется реактивное программирование. и реализован в библиотеках Rx.NET и ReactiveUI. Бизнес-логику он вам проще не сделает, но организовать зависимости между тем какие значения как вычисляются - поможет (благодаря декларативному подходу к описанию зависимостей).
    Ответ написан
    Комментировать
  • Мёртв ли QML? Стоит ли забыть раз и навсегда о кроссплатформенных гибридных приложениях на Qt?

    Nipheris
    @Nipheris Куратор тега C++
    Моё мнение таково:
    1) популярность QML на "том же Upwork" зависит от популярности C++ на "том же Upwork";
    2) C++ - язык крупномасштабной командной разработки, либо же разработки узкоспециализированной;
    3) заказы на крупномасштабную командную разрабоку всегда будут составлять лишь небольшую часть заказов на Upwork ввиду природы этого ресурса (т.к. на этом ресурсе не только крупные заказы а ЛЮБЫЕ заказы);
    4) вывод: Upwork - плохой критерий оценки пригодности QML для продакшена.

    Что касается React Native - это инструмент для задействования frontend-рабочей силы в сфере, где специалист QML/C++ будет более дорогим. Это разумный выбор для приложений и компаний, где ещё нет C++ разработчиков но есть JS разработчики, и где ещё нет C++ кодобазы, но есть JS, либо ещё нет никакой вообще.

    Примерно с таким же успехом я могу заявить, что Electron - лучший инструмент для продакшен-десктопа. Ну понятно наверное о чём я говорю.
    Ответ написан
    1 комментарий
  • Как организовать хранилище пакетного менеджера?

    Я бы не взялся отвечать сколь либо конкретно на ваши вопросы, т.к. всё это очень сильно зависит от конкретных задач, которые будет решать ваш пакетный менеджер. Непонятно, системный ли это пакетный менеджер, вроде RPM или Windows Installer, или это пакетный менеджер для языка/экосистемы вроде NPM.

    Также непонятно и о каком хранилище вы говорите. Вероятно ваш пакетный менеджер будет клиент-серверным комплексом. Ваши вопросы касаются хранилища для сервисного компонента или способ хранения/установки пакетов на той машине, где они "потребляются" вас тоже интересует?

    Что для вас безопасность? Доступ к каким операциям и ресурсам в вашем программном комплексе вы хотите ограничить?

    Вам следует задать гораздо более узкий вопрос, а для этого сначала нужно продумать задачу самостоятельно. Если вы не знаете с чего начать - тогда либо ваши цели вам поставил другой человек, и нужно уточнить у него, либо, если эти цели вы сами себе поставили - вам надо понять, что вам хочется/нужно. Начните с изучения существующих решений, хотя бы чтобы понять, что "пакетный менеджер" - слишком шиорокое понятие, чтобы рекомендовать что-то конкретное.
    Ответ написан
    1 комментарий
  • Использование библиотеки не имеющей typescript d.ts?

    Ответ очевиден - написать type definitions самостоятельно.
    Ответ написан
    4 комментария
  • Какую вы знаете литературу о внутренностях С++?

    Nipheris
    @Nipheris Куратор тега C++
    Advanced C and C++ Compiling
    Linkers and Loaders.

    Да, на английском. Советую таки читать в оригинале:
    а) меньше неточностей;
    б) будете привыкать к терминологии, рано или поздно будете понимать быстрее чем в переводе;
    в) не все книги переведены (сильно не все, особенно такие).
    Ответ написан
    Комментировать
  • Как лучше организовать структуру и связь между проектами?

    Nipheris
    @Nipheris Куратор тега C#
    Какая версия VS? Какой тип проекта? Есть возможность использовать новую проектную систему? Если да, то PackageReference и вперёд.

    Если нет - то через packages.config, как и всегда. Собирать нюгет-пакеты, если есть зависимости между солюшенами - правильная мысль. Нужны ли вам несколько солюшенов - сходу не скажешь, Payments выглядит адекватно как самостоятельный солюшен, Data - непонятно что это.
    Ответ написан
    Комментировать
  • Как операционная система понимает, сколько нужно очистить память?

    Nipheris
    @Nipheris Куратор тега C++
    Факт 1. malloc и free реализуется не ОС, а рантайм-библиотекой языка C/C++. Да, безусловно, время от времени рантайм библиотека делает системные вызовы для того чтобы получить от ОС адресное пространство, но делается это далеко не на каждый malloc/free.

    Факт 2. Вам нужно чётко понимать, что работаете вы со средствами языка и стандартной библиотеки языка, а не ОС. Если на каком-то устройстве скомпилированная программа на C должна работать без ОС, то и способы реализации функционала malloc/free будут иные.

    Факт 3. Алгоритмы, реализующие работу malloc и free, хранят довольно много служебной информации для себя, в частности размер и положение выделенных блоков. Вы не имеете непосредственного доступа к этой информации, но это не значит что её нет. Её достаточно как минимум для того, чтобы выделять вам новые блоки и корректно освобождать старые. Такие алгоритмы называются менеджерами памяти. Кстати в этой незамысловатой статье на вики написано о так называемой иерархии менеджеров памяти. Если вы ознакомитесь с этим понятием, узнаете наверняка больше, чем из всех ответов вместе взятых.
    Ответ написан
    Комментировать
  • Можно ли получать OHLCV из coinigy?

    Вы или непонятно спросили или невнимательно смотрели: https://www.coinigy.com/bitcoin-data/ .

    Вот схемы таблиц для тиковых данных и для баров (внизу страницы): historical-data-schema.png
    Вроде вам должно подойти (в принципе чего ещё можно хотеть-то..).

    Update: не сразу понял что речь об API. Видимо это лучше что доступно: docs.coinigy.apiary.io/#reference/market-data/mark... . Конечно если вам для личных непродакшен целей, можно попытаться брать данные из терминала, но не факт что это будет просто, да и им это не понравится.
    Ответ написан
  • Почему автозагрузка программы не работает С# WPF?

    Nipheris
    @Nipheris Куратор тега C#
    В современной Винде приложения, требующие повышения привелегий, можно нормально запустить только с помощью планировщика заданий. Повышение привелегий (которое в свою очередь приведёт к срабатыванию UAC, если он включён) невозможно для программ в автозагрузке (неважно в папке или через реестр).
    Ответ написан
    1 комментарий