Silverlight 4.0 sürümü ile gelen bir çok yeni özelliklerden biri de Kamera ve Mikrofon erişimi. Bu özellik sayesinde Silverlight ile yapılan uygulamalarda kamera ve mikrofon kullanarak katma değer katabiliyorsunuz.
Kamera ve mikrofon erişimi sağlamak için kullanacağımız kütüphane ise System.Windows.Media kütüphanesi olacak. Bu kütüphane içerisindeki CaptureSource, CaptureDeviceConfiguration, VideoBrush sınıfları fazlasıyla işimizi görmekte. Bu sınıfları kullanarak çok fazla fikir ortaya çıkabilir. Örneğin bir internet sitesinin kullanıcı ayarları sayfasında, kullanıcının profil fotoğrafını kendi webcam’ini kullandırarak alabilirsiniz. Kamera ve mikrofonu kullanarak online toplantı uygulaması geliştirebilir veya online sohbet ortamı geliştirebilirsiniz.
Örnek uygulamamızda size sadece bir bilgisayar üzerindeki tüm kamera ve mikrofon listesine nasıl ulacağımıza, bu aygıtlara nasıl erişim hakkı sağlayabileceğimize ve bu aygıtların çıktılarını (ses ve canlı webcam görüntüsü) nasıl uygulama üzerinde göstereceğimize değineceğim.
İlk önce Visual Studio 2010 üzerinden yeni bir Silverlight 4.0 projesi oluşturuyoruz.

Daha sonra MainPage.xaml dosyamızın tasarımını yapabiliriz. Ben tasarıma biraz özendim fakat özünde size de kameraları ve mikrofonları listeleyebileceğiniz 2 adet Listbox, kameranın görüntüsünü alacağınız 1 adet Rectangle, çektiğiniz fotoğrafları listeleyeceğiniz 1 adet StackPanel veya ScrollView, Ortam paylaşımı başlatıp durdurabileceğiniz 2 adet Button işinizi görecektir.
Benim hazırladığım tasarım aşağıdaki gibi:

<UserControl x:Class="WebcamMic.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="#FF333333">
<Border>
<Border.Background>
<RadialGradientBrush Center="0.5,-0.212" GradientOrigin="0.5,-0.212" RadiusX="0.742" RadiusY="0.4">
<GradientStop Color="#FF5B5B5B" Offset="0.009" />
<GradientStop Color="#FF1E1E1E" Offset="1" />
</RadialGradientBrush>
</Border.Background>
<Border.BorderBrush>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF4B4B4B" Offset="0" />
<GradientStop Color="#FF343434" Offset="0.039" />
</LinearGradientBrush>
</Border.BorderBrush>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Foreground="White" FontSize="20" Text="Webcam ve Mikrofon Örneği" Margin="15" HorizontalAlignment="Center" />
<Border Width="320" Height="240" CornerRadius="10">
<Border.Effect>
<DropShadowEffect Color="White" Direction="0" ShadowDepth="0" BlurRadius="25"/>
</Border.Effect>
<Rectangle x:Name="WebcamCapture" Width="320" Height="240" Fill="White"/>
</Border>
<Grid Width="500">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="250" />
<ColumnDefinition Width="250" />
</Grid.ColumnDefinitions>
<TextBlock Margin="5" HorizontalAlignment="Center" Foreground="White" Text="Ses Kaynakları" Grid.Column="0" Grid.Row="0" />
<ListBox x:Name="AudioSources" Grid.Row="1" Grid.Column="0">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding FriendlyName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBlock Margin="5" HorizontalAlignment="Center" Foreground="White" Text="Video Kaynakları" Grid.Column="1" Grid.Row="0" />
<ListBox x:Name="VideoSources" Grid.Row="1" Grid.Column="1">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding FriendlyName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button Click="CaptureButton_Click" Margin="5" x:Name="CaptureButton" Content="Paylaşımı Başlat" Height="35" Style="{StaticResource ButtonStyle}" />
<Button Click="StopCapture_Click" Margin="5" x:Name="StopCapture" Content="Paylaşımı Durdur" Height="35" Style="{StaticResource ButtonStyle}" />
</StackPanel>
<ScrollViewer Width="400" VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto">
<ItemsControl x:Name="Snapshots">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding}" Margin="5" Stretch="UniformToFill" Height="50" />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
</StackPanel>
</Border>
</Grid>
</UserControl>
Şimdi gelelim işin kodlama kısmına. İlk başta istediğimiz uygulama ilk açıldığında bilgisayarınızdaki mevcut kamera ve mikrofonların elimizdeki ListBox’lara listelenmesi. Mikrofonları listeleyeceğim ListBox’a AudioSources, kameraları listeleyeceğimiz ListBox’a ise VideoSources adını atadım. Aşağıdaki kodları MainPage.xaml’ın Loaded event’ine yazalım.
AudioSources.ItemsSource = CaptureDeviceConfiguration.GetAvailableAudioCaptureDevices();
VideoSources.ItemsSource = CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices();
CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices() ile bilgisayarınızda bulunan tüm webcamlerin listesini çekebilirsiniz. Eğer ben sadece Default webcam’e ulaşmak istiyorum ya da default mikrofona ulaşmak istiyorum derseniz, CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice() veya CaptureDeviceConfiguration.GetDefaultAudioCaptureDevice() fonksiyonunu kullanabilirsiniz.
Bu fonksiyonlar bize CaptureSource tipinde bir sınıf döndürmekte. Bu sınıfın propertylerinden biride FriendlyName. FriendlyName bizim aygıt yöneticisinde gördüğümüz aygıt ismidir. Bizimde ListBox’larımıza FriendlyName property’sini bind etmemiz gerekmektedir.
<ListBox x:Name="AudioSources" Grid.Row="1" Grid.Column="1">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding FriendlyName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox><ListBox x:Name="VideoSources" Grid.Row="1" Grid.Column="1">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding FriendlyName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

