Задать вопрос
  • IDE не видит код?

    Nipheris
    @Nipheris Куратор тега C#
    1) удалите .suo-файл из папки проекта. Вы потеряете брекпоинты и закладки, но это возможно полечит проблему;
    2) пользуйтесь последней релизной версией - даже в RC могут быть проблемы.
    Ответ написан
  • Вопрос по C# и net framework?

    Nipheris
    @Nipheris Куратор тега C++
    > Не каждый пользователь будет его устанавливать.
    Кто еще не установил - тому стоит это сделать, MS даже через апдейт систему предлагает дотнет поставить. А еще фишка в том, что и программам на плюсах в подавляющем большинстве случаев приходится ставить райнтайм. Конечно, его dll-ки можно просто положить в папку с программой, но это плохой путь по ряду причин. Итого, и для шарпа и для плюсов нужно ставить "среду", единственное отличие - рантайм плюсов будет легче (правда сама прога, юзающая Qt и включающая его библиотеки будет значительно тяжелее).
    > На сколько я знаю, на семерке "из коробки" стоит 3 версия фреймворка
    Тройка - на Висте, на семерке - 3.5.
    > Так что же лучше - использовать C# или посмотреть в сторону C++ и Qt?
    Тут обычно гораздо важнее вопрос кроссплатформенности. Сейчас Mono обеспечивает только WinForms, т.е. того же WPF на никсах пока не видать (и видимо уже не увидим). Поэтому я сейчас безоговорочно выбрал бы Qt, если б делал десктоп-софтину не только для винды (в 2015 году лично я не могу относиться к функциональности и CPU-oriented архитектуре WinForms всерьез). Поэтому решение принять достаточно просто:
    1) если у вас line of business-приложение (напр., очередная утилитка для расчета кредитных условий по продуктам банка) и windows-машины в парке - смело берем C#, WPF, и решаем поставленную задачу;
    2) если у вас приложение для широкого круга лиц, и его интерфейс сложнее интерфейса перекодировщика WAV в MP3 - берем Qt, пишем код без и получаем приложение, которое запустится на большинстве десктопных машин, а не только на тех, где винда.

    P.S.
    1) безусловно, есть и более чем приличные коммерческие десктопные программы на шарпе, например очень удобный и навороченный референс-менеджер Citavi, но я думаю её авторы просто приняли решение поддерживать только винду, и это их устраивает. Кроме того, они используют много сторонних платных GUI-контролов у себя в продукте.
    2) реализовывать взаимодействие управляемого и нативного кода не так уж приятно, поэтому если ключевая библиотека реализована на плюсах, то и остальное приложение логично сделать нативным.
    Ответ написан
    Комментировать
  • На что смотреть в профиле приложения?

    Nipheris
    @Nipheris Куратор тега C#
    > На что мне нужно смотреть для оценки общей производительности?
    сами себе уже ответили - смотреть, какой код тратит больше всего времени процессора. На ваших скринах все это есть, в процентах и миллисекундах. Вот берете вызов ProcessDirM, у которого 60+%, и раскрываете дерево вызовов, смотрите, кого эта функция вызывала, и у кого также макс. время и так до тех пор, пока не поймете куда эти 60% растрачиваются.
    Ответ написан
    1 комментарий
  • Какие есть методы защиты приложения ограничением по времени?

    На стойкость не претендую, решение из собственного опыта:
    1) организовываем защищенное хранилище (напр, зашифрованный файл), который нельзя просто так прочесть и поменять - в нем мы будем хранить, сколько времени программе осталось работать, т.е. временной ресурс;
    2) придумываем, как этот файл генерировать - создавать самой программой при отстутствии этого файла - плохая идея, т.к. юзер просто удалит его и триал сбросится. Неплохой вариант - генерить на сервере, сделать эдакий "запрос триальной лицензии"; после установки лицензия запрашивается, далее с этим файлом работает сама программа;
    3) при каждом запуске файл читаем (с расшифровкой), смотрим сколько лицензированного времени осталось, ставим таймер (системное время использовать нельзя!), каждые N секунд вычитаем лицензированное время, обновляем файл. 30-60 секунд обычно вполне достаточно. Погрешность счета времени соотв. тоже будет до N секунд. Теоретически, каждые N-1 секунду прогу можно убивать и перезапускать, и тогда она не будет успевать вычитать счетчик времени, но я сомневаюсь, что в таких условиях программой вообще можно будет пользоваться.
    Довольно нелохой вариант, если конечно на взлом вашего софта не претендует толпа людей, умеющих дебажить в Olly с закрытыми глазами.
    А, ну да, и упаковщик какой-нибудь возьмите - еще немного усложните жизнь (хотя не сильно конечно).
    Ответ написан
    3 комментария
  • Как реализовать кэширование в Windows Media Player?

    Nipheris
    @Nipheris Куратор тега C#
    Берем NAudio, сами пишем кэширование как нам надо, кидаем на форму нужные нам красивые контролы, играем музыку. Средний разработчик набросает это все за день/два, подходит ли вам - решайте сами.
    Ответ написан
    Комментировать
  • Как авторизоваться в Active Directory C# winforms?

    Nipheris
    @Nipheris Куратор тега C#
    System.DirectoryServices.AccountManagement - более подходящего для вашей задачи набора классов не найти. Статья с автопереводом, поэтому если совсем ничего не понятно, берите этот неймспейс и вбиваете в гугл. Советую как можно быстрее начать исправлять потребность в русскоязычных источниках.
    Ответ написан
    Комментировать
  • Как последовательно показать результаты изменения одной переменной многими потоками?

    Nipheris
    @Nipheris Куратор тега C++
    > Просто синхронные вызовы ролла показывают лишь последний результат.
    ну так а почему асинхронность сразу значит - несколько потоков? И причем тут вообще асинхронность - вам нужно сделать нормальную анимацию, анимация - это отрисовка кадров в соответствии с ходом времени. Последний результат виден потому, что вы не возвращаете управление в цикл приложения, чтобы оно могло нормально обработать прочие сообщения. Уберите всю эту многопоточность, сгенерьте рандомом перед анимацией все игры, которые хотите мельком показать, поставьте обыкновенный таймер (QTimer) и отрисовывайте по сигналу таймера игры по очереди, пока не дойдете до последней - той что "выпала". Разберитесь с матчастью по mainloop и анимации и все станет ясно как божий день. Еще раз - никаких потоков для вашей задачи вам не надо, тем более 20 штук.
    Ответ написан
  • Переход с C# на C++?

    Nipheris
    @Nipheris Куратор тега C++
    > выкидывать полученные знания на помойку и начинать все с начала
    ничего вы никуда не выкинете. На плюсах вам просто чуть больше решений придется принимать самому, и дисциплина, скажем так, строже. Главные Знания - это методологии разработки, алгоритмы и общие навыки по написанию и отладке кода. В конце концов вы не на Хаскелл переходите, и даже не на F#, а на язык, который на основе плюсов был создан. Если после перехода вы все же скажете, что выбросили все знания на помойку, то видимо их и не особо много было.
    Конечно, есть стандартная библиотека .net, CLR и прочие платформенные вещи, но в современных реалиях и так приходится постоянно что-то новое учить. После бума джаваскрипта в последние 5 лет отрекаться от этого факта бессмысленно.
    Ответ написан
    Комментировать
  • Отличаются ли быстротой выполнения данные запросы?

    У нормального планировщика поведение конкретно для этих двух запросов должно быть одинаковым. В любом случае, перед вложенным циклом джоина нужно будет отфильтровать строки обеих таблиц по индексам. Т.к. условия фильтрации для обеих таблиц независимы, я даже не могу придумать, как выполнить запросы по-разному.
    А вообще второй вариант гораздо понятнее и программисту, и СУБД (легче построить план выполнения).
    Ответ написан
    Комментировать
  • Чем открыть bin-файл?

    > сравнение
    чего с чем? Если сравнить разные версии bin-файла, то попробуйте Beyond Compare, он хорошо в hex-кодах сравнивает
    А вообще, как уже заметили, bin - это никак, там может быть все что угодно. Лучше разберитесь в билд-процессе, понять что внутри будет проще.
    Ответ написан
    Комментировать
  • Как сделать звук в программе на си/си++?

    Nipheris
    @Nipheris Куратор тега C++
    DirectSound крайне не советую, очень старое API, на висте и выше уже в режиме совместимости работает, вот OpenAL можно, если на винде - то XAudio2 или даже ASIO, в зависимости от целей (игры vs софт для обработки звука) и "глубины погружения".
    Ответ написан
    Комментировать
  • Как работает механизм signal-slot QT, если нужно сигнал из объекта одного потока передать в слот объекту другого потока?

    Nipheris
    @Nipheris Куратор тега C++
    Ключ к пониманию передачи сигналов - понимание смысла существования QThread:

    > A QThread object manages one thread of control within the program. QThreads begin executing in run(). By default, run() starts the event loop by calling exec() and runs a Qt event loop inside the thread.

    Запуск собственного цикла обработки сообщений и дает возможность получать их в том числе и из других потоков. Фишка сигналов/слотов кьюта в том, что это еще и простая message queue система, наподобие эрланговской, если сталкивались. Вызов в рамках одного потока - это прямой вызов подписанных слотов на этом же стеке, а вот QueuedConnection или межпоточный вызов кладут в очередь соответствующего потока сообщение (эти сообщения лежат в одной очереди с сообщениями от ОС), и поток будет их извлекать в event-loop-е. Таким образом, вы просто просите другой поток вызвать слот, а вызовет он его когда в очередной раз будет отрабатывать цикл сообщений и он дойдет до сообщения о вызове слота.

    > It is safe to connect signals and slots across different threads, thanks to a mechanism called queued connections.
    doc.qt.io/qt-5.4/qt.html#ConnectionType-enum
    Qt::QueuedConnection - The slot is invoked when control returns to the event loop of the receiver's thread. The slot is executed in the receiver's thread.
    Ответ написан
    4 комментария
  • Сложно ли переходить с Windows на OS X или наоборот с OS X?

    Ради эксперимента при наличии времени на бубен и аппаратных ресурсов можно попробовать завести виртуалку с OS X. Насколько это сложно и реально ли вообще не могу сказать, но могу сказать что это лучше покупки макбука просто для эксперимента.
    Ответ написан
  • Как удалить коммиты из ветки?

    https://help.github.com/articles/about-git-rebase/
    https://git-scm.com/book/en/v2/Git-Tools-Rewriting...

    Это если вы хотите удалить коммиты из истории. Если историю нужно оставить, и просто перейти на состояние первого коммита, то см. ответ jcmvbkbc
    Ответ написан
  • Как из одной ветки перенести определённые файлы в другую ветку?

    > Есть две параллельные ветки разработки, которые работают с общими файлами. Но в одной и в другой ветки надо сделать изменения в этих файлах.
    > Соответственно надо вытащить из определённого коммита одной ветки только определённые файлы и залить их в другую ветку.
    не пойму где переход от первого ко второму. Ветки для того и есть, чтобы делать разные изменения в одних и тех же файлах. Если изменения одинаковые - смержите эти коммиты, сделанные в ветке А, в ветку B, или если мерж невозможен, то cherry-pick конкретных коммитов. Зачем что-то куда-то вытаскивать?
    Ответ написан
  • Как нужно настроить OpenVPN сервер, чтобы тот выдавал белый IP для каждого клиента?

    Соглашусь с тем, что вам нужны дополнительные маршруты.
    > Кажется, что клиенты Windows, Linux и Android попросту игнорируют эти настройки.
    Посмотрите логи запуска клиента, когда соединение устанавливается, все пишется подробнее некуда. Например, сразу понятно, что маршруты не добавятся, если вы запустили клиент OpenVPN на винде без повышения прав. Вполне возможно что аналогичная ситуация и на других платформах. Посмотрите таблицы маршрутов после запуска клиента и установления соединения. Если ожидаемые роуты там будут, то делайте трассировки.
    Ответ написан
    Комментировать
  • Какая программа проверяет чем блокирован внешний диск?

    Откройте для себя Process Explorer, в нем помимо прочего можно поиск по хэндлам делать. Ищите по букве диска (или по пути, если занят конкретный файл) и получаете список открытых хэндлов. Далее либо разбираетесь с программой, которая держит файл (что предпочтительнее), либо завершаете ее, либо закрываете конкретно висящий хэндл (правда из-за этого софтина может упасть, но это только в случае, если хэндл ей действительно нужен, а не потерян ею).
    Ответ написан
  • Вопрос по C# и net framework?

    Nipheris
    @Nipheris Куратор тега C#
    В XP предлагается для установки древнейший 1.1 и то его почти никто не ставит, так что можно считать, что нет (последний дотнет, поддерживаемый на XP - 4.0). В семерке из коробки 3.5 (что включает в себя 3.0 и 2.0), поставить можно любой из имеющихся на данный момент (1.1, 4.0, 4.5, 4.6).
    Ответ написан
    Комментировать
  • Реально ли запустить Visual Studio как portable?

    Nipheris
    @Nipheris Куратор тега C#
    > или может есть другой компилятор под С#?
    в зависимости от версии винды относительно (!) свежий дотнет может быть уже предустановлен, а с ним и csc, т.е. компилятор. С семеркой, например, идет версия 3.5. Конечно старовато, но для попробовать сойдет. Писать код можно хоть в блокноте, разумеется удобство не очень - можете посмотреть другие IDE для шарпа, возможно какие-то станут не в Program Files. Посмотрите кстати свежеиспеченную Visual Studio Code - это конечно не замена полной студии, и больше ориентирована на веб, но все-таки лучше, чем Блокнот. И да, устанавливается в AppData, что как раз вам подойдет.
    Если очень хочется более свежего компилятора, а дотнет установлен старый - можете попробовать повозиться с Roslyn, но это если у вас уже какой-то опыт с дотнетом есть.
    Ответ написан
    1 комментарий