• Как корректно собрать C++ CUDA проект через Cmake на Linux?

    Nipheris
    @Nipheris Куратор тега C++
    cuda_compile(CudaKernel src/CUDA.cu)
    cuda_add_library(CudaKernels src/CUDA.cu)

    Подозрительно разные идентификаторы, это точно так надо? Зачем вообще этот cuda_compile? Если вы его используете, тогда вам надо то что он положит в CudaKernel подставить в cuda_add_library, например cuda_add_library(CudaKernels ${CudaKernel})

    cuda_add_executable(Mandelbrot_set $(SOURCE_FILES) CudaKernels)

    Странная конструкция. Если CudaKernels это таргет, что он делает в этом списке, где должны быть исходники?

    И должен ли src/CUDA.cu компилится дважды?
    Ответ написан
    3 комментария
  • Как запустить ещё одну копию программы под Windows?

    Sandboxie, впрочем, зависит от программы. Если она в принципе или её текущая сборка портабельна - возможно достаточно скопировать папку с ней.

    Многие браузеры можно запускать с указанием конкретного профиля (т.е. можно сделать разные ярлыки например).
    Ответ написан
    1 комментарий
  • Как организовать архитектуру взаимодействия микросервисов?

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

    Нужно придумать задачу, где сервисы будут более независимы друг от друга. Тогда и не будете мучаться чтобы понять, как сделать сервисы более автономными. В идеале любой сервис может продолжить свою работу, и реализовывать все или часть своих функций, если другие сервисы лежат. Хорошо например, если между сервисами А и Б взаимодействие реализовано через очередь сообщений - тогда упавший сервис Б после поднятия разгребёт эту очередь и выполнит всё то, что успел попросить у него сервис А пока Б лежал.

    Об аутентификации можно тоже говорить много и долго, обычно чтобы жить некоторое время без сервиса аутентификации её делают по токенам (JWT например). Тогда целевой сервис сам может проверить, авторизован человек или нет.

    Если уж так хочется бложик, то я бы оставил его в покое в виде самостоятельного сервиса, а в качестве других сервисов сделал бы:
    - уведомления о новых комментариях/постах в мессенджер/почту (как раз хорошо будет через MQ общаться с основным сервисом);
    - какую-нибудь аналитику элементарную, которая независимо собирается, например по посетителям, телеметрию короче;
    - сервис автопостов - заказываешь пост с нужным содержимым на указанную дату и время, этот сервис пользуется API основного сервиса бложика и постит что-либо без вашего участия.

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

    Nipheris
    @Nipheris Куратор тега C++
    В C++ с точки зрения языка у исключений нет базового класса или какого-то другого общего типа, представляющего всякое значение, летящее в исключении. Не забывайте, что выбросить вы можете, к примеру, целое число (хоть это и не рекомендуется).

    Поэтому встречный вопрос - если форма значения в исключении заранее неизвестна, как можно сделать что-либо с этим значением? Что вы хотите "распознать", когда поймали исключение? Какую операцию вы хотите выполнить?

    Вообще посмотрите на std::current_exception, но убедитесь, что оно вам подойдёт.
    Ответ написан
    8 комментариев
  • Как установить файлы api-*.dll?

    В установщике 2017-й Студии в Individual Components установите "Windows Universal C Runtime".
    Ответ написан
  • Какую небольшую БД стоит использовать в программе, чтобы познать азы?

    Nipheris
    @Nipheris Куратор тега C#
    Если нет необходимости в множественных коннектах к БД, то SQLite - самое простое решение.
    Ответ написан
    Комментировать
  • Как сделать такую конструкцию на 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 комментария