• Что не даёт на C++ писать кроссплатформенные приложения?

    Nipheris
    @Nipheris Куратор тега C++
    • прикладное API различных операционных систем - разное. Если бы API было полностью одинаковое, то тогда операционные системы отличались бы только UX, набором софта и утилит, т.е. вместо Linux/Windows/BSD мы бы имели только Linux в разных дистрибуциях или только Windows в разных дистрибуциях. Ну т.е. по сути одну операционную систему, т.к. раз мы сейчас говорим о разработке прикладного софта, то нас интересует прежде всего API для прикладных приложений;
    • т.к. API различных ОС отличается, требуется создание уровней абстракции, которые нивелируют эти различия. В других ответах уже достаточно примеров, я бы вспомнил например о разделителях в именах файлов;
    • дополнительные уровни абстракции нередко сокращают доступное API, т.к. в большинстве случаев невозможно реализовать самому то, что нет в API какой-то из интересующих ОС. Следовательно, приходится оставлять только те интерфейсы, которые так или иначе есть везде;
    • т.к. абстрагированные интерфейсы из пред. пункта более аскетичны, ими сложнее пользоваться, они дают не все возможности, соотв. какие-то задачи уже нецелесообразно решать кроссплатформенным кодом на базе этих асбтрагированных интерфейсов, проще написать несколько вариантов для разных ОС;
    • оба предыдущих пункта - как достаточно успешные попытки сделать абстрагированные интерфейсы, так и наоборот, написание платформозависимого кода для каждой нужной платформы - удорожают разработку. Везёт только в случаях, когда абстрагированные интерфейсы уже есть и достаточно хорошо выполняют свою задачу, как например Asio. Или хорошие кроссплатформенные стандартые API вроде OpenGL, что делает возможным писать кроссплафторменные игры.
    • разработчику ПО не нужно удорожание разработки там, где это не принесёт ощутимой выгоды.
    Ответ написан
    Комментировать
  • Что нужно знать С++ разработчику для начала работы на фрилансе?

    Nipheris
    @Nipheris Куратор тега C++
    "База" в C++ никому за деньги не нужна, ну кроме американских и европейских студентов-лентяев, которые сами не хотят лабы делать. Если вы хотите заниматься C++ профессионально, ещё и фрилансить, вы должны понимать, как получить законченное решение по ТЗ. Это менее тривиально, чем на других платформах. Вот вам несколько вопросов для самопроверки, расскажете что знаете а что нет:
    • у вас есть большой объём текстовых данных (строк), каких простых правил будете придерживаться, чтобы избегать лишнего копирования содержимого строки;
    • я хочу написать некий фоновый сервис, вытягивающий данные из PostgreSQL и пишущий, допустим, в MongoDB, выполняющий некоторые простые преобразования (неважно какие). Пока будет крутиться на линуксе, но возможно и на виндах придётся запустить у другого заказчика. Какие на вскидку библиотеки для работы с БД будем использовать, будут ли сложности? Как их будем подключать к проекту?
    • чем будем собирать проект из предыдущего пункта?
    • что можете предложить для реализации сетевого обмена? Я хочу чтобы было можно в свой протокол поверх TCP, но возможно захочу ещё HTTP потом.
    • как будете выбирать, слинковать библиотеку статически или оставить зависимость от DLL/SO? Как будете собирать готовые пакеты для деплоя?
    Ответ написан
    7 комментариев
  • Как заполнить таблицу(DataGrid)?

    Nipheris
    @Nipheris Куратор тега C#
    <DataGrid ...... AutoGenerateColumns="False">

    https://msdn.microsoft.com/ru-ru/library/system.wi...

    Ну и понятное дело у DataGridTextColumn нужно нормальные биндинги сделать.
    Ответ написан
    4 комментария
  • Коимпилятор ругается на инициализацю ссылки на функцию как написать что бы не было ошибки?

    Nipheris
    @Nipheris Куратор тега C++
    Вы не сможете сохранить указатель на функцию-член в переменной указателя на обычную функцию. Ваши варианты:
    - сделать dfLineFunc статической/свободной функцией (что было бы логично для функции активации, неужели она у вас от состояния зависит?);
    - сделать dfActive указателем на функцию-член и пользоваться им соответственно.
    Ответ написан
    Комментировать
  • Как реализовать класс стека на указателях и на массиве в одной программе?

    Nipheris
    @Nipheris Куратор тега C++
    Почитайте про полиморфизм вообще, и конкретно про его реализацию для классов в C++ в форме виртуальных функций.
    Ответ написан
    Комментировать
  • Миграция проекта с WindowsForms на .NET Core. Куда смотреть?

    Nipheris
    @Nipheris Куратор тега C#
    Это абзац. Вам нужно многое узнать, я вам скажу.

    Во-первых, реализовать "в браузере" - вы вообще понимаете что вам в принципе нужно будет делать и какие компоненты на чём писать? "frontend-разработка", "backend-разработка" вам говорит о чём-то?

    Вам надо смотреть в сторону понимания того, какую логику приложения следует выполнять на сервере (и вы сможете её писать под .Net Core), а какую - на клиенте (и тут .Net Core в общем-то не при чём).

    Ну и да, я надеюсь вы понимаете что .NET Core и ASP.NET Core - это не одно и то же, и "делать веб-приложение на .NET Core" - весьма расплывчатое утверждение. Что оно вообще для вас значит?
    Ответ написан
    2 комментария
  • Как правильно кинуть исключение в конструкторе класса?

    Nipheris
    @Nipheris Куратор тега C++
    Но я начал читать и узнал про некий эомби-режим объекта, в котором произошел вызов данного exception.

    Не владею такой терминологией. Подробную цитату или ссылку на статью.

    Вероятно там будет о том, что выбрасывать исключение из конструктора можно, но осторожно. В основном все проблемы оттого, что если конструктор выбросил исключение, объект считается недособранным, и деструктор НЕ будет вызываться. Т.е. перед тем как бросить исключение в к-ре вы должны САМИ подчистить всё, что успели насоздавать: https://isocpp.org/wiki/faq/exceptions#selfcleanin...
    Ответ написан
  • Что ж, как начать кодить(на C#)?

    Nipheris
    @Nipheris Куратор тега C#
    Тот случай, когда не могу добавить что-либо к тому, что предлагал пару лет назад.

    Но как можно понять, это учит лишь правильно держать карандаш, когда я хочу уметь рисовать.

    Хорошо, что вы это понимаете.

    Знаю о существовании книг и прочего по паттернам, но как по мне до этого еще чутка рановато, и нужно набить руку.

    И это тоже хорошо, что понимаете. Сначала нужно столкнуться с проблемами, а потом искать решения в книгах - иначе это будет как для швеи книга по закаливанию стали.
    Ответ написан
    Комментировать
  • Ellipse и TextBlock, как правильно сделать ширину TextBlock'a с TextWrapping?

    Nipheris
    @Nipheris Куратор тега C#
    Поставьте в ColumnDefinition вместо Auto значение 1*.
    Также запретите листбоксу иметь горизонтальную прокрутку:
    <ListBox Name="Test" Grid.Column="1" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
     ...
    Ответ написан
  • Как посчитать координаты для дерева?

    На вашей картинке некий нелистовой узел располагается посередине того интервала (по оси X), который занимают его дочерние узлы.

    Поэтому решите задачу определения того, сколько места должны занимать дочерние узлы, включая все их дочерние узлы и т.д. Эту задачу можно решить алгоритмом ПВГ-обхода дерева, управляя стеком вершин вручную или же пользуясь рекурсивными вызовами процедуры обхода.
    Ответ написан
    8 комментариев
  • Какие есть игровые движки, генерирующие wasm?

    Magnum тут объявил недавно о поддержке WebAssembly. Вроде подходит под ваши критерии.
    Ответ написан
    Комментировать
  • Откуда у Google столько памяти?

    www.artificialbrains.com/google/datacenters

    Посчитаете сколько там в сумме? Явно больше 1.5 миллионов. Как думаете, сколько суммарно памяти на них?
    Если что в Гулге изобрели, так это средства горизонтального масштабирования типа Google File System и много чего ещё. Чтобы если что, можно было поставить ещё десяток серверов. А потом ещё сотню. А потом ещё тысячу.

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

    > Нашел статью на хабре от 2010 года:
    > HTML5 WebSockets -могут возникнуть проблемы со старыми браузерами

    2010 по меркам фронтэнда это до рождества Христова. Нужно искать актуальную информацию, чистых вебсокетов или решений на их основе более чем достаточно.
    Ответ написан
    Комментировать
  • Стал работать по часам и обнаружил, что выходит 6 часов в день. Это нормально?

    Мы планируем на день и логируем в JIRA 6 рабочих часов. Больше - бессмысленно, всё равно будет неправдой, т.к. ещё есть:
    - ревью кода;
    - питие чая;
    - рабочие беседы и совещания.
    Ответ написан
  • OpenGL или DirectX?

    Nipheris
    @Nipheris Куратор тега C++
    Зависит от ваших текущих знаний и пожеланий, особенно от того, насколько вы готовы разбираться с каждой их технологий.

    OpenGL это кроссплатформенное API, раньше было не очень удобно начинать работу с ним на Винде, сейчас доступны различные библиотеки (GLEW, GLFW) и это больше не проблема.
    DirectX возможно даст вам больше возможностей, но там много заморочек с Windows-специфичными вещами, т.к. DirectX работает через технологию COM. Поначалу будет непривычно.

    Я бы на вашем месте начал с OpenGL и посматривал на Vulkan. Знание OpenGL полезно ещё тем, что проще будет использовать родственные API, например WebGL, если захотите писать внутрибраузерный код.
    Ответ написан
    Комментировать
  • Как создать команду и организовать современный процесс разработки на 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, то мы его НЕ реализуем, даже если у нас там такие же методы.

    И да, разберитесь заодно в разнице между статической и строгой типизацией, если вы не оговорились в комментарии, а действительно не понимаете разницы.
    Ответ написан