Проекты

ext-ref.gif Cosmos — C# Open Source Managed Operating System

«Создайте свою собственную операционную систему, используя Visual Studio и C#» — предлагает нам автор этого проекта Chad Z. Hower. Сразу же заметим, что, несмотря на присутствие в названии именно C#, разработчики могут использовать VB.NET, Fortran или любой другой .NET-совместимый язык программирования.

Cosmos (как и Windows CE) не является операционной системой в традиционном значении этого термина; вместо этого он представляет собой некий «конструктор», позволяющий разработчику с легкостью создать свою собственную ОС; утверждается, что ее разработка и загрузка займут, в простейшем случае, всего несколько минут. Вот как выглядит инструмент Cosmos Builder, предназначенный для сборки загрузочного образа вашей ОС:

Cosmos Builder

После нажатия на кнопку «Build» откроется окно, показывающее ход процесса сборки — в этот момент MSIL компилируется в машинный код, а также происходит подготовка загрузочного образа:

Cosmos progress

Ну а после монтирования созданного ISO-образа в VMware Workstation вы сможете увидеть следующую картину:

Cosmos - VMware Workstation

В настоящее время проект находится на самой ранней стадии развития и авторы работают над поддержкой широкого диапазона файловых систем, включая FAT и ext2. Тем не менее, в будущем нам обещаны графика, локальные сети и другие, присущие полноценной ОС, возможности. По адресу http://www.codeproject.com/KB/system/CosmosIntro.aspx вы можете найти статью, рассказывающую об основах разработки и отладки ОС с использованием Cosmos. В качестве еще одного источника информации о состоянии и развитии данного проекта выможете воспользоваться страницей http://www.codeplex.com/Cosmos/.

Средства разработки

ext-ref.gif Doxygen — версия 1.5.7

Основным нововведением, появившимся в текущей версии данного средства для автоматизированного создания документации к исходному коду, является поддержка выходного формата .qch (Qt compiled help) при помощи Qt's qthelpgenerator, включенного в библиотеку, начиная с версии 4.4.0. Для просмотра файлов в этом формате используется Qt's Assisant. Помимо этого, добавлены три новые команды \extends, \implements, и \memberof, позволяющие документировать объектно-ориентированные конструкции для тех языков, которые формально их не поддерживают (например, C); также улучшена поддержка однострочных комментариев после VHDL-типов.

Библиотеки

ext-ref.gif Boost — версия 1.36.0

Текущая версия данного проекта подарила нам четыре новые библиотеки: Accumulators (поддержка инкрементальных вычислений), Exception (передача произвольных данных в объектах-исключениях и пересылка таких объектов между потоками), Units (обработка данных в различных единицах измерения и перевод из одних единиц в другие) и Unordered (реализация неупорядоченных ассоциативных контейнеров).

Кроме того, усовершенствованиям и дополнениям подверглись еще полтора десятка библиотек, входящих в состав boost. Полный перечень отличий от предыдущей версии можно найти по адресу http://www.boost.org/users/news/version_1_36_0. Как всегда, те, кто не хочет выполнять сборку библиотек вручную, могут скачать с сайта BoostPro Computing соответствующий инсталлятор, который позволяет выбрать необходимые компоненты и их сборочные конфигурации для последующей загрузки готовых бинарных файлов (на текущий момент поддерживаются компиляторы Visual C++ версий 7.1, 8.0 и 9.0 с последними пакетами обновлений).

Исходники

ext-ref.gif Managed Control Panel Items

