• Передача информации между программами, правильно ли сделал?

    @cicatrix
    было бы большой ошибкой думать
    См. выше - Named Pipes (Именованные каналы) - это то, что нам рекомендует Microsoft (да и самое простое, если честно).
    Впрочем, ради масштабируемости, можете рассмотреть связь по TCP/IP (да, да, в пределах одного компьютера через 127.0.0.1 тоже можно). Это, кстати, позволит потом легко масштабировать программу до сетевого взаимодействия.
    Ответ написан
  • Выбор ЯП для обработки изображений?

    @cicatrix
    было бы большой ошибкой думать
    Для изображений потребуется быстродействие, особенно, если их много.
    Если ещё и попиксельная обработка, то я бы порекомендовал C или C++ - там, работая с указателями, можно очень быстро манипулировать памятью, в которой отображается растр.
    Если скорость исполнения/обработки не критична, то см. предыдущий ответ - любой язык подойдёт.
    Я бы даже дополнил, что на C/C++ следует написать только саму процедуру обработки, а интерфейс и прочее можно в чём угодно.
    Ответ написан
    Комментировать
  • Сколько нужно знать слов, чтобы начать учиться только на английском?

    @cicatrix
    было бы большой ошибкой думать
    знаете 1000 слов - покрываете 80% повседневных потребностей
    знаете 5000 слов - покрываете 95%
    Кроме того, есть закон Ципфа, согласно которому 2-е распространённое слово встречается в 2 раза реже, чем первое, 3-е - в 3 раза, 100-е - в 100 раз реже, и т. д.
    То есть, вопрос не в том, что вы знаете N слов, а в том, какие именно это слова. Первую 1000 (см. ссылку, которую я дал) можно выучить примерно за неделю, если поставить перед собой такую цель.
    Изучить хотя бы базовую грамматику (9 основных времён) - ещё неделя.
    И так, за пару недель можно в принципе научиться понимать 80% английских неспециализированных текстов.

    Для более глубокого изучения, советую читать. И читать не stackoverflow, а художественную литературу на английском (хоть того же Гарри Поттера, впрочем, это дело вкуса). При этом лезть в словарь не нужно. Просто читайте и старайтесь угадать, что то или иное слово означает (без словаря). Не задерживайтесь долго. Если предложение не понятно, постарайтесь хотя бы уловить общий смысл абзаца и пр. Опять же, словарь не трогайте.
    Для фонетики смотрите фильмы на английском и с английскими же субтитрами (без перевода). Желательно незнакомые фильмы, чтобы "перевод" из памяти вас не смущал. Старайтесь улавливать, о чём говорят и оттачивайте навыки восприятия языка на слух (читая субтитры). В общем, это уже отдельная тема.
    Начните с первой тысячи слов и основ грамматики.
    Ответ написан
    2 комментария
  • Что ж, как начать кодить(на C#)?

    @cicatrix
    было бы большой ошибкой думать
    Есть много ресурсов вроде coding game, hackers rank, code wars.
    Там можно не только участвовать в соревнованиях, но и тренироваться. Получаете задачу, решаете, затем можете посмотреть, как эту же задачу решили другие. В целом, очень помогает в изучении языка - можно выбирать и сложность задачи и тему.

    P.S. А вот без чего нельзя обойтись программисту, так это без английского языка. По моему мнению, обучиться программированию, не зная английского, попросту невозможно.
    Ответ написан
  • Задали написать свой Mutex на C#, как лучше?

    @cicatrix
    было бы большой ошибкой думать
    WaitHandle нельзя пользоваться? Мне while не сильно нравится, посмотрите на загрузку процессора с вашим циклом ожидания и WaitHandle
    Ответ написан
  • Есть ли возможность извлечь данные из файла .dwg, используя C#(желательно в excel)?

    @cicatrix
    было бы большой ошибкой думать
    Вот какая-то либа, но платная. Бесплатные наработки можно попытаться поискать на гитхабе или codeproject или sourceforge

    Вот ещё пакеты из NuGet
    Ответ написан
    Комментировать
  • Как сделать многоязычные уведомления?

    @cicatrix
    было бы большой ошибкой думать
    Вместе с пользователем храните только ID сообщения.
    В таблице сообщений храните переменные параметры и флаг (1 - новое, 0 - просмотрено)
    Постоянную текстовую часть - в отдельной таблице с идентификатором языка.
    ...
    как-то так
    Ответ написан
  • Следует ли отключать генерацию событий для графических элементов?

    @cicatrix
    было бы большой ошибкой думать
    И label, и panel наследуют от класса Windows.Forms.Control, соответственно, являются "дочерними" окнами (window) по отношению к основному.
    Чтобы ответить на ваш вопрос, надо понимать, что "под капотом" представляет собой событие.
    При регистрации нового окна в системе, выделяется память под программный код (оконная процедура WNDPROC), обрабатывающий приходящие сообщения (Windows Message). Для определённых классов (форма) в него уже сгенерированы обработчики, отвечающие на базовые сообщения (перемещение окна, сворачивание, изменение размера, перерисовка и пр). Оконная процедура есть у всех окон.
    Когда вы пишете обработчик события, на самом деле вы передаёте адрес этого обработчика оконной процедуре окна, говоря, что если пришло какое-либо определённое сообщение (Window Message), необходимо выполнить программный код, который находится по такому-то адресу.
    Соответственно, если вы не написали обработчик события, то никакой доп. памяти системой не выделяется (не в курсе, правда, оптимизирует ли компилятор "пустые" обрабочики событий).

    2. "Вдруг" в компилируемом языке невозможно без чёрной магии и метапрограммирования. Весь ваш программный код компилируется и под него выделяется память при запуске приложения. А вот передать новый параметр оконной процедуре в процессе исполнения можно, подписываясь на то или иное сообщение, или отписываясь от него. Все зависимости от этого, под весь скомпилированный код операционной системой выделяется память.
    Ответ написан
    Комментировать
  • Событие что ты нажал на иконку приложения в панели задач?

    @cicatrix
    было бы большой ошибкой думать
    Клик по иконке в панели задач приводит к запуску приложения. Если ваше приложение уже запущено, запустится ещё одна копия.
    Если вы хотите, чтобы ваше приложение запускалось только единожды (в одном экземпляре), то есть несколько подходов - либо создавать в системе мьютекс, и удерживать его до выхода (при повторном запуске, если мьютекс занят, завершать приложение), вот здесь описано подобное решение. (Там же приведён код активации окна уже запущенного приложения, если оно свёрнуто).
    Альтернативно, можно смотреть список запущенных процессов, искать свой процесс, и выходить, если найден.
    Либо в качестве мьютекса можно использовать любой блокирруемый системный ресурс (например, файл), но это не правильно.
    Ещё можно использовать именованный канал (named pipe), но это более громоздкое решение, и его следует использовать только если вам нужно осуществлять коммуникации между несколькими копиями вашего приложения.
    Ответ написан
    4 комментария
  • Как запретить изменение положения курсора в textbox?

    @cicatrix
    было бы большой ошибкой думать
    Вопрос - зачем? Скорее всего, вы используете textbox не по назначению. Если нужно построчное выделение, лучше используйте ListBox или DataGridView.
    Если просто хотите показать текст - Label

    Ну, а если месье знает толк в извращениях, тогда наследуйте от класса Form, ловите все сообщения к текстбоксу:
    public override bool PreProcessMessage(ref Message msg)
    {
       
    }

    и фильтруйте те, которые управляют курсором (клики мышью, нажатия клавиш, и пр.)
    Ответ написан
    2 комментария
  • Существуют ли анонимные хостеры ASP.NET?

    @cicatrix
    было бы большой ошибкой думать
    Выделенный виртуальный сервер можно попытаться арендовать анонимно. Разворачиваете на нём IIS и пользуетесь. Забесплатно - наверное не бывает.
    Ответ написан
  • Каким костылем можно узнать что завершены/заснули все потоки ThreadPool?

    @cicatrix
    было бы большой ошибкой думать
    Я обычно сохраняю ссылку на каждый экземпляр потока (объект Thread) в коллекции или массиве. Там можно проверять свойство IsAlive, ну и прибить тоже можно, если нужно (метод Abort() )
    Ответ написан
    Комментировать
  • Секундомер с горячими клавишами под Windows — реально?

    @cicatrix
    было бы большой ошибкой думать
    Не встречал, но можно и самому написать, задача тривиальная.
    Ответ написан
    Комментировать
  • Как создать COM-объект в программе на C#?

    @cicatrix
    было бы большой ошибкой думать
    Это называется Runtime Callable Wrapper или RCW.
    В большинстве случаев после регистрации COM компонента (в вашем списке под №1) достаточно просто добавить в проект ссылку на этот компонент (Add Reference) и импортировать пространство имён.
    От себя лишь добавлю, что работа с COM может приводить к утечкам памяти - сборщик мусора там не всегда справляется, так что подчищайте память за собой после работы.

    "Под капотом", если на пальцах, то CLR сгенерит "обёртку" вашего COM объекта (wrapper assembly), с которой вы и будете работать. Никаких CreateObject делать не надо (это для PowerShell или VBS больше актуально).
    Ответ написан
  • Какие бесплатные программы использовать в SEO?

    @cicatrix
    было бы большой ошибкой думать
    Я не SEO-шник, конечно, но, мне кажется, вы не с того начинаете.
    Задача SEO сводится к оптимизации того или иного ресурса для повышения его рейтинга релевантности в поисковых выдачах популярных поисковых систем по заданным ключевым словам.
    Подозреваю, что среди зоопарка программного обеспечения для SEO куча шлака, кроме того, некоторые из этих программ используют не одобренные методки, которые, скорее, вредны, чем полезны (так как использование различного рода хаков и попыток обмануть поискового робота могут привести к обратному эффекту), особенно если это делает новичок.
    Начинать изучение вопроса на вашем месте, я бы начал с изучения рекомендаций от самих поисковиков.
    Затем, немного разобравшись в вопросе, вы будете уже знать что именно вы хотите от различного программного обеспечения, которое сейчас предлагается, что поможет вам в конечном итоге и сделать правильный выбор.
    Ответ написан
    Комментировать
  • Как школьнику найти время на программирование?

    @cicatrix
    было бы большой ошибкой думать
    Вот хорошая книга:
    4IFhQHy.jpg

    У школьника ПОЛНО свободного времени. Это потом, когда вы по-настоящему поймёте, каково это, когда действительно в сутках мало 24 часов, вы будете вспоминать это время с ностальгией.

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

    @cicatrix
    было бы большой ошибкой думать
    Для проекта принимается naming convention. Собственно, это условности, но в больших проектах это имеет значение.
    Видел, использование префиксов: aOrders, arrOrders; как суффикс: OrdersArray, но в целом, множественное число кажется гораздо логичнее.
    Вообще, надо ориентироваться на naming convention, принятый в стандартных библиотеках языка, на котором пишется код, то есть, посмотреть на стиль наименований, которые приняли разработчики языка (собственно, это касается не только наименований массивов - между лаконичностью питона и МногокилометровымиНазваниямиКлассовНаСиШарп всё-таки разница в стиле заметна).
    Ответ написан
    Комментировать
  • Работа с большим изобилием форм?

    @cicatrix
    было бы большой ошибкой думать
    Смотря сколько всего форм.
    Можно и не заморачиваться сильно. Достаточно Ссылку на первую (1), как я понял (Activation) хранить где-нибудь глобально, чтобы все формы видели (например, в классе Program.MainForm);
    В событии Activated просто делать Program.Form1.Hide(); а в событиях Closing или Closed делать Program.Form1.Show()

    Ну и да, если форм много, то тогда проще расширить класс Form -
    public abstract class MyForm : Form
    {
        protected override void OnActivated(EventArgs e)
        {
            base.OnActivated(e);
            // TODO: Убедиться, что MainForm != null
            // System.Diagnostics.Debug.Assert(null != Program.MainForm);
            Program.MainForm.Hide(); 
        } // OnActivate
    
        protected override void OnDeactivate(EventArgs e)
        {
            base.OnDeactivate(e);
            // TODO: Убедиться, что MainForm != null
            // System.Diagnostics.Debug.Assert(null != Program.MainForm);
            Program.MainForm.Show(); 
        } // OnDeactivate
    } // class MyForm


    В общем, потом достаточно прописать в своей форме наследование не от Form, а от MyForm и всё. Любая форма будет вести себя так.
    Если "MainForm" может изменяться от раза к разу, то её в конструктор новой формы надо будет передавать.
    Ответ написан
    Комментировать
  • Прорисовка объекта в C#?

    @cicatrix
    было бы большой ошибкой думать
    Вы должны рисовать на объекте Graphics, который вам предоставляет Form_Paint.
    При срабатывании события Paint в аргументе PaintEventArgs вам будет передан объект Graphics, при помощи которого и надо производить отрисовку.
    Ответ написан
    1 комментарий