Daha sonra seçeceğimiz aygıtları CaptureSource nesnesine bağlamak gerekiyor.
CaptureSource _captureSource = new CaptureSource();
Bu işlemden sonra listelerimizden istediğimiz aygıtları seçip paylaşımı başlatmak kalıyor. Şimdiye kadar aygıtları listelemeyi başardık. “Paylaşımı Başlat” butonumuzun name property’sini CaptureButton şeklinde adlandırdım. Paylaşımımı başlatmadan önce hazırda bir paylaşım olup olmadığını kontrol etmemiz gerekiyor. Daha sonra seçtiğimiz aygıtları _captureSource’a atayıp aygıt için erişim istememiz ve aygıtı çalıştırmamız lazım. VideoBrush sınıfını kullarakta elde ettiğimiz görüntüyü WebcamCapture adlı Rectangle’ımıza gönderiyoruz.
private void CaptureButton_Click(object sender, RoutedEventArgs e)
{
if (_captureSource != null)
{
_captureSource.Stop(); _captureSource.VideoCaptureDevice = (VideoCaptureDevice)VideoSources.SelectedItem;
_captureSource.AudioCaptureDevice = (AudioCaptureDevice)AudioSources.SelectedItem;
VideoBrush vidBrush = new VideoBrush();
vidBrush.SetSource(_captureSource);
WebcamCapture.Fill = vidBrush; if (CaptureDeviceConfiguration.AllowedDeviceAccess || CaptureDeviceConfiguration.RequestDeviceAccess())
{
_captureSource.Start();
}
}
}
Buradaki en önemli kısım Silverlight ile geliştirdiğimiz uygulamanın aygıt erişimi için kullanıcıdan izin istemesini sağlamaktır. Burada iki durum sözkonusudur. Birinci durumda kullanıcının erişim izni yoktur ve alması gerekmektedir. Bu sebeple CaptureDeviceConfiguration.RequestDeviceAccess() kullanılarak izin istenir.

İkinci durum ise zaten mevcut bir erişim vardır. Bu durumda ise CaptureDeviceConfiguration.AllowedDeviceAccess kullanılarak erişim hakkı olup olmadığı sorgulanabilir. Bu iki durumuda tek bir if içerisinde or ile birlikte kullanırsak bizim işimizi bir hayli görecektir. Ancak bu iki koşul sağlanırsa paylaşımı başlatabiliriz. Aksi taktirde kodumuz çalışsa bile aygıtlara erişim olmayacaktır.
Bu işlem sonrasında birde mevcut paylaşımı durdurmamız içinde bir buton koyduk. “Paylaşımı Durdur” text’li butonumuzun name property’sinide StopCapture şeklinde yaptım.
private void StopCapture_Click(object sender, RoutedEventArgs e)
{
if (_captureSource != null)
{
_captureSource.Stop();
}
}
Şu ana kadar yazdığımız kodlarla kamera ve mikrofon paylaşımını silverlight ile yapabiliyoruz.

