Сообщения

Сообщения за 2008

Поиск слов по шаблону в Lingvo

Изображение
У многих кто изучает английский язык и активно пользуются  ПК стоит Lingvo. По крайней мере я и все мои знакомые пользуются именно этим словарем. Функции, которой мне нахватало был поиск слова по шаблону. Недавно, пролистывая брошюрку, которая идет с коробочной версией лингво обнаружил что такая функция есть и причем уже достаточно давно. Функция поиска по шаблону (в справке она называется поиск по маске) поддерживает известные символы подстановки “ * ” и “ ? ” – любые буквы в любом количестве и одна любая буква соответственно. Работает такой поиск следующим образом. В строку поиска надо ввести интересующий шаблон, например “ he*o” и нажать Ctrl+F3 . Программа запустит поиск по всем активным словарям и выведет окно с подходящими словами и словосочетаниями.

Интеллект Live Search

Давно знал, что поисковик Google  может быть использован как простой калькулятор, но вот вчера с удивлением обнаружил, что майкрософтовский Live Search  умеет решать уравнения. И что поразило меня еще больше, что нелинейные уравнение ему тоже по зубам. Вот парочка примеров (кликабельно):    x+(x+1)=93   (этот пример приведен в справке  Live Search ) x^3=9 x^2+2*x=13    Sin(x)=0.9    Единственный недостаток, что расширенным интеллектом обладает только англоязычная версия поисковика.

Sysinternals Desktops v1.0

Изображение
«Широко известный в узких кругах» пакет утилит Sysinternals Suit пополнился еще одним приложением – Desktops v1.0. Эта утилита решает проблему переполненности панели задач и позволяет создавать до 4 виртуальных рабочих столов и работать раздельно с приложениями на каждом из них. Например, разрабатывать приложение в одном и просматривать почту и писать отчет в другом. Между приложениями на разных десктопах удобно переносить данные, так как они имеют один общий буфер обмена. Переключаться между десктопами можно по горячим клавишам или при помощи иконки в трэе. В целом с приложением удобно работать, хотя есть определенные ограничения. Некоторые сочетания клавиш, например, Ctrl+Shif+ Esc (запуск Windows Task Manager) работают только в первом рабочем столе, (там, где была утилита запущена), не смотря на то, в каком рабочем столе такое сочетание клавиш было нажато, приложение запустится в первом. Скачать утилиту можно здесь .

Определение Integrity Level для процесса на c#

В Windows Vista появился дополнительный механизм защиты – Integrity Levels . В зависимости от его уровня различаются и возможности приложения по работе с защищенными ресурсами системы. Поэтому актуальной задачей является определение значения Integrity Level процесса. В MSDN есть пример по определению Integrity Level текущего процесса для неуправляемого кода (статья Appendix D: Getting the Integrity Level for an Access Token ). Ниже я привел подобный код на C#. Я постарался сохранить стиль кода с оригиналом, что бы их было проще сравнивать. Так же, на мой взгляд, в оригинальном примере есть ошибка в определении уровней High и System. Поэтому я заменил фрагмент кода else if (dwIntegrityLevel >= SECURITY_MANDATORY_HIGH_RID) { // High Integrity ... } на else if (dwIntegrityLevel >= SECURITY_MANDATORY_HIGH_RID && dwIntegrityLevel < SECURITY_MANDATORY_SYSTEM_RID) { // High Integrity ... } А вот и пример консольного приложения, которое определяет св

Взаимодействие процессов по IpcChannel

