• Как узнать координаты мыши относительно Canvas (C# WPF)?

    Nipheris
    @Nipheris Куратор тега C#
    Espleth Касательно WinForms - можно обойтись без магических констант (которые неизбежно будут разные на разных операционках, с разными темами и с разыми DPI, т.е. одно и то же значение использовать в принципе невозможно), для этого есть ClientSize
    lucky_e3 Касательно WPF - совершенно не понятно, почему вы в GetPosition передали null вместо вашей канвы: черным по белому написано https://msdn.microsoft.com/en-us/library/ms591423%... - возвращает позицию относительно указанного элемента. Canvas является FrameworkElement, поэтому и IInputElement тоже. Поэтому запросите позицию относительно канвы и не надо констант.
    Ответ написан
    2 комментария
  • Как запустить код Console Application из Windows Form Application?

    Nipheris
    @Nipheris Куратор тега C#
    > Но хотелось бы чтобы исходный код компилировался и запускался.

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

    Nipheris
    @Nipheris Куратор тега C#
    В кавычки всю строку BrainFuck-а. А вообще, сделайте нормальный интерактивный режим, как у всех.
    Ответ написан
    Комментировать
  • Как привязать домен к VPS, у которой нет выделенного IP?

    По мотивам комментариев:
    1) сначала откройте nslookup и проверьте, в какой айпишник СЕЙЧАС резолвится ваш домен, тот который вам нужен. Если он резолвится в IP, который к вашему не имеет отношения, то скорее всего это парковочный сервер, который и редиректит на сайт хостера
    2) вы уж определитесь, есть у вас белый IP или нет. То что вы подключаетесь по ssh вовсе не значит, что IP у вас белый, вам скорее всего просто проброс порта настроили, раз вы указываете нестандартный порт для подключения (2006, стандартный - 22). Вероятно, вы сняли сервер по дешевому тарифу, который не включает в себя выдачу белого IP. Направить A-запись на общий IP конечно можно, и может быть даже нужно, но это зависит от конфигурации сети вашего хостера. Теоретически он может пускать траф через прокси, который затем стучится на ваш сервер.
    3) вообще обычно в таких случаях выдают белый IP, и человек делает с ним что хочет, привязывает dns и подключается по стандартным портам. если внешнего адреса у вас нет, разбирайтесь с хостером, какие конкретно возможности он предоставляет и как у него можно захостить сервисы на такой VPS. Киньте ссылку что-ли на тариф, который выбрали.
    P.S. И да, причем тут sudo hostname мне тоже непонятно, запись в файле hostname к конфигурации dns никакого прямого отношения не имеет.
    Ответ написан
    1 комментарий
  • Как выделить абзацы в тексте тегом правильно?

    Nipheris
    @Nipheris Куратор тега C++
    Если четких признаков начала нового абзаца в исходном тексте нет (а их нет, раз у вас каждая строка бьется \n), то тогда оценивайте примерно - если строка дошла до некоторого предела, значит скорее всего следующая строка - это продолжение старого абзаца, а если не дошла до предела, а закончилась довольно рано - то скорее всего новый абзац.
    Точного решения пока не могу предложить, да и врядли оно есть.
    А может быть у вас абзац начинается когда два \n подряд идут?
    Ответ написан
    Комментировать
  • Можно ли смержить бинарные файлы с решением конфликтов, и если нет, почему нет решений на эту тему?

    Теоретически можно, ведь можно указывать mergetool, если хочется. Другой вопрос - как из этого построить что-то работающее. Текст - это такая удобно нормализованная штука - есть строчки, в нормальном тексте они короткие, делятся переводом строки - удобный элемент для квантования целого ресурса. С бинарниками так просто уже не поступишь: во-первых, для каждого формата свой подход (а для текста совершенно разного назначения вполне можно использовать одну и ту же тулзу), а во-вторых - нужно уметь собственно совмещать то, что в картинках различается. Некоторые форматы, например PSD, вполне можно было бы смержить в ситуациях, когда разные люди добавили разные слои и работали каждый в своих.
    Я думаю все дело в соотношении простота/спрос. Написать тулзу еще нужно суметь, ведь это в тексте достаточно просто вставить строки друг за другом, а в PSD нужно полностью всю служебную инфу обновить и вообще правильно записать весь формат, плюс нужно продумать естественное поведение в каждой конфликтной ситуации, а в сложных форматах их намного больше, чем в тексте - один дизайнер слой переименовал, а другой - нет, и оба чтото поменяли, нужно определить - мержить изменения в один слой или оставлять два разных. И еще миллион таких ситуаций со всем, что может храниться в PSD. А спрос-то не сильно велик - тут и программистам-то не всем нравится ветвление (и часто бывает оно и правда только усложняет процесс), а дизайнерам поди разжуй. Так что идея ваша вполне заслуживает внимания, просто при реализации она превращается во вполне конкретные частные решения, которые подаются вместе с основным инструментом, и не предназначены для работы с VCS общего назначения (Git, Mercurial).
    Вот под рукой отличный пример: команда Dr. Explain - тулзы для создания документации - недавно запустили сервис совместной работы. И фишка вся в том, что это более чем хорошая новость для пользователей этого продукта, т.к. их формат хранения практически не подлежит мержу средствами обычных VCS (это xml-ка, которая хранит внутри себя ВСЕ, в том числе картинки). Вот они и выкатили свой велосипед. Мы кстати пытались использовать это дело, сделали штук 6 коммитов в свой репозиторий, быстро поняли, что работать надо по-очереди, т.к. смержить просто нереально, а потом, пока еще не поздно, съехали на DocBook (с компиляцией в XSL-FO).

    P.S. Не так уж и не нужно - в перфорс есть оказывается такие приложения для мержа: www.perforce.com/helix-apps
    Ответ написан
    Комментировать
  • Как кодируются картинки?

    В общем случае конечно в протоколе передачи данных должен быть способ указания на то, как передаваемые данные интерпретировать. Например, в HTTP используются заголовки в ответе для указания типа содержимого (Content-Type) и кодирования на уровне HTTP, например, сжатия, если таковое присутствует. При получении данных клиент (например, браузер) должен раскодировать содержимое в исходный вид (например, распаковать, если сервер сжал отправляемый ресурс) и далее работать с ним на основе указанного Content-Type. Невозможно на 100% определить заранее, что картинка того или иного формата, но, как правильно подметил Павел Волынцев, у большинства форматов есть сигнатура, по которой с вероятностью 99.9..% можно сказать, что прилетела PNG-шка или JPEG. В любом случае, правильно реализованная читалка (декордер) графических форматов должна быть готова к тому, что картинка может быть повреждена и должна выдавать ошибку, если разобрать картинку согласно предполагаемому формату невозможно.
    Сами форматы растровых изображений (вектор не рассматриваем сейчас) как раз таки и различаются прежде всего: а) особенностями представления пиксельной карты (матрицы пискелей): как кодируется цвет, индексный или компонентный, сколько всего может быть различных значений цвета у пиксела, есть ли сжатие, какие алгоритмы сжатия применяются - без потерь (PNG) или с потерями (JPEG); б) служебной информацией: это может быть как базовая необходимая информация, например размеры картинки и размер одного пикселя в байтах (читай - сколько байт выделяется на цвет одного пиксела), так и дополнительная, например EXIF, где можно указать и автора, и режим съемки и много чего еще; в) доп. фичами, которые и делают каждый формат особенным: поддержка анимации (GIF, MNG), поддержка сжатия с потерями (JPEG), поддержка слоев в картинках (фотошоповский PSD), поддержка "многостраничных" картинок (TIF) и так далее.
    Конвертирование собственно сводится к:
    1) определению исходного формата картинки;
    2) чтению исходного формата с целью перевести его в удобное развернутое представление в памяти, удобное для программиста с точки зрения дальнейших операций (расжать, прочитать служебную инфу и т.д.)
    3) записи полученного представления в памяти в новый формат, что опять таки подразумевает запись необходимых сигнатур и служебной инфы в соответствии со спецификацией формата, плюс преобразование изображения алгоритмами сжатия, если нужно (например, эффективность jpeg для фотоизображений достигается использованием довольно сложного и хитрого алгоритма кодирования, учитывающего восприятие цвета человеком, в том время как PNG сжимает почти как обычный архиватор, который никак не интерпретирует сжимаемые данные).
    Надеюсь дальше понятно куда копать.
    Ответ написан
    Комментировать
  • Сохранение и загрузка бинарных файлов с русским текстом Qt в string. Как?

    Nipheris
    @Nipheris Куратор тега C++
    Переделывать строки с std::string на QString может быть и не нужно: достаточно всем договориться, что в std::string может быть UTF-8 текст. Тогда уже нельзя полагаться на соответствие символ == элемент_string-а, т.е. у вас std::string будет хранить уже не символы, а байты (!) строки, и size() будет уже показывать количество байт. Если вас нужно только сохранять/загружать, то это как раз вам подойдет. Затем, чтобы запихнуть в контрол, делаете в нужных местах str.toUtf8() и QString::fromUtf8(...) и счастье.
    Если вам нужно обрабатывать текст посимвольно, например вырезать подстроку, то без поддержки юникода вам ничего не сделать. В этом случае, либо юзайте QString в местах обработки текста, либо подключайте ICU.
    Ответ написан
    Комментировать
  • Как в mysql сделать уникальный индекс при таком условии?

    Быть очень просто: выпиливаем поле is_main, т.к. оно вносит избыточность, за которой надо следить (собственно, ваше условие, что только одна запись может иметь is_main, равное 1). Вместо этого впиливаем таблицу main_data (назовите как считаете верным), такой структуры: (item_id, id), поле item_id - первичный ключ, плюс вся пара является внешним ключом на my_table. Итого, у вас две таблицы одинаковой структуры (id, item_id). Однако в первой (которая my_table) у вас ключ (id), т.к. может быть несколько таких записей на один item_id, а во второй (main_data) у вас ключ (item_id). Во вторую таблицу вы сможете вставить максимум один элемент для заданного item_id (может правда такой записи не быть вообще, это придется контроллировать в коде). Кроме того, за счет предложенного внешнего ключа вы не вставите в main_data элемент, которого нет в my_table.
    Ответ написан
    Комментировать
  • Как исправить проблему с выравниваем байтов при загрузке изображения с помощью libjpeg?

    Nipheris
    @Nipheris Куратор тега C++
    Придется задать несколько уточняющих вопросов:
    0) libjpeg обязательно? Если вам для загрузки текстур, FreeImage отлично подойдет, он конечно толще по-определению, но с ним проще на порядок, да и формат переключить сможете, если что.
    1) вы уверены, что проблема в том, как грузится текстура, а не как вы рисуете? Если в шейдере сплошным цветом залить, все нормально отрисовывается?
    2) с цветами проблемы есть? форматы цвета точно совпадают?
    3) как решаете проблему с тем, что размер картинки - не степень двойки?
    4) getTextureWidth(), getTextureHeight() - что делают эти вызовы? Какой размер у текстуры получается?
    Ответ написан
  • Как добавить контекстное меню в проводнике только для одного файла (одновременно) определенного типа?

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

    Nipheris
    @Nipheris Куратор тега C#
    У тебя есть хобби или интересы какие-нибудь помимо программирования? Если есть - это отличный способ попрактиковаться с языком. Подойдет практически все, даже если ты любишь, например, рыбалку - тогда можешь составить интерактивную карту рыбных мест со статистикой ловли. А вообще: если фотография - напиши себе сам пару фильтров для изображений (поработаешь с графикой немного), если звук/музыка - также ищешь библиотеки, которыми можно прочитать файлы, и пробуешь делать простые вещи - изменение громкости, миксинг звуков. Автоматизируй что-нибудь, что тебе нравится, что ты хорошо знаешь, наверняка что нибудь найдешь. Самый крайний вариант всегда есть - персональная база данных для чего-либо. Тут уже вообще все подойдет - и музыка, и видео, и коллекционные значки, и твои личные спортивные рекорды и вообще что угодно. Я советую такой способ, чтобы ты почувствовал, что язык (особенно промышленный) - это инструмент, и нужно получать удовольствие от его использования. И правильный взгляд на вещи у тебя будет. И не перегоришь на третьей по счету бессмысленной задаче. Еще и корешам покажешь, как круто получилось.
    Мож в доту шпилишь или cs? Тогда инф. поддержу мачтей - статистику какую-нибудь, потом еще и интеграцию с сервером/стимом сделаешь.
    Ответ написан
    1 комментарий
  • C#. Как в реестре задать иконку пункта контекстного меню проводника из ресурсов exe файла?

    Nipheris
    @Nipheris Куратор тега C#
    Вместо пути к ico указываете путь к exe и, через запятую, номер иконки в ресурсах, например, С:\WINDOWS\system32\notepad.exe,1

    Вот неплохой пример: stackoverflow.com/questions/6799553/how-to-set-a-i...
    Ответ написан
    1 комментарий
  • Как соединить Netware 5.1 и Windows XP средствами IPX протокола?

    Устанавливаете на винде в свойствах подключения:
    1) протокол IPX
    2) клиент для сетей Netware
    Ответ написан
    Комментировать
  • BitmapImage.EndInit выдает NotSupportedException. Зачем?

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

    Аналогичная проблема на SO:
    stackoverflow.com/questions/7292764/no-imaging-com...
    stackoverflow.com/questions/26404496/wpf-bitmapima...
    stackoverflow.com/questions/3886849/error-in-my-by...

    Вобще поставьте английскую студию и не мучайтесь с русскими сообщениями об ошибках, от них толку так много, что приходиться переводить обратно на английский.
    Ответ написан
    2 комментария
  • Как использовать фильтры?

    Не до конца понимаю вашу проблему. Такое ощущение, что вы все делаете наоборот. Вам же фильтры нужно сделать по характеристикам товаров? Эти характеристики уже наверное как-то хранятся у вас в базе? Если хранятся, то их и нужно использовать, зачем к товару привязывать какой-то фильтр еще? Ваши данные о товарах должны храниться так, будто у вас нет никаких фильтров.
    Вот у вас таблица Items что из себя представляет? Там уже есть в каком-либо виде характеристики товаров? Может быть они еще в каких-то таблицах?
    Ответ написан
    Комментировать
  • Windows 10 и Geforce GT 740M (FulHD) размывают шрифты?

    Если в проводнике все нормально, проверьте, не включен ли HighDPI-режим. Если включен - то программы, которые его не поддерживают (а таких немало, особенно старые) будут выглядеть размыто.
    Ответ написан
    Комментировать
  • Передать дочернему процессу CTRL-C в C/C++?

    Nipheris
    @Nipheris Куратор тега C++
    a,b в языке С/С++ вычисляется как b. Вы взяли две константы через запятую в скобки, после чего они начали восприниматься как операция "запятая", результатом которой является второй аргумент. Т.е. если написать a = (67, 23), то в переменную a попадет значение 23. В вашем случае в функцию будет только передан флаг CREATE_NEW_CONSOLE, а вам, судя по мсдн-у, нужно оба, чтобы создать новую группу процессов. Соедините флаги так, как надо было изначально - через операцию логического или, т.е. "|" - и все должно работать. Вместо того, что в скобках, будет так:
    CREATE_NEW_PROCESS_GROUP | CREATE_NEW_CONSOLE

    Edit: Хотя нет, для групп процессов CTRL-C вроде как не поддерживается, попробуйте CTRL-BREAK. И флаги эти взаимоисключающие, судя по докам. CREATE_NEW_PROCESS_GROUP: This flag is ignored if specified with CREATE_NEW_CONSOLE.
    Ответ написан