Введение в .Net

Итак начнем с терминологии.

.Net Framework – платформа для разработки приложений.

Одной из основных идей Microsoft .NET является совместимость различных служб, написанных на разных языках. Т.е. можно писать систему или программный продукт на разных языках программирования(Delphi for .Net, IronPython, C#, VB.Net, C++.Net) и потом собирать вместе так, что все это еще и работать будет :)

Silverlight – платформа для разработки мультимедийных Web-ориентированных приложений, или сайтов.

WPF – Windows Presentation Foundation – универсальная платформа для разработке графического интерфейса (Graphical User Interface)

XAML – Расширяемый язык разметки приложений. Используется как для создания оконных Windows приложений(WPF), также я для Web-ориентированных (Silverlight)

WCF – Windows Communication Foundation, по сути это платформа для создания сетевых распределенных приложений. Новая ступень в развитии Web-служб. Мы можем всю логику нашего клиентского приложения вынести в WCF-службу и без проблем цепляться к ней из WPF Windows приложения, либо Silverlight-сайта.

Utahraptor Head

UtahRaptor
Я подумал, а было бы здорово выкладывать мои творения на блог! Заодно буду наблюдать за своим прогрессом и принимать критику и пожелания. А также советы от тех, кому интересна 3D-графика и творчество!

Utahraptor in design

Utahraptor

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

ZBrush изначально использовался для моделирования органики. Сейчас с ним делают действительно интересные вещи.

Искусственный интеллект (AI)

Что такое Искусственный Интеллект (АИ) робота? Многие говорят автоматизация подобия человека. А что такое Человек?? Чтобы понять это не надо лесть в дебри типа эволюции, это сложные процессы, которые нам пока что не понять. Лучше давайте рассмотрим человека со стороны его развития с младенческих дней до старости.
Ведь все мы знаем, что ребенок у нас рождается беспомощный. Младенец нечего не умеет, зрение его искажено, звуки воспринимаются как шумы, обучается и входит калию жизни общества и живет как Homo sapiens (Человек разумный)
А если младенца оставить одного?? Например, попал ребенок к волкам(как Маугли), его не съели, а приняли его в стаю... Он начал развиваться по их законам, по законам стаи, даже время жизни его становится, как и у волков (мало, сколько не помню)
Значит, эволюция не зависит от общества, на это влияет другое общество. Человек рождается, обучается законам общества, передает знания об обществе новым людям, это цикл жизни. По этому принципу общество развивается и меняется на основе старых законов.
Месяц назад я думал, чем отличается квантовый компьютер от обычных ПК, а задумался я по, потому что видел статью, что у ученых получилось создать какой-то «квантовый процессор» который выводит 1 неопределенный сигнал. И задумался, а зачем он нужен, и вообще как работает квантовый процессор?
Зная, что Мозг - это квантовый процессор, я понял, что этот процессор работает на основе памяти. То есть получает какие-то параметры, а выводит результат, данные о ситуации которые были уже в его «жизни».

Как подключить XML файл к элементу Form Wiew

Сразу скажу: не пытайтесь подключить XML файл к стандартным (Standart) элементам из набора MSVS. Используйте элементы группы Data.
Для начала добавим сам XML файл в проект.



И что-нибудь в нём напишем.

Добавим также страницу на которой хотим видеть наш текст.



Разместим на ней элемент FormWiew


И подключим источник данных (DataSousce)

Выберем XML data source, щёлкнем ОК, выберем файл и укажем путь к данным в XML файле (XPath expression). Так как нужный нам элемент "text" является вложенным в элемент  "items", топуть будет выглядеть так: /items

Теперь добавим в код элемента FormWiew следующий контейнер, указывающий на элемент XML файла.
ItemTemplate>
     
/ItemTemplate>


Теперь запускаем программу и любуемся на результат.


Намного проще чем кажется на первый взгляд.

Drag & Drop объектов в Silverlight

Решил реализовать одну забавную функцию. Drag & Drop используется в игрушках, в настольных приложениях. Везде, где надо что-то и куда-то перемещать :)

Создаем объект, я выбрал Rectangle. Смотрите, что вам ближе.

Далее переходим непосредственно к программированию.

 