Недавно столкнулся с необходимостью организовать взаимодействие двух .NET процессов в рамках одного компьютера. Немного покумекав, решил для этих целей воспользоваться «родной» для платформы .NET технологией – Remoting . Первоначально в качестве канала для «общения» процессов планировал выбрать протокол TCP ( TcpChannel ), но затем обнаружил что во втором фреймворке появился новый канал ремоутинга, который идеально подходит для мой задачи – IpcChannel . Этот канал использует в своей работе именованные каналы (named pipes) и был разработан специально для организации взаимодействия нескольких процессов в рамках одного компьютера и согласно MSDN , работает намного быстрее TCP и HTTP. Использование технологии Remoting крайне просто и ниже я привел пример сервера и клиента взаимодействующих по каналу IpcChannel. Ниже приведен код для сервера. class ServerHost { static void Main( string[] args ) { IDictionary settings = new Hashtable(); settings["portName"] = &q

«Незаметный» запуск внешних процессов

Иногда возникает необходимость запустить внешний процесс, получить от него какие-либо данные (либо просто дать ему возможность отработать) и затем его закрыть. В .NET Framework для этих целей служит класс System.Diagnostics.Process и с этим классом запуск процессов весьма прост. Однако внешний процесс становится виден пользователю (часто это можно наблюдать при работе инсталляторов), что, вообще-то говоря, нежелательно. А вот чтобы запустить внешний процесс незаметно для пользователя, надо в классе настроек запуска процесса ProcessStartInfo свойству WindowStyle присвоить значение ProcessWindowStyle.Hidden . Но, как гласит русская народная пословица, лучше один раз увидеть, чем сто раз услышать, и поэтому ниже представлен небольшой пример «незаметного» запуска процессов. Приведенный фрагмент кода запускает утилиту Reg.exe (Console Registry Tool for Windows) и делает бэкап ветки реестра HKEY_CLASSES_ROOT\mailto в файл. static void Main() {

P/Invoke Interop Assistant

Изображение
Команда CLR Interop недавно выпустила новый инструмент под названием P/Invoke Interop Assistant . Как можно догадаться из названия, он умеет генерировать код на С# и VB.NET для вызова native функций в .net приложениях. На рисунке ниже представлено главное окно P/Invoke Interop Assistant. Если сравнивать его с другим популярным инструментом подобного рода – PInvoke.net , то в целом они очень похожи, хотя и есть некоторые отличия. На рисунке ниже изображено главное окно PInvoke.net. P/Invoke Interop Assistant реализован отдельным инструментом и более функционален: в нем реализован контекстный поиск, есть генерация для типов и что особенно удобно есть генерация кода констант. Однако большая функциональность делает его несколько более сложным в использовании. PInvoke.net существенно проще в использовании, и интегрируется в студию (в главном меню появляется пункт PInvoke.net). Ко всему прочему, PInvoke.net генерирует более простой код.

Отладка с исходниками .NET Framework в VS 2005 или краткое руководство по NetMassDownloader

Изображение
Многие знают, что Microsoft открыла существенную часть исходного кода .NET Framework 2.0. Автоматическое скачивание исходников и отладочных файлов из интернета стало доступно с VS 2008 ( здесь можно прочитать подробнее) Однако воспользоваться удобством отладки с исходным кодом можно и на VS 2005. Kerem Kusmezer и John Robbins написали приложение, которое скачивает на вашу машину все исходники и файлы для отладки для нужных вам сборок .NET 2.0. (Для справки: Джон Роббинс – известный эксперт в области отладки приложений и автор большого количества книг на эту тему под Windows и .NET, второго чела не знаю :)). Этой утилитой удобно пользоваться и при работе на VS 2008, поскольку она автоматически скачивает все исходники и файлы отладки, и затем вам не потребуется постоянный коннект с интернетом при отладке. Итак, ближе к делу. Называется утилита NetMassDownloader , а скачать ее можно здесь . Далее: краткая инструкция, как скачать исходники .NET 2.0. и файлы отладки, как настроить 2005 сту

Знаете ли вы, что…

… среди блогов MSDN появился блог Сары Форд, переведенный на русский (за что огромное спасибо Виталию Зайко). Сара Форд (ее оригинальный блог здесь ) работает в инженером по тестированию Visual Studio, а так же ведет блог по различным How-to и Did you know по использованию различных версий студии. Сара экстремально активный блогер, каждый день она как правило публикует по статье, так что скучать не придется :).

Shell Extension Handlers на .NET

Вчера разбирался с Shell Extension-ами нашего проекта. Мне предстояло сделать что-бы контекстное меню для определённой иконки на десктопе формировалось динамически. Решил погуглить на счет примера реализации системного интерфейса IContextMenu на .net и вот какую вешь обнаружил. Оказывается Майкрософт крайне не рекомендует реализовывать Shell Extension Handler-ы на .net, и особенно те которые могут загружаться в процессы (in-process shell extensions). Вот ссылка на на оригинальное сообщение Jesse Kaplan , (одного из CLR Program Manager), а ниже мой вольный перевод его слов: К сожалению, единственный способ реализовать их – это неуправляемый С++ . Создание расширителей оболочки, которые загружаются в процесс (in-process shell extensions), это в действительности очень опасная вешь, поскольку таким образом вы можете внедрить управляемый код (и .NET Framework) в каждое приложение на машине, у которого есть стандартный Windows-диалог для открытия файлов. Проблемы возникают из-за того

Как стать экспертом

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

GUI Шпионы (информация к размышлению)

Изображение
В этой статье я попытался сделать краткий обзор инструментов, которые помогают исследовать пользовательский интерфейс Windows-приложений, и с которыми мне в той или иной мере доводилось работать самому. Для иллюстрации работы инструментов я буду использовать простую форму с кнопкой и пустым (и по этому невидимым в рантайме) PictureBox. Вот как эта форма выглядит в дизайн-тайме (первый) и в рантайме (второй). Итак, встречайте: Spy ++, The Customiser, Managed Spy и WfSpy . Первые два инструмента рассчитаны на работу с native Win32 приложениями, так как были созданы до появления технологии .NET, однако работу свою выполняют хорошо и с managed-приложениями. Естественно, всех свойств и событий для .NET контролов они не покажут, но наиболее важные, такие как: координаты, размеры, текст, доступность (enable/disable) - будут. Spy ++ (Microsoft, Win32) Пожалуй, самый известный в своем роде. Этим инструментом я пользуюсь постоянно и по сей день, поскольку это самый надежный инструмент из пе

Скромный пожиратель ресурсов

В состав Visual Studio входит небольшая утилитка командной строки consume. exe , которая предназначена для загрузки ресурсов системы при нагрузочном тестировании. Найти ее можно по следующему пути: VSInstallDir \Common7\Tools\Bin. VSInstallDir – это путь где у Вас установлена студия. Основная задача этой утилиты – на определенное время основательно занаять какой-либо ценный ресурс системы (например, оперативную память, процессорное время, дисковое пространство и т.д). Формат работы утилиты следующий: consume RESOURCE [-time SECONDS] RESOURCE – как можно догадаться по имени параметра, это ресурс системы который надо занять. Он может принимать одно из следующих значений: -physical-memory -page-file -disk-space - cpu -time -kernel-pool SECONDS – а это время в секундах на которое надо занять ресурс.

Как быстро закрыть 23 Internet Explorer’а

Не знаю, кто как, а я для подобных целей использую утилиту Windows taskkill вот с такими параметрами: taskkill /f /im iexplore.exe Чтобы не ошибиться с набором имени процесса, можно вывести список всех процессов в консоль утилитой tasklist и потом воспользоваться командами Mark/Paste . Я постоянно пользуюсь этой командой для закрытия нашего клиентского приложения, потому как что бы закрыть его обычным способом приходится делать слишком много движений и кликов мыши: 1. В System Tray найти иконку приложения. 2. Открыть у него контекстное меню. 3. В меню выбрать команду Exit. 4. И наконец, подтвердить, закрытие приложение. И когда приходится по 20 раз на день запускать/закрывать клиента, я всегда держу открытым консольное окно с командой для запуска и закрытия приложения.

Смотрю в книгу – вижу буквы

Недавно нашел интересную статью Стива Макконелла « How To Read a Technical Article ». Эту статью он написал 10 лет назад, когда занимал должность главного редактора в IEEE Software . Макконелл обобщает свой опыт чтения статей на компьютерную тематику и объясняет, как можно извлечь из статьи максимум пользы при лимите времени. Несмотря на то, что статья Макконелла прежде всего ориентирована на чтение статей в традиционных журналах, уверен, что его советы окажутся полезными и для статей блогосферы. Он выделяет 4 типа чтения: Базовый – распознавание отдельных слов. Приобретается, как правило, в детском саду. Название этой статьи характеризует данный стиль чтения. Обзорное – более продвинутый уровень. Ориентирован на получение максимума информации за ограниченное время. Его еще называют «чтение по диагонали». Аналитический – еще более продвинутый уровень. Извлечение максимума информации при неограниченном количестве времени. Синтезирующий – самый крутой уровень. Получение информации из не

Ложка меда в бочке дегтя

Недавно Сергей Розовик описывал неудобства связвнные с новым MSDN Magazine Online . Однако не все так плохо, есть и положительные мометны. Об одном из них я и хочу написать. Я не сам ее обнаружил :), об этой фиче написал в своем блоге Mike Stall . Суть ее в том, что статью из MSDN для класса из BCL можно открыть по урлам такого вот вида: http://msdn.microsoft.com/en-us/library/ system. io. filesystemwatcher .aspx – для класса http://msdn.microsoft.com/en-us/library/ system.io. filesystemwatcher.waitforchanged .aspx – для метода класса http://msdn.microsoft.com/en-us/library/ system.io. filesystemwatcher.path .aspx – для свойства. По моему, это очень удобно.