Bir sonraki makalemizde görüşmek üzere..
12 Nisan tarihinde piyasaya sürülmesi hedeflenen Visual Studio 2010’un Beta 2 sürümünden sonra RC (Release Candidate) sürümünü yayınladı. RTM sürümünden önce yayınlanan RC sürümünü şu anda sadece MSDN üyeleri şu adresten indirebiliyor fakat 10 Şubat tarihi itibarıyle herkes indirebilecek.

Visual Studio 2010 RC ile ilgili ilk izlenimlerim şu şekilde: Vaayyy bee! Süper hızlı!
Beta 1 sürümünden beri kullandığım Visual Studio 2010’daki en büyük hayal kırıklığım performans kaybının varolmasıydı. 2008 sürümü ile arasında çok fazla bir performans farkı vardıki RC sürümü ile aradaki farkı kapatmakla kalmayıp solladı diyebilirim :)
Yalnız bilgisayarına kuracak olanlara 1 çift tavsiyem olacak.
Birincisi : Bildiğiniz gibi Alfa, Beta, RC gibi sürümler piyasaya sürülmemiş test amaçlı çıkarılan sürümlerdir. Ve Microsoft dahil olmak üzere hiç bir yazılım firması bu yazılımların bilgisayarınıza vereceği zarardan sorumlu değildir. Bu sebepten dolayı bu sürümlerdeki tüm yazılımları Sanal Makina üzerinde kurmanızı şiddetle tavsiye ediyorum.
İkincisi : Eğer daha önce bilgisayarınızda Visual Studio 2010 Beta 2 sürümü kurulu ise lütfen önce o sürümü kaldırın. Sonra RC sürümünü gönül rahatlığıyla yükleyebilirsiniz. Beta 2 sürümünde olduğu gibi aynı anda Visual Studio 2005,2008 ve 2010 kullanabiliyorsunuz. Bu konuda bir sorun yok.
Silverlight 4.0 ile uygulama geliştirenlerin dikkatine!
Silverligt 4.0 sürümü için gerekli Visual Studio 2010 eklentisi Beta 2 sürümü içindi. Visual Studio 2010 RC sürümü hali hazırda Silverlight 3.0 projelerini destekler halde sunuldu fakat Silverlight 4.0’ın mevcut Visual Studio eklentisi RC sürümünde çalışmıyor.
Silverlight 4.0 ile uygulama geliştirenlere aman diyorum! Beta 2 sürümlerini kaldırmayın.. Gerekli eklentinin çıkmasını beklemek lazım.. Tahmin ediyorumki bu haber Daron hocamızın pek hoşuna gitmemiştir.. :)
Bu makalemde sizlere Windows Azure’da depoladığınız videoları, Windows Live Writer programı ile nasıl blogunuza koyacağınızı anlatacağım. Bundan önce;
- Windows Azure hesabımızı açmıştık,
- Videolarımızı depolayacağımız bir depolama alanı oluşturmuştuk,
- Videolarımızı oluşturduğumuz depolama alanına aktarmıştık,
Bu makalemizde bize birde Windows Live Writer lazım..
Adım 1
http://gallery.live.com/liveItemDetail.aspx?li=f84d87b9-e284-4691-aa90-2d628e67af6f&bt=9 adresine gidin ve Insert from Windows Azure Blob Storage isimli eklentiyi indirip bilgisayarınıza kurun.
Adım 2
Windows Live Writer programını açın ve sağ taraftaki Insert sekmesinden Azure Blog Item nesnesine tıklatın.
Adım 3
Insert Azure Blob Item adındaki penceremiz karşımıza gelecek.
Sağ üst tarafta yer alan Endpoint, Access Key, CDN Endpoint bilgilerini doldurmamız gerekiyor. Buradaki bilgiler blogunuza eklemek istediğiniz video’nun bulunduğu depolama servisine ait bilgiler olacak. Hatırlarsanız daha önce depolama alanımıza video aktarırkende bu bilgileri kullanmıştır. Windows Azure Developer Portal’da yer alan depolama alanımızın sayfasına bu bilgilere erişebiliriz.
Adım 4
Refresh butonuna basarsak sol taraftaki Containers listesinde daha önceden eklediğimiz Videoları göreceksiniz. Ben daha önce deneme ve encoded-videos adında iki adet video eklemiştim. Hemen encoded-videos container’ına tıklıyorum ve yan taraftaki File listesinde video ile alakalı tüm dosyalarımı listeleyebiliyorum. Eğer Default.html dosyasına tıklarsanız sağ taraftaki preview penceresinde önizlemesini görebilirsiniz.
Daha önceki makalelerimde size CDN’in ne olduğunu anlatmıştım. Bu sebepler video streaming yapacağımız zaman CDN Network kullanmanızı size öneririm. Bunun için Use CDN seçeneğini seçebilirsiniz. Ayrıca blogunuza videoyu gömmek için Embed seçeneğini seçmeyide unutmayın. Aksi taktirde sadece linki blogunuza eklenecektir.
Insert butonunu tıklayarak devam edin.
Adım 5
Windows Live Writer üzerinde aşağıdaki gibi bir uyarı alabilirsiniz.
Bu bir Windows Güvenlik Uyarısıdır. Bu uyarının çıkmasının nedeni bu videoyu tamamı ile iFrame mantığı ile blogunuza gömmesidir. Yani aslında oraya sizin daha önceden Expression Encoder ile otomatik olarak oluşturduğunuz Default.html sayfası frame olarak ekleniyor. Windows’ta size başka bir kaynaktan veri geldiği için uyarıda bulunuyor. Eğer Evet derseniz başarılı bir şekilde video’yu görüntüleyebilirsiniz. Hayır derseniz videoyu izleyemezsiniz ama Publish butonuna basıp blogunuza yeni makalenizi gönderdiğinizde video eklenmiş olacaktır.
Bu işlemden sonra videonuzu istediğiniz gibi boyutlandırabilirsiniz.
Bu makalemizde bir video’yu Microsoft Expression Encoder 3 ile nasıl encode edeceğimizi ve Silverlight Video Player’ı ile birlikte Windows Azure’da ki Depolama hesabımıza nasıl aktaracağımızı anlatacağım. Bunun için gereken 3 şey var. Birincisi aktif bir Windows Azure hesabınızın olması gerekiyor. Daha sonra bu hesabınıza ait Video’lar için depolama servisinizin olması gerekiyor. Son olarak Microsoft Expression Encoder 3’ün bilgisayarınızda kurulu olması gerekiyor.
Şimdi gelelim tek tek yapmamız gerekenlere..
Adım 1
Codeplex üzerinde bulunan Windows Azure Blob Storage Publisher for Expression Encoder eklentisini indirin. Hemen sağ üst tarafta bulunan WABSPublisherbeta2.zip dosyasını indirin.
Adım 2
İndirdiğiniz zip dosyasını dışarı aktarın. Burada 2 adet DLL dosyası göreceksiniz. Bunlar bizim eklentimiz.. Diğer dosyaların bir önemi yok bizim için :)
Adım 3
Şimdi Expression Encoder 3 programının bulunduğu klasöre gitmemiz gerekiyor. Bu dizin genelde “C:\Program Files\Microsoft Expression\Encoder 3” yolundadır. Tabi mutlaka her bilgisayarda aynı yerde olacak diye bir şart yok. Bu sebeple bu dizinde siz Encoder’ımızı bulamazsanız şu şekilde bir yol izleyin.
Başlat menüsünü tıklayın ve arama kutusuna sadece “expression encoder” yazın. En tepeye hemen Microsoft Expression Encoder 3 gelecektir zaten. Hemen ona sağ tıklayın ve açılan menüden en aşağıdaki seçenek olan Properties (Özellikler)’e tıklayın.
Ve sonra Open File Location (Dosya Konumunu Aç) butonuna basın. Açılan klasörden Plugins klasörüne girin.
Adım 4
Şimdi daha önceden indirdiğimiz eklentinin DLL dosyalarını, Expression Encoder’daki Plugins klasörüne sürükleyin.
Bu işlem Yönetici yetkisi isteyebilir. Bu yüzden dikkat edin. Kopyalama işlemi bitince Windows Azure Publishing eklentisini başarıyla Microsoft Expression Encoder 3’e kurmuş oluyorsunuz.
Adım 5
Şimdi Expressin Encoder’ı açın ve Encode etmek için bir video’yu Import edin. Ben Windows 7’nin örnek videolarındaki Vahşi Yaşam videosunu seçtim.
Adım 6
Output sekmesine girin ve video’nuz için Silverligt Player Teması seçin.
Adım 7
Output sekmesindeyken hemen en altta Publish ayarlarını göreceksiniz. Menüye Windows Azure Blog Storage seçeneğinin eklendiğini görebilirsiniz. Hedef olarak siz Azure depolama alanı seçeneğini seçin.
Adım 8
Hemen altına ekstra ayarların geldiğini göreceksiniz. Buradaki alanları Windows Azure Depolama servisinizdeki bilgilerle doldurmanız gerekiyor. Bunun için Windows Azure Developer Portal’a girin, Projenizin ismini tıklayın ve daha önce oluştuduğunuz depolama servisinize girin. Resimde gördüğünüz değerleri tek tek Encoder üstünde girin.
Container alanına istediğiniz herhangi birşeyi yazabilirsiniz. Upload edeceğiniz video’nun container’ı gibi düşünün. Bir etiket gibi.
Adım 9
Publish sekmesinde “Publish after encode” seçeneğinin işaretli olduğundan emin olun.
Adım 10
İşin en güzel kısmına geldik. Encode ediyoruz artık. Encode işlemi bittiktek sonra Encoder’ımız video’muzu Azure’daki depolama alanımıza upload etmeye başlayacak.
Publish işlemi biter bitmez en aşağıdaki oka tıklayarak video’nun ön izlemesini ve siteye ekleyebilmeniz için iFrame kodlarını görebileceğiniz sekmeyi görürsünüz.
Videonun hemen altındaki URL sizin upload ettiğiniz video’nun URLsi.
Formatı: endpoint/container/Default.html şeklindedir. Eğer en alttaki Origin ve CDN seçeneklerini değiştirseniz bağlantı adresininde değiştiğiniz göreceksiniz. Size daha önce CDN’nin farkını şuradaki makalemde anlatmıştım. Video’lar içinde en ideali CDN seçeneğidir.
Eğer Code sekmesine tıklarsanızda sitenize eklemeniz için gereken iFrame kodunu görürsünüz.
İşte Mutlu Son!
http://az1885.vo.msecnd.net/encoded-videos/Default.html adresine girip bakabilirsiniz..
Bu sayfayı frame içinde istediğiniz yerede koyabilirsiniz.
Şuradaki makalemde de Windows Live Writer kullanarak blogunuza Silverlight Video eklemeyide anlattım.
Çoğu tasarımcı, tasarımlarını Adobe Photoshop veya Illustrator kullanarak çok rahat yaparlar. Fakat bu tasarımları Silverlight veya WPF üzerinde kullanmak ayrıca bir iştir. Bir arayüz tasarlarken kendilerine has yöntemleri kullanarak Photoshop’ta tasarladıklarını tekrardan Blend üzerinde tasarlamak zorunda kalırlardı. Daha önceden Expression Design ile Illustrator dosyalarını aktarabiliyordunuz. Ordan da Blend’e. Fakat Expression Design 3’te artık photoshop dosyalarını da aktarabiliyorsunuz ama şu söyleyeceğim özellik bence photoshop’ta tasarımlarını yapan arkadaşları baya bi sevindirecektir. Çünkü, artık Photoshop ve illustrator dosyalarını direk olarak Blend 3 içine aktarabiliyorsunuz.
Bu özellikleri size adım adım anlatmak istiyorum:
1- İlk önce diyelimki photoshop ile tasarımızı yaptık: 
2- Hemen Blend 3’ü açalım ve herhangi bir Silverlight projesi açalım. Daha sonra “File” sekmesinden “Import Adobe Photoshop File…” menü ögesini seçersek karşımızı aşağıdaki sahne çıkacak.
Burada aktarmak istediğimiz Photoshop dosyasını seçerek aktarma işlemine başlayabiliriz:

