23.04.08
Tags: Книги, WPF (.Net 3.0) / 11:04 am , Victor Laskin
Хочу порекомендовать хорошую книжку по WPF, Pro WPF in C# 2008, которую можно скачать с pdfchm.com. Достаточно сказать, что книжка объемом более тысячи страниц и освещает много аспектов, опущенных в аналогичных изданиях.

Напоминаю, что на вышеуказанном сайте с книжками надо регистрироваться.
Direct link
21.04.08
Tags: WPF (.Net 3.0), Программирование, Блог / 1:24 pm , Victor Laskin
Если ввести в гугле XAML to HTML то выпадет ссылка на програмку конвертации с исходниками. Конечно возможности этой конвертации ограничены, и не потому что утилита предназначена лишь для описания самого подхода к подобной конвертации, а потому что возможности XAML сильно шире возможностей HTML.
Можно придумать много полезных применений этой утилитки, но я использовал ее для совсем банальной вещи. А именно, я отказался от использования плагина для подсветки синтаксиса в своем блоге, а просто копирую код из студии, нажимаю одну кнопку и получаю html код, который можно вставить в блог. При этом все цвета, шрифты и отступы будут сохранены.
Например:
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : System.Windows.Window
{
public Window1()
{
InitializeComponent();
}
Для реализации этого я всего лишь слегка доработал утилитку, добавив RichTextBox, содержимое которого переводится в XAML :
string os = XamlWriter.Save(InputText.Document);
Об классах XamlReader/XamlWriter я писал немного тут, а таже на сайте готдотнет есть моя статейка на эту тему.
Итого получаем конвертацию содержимого RichTextBox прямо в HTML:

А еще можно обратно ковертировать HTML в XAML, и использовать в своих программах.
Direct link
18.04.08
Tags: .Net 2.0, Программирование / 5:39 pm , Victor Laskin
Нашел на одном из западных блогов очень удобную библиотеку для работы с фтп.
Чтоб загрузить файл на свой сервер достаточно написать пару строк:
using BytesRoad.Net.Ftp;
…
string FtpServer = “my.server.ru”;
string Username = “username”;
string Password = “password”;
string RemotePath = “\\folderonserver/”;
public void UploadFile(string LocalFile)
{
// get instance of the FtpClient
FtpClient client = new FtpClient();
// use passive mode
client.PassiveMode = true;
client.Connect(Timeout, FtpServer, 21);
client.Login(Timeout, Username, Password);
// build the target file path
string target = System.IO.Path.Combine(RemotePath,
System.IO.Path.GetFileName(LocalFile)).Replace(“\\”, “/”);
// synchronously upload the file
client.PutFile(Timeout, target, LocalFile);
//Disconnect
client.Disconnect(Timeout);
}
Обратите внимание, что используется passive mode.
Библиотека распространяется по лицензии GPL, то есть бесплатно. Скачать можно отсюда.
Direct link
27.03.08
Tags: Полезные программы, WPF (.Net 3.0), Программирование / 6:42 pm , Victor Laskin
Хочу представить Вам один из моих последних проектов - программу для обработки фотографий PerfectPhotos. Программа содержит большое количество средств для комплексного улучшения изображений и призвана избавить фотографа от необходимости муторной работы с фотошопом там где это возможно. Более подробное описание возможностей можно найти на сайте.

Отмечу лишь, что вся обработка ведется с 16-битным цветом (16 бит на канал).
С версии 1.0.1.96 программа поддерживает напрямую формат цифровых зеркальных камер Canon (.cr2), и с успехом может быть использована в качестве raw-конвертора.
Программа написана на WPF (.Net 3.0) и потому ее интерфейс отличается в лучшую сторону от конкурентов.
Direct link
21.02.08
Tags: WPF (.Net 3.0), Программирование / 8:39 pm , Victor Laskin
Scott Guthrie в своем блоге написал о доработках WPF, которые будут реализованы в ближайшем будущем:
Наконец то в WPF будут добавлены контролы для выбора даты и календарь, а также Риббон и DataGrid.
Later this year we are also planning to release a number of new controls for WPF. Included in the list we are working on are DataGrid, Ribbon, and Calendar/DatePicker controls.
Также будут сделана оптимизация BitmapEffects на уровне железа.
Но больше всего меня интересует новый класс WriteableBitmap:
We’ll be including a new WriteableBitmap API that enables real-time bitmap updates from a software surface. We’ll also be adding support for a powerful new effects API that enables you to build richer graphics scenarios.
Пока рано говорить о том, что он может дать.
Direct link
Tags: Программирование / 3:45 pm , Victor Laskin
Микрософт решил раздать свои продукты студентам бесплатно. Инициатива DreamSpark уже доступна в 11 странах, но наша, естественно, в список стран пока не входит. Официальный пост и видео с Биллом можно найти тут
Доступные продукты: Windows Server, Expression Suite, XNA Game Studio, SQL Server и новая Visual Studio.
Остается надеяться, что русским студентам все это тоже вскоре будет доступно.
Direct link
10.02.08
Tags: .Net 2.0, Программирование / 9:33 pm , Victor Laskin
Всякий раз, когда я пользовался Math.Min() или Math.Abs(), я думал о том, а не лучше было бы написать эти операции простым неравенством. Наконец, я решил просто написать небольшой тестик, который должен раз и навсегда расставить все на свои места.
В качестве основы я взял почти пустой цикл:
int N = 100000000;
Start = DateTime.Now;
//Almost nothing!
for (int i = -N; i < N; i++)
result = i;
End = DateTime.Now;
Почти пустой для того чтоб компилятор не сделал каких нить слишком умных действий по его оптимизации. В первую очередь испытанию подверглась функция вычисления модуля числа. Реализовать эту простую операцию можно так:
for (int i = -N; i < N; i++)
{
result = i;
result = Math.Abs(i);
}
или, например, так:
for (int i = -N; i < N; i++)
{
result = i;
result = (i >= 0) ? i : -i;
}
Из времени выполнения этих циклов я вычел время выполнения пустого цикла. Получились интересные результаты:
Read more »
Direct link
08.02.08
Tags: WPF (.Net 3.0), Программирование / 5:16 pm , Victor Laskin
Все таки Xaml - это полезная вещь. Я написал коротенькую функцию, с помощью которой можно задавать содержимое TextBlock’ов с помощью xaml кода. Это нужно, когда содержимое нужно менять походу выполнения программы. Например, написав:
SetInlines(MyCuteTextBlock, "Крутой текст с <Bold>выделениями</Bold>, переносами строк,<LineBreak/><Underline>подчеркиваниями</Underline> и тому подобными стильными вещицами.");
получаем следующий результат:
А добиться такой простой записи позволяет простая функция:
using System.IO;
using System.Windows.Markup;
using System.Xml;
//Create inlines from xaml string
private void SetInlines
(TextBlock tb,
string XamlCode
)
{
string Op =
"<TextBlock xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">";
string Ed =
"</TextBlock>";
StringReader stringReader =
new StringReader
(Op + XamlCode + Ed
);
XmlReader xmlReader = XmlReader.
Create(stringReader
);
TextBlock TempTB =
(TextBlock
)XamlReader.
Load(xmlReader
);
//Lets copy inlines
tb.
Inlines.
Clear();
List<Inline> inls =
new List<Inline>
(TempTB.
Inlines);
foreach (Inline nl
in inls
)
tb.
Inlines.
Add(nl
);
}
Здесь используется класс XamlReader, который позволяет парсить XAML динамически, то есть уже на этапе исполнения программы.
Direct link
28.01.08
Tags: .Net 2.0, Программирование / 10:15 pm , Victor Laskin
Многие любят валить вину за то, что их код медленно работает, на .Net Framework. А между тем во многих случаях ситуацию можно исправить поменяв пару строк кода.
Рассмотрю практический пример функции по обработке фотографии. Есть некий цикл, который обходит все пикселы изображения и преобразует их хитрым образом.
Вначале пару слов о границах цикла. Хотя в первой версии фреймворка и были какие-то проблемы с функцией Length, то сейчас все хорошо. Главное, чтоб это не была какая-нибудь хитрая функция, которая выполняется на каждой итерации цикла и замедляет его в несколько раз.
for (i=0; i<Data.Length; i++)
{
//Обработка
}
Я вообще использую следующую конструкцию, так как цикл распараллелен на несколько ядер (пост):
int i1 = GetFirstIndex();
int i2 = GetLastIndex();
for (i=i1; i<=i2; i++)
{
//Обработка
}
Далее за границы цикла стоит по возможности вынести все операции по выделению памяти. Кроме того при вызове функций внутри цикла, по возможности нельзя дублировать данные, особенно массивы.
Пример плохого кода:
Read more »
Direct link
07.01.08
Tags: WPF (.Net 3.0), Программирование / 3:46 pm , Victor Laskin
Вчера обнаружилось, что простой код, который поворачивает картинку средствами декодера, будучи примененным к обычной фотографии с цифровика(3mpix jpeg) просто виснет под Windows XP загружая процессор при этом на 100%.
BitmapImage bmp =
new BitmapImage
();
bmp.
BeginInit();
bmp.
UriSource =
new Uri
(FileName
);
bmp.
CacheOption = BitmapCacheOption.
OnLoad;
bmp.
CreateOptions = BitmapCreateOptions.
PreservePixelFormat;
bmp.
Rotation = Rotation.
Rotate90;
bmp.
EndInit();
Это происходит только под Windows XP, под Vista все работает прекрасно.
Direct link
« Previous entries · Next entries »