Моя любимая комбинация из трех пальцев

Изображение
Нет, это не Ctr+Alt+Del , как некоторые могли подумать ;). Это – Ctrl+Shift+G . Уж больно часто в последнее время я использую эту команду. Она почему-то недокументированная и поэтому уверен, что многие о ней не знают. Это клавиатурное сочетание действует для комбобокса поиска, расположенного на панели инструментов Standard. Если вы введете в этот комбобох имя файла (например, Class1.cs или app.config) и нажмете Ctrl+Shift+G , то команда пробежит по всем проектам открытого солюшена, найдет файл с таким именем и откроет его на редактирование. Эта функция существенно экономит время (и нервы) в случае сложных солюшенов с большим количеством проектов и файлов в них. Я пользуюсь этой командой при анализе логов с исключениями, при поиске исходного текста типов, которые используются в конфигурационных файлах, для быстрого открытия файлов из разных проектов, когда могу предположить, как называется файл, но не помню (или не знаю), где он точно лежит. P.S. Кстати, попасть на эту панель, не снимая

Делегаты и события

Как вы думаете, где подвох в нижеприведенном коде? button1.Click += new EventHandler ( new EventHandler (OnBtnClick)); button1.Click -= new EventHandler ( new EventHandler (OnBtnClick)); С подобным кодом я недавно встретился при отладке. Разумеется, он был не в таком очевидном виде. Подписка/отписка методов была завуалирована использованием разных делегатов, но с одинаковой сигнатурой и цепочкой вызовов методов, где эти делегаты и передавались, а на отладку проблемы мной было потрачено несколько часов. Итак, вернемся к примеру. Этот код компилируется без ошибок и предупреждений. Метод, подписанный на событие, вызывается при генерации события, а вот отписка от события не работает. Для лучшего понимания проблемы с отписыванием метода от события, приведу пару замечаний о структуре делегатов. Если упрощенно рассматривать делегат, то среди всего прочего он содержит два интересных нам свойства: public object Target public MethodInfo Method Target – это ссылка на объект, кот