public MainPage()
{
    InitializeComponent();    //Инициализация
    this.myrect.MouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler(myrect_MouseLeftButtonDown);   //Добавляем событие на нажатие кнопки мыши
    this.myrect.MouseLeftButtonUp += new System.Windows.Input.MouseButtonEventHandler(myrect_MouseLeftButtonUp);   //Добавляем событие на тот момент, когда вы отпускаете кнопку мыши
    this.myrect.MouseMove += new System.Windows.Input.MouseEventHandler(myrect_MouseMove);   //Добавляем событие, когда перемещаем объект
}
private Boolean ismyRectMouseCapture = false;    //Нам нужна вспомогательная переменная, чтобы понять, “зацепили” мы или нет наш объект!
private Point clickPosition;   //Вспомогательная переменная для определения положения указателя мыши
private void myrect_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    clickPosition = e.GetPosition(sender as UIElement);   //
    this.myrect.CaptureMouse();
    ismyRectMouseCapture = true;
}

private void myrect_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    this.myrect.ReleaseMouseCapture();
    ismyRectMouseCapture = false;
}

private void myrect_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
    if (ismyRectMouseCapture)
    {
        this.myTranslateTransform.X = e.GetPosition(this).X-clickPosition.X-(myrect.Width/2); //Думаю тут все понятно =)
        this.myTranslateTransform.Y = e.GetPosition(this).Y-clickPosition.Y-(myrect.Height/2);
    }
}

Zbrush-динозавр

DinoHead

А иногда я просто рисую. Захотелось сделать вот такое чудо! Может я его и дорисую до всего тела. Но пока мне нравится голова!

Как динамически загрузить картинку в Silverlight

В общем задача тривиальная и простая. Я раньше не знал как это делается. Мне помог один человек. Его блог: http://www.dev.net.ua/blogs/sergeylutay
Спасибо, тебе, Серега!
Он отозвался на мою просьбу о помощи, и помог разобраться с этой задачей. Бывает, что даже с простыми вещами разобраться порой очень трудно, особенно, если ты – новичок в этом. А оказывается очень просто. Приведенный ниже пример демонстрирует как можно программно, из кода добавлять в LayoutRoot дочерние элементы и обновлять интерфейс.
Image img = new Image();    
BitmapImage bimg = new BitmapImage(new Uri("http://www.wallpaperez.info/wallpaper/models/m/Adriana-Lima-wallpapers-796.jpg", UriKind.Absolute));
//если заранее не известен размер загружаемой картинки
bimg.ImageOpened += delegate(object sender, RoutedEventArgs e)
{
BitmapImage bitmapImg = sender as BitmapImage;
img.Height = bitmapImg.PixelHeight;
img.Width = bitmapImg.PixelWidth;
};
img.Source = bimg;
LayoutRoot.Children.Add(img);
Все очень просто. Создаем объект типа Image. Затем, создаем обект BitmapImage, и к нему привязываем картинку по URI. Далее указываем размеры изображения.
После чего объекту Image указываем в качестве источника наш BitmapImage-объект.
И, вуаля! Добавляем на нашу страницу в строке
LayoutRoot.Children.Add(img);
Подозреваю, что объекты можно засовывать в любые контейнеры. Надо будет покопаться ;)
Вот и все!

Бизнес-приложения Silverlight как старт для серьезного проекта

Раньше, чтобы встроить Silverlight на страницу, нужно было создавать элемент типа Object в HTML, да и то, Silverlight-сайты не обладали резиновой разметкой. Для этого приходилось создавать соответствующий фон.

Сейчас я рассмотрю тип профессиональных приложений, которые носят название Silverlight Business Application. Их особенности и преимущества для создания своего портала.

Дело в том, что изначально тяжело с нуля разработать полнофункциональное RIA-приложение. Т.е. нужно писать классы и функции для работы с авторизацией и переключением по страницам. У меня возникали с этим проблемы.

Здесь же я вижу удобный темплейт, по схеме MVC, где представление отделено от логики работы Silverlight-приложения, что уже удобно.

Резиновая разметка! Этим я думаю все сказано!

И даже такие, на первый взгляд незначительные нововведения облегчают жизнь уже на этапе проектирования сайта.

Silverlight-технология Web-будущего интернета!

image

Основы XML

XML (англ. eXtensible Markup Language — расширяемый язык разметки; произносится [экс-эм-э́л]) это иерархическая структура, предназначенная для хранения любых данных, (текст, таблицы, разметку и многое другое..)
XML файл состоит из заголовка и основной части обе части обособляются угловых скобках “< >”

Заголовок обособляется угловыми скобками со знаком вопроса “<?” и “?>” в котором заключается информация о версии и кодировке файла

Пример заголовка:
<?xml version="1.0" encoding="UTF-8"?>
Или просто указать
<?xml ?>

