• Как сделать такую конструкцию на C++?

    Nipheris
    @Nipheris Куратор тега C++
    std::vector<std::vector<int>> vector_of_vectors;
    vector_of_vectors.push_back({ 1,1,1,1,1 });
    std::cout << vector_of_vectors << std::endl; // [[1,1,1,1,1]]
    vector_of_vectors.push_back({ 1,1,1,1,2 });
    std::cout << vector_of_vectors << std::endl; // [[1,1,1,1,1],[1,1,1,1,2]]

    https://ideone.com/GIV9dW
    Ответ написан
    Комментировать
  • Как организовать структуру проекта на Node.js правильно?

    Разработчики объясняют это тем, что они используют TypeScript, и он находится в папке src, поэтому вот так все собирается

    Логично, нормальное решение.

    Не нравится идея копировать dist и все вложенные папки

    А в чём проблема? В dist не должно быть лишнего хлама, .git и прочего добра, по сути это готовая сборка приложения для деплоя, почему бы её не скопировать?

    Не рекомендуют запускать npm install заново на сервере, так как по их мнению могут подтянуться совсем другие версии

    А нехрен позволять npm-у ставить нефриженную версию в package.json. Нам вот уже настохорошело что проект ломается сам по себе из-за выхода новых версий библиотек, и мы зафризили все пакеты. Это нормальная ситуация, если у вас не библиотека, а конечное приложение. package-lock.json пытались использовать, но потом отказались - в версиях NPM 5.0-5.2 он работал отвратительно, сейчас уже может получше, не знаю.
    Ответ написан
  • Как реализовать инкапсуляцию в JS?

    Ваш getNode будет работать некорректно, т.к. каждый раз будет перезаписываться в прототипе при создании нового объекта. Т.е. при вызове getNode для любого объекта Timer всегда будет извлекаться значение одной и той же переменной - захваченной при последнем создании объекта.

    Более правильная реализация:
    https://developer.mozilla.org/en-US/docs/Web/JavaS... , Emulating private methods with closures

    проблема у такого подхода - всё это делается ценой рантайма - на каждый объект будут свои инстансы методов. Хотите нормальную инкапсуляцию? Берите TypeScript.
    Ответ написан
    Комментировать
  • Как тестировать приложение, способы и подходы?

    Nipheris
    @Nipheris Куратор тега C++
    проверка "правильности/соответсвия" возвращаемых данных определенными функциями

    Это есть модульное тестирование, см. Catch.
    проверка на используемую память(сколько используется, было использованно за весь цикл существования приложения)

    Погуглите "memory profiler" (например, valgrind.org/docs/manual/ms-manual.html ). Я обычно в Студии профайлю, с автоматизацией этого процесса пока не сталкивался, но думаю возможно.
    проверка правильности порядка записи в бд

    проверка того что в сеть уходят данные которые ожидаются от программы

    Тут вам нужно замокать клиента к бд и сетевой сокет/поток (в зависимости от того как это всё реализовано, без подробностей сложно советовать), и вместо реальной отправки данных/записи в базу делать нужные вам проверки.
    Ответ написан
    Комментировать
  • На какие слои должен (может) разделяться ЯП и его компилятор?

    Насколько правильна такая модель работы?

    Расскажите подробнее, какая задача решается. Если бы вы спрашивали про обработку ЯП общего назначения, указав целевой язык для компиляции (например, "TypeScript в JavaScript" или "Java в JVM"), то ваши цели были бы понятны. Но у вас декларативный язык, и другие цели, не указанные в вопросе. Судя по примеру API цель - предоставить объектную модель? Или сгенерировать выходное представление на другом языке?

    возможности напрямую считывать императивные команды, вроде "создай тип Х", "добавь ему поле Y"

    Хоть я до конца не понял ваших целей, мне кажется это плохой идеей - не вижу смысла добавлять императивность там, где есть декларативное описание, тем самым вы потеряете часть информации о вашем декларативном представлении и привнесёте паразитную - например, зависимость от порядка исполнения этих опкодов. Оно вам зачем? Ведь мы как раз стараемся избавляться от такой паразитной информации, когда используем DSL с собственным синтаксисом вместо ЯП общего назначения (вспоминаются всякие ORM маппинги записанные кодом на C#, где код как бы императивный, но порядок декларативных инструкций на самом деле значения не имеет).
    В этом ВОЗМОЖНО был бы смысл если ваша цель - сгенерировать императивный же код на разных целевых языках. Ну не знаю, например валидаторы. Валидатор на C#, валидатор на JavaScript, валидатор на PHP. Тогда да, возможно стоило бы использовать такое промежуточное представление, и то непонятно был бы от него толк или вред.
    Ответ написан
    1 комментарий
  • C# variadic templates?

    Nipheris
    @Nipheris Куратор тега C#
    Нет, прежде всего потому что дженерики в шарпе - это не шаблоны, и работают они не на уровне AST, как в плюсах.
    Ответ написан
    Комментировать
  • Как вызвать функции одного потока в другом?

    Nipheris
    @Nipheris Куратор тега C++
    Вы не можете вызвать "функции одного потока в другом". Каждый поток должен сам вызвать то, что ему нужно.

    Чтобы это реализовать, вы можете, к примеру, организовать циклы обработки сообщений и обмениваться сообщениями между потоками.

    Более конкретно ответить можно только зная какими библиотеками и API вы пользуетесь в вашем проекте.
    Ответ написан
  • Как делать GLSL шейдеры???

    Nipheris
    @Nipheris Куратор тега C++
    0. Бросать ли мне OpenGL?

    Не забудьте C++ дальше учить.
    1.Возможно ли создание шейдеров OpenGL на Visual Studio?(он же вроде с Директом дружит)

    А что конкретно от Студии нужно? Файлы редактировать сможете, расширения для подсветки тоже были, думаю сможете найти. С дебагом вроде не так круто как с HLSL, но вам может пока и не надо.
    2.Какое расширение должно быть у кода, самого шейдера?

    .frag/.vert или .frag.glsl/.vert.glsl или просто .glsl, это всё условность, загружать текст шейдеров всё равно вы сами будете.
    3.Как собрать шейдер, и где мне найти линковщик, компилятор?

    glSharedSource/glCompileShader - пока этого будет вам достаточно.

    Уже бесит меня этот OpenGL. Знал что будет не просто, но чтобы настолько.

    Видимо у вас наивное представление о предмете разговора.
    OpenGL - это графическое API, которое используется как в академической, так и в профессиональной среде. Оно конечно заметно проще чем Vulkan или тем более Direct3D, но всё-таки это не учебное API. Современные версии OpenGL отвечают требованиям даже крупных игровых проектов, т.е. у современного OpenGL достаточно продвинутая архитектура, отвечающая темпам развития графического оборудования.
    Иными словами, вы выбрали в общем-то профессиональный инструмент, и вы пока что к этому не готовы. GLSL - это отдельная большая история, он требует знаний не меньше, чем весь остальной OpenGL. По языку шейдеров пишут самостоятельные книги, по нему даже соревнования проводят на всяких сценерских движухах - кто круче шейдер напишет за ограниченное время.

    Это я пишу не чтобы отбить у вас желание учить, а для того чтобы вы понимали, что в IT и программировании есть достаточно сложные и объёмные вещи, которыми с разбегу не овладеешь. Если вы ещё и C++ только начали учить, но вам тем более тяжело должно быть. Я впервые сделал что-то потребное на OpenGL только на 4-м курсе, уже чувствуя себя комфортно в плюсах.
    Ответ написан
  • Есть ли аналог TeamViewer для локальной сети?

    У вас стоит тэг Windows - поэтому конечно RDP, о чём тут можно говорить-то. Зачем вообще в локальной сети задумываться о TeamViewer и аналогах. Этот TeamViewer я смотрю хорошо заходит - все уже и забывают про "родные" протоколы.
    Ответ написан
    1 комментарий
  • Нужен ли уникальный идентификатор для связующей таблицы?

    А разве в вашей таблице "Личности фильма" первичный ключ не появляется естественным образом? Зачем ещё нужен суррогатный?
    Ответ написан
    Комментировать
  • В каких случаях пишут на C вместо C++?

    Nipheris
    @Nipheris Куратор тега C++
    Допустим есть команда профессиональных, финансово-неограниченных, C/C++ программистов, которые предпочитают писать на C++, но были вынуждены выбрать язык C для решения следующих задач....что это за задачи и почему?

    1. Низкоуровневые задачи, где нужно иметь минимум абстракции от оборудования. Я лично хоть и не разделяю анти-C++ настроений Линуса, вполне согласен с тем что ядру полезно быть написанным на Си. В C++ есть довольно много абстракций, влияющих на исполнение кода, есть некоторые вещи "под капотом", которые могут быть недопустимы в низкоуровенвом коде.

    2. Большие проекты, где сложно форсировать code-style. С++ - это такой язык... Он настолько разнообразен, что прежде чем некая команда сядет писать код, она должна выбрать некоторое ПОДМНОЖЕСТВО языка, и использовать его. Иными словами, Плюсы - это большой ящик с инструментами, и вовсе не обязательно (даже вредно) использовать сразу все. Важно отказываться от каких-либо возможностей или практик, особенно устаревших (а таких в C++ немало, "идиоматический" код на C++03 и C++17 - очень разный). Кто не хочет со всем этим заморачиваться (вспомним опять таки Линух - огромный проект с огромным числом участников) - вполне могут выбрать Си. Ведь можно считать, что выбор языка Си - это выбор только необходимого инструментария из того что предлагается в C++ (только помните что сейчас это всё-таки разные языки).

    3. Программирование в сильных ресурсных ограничениях. Например под микроконтроллеры. Хоть в С++ программист "не платит за то чем не пользуется", иногда стандартные реализации различных механизмов недопустимо тяжелы или неэффективны. Например, если у вас очень медленный чип или мало памяти, возможно вы заходите свою собственную реализацию полиморфизма. Какой тогда смысл говорить что вы пишете на C++, если не сможете использовать его механизмы и то, что предлагает компилятор.
    Ответ написан
    Комментировать
  • Как получить доступ к enum из другого класса?

    Nipheris
    @Nipheris Куратор тега C#
    Вместо searchWindow.searchType.employByRoom
    нужно Search.searchType.employByRoom

    И дайте уже всем нормальные имена.
    Ответ написан
    3 комментария
  • Как вывести последние n элементов map?

    Nipheris
    @Nipheris Куратор тега C++
    #include <string>
    #include <map>
    #include <algorithm>
    #include <iostream>
     
    int main() {
        std::map<int, std::string> m {
            { 1, "one" },
            { 2, "two" },
            { 3, "three" },
            { 4, "four" },
            { 5, "five" },
            { 6, "six" },
            { 7, "seven" },
            { 8, "eight" },
            { 9, "nine" },
            { 10, "ten" },
        };
     
        auto from = m.end();
        // откатываемся назад на 5 элементов (возможно есть способ покрасивее)
        for (int i = 0; i < 5; i++) {
        	from--;
        }
     
        std::for_each(from, m.end(), [](auto&& pair) {
            std::cout << pair.first << ": " << pair.second << std::endl;
        });
    }


    https://ideone.com/bUps4b
    Ответ написан
    Комментировать
  • Как реализовать команды Microsoft SQL Server в C# windows forms?

    Nipheris
    @Nipheris Куратор тега C#
    У DataAdapter-а проставить SelectCommand в select * from Classes where Класс=5
    Ответ написан
    Комментировать
  • В чём причина постоянного переделывания кода?

    Заказчик хочет чтобы разработчик сделал сложное приложение.

    Причина 1: обычно заказчик хочет, но не знает чего конкретно. Фишка в том, что разработка приложения, у которого ещё нет аналога - это... не только разработка приложения. Это ещё и выяснение того, что действительно нужно, начиная с пожеланий по UX, и заканчивая оптимизацией бизнес-процессов во всей компании (это когда заказчик внезапно говорит "слушайте, и правда, на кой чёрт мы печатаем эту накладную каждый раз").

    КПД получается крайне низок.

    Причина 2: вы не учитываете причину 1 при расчёте КПД и думаете, что проделали мало работы. Да, приложение ещё не готово или делается очень долго, но это не потому что вы мало работаете, а потому что работы намного больше, чем казалось.

    но идёт на удаление или переделку из-за того, что что-то не так.

    Причина/особенность 3: иногда это неизбежно: бизнес меняется, потребности - тоже.
    Иногда этого можно избежать, не заводя требования слишком "далеко" - очевидно, нет смысла реализовывать то, что УЖЕ СЕЙЧАС кажется неподходящим под требования, НО это далеко не всегда вовремя замечают. Над проектом работает много людей, у всех немного разные представления о задаче, или ещё хуже: не все и далеко не всегда говорят о проблемах с системой, которые уже виднеются "на горизонте", говоря что "в ТЗ всё написано, а мы делаем по ТЗ". Можете погуглить статьи о стоимости ошибок на разных этапах разработки.

    Причина 4: заказчик, разработчики или и те и другие не умеют останавливаться и выбирать необходимый и достаточный функционал для первого или очередного релиза. Я в последнее время убеждаюсь, что это целая наука - вовремя остановиться и не расширять список "супернужных" фич, из которых треть окажется почти невостребованными. Особенно часто это бывает, когда бизнес уже работает как-нибудь (например, на экселевских табличках или Access-овских базах), а теперь пришла пора автоматизации, но релиз постоянно откладывается, потому что "и это хочется, и то бы сразу сделать". Иными словами, иногда нужно решиться на гарантированные переделки в будущем ради релиза сейчас. Оценка возможности и стоимости таких "переделок" - т.е. подождать и переделать сейчас или зарелизиться и переделать потом (соответственно, с удорожанием "переделок") - и есть та самая наука. Разработчик обычно видит только архитектуру, и раньше понимает её недостатки/ограничения, ему сложно решиться на релиз того, что не будет идеально решать поставленную задачу.
    Ответ написан
    Комментировать
  • Как растянуть элемент canvas на всю оставшуюся ширину?

    Nipheris
    @Nipheris Куратор тега C#
    Превратите горизонтально-ориентированный StackPanel, т.е. тот, в котором у вас канвас, в DockPanel (тэг Orientation нужно будет убрать). Тогда ваш канвас, как последний из потомков, займёт всю оставшуюся доступную площадь (поведение по умолчанию). Плюс, это будет логично - ведь у вас управляющие контролы должны быть задоканы слева, поэтому логичнее использовать DockPanel.

    С Новым Годом!
    Ответ написан
    1 комментарий
  • На чем написать - REST API?

    На чем написать — REST API?

    написать ПО которое работает с REST API.


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

    Nipheris
    @Nipheris Куратор тега C++
    Готовые библиотеки для генерации видео называются - внезапно - кодеками. Вот например почему бы не упомянуть x.264. Есть и куча других. Т.к. почти все они пишутся на C/C++, из этих языков ими наиболее удобно пользоваться.

    Также нужно упомянуть FFmpeg как более общее и комплексное решение. Лучше наверное даже на него сначала посмотреть.
    Ответ написан