3- İstediğimiz dosyayı seçtikten sonra karşımıza photoshop dosyasındaki istediğimiz katmanları (layer) seçebileceğimiz bir ekran gelecek:

Bu 3 adımdan sonra aktarma işlemimiz tamamlanmış olacak. Photoshop’ta Layer olarak gördükleriniz, XAML dosyanıza birer nesne olarak eklenecek ve aşağıdaki görüntüye sahip olacaksınız.

Bu özellikte kolayca dosya aktarımında başka en önemli etkenlerden biri ise Photoshop ile yaptığınız vektörel grafiklerin de aynı şekilde Blend içerisine çekilebilmesi.
Aynı zamanda her bir katmanın ayrı bir nesne olarak aktarılması bence en can alıcı kısmı. Düşünün ki, photoshop ile çizdiğiniz bir katmana “MouseLeftButton” olayı ekleyip programlayabiliyorsunuz.
Unutmamanız gereken önemli noktalardan biri de Photoshop ile tasarlarken kullandığınız fontları Blend üzerindeki projenize import etmeniz.
Sevgili hocamız Daron Yöndem'den Haziran ayında mükemmel denecek derece'de Silverlight 3.0 webiner serisi geliyor. Webiner bilgileri şu şekilde:
Silverlight'a Giriş - 8 Haziran, 21.00
Bu webinerde Silverlight nedir sorusuna cevap verirken mimari yapısına bakarak Silverlight dünyasına bir giriş yapacağız. Silverlgiht projeleri nasıl oluşturulur,nasıl yayınlanır, XAML nedir? ve "Neden Silverlight" gibi soruların cevapları da bu webinerde.
https://www.livemeeting.com/cc/usergroups/join?id=GFRH8M&role=attend
Silverlight ile Animasyonlar - 9 Haziran, 21.00
Animasyon mantığını kavrayacağımız bu webinerde ilk olarak Expression Blend arayüzüne bakarak animasyonlarının Blend tarafında nasıl oluşturulabildiğine göz atacağız. Sonra bu animasyonların programatik olarak yaratılmasını ve kontrollerini inceleyerek Silverlight tarafında bir animasyon uzmanı olacağız.
https://www.livemeeting.com/cc/usergroups/join?id=6GRJPM&role=attend
Layout Kontrolleri ve Dinamik Arayüzler, 10 Haziran, 21.00
Silverlight içerisinde istediğiniz görsel arayüzü oluşturabilmek için arayüz oluşturma esnasından kullanabileceğiniz Layout kontrollerini çok iyi tanımanız gerekir. Diğer yandan dinamik olarak tüm nesneleri yaratbilmeniz, bu nesnelerin birbiri ile konuşabilmesi ve projenizi doğru biçimde UserControl yapıları ile şekillendirmeniz de şart. İşte bu webinerde bu konulara değineceğiz.
https://www.livemeeting.com/cc/usergroups/join?id=PBRM8P&role=attend
Kontrol Şablonları ve VisualStateManager, 11 Haziran, 21.00
Standart kontroller arasında sıkışmayın ve kontrollerinizi tamamen baştan yaratın. Hatta bu tasarımları tekrar ve tekrar kullanın. Bu webinerde silverlight kontrollerinin şablonlarının değiştirilmesini, Template Binding mekanizmasını ve visual State Manager'ın kullanımını Custom State yapıları ile beraber inceleyeceğiz.
https://www.livemeeting.com/cc/usergroups/join?id=R8JSQH&role=attend
Silverlight içerisinde Veri Erişimi, 12 Haziran, 21.00
İster klasik web servisleri kullanın, ister WCF servisleri veya ister Socket üzerinden haberleşin hepsinin de kendine göre avantaj ve dezavantajları var. Gelin hepsinin de Silverlight tarafındaki detaylarını beraber inceleyip Silverlight uygulamalarımızı veri ile tanıştıralım.
https://www.livemeeting.com/cc/usergroups/join?id=GH9T5W&role=attend
Offline/Online/Desktop çalışma yapıları, 15 Haziran, 21.00
Silverlight 3.0 ile beraber uygulamalarınızı masaüstüne birkaç tıklama ile taşıyabilirsiniz. Peki hem masaüstünde hem webde hem online hem offline çalışırken tüm bu sistemi, verilerinizi nasıl kontrol edeceksiniz. Bu webinerde farklı çalışma yapılarını göz atarken verilerimizi IsolatedStorage içerisinde saklayacağız.
https://www.livemeeting.com/cc/usergroups/join?id=QTZH9R&role=attend
İş Uygulamaları Yaparken Silverlight, 16 Haziran, 21.00
Animasyonlar hoştur, güzeldir ama herşey değildir. DataGrid'ler, Comboboxlar, Calendar'lar bir araya girdiğinde hepsinden bir iş uygulaması arayüzü yaratıp kontrol etmeye ne dersiniz? Bu webinerde hep beraber bir iş uygulamasının ekranını hazırlayacağız.
https://www.livemeeting.com/cc/usergroups/join?id=BGN6BT&role=attend
RIA Services, 17 Haziran, 21.00
Farklı bir bakış açısı ile Silverlight uygulamalarınızdan veritabanına erişimine çocuk oyuncağına dönüştürmek ister misiniz? RIA Services sadece verinin taşınmasını değil aynı anda kendi kontrolleri ile düzenlenmesini de kolaylaştırıyor. Nasıl olacağını merak ediyorsanız bekleriz.
https://www.livemeeting.com/cc/usergroups/join?id=P9KQ6B&role=attend
Silverlight projelerinde SEO, 18 Haziran, 21.00
Arama motorlarına dair optimizasyonların çoğumuz için önemli. Silverlight projelerinde özellikle asenkron veri erişimi nedeniyle söz konusu veriye arama motorları ulaşamıyor. Peki ya bir çözümü varsa? Tabi ki o çözümü paylaşma vakti.
https://www.livemeeting.com/cc/usergroups/join?id=Q6H2G7&role=attend
Video Aşkına! Canlı/Cansız Yayın, 19 Haziran, 21.00
İnternette televizyoz izlemek veya cansız kayıtları yayınlamak, amacınız ne olursa olsun video konusunda Silverlight çok güçlü. Bu webinerde Silverlight ile canlı yayın, Media Services ayarları, Adaptive Streaming, cansız yayın ve Video Player hazırlanması gibi konulara değineceğiz.
https://www.livemeeting.com/cc/usergroups/join?id=BNPK36&role=attend
DeepZoom Uygulamaları, 22 Haziran, 21.00
Yaklaştıkça daha çok detay görmek isteyenlerin tarzı DeepZoom uygulamalarını hızlı bir şekilde geliştirmenin yanı sıra sıfırdan DeepZoom uygulamalarını yazmak, uygulamaları özelleştirmek ve veri bağlantısı yaparak dinamik DeepZoom projeleri yaratmak isteyenler bu webineri kaçırmasın.
https://www.livemeeting.com/cc/usergroups/join?id=BZFCH9&role=attend
Tarayıcı Entegrasyonu, 23 Haziran, 21.00
Silverlight ile tarayıcı arasındaki ilişkiyi inceleyeceğimiz bu webinerde Silverlight tarafındaki C#/VB kodunuz ile DOM entegrasyonunun yanı sıra tam ekran uygulamaları, ön yükleme ekranlarını ve RunTime yükleme ekranlarını özelleştirmeye göz atacağız.
https://www.livemeeting.com/cc/usergroups/join?id=3GZKMH&role=attend
Bir önceki makalemde bahsettiğim TimerLight kontrolü şu anda Codeplex.com Açık Kaynak platformunda yayınlanmış durumda.
http://timerlight.codeplex.com/ adresinden projeye ulaşabilirsiniz. Hatta istiyenler Source Code bölümünden kaynak kodlarına da erişebilirler.
Hadi hayırlısı :)
Silverlight ile projeler geliştirirken maalesef en çok sıkıntı çektiğim konulardan biri Timer kontrolüydü. Bilmeyenler için söylemek istiyorum: Silverlight üzerinde Timer kontrolü yok. Ama bir timerin yaptığı işi yapabilecek kodcuklar yazmanın birden fazla yolu var. Şimdiye kadar hepsini denedim ama hiç tatmin olamadım. Sonuçta Windows Form Applications ve ASP.NET üzerindeki Timer kadar kolay kullanımlı değil ve en önemlisi alışkın değiliz.
Diyeceksinizki makalenin adı neden TimerLight. Süper bir cevabım var: TimerLight benim yazdığım bir Timer kontrolünün adı :D Ankara'dan Adana'ya trenle gelirken üşenmedim ve şu işe bir el atmak lazım dedim.
Aslında önceden amacım Silverlight üzerinde nasıl Timer gibi çalışan kodcuklar yazacağımızı anlatan bir makale yazmaktı.
Ama artık gerek yok!
Yapmanız gereken çok basit:
1- Bu adresten TimerLight.dll dosyasını indirin
2- Projenizin Add Reference bölümünden ekleyin
3- Güle Güle kullanın :)
Referansımı biraz anlatmak istiyorum. Alışık olduğumuz gibi basit bir Timer aslında :)
- Start ve Stop olayları var.
- Interval değeri Default'unda 100 milisaniye olarak ayarlardım ama siz istediğinizi verebilirsiniz.
- Tick olayı mevcut..
Daha ne olsun ki :)
Eğer şuda olsun diyorsanız bana mail atın.. Görüşmek üzere..
Dün akşam mesai bitiminden sonra iş arkadaşım Alper Koca ile yürürken çok ilginç bir tabelaya rastladık. Bizim için anlamlı ama tabela sahibi işyeri için anlamsız olduğu kesindi..
Silverlight Adana'da ofis açmış!
Aşağıdaki fotoğrafa bakarsanız ne demek istediğimi çok daha iyi anlayacaksınız. Biz gördüğümüzde dumur olduk..