Основная часть состоит из элемента <title></title>,
Его атрибутов <ingredient amount="3"> и
Значений <title>Простой хлеб</title>
В место значений может находиться элементы в котором может находится также подэлементы
<table>
<table>
<table>

</table>
</table>
</table>

такое количество не чем не ограничено, что позволяет пользователям иметь динамические структуры таблиц



Атрибуты и элементы

<?xml version="1.0" encoding="UTF-8"?>
<recipe name="хлеб" preptime="5" cooktime="180">
<title>Простой хлеб</title>
<ingredient amount="3" unit="стакан">Мука</ingredient>
<ingredient amount="0.25" unit="грамм">Дрожжи</ingredient>
<ingredient amount="1.5" unit="стакан">Тёплая вода</ingredient>
<ingredient amount="1" unit="чайная ложка">Соль</ingredient>
<instructions>
<step>Смешать все ингредиенты и тщательно замесить.</step>
<step>Закрыть тканью и оставить на один час в тёплом помещении.</step>
<step>Замесить ещё раз, положить на противень и поставить в духовку.</step>
</instructions>
</recipe>


Плюсы:

Простота доступа к файлу
Структурированность файла

Минусы:

Файл переписывается заново при сохранении любых изменений

Web-службы WCF в Silverlight

Сегодня я расскажу, как создавать проект Silverlight, в паре с Web-службой Windows Communication Foundation и как-то взаимодействовать с этой службой.
Начнем с того, что запустим MSVS 2008:
image
Далее, появляется окно, тут тоже просто ОК:
image
Создается проект Silverlight. Silverlight просто как статичный сайт нам не интересен. Давайте сделаем динамику. Чтобы можно было отправлять какие-то данные, получать какие-то данные. Для этого нам понадобится WCF-сервис.

addfile
В меню выбираем Web-сервис WCF, как-нибудь его называем и жмем кнопку Add:
image
В файле IMyWCFService.cs объявляем интерфейс функции TellMeSomething:
public interface IMyWCFService
{ [OperationContract] string TellMeSomething(string name); }


Далее переходим в файл MyWCFService.svc.cs:

image

Пишем нашу функцию TellMeSomething:

public class MyWCFService : IMyWCFService 
{
#region IMyWCFService Members public string TellMeSomething(string name)
{
return string.Format("Hello, {0} ! How are you?", name);
} #endregion
}
Далее мы идем в файл Web.config, находим пункт
<endpoint address="" binding="wsHttpBinding" contract="WebServicesForBlog.Web.IMyWCFService">
и меняем wsHttpBinding на basicHttpBinding.

Настройки конфигурационного файла на этом закончены.


Теперь возвращаемся к Silverlight-проекту и проектируем страницу:
<Grid x:Name="LayoutRoot">
<StackPanel x:Name="OurStackPanel" Orientation="Vertical">
<TextBox x:Name="InputStr"></TextBox>
<Button x:Name="CallService" Content="Call WCF Service" Click="CallService_Click"></Button>
</StackPanel>
</Grid>



Далее нам нужно подключить WCF-службу, что мы создали:
image


После чего в появившемся окне нажимаем кнопку – Discover, и вводим поле Namespace референс, т.е. название экземпляра нашей WCF-службы:

image

И нажимаем ОК.

Все, теперь службу WCF мы подключили к проекту. Осталось ее использовать.
Допишем в разметку еще и TextBlock для вывода текста:

<TextBlock x:Name="OutField"></TextBlock>

А теперь перейдем к программированию кнопки:
private void CallService_Click(object sender, RoutedEventArgs e) {
MyWCFServiceReference.MyWCFServiceClient proxy = new WebServicesForBlog.MyWCFServiceReference.MyWCFServiceClient();
proxy.TellMeSomethingCompleted += new EventHandler<WebServicesForBlog.MyWCFServiceReference.TellMeSomethingCompletedEventArgs>(proxy_TellMeSomethingCompleted);
proxy.TellMeSomethingAsync(InputStr.Text);
}

И добавим EventHandler для события, когда служба WCF уже отработала:

void proxy_TellMeSomethingCompleted(object sender, WebServicesForBlog.MyWCFServiceReference.TellMeSomethingCompletedEventArgs e)
{
OutField.Text = e.Result;
}

Теперь запускаем проект! Вводим имя в Textbox и нажимаем кнопку "Call WCF Service"

image

Служба обрабатывает значение из TextBox-а и возвращает значение в TextBlock. Таким образом службы WCF – это обширная платформа для разработки многофункциональных динамических Silverlight-приложений. WCF нужен там, где используется обмен и обработка данных сервером.