[.NET, C#] Оттолкнувшись от статьи How to Automate Exporting .NET Function to Unmanaged Programs, автор создал набор компонентов, позволяющих разрабатывать апплеты Панели правления Windows с использованием «управляемых» (managed) языков программирования:

Managed CPL

Все, что для этого требуется — это создать класс, реализующий интерфейс IControlPanelItem:

public interface IControlPanelItem : IDisposable
{
   // Иконка апплета.
   Icon Icon { get; }

   // Имя апплета (32 символа максимум).
   string Name { get; }

   // Описание апплета (64 символа максимум).
   string Info { get; }

   // Показывает окно апплета.
   //     controlPanelWindow - Дескриптор окна Панели управления.
   //     command            - Необязательная командная строка.
   void Start(IWin32Window controlPanelWindow, string command);
}

Помимо реализации данного интерфейса, создаваемый класс должен быть наследником MarshalByRefObject и иметь установленный атрибут ControlPanelItemAttribute.

ext-ref.gif XGroupBox — an MFC groupbox control to display text and icon

[C++, MFC] Элемент управления, призванный заменить стандартный groupbox и реализующий следующие дополнительные возможности:

  • отсутствие мерцания при динамическом изменении размеров;
  • возможность отображения в заголовке иконки и/или текста;
  • отображение в стиле «только заголовок»;
  • легкость изменения цветов, шрифта и горизонтального выравнивания;
  • поддержка визуальных стилей (тем) и нестандартных цветов;
  • возможность деактивации всех элементов управления при деактивации группы, внутри которой они содержатся.

ext-ref.gif Towards Cleaner Code, A C# Asynchronous Helper

[.NET, C# 2.0] Вспомогательный класс, добавляющий гибкости и значительно уменьшающий объем кода при выполнении асинхронных операций в части их запуска и отслеживании состояния. «В любом достаточно большом приложении многократно встречается ситуация, когда некоторое действие должно быть выполнено асинхронно. В качестве импровизированного примера можно привести приложение, которое при запуске сохраняет отчет о его ходе в файл на диске. Эта операция является относительно медленной, как и все, что связано с файловым вводом-выводом; выполняя ее асинхронно, мы уменьшим время запуска, не рискуя получить при этом какие-либо побочные эффекты. .NET Framework делает асинхронное выполнение довольно легким и мы рассмотрим несколько общих путей его реализации; однако здесь существуют подводные камни, способные привести к трудноуловимым ошибкам и делающие код более «грязным», поэтому я представляю вам вспомогательный класс, призванный сделать наши жизни легче.»

ext-ref.gif Towards Cleaner Code II, a C# GUI Invoke/Async Helper

[.NET, C# 2.0] Продолжение темы, начатой в предыдущей статье того же автора — на этот раз речь идет о выполнении асинхронных операций, которые тем или иным образом влияют на элементы пользовательского интерфейса. Ну и конечно же вашему вниманию предлагается очередной «вспомогательный класс», при использовании которого жизнь станет практически невесомой.

ext-ref.gif Writing Your Own RTF Converter

[.NET, C# 2.0] Компонент, предназначенный для «синтаксического разбора», интерпретации и преобразования RTF-документов в другие форматы.

RTF converter

При создании этого компонента автор ставил перед собой следующие цели:

  • ? поддержка текущей спецификации RTF версии 1.9.1;
  • открытый исходный код на C#;
  • возможность использования как в приложениях WinForms, WPF и ASP.NET, так и в консольных утилитах;
  • независимость от компонентов сторонних разработчиков;
  • поддержка Unicode;
  • возможность анализа данных, содержащихся в RTF-документе, на различных уровнях его обработки;
  • разделение «синтаксического анализа» данных и их интерпретации;
  • расширяемость анализатора и интерпретатора;
  • предоставление простых «стандартных» модулей преобразования текста, изображений, XML и HTML;
  • открытая архитектура, упрощающая создание собственных модулей преобразования.

К сожалению, в настоящее время данный компонент не поддерживает обработку таблиц, списков и автоматической нумерации.

ext-ref.gif CBitmapEx — Free C++ Bitmap Manipulation Class

[C++, WinAPI] Класс, предназначенный для обработки изображений в формате BMP и не зависящий от MFC и других библиотек. Поддерживаются масштабирование, вращение и применение различных фильтров; отрисовка с использованием прозрачности и градиентов. Изображение может быть загружено из файла с глубиной цвета 8, 16, 24 или 32 бита, однако все «внутренние» операции выполняются «на максимальной глубине» — 32 бита. Преобразованное изображение может быть затем сохранено в стандартном для Windows 24-битном формате. Использовать данный класс предельно просто:

#include "BitmapEx.h"

// Загружаем битмап
CBitmapEx bitmapEx;
bitmapEx.Load(_T("Enter bitmap source file path here..."));

// Делаем с ним все, что хотим

bitmapEx.Rotate(45);
bitmapEx.Sepia();
bitmapEx.Scale(50, 50);

// Рисуем результат в требуемом контексте устройства
bitmapEx.Draw(hDC);

// Сохраняем битмап
bitmapEx.Save(_T("Enter bitmap destination file path here..."));

ext-ref.gif Style Toolkit — Use advanced graphics techniques to create a custom user interface

[C++, MFC, GDI+] Библиотека, позволяющая «осовременить» внешний вид создаваемых приложений при помощи градиентных заливок, эффектов прозрачности, PNG-изображений, etc.

Style Toolkit

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

ext-ref.gif Cabinet File (*.CAB) Compression and Extraction

[C++, MC++, C#] Библиотека для работы с «архивами» формата «Microsoft Cabinet» (.CAB); поддерживается как создание таких архивов, так и извлечение из них отдельных файлов. Предлагаются два варианта библиотеки, использующее общее ядро, написанное на «чистом» C++: один для применения при разработке «неуправляемых» приложений на C++, а второй — для приложений, использующих .NET Framework. Заметим, что оба варианта поддерживают архитектуры процессора x86 и x64.

К основным преимуществам своего творения автор относит следующее:

  • библиотека очень легка в использовании;
  • библиотека легковесна и очень быстра в работе;
  • библиотека очень легко расширяется;
  • оба варианта библиотеки могут использоваться при разработке в среде Visual Studio версий .NET (7.0), .NET 2003 (7.1) и .NET 2005 (8.0);
  • приложения, созданные с использованием «неуправляемого» варианта, могут выполняться под управлением Windows 95, 98, ME, NT, 2000, XP, и Vista;
  • «управляемые» приложения могут выполняться везде, где установлена соответствующая версия .NET Framework;
  • поддерживается шифрование и дешифрование CAB-файлов;
  • CAB-файлы могут содержать иерархии папок и файлов;
  • времена и атрибуты отдельных файлов сохраняются и восстанавливаются при сжатии и извлечении соответственно;
  • поддерживается извлечение из CAB-файлов, находящихся в ресурсах Win32- или .NET-приложения;
  • поддерживается извлечение из CAB-файлов, находящихся на удаленных серверах, без предварительной загрузки этих файлов на локальный компьютер;
  • поддерживается разделение больших CAB-файлов на несколько частей;
  • предусмотрен вызов обработчика события, позволяющий отображать ход процесса сжатия или распаковки посредством GUI;
  • в процессе сжатия и распаковки вызывается ряд обработчиков событий, позволяющих влиять на происходящее — например, фильтровать файлы;
  • для работы с CAB-файлами используется библиотека Cabinet.dll, являющаяся частью операционной системы со времен Windows NT/98;
  • оба варианта библиотеки поддерживают использование Unicode в путях и именах файлов вне зависимости от сборочной конфигурации проекта;
  • «управляемый» вариант библиотеки потокобезопасен.

К библиотеке прилагаются документация в формате CHM и примеры использования, с «боевым» вариантом ее применения можно ознакомиться в статье An Intelligent .NET Multilanguage Installer того же автора.

Статьи

ext-ref.gif Automatically Starting your Application on Windows Mobile

[.NET, C#, WM5/6] В статье рассматриваются различные варианты автоматического запуска приложений на платформе Windows Mobile: по графику; при вставке карты памяти, на которой расположено само приложение; при загрузке устройства; в ответ на различные системные события, такие как соединение устройства с локальной сетью или изменение имени устройства.

ext-ref.gif Blend PDF with Silverlight

[.NET, C#, Silverlight] Статья посвящена совместному визуальному использованию документов в формате PDF и технологии Silverlight с поддержкой двунаправленного обмена данными.

Blend PDF with Silverlight

Во вступительной части автор ссылается на то, что на сегодняшний день уже существуют библиотеки и технологии, позволяющие использовать PDF не только в качестве «выходного» формата, но и как средство для ввода пользовательских данных с последующим предоставлением к ним онлайн-доступа. Однако практически все эти решения ориентированы на серверную сторону, где происходит генерация PDF-потока и отправка его на клиента, что приводит к «утяжелению» соответствующих серверных приложений.

Эта же статья предлагает альтернативный, ориентированный на клиентскую сторону подход, который объединяет PDF-документ(ы) и «несущее» Silverlight-приложение в веб-браузере, исключая тем самым необходимость в серверной логике, реализующей обработку пользовательских PDF-файлов для сбора данных. Преимущества данного решения (включая, в первую очередь, более высокую масштабируемость) будут особенно заметны в том случае, когда мы имеем дело с целым набором PDF-форм, поскольку оно позволяет серверу приложений оперировать только «чистыми» данными и бизнес-логикой, избавляя его от обработки PDF-документов.

ext-ref.gif Parsing Expression Grammar Support for C# 3.0 Part 1 — PEG Lib and Parser Generator

[.NET, C# 3.0] Статья (первая, по словам автора, в планируемой серии) рассказывает о применении для синтаксического анализа методологии, известной как Parsing expression grammar, с использованием новых возможностей, появившихся в версии 3.0 языка C#. Как пишет сам автор, «PEG может быть легко реализована на любом языке программирования, но особенно хорошо эта методология вписывается в функциональные языки, а также в императивные языки, имеющие функциональные расширения, поскольку концепции PEG тесно связаны со взаимно рекурсивными вызовами функций, семантикой «минимального вычисления» для булевых выражений и функциями, определяемыми in-place (лямбдами)».

Утилиты

ext-ref.gif ToDoList 5.6.6 — A simple but effective way to keep on top of your tasks

Этот проект стартовал еще в ноябре 2003 года и, судя по всему, совершенно не намерен останавливаться в своем развитии. ToDoList представляет собой иерархический менеджер задач с возможностью назначения приоритетов, исполнителей и сроков исполнения; отслеживания текущего статуса задач; etc. Поддерживается также генерация отчетов в формате XML.

ToDoList

Основным новшеством линейки 5.6.х является вынос просмотра результатов фильтрации и сортировки списка задач в отдельное окно; благодаря этому, данные операции более не затрагивают само дерево задач и порядок элементов в нем. Помимо этого, была улучшена производительность при прокрутке с использованием клавиш управления курсором и при редактировании комментариев, содержащих изображения.

обновлено
05.01.2009
 
Проверка PR и ТИЦ