Fotoğrafı cep telefonumla çektiğim için kalite biraz kötü ama okuyamayanlar için söylemek isterimki tabela bir "Erkek Kuaförü" ne ait. :) İçeri girip sormak neden Silverlight diye sormak istedim ama yanlış anlaşılırım korkusuyla sormadım. Bir dahaki sefere traş olmaya gidecem o zaman sorarım. Aslında Daron Yöndem iki hafta önce Adana'ya geldiğinde orda traş olmaya götürmek isterdim. Eminim onun için de çok iyi bir anı olurdu. :)
Daha önce de Google Adana'da ofis açmıştı!
Aşağıdaki fotoğrafta Google Adana ofisinden bir görüntü.

Yakında Adana'da Java Market, Mac Manav, Facebook Oto Kiralama görürseniz hiç şaşırmayın..
Bu aralar Las Vegas'da düzenlenen MIX09'dan dolayımıdır nedir baya aktif bir hafta geçiyor .net tarafında. Geçen sene MIX08'de duyurulan Silverlight 2.0 gibi bu senede Silverlight 3.0 duyurulacak. Ama bugün uzun zamandır beklediğim bir şey daha duyuruldu: ASP.NET MVC 1.0!
ASP.NET MVC 1.0
Daha önce betasını duyurduğum (RC'sini duyuramadım) ASP.NET Model View Controller 1.0 Framework en nihayetinde MIX09'da duyuruldu. Ne işe yarar bu diyorsanız http://www.asp.net/mvc/ adresine bakabilirsiniz. Bir çok Örnek,Video ve Tutorial bulabilirsiniz...

İndirmek için: http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&displaylang=en
Silverlight 3.0
Sabırsızlıkla bekliyorum kendisini fakat her kafadan bir ses çıkıyor Silverlight 3.0 betanın yenilikleri hakkında.. Bari benden de bir ses çıksın istedim ve olası yenilikler listesi yaptım. Tabi kafadan atmadım.. Araştırmaların sonucu edindiğim bilgiler.. İşte olası yenilikler listem:
Zengin metin kontrolüYazım denetimi desteğiPDF desteğiGelişmiş yazdırma desteğiÇevrimdışı veri saklamaVeritabanı senkronizasyonuSilverlight Uygulamalarını masaüstünüze yüklüyebilmeYerel Diskimize erişimMasaüstümüzle Silverlight uygulamamız arasında Sürükle Bırak tekniği (Drag&Drop)USB aygıtlarına erişim yeteneği3D
İndirmek için: http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&displaylang=en