• Как реализовать на C# обработчик функций по клику с нажатой горячей клавишей в UserControl?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Эм...если не нажата....то сразу выходите return'ом из обработчика,
    если нажата, то делайте что нужно...
  • Как сбросить Балласт создаваемый библиотекой Newtonsoft.Json c#?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    В сборку, т.е. в файл .exe, получащийся после компиляции вашего кода, можно добавить практически произвольные данные в виде строк, картинок, звуков и просто бинарные данные. Visual Studio имеет специальные инструменты для этого (в свойствах проекта ищите вкладку Resources). После добавления ресурсов студия сгенерирует специальные классы с помощью которых вы сможете легко получить доступ из программы к этим прикрепленным данным. Ресурсы будут доступны как статические свойства класса Properties.Resources.
    Если вы добавите в проект файл Newtonsoft.Json.dll как бинарные данные под именем Newtonsoft_Json_dll, то в этом классе автоматически появится свойство Properties.Resources.Newtonsoft_Json_dll имеющее тип byte[], в котором побайтно хранится содержимое файла Newtonsoft.Json.dll.

    Далее...
    Когда при выполнении программы возникает необходимость в классах и методах другой сборки в этот момент .NET Framework начинает искать эти сборки в стандартных местах: в текущей папке, в глобальном кэше сборок и тому подобное и когда найдет их - загружает.
    Но перед этим проверяет, а не задано ли в программе особого способа загрузки каких либо сборок. Для этого проверяется задан ли делегат AppDomain.CurrentDomain.AssemblyResolve. Если задан, то ему передается запрос типа: "А дай-ка мне сборку с таким-то именем" и ожидается, что эта сборка будет получена.

    Перед запуском приложения нужно определить этот делегат, в котором мы должны загрузить сборку и вернуть ее.

    Что касается нашей сборки, лежащей в ресурсах. Когда фреймворк обращается к делегату AssemblyResolve мы должны убедиться, что требуется именно Newtonsoft.Json.dll. Можно сделать как я сделал (но в этом случае нужно точно знать это имя, которое я получил через отладчик), либо можно рискнуть и попробовать условие типа такого:

    e.Name.StartsWith("Newtonsoft.Json")

    Если это условие выполняется, то загружаем сборку с помощью метода System.Reflection.Assembly.Load(Properties.Resources.Newtonsoft_Json_dll), которая в качестве параметра принимает массив байт загружаемой сборки (а мы помним: в ресурсах лежит как раз то что нужно)
    и возвращает уже загруженную сборку, которую мы и возвращаем return`ом.
    Если сборка не наша, то возвращаем null.

    Есть нюанс.
    Если мы пользуемся внешней сборкой-зависимостью, то ее поместили в ресурсы и забыли.
    А если нам нужно прикрепить наши библиотеки из этого же Solution`а, то при изменениях в наших библиотеках прикрепляться должны свежие файлы. В этом случае нужно задать целевой папкой для наших проектов-библиотек-зависимостей папку из которой прикрепляются ресурсы (В папке проекта с ресурсами при прикреплении ресурсов появится папка Resources. Вот ее надо указать целевой (Output Path) для проектов-библиотек-зависимостей).
  • Чтение данных из com порта вешает программу. Как заставить обработчик работать в другом потоке?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    в форме забыл richTextBox разместить

    в конструкторе формы надо в конце дописать

    Controls.Add(richTextBox);
  • Как работает контейнер внедрения зависимостей?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov Автор вопроса
    Я могу представить способ отложенной инициализации зависимостей, не завязываясь жестко на IoC-контейнер....через делегат. То есть мы в сложный объект передаем не саму зависимость, а способ ее создания, когда будет нужно. Но в таком случае сложный объект должен поддерживать такой сценарий создания объекта зависимости. То есть с произвольным объектом такое не пройдет?
  • Как работает контейнер внедрения зависимостей?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov Автор вопроса
    Сергей Соколов: я видел это....не понятно.....


    2. Создаем сам контейнер, указывая его конфигуратор:

    IKernel ninjectKernel = new StandardKernel(new SimpleConfigModule());
    // там где нужно создать экземпляр ScheduleViewer мы вместо new, делаем так:
    ScheduleViewer scheduleViewer= ninjectKernel.Get();

    Контейнер сам создаст экземпляр класса ScheduleManager, вызовет конструктор ScheduleViewer и подставит в него свежесозданный экземпляр ScheduleManager.


    то есть теперь везде где нам надо использовать зависимость нам надо пропихивать этот ninject?
    то есть раньше мы зависели от ScheduleManager, сейчас зависим от ninject? шило на мыло, не?

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

    и как объяснить ninject`у что вот для этого экземпляра класса X нам нужна Y1-реализация интерфейса IY, а для другого экземпляра экземпляра класса X нам нужна Y2-реализация интерфейса IY?
  • Указатели и динамическая память в С++?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Таблица сложения/умножения это просто закэшированные вычисления. Мозгу проще работать с памятью, чем реально проводить вычисления. Вот наверняка, когда вы считаете сколько будет 7 + 7 вы просто вспоминаете, что это 14, а не реально визуализируете некие соотношения 14ти палочек/спичек/яблок. По сути у вас в голове есть эта самая таблица сложения, и лежит она чуть поближе таблицы умножения: в кэше первого уровня, так сказать. Кому-то явно про таблицу сложения в школе рассказывали, кто-то обошелся без этого названия.
    Таблицы сложения полезны для обобщения. Скажем при рассмотрении арифметических операции в недесятичных системах счисления. Или в теории групп.
  • Как называется такая конструкция в C#?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Не согласен, что написал что-то запредельное. Про OnStateValueChanged(value) в комменте к нему написано что это и зачем. Как минимум повод погуглить в этом направлении. Про события все равно читать в ближайшее время.

    "возвращать приватные объекты" может увести в гораздо более индийское место.
  • Замедляется реконнект вебсокетов в Firefox. Почему так? Как побороть?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov Автор вопроса
    Нашел вот такую замечательную штуку: https://github.com/joewalnes/reconnecting-websocket. Делает именно то, что мне нужно. Вопрос остается. Пока не изучал как реализовано...
  • Замедляется реконнект вебсокетов в Firefox. Почему так? Как побороть?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov Автор вопроса
    Хм....а еще вот интересно как ведут себя Firefox и Chrome если соединение невозможно установить? надо поизучать где-то, поэкспериментировать....
  • Замедляется реконнект вебсокетов в Firefox. Почему так? Как побороть?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov Автор вопроса
    Александр +: Тут несколько все по другому устроено. Функция Link, по сути, конструктор. Она даже через new может быть вызвана (но можно и как обычную функцию вызывать). В результате она она вернет объект, который может управлять соединением, который инкапсулирует сам WebSocket и который можно передавать в другие модули как зависимость, если есть такая необходимость.
    Возвращаемый объект link один на соединение (у меня в приложении использется одно соединение, то есть вообще один объект подобного вида на приложение). Но даже если мы их настрогаем 5 штук на один хост/порт они до запуска друг с другом не будут конфликтовать, поскольку пока соединение не открыто.
    Когда мы методом start откроем соединение у одного из link`ов, запуск последующих завершится исключением из-за занятости текущего хоста/порта. Но мы так делать и не будем, поскольку link в приложении предусматривается один.
    Если мы несколько раз подряд вызовем метод start, то ничего не произойдёт, поскольку внутренний webSocket был создан в прошлый раз, в начале метода start на это есть проверка и метод просто завершится, не выполнив ничего.
    Подразумевается, что соеднинение не может быть закрыто программно по инициативе клиента/браузера (кроме как закрытия вкладки).
    Соответственно, закрытие соединения может быть только по инициативе сервера, ну или по причине неполадок со связью (провод дернули, сетевой интерфейс выключили и тпх). И то, и другое, в итоге, должно привести у webSocket`а к вызову onclose (а то и нескольких, на что предусмотрена дополнительная проверка с помощью переменной timer). На onclose навешан отложеный запуск метода start, который по новой откроет новый WebSocket.
    То есть получается одновременно висящих в памяти открытых WebSocket`ов не будет по двум причинам, из-за конфликтов за хост/порт и из-за того, что новый WebSocket открывается только тогда, когда предыдущий уже закрывается.

    Предположение:
    Возможно как раз в этом месте проблема. Закрывающийся в firefox`е WebSocket закрывается не мгновенно и как-то может придерживает хост/порт, но поскольку состояние у него "уже закрываюсь", то новый WebSocket не генерирует исключение, а встает в очередь и дожидается пока ему хост/порт дадут. А в Chrome типа сразу хост/порт высвобождается..... Но как бы это подтвердить/опровергнуть? И что с этим делать?
  • Какими знаниями необходимо обладать, чтобы успешно освоить радиотехнику и связанные с ней предметы в ВУЗе?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Хоровиц книга конечно знаковая. Но есть мнение, что она хоть объемная, но поверхностная. Так сказать американский подход. В отличие от советского подхода более глубокого, теоретического.

    Меня смущает, что вы просите научить базовым понятиям. Я правильно понимаю, что вы уже поступили в ВУЗ , а у вас есть пробелы? Первый курс закроет эти пробелы если подойти к этому делу ответственно.
  • Какими знаниями необходимо обладать, чтобы успешно освоить радиотехнику и связанные с ней предметы в ВУЗе?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Про p-n переход расскажут. Загодя про него знать необязательно. Да и после он, честно говоря, не особо нужен, если вы, конечно, не собираетесь заниматься разработкой микросхем и других электронных компонентов. Для использования электронных компонентов достаточно более менее простых макромоделей, хотя, конечно, представление иметь о том что там внутрях надо.

    Надо знать про электрический ток: что такое, условия протекания, эффекты. Магнетизм. Надо хорошо знать математику. Интегрирование, дифференцирование. Глубоко представлять что они из себя представляют.

    На первом/втором курсе будет много математики, но она часто не поспевает за физикой и радиотехническими предметами. Плюс бывает некоторое рассогласование: всю математику не рассказать, а в в физике используютс некоторые сложные концепции. Наример, в математике нам не рачсказали про дивергенцию и ротор поля, а в физике уравнения максвела рассказывали с их использованием, на их основе потом пошла теория волновых процессов и далее электродинамика и распространение радиоволн, и после антенны и свч устройства. То есть я в самом начале на физике это не усвоил, а все остальное, на этом основанное, прошло почти мимо. Ладно я с этмм не собирался работать, но если вы хотите например работать в сотовых компаниях, там там где расчет зон покрытия и тому подобная высокочастотка, то это бы понадобилось.

    Я к чему.....если что то не поняли, то лучше не оставлять на авось потом разберусь, а разбираться сразу - потом времени не будет, потом будут другие интересные вещи.
  • Как понять комплексные числа?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    daniilorain: надо быть аккуратнее в определениях. Модуль комплексного числа есть действительное число. Как может быть действительное число вектором непонятно. Модуль комплексного числа - это длина радиус-вектора в геометрическом представлении комплексного числа. Опять же сам радиус-вектор не является комплексным числом.
  • Что читать о принципах проектирования и алгоритмах программ на JavaScript?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    JavaScript. Шаблоны. Стефанов есть и на русском языке. Хорошая книга.
  • Как эффективно переключать изображения в SVG?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov Автор вопроса
    Обычно пишу так, чтобы через пару месяцев вернувшись к проекту для добавления функционала не пришлось бы все переписывать и не хотелось оторвать руки себе сегодняшнему. Хотя второе часто не срабатывает....
  • Как эффективно переключать изображения в SVG?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov Автор вопроса
    а у прямоугольников внутри g позиционирование ведь не относительно координат g, не очень удобно....и размещать и анализировать потом что получилось

    ну и сам компонент довольно изощренный может быть - плодить в итоговом SVG не хотелось бы......надо что-то типа symbol или defs использовать. Но вот в symbol стили нельзя переопределить, это не есть гут.
  • Как эффективно переключать изображения в SVG?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov Автор вопроса
    * Когда я использую теги symbol и use...
  • Как эффективно переключать изображения в SVG?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov Автор вопроса
    Не совсем понял фразы типа "что в не имею доступа к внутренней структуре, задаваемой в"
    : имеется в виду, что мне для размещаемого объекта нужно уметь переопределять стили входящих в него примитивов.

    Например, мой компонент состоит из двух прямоугольников. На уровне состояний я определяю, что в состоянии таком-то, прямоугольники будут отрисованы пунктиром, в другом состоянии будут сплошным карандашом, в третьем состоянии будет анимация - за секунду прямоугольники станут прозрачными, а потом опять непрозрачными. На основе этого компонента я размещаю на области рисования (не владею терминологией....canvas..не?) три объекта. И уже у объектов определяю, что первый объект должен быть полностью красным, второй - полностью зеленым, а у третьего объекта первый прямоугольник должен быть красным, а второй - зеленым.

    Когда я использую - у меня уже не получается изменить ни цвет объектов целиком, ни отдельно внутренних прямоугольников.
  • VPN для безопастности случайных WiFi?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    а чем плох такой вариант от "радивых хакеров"?

    у меня нет компетенций по ИБ, но задача стоит похожая: безопасно подключиться к домашнему серверу, планировал сделать это аналогично - через vpn.
  • Какую фантастику порекомендуете, где главный герой программист/инженер?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Начал читать. Хорошо идёт, но только ещё первая книга, а ГГ уже практически смесь Чака Нориса с Кевином Митником)