Every build you break

Просто гениальная вещь . Песня про наши суровые будни. Посмотрите, не пожалеете! P.S. Спасибо моей сестренке за присланную ссылку.

А где же фокус?

На днях знакомый спросил, есть ли у формы метод, при помощи которого можно узнать, у какого контрола находится фокус ввода. Конечно, его нетрудно написать и самому, но зачем изобретать велосипед, если можно украсть у соседа :). Быстренко пробегаюсь в Reflector'е по методам и свойствам со словом Focus. Ничего подходящего не нахожу. Но вроде же было!.. К счастью, свойство я таки припомнил. Называется оно ActiveControl и находится у ContainerControl . К сожалению, в описании этого свойства в MSDN не указывается, что оно связано с текущим фокусом ввода.

Do you speak english?

Английcкий - важная составляющая нашей профессии. Как бы банально это ни звучало, это так. И поэтому каждый в той или иной степени владеет языком. Конечно, не все довольны своим уровнем и многие совершенствуют свои знания. Мой друг, принадлежащий к этой группе, разработал небольшой сайт и программу, помогающую нам в этом правильном деле. Программа предназначена для чтения книг на английском. Там также есть англо-русский словарь с пояснениями слов и их синонимами. Программа распространяется бессплатно, никаких регистраций не требует, рекламой не перегружена (ее там вовсе нет :)). Всех, кому эта тема интересна, приглашаю попробовать http://www.forcemem.com .

