В процессе работы, приложение .NET может столкнуться с исключением, которое оно по тем или иным причинам не обрабатывает. В этом случае вдело вмешивается среда CLR. Принимая пропущенное приложением исключение, CLR обрабатывает его и выдаёт пользователю на экран монитора информационное окно .NET Runtime 2.0 Error Reporting с сообщением о возникшей у приложения проблеме. После закрытия окна, CLR завершает работу некорректного приложения. При этом описание и параметры возникшего исключения дублируются CLR в событийном логе Windows в разделе приложений. Возникает естественный вопрос - а можно ли по зафиксированной в логе информации понять в каком месте приложения возникла исключительная ситуация, с тем чтобы внести необходимые исправления? Ответ Да. Посмотрим как это можно сделать.
Вычислительная машина ценна ровно настолько, насколько ценен использующий её человек. Но он обязан иметь идеи. Норберт Винер. "Кибернетика, или Управление и связь в животном и машине".
суббота, 4 октября 2014 г.
среда, 3 сентября 2014 г.
InputBox в C#
C# предлагает разработчику удобный класс MessageBox в пространстве имён System.Windows.Forms. Однако ориентирован он исключительно на диалоговые окна вывода различного рода сообщений. Диалоговых окон ввода данных (InputBox) не предусмотрено. Странная асимметрия. А ведь получать данные от пользователя приходится почти в каждом проекте! Конечно, можно создать собственный класс диалогового окна и реализовать весь необходимый функционал. Но гораздо быстрее и проще в условиях ограниченности времени использовать InputBox из сборки Microsoft.VisualBasic.dll. Подключив сборку к проекту, можно написать в тексте программы
var s = Interaction.InputBox("Text", "Caption", "Value", posX, posY);
Первые три параметра имеют формат строки. Последние два в формате целого числа управляют расположением окошка на экране монитора. Это очень важные параметры, так как InputBox не предлагает никаких средств для привязки его к родительскому окну. Поэтому, чтобы окошко не появлялось на экране где попало используется его позиционирование. Значение введённое пользователем возвращается функцией InputBox в виде строки.
пятница, 27 июня 2014 г.
Работа с zip в C#
Работая в рамках NET Framework 3.5 не нашел понятных и простых в использовании встроенных средств для создания zip архивов. В версии 4.5 такой проблемы нет. Сборка System.IO.Compression содержит класс ZipFile удовлетворяющий меня вполне. Однако в низших версиях указанная сборка содержит только два класса GZipStream и DeflateStream. Есть конечно еще и сборка System.IO.Packaging, но формат генерируемого ею файла zip несколько отличается от стандартного и заточен скорее под XML. Таким образом, встроенных средств работы со стандартными zip файлами в dotNET 3.5 попросту нет. Осознав этот печальный факт я скрипя сердце стал искать сторонние средства. Таких нашлось немало, но я упомяну лишь два из них.
понедельник, 2 июня 2014 г.
Пакет R
Скромная буква R английского алфавита открылась передо мной совершенно неожиданной гранью. За казалось бы рядовой буквой скрывается мощнейший пакет по обработке, анализу и визуализации данных, причем вся эта мощь в рамках GNU. Это ли не радость! Кому как, но я определенно испытываю некоторое удовольствие от осознания сего факта. Чувство такое, будто среди полчища разнообразных инструментов ты нашел тот, который давно искал. И как раньше я не замечал его? Лирика это прекрасно, но - ближе к инструменту...
Собственно для работы потребуется движок R, существующий под разные платформенные оси, и некоторый IDE слой позволяющий этим мотором управлять. Движок лежит здесь http://www.r-project.org/, IDE здесь http://www.rstudio.com/.
Сначала качаем и устанавливаем движок. Затем IDE. Процесс установки не описываю, так как сие действие прошло без единого сучка и с минимальным количеством усилий. Однозначно, чувствуется класс разработчиков. А как же иначе, если пакетом пользуются очень солидные учебные, научные учреждения, промышленные корпорации и холдинги с высокой долей научного участия. После окончания установки запускаем RStudio. Выполним небольшой примерчик - построим график функции sin(x)/x.
Слева у нас располагается окно консоли в котором будем набирать команды. R является интерпретатором поэтому сначала мы формулируем действие, затем передаем его на исполнение движку. Правая часть предназначена для вывода и разбита горизонталью на две секции.
Первым делом сформируем массив значений абсциссы x в виде дискретной выборки интервала [-10, 10] с шагом 0.1, подав на консоль команду
> x=seq(-10, 10, by=0.1)
После нажатия на клавишу Enter в верхней секции правой части появиться массив с рассчитанными значениями. Далее вычислим в каждой точке массива значение функции
> y=sin(x)/x
Рассчитанные значения ординаты появятся под значениями абсциссы. Осталось только построить график, например по точкам
> plot(x, y)Построенный график смотрим в нижней секции правой части.
P.S. Остальное, как говориться, по вкусу. Хотите большего, посетите ссылкуhttp://r-analytics.blogspot.ru/
пятница, 16 мая 2014 г.
Вызов внешней программы из приложения C#
В практике программирования бывает возникает необходимость вызова из приложения некоторой внешней программы возможно с передачей ей списка аргументов. В C# эта задача решается средствами System.Diagnostics.Process. Приведу небольшой пример, показывающий имеющиеся в распоряжении программиста возможности.
понедельник, 17 февраля 2014 г.
Восстановление пароля в Debian
Вот и случилось событие, с которым рано или поздно может столкнуться пользователь. Я забыл пароль на вход в Debian (Wheezy). Произошло это совершенно незаметно. Как ни напрягал я свою память, какие комбинации не пробовал, ничто не помогало. В общем приключилась печалька. Однако процесс восстановления пароля оказался на удивление тривиальным. Я буду рассматривать подход с применением установленного в систему загрузчика GRUB...
В загрузочном меню GRUB выбираем образ, используемый по умолчанию и нажимаем клавишу с англицкой буквой 'E' (Edit). В появившемся окне находим строку ядра (в которой указан vmlinuz), переходим в ней на ro и заменяем на rw init=/bin/bash. Остальную часть строки удаляем. Нажимаем F10 для загрузки. Система вывалиться в консоль с которой пароль пользователя можно задать командой passwd. Эта команда однако может быть не обнаружена. Если это случилось, консоль выдаст bash: passwd: command not found. Причина в том, что каталог usr размещается на отдельном разделе, который не монтируется автоматически. Сделаем это ручками подав на консоль команду mount /dev/устройство_с_каталогом_usr. Такой синтаксис предписывает mount монтировать в соответствии с файлом fstab. Всё!
Немного больше информации о проблеме можно найти здесь: Сброс пароля root.
Подписаться на:
Сообщения (Atom)