• C# заменит ли Java?

    Oxoron ну что тут сказать навскидку...
    Я всегда считал .net допиленной java-платформой. Не то, чтобы в дотнете прям нереальные невероятные новшества, но все же некоторые вещи были обдуманы еще раз. Например, очень важным считаю разделение на reference и value типы. Правда, ИМХО, MS не довела идею до победного конца (слишком много технических вопросов нужно учитывать при выборе struct vs class), но все равно шаг очень правильный.
    Плюс, считаю важным отсутствие корреляции между логическим структурированием библиотек (по неймспейсам) и физическим (по сборкам). На каждом уровне должны приниматься отдельные решения насчет того, что куда класть.
    Еще одним преимуществом (нивелированным на данный момент) была изначальная ориентация .net на мультиязычную поддержку. Сейчас конечно JVM-языков навалом, но раньше это все-таки смотрелось киллер-фичей .net. Особенно поддержка "склеивающих" языков, таких как C++/CLI, которые позволяли интегрировать уже существующие компоненты с .net-приложениями. Дотнет изначально не был платформой в себе, разработчикам давали массу инструментов для интеграцией с COM и native-кодом. Ну и само собой managed-языки в приличном количестве, вон F# уже довольно давно подтянулся как официально (!!) поддерживаемый.

    А вообще конечно изначальным преимуществом .net были именно языки. Я думаю даже самые ярые джависты со мной согласятся, что с момента выпуска C#, язык Java развивается догоняющим образом. Можно опять сказать, что есть Scala, но тогда нужно учесть, что C# изначально был визитной карточкой платформы с момента ее появления. Ну и самое главное - инструменты. В мире Java достаточно хороших IDE, но уровень взаимоподдержки Студии и .net насколько мне известно пока не достигнут.

    И тут мы выходим на стандартное основное преимущество решений от MS - максимальная "готовность" и интеграция продуктов. К сожалению последние года 3 в Джаву не совался, но знакомые не раз говорили, что с отсутствием знаний об обеих платформах им гораздо легче было поднять hello-world веб-сайт (!) на asp.net в студии, нежели на том же Spring. Так или иначе, это фактор.

    Теперь библиотеки. Конечно, в мире джава их огромное количество. Я думаю и сегодня их значительно больше, чем в дотнет. Две либы в моем текущем проекте - NHibernate и NetTopologySuite - это порты с джавовских либ. Джава рулит на сервере. Про..аная Майкрософтом настоящая кроссплатформенность .net не давала ему потеснить джаву. Сейчас конечно это усиленно исправляется - в дотнете уже наступило перерождение после массовых релизов в open-source, переделанного asp.net, и появления DNX. По сути теперь .net официально поддерживается на *nix - системах. Это конечно надо было сделать намного раньше, но и сейчас этому рады.
    NuGet прекрасно справляется со своими задачами, более тесная интеграция в билд-процесс в DNX только улучшит процесс взаимодействия с ним.

    Ну и последнее - разработка UI. Все что есть в Java-мире (JavaFX, Java3D, Swing) это совсем не то. Windows Forms был отличным аналогом Дельфийских компонентов для UI, WPF в свое время вышиб немало дверей своим появлением. Если б он еще и развивался как подобает... Да, конечно, на джавовских технологиях вы напишите кроссплатформенную вещь, но она будет одинаково чужеродно смотреться и на винде, и в линуксовых desktop-средах. А людям в enterprise не особо нужна кроссплатформенность в UI - им намного важнее аккуратный привычный интерфейс, в том числе на Винде. Сейчас WPF может потеснить только современный Qt. Выбирая сегодня UI для десктопа, я бы выбирал между WPF и Qt, про джаву бы даже не подумал (да, я считаю что сегодня далеко не все можно и нужно пихать в браузер на тормозной JS. Весь новомодный неповоротливый софт, написанный с использованием Atom-а, меня удручает).
    ПРАВКА: посмотрел последние демки по JavaFX. В общем-то неплохо, осталось только дождаться хорошего роста коммьюнити и надеяться что не будет проблем с производительностью в сложных приложениях.

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

    P.S. Да, тут кстати пишут что игродельство на C# достигло серьезного уровня. Я 3d делал и делаю на C++, поэтому тут пусть кто-нибудь другой прокомментирует.
    Ответ написан
    1 комментарий
  • Как создать двумерный массив в управляющем классе?

    Nipheris
    @Nipheris Куратор тега C++
    array< Color, 2 >^ mat = gcnew array< Color, 2 >(MouseX - OldX);

    https://msdn.microsoft.com/en-us/library/dtbydz1t.aspx

    управляющем классе

    наверное вы имели в виде управляемый (managed).
    Ответ написан
    Комментировать
  • Где взять документацию по NuGet на русском?

    Nipheris
    @Nipheris Куратор тега C#
    Что такое NuGet?

    Менеджер пакетов, изначально ориентированный на .Net, но в данный момент и с некоторой поддержкой нативных библиотек под Винду.

    Дружит ли он с SharpDevelop?

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

    Где найти информацию по нему?

    На оф. сайте и в нормальных книгах по .Net.

    как добавить в solution/ project библиотеку без использования NuGet?

    Add Reference и выбирайте нужную сборку, все так раньше и делали.

    В английском я не силен.

    Вот займитесь лучше английским. НюГет сегодня есть, а завтра нет, а вот английский просто так с мировой арены не сойдет.
    Ответ написан
    Комментировать
  • Какая функция может выдавать случайные значения от 0 до 1 разной длинны?

    0.14812561761131
    0.057436987123556


    0.148125617611310
    0.057436987123556

    Не?

    А вообще что мешает сгенерить целое число и поделить его на INT_MAX? или на максимальное число, которое может быть сгенерено? Как раз получите интервал [0; 1)
    Ответ написан
    Комментировать
  • Какой язык лучше для управления памятью С++\С#(ручное управления или автоматическое)?

    Nipheris
    @Nipheris Куратор тега C++
    C++ разумеется, может быть даже Си, в C# низкоуровневостью и не пахнет
    Ответ написан
    7 комментариев
  • По какому алгоритму должна работать программа для отлавливания синего экрана?

    Программа должна запускаться дебаггером уровня ядра и отлавливать исключения в ядре. Поглядите, как это SoftICE умел делать.
    Ответ написан
    Комментировать
  • [Doxygen] Как заставить Doxygen НЕ склеивать описания функции, заимплеменченой дважды?

    Не могу себе представить, как заставить doxygen различать функции с одной и той же сигнатурой. Самый реальный способ на мой взгляд - собирать различные варианты документации с разными макросами (PREDEFINED) и затем читать нужный вам. Препроцессор doxygen обрабатывает файлы по такому же принципу, что и компилятор (только не все конструкции поддерживает), поэтому как сама программа компилится отдельно с разными конфигурациями, так должна и документация. Иначе вам нужно все-таки различать эти функции явно.
    Ответ написан
    4 комментария
  • Как "отучить" программу записывать файлы в VirtualStore?

    1) поиметь более свежую версию программы, которая больше не пытается писать в Program Files, и уж тем более в папку Винды (т.е. настройки, конфиги, сэйвы, скриншоты - все это должно быть в папке пользователя, а не по месту установки приложения);
    2) поставить программу в отдельный каталог, на который у вас (как пользователя в Винде) будут права. Т.е. сами создаете папку (напр., Programs, или Games) и ставите туда, по идее т.к. папка ваша, Винда не будет виртуализировать ее. У меня и весь Стим и WoW стоит в Games, поэтому проблем нет (WoW до сих пор сохраняет скрины в папку игры, в отличие от D3 например);

    Вообще это известная проблема со старыми приложениями. Кстати, у вас стимовская контра? Да, кстати, брандмауэр тут совершенно не при чем, все зависит от файловой системы.
    Ответ написан
    4 комментария
  • Каков аналог джавоских интерфейсов в С++?

    Nipheris
    @Nipheris Куратор тега C++
    recursi0n доброй ночи. Пожалуйста, прочтите мой ответ на аналогичный вопрос: ClassName::functionName или objectName.functionName? , наверняка что-то почерпнете для себя.
    Ответ написан
    Комментировать
  • Как задать массив с целыми и вещественными числами?

    Nipheris
    @Nipheris Куратор тега C++
    Как задать массив, в который можно записать и целые и вещественные числа?
    boost::variant<int, double>

    Только сначала убедитесь, что вы понимаете, что делаете и чего хотите.

    Олег Цилюрик
    C++ типизированный язык, и в массиве могут быть элементы только одного типа;

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

    Находим в гугле удачную точку входа, например: Chaos-based cryptography: a brief overview, и начинаем учиться важнейшему (после умения читать публикации на английском по своему профилю) скиллу исследователя: читать содержимое вкладок References и Cited By. Сама работа конечно уже старая, но у нее аж 180 цитирований, это довольно круто. Поэтому топаем смотреть все статьи, которые тесно относятся к теме исследования. Вот навскидку парочка относительно свежих:
    -- Design and implementation of a Chaotic Cipher bloc...
    -- Chaos based key expansion function for block ciphers
    И так продолжать ползать вниз и вверх по графу цитирований (т.е. от цитируемых статей к цитирующим и наоборот) до полного насыщения и просветления относительно состояния области (или посинения, смотря что наступит раньше).

    На русском литература ищется аналогично, только не так удобно.
    На ходу ловим ссылки на другие крупные работы (магистерские и кандидатские диссертации) и книги:
    -- Защита информации с помощью динамического хаоса...
    -- Chaos-based Cryptography: an overview
    -- Chaos-Based Public-Key Cryptography
    Я думаю дальше вы сможете сами. Полные тексты статей берутся в универе при наличие подписок (если вам повезло), или втихую на сайхабе.
    Ответ написан
    1 комментарий
  • Правильная разработка программного обеспечения!?

    Nipheris
    @Nipheris Куратор тега C#
    "Нормально ли создавать в каждом классе куча экземпляров других классов?", "Не режет ли потом данная программа по производительности ПК с такими количеством уровнями классов?"


    А вы поймите, что если вас беспокоит приведеннный вами код, вам надо не о сколько о классах думать, и не о производительности, сколько о функциях и методах. Зелим Бельтоев уже хорошо намекнул вам об этом, я скажу еще раз словами: то, что ОБЪЕКТОВ много и между ними сложные связи - это НОРМАЛЬНО. Самое главное, что у вы должны уметь ограничивать - сложность и объем связей в КОНКРЕТНОМ участке кода. Пока вы понимаете, ЧТО у вас написано в конкретном методе, и КАК это себя ведет (причем, это понимание не расходится с рельностью) - вы все делаете правильно. Это важнейший критерий. Производительность это тоже фактор, но я даже не могу себе представить, насколько сложную структуру классов нужно изобрести, чтобы она реально мешала тому же CLR исполнять код. Реально узкие места по пр-ти возникают в алгоритмах с высокой алгоритмической сложностью, таких мест обычно мало (если они вообще есть, в бизнес-приложениях в 99% случаев все упирается в IO, или в необходимость побольше кэшировать на клиенте), и они целенаправленно оптимизируются.
    Ответ написан
    8 комментариев
  • World Editor war3 на с++ и openGl?

    Nipheris
    @Nipheris Куратор тега C++
    Но давайте представим что у меня 500 трех угольников у каждого по 3 точки то есть 500*3=1500 переменных , ну это бред !


    Действительно, бредовее ничего не видел. Вы слышали про struct-ы, классы, массивы? Что мешает сделать так:

    struct point {
       float x, y, z;
    };
    
    struct triangle {
      point points[3];
    };
    
    triangle triangles[500]; // вот ваши 500 треугольников, рисуйте их как хотите
    triangles[234].points[3].z = 155; // вот я меняю координату у 234-го треугольника
    Ответ написан
    1 комментарий
  • Как создать экземпляр класса, реализующего интерфейс?

    Nipheris
    @Nipheris Куратор тега C++
    Жесть полная.

    class iClass {
    public:
    void method1();
    virtual method2();
    }


    Это не абстрактный класс, у абстрактного должно быть недоопределенное поведение, т.е. хотя бы один pure-virtual метод. У вас есть виртуальный метод, но для него ожидается релазация. Если бы iClass был бы абстрактным, то код
    new iClass();
    никак бы не скомпилился

    Как правильно создать экземпляр класса myClass через интерфейс iClass и использовать у этого экземпляра method3()?


    Правильно - никак, задача поставлена некорректно. Если у вас есть некоторый интерфейс, работать нужно через него. Если вам нужно создавать экземпляры различных классов-реализаций, вы должны писать new КонкретныйКласс(), а потом уже при желании, приводить к типу интерфейса. Если вам нужен method3, то вам НЕ НУЖЕН iClass, вам нужен myClass, т.к. именно В НЕМ есть method3.

    Если у вас будет стоять задача создания экземпляра конкретного (неабстрактного) класса в зависимости от каких-то параметров, почитайте про фабрики. Но для начала разбреритесь с основами, вы пока не понимаете, что делаете.
    Ответ написан
  • Когда использовать указатели на объекты при объявлении в C++?

    Nipheris
    @Nipheris Куратор тега C++
    ОФФТОП:
    1) Object obj(); - это объявление функции obj без параметров, возвращающей объект класса Object. Объявление объекта obj делается без скобок: Object obj; Да, такие синтаксические тонкости.
    2) про звездочку вам уже сказали

    ПО ДЕЛУ:
    1) Object obj;
    "компилятор-компилятор, создай-ка мне автоматическую переменную с объектом в текущей области видимости. За пределами этой области видимости она не нужна, так что можешь убить его сам, чтобы я не парился на этот счет". Компилятор и убьет, т.е. вызовет деструктор и освободит память, если уже пора.
    2) Object* obj = new Object();
    "компилятор-компилятор, создай-ка мне автоматическую переменную-указатель obj, а также ручную переменную с объектом, расположив ее в динамической памяти (вместо стека/статического сегмента в 1-м случае) и дай мне ее указатель, я его сохраню в obj. Я этот указатель потом буду далеко передавать, записывать в другие структуры и объекты, так что ты, компилятор, не парься, я сам потом попрошу уничтожить объект и освободить память, когда буду знать, что уже можно".

    Плюс первого варианта - время жизни переменной и объекта в ней совпадает с областью видимости. Вам следить за временем ее жизни не нужно, но при этом вы не сможете работать с переменной, если она уйдет из области видимости (например, грубейшая ошибка новичка - возвращать из функции указатель на локальную переменную). Следовательно, таким образом сложно создавать и использовать "долгоживущие" объекты, вроде окон или подключений к БД.
    Плюс второго варианта - вы создаете и убиваете объект абсолютно в любом месте программы, но компилятор умывает при этом руки - вы запросили память, вам ее и освобождать. В языках со сборщиком мусора это делает сложный алгоритм, который анализирует достижимость объектов в памяти из программы. В C/C++ за этим следит программист.

    Но программист может себе упростить жизнь с помощью умных указателей, добавьте себе на заметку, почитаете позже, когда разберетесь с основами.
    Ответ написан
    Комментировать
  • C++ | boost::asio + ssl?

    Nipheris
    @Nipheris Куратор тега C++
    Инструкция для Boost::ASIO: www.boost.org/doc/libs/1_59_0/doc/html/boost_asio/...

    Использование HTTP-клиента в cpp-netlib с возможностью HTTPS-соединений: cpp-netlib.org/0.11.1/reference/http_client.html
    Ответ написан
    Комментировать
  • Как исправить ошибку LNK2019 при использовании статического метода?

    Nipheris
    @Nipheris Куратор тега C++
    Теоретически заголовочный файл в проект подключать не обязательно, это для вашего удобства (чтобы вы не теряли файлы, которые у вас есть в проекте). А вот cpp нужно полюбому, т.к. иначе у компилятора не попросят его собрать, а линковщику - не расскажут, что есть объектный файл (который получится после компиляции), который содержит реализации неких функций. Результат - линковщик ищет-ищет, и не находит релизацию метода.
    Если бы у вас был lib а не cpp, то ситуация та же самая, только без этапа компиляции. Грубо можете считать lib-файл группой собранных воедино объектных файлов. В нем уже скомпилированный код находится, поэтому его нужно передавать сразу линковщику. Для этого в ключах линкощика указываются так называемые Library Directories - директории, где искать библиотеки, а также dependencies - какие конкретно lib-файлы надо просматривать при линковке. В студии есть как глобальный список таких директорий, так и локальные настройки для каждого проекта.
    Ответ написан
    1 комментарий
  • Как определить цвет пикселя на форме?

    Nipheris
    @Nipheris Куратор тега C#
    1) если хотите проверить, что кликнули на фигуру - лучше сделайте это с помощью уравнения эллипса;
    2) если все-таки нужен цвет пикселя - лучше делайте всю отрисовку в отдельный Bitmap, его потом выводите на форму (с помощью контрола Image, например), и ИЗ НЕГО потом считывайте цвет при клике по контролу. Так будет меньше сюрпризов, чем заморачиваться с экраном;
    3) внимательно следите, относительно чего считаются координаты, с которыми вы работаете - относительно угла экрана, формы или клиентской области формы.
    Ответ написан
  • Книги по Workflow по работе C# winforms?

    Nipheris
    @Nipheris Куратор тега C#
    Mark Collins - Beginning WF смотрели? Там вроде нет особой разницы под WinForms или WPF
    Ответ написан
    Комментировать
  • Как исправить постоянную ошибку с MaxReceivedMessageSize в NetTcpBinding?

    Nipheris
    @Nipheris Куратор тега C#
    > То есть за все запуски программы оно накапливается.
    Это было бы крайне странно, маловероятно, что причина в этом. Есть возможность собрать трафик сниффером и посмотреть, какая длина последнего успешно принятого сообщения, а какая - у первого выброшенного?
    Ответ написан