Ахтунг!

Ну вот, дожили. Сегодня и я пополнил список счастливчиков у которых украли ICQ логин. Пришел утром на работу и получил сообщение от ICQ клиента, что мой логин использовался на другом компьютере, и залогиниться уже не удается. Видимо, пароль оказался слабым. Написал в поддрежку ICQ , но как показал поиск в Google, дело это безнадежное. Так что если кто-то будет верещать какие-нибудь гадости от моего имени – не верьте, это не я, я белый и пушистый :).

5 инструментов

Эстафетную палочку про мои 5 инструментов для эффективной работы я получил от Сергея Розовика ( Stump 's Workshop ) . Хотя это больше похоже не на эстафету, а сетевой маркетинг или на механизм распространение вируса :). Что касается эффективной работы, то могу сказать Сергей умеет сам работать эффективно и другим не даст бездельничать :). Однако, на мой взгляд, эффективность Сергея не в инструментах , а прежде всего в склонности к порядку и четкости в работе. Итак, 5 инструментов, которые делают мою работу более эффективной. Порядок, в котором они перечислены не имеет значения так как каждый из них используется на определенном этапе работы. Хочу подчеркнуть что это не список инструментов с которыми я работаю больше всего, а именно те которые, по моему мнению, помогают мне работать эффективней. 1. Reflector – постоянно и много :). Зачастую его даже удобней использовать вместо MSDN , т.к. показывает краткое описание классов и методов из Class Reference . Наиболее часто используе

Mysteries of .NET 2.0 Configuration

Не так давно наткнулся на С ode Project на серию замечательных статей под общим названием Mysteries of .NET 2.0 Configuration про System.Configuration 2.0. В net 2.0 работа с конфигурационными файлами приложения была существенно переработана, но единого и полноценного описания секций различного уровня сложности и архитектуры System.Configuration 2.0 мне встречать не приходилось. Далее вкратце пройдусь по статьям. Unraveling the Mysteries of .NET 2.0 Configuration – описываются основные сведения про System.Configuration. Есть полноценное описание того, как создавать и регистрировать секции и группы, как создавать настройки и коллекции настроек различного уровня сложности. В большинстве случаев этой статьи для работы с конфигурационными файлами будет предостаточно. Автор дает рекомендации, основанные на собственном опыте, по повышению производительности и организации кода. Decoding the Mysteries of .NET 2.0 Configuration – описываются валидаторы и конвертор