• Зачем делают backend на разных языках?

    Nipheris
    @Nipheris Куратор тега C++
    Подскажите зачем пишут backend на нескольких языках?

    Почему-то никто не сказал главный аргумент - в больших проектах понятие бэкенда весьма условно. В больших проектах уже нет одного веб-приложения, которое написано на одном языке и выполняется на одном-двух серверах. В больших проектах бэкенд - это уже набор сервисов, зачастую разнородных, иногда даже не общающихся между собой, а работающих непосредственно с клиентом (гуглите микросервисную архитектуру). Пример из нашей компании:
    - веб-приложение на джанге, отдающее html-контент - тут авторизация юзеров, хранение пользовательских настроек и данных;
    - сервис данных чарта - написан на Erlang для предельной стабильности и предсказуемости, а также из-за легковесных потоков (в BEAM неплохой вытесняющий планировщик);
    - сервис расчёта фин. индикаторов - написан на Java, данные отдаёт через сервис на Эрланге;
    - сервис сканирования бирж - написан на Go (много новых сервисов на нём пишем).
    - и ещё несколько более мелких сервисов.

    Каждый из этих сервисов - это даже не отдельные люди, это целые команды со своей историей, со своими требованиями к надёжности и производительности и со своей культурой в конце-концов. Сервисы очень крупные, даже если что-то не устраивает и хочется переписать на другой платформе (например, с Эрланга на Го), никто не будет этого делать просто потому что хочется, это огромные деньги и куча человеко-лет.
    Ответ написан
    Комментировать
  • Как оставить все нули в float в MongoDB?

    Поймите, что документы в Монге хранятся в JSON, а в JSON ваше 1.0 это число, и хранится оно вообще не так как показывается. Чтобы сохранить конкретное форматирование, вам нужно хранить строку а не число.
    Ответ написан
    Комментировать
  • Можно ли полноценно разрабатывать на С и не прыгать в С++?

    Nipheris
    @Nipheris Куратор тега C++
    Можно ли полноценно разрабатывать на С и не прыгать в С++?

    Да.
    Ответ написан
  • Как обрабатывать данные в wpf textbox, C#?

    Nipheris
    @Nipheris Куратор тега C#
    Вам нужна вьюмодель, к свойствам которой вы привяжете текстбоксы и команда, торчащая также из это вьюмодели, к которой вы привяжете кнопку. Читайте про MVVM, ICommand и биндинги в WPF.
    Ответ написан
    1 комментарий
  • Зачем перед слиянием ветки f1 в ветку develop, нужно сливать ветку develop в ветку f1?

    Или я что то не правильно понял?

    Да, вы не понимаете сути слияния веток в Git.

    Начнём с того, что когда вы сливаете ветки, по большому счёту не так уж важно какую ветку в какую вы будете сливать. Вы В ЛЮБОМ случае создаёте мёрж-коммит, и создание этого мёрж-коммита (и соответственно разрешение конфликтов которое происходит при создании этого коммита) подразумевает, что вы соединили вместе две ветки. Это значит что начиная с мёрж-коммита все последующие коммиты (дочерние к нему) будут иметь изменения из ОБОИХ веток. Уже не будет разницы между тем что было сделано в первой и во второй ветке, отныне "они едины" (c).

    Другой вопрос в том, в какую ветку поместить этот мёрж-коммит и УКАЗАТЕЛЬ какой из веток СДВИНУТЬ на новый мёрж-коммит. Теоретически, мы можем сдвинуть оба указателя, но в большинстве случаев нам достаточно сдвига лишь в одной ветке (и нередко только в одной из веток, в вашем случае f1, мы имеем право двигать указатель).

    Когда вы попытаетесь сделать "обратное сливание f1 в develop", если в develop ещё не успело появиться новых коммитов (не являющихся предками созданного вами мёрж-коммита), то на самом деле никакого сливания и НЕ БУДЕТ. Ведь у вас УЖЕ есть коммит, учитывающий изменения в ОБОИХ ветках. Достаточно лишь передвинуть указатель ветки develop на этот коммит. Другое дело, что решение о том, что это можно и нужно сделать, приняв тем самым изменения в ветке f1 в ветку develop, принимает мейнтенер ветки develop, а это вовсе не обязательно тот же человек, что и работающий с веткой f1.

    Почему мы сначала сдвигаем указатель ветки f1? Ну очевидно потому, что это ветка в которой ведётся разработка, и обычно принято принимать в общую ветку (коей видимо у вас является develop) уже полностью готовые правки. Готовые - это в том числе интегрированные с текущим состоянием кодовой базы. Обычно это задача работающего в ветке f1 - порезолвить все конфликты и интегрироваться со свежим состоянием develop, чтобы мейнтейнер проекта мог максимально быстро и безболезненно вмёржить f1 в develop.
    Ответ написан
    Комментировать
  • Как уничтожаются объекты значимых типов?

    Nipheris
    @Nipheris Куратор тега C#
    1. В теории реализация не обязана использовать стек для хранения локальных объектов value-типов (см. https://blogs.msdn.microsoft.com/ericlippert/2009/... ).
    2. Тем не менее, в текущих реализациях используется именно стек, поэтому всё как и в остальных языках: https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D... .
    3. Помните, что значения value-типов иногда (не всегда) хранятся на стеке. Все значения value-типов, являющиеся частью объекта ссылочного типа (например, int-поле в классе или элементы массива double) рождаются и умирают вместе с этим объектом.

    Итого:
    • время жизни локальных объектов value-типов связывается с фреймом стека;
    • время жизни объектов value-типов, находящихся в составе объектов reference-типов, связывается с временем жизни объемлющего объекта;

    Более экзотические ситуации рассматривать не будем. И вообще, как говорит Липперт (см. ссылку), лучше не думать в терминах стека, т.к. это деталь реализации. Лучше говорить о времени жизни относительно вызываемых функций и относительно других объектов.
    Ответ написан
    1 комментарий
  • Docker: как запустить консольное Desktop приложение (exe)?

    Nipheris
    @Nipheris Куратор тега C#
    Но мне нужно докерезировать обычное Десктопное консольное приложение с .net framework 3.5+

    На Windows 7, очевидно, докер будет работать только благодаря линуксовой виртуалке (кажется в VirtualBox-e). Т.к. .NET Framework никогда не работал и скорее всего не будет работать под Linux (в отличие например от Mono или .NET Core), вы не добьётесь своей цели с использованием имеющихся инструментов.

    Вам как минимум нужны нативные контейнеры (Windows Containers), доступные в Windows 10 и Windows Server 2016.

    Вот кстати неплохой пример, как раз консольное приложение: https://github.com/Microsoft/dotnet-framework-dock... . Цитаты из него:
    To complete this sample you must have Windows 10 (or Windows Server 2016), Docker for Windows, Visual Studio, and Git installed.

    You must use Windows Containers on Docker for Windows to run this image. Be sure to check that you are properly switched to Windows Containers. Do this by opening the system tray up arrow and right clicking on the Docker whale icon for a popup menu. In the popup menu make sure you select 'Switch to Windows Containers'.
    Ответ написан
    Комментировать
  • Кто может объяснить как создаётся софт для игр?

    Nipheris
    @Nipheris Куратор тега C++
    Поверхностно: вам должны быть в состоянии ответить на следующие вопросы:
    - что такое процесс в ОС;
    - что такое поток и чем отличается от процесса;
    - что такое адресное пространство процесса;
    - как пользоваться системным API в выбранном вами языке программирования.
    Разумеется, общее понимание процесса вычислений на современных машинах должно присутствовать.

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

    Nipheris
    @Nipheris Куратор тега C++
    Подумайте как использовать цикл для перебора элементов массива и что и с чем нужно сравнивать для определения максимального значения.

    Решение задачи поиска максимального значения легко ищется поисковиком.
    Ответ написан
    1 комментарий
  • Как скомпилировать в один большой запускной файл?

    Nipheris
    @Nipheris Куратор тега C++
    он зависит от большого количества so-библиотек.

    У вас два варианта:
    1. Использовать статические варианты библиотек вместо динамических (so) - это то, что предлагает Vitaly.
    2. Продолжать собирать как сейчас, но научиться собирать нормальные пакеты под нужные вам дистрибутивы, с нормальным описанием зависимостей - тогда системный пакетный менеджер при установке вашего пакета поставит все нужные вам зависимости.

    Второй вариант сложнее, но предпочтительнее, т.к. в случае критических уязвимостей в библиотеках их можно будет обновить независимо без обновления вашего приложения. Когда вы линкуете статически, очевидно что уязвимый код в вашем бинарнике можно обновить только пересборкой этого бинарника с новой версией библиотеки, т.е. без вашего участия (если код закрыт) уязвимость не устранить. Критично ли это для вас или нет - решать вам, зависит от важности вашего приложения.
    Ответ написан
    Комментировать
  • Что такое 3D математика?

    https://en.wikipedia.org/wiki/Transformation_matrix
    Видимо друг говорил о знаниях, которые нужны чтобы понять содержимое этой и подобных статей.
    Ответ написан
    Комментировать
  • Поддержка миграций или нереляционная БД?

    Невозможно ответить вам точно, т.к. вы очень размыто описали поставленную задачу.
    1. Кто меняет модель данных? Вы как разработчик, выпуская новую версию приложения или же пользователь тоже может это делать?
    2. Какого рода данные хранятся в таблицах? Реляционная у них природа или нет?

    В целом, необходимость изменения схемы не должна диктовать вам какую модель данных (и следовательно СУБД) применять. В большинстве проектов использующих реляционную БД схема рано или поздно меняется, но никто не переходит на документную модель только потому что нужно выполнять миграцию данных иил схемы.
    Ответ написан
    1 комментарий
  • Npm, как использовать локальные пакеты?

    1. Не ./node_modules/webpack/.bin, a ./node_modules/.bin/webpack.
    2. Нужно брать путь в кавычки, если используете прямой слеш и используете классическую командную строку (cmd). Т.е. итого: "./node_modules/.bin/webpack". Параметры в кавычки брать уже не нужно, т.е. "./node_modules/.bin/webpack" --watch. Можно использовать обратный слеш и не брать в кавычки.
    Ответ написан
  • В чем смысла в TypeScript?

    Комментировать
  • Как реализовать директивы препроцессора в Typescript?

    1. Берёте https://github.com/jsoverson/preprocess .
    2. Ищите лоадер для вашей системы сборки (мы используем с вебпаком).
    3. Профит.
    Ответ написан
    Комментировать
  • WPF еще не умер?

    Nipheris
    @Nipheris Куратор тега C#
    WPF умер. C# на клиенте тоже умер. C++ и Qt на клиенте умер. Нативные приложения и приближенные к ним (WPF/WinForms) вообще умерли. Нативные приложения пишут только разработчики ОС, и то до тех пор пока не перепишут их на Электроне. Электрон скоро будет модулем ядра / драйвером для повышения производительности HTML-интерфейсов.

    Просыпаюсь в холодном поту
    Фух, это всего лишь сон.

    то используй DevExpress, а не WPF

    Это как понимать? Я знаю что у DevExpress есть наборы компонентов для разных UI-технологий, а чтобы у них было своё UI-решение, не базирующееся на чём-то вроде WPF/WinForms/HTML - не слышал.

    используй ASP.NET MVC, а не Silverlight

    Т.е. генерировать только статический UI только на сервере? Почему вы сравниваете Silverlight (который кстати и правда умер, уже точно) с ASP.NET MVC, а не с HTML или HTML + React например?
    Ответ написан
    21 комментарий
  • Какая разница между интерфейсами IEnumerable и IEnumerator?

    Nipheris
    @Nipheris Куратор тега C#
    Та сущность, по которой пробегают, должна реализовывать IEnumerable.
    Та сущность, которая пробегает, должна реализовывать IEnumerator (обычно это вложенный, нередко приватно объявленный класс).

    То что вы сказали я к сожалению не понял.
    Ответ написан
    Комментировать