Tuesday, September 8, 2009

Исходники и блог.

С этого момента весь текст относящийся к программному коду будет выделен в отдельный блок и будет подсветка синтаксиса. Так как встроенной такой функции нет, то буду пользоваться возможностью редактирования html кода.

Немного поискав конвертор из rtf в html формат, в основном это платные утилиты (вот только не понимаю за что такие астрономические цены за такую простую задачу) нашел бесплатный аналог по имени Highlight - freeware open source project (можно найти по адресу http://andre-simon.de) и выставив опции на закладке Output specific: 1. Embed style 2. Inline CSS после выбора необходимого файла с кодом нажимаем clipboard получаем что-то типа

/*
* Created by SharpDevelop.
* User: Admin
* Date: 16.09.2008
* Time: 20:52
*
* To change this template use Tools | Options | Coding |
Edit Standard Headers.
*/
using System;
using System.IO;

namespace FSLib.Generic
{
public delegate void StorageContentChangeHandler();
public delegate void StorageCapacityChangeHandler();

public enum StorageAddOptions
{
Copy,
Move,
HardLink
}

/// <summary>
/// Description of IFSStorage.
/// </summary>
public interface IFSStorage
{
long Capacity{get;set;}

long Occupied{get;}

long Free{get;}

long AddFile(FileInfo file, StorageAddOptions options,
string relativePath);

long AddFolder(DirectoryInfo directory, StorageAddOptions
options, bool copySubfolders, string relativePath);

bool DeleteFile(long file_id);

bool DeleteFolder(string relativePath, bool delContent);

string Name{get;}

string RootPath{get;}

DirectoryInfo PrepareRelativePath(string relativePath);

event StorageContentChangeHandler ContentChanged;
event StorageCapacityChangeHandler CapacityChanged;
}
}


только необходимо удалить теги html и body, так как программа генерирует полностью html страницу, а не html участок. Но с этим можно ммриться, ведь программа бесплатна, и на этом спасибо, все остальное мы напильником отточим :)

P.S.
Замечено, что этот блог некорректно отрабатывает длинный текст, поэтому буду пользоваться фичей программы - line wrapping.

Monday, September 7, 2009

Ах эти логи!

log4net подключил без проблем, и даже написал свой Appender для вывода логов в текстовое поле, этакая симуляция консоли в GUI приложении :)

Хотя можно было сделать и такой трюк:

Объявить Windows API функции

[DllImport("kernel32")]
static extern bool AllocConsole();

[DllImport("kernel32.dll", SetLastError=true, ExactSpelling=true)]
static extern bool FreeConsole();

и спокойно использовать ConsoleAppender из стандартной поставки log4net.

Но первый способ элегантнее в том плане, что код остается "платформенно независимым" да и просто было интересно посмотреть исходники этой бибилиотеки и протестировать возможность создания своего формата данных и организовать вывод в свое "устройство".
Все гениальное действительно просто. Все исходники библиотеки просты и понятны. А это ведь искусство! :) чтобы писать код так, чтобы он был сразу понятен всем, кто его читает.

Wednesday, September 2, 2009

Core Redesign

В связи с тем, что проект направлен на довольно сильное расширение при помощи плагинов, (в планах поддержки - hdd логические диски, CD/DVD,USB Portable Devices, FTP, Видео база, Аудио база, База документов, База изображений) пришлось сделать интерфейсы хранилищ данных более общими, из-за чего существенная часть наработок нуждается в коррекции.

Теперь хранилище данных может не хранить полное дерево каталогов у себя внутри,
для перехода по папкам организовано скрытое взаимодействие папки с хранилищем, т.е. при вызове GetSubFolder(name) папка обращается к хранилищу за объектом FolderInfo, получает его и возвращает вызывающему объекту актуальный объект с данными о папке.

Что самое замечательное в полиморфизме в данном случае - все типы хранилищ могут визуализироваться при помощи одного Viewer практически без ущерба в информативности.