• Как сделать графический интерфейс программ на C++?

    Nipheris
    @Nipheris Куратор тега C++
    Смотрел в сторону Qt, но что то как то не сраслось.


    А надо, чтобы срасталось. Нет, конечно вам правильно пишут, что библиотек всяких еще много, и правильно пишут, что многие современные библиотеки рисуют с помощью OpenGL, но лично я вам советую Qt, раз уж начали знакомиться. Я сомневаюсь, что с остальными либами вам будет сильно проще (особенно с WinAPI или c WTL - Кьют покажется детской игрушкой).

    Популярные программы потому имеют хороший интерфейс, что у их производителей есть время и деньги его сделать, а самое главное - ПОТРЕБНОСТЬ. Ведь их продукты популярны! Adobe готова вылизывать Фотошоп до блеска, и в состоянии написать свою собственную библиотеку, т.к. это дорогой продукт, используемый по всему миру.
    Ответ написан
    Комментировать
  • Есть ли в области системного программирования такие задачи, для которых целесообразно только использование ассемблера?

    абсолютно все

    абсолютно все не напишите, тот же SYSENTER компилятор за вас не сделает. По большому счету большая часть кода - на Си (структуры данных, алгоритмы), а сугубо низкоуровневые вещи - например, переключение стека - делается ассемблерными вставками. Ну или вывод в порт - не представляю как это сделать в рамках Си.
    Ответ написан
  • Как шифровать соединение для winsock?

    Nipheris
    @Nipheris Куратор тега C++
    Это делается путем общения по протоколу TLS. С точки зрения OSI, этот протокол работает поверх транспортного уровня, т.е. после установки TCP соединения вы ВМЕСТО обыкновенных незашифрованных данных отправляете и получаете TLS-пакеты. Также, почитайте про STARTTLS, с помощью которого можно инициировать шифрованное соединение поверх уже открытого существующего (т.е. это способ сказать, что вы не хотите переоткрывать TCP-соединение, а хотите прямо здесь начать работать по TLS).
    Разумеется, вам точно не стоит пытаться реализовать TLS самому. Вам помогут OpenSSL или PolarSSL. Они подготовят вам как служебные TLS-пакеты, так и зашифруют полезную нагрузку.
    Ответ написан
    Комментировать
  • Как записать файл на диск в обход файловой системы(для ускорения)?

    Nipheris
    @Nipheris Куратор тега C++
    https://toster.ru/answer?answer_id=692948

    А вообще правильно вам тут пишут - ФС делали далеко не глупые люди. Если хотите максимально увеличить производительность - лучше выделите:
    а) отдельный раздел с отдельной файловой системой для ваших данных
    б) поставьте RAID, не говоря уж об SSD
    Алгоритмы кэширования в ОС сейчас достаточно развиты, люди десятилетиями их разрабатывали.

    А насчет возможно - да пожалуйста. В *nix открываете файл дивайса в /dev и работаете. В винде - аналогично: права администратора, открываете нужный дивайс и вперед, блоками читаем и пишем, через WinAPI.
    Ответ написан
  • Есть ли простой способ подключить динамическую библиотеку ( .dll) в проект?

    Nipheris
    @Nipheris Куратор тега C++
    Что-то тут вам насоветовали в комментах....

    Для начала нужно у вас спросить, как вы хотите загружать эту DLL - статически, т.е. заранее точно знать имя файла который будет загружен и загружать его при запуске программы, или же подгружать динамически - не имея заранее информации о том, какой конкретно файл нужно загрузить, но осуществлять поиск по каким-либо критериям, и загружать (как например делает foobar2000 при загрузке плагинов - находит все dll в конкретной папке).

    Если статически - то ничего сложного нет, создайте в студии проект DLL или сами прочитайте про макросы для импорта/экспорта - они нужны, чтобы с ОДНИМ И ТЕМ ЖЕ хедером и компилить DLL, и пользоваться ей. По сути вам нужны эти макросы (которые студия сделает за вас, если создадите проект по шаблону), и вам нужно проставить их на каждом классе или свободной функции, которые нужно экспортировать. Все. Теперь вы можете и саму DLL скомпилить с этим заголовочным файлом, и подключить его в другой проект, который должен использовать DLL.

    Если динамически - тогда без описания прототипов действительно не обойтись. И генерация из DLL тоже не особо поможет вам, т.к. информация о классах действительно потеряется.

    Запомните - роль метаданных для компилятора C++ играют именно заголовочные файлы. В отличие и java и прочих дотнетов, где информация о том, что "внутри" поставляется вместе с кодом в том же самом контейнере (в пакете в джаве и в сборке в дотнете), скомпилированные нативные модули вроде EXE, ELF, DLL, LIB, SO и прочих не имеют стандартизированных способ хранить информацию о классах. Они просто не на том уровне работают - они больше для операционной системы или линковщика, чем для компилятора. А классы - это фишка конкретного языка, в Си например нет классов по определению. Соответственно, низкоуровневые вещи вроде DLL не должны заботиться о такой вещи, как классы C++. Поэтому практически с любой библиотекой на C++, даже если она компилится в LIB или DLL, поставляется хедер-файл. Возможно, вы еще не сталкивались с Boost - в нем многие классы вообще не могут быть скомпилированы заранее, т.к. являются шаблонными, и поэтому они поставляются прямо в виде заголовочных файлов. Такие библиотеки, в которых все или часть сущностей не подлежат предварительной компиляции, а поставляются в виде исходного кода файлов для последующего инклуда, называются header-only. Это вам для общего развития.

    Так что и в случае динамического подключения, все не так сложно - вам точно так же нужно иметь заголовочный файл с прототипами, а также с парными им типами указатель-на-функцию. Этот хедер также можно будет использовать как в самой DLL, так и при ее загрузке через LoadLibrary и получении функций через GetProcAddress (вы же это имели в виду в вопросе?). Но еще раз отмечу - это "сложный" способ, который требуется только если вы заранее НЕ ЗНАЕТЕ, что хотите загрузить - это используется как правило для реализации плагинов.
    Ответ написан
    2 комментария
  • Что должен знать junior С#?

    Nipheris
    @Nipheris Куратор тега C#
    корпоративные приложения

    Поучите голый ADO.NET и какую-нибудь ORM-ку, да хотя бы EF. Еще можете хотя бы начать ASP.NET, вероятность попасть на него на первой работе достаточно высокая.

    финансы, банковская сфера

    Подтяните теорию по реляционным БД. Ведь какие финансы без транзакций!) Вы должны хотя бы знать о таких понятиях, как изоляция транзакций, представлять в общих чертах как на SQL можно сделать какую-нибудь выборку с агренированием. Никто конечно в здравом уме не даст джуниору непосредственный доступ к сколь-либо значащим данным, отражающим реальные денежные балансы, но ваша осведомленность пойдет вам на пользу, иначе рискуете клепать интерфейсики ближайшие несколько лет. А, ну да, выясните, почему нельзя вот так считать проценты по кредиту:
    float interestRate = 0.13 // ставка
    float interestSum = interestRate * sum;


    геймдев

    ну это отдельная история.. Несмотря на обилие высокоуровневых инструментов, не мешало бы знать основы графики (цветовые модели, граф. конвейер, что такое вершинный шейдер), алгоритмы на графах, популярные структуры данных и основы геометрии (без матриц никуда, хоть стреляй).

    И еще для всех направлений: станьте более-менее самостоятельным в вопросах деплоя. Вы должны в общих чертах представлять, что находится внутри дотнетовской сборки, как работает версионность и что может пойти не так. Ну и про NuGet я надеюсь вы уже знаете.
    Ответ написан
    1 комментарий
  • Клиент-серверное приложение для диплома - что придумать?

    Nipheris
    @Nipheris Куратор тега C++
    > но не слишком простое и банальное типа чатика?
    защищенный чатик. С передачей файлов. И голоса. И видео.
    Ответ написан
    Комментировать
  • Какой лучше писать property?

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

    Еще удобно использовать именно приватное поле, если у свойства ленивая инициализация.
    Ответ написан
    Комментировать
  • Почему не изменяется версия библиотеки в Visual studio?

    Nipheris
    @Nipheris Куратор тега C#
    > с более поздней версией
    ну тогда уж с более ранней

    > Проверяю версию добавляемой библиотеки перед тем как добавить
    Добавляете из какого списка? Browse?

    Откройте папку со сборкой в проводнике и проверьте в свойствах версию. Если там будет 2.0.0.0, то студия не при чем.

    Кстати, а в NuGet этой либы нету?
    Ответ написан
    4 комментария
  • Как объяснить девушке что такое "некрасивый" код?

    Объясните, что написание кода - изложение идей и мыслей программиста, его видения предметной области и алгоритмов (собсно, это так и есть). Красивый код - это внятно изложенные, четкие и незамутненые мысли, код-спагетти - это такое же спагетти в голове этот код писавшего. Объясните, что приведение кода в порядок приводит в порядок мысли пишущего, и не позволит лопнуть мозгу читающего.

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

    Молодые люди с ясными и последовательными мыслями, насколько мне известно, пользуются успехом у девушек.
    Ответ написан
    2 комментария
  • Где проектировать Restful API?

    RAML (самый молодой, но рекомендую)
    Swagger
    Apiary

    Это фреймоворки для проектировния API. По сути предоставляют свой DSL для описания и ДОКУМЕНТИРОВАНИЯ (!) API. К большинству из них идут инструменты по генерации читабельных доков и всякие mock-инструменты и генераторы клиентов-загрушек и сервисов-заглушек (для тестирования сервисов и клиентов соответственно). Вот например тулзы для Сваггера: swagger.io/swagger-codegen :
    The Swagger codegen project allows generation of both client libraries and server stubs from a Swagger definition.


    vREST - более комплексный продукт, включающий автоматизацию тестирования, есть платные возможности.
    Mashape - большой продукт для предоставления API, используется многими крупными компаниями (напр., Близзы его юзают).

    P.S. Есть еще различные модели гипермедийных API (JSON-LD, HAL, Siren, и т.д.), но это пока не очень популярные вещи, поэтому если не готовы быть одним из первопроходцев, лучше попробуйте их потом, когда наберут популярность (если наберут).
    Ответ написан
    2 комментария
  • Обновление wpf приложения?

    Nipheris
    @Nipheris Куратор тега C#
    MSI-пакеты тоже вариант, если проект большой и нужны широкие возможности.
    Ответ написан
    Комментировать
  • Потерялись все ссылки при переносе проекта на другой комп C# .NET?

    Nipheris
    @Nipheris Куратор тега C#
    Еще лучшее решение - использовать NuGet, насколько возможно. Если всех нужных пакетов в нем нет - тогда можно пути записать в переменную вроде $(LibraryRoot), и подключать props-файл к проекту - тогда этот файл может быть на каждом компе свой.
    Ответ написан
    Комментировать
  • Почему чем меньше маска подсети, тем больше доступных адресов?

    Все довольно просто: маска подсети разбивает весь IP-адрес на два фрагмента: адрес сети (подсети), и адрес машины. Т.е. вот у вас 4 байта адреса:
    XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX

    X - это двоичная цифра, 0 или 1.
    Когда вы ставите маску /14, вы ставите вот такой вот условный разделитель:

    XXXX XXXX XXXX XX | XX XXXX XXXX XXXX XXXX

    Циферки слева от него - адрес подсети, справа - адрес машины. Очевидно, что при фиксированной длине адреса в 4 байта для IPv4, чем больше циферок вы отдадите под "подсеть" (т.е. слева), тем меньше останется под "машину", т.е. справа. Меньше циферок - меньше возможных различных значений, которые ими можно записать.
    Ответ написан
    Комментировать
  • Какую цветовую модель использует OpenGL?

    Nipheris
    @Nipheris Куратор тега C++
    > 4 компоненты, явно не RGBA
    это шутка такая?

    > Значение варьируются от 0 до 1
    да, значения во float-е, так удобнее интерполяцию делать. 0.0 это 0, 1.0 это 255.
    Ответ написан
    2 комментария
  • Как работать с сообщениями?

    ВНЕЗАПНО: Jabber?

    Это предложение для исследования, опыта работы не было. Есть очевидный плюс - не надо ничего дергать, если сможете огранизовать постоянное соединение, все само прилетит.
    Ответ написан
  • Как можно организовать изменения порядка вывода строк из таблицы?

    > Но у моего варианта есть косяки.
    А какие именно на ваш взгляд?

    Альтернативный вариант - указывать previous_id или next_id, тогда вы будете хранить минимум информации о порядке. Фактически это будет связный список. Для перемещения любого элемента достаточно будет изменить 2-3 строки.
    Ответ написан
    2 комментария
  • Как перекомпилировать проект под x86 платформу?

    Nipheris
    @Nipheris Куратор тега C++
    Win32 это и есть x86 (по кр. мере в контексте компилятора Microsoft Visual C++)
    Ответ написан
  • Как избавиться от надоедливого окна - предупреждение системы безопасности - windows 10 x64?

    Разблокируйте скачанный exe-шник в его свойствах. Имхо, это недолго, редко приходится каждый день по 100 приложений качать.

    Эта диаложка всплывает из-за наличия прикрепленных к заблокированным файлам NTFS-овских потоков (а именно потока :Zone.Identifier:$DATA), в котором указана информация о зоне, откуда был получен файл ("зоне" в терминах безопасности Internet Explorer). Этот поток прикрепляется к файлу браузерами и прочим софтом, который знает, что вы взяли файл "извне" вашего компьютера.

    Чтобы почистить прикрепленные потоки у существующих файлов, возьмите утилиту Streams. Чтобы отменить добавление потока с информацией о зоне, включите следующую групповую политику (в консоли gpedit.msc):
    User Configuration -> Administrative Templates- >Windows Components -> Attachment Manager -> Do not preserve zone information in file attachments
    Ответ написан
    2 комментария