• Для чего нужны свойства зависимости?

    Все предельно просто - dependency properties это попытка получить реактивное программирование конкретно в рамках WPF и с минимальными затратами (без модификаций на уровне языков/платформы .net).

    Вы формулами в Экселе когда-нибудь пользовались? Вида =A1+A2+A3? Когда обновляешь ячейку A1 и автоматически обновляются все значения, вычисляемые по формулам, в которых встречается A1. Вот это примерно то же самое. Почему это так важно в WPF? Потому что а) это естественный способ связи свойств визуальных компонент друг с другом и с ViewModel-ью - без свойств зависимостей обновление зависимых значений превращается в адские цепочки Refresh-ей, Recalc-ов и прочего, и дай бог не забыть вызвать все нужные пересчеты. б) это дает механизм абстрагированной обработки и изменения свойств объектов (как правило - контролов), более производительный и узкоспециализированный по сравнению со стандартной рефлексией. Это, в свою очередь, обеспечивает возможность без лишних заморочек написать классы вроде DoubleAnimation, с помощью которого можно анимировать ЛЮБОЕ (!) свойство типа double у любого объекта, лишь бы оно было dependency property.
    Ответ написан
    Комментировать
  • Как извлечь значения из переменной, с помощью регулярки С#?

    Nipheris
    @Nipheris Куратор тега C#
    ^(?<text>[^:]*):(?<text2>[^:]*):(?<text3>[^:]*)$

    Не знаю, по какому источнику вы смотрели, в MSDN все предельно понятно: https://msdn.microsoft.com/en-us/library/bs2twtah(...
    Ответ написан
    2 комментария
  • Пользовательский интерфейс и C# на html?

    Nipheris
    @Nipheris Куратор тега C#
    Значит возможен ли UI с помощью html, css и js?

    Возможен: Atom, VS Code и прочие приложения на Electron-е (не только они, разумеется, это как пример).
    Ходят слухи что WPF, помирает и толк его использования, сходит на нет.

    Не делайте поверхностных выводов. WPF это ж не какой-нидь дед старый, который когда помирает, мало чем уже семье помочь может. Если технология просто не так активно развивается, это не значит, что она по определению в хвосте какой-либо другой.
    Все, кто использует HTML для десктопного интерфейса это те, кто хочет а) кроссплатформенности; б) сделать свою софтину hackable, например чтобы можно было всякие плагины писать на js, и тем самым понравиться своим клиентам-разработчикам. Ну и еще в) те, кто кроме html+js стека ничего не знает, а декстопа тоже хочется ("мы же тоже люди").
    Ответ написан
    1 комментарий
  • Где получать биржевые данные по API?

    www.batstrading.com
    А некоторые крупные брокеры, например CQG, сами помогут в этом вопросе: https://develop.cqg.com/qd/?page=ContinuumDocumentation
    Ответ написан
    Комментировать
  • Как корректно обрезать строку тип string в utf8 на с++?

    Nipheris
    @Nipheris Куратор тега C++
    ICU
    Ответ написан
    Комментировать
  • Как настроить outlook для перемещаемых профилей Windows?

    1) в рамках roaming-профиля должна перемещаться папка %USERNAME%\AppData\Roaming, она для этого и была сделана; все адекватные приложения кладут все, что должно ездить вместе с пользователем, сюда. В т.ч. настройки, если они не в реестре;
    2) в аутлуке файл данных всегда можно положить куда душе угодно. Дефолтовое расположение для PST-шек - это Outlook Files в подпапке Documents, которая вроде как уже у вас ездит. OST-шки лежат в AppData\Local и роумингу не подлежат, т.к. представляют собой локальный кэш IMAP-аккаунтов.
    Ответ написан
    Комментировать
  • Чем заменить x11Info при переходе на qt5?

    Nipheris
    @Nipheris Куратор тега C++
    В целом, заменить можно на QDesktopWidget , но придется как-то уйти от использования класса Display, указатель на объект которого возвращается методом display(). Нужно разбираться, что за функция XRRGetScreenInfo, и как она этим Display пользуется. Возможно, будет достаточно свойства primaryScreen для получения номера главного экрана и метода screenGeometry(int screen).
    Ответ написан
    Комментировать
  • Как работает C#?

    Nipheris
    @Nipheris Куратор тега C#
    А откуда берётся этот MSIL? Куда компилируются .cs?

    cs компилируются компилятором. Есть стандартный csc, поставляется вместе с .net framework (НЕ со студией). Это "классический" компилятор от MS, написан на C++, с закрытым исходным кодом. Такой же есть и для Visual Basic. Кроме них есть еще Roslyn-компиляторы C# и VB, они open-source, их главное отличие в том, что они сами написаны на управляемых языках. Это значит, что у вас есть compiler-as-a-service. Это, в свою очередь, значит, что если вы хотите написать тулзу, обрабатывающую тем или иным образом исходный код, например на C#, вам не нужно самому писать парсер/компилятор, вы можете подключить модули Roslyn-компилятора и пользоваться ТЕМ ЖЕ компилятором (лексером/парсером/etc), что и используется непосредственно при сборке приложения. С классическим компилятором так не получится, он представляет из себя черный ящик: cs на входе, сборка на выходе.

    Далее будем считать, что не учитываем в рассуждениях технологию .net native.
    в каком моменте тогда работает виртуальная машина

    она работает в момент запуска exe.
    почему мы получаем на выходе .exe

    в этом вопросе часто возникает путаница. Дело в том, что дотнетовские exe и dll - это т.н. сборки (assemblies), и они содержат метаданные и MSIL (!) исполняемый код. То, что у них расширения exe и dll - это потому, что MS для повышения совместимости и удобства использования, упаковала их в формат PE. Чтобы .net приложения можно было запускать также, как и нативные. НО реально в exe-файле есть только небольшой загрузчик, который запускает CLR, просит загрузить текущий файл как дотнет-сборку и передать управление на метод-точку входа. Почитайте про сборки в хорошей книге, и скачайте dotPeek, посмотрите что внутри дотнетовского exe. Это совсем не то, что в "обычном", нативном exe.

    В мире C# существуют также такие понятия как .NET, Mono, Roslyn и т.д., можете ли вы структурированно разъяснить их смысл?

    .NET это название и бренд платформы, .NET Framework, а теперь и .NET Core - реализации платформы от MS, Mono - open-source реализация НЕ от MS. .NET FW работает только на винде, .NET Core и Mono и на других платформах. Про Roslyn уже упомянул.
    Ответ написан
    Комментировать
  • Как использовать общие переменных в многопоточных программах с++?

    Nipheris
    @Nipheris Куратор тега C++
    Ну начнем с того, что 10000 итераций на современном процессоре выполнится настолько быстро, что вероятно уложится в отведенный потоку квант времени, и второй поток скорее всего даже не успеет получить процессорное время, чтобы поменять вашу переменную. Поэтому ИСКЛЮЧИТЕЛЬНО в целях эксперимента можете попробовать увеличить число итераций хотя бы до 10 миллионов, и отключить по максимуму оптимизации (не по причине скорости, а по причине потенциального выбрасывания кода компилятором), т.к. наверняка количество итераций есть причина неудачи в вашем эксперименте.

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

    С архитектурной точки зрения, если у вас снятие показаний, то у вас просто классический случай producer-consumer - впилите потокобезопасную очередь, и пользуйтесь.
    Ответ написан
    3 комментария
  • SQLite FTS5 usage, what does xToken() do in xTokenize()?

    Nipheris
    @Nipheris Куратор тега C++
    В https://sqlite.org/fts5.html#section_7_1 ясно написано:


    xTokenize:
    This function is expected to tokenize the nText byte string indicated by argument pText. pText may or may not be nul-terminated. The first argument passed to this function is a pointer to an Fts5Tokenizer object returned by an earlier call to xCreate().
    ..........
    For each token in the input string, the supplied callback xToken() must be invoked.

    ВЫ пишете тройку функций xCreate, xDelete, xTokenize. При вызове вашей xTokenize ей будет передан колбэк, который, как правильно подметил abcd0x00 , нужно будет дергать для передачи движку SQLite готовой (т.е. подготовленной ВАМИ в процессе работы xTokenize) лексемы. Они называют это токен, но вообще это лексема, т.к. вы отдаете кусок из входной строки.
    Итого, все максимально просто - вам дается строка, вы по своим алгоритмам и критериям решаете, где в ней какие лексемы. Для каждой найденной лексемы дергаете данный вам xToken, чтобы сообщить эту радостную новость SQLite.
    Обязаны ли мы его вызывать?

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

    его реализует SQLite.
    Ответ написан
    1 комментарий
  • C++ сеть. Как работать с сетью в C++?

    Nipheris
    @Nipheris Куратор тега C++
    Знаю что есть библиотеки ACE, POCO, BOOST(гуглил), но ничего про них не знаю больше.

    ну так узнайте! Узнайте про Boost::Asio, узнайте про cpp-netlib, построенную поверх него (как раз будет вам HTTP клиент и сервер)
    Ответ написан
    Комментировать
  • Как побороть foreign key constraint violation в MySQL?

    dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key...

    If ON UPDATE CASCADE or ON UPDATE SET NULL recurses to update the same table it has previously updated during the cascade, it acts like RESTRICT. This means that you cannot use self-referential ON UPDATE CASCADE or ON UPDATE SET NULL operations. This is to prevent infinite loops resulting from cascaded updates.


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

    Nipheris
    @Nipheris Куратор тега C#
    https://msdn.microsoft.com/en-us/library/windows/d...

    If the hook procedure processed the message, it may return a nonzero value to prevent the system from passing the message to the rest of the hook chain or the target window procedure.

    1 минута 25 секунд на поиск. Или вы какой-то другой хук ставите?
    Ответ написан
    2 комментария
  • Каким способом реализовать на канвасе "зум" например от года к конкретному дню недели?

    Nipheris
    @Nipheris Куратор тега C++
    А чего тут думать. Ну введите некое условное обозначение зума, например 1 - это минимальное увеличение, как сейчас. Также введите точку - центр viewport-а, куда смотрит пользователь. В зависимости от значения масштаба, отрисовывать дни/часы или минуты. Отрисовывать только то, что видно через вьюпорт. Таким образом у вас получится длинный-предлинный календарь, в каждый момент времени вы будете видеть лишь его фрагмент. Ну как тайловых картах сделано.
    Ответ написан
    Комментировать
  • User Settings Database Design/Scheme?

    0 [вступление] )
    Я не знаю почему но мне найблоьше нравится 3 вариант, но уже надоело делать под себя. хочется сделать как у людей)

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

    Теперь по делу:
    1) вариант подходящий для случая до 5-6 настроек на юзера, и с уверенностью, что их количество расти не будет; если больше - не стоит;
    2) это EAV. Не особо вижу в нем смысле, если вам доступен пункт 3;
    3) json-колонка settings вполне себе ничего. Важным премуществом является то, что вы тогда можете хранить только переопределенные пользователем значения. А как правило, пользователи не меняют более 20% настроек, особенно если они удачно подобраны. Т.е. после создания у вас будет пустой объект json, и после каждой смены настройки в объект будет добавляться поле, если настройка еще не менялась, либо обновляться, либо удаляться, если юзер нажал "reset to defaults". В случае пункта 1 вам бы пришлось использовать NULL для пометки того, что пользователь не устанавливал эту настройку;
    4) не вижу особого смысла: файлы настроек, вероятно, будут небольшими, плюс эти файлы будут лежать у вас списком, а не иерархией, а тогда смысл использовать ФС;

    и еще 5) если проект большой и настроек и юзеров много, я бы подумал об использовании документной БД для этой цели - тогда можно будет выделить отдельный сервис для задачи хранения настроек.
    Ответ написан
  • Где лучше включать заголовочные файлы?

    Nipheris
    @Nipheris Куратор тега C++
    К teugen добавлю, что если вы используете не значение класса/структуры, а указатель на него, то в хедер вместо инклуда другого хедера можно вставить объявление класса:

    #pragma once
    class ExampleClass;
    class MyClass {
    public:
     ExampleClass* ExampleFunction();
    };

    а инклуд определения класса делать там, где без него уже никак - например там, где вызываются методы класса или создаются его экземпляры.
    Ответ написан
    2 комментария
  • ADO.NET море проблем?

    Nipheris
    @Nipheris Куратор тега C#
    1) использовать EF7 с edmx невозможно, т.к. последний считается устаревшим форматом/подходом к хранению структуры БД (см. blogs.msdn.com/b/adonet/archive/2014/10/21/ef7-wha... Если все-таки очень хочется edmx - попробуйте установить EF6;
    2)
    что надо установить SQl Server

    установить надо было скорее всего Entity Framework Tools, что, в общем-то, логично. Для установки EFTools нужно при установке выбрать SQL Server Data Tools (см. https://github.com/aspnet/Tooling/issues/53 ), что тоже логично. Вы точно устанавливали их при установки студии? Обращаю ваше внимание, что это Tools, а не сервер.
    Ответ написан
    2 комментария
  • Чем отличаются языки программирования PHP, PYTHON, RUBY?

    1. Аналогию с самими языками проводить не стоит. Аналогию стоит провести для платформ.
    Платформы вроде .net и java, которые разрабатывались для энтерпрайза, разумеется лучше для него подходят. И не важно даже, десктопное у вас приложение или веб-сервис. Важно, что в платформе есть поддержка нужных стандартов и технологий с гарантией качества от производителя.
    С другой стороны, многие компоненты таких платформ это closed-source. Поэтому, если вы не банк, а стартап, то для веб-сервиса выбирайте
    Ruby или Python.
    Социальную сеть можно сделать много на чем, но я бы делал на рельсах или джанге. А вот функционал сбербанк-онлайн я бы делал на ASP.NET MVC (т.е. на C#) или на джаве (на спринге например). Однако, тот же близзовский battle.net написан на спринге (сервер когда-то случайно отдал мне stack-trace после ошибки).

    Хотя, имхо, некоторые ключевые элементы дизайна языка все-таки влияют на возможность его применения в крупных проектах. Например, я считаю, что писать крупные проекты на языке со статической типизацией намного проще. Однако это вопрос очень холиварный.

    2. Нет, не будет. Не должно быть, если точнее. Для пользователя язык общения с сервисом - HTTP. Если в современном веб-фреймворке нельзя нормально абстрагироваться от используемой технологии, это плохой фреймворк.

    3. На PHP много чего нельзя сделать. Вернее, КАК БЫ можно все, но нормально можно только веб. Именно поэтому для меня он не язык, а какой-то шаблонизатор - слишком у него дурная история и связь с веб (что нехорошо для языка общего назначения). Конечно, современные веб-фреймворки его очень хорошо причесывают, что даже можно работать с ним, но мы же о языках говорим..

    4. Для веб-проектов между Ruby, Python и PHP человек бы выбирал исходя из своих умений. У каждого языка своя экосистема (библиотеки, пакетные менеджеры, серверы приложений/плагины для веб-сервера) и довольно непросто знать все сразу. Именно поэтому все расходятся по своим лагерям и просто работают. Первичный выбор языка часто определяет его популярность. Лет 5 назад Руби всех рвал за счет Рельсов, сегодня Питон и PHP подтянулись в плане экосистемы, поэтому ситуация уже другая.
    Если человек таки сумел познакомиться с разными языками, он выберет тот, в котором ему проще мыслить. Модель ООП, статическая/динамическая типизация - все это определяет ощущения КОНКРЕТНОГО человека от КОНКРЕТНОГО языка.

    5. PHP учится быстрее всех, но если вы не знаете других нормальных языков, лучше его не учите - испортитесь как программист. Python и Ruby учатся примерно одинаково. Изучение C++ - совсем другая история, я бы не ставил его в один ряд с Питоном - этот язык несколько другого уровня и требует других (более глубоких) знаний о вычислительной технике (т.е. он 100% учится дольше, чем Python).
    Ответ написан
    22 комментария