Ana Sayfa | English Blog | Seminer TV | Dil Cookie Sil  Blog'u Mail ile takip et!  
Daron Yöndem - Silverlight
bir yazılımcının tasarıları...
 Thursday, April 01, 2010

Her sene 1 Nisan MVP'liğimin bittiği gün :) Şaka gibi değil mi? :) Biliyorsunuz MVP ünvanı her seferinde senelik olan Microsoft tarafından verilen bir ünvan bu nedenle bir bitiş tarihi var ve bu nedenle de her sene yenilenmesi gerekiyor :) Eh benimki bugün yenilendi. 2010 yılında da "Silverlight MVP"si olarak var olmaya devam edeceğim. Bu gaz ile önümüzdeki dönemde blogda ekstra hareketlilik göreceğinizden de emin olabilirsiniz :)

Hepinize bu dönemde gösterdiğiniz destek için ayrıca çok teşekkürler. Bilgiyi paylaşmak ancak paylaşabileceğiniz insanlar oldukça zevkli ve güzel. 2010'da da daha yapacak çok işimiz var ;) ve güzel sürprizlerim var ;)

Görüşmek üzere.

Thursday, April 01, 2010 6:58:01 AM (GTB Standard Time, UTC+02:00)  #    Comments [3]   Silverlight | Silverlight 2.0 | Silverlight 3.0 | Silverlight 4  | 
 Saturday, February 27, 2010

İki gündür Kahramanmaraş'tayım :) Evet dondurması ve acısı ile ünlü Kahramanmaraş'tan bahsediyorum. Tabi maalesef acı miktarı konusunda hala benim istediğim acı biberi bulamadık o ayrı :) Pul biberlerini avuç avuç tadarkenki halimi komik bulanlar bile oldu. Her neyse, konumuza geri dönelim. İki gündür Kahramanmaraş'tayım çünkü Sütçü İmam Üniversitesi desteği ile Kahramanmaraş Ticaret Meslek Lisesi öncülüğünde düzenlenen bir seminer serisine konuşmacı oldum. Şehre gittiğimde epey şaşırdığımı itiraf etmeliyim :) Neden olduğunu sanırım aşağıdaki fotoğraf açıklıyordur.

Bu şaşkınlık sonrasında sahneye çıktığım ilk günde Kahramanmaraş Ticaret Meslek Lisesi'ndeydim. Öğrencilerden gelen sorular ayrı ayrı şaşkınlık seansları yaşamama neden oldu. İlk soruyu çok net hatırlıyorum :) "Visual Studio 2010 ile bir web projesi yarattığımızda Web.Config neden boş geliyor?" şeklindeki soru bir an afallamama neden oldu. Karşımda Visual Studio 2010'u denemiş, web sitesi yaratıp Web.Configi bilerek içindeki değişikliği yakalamış bir lise öğrencisi var dikkatinizi çekiyorum! Kesinlikle "Efsanevi hareketler bunlar". Bu öğrencileri yetiştiren ve organizasyona süper faydası olan "kahramanlarıma", sevgili hocalarımız Çetin Çevik, Yalçın Ateş, Serdar Temiz'e buradan binlerce teşekkür gönderiyorum!

Kahramanmaraş Ticaret Meslek Lisesi
Kahramanmaraş Ticaret Meslek Lisesi

İlk günümüzün ilk yarısını Meslek Lisesi'ndeki öğrencilerimizle geçirdik. Sonrasında ben biraz daha derinlere dalarak hocalarımıza da bir anlatımda bulundum. Öğrencilerimiz üzülmesin darılmasın ama onlar geçici :) hocalarımız kalıcı. Bu gibi aktivitelere hocalarımızın katılımı benim için ÇOK değerli çünkü bilginin daha geniş kitlelere dağılmasını sağlayacak kişiler hocalarımız. İkinci gün Sütçü İmam Üniversitesi'nde geçtik. Sevgili Yrd. Doç. Dr. Mehmet Tekerek hocamıza ve üniversite yönetimindeki tüm dostlara desteklerinden dolayı ayrıca çok teşekkürler. Her iki gün de benim için çok zevkli ve verimli geçti.

Tekrar aktiviteye katılan herkese milyonlarca teşekkürler! Görüşmek üzere! ;)

Saturday, February 27, 2010 11:24:29 AM (GTB Standard Time, UTC+02:00)  #    Comments [4]   Silverlight | WPF  | 
 Wednesday, September 02, 2009

DVD veya CD arayüzleri hala bilgisayar dünyasında ciddi bir yere sahip. İçeriğin paylaşımı adında internet ciddi bir yol almış olsa da hala CD ve DVD medyalarını kullanarak içeriğin dağıtımı bazı senaryolarda çok daha işlevsel olabiliyor. Bu gibi durumlarda doğal olarak bir arayüz ile söz konusu içeriği bir CD veya DVD içerisinde sunmak gerekiyor. Peki bu arayüzü geliştirmek için hangi teknolojileri kullanabiliriz?

Gelin beraberce sıralayalım;

HTML - Pufff!
Flash - ActionScript? Pufff!
WPF - .NET Framework yükletmek? Puff!
Silverlight - Oley! İşte bu!

Şaka bir yana :) aslında bir CD veya DVD arayüzü geliştirirken ihtiyacımız olan şey hem arayüz içerisinde her tür data işlemini yapabilimek hem de güzel bir arayüz tasarlayabilmektir. Varsayalım bir ürün kataloğu yapıyorsunuz, büyük ihtimal ile söz konusu ürünler arasında arayüzde arama da yapılabilmelidir. İşte ufak da olsa bir programlama noktası karşımızda. Olabildiğince rahat programlamak ve bildiğimiz bir dili kullanmak önemli. HTML ile JavaScript veya Flash ile ActionScript bir .NET developer için çok da ferah bir gelecek vaadetmeyecektir. Ayrıca HTML ile zaten güzel bir arayüz, zengin bir kullanıcı deneyimi sağlamak da pek mümkün değil.

Alternatiflerden bir diğeri WPF olabilir ve aslında çok da güzel olur. Fakat bu sefer de .NET Framework gereksinimi ile karşı karşıya kalıyoruz. Eh hadi DVD'nin içine koyalım ama insanların bir DVD arayüzünü görebilmek için .NET Framework kurup (en az 5dk) makinelerine restart atacaklarından emin misiniz?

Tüm bu senaryonda en güzeli Silverlight! Hem bildiğimiz VB, C# hem Expression Blend ile süper kullanıcı deneyimi hem de 4MB Runtime ve 5 saniye yükleme süresi. Hem MAC desteği de var! Eh gönül daha ne ister?

Tamam da şimdi tarayıcıda açtırmak da pek hoş olmuyor!

Kesinlikle! Bir CD veya DVD arayüzünün tarayıcı içerisinde açılması benim en uyuz olduğum noktalardan birisidir özünde. Neden mi? Çünkü ister istemez bir web sitesi hissiyatı yaratıyorsunuz ve en azından bende "çok uğraşılmamış" efekti oluşturuyor. Yani "adamlar web sitesi yapıp koymuş DVD'ye!" gibi abuk bir yorumun gelmesi olasılığı ciddi yüksek. O nedenle tarayıcıdan kurtulmamız gerek.

HTML Application = HTA!

HTA'larla ilk tanışdığımda "İşte bu" demiştim :) Sanırım SQL 2000'in yükleme CD'sinin arayüzünde görmüştüm. Arayüz ilgimi çekmişti çünkü bir tarayıcı gibi içinde HTML olduğunu hissetmiş fakat ortada bir tarayıcı görmemenin de şaşkınlığını yaşamıştım. Sonra biraz CD'yi karıştırınca HTA'larla tanıştım. HTA aslında HTML vs bir scripting dili ile yazılabilir uygulamalar şeklinde tanımlanabilir. Bu uygulamalar "Microsoft HTML Applicatio Host" adında özel bir uygulama tarafından Windows içerisinde host edilir. Arka planda Internet Explorer kullanılır fakat kullanıcılar bunu görmez. HTA uzantılı bir dosya rahatlıkla Notepad ile açılabilen birer HTML dosyasıdır aslında.

[HTA]

<HTML>

  <head>

  <link href="img/styles.css" type="text/css" rel="stylesheet" />

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <TITLE>

      Internet Explorer 8 -DVD

    </TITLE>

 

    <HTA:APPLICATION

     APPLICATIONNAME="IE8DVD" 

     MAXIMIZEBUTTON="no"

     MINIMIZEBUTTON="no"

     SINGLEINSTANCE="yes"

     ICON="setup.ico"

     SCROLL="no" />

  </HEAD>

 

<body style="margin:0px;">

 

    <script for="window" event="onload">

   window.resizeTo(820,640);

   window.moveTo((screen.width - 820) / 2, (screen.height - 640) / 2);

</script>

</body>

</html>

Yukarıda gördüğünüz kod basit bir HTA dosyasının içeriği. Aslında içerisinde pek birşey yok. İlk anlamamız gereken şey aslında bir HTML ile çalışıyor olduğumuz. Tabi biz arayüzü oluşturmak için HTML değil Silverlight kullanacağız. Önemli olan ilk şey tabi ki dokümanın TITLE kısmını ayarlamak çünkü bu uygulamanızın açılan penceresinin başlığı olacak. Aşağıda gördükleriniz ise uygulama parametreleri.

[HTA]

    <HTA:APPLICATION

     APPLICATIONNAME="IE8DVD" 

     MAXIMIZEBUTTON="no"

     MINIMIZEBUTTON="no"

     SINGLEINSTANCE="yes"

     ICON="setup.ico"

     SCROLL="no" />

Uygulamanın açılacağı pencerede pencereyi büyütme, küçültme vs gibi düğmeleri isteyip istemediğinizi belirtebilir hatta uygulamanın tek oturumunun olmasını da yukarıdaki parametreler ile sağlayabilirsiniz. Uygulama ikonunu da ayarladıktan sonra önemli noktalardan biri Scroll özelliği NO şeklinde set etmek. Malum biz bu HTML içerisinde arayüz olarak Silverlight koyacağımız için zaten gerekli scroll işlemlerini de SL içerisinde halledebiliriz.

[HTA]

    <script for="window" event="onload">

   window.resizeTo(820,640);

   window.moveTo((screen.width - 820) / 2, (screen.height - 640) / 2);

</script>

Yukarda basit bir JavaScript kodu görüyorsunuz. Bu kod uygulamanızın penceresinin boyutunu ayarlayacağı gibi pencerenin de ekranın tam ortasında gözükmesini sağlayacaktır. HTA'lar içerisinde hem JavaScript hem VBScript kullanabilirsiniz. Her script ait olduğu nesneye for özelliği ve ait olduğu nesnenin hangi event'ını dinleyeceğine de event parametresi ile bağlanır.

Bu noktadan sonra tabi ki sizin ilk olarak Silverlight uygulamanızı hazırlamanız gerek. Arayüz olarak kullanılacak Silverlight uygulaması hazırlandıktan sonra bu HTA içerisine uygun şekilde yerleştirilebilmesi çok önemli.

[HTA]

<HTML>

  <head>

  <link href="img/styles.css" type="text/css" rel="stylesheet" />

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <TITLE>

      Internet Explorer 8 -DVD

    </TITLE>

 

    <HTA:APPLICATION

     APPLICATIONNAME="IE8DVD" 

     MAXIMIZEBUTTON="no"

     MINIMIZEBUTTON="no"

     SINGLEINSTANCE="yes"

     ICON="setup.ico"

     SCROLL="no" />

  </HEAD>

 

<body style="margin:0px;">

    <div id="silverlightControlHost">

        <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">

            <param name="source" value="ClientBin/Interface.xap"/>

            <param name="background" value="white" />

            <param name="minRuntimeVersion" value="2.0.31005.0" />

            <param name="autoUpgrade" value="true" />

            <img style="cursor:pointer;" ID="SLInstall" border="0" src="images/install.jpg" />

        </object>

    </div>

 

    <script for="window" event="onload">

   window.resizeTo(820,640);

   window.moveTo((screen.width - 820) / 2, (screen.height - 640) / 2);

</script>

     <SCRIPT FOR="SLInstall" EVENT="onclick" LANGUAGE="VBScript">

      Dim objShell

      Dim lngReturn

 

      on error resume next

 

      set objShell = CreateObject( "WScript.Shell" )

 

        lngReturn = objShell.Run ("Silverlight.2.0.exe", 4, 1)

 

      set objShell = Nothing

      document.execCommand("Refresh")

 

    </SCRIPT>

</body>

</html>

İşte esas noktaya geldik. Yukarı gördüğünüz OBJET tagları klasik bir SL uygulamasının bir HTML sayfaya yerleştirildiği taglardan farklı değil. Bir tek minik fark var o da OBJECT tagları içindeki HTML kodu! Hatırlarsanız tarayıcılar eğer OBJECT taglarını render edemezse içlerindeki HTML'i gösteriyorlardı. Bu gibi bir durumda Silverlight hedef makinede yüklü değilse bu demektir de tarayıcı OBJECT taglarını render edemeyecek bir OBJECT içerisindeki HTML'i kullanıcıya gösterecek.

[HTML]

      <img style="cursor:pointer;" ID="SLInstall" border="0" src="images/install.jpg" />

Yukarıdaki şekilde güzel bir resim Silverlight yüklü değilken gösterilecek resim olarak seçilebilir. Tabi bu resmin tasarımında kullanıcıya uygun mesajı bir metin olarak göstermeniz şart. Diğer yandan bu resim nesnesinin fare ile üzerine geldindiğinde el işareti gösterilmesi için uygun CSS'in kullanılması da gerekiyor. Son olarak bu IMG'ye bir de ID veriyoruz çünkü bu resme tıklandığında Silverlight Runtime yüklemesini başlatmalıyız!

[VBScript]

     <SCRIPT FOR="SLInstall" EVENT="onclick" LANGUAGE="VBScript">

      Dim objShell

      Dim lngReturn

 

      on error resume next

 

      set objShell = CreateObject( "WScript.Shell" )

 

        lngReturn = objShell.Run ("Silverlight.2.0.exe", 4, 1)

 

      set objShell = Nothing

      document.execCommand("Refresh")

 

    </SCRIPT>

Yukarıda bir VBScript kodu görüyorsunuz. Silverlight Runtime yüklemesine ait EXE dosyasının HTA ile aynı klasöre koyduktan sonra uygun zamanda yüklemeyi başlatmak şart. Bunun için bir Shell nesnesi yaratarak yüklemeyi başlatabiliyoruz. Yükleme bitince de sayfaya Refresh atıyoruz böylece kullanıcı yüklemeyi yaptıktan sonra ekranı kapatıp açmadan hemen arayüzü görebiliyor. Bu scriptin FOR ve EVENT özelliklerine bakarsanız bizim bir önceki adımda yarattığımız IMG nesnesinin onclick durumunda çalışacağını görebilirsiniz.

Diskten birşey çalıştırmak istersek?

Biliyorsunuz Silverlight'ın çalıştığı makinedeki diske erişimi yok. Bunun nedeni Silverlight'ın çalıştığı yer olan tarayıcı içerisindeki alandan yani bir web sitesinden de hedef makinedeki diske ulaşamıyor olmamız. HTA'lar bu konuda biraz farklılar. HTA'larda rahatlıkla diske erişebilirsiniz. Aslında bir önceki örnekte biz bu işi zaten yapmadık mı? HTA içerisinden gidip Silverlight Runtime'ı yüklemek demek harici bir EXE'yi çalıştırmak demek değil mi? Aynen öyle. Peki biz bunu Silverlight içerisinden nasıl yapabiliriz?

Silverlight içerisinde çıkıp VBScript'e ulaşıp, parametre göndererek VBScript ile de diske erişebiliriz.

[VBScript]

     <SCRIPT LANGUAGE="VBScript">

             sub Getir(byval address)

      Dim objShell

      Dim lngReturn

 

      on error resume next

 

      set objShell = CreateObject( "WScript.Shell" )

 

        lngReturn = objShell.Run (address, 4, 1)

 

      set objShell = Nothing

            end sub

    </SCRIPT>

Yukarıda gördüğünüz VBScript metodu tek bir parametre alarak Shell nesnesi yaratıp parametreden gelen adresi diskte çalıştırmaya çalışıyor. Bu durumda biz bu metodu Silverlight tarafından çağırıp uygun parametreyi verebilirsek işlem tamamlanmış demektir.

[VB]

    Private Sub btnSource_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnSource.Click

        System.Windows.Browser.HtmlPage.Window.Invoke("Getir", New String("samples/Hedehodo.exe"))

    End Sub

İşte bu kadar basit. Silverlight'tan DOM'a çıkarak Getir adındaki metodumuzu çalıştırıp bir de String parametre gönderiyoruz. Söz konusu String parametre aslında çalıştırmak istediğimiz uygulamanın HTA dosyasının bulunduğu yere göre relative Uri'sini içeriyor. Böylece bu parametre VBScript'e aktarılacak, oradan da Shell üzerinden çalıştırılabilecek.

Süper değil mi?

Şimdi yapabileceklerinizi bir düşünün :) Silverlight uygulaması içerisinde yapabildiğiniz herşey bir anda bir DVD arayüzüne dönüştürülebiliyor. SaveFileDialog, OpenFileDialog, Socket bağlantılar!, Desktop moduna geçip makineye anında yükleme yapabilmek! ve daha bir çok Silverlight özelliğini bir anda kullanabilir hale geliyorsunuz! Bu gerçekten muhteşem!

Wednesday, September 02, 2009 5:39:03 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]   Silverlight | Silverlight 2.0 | Silverlight 3.0  | 
 Wednesday, April 01, 2009

2009 Silverlight MVP'liği!Geçen yıl bugünlerde sizlerle ASP.NET alanında MVP olmamın müjdesini paylaşmıştım. Bu süreçte şöyle kabaca baktığımda son bir yılda 300'ü aşkın blogpost, 100'ü aşkın teknik makale ile bildiklerimi paylaşmaya çalışırken seminerler ile de hesabıma göre 15.000 kişiye ulaşmışım. İtiraf etmek gerekirse "önümüzde yılda daha fazlasını yapacağım" gibi bir iddiada bulunamam :) ama aynı tempo devam edecek diyebilirim.

Silverlight MVP'si oldum!

Bu yazıyı yazmamın esas nedeni sanırım belli oldu :) 2009 yılında da MVP ödülüne layık görüldüm. Bu sefer ödülü aldığım alan Silverlight oldu. Biraz şanslı bir olarak dünyadaki ilk Silverlight MVP'lerindenim çünkü bu uzmanlık alanı daha yeni açıldı :) Ortadoğu-Afrika bölgesinde ise en azından bu dönemde aldığım duyumlara göre tek Silverlight MVP'si olmuşum. Bu durum özellikle bölgede Türkiye'nin önderliği adına, kendi kendime mutlu olduğum bir detay oldu diyebilirim.

Hepinize bu süreçte gösterdiğiniz destek için çok teşekkür ediyorum.

Wednesday, April 01, 2009 10:53:32 PM (GTB Standard Time, UTC+02:00)  #    Comments [32]   Silverlight | Silverlight 2.0 | Silverlight 3.0  | 
 Friday, January 02, 2009

Yeni yılda hayatınızı kolaylaştırma yolunda iddialıyım :) Bu sefer de benim işimi çok kolaylaştıran bir aracı sizlerle paylaşacağım.

Visual Studio içerisinde F5'e bastığımızda System Tray'de beliren "ASP.NET Development Server"'ı hatırlarsınız. Aslında adı "Cassini" olan bu server işimizi epeyce kolaylaştırır ve bizim her sererinde IIS'te sitemizi veya uygulamamızı ayarlamamızı gerektirmeden uygulamanın sanal bir sunucu ortamında test edilmesini sağlar.

Peki hiç herhangi bir projenizi doğrudan çalıştırıp görmek istediğinizde mecburen Visual Studio ile açıp F5'e bastığınız oldu mu? :) Veya mecburen IIS'te web site ayarlamak zorunda kaldınız mı? sadece sitenizi çalıştırabilmek için? İşte bu işkence aslında sürekli yaşadığımız bir süreç ve çok kolay bir çözümü var. Biz de Visual Studio gibi gidip Cassini'yi kullanabiliriz.

Aslında Cassini bizim bilgisayarlarımızda WebDev.WebServer.exe olarak yüklü bulunuyor. Tabi ki EXE'yi doğrudan alıp taşıyamazsınız, çok sayıda bağlantılı DLL vs de söz konusu. Ama biz bu EXE'ye doğru parametreleri gönderirsek aynı Visual Studio'nun kullandığı gibi herhangi bir klasördeki dosyaları web sunucudaymış gibi çalıştırabiliyor. Bu EXE'nin nasıl kullanıldığını merak edenleri veya birazdan sizlerle tanıştıracağım uygulamanın nasıl yazıldığını merak edenleri İngilizce blogumdaki bir yazıya davet edebilirim :)

Sağ tıkla sunucudaaymış gibi çalıştır!
Sağ tıkla sunucudaaymış gibi çalıştır!

Gelelim sadede... Infragistics'te çalışan J. Ambrose Little tüm bunları yaparak uygulamayı da bir SETUP paketi şeklinde hazırlamış ve bununla da kalmamış ve bu sistemi işletim sisteminin context menü'süne bağlamış. Yani özetle; herhangi bir klasöre sağ tıklayıp "ASP.NET 2.0 Web Server Here" dediğizde Cassini açılıyor ve söz konusu klasör içerisindeki uygulama server üzerinden çalıştırılıyormuş gibi karşınıza çıkıyor. Aynı Visual Studio'da F5'e basmış gibi :)

Uygulamayı aşağıdaki linkten bilgisayarınıza indirip yükleyebilirsiniz.

Cassini Web Server Launcher - 02012009_1.msi (355 KB)

ASP.NET 2.0 dediğine bakmayın 3.5 SP1 ile herhangi bir sorunu yok.

Hepinize kolay gelsin...

Friday, January 02, 2009 12:57:26 PM (GTB Standard Time, UTC+02:00)  #    Comments [10]   AJAX | ASP.NET | ASP.NET 3.5 | Silverlight | Silverlight 2.0  | 
 Thursday, December 11, 2008

Microsoft'un dünya çapındaki Imagine Cup yarışmasının bu seneki ayağının finali Mısır'da yapılacak. Tabi onun öncesinde Türkiye ayağı ile yarışmacıların Türkiye birinciliğini almaları gerekiyor :)

Imagine Cup 2009 için bu yıl öğrenciler; dünyanın en zorlu sorunlarına, teknoloji ile çözüm bulabilecekleri bir dünya düşlemeye davet ediliyor. Bazılarımız teknolojiyi dünyanın her yerindeki insanlara eğitim şansı kazandırmak için kullanacaktır, ya da sağlık alanında yepyeni ufuklar açmak için. Bazılarımız ise cinsiyetler arası fırsat eşitsizliğini çözmek isteyecektir. Imagine Cup 2009 teması için örnek gösterilen Birleşmiş Milletler Milenyum Hedeflerinin açıklandığı, geçtiğimiz yılların deneyimlerinin aktarıldığı ve teknik oturumların bulunduğu Imagine Cup 2009 Lansmanı 20 Aralık Cumartesi günü Microsoft Istanbul ofisinde gerçekleştirilecek.

Aktiteye katılmak için buradan kayıt olmanız gerekiyor.

Sabah saat 10.00'da başlayacak etkinliğin planına buradan ulaşabilirsiniz. En son teknik oturum benim ;) Konumuz: Expression Studio.

Thursday, December 11, 2008 6:21:04 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]   Expression Blend | Expression Design | Expression Encoder | Expression Media | Expression Studio | Expression Web | Silverlight | Silverlight 2.0  | 
 Thursday, November 13, 2008

Mart ayında sizleri Silverlight T-Shirt'üm ve sonrasında da Tish-O ile tanıştırmıştım. Böylece sizler de isterseniz SilverMan T-Shirt'ünden sipariş verebilecektiniz :) Eh birileri siparişleri vermiş :) FaceBook'taki Fan Club'ımın da kurucuları olan Ahmet Enes Dabanlıoğlu ve Fatih Gençaslan heyecanları ile gerçekten beni etkilediler. Arkadaşlar bu heyecanı satır satır kodlara dökmeniz dileği ile ;)

The Silver Team :)
The Silver Team :)

Thursday, November 13, 2008 12:30:41 AM (GTB Standard Time, UTC+02:00)  #    Comments [5]   Silverlight | Silverlight 2.0  | 
 Tuesday, August 26, 2008

Taaaa 12 Ocak 2008 tarihinde :) CETURK organizasyonunda Microsoft binasında bir seminer günü düzenlemiştik ve o günde ben de Silverlight 1.0 ve WPF anlatmıştım. Aktivitenin videoları sonunda :) CETURK sitesinde yayınlandı. Videolara aşağıdaki adresten ulaşabilirsiniz;

http://www.ceturk.com/Dersizle.asp?id=482

Hepinize kolay gelsin.

Tuesday, August 26, 2008 1:51:23 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]   Silverlight | WPF  | 
 Thursday, August 21, 2008

Bugün İzmir'de hosting sağlayıcılar ile bir bir eğitimimiz oldu. Benim için çok güzel bir fırsattı :) çünkü zaten hali hazırda Türkiye'deki hosting sağlayıcılar ile ilgili dertliyim. Şirket tarafında müşterilerimize sunduğumuz içerik yönetim sistemlerini müşterilerimiz hosting sağlayıcılardan aldıkları alanlara koyduklarına bir çok sorun ile karşılaşıyoruz. Bu sorunların detaylarına inerek eğitim boyunca ASP.NET hosting yaparken nelere dikkat edilmesi gerektiğine değindim.

Microsoft Hosting Çözümleri Eğitimi, İzmir
Microsoft Hosting Çözümleri Eğitimi, İzmir

Seminerlerde özellikle bana "ASP.NET 3.5 destekli hosting nasıl buluruz?" gibi sorular geliyor. Bu soruları ve arayışı doğrudan hosting firmalarındaki yetkililere iletme şansım oldu. İlginç bir şekilde sunucularında .NET Framework 3.5 kurulu olduğunu fakat sitelerinde hala 2.0 yazdığını söylediler :) Tabi en kısa zamanda bu hatayı düzeltecekler. Hatta birkaç gün içerisinde SP1 yüklü hostinglerimiz bile olacak Türkiye'de.

Bir diğer konu da tabi ki Silverlight'dı :) Silverlight'ın IIS tarafındaki Mime Type ayarlarından ve detaylarından bahsettik.

Eğitimde kullandığım sunumu aşağıdan indirebilirsiniz.

Hosting Çözümleri Eğitimi Sunumu - 21082008_1.pptx (206,66 KB)

Thursday, August 21, 2008 8:15:42 AM (GTB Standard Time, UTC+02:00)  #    Comments [12]   ASP.NET 3.5 | IIS 7.0 | Silverlight | Silverlight 2.0  | 
 Sunday, August 17, 2008

Bundan yaklaşık bir hafta kadar önce Adobe sponsorluğundaki RiaTalks etkinliğinde Silverlight anlatmıştım. Sizleri hem aktivite öncesi hem de sonrası blogdan bilgilendirmiştim. İşte o aktivitede yine ufak bir video çalışmamız oldu. Video konusundaki yardımlarından dolayı Murat Duman'a teşekkür ediyorum. İyi seyirler...

Sunday, August 17, 2008 11:14:48 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight | Silverlight 2.0  | 
 Sunday, July 13, 2008

Bundan yaklaşık 6 ay önceydi sanırım GGK organizasyonunda bir Silverlight seminerimiz olmuştu. Bu seminerin video kaydı alınıp internete konmuş olsa da ben blogdan paylaşmayı unutmuşum :) Sağ olsun sevgili Recep Selli durumu hatırlamamı sağladı. Silverlight 1.0 gibi artık eski diyebileceğim bir konu olsa da buyurun arkadaşlar 3 saatlik Silverlight 1.0 semineri karşınızda.

Sunday, July 13, 2008 6:07:54 PM (GTB Standard Time, UTC+02:00)  #    Comments [17]   Silverlight  | 
 Saturday, June 28, 2008

Bugün riatalks.com aktivitesindeydim. RIA (Rich Internet Application) konusu çerçevesinde gerçekleştirilen aktivite serisinde benim de ufak bir Silverlight konuşmam oldu. Çok fazla teknik içeriği olmayan zevkli bir aktiviteydi. Hatta yarın da aktivite devam ediyor olacak.

RIATALKS aktivitesinden bir kare...
RIATALKS aktivitesinden bir kare...

Özellikle RIA konusunda bir vizyon edinmek isteyenler Bahçeşehir Üniversitesi'nde düzenlenen aktiviteye katılmalarını tavsiye ederim.

Saturday, June 28, 2008 10:30:40 AM (GTB Standard Time, UTC+02:00)  #    Comments [1]   Seminer | Silverlight | Silverlight 2.0  | 
 Sunday, June 22, 2008

Silverlight uygulamaları içerisinden "Clipboard"a ulaşmak istediğinizde maalesef hazır bir altyapı ile en azından şimdilik Silverlight 2.0 Beta 2 içerisinde karşılaşmıyoruz. Aynı şekilde Silverlight 1.0 içerisinde de bu sorun için bir çözüm yok. Fakat özellikle Silverlight 1.0 tarafında zaten JavaScript'in ana programlama yapısı olduğunu düşünürsek "Acaba tarayıcı içerisinde JavaScript ile bir çözüm oluşturabilir miyiz?" sorusu akla geliyor. Bu sorunun cevabı en azından Internet Explorer için "Evet". FireFox varsayılan ayarları ile bu gibi işlemlere JavaScript tarafında olanak tanımıyor.

Silverlight 1.0 ile Clipboard kullanımı

Yeni bir Silverlight 1.0 projesi yaratarak içerisine bir TextBlock ve Rectangle yerleştirelim. Yapacağım işlem TextBlock içerisinde yazılı metni Rectangle'a basıldığında ClipBoard'a taşımak olacak.

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="640" Height="480"

  Background="White"

  x:Name="Page">

  <TextBlock Width="274.242" Height="43.939" Canvas.Left="31.818" Canvas.Top="27.273" Text="Kopyalanacak Metin" TextWrapping="Wrap" x:Name="Etiket"/>

  <Rectangle MouseLeftButtonDown="Kopyala" Width="122.727" Height="43.939" Fill="#FFFF0000" Stroke="#FF000000" Canvas.Left="31.818" Canvas.Top="92.425" RadiusY="16.167" RadiusX="16.167" x:Name="Dugme"/>

</Canvas>

Yukarıdaki kod uygulamamızın görsel arayüzünü oluşturuyor. "Dugme" adındaki Rectangle nesnemizin MouseLeftButtonDown durumunda çalıştırılacak olan kodu birazdan yazacağız.

function Kopyala(sender)

{

    window.clipboardData.setData("text", sender.findName("Etiket").Text); 

}

Kodumuz içerisinde kullandığımız clipboardData sınıfı ile ilgili detaylara MSDN üzerinden ulaşabilirsiniz. setData metodu toplamda iki parametre alıyor; bunlardan ilki ClipBoard'a kopyalanacak olan verinin tipi, ikincisi ise kopyalanacak olan içeriğin ta kendisi. Aynı şekilde isterseniz ClipBoard'dan veri almak için getData metodunu da kullanabilirsiniz.

function Getir(sender)

{

    sender.findName("Etiket").Text = window.clipboardData.getData("text");   

}

getData metodu sadece ClipBoard'dan alacağı verinin tipini parametre olarak alarak geriye doğrudan elde ettiği veriyi döndürüyor.

Peki ya Silverlight 2.0 tarafında neler yapacağız?

Aslında çok farklı bir işlem yapmayacağız. Silverlight 2.0 Beta 2 tarafında da şimdilik JavaScript'in nimetlerinden faydalanmak zorundayız. O nedenle istemci tarafındaki VB veya C# kodumuz ile sayfanın JavaScript tarafındaki özelliklerine ulaşıp yine JavaScript tarafındaki metodlarını çalıştıracağız.

İlk olarak Silverlight 2.0 Beta 2 uygulamamızın arayüzünü aşağıdaki şekilde düzenleyelim.

<UserControl x:Class="SilverlightApplication14.Page"

   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

   Width="400" Height="300">

    <Grid x:Name="LayoutRoot" Background="White">

        <TextBox Height="40" HorizontalAlignment="Left" Margin="16,8,0,0" VerticalAlignment="Top" Width="120" Text="Herhangi bir Metin" TextWrapping="Wrap" x:Name="txtMetinKutusu"/>

        <Button Height="24" HorizontalAlignment="Left" Margin="16,72,0,0" VerticalAlignment="Top" Width="88" Content="Kopyala" x:Name="btnKopyala"/>

        <Button Height="24" HorizontalAlignment="Left" Margin="16,112,0,0" VerticalAlignment="Top" Width="88" Content="Yapıştır" x:Name="btnYapistir"/>

    </Grid>

</UserControl>

Bir TextBox ve iki Button'dan oluşan uygulamamızın ilk olarak kopyalama işlemini yapacak olan kodunu yazalım.

[VB]

    Private Sub btnKopyala_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnKopyala.Click

        Dim Clipboard As Browser.ScriptObject = Browser.HtmlPage.Window.GetProperty("clipboardData")

        Clipboard.Invoke("setData", "text", txtMetinKutusu.Text)

    End Sub

[C#]

        void btnKopyala_Click(object sender, RoutedEventArgs e)

        {

            System.Windows.Browser.ScriptObject Clipboard = (System.Windows.Browser.ScriptObject)System.Windows.Browser.HtmlPage.Window.GetProperty("clipboardData");

            Clipboard.Invoke("setData", "text", txtMetinKutusu.Text).ToString();

        }

Kodumuz içerisinde ilk olarak tarayıcının clipboardData sınıfını yakalamamız gerekiyor. Bunun için içerisinde olduğumuz tarayıcının (Browser) yine mevcut HTML sayfasının (HtmlPage) ait olduğu pencereyi (Window) yakalayıp onun üzerinden GetProperty ile clipboardData'yı alarak ScriptObject tipinde yarattığımız Clipboard değişkenimize aktarıyoruz. Sonrasında doğrudan değişkenimiz üzerinden Invoke diyerek aynı Reflection yapar gibi setData metodunu çalıştırıyoruz. Normal şartlarda JavaScript tarafına vereceğimiz parametreleri de yine Invoke metoduna aktarıyoruz. Böylece kopyalama işlemini tamamlamış olduk. Aynı şekilde ClipBoard'dan veri almayı da hemen getData ile yapabiliriz.

[VB]

    Private Sub btnYapistir_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnYapistir.Click

        Dim Clipboard As Browser.ScriptObject = Browser.HtmlPage.Window.GetProperty("clipboardData")

        txtMetinKutusu.Text = Clipboard.Invoke("getData", "text")

    End Sub

[C#]

        void btnYapistir_Click(object sender, RoutedEventArgs e)

        {

            System.Windows.Browser.ScriptObject Clipboard = (System.Windows.Browser.ScriptObject)System.Windows.Browser.HtmlPage.Window.GetProperty("clipboardData");

            txtMetinKutusu.Text = Clipboard.Invoke("getData", "text").ToString();

        }

Clipboard'dan veri alırken de aynı şekilde clipboardData nesnemizi yakaladıktan sonra bu sefer getData metodunu çalıştırıyoruz ve geriye dönen değeri de örneğimizde TextBox içerisine yazdırıyoruz.

C# kullananların haricen aşağıdaki şekilde uygulama başlangıcında Event-Handlar bağlantılarını yapmaları gerekecektir. VB kodlarındaki Handles keyword'ü ile bu işlem satır içinde yapılabildiği için ek olarak yazmak gerekmiyor.

[C#]

        public Page()

        {

            InitializeComponent();

            btnKopyala.Click += new RoutedEventHandler(btnKopyala_Click);

            btnYapistir.Click += new RoutedEventHandler(btnYapistir_Click);

        }

Böylece hem Silverlight 1.0 hem 2.0 içerisinde Clipboard'dan veri alarak veri aktarımı yapabildik. Tabi tüm bu işlemlerin sadece Internet Explorer içerisine olması üzücü. Diğer tarayıcılar için de geçerli olacak şekilde umarız ileride Silverlight Runtime içerisine standart işlevsellikler eklenir.

Hepinize kolay gelsin.

Sunday, June 22, 2008 12:19:37 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight | Silverlight 2.0  | 
 Saturday, June 21, 2008

Son yazgelistir.com Editör toplantımızda aldığımız kararlardan biri de yazgelistir.com ana sayfasında gözüken "Son Makaleler" kısmını biraz daha kullanışlı hale getirmekti. Bu çerçevede söz konusu bölüm için bir Silverlight uygulaması hazırlamaya karar verdik. Uygulamanın tasarımını sevgili Erbuğ Kaya yaptı. Animasyonlar ve programlama bana ait :) Süreç boyunca sunucu altyapısı ve RSS'lerin ASP.NET ile üretimi konusunda desteği için ek olarak sevgili Tamer Öz ve Işıl Orhanel'e de buradan teşekkürlerimi iletiyorum.

Bakalım beğenecek misiniz? www.yazgelistir.com

Ticari bir uygulama olmadığı için tabi ki sizlerle sitedeki projenin kaynak kodlarını da paylaşacağım. Son haline baktığımızda herhangi bir RSS'i JavaScript ve AJAX ile okuyarak Silverlight ile animasyonlar eşliğinde gösterebilen bir Silverlight uygulamasından bahsediyoruz. Yükleme süresince "Yükleniyor" animasyonunu da unutmadım :)

yazgelistir.com ana sayfadaki Silverlight kaynak kodları - 21062008_1.rar (19,51 KB)

Hepinize kolay gelsin....

Saturday, June 21, 2008 10:11:18 AM (GTB Standard Time, UTC+02:00)  #    Comments [10]   Silverlight  | 
 Monday, June 16, 2008

FireFox 3 yarına downloada sunuluyor. Kişisel olarak FireFox kullanmamın iki nedeni var; birincisi güzel eklentileri var, ikincisi sırayla açılmasını istediğim 20 üzerinde site varsa ve bunları tablarda açıp bir 3 dakika sonra makineme gelip tek tek inceleyeceksem :) FireFox kullanıyorum. Bunların haricinde pek FireFox açtığımı söylemem. Benim için yazılımların açılma süreleri çok önemlidir, IE şu an benim makinemde en hızlı açılan tarayıcı. (Makinemde Safari, FireFox yüklü)

Her neyse, FireFox 3 ile beraber Silverlight 1.0 uygulamaları maalesef açılmıyor. Aslında olay bu kadarla kalmıyor, örneğin benim kullanmakta olduğum neredeyse tüm eklentiler de FireFox 3 ile çalışmıyor. Bu arada güzel bir haber aldım, Silverlight 2.0 Beta 2 FireFox 3 uyumluymuş. Aslında uyumluluktan öte projelerde değişken tek şey Silverlight.js dosyası.

Eski uygulamaları nasıl upgrade ederiz?

Çok basit, Silverlight 2.0 Beta 2 SDK ile beraber gelen Silverlight.js dosyasını Silverlight 1.0 projelerinizde de kullanabilirsiniz. Böylece sorun çözülmüş olacaktır. Unutmayın projenizi Silverlight 2.0'a geçirmiyorsunuz sadece Silverlight.js dosyasını değiştiriyorsunuz.

Hepinize kolay gelsin.

Monday, June 16, 2008 2:36:10 PM (GTB Standard Time, UTC+02:00)  #    Comments [2]   Silverlight  | 
 Friday, June 13, 2008

Yaklaşık 2 saat kadar önce last.fm üyesi oldum :) Siteyi çok duymuştum ama ilgilenecek fırsat olmamıştı. Gerçekten çok başarılı bir altyapısı var. Siteye üye olduktan sonra bilgisayarınıza ufak bir program yüklüyorsunuz ve ister Windows Media Player ile ister Winamp ile çaldığınız tüm şarkılar otomatik olarak sitede yerini alıyor. Tabi bu veri yığınından yola çıkarak site bir sürü ek işlevsellik sunuyor. Sizinle aynı şarkıları dinleyenlerden tutun en çok dinlediğiniz şarkıların listelerini otomatik olarak arkadaşlarınızla paylaşmaya kadar bir sürü seçenek mevcut.

Tabi siteye üye olunca hemen dinlediğim şarkıları blog okuyucularım ile de paylaşmaya karar verdim ve daha önce sizlerle kaynak kodunu paylaştığım Twitter Silverlight Widget'a el atarak Last.Fm uyumlu hale getirdim. Yeni uygulamayı hazırlarkenki en büyük sorun Last.Fm'in Cross-Domain'e açık bir JSON verisi sağlamaması olsu. Bu nedenle ASP.NET ile sunucu taraflı proxy hazırlamam gerekti. Proxy Last.FM üzerinden XML veriyi alarak Silverlight tarafına JSON formatında aktarıyor. Local proxy kullanıldığı için Widget'ın veriyi yüklemesi normale kıyasla daha uzun sürüyor, o nedenle bir de "Loading" animasyonu ekledim.

Artık dinlediğim şarkıları blogun yan barından izleyebilirsiniz :) Tabi daha da önemlisi hazırladığım bu uygulamayı kaynak kodları ile aşağıdaki linkten indirebilirsiniz ;)

Last.FM Silverlight Widget Kaynak Kodları - 13062008_1.rar (9,29 KB)

Hepinize iyi eğlenceler ;)

Friday, June 13, 2008 1:26:14 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]   Silverlight  | 
 Tuesday, June 03, 2008

Bugün Edirne M.P. Anadolu Ticaret Meslek ve  Ticaret Meslek Lisesi'nin organizasyonunu üstlendiği Edirne'deki meslek liseleri'nin yer aldığı bir seminer serisindeydim. Semineri Trakya Birlik Genel Müdürlüğü Konferans Salonu'nda yaptık. Salon şu ana kadar gördüğüm en ilginç ve güzel salonlardan biriydi. Balkonuyla beraber iki katlı seminer salonunda alt kattaki ve üst kattaki dinleyiciler için ayrı projeksiyon sistemlerinin bulunması dinleyici için çok ergonomik bir ortam sağlıyor.

Edirne'ye gidip Selimiye Cami fotoğrafı çekmemek olmaz :)
Edirne'ye gidip Selimiye Cami fotoğrafı çekmemek olmaz :)

Sabah 09.00 gibi seminerlere başladığımız için bir gün önceden Edirne'ye gitmek durumunda kaldım. Dün akşam 20.00 gibi Edirne'deydim, Meriç kenarında bir yemek yeme şansına sahip olmak muhteşemdi. Aslında otobüsle iki buçuk saat gibi kısa bir sürede gidilebilen Edirne'yi (kendi adıma konuşayım) sanki biraz farkında değiliz veya unutmuşuz gibime geldi. Rahatlıkla günübirlik gidip gezilebilecek bir şehir.

Selimiye Kubbesi İç Motifler
Selimiye Kubbesi İç Motifler

09.00'da başladıktan sonra öğleden sonra 18.00'a kadar WPF, Silverlight ,AJAX ve LINQ konularına değindik. Bu benim ikinci Meslek Lisesi deneyimim oldu. Lise çağındaki gençlere hitap edebilmek adına daha çok çalışmam gerektiğini açıkça itiraf edebilirim :) Yine de aldığım tepkilere göre faydalı bir gün geçirdik, parıldayan genç gözler gördüm.

Edirne, MP (Anadolu) Ticaret Meslek Lisesi, WPF, Silverlight, AJAX, LINQ Seminerleri
Edirne, MP (Anadolu) Ticaret Meslek Lisesi, WPF, Silverlight, AJAX, LINQ Seminerleri

Aktivite boyunca Edirne TV :) de oradaydı. Hatta sitelerinde de aktiviteyi haber yyapmışlar. Özellikle sitedeki fotoğrafta biraz çok agresif çıkmışım :) Zaten herkes sahnede rahat durmadığım için fotoğraf çekememekten şikayetçi :)

Organizasyondaki emeklerinden dolayı sevgili Serdar Daloğlu'na , Aziz Bayıroğlu ve Oğuzcan Şahin'e burada bin bir teşekkür ediyorum. Beni muhteşem bir şekilde ağırlamanın yanı sıra organizasyondaki her tür detayı çok başarılı bir şekilde yürüttüler.

Tuesday, June 03, 2008 10:45:51 PM (GTB Standard Time, UTC+02:00)  #    Comments [3]   AJAX | ASP.NET | ASP.NET 3.5 | LINQ | Silverlight | WPF  | 
 Sunday, June 01, 2008

Haziran'ın bu ilk gününde yazı karşılarken size yeni bir sürprizim var :)

T-Shirt ve kravatın ardında bir sürü mail aldım. T-Shirt'ü Tish-O'ya paslayarak üretim sorununu halletmiş olduk. Fakat kravat konusunda herhangi bir çözüm maalesef söz konusu değil. Diğer yandan aslında çok daha kolay üretebileceğimiz bir şey var :) Özellikle önümüzde yazın da geldiğini düşünürsek bir Silverlight şapkası süper olur diye düşündüm.

Silverlight Şapka :) ve tatil sevdası!
Silverlight Şapka :) ve tatil sevdası!

Tasarım anlamında çok bir emek yok ortada :) Rahatlıkla sizin de yapabileceğiniz bir uygulama. Silverlight logosunu aşağıdaki linkten indiriyorsunuz ve doğrudan en yakın "dijital baskı merkezi"ne doğru ufak bir yolculuk yapıyorsunuz. Neredeyse hepsi şapka üzerine baskı alabiliyor. Şapkanın yıkanma durumu da t-shirt'e kıyasla daha nadir olduğu için herhangi bir baskının pek sorunu olmayacaktır.

Silverlight Logo - 01062008_2.jpg (99,43 KB)

İlk şapkalıya hediye var :)

Hadi bakalım ilk önce kimi göreceğim etrafta bu şapka ile :) Bu şapkayı takmış olarak gördüğüm ilk arkadaşı buradan sizlere de fotoğrafı ile duyurmanın yanı sıra söz konusu arkadaş benden bir de güzel hediye alacak :) Sürpriz!

İyi şanslar...

Sunday, June 01, 2008 2:10:21 PM (GTB Standard Time, UTC+02:00)  #    Comments [10]   Silverlight | Silverlight 2.0  | 
 Tuesday, May 27, 2008

Bugün ufak bir maceraya atılarak sanal makineye bir Ubuntu kopyası yükledim :) Yanlış okumadınız bir Linux kopyasından bahsediyorum. Aslında bu ilk değil, bundan önce belki yüzlerde defa Linux kurulumları yaptım veya inceledim. Ama bu sefer amacım biraz farklıydı.

Silverlight'ın Linux üzerinde çalışacak olan sürümünün adının Moonlight olduğundan daha önce bahsetmiştim. Söz konusu proje Novell sponsorluğunda ilerliyor ve bugünlerde hiç de yadsınamayacak bir seviyeye geldi. Artık Moonlight ile Silverlight 1.0 projeleri rahatlıkla Linux üzerinde çalıştırılabilir. Ufak bir sorun var :) maalesef daha video ve audio desteği yok. Yani aslında Silverlight 1.0'ın en kuvvetli olduğu nokta eksik. Umarım zamanla video ve audio desteği de Linux platformuna taşınacaktır. Diğer yandan Silverlight 2.0 desteği de Mono-Project sayesinde hızlıca karşımıza çıkıyor olacak. Mono-Project sayesinde zaten uzun süredir .NET uygulamaları Linux üzerinde bazı eksiklerle olsa da çalıştırılabiliyordu. Bu altyapının Silverlight tarafına taşınması zor olmayacaktır.

Ben Linux için olan Silverlight Plug-In'i ancak FireFox 3 üzerine kurabildim. Fakat malum FireFox 3 daha Beta aşamasında olduğu için ekstra sorunlar da çıkabiliyor.

İlk adımda yüklemeyi bilgisayarımıza indirelim.
İlk adımda yüklemeyi bilgisayarımıza indirelim.

Moonlight'ın http://www.go-mono.com/moonlight/ adresinden bilgisayarınıza uygun yüklemesini seçtikten sonra karşınıza yukarıdaki gibi FireFox içerisinde bir uyarı mesajı geliyor. Onaylayarak ilerliyoruz ve yükleme paketi bilgisayarımıza iniyor.

Yüklemeyi başlatalım.
Yüklemeyi başlatalım.

İnternette yükleme paketi bilgisayara indikten sonra pakete güvendiğimizi de Linux'e belirtirsek bir sonraki adımda hemen yükleme gerçekleşecektir.

Linux üzerinde Silverlight iş başında.
Linux üzerinde Silverlight iş başında.

Yükleme tamamlandığında artık Silverlight ile hazırlanmış web sitelerini rahatlıkla Linux üzerinde de kullanabiliyoruz. Umarım Novell'in istemci tarafında Linux'ten desteğini çekmiş olması Moonlight'ın geleceğini etkilemez.

Tuesday, May 27, 2008 7:25:53 AM (GTB Standard Time, UTC+02:00)  #    Comments [2]   Silverlight  | 
 Monday, May 26, 2008

Super SilverMan T-Shirt tasarımımdan sonra tekstil sektörüne gireceğime dair dedikoduların yanı sıra :) ciddi tavsiyeler bile aldım. T-Shirt gerçekten çok başarılı bir ürün oldu :) diğer yandan maalesef her ortamda T-Shirt ile gezmek mümkün olmuyor. "Gömlek bastıralım?" gibi bir fikrin biraz daha ötesine giderek "kravat" konseptini uygun gördüm. Tasarım çalışmalarını da tamamladıktan sonra uygun bir şekilde kravat üretimine geçtik :) (Dalga geçmiyorum).

Dünyada Tek : Silverlight Kravat
Dünyada Tek : Silverlight Kravat

Kravatı bugüne kadar birkaç aktivitede kullandım ve deneme sürüşleri sonrasında herhangi bir bug'ı olmadığını söyleyebilirim. :) Tasarım yine bana ait ;) Maalesef şimdilik toplu üretim gibi bir şansımız yok, dehşet pahalıya mal oluyor (tamamen dikiş). Diğer yandan tüm dünyada sadece bende böyle bir kravatın bulunuyor olması de ayrı bir duygu :)

Peki ben bu yazıyı neden yazdım? :) "Düşmanlar çatlasın" diye değil tabi ki :P Silverlight heyecanımı blog okuyucularımla paylaşmaktı amacım. Umarım gün gelir Silverlight aktivitelerinde T-Shirt'ler, kravatlar kepçeyle dağıtılır :)

"Daha çok Silverlight'lı günler dileği ile..."

Monday, May 26, 2008 12:26:53 PM (GTB Standard Time, UTC+02:00)  #    Comments [13]   Silverlight | Silverlight 2.0  | 
 Sunday, May 25, 2008

Özellikle beni microbloğum twitter.com üzerinden takip edenlerin farkında olacağı üzere hafta sonunu Ankara'da geçirdim. Cumartesi gece yarısı yola çıkarak sabahına Ankara'ya vardım ve sabah 10.00 gibi EMO (Elektrik Mühendisleri Odası) Ankara şubesinde eğitim serimize başladık. WPF, AJAX, Silverlight ve LINQ konularına değindiğimiz eğitimi Pazar akşamı 18.00'da bitirdik.

EMO Eğitim Serisi başlangıcından bir kare...
EMO Eğitim Serisi başlangıcından bir kare...

Eğitime katılan arkadaşlara özellikle Silverlight örneğindeki kodları blogumdan paylaşacağım konusunda söz vermiştim. Aşağıdan gerekli dosyaları bilgisayarınıza indirebilirsiniz.

Örnek Kodlar - 25052008_2.rar (8,57 KB)

Eğitime katılan ve kocaman bir hafta sonu boyunca yeni teknolojiye olan ilgilerini ve konsantrasyonlarını en yüksek seviyede tutan tüm arkadaşlara çok teşekkür ediyorum (Özellikle ikinci gün sınıfa pasta alan kamera fobili arkadaşımıza ek teşekkürler :))

INETA ve EMO işbirliğinizde düzenlediğimiz bu eğitime katkısından dolayı ODTÜ Bilgisayar Mühendisliği Araştırma Görevlisi Serdar Çiftçi'ye, eğitimlere laboratuar ortamı sağlamakla beraber gösterdikleri sıcak misafirperverlik için de tüm EMO ekibine teşekkürler.

Sunday, May 25, 2008 7:16:24 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   AJAX | Expression Blend | Expression Design | Expression Encoder | LINQ | Silverlight | Silverlight 2.0 | WPF  | 
 Friday, May 23, 2008

Özellikle "developer" tabanlı olanlar için hazırlanan bir uygulamanın görsel arayüzünü süslemek hem bir "çin işkencesi" oluyor hem de ortaya zaten güzel bir ürün de çıkmıyor. Bu gibi durumlarda eğer projelerinizde bir tasarımcı ile çalışma şansınız da yoksa en azından internetteki hazır renk şemalarından faydalanabilir, birbiri ile uyumlu renkler üreten web sitelerinden faydalanabilirsiniz.

Veya daha da pratik bir yol var, bir yerlerde beğendiğiniz renkleri "ödünç" alabilirsiniz :) Peki nerden? Hemen önünüzde Windows Vista duruyor, tasarımı da hiç fena sayılmaz :)

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="640" Height="375.082"

  Background="White"

  x:Name="Page">

  <Rectangle Width="572.131" Height="78.885" Canvas.Left="31.148" Canvas.Top="8" Stroke="#FF000000">

    <Rectangle.Fill>

      <LinearGradientBrush StartPoint="0.5,1" EndPoint="0.5,0">

        <LinearGradientBrush.GradientStops>

          <GradientStop Color="#FF000000" Offset="0"/>

          <GradientStop Color="#FF9AC6CF" Offset="0.0494537"/>

          <GradientStop Color="#FF54A1AA" Offset="0.0714264"/>

          <GradientStop Color="#FF146478" Offset="0.5"/>

          <GradientStop Color="#FF408C9A" Offset="0.505493"/>

          <GradientStop Color="#FF87B6C0" Offset="0.928574"/>

          <GradientStop Color="#FFBCCDD7" Offset="0.950546"/>

          <GradientStop Color="#FFAEBFCA" Offset="0.983521"/>

          <GradientStop Color="#FFAEBFCA" Offset="1"/>

        </LinearGradientBrush.GradientStops>

      </LinearGradientBrush>

    </Rectangle.Fill>

  </Rectangle>

  <Rectangle Width="572.131" Height="78.885" Canvas.Left="31.148" Canvas.Top="99.784" Stroke="#FF000000">

    <Rectangle.Fill>

      <LinearGradientBrush StartPoint="0.5,1" EndPoint="0.5,0">

        <LinearGradientBrush.GradientStops>

          <GradientStop Color="#FF000104" Offset="0"/>

          <GradientStop Color="#FF02070B" Offset="0.494507"/>

          <GradientStop Color="#FF33373D" Offset="0.494507"/>

          <GradientStop Color="#FF757A7C" Offset="0.917587"/>

          <GradientStop Color="#FFA0A1A3" Offset="0.956039"/>

          <GradientStop Color="#FF48494A" Offset="1"/>

        </LinearGradientBrush.GradientStops>

      </LinearGradientBrush>

    </Rectangle.Fill>

  </Rectangle>

  <Rectangle Width="572.131" Height="78.885" Canvas.Left="31.148" Canvas.Top="189.929" Stroke="#FF000000">

    <Rectangle.Fill>

      <LinearGradientBrush StartPoint="0.5,1" EndPoint="0.5,0">

        <LinearGradientBrush.GradientStops>

          <GradientStop Color="#FFD4D4D4" Offset="0"/>

          <GradientStop Color="#FFF0F2F4" Offset="0.0659332"/>

          <GradientStop Color="#FFF6F5F8" Offset="0.598907"/>

          <GradientStop Color="#FFFFFFFF" Offset="0.609894"/>

          <GradientStop Color="#FFFFFFFF" Offset="0.978027"/>

          <GradientStop Color="#FFC7C7C7" Offset="0.994507"/>

          <GradientStop Color="#FFC7C7C7" Offset="1"/>

        </LinearGradientBrush.GradientStops>

      </LinearGradientBrush>

    </Rectangle.Fill>

  </Rectangle>

  <Rectangle Width="572.131" Height="78.885" Canvas.Left="31.148" Canvas.Top="281.713" Stroke="#FF000000">

    <Rectangle.Fill>

      <LinearGradientBrush StartPoint="0.5,1" EndPoint="0.5,0">

        <LinearGradientBrush.GradientStops>

          <GradientStop Color="#FFDFE4F4" Offset="0"/>

          <GradientStop Color="#FFB8BCC2" Offset="0.0439606"/>

          <GradientStop Color="#FFE0E6F4" Offset="0.0769196"/>

          <GradientStop Color="#FFD4DBE8" Offset="0.648346"/>

          <GradientStop Color="#FFE8ECF4" Offset="0.714279"/>

          <GradientStop Color="#FFFFFFFF" Offset="1"/>

        </LinearGradientBrush.GradientStops>

      </LinearGradientBrush>

    </Rectangle.Fill>

  </Rectangle>

</Canvas>

İşte size Vista'daki gradientların Silverlight veya WPF ile kullanılabilecek XAML kodları. Yukarıdaki örnek Silverlight 1.0 uygulamasında dört farklı gradientı gösterebilmek için dört adet dikdörtgen kullandım.

Vista Gradientları
Vista Gradientları

Hepinize kolay gelsin.

Friday, May 23, 2008 7:46:47 AM (GTB Standard Time, UTC+02:00)  #    Comments [3]   Silverlight | Silverlight 2.0 | WPF  | 
 Monday, May 19, 2008

İstemci taraflı programlama sistemleri AJAX ile karşımıza çıkmıştı, Silverlight ile beraber ise artık istemci taraflı programlama neredeyse "hayatımız" oluyor. Bu durumda karşılaştığımız en büyük sorun "Cross-Domain-Request" sınırlaması. Güvenlik nedenleriyle bir alan adından bir başka alan adına bağlanarak veri talebinde bulunamıyoruz. Eğer karşıdaki alan adının ihtiva ettiği siteye admin erişiminiz varsa tabi ki farklı teknikler kullanarak bu sorunu çözebilirsiniz. Bu konuda Silverlight 2.0 ile beraber clientaccesspolicy.xml dosyası geliyor.

Peki ya karşı siteye admin erişimimiz yoksa?

İşte o zaman kendi sitemizde sunucu taraflı bir proxy kullanmamız şart. ASP.NET ile sunucu tarafından istediğimiz siteye bağlanarak istediğimiz dosyası alabiliriz. Bu durumda bir ASPX sayfası yapsak bizim yerimize gidip kendisine hedef gösterdiğimiz adresten gerekli dosyayı alıp istemci tarafına, yani bize iletse hoş olmaz mı?

        Dim Talep As New Net.WebClient

        Dim GelenVeri As Byte() = Talep.DownloadData(Request.QueryString("Dosya"))

        Response.ContentType = Talep.ResponseHeaders("Content-type").ToString

        Response.OutputStream.Write(GelenVeri, 0, GelenVeri.GetLength(0))

        Response.OutputStream.Close()

        Response.End()

Yukarıdaki kod içerisinde doğrudan bir WebClient yaratarak farklı bir adresten veri indirme işlemi yapıyoruz. Kod içerisindeki en önemli nokta indirmek istediğimiz hedef veri ile istemciye göndereceğimiz verinin ContentType değerlerinin aynı olması gerektiği. Bunun için Response.ContentType'ı WebClient üzerinden aldığımız Content-Type header bilgisi ile eşleştiriyoruz. Böylece proxy'miz gerektiğinde video veya resim dosyalarını da rahatlıkla indirerek bize ulaştırabilir.

Performans?

Yukarıdaki örneğimiz çok basit bir yapıya sahip. Dosyayı sunucuya indirerek doğrudan istemciye gönderiyor. Yüksek sayıda istek oluşan projelerde veya büyük dosyalar indirecek olan uygulamalarında farklı performans senaryoları uygulamak gerekecektir. Aslında baktığımızda bu yapının herhangi bir Proxy programlamaktan pek farkı yok. Aklıma ilk aşamada gelen dikkat edilmesi gereken noktalar şöyle oldu;

  • Büyük dosya indirirken istemcinin hala bağlı olup olmadığını Response.IsClientConnected ile kontrol etmek gerekir.
  • Büyük dosya indirme işlemlerinde bufferlamak ve kısım kısım indirerek istemciye göndermek daha mantıklı olabilir. Özellikle video dosyalarında.
  • Kesinlikle bu dosyaya request yollayanın headerını kontrol etmek lazım. Kötü niyetli biri bu proxy'yi sadece sunucunun bant genişliğini harcamak için kullanabilir veya gereksiz yere sunucuyu yorabilir.

Hepinize kolay gelsin.

Monday, May 19, 2008 10:47:08 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   AJAX | Silverlight | Silverlight 2.0  | 
 Friday, May 16, 2008

Uzun süredir "Yahu nedir ki bu twitter??" şeklinde düşünerek takip ediyordum olan biteni. Bugün biraz zaman bulunca twitter.com üzerinden kendime yeni bir hesap açmaya karar verdim. Hesabımı açmamla beraber cep telefonuma twitter hesabımı güncelleyebileceğim uygulamaları da yüklemem bir an bile sürmedi :) Peki neden?

Genelde seminerlerde ve farklı etkinliklerde karşılaştığım sorunlardan biri de o etkinlikten insanların anında haberdar olamıyor olması. Hatta bazen "Biz de oradaydık o gün! Tüh görüşemedik" veya "Bilsek gelirdik, yakındaydık aslında" gibi yorumlar hep oluyor. İşte twitter bunun çözümü. Maksimum 140 karakterlik mesajlar ile twitter hesabınıza o an ne yaptığınızı yazıyorsunuz, böylece arkadaşlarınız sizi takip edebiliyor. Facebook'tan alışkın olduğumuz "Status"ün epeyce gelişmiş hali diyebiliriz. Hemen twitter.com adresinden kendinize bir hesap edinebilirsiniz. Sonrasında da takip etmek istediğiniz kişilerin site üzerinden seçerek hesabınıza ekleyebiliyorsunuz.

Eğer sisteme cep telefonunuzu da tanıtırsanız, özel olarak seçmiş olduğunuz kişilerin twitter hesaplarında bir değişiklik olduğunda size de bir sms geliyor. Hatta doğrudan sms ile kendi hesabınızı da değiştirebiliyorsunuz. Ben şahsen GPRS üzerinden çalışan harici bir uygulamayı şimdilik tercih ediyorum.

Anlayacağınız artık beni daha yakından takip etmek isteyenler bunu twitter ile yapabilecekler :) http://twitter.com/daronyondem adresinden beni kendi profilinize ekleyebilirsiniz. Sadece seminer ve aktiviteleri değil "Taksim Bambideyim" şeklinde mesajları da yazmayı düşünüyorum :) belki beraber birer ıslak hamburger yeriz :)

twitter Silverlight uygulaması yollarında...

Twitter'daki son 5 postun blogumda da gözükmesi için twitter'ın kendi sitesindeki araçlara baktığımda HTML ve Flash içerikli uygulamalar gördüm. Özellikle HTML ve JavaScript ile yapılana bakınca aslında istemciye JSON formatında veri gönderdiğini görerek biraz güldüm. Çünkü bu veri kaynağı ile kolaylıkla bir Silverlight uygulaması yapılabilirdi. Ve yaptım :) Hemen sitenin yan tarafında çalışır halini görebilirsiniz. Tabi ki uygulamanın açık kaynak kodlarını da sizlerle paylaşıyorum.

Kolay gelsin ;)

twitter.com Silverlight uygulaması - 16052008_1.rar (6,69 KB)

Friday, May 16, 2008 4:13:17 PM (GTB Standard Time, UTC+02:00)  #    Comments [5]   Silverlight  | 
 Tuesday, May 13, 2008

Bugün Konya, Selçuk Üniversitesin'deydim. Sabah 10.00'da başlayarak 19.00'a kadar WPF, AJAX, Silverlight ve LINQ konularını inceleyen bir seminer ile güzel bir gün geçirdik. Umarım "yol yorgunluğum" aktiviteye çok yansımamıştır. Bir gün öncesinde bildiğiniz üzere Çanakkale 18 Mart Üniversitesin'deydim ve akşam 23.00'da Çanakkale'den mecburen otobüs ile İstanbul'a döndüm. O saatte uçak vs yok. Sabaha karşı 05.00'de İstanbul'daydım ve 07.00 uçağı ile Konya'ya uçtum :) Durum böyle olunca hem uykusuzluk (buna alışkınım aslında) hem de sadece uçakta verilen abuk sandwich nedeniyle açlık (işte buna dayanamam!) nedeniyle performansımdan şüphe etmediğimi söylesem yalan olur.

Konya, Selçuk Üniversitesi
Konya, Selçuk Üniversitesi

Aktivitede katkılarından dolayı sevgili MSP, Okan Öztürkmenoğlu'na çok teşekkür ediyorum. Bereketine hayran kaldığım etli ekmek desteği ile tüm günü ayakta geçirebilmeme büyük katkıları oldu :)

Tekrar görüşmek üzere ;)

Tuesday, May 13, 2008 6:16:49 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   AJAX | LINQ | Seminer | Silverlight | Silverlight 2.0 | WPF  | 
 Monday, May 12, 2008

Bugün Çanakkale 18 Mart Üniversitesi'ndeydim. WPF ve Silverlight konulu toplam 6 saatlik bir seminerin sonunda ilk defa bir üniversitenin öğrencilerinden bu kadar çok iltifat duydum :) Hepiniz çok sağ olun arkadaşlar. Benim için de çok zevkli bir gündü, böyle ilgili bir kitleyle birşeyler paylaşabiliyor olmak gerçekten muhteşem. Özellikle bir arkadaşın "Uzaktan küçük gözüküyorsunuz hocam" yorumunu sanırım hayatım boyunca unutmayacağım :)

Çanakkale 18 Mart Üniversitesi, WPF ve Silverlight Semineri
Çanakkale 18 Mart Üniversitesi, WPF ve Silverlight Semineri

Organizasyonla ilgili özellikle sevgili Erçin Yontar'a çok teşekkür ediyorum. Çanakkale zaten bana yabancı olmayan bir şehir :) yine de sevgili Erçin iskeleden alıp iskeleye kadar yolculadı beni :) Herşey için çok çok teşekkürler arkadaşlar, tekrar görüşmek dileği ile ;)

Monday, May 12, 2008 6:21:07 AM (GTB Standard Time, UTC+02:00)  #    Comments [1]   Seminer | Silverlight | Silverlight 2.0 | WPF  | 
 Sunday, May 04, 2008

Bugün INETA ve BilgeAdam işbirliğinde "Silverlight" eğitiminin ikinci gününü zevkli bir şekilde sonlandırdık. Eğitim yanlışlıkla ".NET altyapılı" diye duyurulunca tüm katılımcıların "Silverlight 2.0" bekleyerek geldiklerin için eğitimin bu ikinci gününde Silverlight ile Veri İşlemleri kısmını Silverlight 2.0 ile yaptık. Sanırım bundan sonra yine katılımcıların istekleri çerçevesinde sürekli Silverlight 2.0 ile beraber devam ediyor olacağız. Bu kapsamda aslında Türkiye'deki ilk Silverlight 2.0 eğitimini yapıyoruz :)

INETA ve BilgeAdam işbirliğinde Silverlight 2.0 Eğitimi
INETA ve BilgeAdam işbirliğinde Silverlight 2.0 Eğitimi

Tabi konu Silverlight 2.0 olunca ve arkada .NET olunca her zamanki gibi "biz (VB) ve siz (C#)"li sohbetler yapar olduk. Özellikle Silverlight 2.0 ile istemci tarafında XML ile uğraşırken VB'nin XLINQ ile inline XML kolaylıklarının yadsınamayacak olduğunu sanırım kanıtladım :)

Gün boyunca yaptığımız örneklere ait kaynak kodlarını aşağıdaki adresten indirebilirsiniz. Sonuncusu çalışmıyor :) zamanımız yetmedi bitirmeye.

Eğitim Uygulamaları Proje Kodları - 04052008_2.rar (2,6 MB)

Katılan herkese çok teşekkürler.

Sunday, May 04, 2008 7:45:25 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Eğitimler | Silverlight | Silverlight 2.0  | 
 Tuesday, April 29, 2008

Silverlight çılgınlığı aldı başını gidiyor :) Spike Xavier ve Dan Wahlin tarafından hazırlanmış Silverlight şarkısını aşağıdaki adresten bilgisayarınıza indirebilirsiniz.

http://www.xmlforasp.net/CodeBank/Download/Blog/Music/Silverlight.mp3

Şarkının sözleri şu şekilde;

feed this need for quality
vector based delivery
we write it in xaml, we roll like a caml
we love it like baml
3D dioramma

lightweight subset of the CLR
down the wire with fluidity
you won't believe it, if you can conceive it
your users retrieve it
and their minds receive it.

it's Silverlight
it's strong and tight
they got it right
try it tonight

take the web to a brand new height

:) Bizde de var mı böyle yetenekli gençler? ;)

Tuesday, April 29, 2008 11:48:38 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight | Silverlight 2.0  | 
 Saturday, April 26, 2008

Dün İstanbul Aydın Üniversitesi'nde "Yazılım Dünyasına Yeni Teknoljiler:WPF ve Silverlight" konulu mini bir seminer verdim. Bu tarz mini seminerler maalesef ayrıldığımız içimde bir burukluk bırakıyor. İstediğim herşeyi anlatamamış olmak gerçekten çok üzücü. Yine de seminer sonunda çoğu dinleyiciden çok olumlu tepkiler aldım.

İstanbul Aydın Üniversitesi, Silverlight ve WPF
İstanbul Aydın Üniversitesi, Silverlight ve WPF

Katılan arkadaşlara ve özellikle organizasyondaki emeği için sevgili Halit Kara'ya çok teşekkür ediyorum. Umarım yakında daha uzun süreli bir aktivite ile tekrar görüşürüz.

Saturday, April 26, 2008 11:08:01 AM (GTB Standard Time, UTC+02:00)  #    Comments [1]   Silverlight | WPF  | 
 Friday, April 18, 2008

Dün Şanlıurfa Harran Üniversitesi'nde Silverlight seminerindeydim. Gerçekten muhteşem iki gün geçirdim Şanlıurfa'da. Sanırım hayatımda bu kadar sıcak kanlı insanlar görmemişimdir. Gerçekten herkes bir "turist" olarak bana çok yardımcı oldu. İlginç bir hava var şehirde, herkes mutlu, stressiz bir yaşam hakim gibi. Belki de sadece bana öyle yansıdı :)

Bu sefer fırsat bularak yarım gün kadar Urfa'yı gezme şansım da oldu. BalıklıGöl'den tutun Konak'lara kadar epey gezdim. Şansıma hava da çok güzeldi, serin bir esinti ve güneş ışığı eşliğinde Urfa'lıların deyimine göre en iyi vaktini yakalamışım şehrin. Dönüşte İSOT ve Nar Ekşisi almayı da tabi ki unutmadım :)

Silverlight Semineri, Harran Üniversitesi, Şanlıurfa
Silverlight Semineri, Harran Üniversitesi, Şanlıurfa

Harran Üniversitesi'ndeki gençler gerçekten çok ilgiliydi Silverlight konusunda. Özellikle seminer sonunda PHP ile Silverlight kullanma konusunda hevesi gözünden okunan arkadaşlar vardı :) Silverlight örnekleri içerisinde gösterdiğim ASP.NET AJAX özellikleri de çoğunun ilgisini çekti. Sanırım mini bir MS rüzgarı estirdim :) Her zamanki gibi tabi ki zaman yine yetmedi herşeyi anlatmaya.

Buradan özellikle sevgili Bilgisayar Bölümü Bölüm Başkanı Yrd. Doç. Dr. Nurettin Beşli'ye ve Bilişim Kulübü Başkanı Celal Savur kardeşime çok teşekkür etmek istiyorum. Muhteşem bir organizasyondu.

Seminerde yaptığımız örneği ve sunumumu aşağıdan indirebilirsiniz.

Seminer Örnek Kodları ve Sunum - 18042008_1.rar (1,71 MB)

Friday, April 18, 2008 9:24:37 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Wednesday, April 16, 2008

NETRON ve INETA işbirliğinde yaptığımız 3 günlük Silverlight eğitimini bu sefer de BilgeAdam ve INETA işbirliği ile tekrar ediyoruz. Özellikle "tekrar" kelimesini kullanıyorum ki aynı arkadaşlar gelmesinler :) Yanlış anlamayın "başımın üstünde" yeriniz var ama gerek yok :) Aynı konular, sıkılırsınız.

Peki bu eğitime seçilecek şanslı kişilerden biri olmak için ne yapmamız gerekiyor? www.yazilimuzmani.com adresine giderek "Seminerler" kısmında söz konusu aktiviteye kayıt olmalısınız. Haber vermedi demeyin :)

Hepinize iyi şanslar ;)

Wednesday, April 16, 2008 10:56:40 PM (GTB Standard Time, UTC+02:00)  #    Comments [3]   Silverlight  | 
 Tuesday, April 15, 2008

Bugün Ankara, Gazi Üniversitesi'nde 4 saatlik bir Silverlight seminerim vardı. Seminerin başından sonuna kadar salonda kalarak beni 4 saat boyunca dinlemek gerçekten Silverlight'a olan ilginin ciddi bir kanıtıdır sanırım. Buradan tüm katılımcılara, Bilgoloji grubuna ve sevgili Veysel Uğur KIZMAZ'a organizasyondaki emekleri için çok teşekkür ediyorum.

Silverlight Semineri, Gazi Üniversitesi, Ankara
Silverlight Semineri, Gazi Üniversitesi, Ankara

Seminer boyunca yaptığımız örneği ve kullandığım sunumu aşağıdaki adresten indirebilirsiniz.

Örnek Uygulamalar ve Sunum - 15042008_1.rar (2,98 MB)

Tuesday, April 15, 2008 12:22:13 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Saturday, April 12, 2008

Öğrencilerimle gurur duyuyorum :) "Öğrencilerim" dedikçe kendimi biraz yaşlandırdığımın farkındayım ama gerçekten çok gurur verici bir tablo söz konusu. Karşınızda yepyeni bir Silverlight 1.0 oyunu daha! Bu sefer oyunumuz Windows ile beraber gelen alıştığımız "Mayın Tarlası". Sevgili Melih Kemal Tekin tarafından hazırlanan oyunu aşağıdaki adresten oynayabilirsiniz.

http://www.softencrypt.com/mines/

Ben olsam oyunun kaynak kodlarını da incelerdim :)

Teşekkürler Melih...

Saturday, April 12, 2008 1:54:40 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 

SharePoint Server artık sadece bir şirket içi iletişim ve paylaşım alanı olmanın ötesinde internete açık web sitelerinin altyapısında da rahatlıkla kullanılıyor. Her iki ihtimalde de SharePoint üzerinde Silverlight kullanımı farklı olanaklar tanıyabilir. Örneğin şirket için canlı video yayını dağıtımlarınızı SharePoint ve Media Services ile Silverlight aracılığı ile kullanıcılara yansıtabilir veya şirket içi eğitim videolarınızı Silverlight ile SharePoint üzerine yerleştirebilirsiniz. Tabi ki SharePoint'in web servislerine bağalanarak AJAX aracılığı SharePoint'in dahili verisine bağlanarak çok daha farklı senaryolar da gerçeleştirilebilir.

Peki SharePoint içerisinde Silverlight'ı nasıl kullanacağız?

SharePoint içerisinde Silverlight kullanımı ile ilgili yayınlanmış olan bir paket var. Bu paketi sunucuya yüklemenizle beraber artık SharePoint üzerinde size özel bir WebPart'ınız oluyor. Bu WebPart'ı herhangi bir WebPartZone'a ekleyerek istediğiniz Silverlight uygulamasının söz konusu alanda çalışmasını sağlayabiliyorsunuz. Özetle, aslında WebPart'ımız Silverlight uygulamalarımız için bir HostElement görevi görüyor.

Software & Services BluePrints çerçevesinde yayınlanan paketin adı Silverlight BluePrint for SharePoint şeklinde. Aşağıdaki adresten söz konusu paketleri ve örnekleri indirerek sunucunuza kurabilirsiniz.

http://www.ssblueprints.net/sharepoint/

Maalesef bu adresteki çoğu örnek Silverlight 2.0 ile hazırlanmış durumda. "Maalesef" dememin nedeni daha Silverlight 2.0'ın Beta 1 sürecinde olması ve kesinlikle kullanımdaki sunucularınıza SL 2.0 ile ilgili yüklemeleri yapmamanız gerektiği. Bu durumda hızlı bir şekilde yukarıdaki adresteki ilk örnek olan "Hello Silverlight Web Part"ını yükleyerek işe başlayabiliriz. Bu yükleme paketi içerisinde SilverlightPart'ın yüklemesi de bulunuyor. SharePoint'e Silverlight uygulaması yüklemek için kullanacağımız esas WebPart da zaten bu. WebPart şu anda SL 2.0 da desteklediği için bazı durumlarda SL2.0 yüklemeleri de yapmamız şart.

"Setup_SilverlightPart.zip" adındaki dosyanın içerisinde yüklemeyi tamamlamanız yeterli olacaktır. Diğer yüklemeler sadece örnek uygulamalar içeriyor. İşimiz bitti zannediyorsanız aldanıyorsunuz. Daha yapmamız gereken birçok iş var. Gelin sunucuda yapılması gerekenleri bir liste haline getirelim.

  • Silverlight BluePrint sitesinden ilk örneği indir ve içerisindeki Setup_SilverlightPart.zip dosyasında yüklemeleri yap.
  • Silverlight Plug-In'i sunucuya yüklemeniz gerekiyor. (Sorun yaşarsanız SL 2.0 Plug-In'i de yüklemek durumunda kalabilirsiniz)
  • Silverlight 2 Beta 1 SDK'nın sistemde yüklü olması gerekiyor.
  • "C:\Program Files\Microsoft SDKs\Silverlight\v2.0\Libraries\Server" adresinden System.Web.Silverlight.dll dosyasını "C:\windows\assembly" adresine kopyalayın.
  • SharePoint web sitenizin altındaki /ClientBin/ klasöründe doğru Silvelight.js dosyasının bulunduğundan emin olun. Eğer yoksa "C:\Program Files\Microsoft SDKs\Silverlight\v2.0\Tools" adresinden söz konusu dosyayı kopyalayın.
  • IIS üzerinde XAML ve kullanacaksanız SL 2.0 için XAP Mime Type ayarlarını yapmanız gerekecek. Ayarlar şu şekilde olmalı.
    Extension: .xaml / MIME Type: application/xaml+xml
    Extension: .xap / MIME Type: application/x-silverlight-2-b1 (Sadece SL 2.0 Beta 1 için özeldir)
  • Son olarak IIS'e ufak bir reset ile işlemi tamamlayabiliriz.

SilverlightPart'ın kullanımı üzerine...

SharePoint sunucumuza yüklediğimiz SilverlightPart özelliğini aktif hale getirmek için ilk olarak "Site Actions / Site Settings / Modify All Settings" menüsünden yola çıkarak "Site Collection Features" kısmına gitmemiz gerekiyor. Burada yüklemiş olduğunuz SilverlightPart'ı göreceksiniz, hemen yanında "Activate" düğmesi ile özelliği aktif hale getirebilirsiniz.

SilverlightPart özelliğini aktif hale getirdik.
SilverlightPart özelliğini aktif hale getirdik.

Artık herhangi bir sayfada WebPart olarak SilverlightPart'ımızı ekleyebiliriz. Sayfalarımızda "Add a WebPart" dedikten sonra karşımıza gelen listeden SilverlightPart'ımızı seçebiliyoruz. Ekleme işlemini tamamladıktan sonra sıre geliyor ayarlara. WebPart'a ait "Tool Pane"'i açtığınızda karşınıza bazı seçenekler gelecek. Bu seçeneklerden ilki SharePoint sitenize koyacağınız Silvleright uygulamasının hangi sürüm için hazırlanmış olduğu. Eğer 2.0 için hazırlanmış ise sizden bir XAP dosyası seçmeniz istenecek. Eğer SL 1.0 için hazırlanmış bir uygulamayı sitenize yerleştireceksiniz bu sefer de XAML dosyasını seçmeniz gerekecektir. SL 1.0 uygulamanızın arkaplanında bir programlama yapıldıysa ayrıca "Include JavaScript" işaretini de işaretleyerek uygun JavaScript dosyasını seçmeniz şart. Bahsettiğimiz bu JavaScript dosyası Expression Blend 2 ile yaratılmış bir projedeki Page.xaml.js dosyasına denk geliyor. Yani hiçbir şekilde Silverlight.js veya default.html.js içerisinde yapılan işlemlerin yapılmasına veya söz konusu dosyalardaki kodların bu tarafa taşınmasına gerek yok çünkü SL uygulamasının yaratılması ve sayfaya yerleştirilmesi işini SilverlightPart yapacak, yani gerekli JavaScript kodlarını kendisi yaratacak.

SilverlightPart ayarları.
SilverlightPart ayarları.

Tüm ayarlarımızı tamamladığımıza göre artık "OK" düğmesine basarak sayfamızda Silverlight uygulamamızı rahatlıkla çalıştırabiliriz. Peki bu seçtiğimiz XAML, XAP ve JavaScript dosyaları nerede? SharePoint web sitenizin içerisindeki ClientBin klasörü içerisinde koyduğunuz tüm dosyalar SilverlightPart içerisinde seçilebilir hale gelecektir.

Hepinize kolay gelsin.

Saturday, April 12, 2008 12:57:51 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight | Silverlight 2.0 | SharePoint  | 
 Friday, April 11, 2008

Bugün Swiss Hotel'de düzenlenen Microsoft SharePoint Konferans serisinin İstanbul ayağında Silverlight BluePrint ile SharePoint entegrasyonu konusunu işledik. 50 dakika gibi kısa bir sürede hem Silverlight'ın sektördeki yerine hem SharePoint ile beraber kullanılmasına değindim.

Microsoft SharePoint Konferansı, İstanbul
Microsoft SharePoint Konferansı, İstanbul

Normalde SharePoint ile ilgili yazılar yazmıyorum ama özellikle dünki aktiviteye katılan arkadaşlara not olması amacıyla SharePoint ile Silverlight entegrasyonundan bahsettiğim bir makaleyi yarın bloguma ekleyeceğim. Yarın da sizi bloguma beklerim ;)

Friday, April 11, 2008 5:17:48 PM (GTB Standard Time, UTC+02:00)  #    Comments [2]   Silverlight | Silverlight 2.0  | 
 Thursday, April 10, 2008

Son iki gündür KKTC'de Uluslararsı Kıbrıs Üniversitesi'ndeydim. İlk gün güzel bir WPF semineri yaptık, ikinci gün de Silverlight ile yolumuza devam ettik. Önce WPF sonra Silverlight yapmanın büyük avantajları var. Malum WPF Silverlight'in babası kıvamında o nedenle Silverlight tarafına geçildiğinde çoğu şeyi anlatmaya gerek kalmadan veya hızlı bir şekilde geçerek webin detaylarına girebildik. Silverlight ile beraber mini bir AJAX uygulamamız da oldu. Üzerinden yıllar geçmesine rağmen ve WPF veya Silverlight ile karşılaştırıldığında ciddi eski bir konu diyebileceğimiz AJAX hakkında hala ciddi bir bilgi eksikliğimizin olması beni ciddi şekilde şaşırtıyor. Özellikle ASP.NET ile beraber gelen AJAX'ın sektördeki konumlandırılması gerçekten çok yanlış. Bu hem üniversitelerde hem de en büyük şirketleri de aynı :( Neyse, konuya dönelim :)

Uluslararsı Kıbrıs Üniversitesi, KKTC
Uluslararsı Kıbrıs Üniversitesi, KKTC

İki gün boyunca Uluslararsı Kıbrıs Üniversitesi'nden genç kardeşlerim beni çok iyi bir şekilde ağırladılar. Bu kadar sıkça Kıbrıs'a gitmeme rağmen ilk defa bir gece kaçarak Girne'yi görme şansım oldu. Benim aklıma Bozcaada sahillerini getirdi. Gerçekten güzeldi.

Umarım seminerler herkes için faydalı olmuştur. Buradan özellikle sevgili CompSciSociety Başkanı Burç Kaan ŞEN'e ogranizasyondaki başarısı ve yardımları için çok teşekkür ediyorum. Ayrıca soyadını maalesef hatırlayamadığım :) fotoğrafları çeken Yasin'e de çok teşekkürler.  Gerçek bir fotoğrafcılık aşığı.

Thursday, April 10, 2008 9:35:16 AM (GTB Standard Time, UTC+02:00)  #    Comments [1]   Silverlight | WPF  | 
 Saturday, April 05, 2008

Bugün NETRON ve INETA işbirliğinde düzenlediğim üç günlük Silverlight eğitiminin son gününde "Silverlight ile Video Uygulamaları"nı işleyerek eğitim serimizi sonlandırdık. Daha öncesinde zaten Silverlight ile animasyon ve veri işlemlerini detaylı olarak incelediğimiz için hızlı bir şekilde video özelliklerini de hallederek gerçek bir projeye geçiş yaptık. Sınıfımızda hem programcılar hem tasarımcılar olduğu için sınıfı ikiye ayırdık. Hedefimiz bir video yayın sitesi yapmaktı. Sitenin yönetim panelini ASP.NET 3.5 ile XLINQ kullanarak programcılarımız hazırladı, Silverlight uygulamasının tasarımını ve animasyonları da tasarımcılarımız Expression Design ve Blend ile düzenledi. En sonunda her iki sistemi de birleştirerek bir güne sığacak şekilde güzel bir ürün çıkardık.

Silverlight ile video uygulamaları gün sonu.
Silverlight ile video uygulamaları gün sonu.

Projeye ait kaynak kodlarını aşağıdaki linkten bilgisayarınıza indirebilirsiniz. Projenin özelliklerine kabaca bakacak olursak aşağıdaki konuları kapsadığını söyleyebiliriz;

  • AJAX ile Silverlight veri bağlantısı
  • Dinamik Silverlight içeriği yaratılması
  • Video oynatımı
  • Tam ekran Silverlight uygulama yönetimi
  • Video dosyalarının önbellekleme kontrolü
  • Animasyon kullanımı
  • XLINQ ve C#

Proje Kaynak Kodu - 05042008_2.rar (44,51 KB)

Projenin çalışır halini aşağıdaki adresten inceleyebilirsiniz.

http://daron.yondem.com/samples/sl10video_ineta/

Eğitime başından sonuna katılan herkese çok teşekkürler. Tekrar görüşmek üzere ;)

Saturday, April 05, 2008 9:25:38 PM (GTB Standard Time, UTC+02:00)  #    Comments [3]   Silverlight  | 
 Friday, April 04, 2008

Bugün Yeditepe Üniversitesi'ndeydim. Uygulamalı mini bir Silverlight eğitimi planlarken bilgisayarların azizliğine uğradık. Bunun üzerine biz de uygulamasız olarak Silverlight, AJAX ve WPF konularına ışık hızıyla göz attık. Özellikle katılımcıların "eğitim" konseptine uygun kalabalıkta olması aslında normalde giremeyeceğimiz detaylara girebilmemizi sağladı.

Yeditepe Üniversitesi, Silverlight
Yeditepe Üniversitesi, Silverlight

Buradan organizasyonda emeği geçen tüm Bilgisayar Kulübü'ne ve özellikle sevgili MSP, Ümit Büyükabalı'ya çok teşekkür ediyorum.

Friday, April 04, 2008 1:01:56 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Thursday, April 03, 2008

INETA ve NETRON işbirliği ile yürüttüğümüz 3 günlük Silverlight eğitimi serisinin son gününü Cumartesi NETRON Altunizade şubesinde gerçekleştireceğiz. Daha önceki katılımcıların yarın telefon ile aranacak, ayrıca bu son güne gelemeyenlerine yerine ve salonu büyüttüğümüz için alabileceğimiz yeni katılımcılar için de tekrardan yeni talihliler seçileceği için benim tavsiyem eğer Silverlight ile Video uygulamalarıyla ilgileniyorsanız hemen aşağıda formu doldurarak kayıt olmanızdır. Talihliler yarın öğleden sonra telefon ile NETRON tarafından aranacak.

Thursday, April 03, 2008 12:52:45 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Tuesday, April 01, 2008

PCnet'in Nisan sayısındaki yazılarımı her ay olduğu gibi yine buradan sizlere duyurmak istiyorum :) Derginin OKUL bölümünde AJAX, ASP.NET 3.5, Expression Blend ve Silverlight ile ilgili yazılarım yer alıyor.

AJAX : ASP.NET AJAX İstemci Özellikleri
Expression Blend : WPF ile zengin doküman uygulamaları
Silverlight: Silverlight ve video dünyası
ASP.NET 3.5 : Bir sitenin ekran görüntüsünü ASP.NET ile nasıl alırsınız?

Hepinize sevgiler.

Tuesday, April 01, 2008 8:44:53 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   AJAX | ASP.NET 3.5 | Expression Blend | Silverlight  | 

Bugün ODTÜ Bilgisayar Mühendisliği Bölümü'nde uzun soluklu bir Silverlight ve AJAX semineri düzenledik. Seminer boyunca gerçekten çok güzel sorular geldi. Katılımcıların yarısı her zamanki gibi ilk bir saatte salonu terk etti ve esas programcılar ile biz bize kaldık :) Zaten o noktadan sonra kalan ilgili dinleyiciler ile sanırım seminer 10 saat bile sürse sorun olmazdı.

ODTÜ, Silverlight ve AJAX Semineri
ODTÜ, Silverlight ve AJAX Semineri

Buradan özellikle ODTÜ'den sevgili Arş. Gör. Serdar Çiftçi'ye aktiviteye katkılarından dolayı teşekkür ediyorum. Seminer sonrasında beni yalnız bırakmayan MSP'lerimiz Ali Rıza Babaoğlan, Murat Duman ve sevgili Tayfun Akçay'a da ayrıca teşekkür ediyorum. Güzel ve eğlenceli bir akşam geçirdim sayelerinde :)

Tuesday, April 01, 2008 8:41:18 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   AJAX | Silverlight  | 
 Monday, March 31, 2008

Silverlight 2.0 yazılarıma başladığım günlerde aklıma olmasına rağmen atladığım bir yazıyı bugün sizlerle paylaşıyorum. Seminer ve eğitimlerde karşılaştığım kadarıyla hem Silverlight'ın sürümleri arasında hem de Silverlight ile geliştirme yapılacak araçların sürümleri arasında ciddi bir kafa karışıklığı söz konusu. Gelin elde neler var, ve ne yapmak için ne kullanmamız gerekiyor bir göz atalım.

Expression Blend : Blend'in ilk sürümünde WPF uygulamaları geliştirebilirsiniz fakat Silverlight uygulaması geliştiremezsiniz. Bunun nedeni aslında çok basit. Blend ilk çıktığında ortada Silverlight diye birşey yoktu. O nedenle ürün içerisinde de böyle bir destek yok. Özetle Expression Blend'in ilk sürümünün SL dünyasında yeri yok.

Expression Blend 2 : Blend'in bir sonraki sürümü olan Blend 2'nin Nisan ayı içerisinde satışa sunulması yani "release" olması bekleniyor. Bu sürüm içerisinde tabi ki Silverlight 1.0 desteği var. Şu an Blend 2'nin Beta'sını indirerek bilgisayarınızda çalıştırabilir ve SL 1.0 uygulamaları geliştirebilirsiniz. Adı sonradan SL 2.0 olarak değiştirilen SL 1.1 uygulamaları da yine Blend 2 içerisinde geliştirilebiliyordu fakat bu sistem değişti. Artık SL 1.1 kalmadığına göre zaten bu kullanımın da doğru olduğunu söyleyemez. Daha önceleri SL 1.1 kullananlara tavsiyem sistemlerindeki SL 1.1 ile ilgili herşeyi kaldırmaları.

Expression Blend 2.5 : Silverlight 2.0 uygulamaları geliştirmek istiyorsanız Expression Blend 2.5 ile yola çıkmanız gerekiyor. Unutmayalım ki SL 2.0 daha Beta 1 aşamasında bu nedenle Blend 2.5 de Preview sürümü ile karşımıza çıkıyor.

Microsoft Silverlight 1.0 Software Development Kit : Silverlight 1.0 ile ilgili uygulama geliştiriyorsanız sisteminize bu paketi yükleyerek hem yardım dosyalarından hem de Visual Studio'ya entegre olan SL Proje şablonundan faydalanabilirsiniz.

Microsoft Silverlight Tools Beta 1 for Visual Studio 2008 : Adından pek anlaşılmasa da aslında bu paket SL 2.0 için hazırlanmış durumda. VS içerisinde SL 2.0 proje şablonlarını ve gerekli Intellisense desteğini yüklüyor. Paket içerisinde aslında ayrıca da indirilebilen SL 2.0 BETA SDK da bulunuyor.

Benim her zamanki tavsiyem SL 2.0 ile ilgili yüklemeleri SL 1.0 uygulaması geliştirdiğiniz makinelere yapmamanız yönünde. Mümkünse bir sanal makine kullanarak SL 2.0 uygulama çalışmalarınızı söz konusu makine üzerinde devam ettirin.

Hepinize kolay gelsin.

Monday, March 31, 2008 11:29:28 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Expression Blend | Silverlight | Silverlight 2.0 | Visual Studio 2008  | 
 Sunday, March 30, 2008

TBD ve INETA işbirliğinde yaptığımız "4 Konu, 4 Gün" eğitimlerinin ikinci gününde bugün Silverlight'a değindik. Yine çok zevkli bir gün geçirdim. Günün sonunda Silverlight uygulamaları, animasyonları yapabiliyor, hatta bunları sunucu tarafındaki veriye de bağlayabiliyorduk. Tabi bir önceki günde AJAX'ı işlemiş olmamız işimizi epey kolaylaştırdı. Dersin sonunda elde ettiğimiz örneğin kodlarını aşağıdan indirebilirsiniz.

Örnek Uygulama Kaynak Kodu - 30022008_1.rar (8,17 KB)

Günün sonunda yine 17.30 civarı fire vermeye başladık. Aslında bu durum yapacağımız çekilişe kalanların şansını arttırdı :) Ne çekilişimi mi? Kendi yazdığımız bir program aracılığı ile (hiç sormayın) yaptığımız çekişle bir kişiye Vista Ultimate, SQL 2008 CTP, Visual Studio 2008 Trial ve Server 2008 Trial orijinal DVD'leri ile beraber bir de "Heroes Happen Here" kitap hediye ettim. Özetle çok zevkli bir gündü haftaya Pazar tekrar görüşmek üzere.

"4 Konu, 4 Gün" Silverlight Günü
"4 Konu, 4 Gün" Silverlight Günü

Sunday, March 30, 2008 9:11:27 PM (GTB Standard Time, UTC+02:00)  #    Comments [5]   Eğitimler | Silverlight  | 
 Wednesday, March 26, 2008
 Tuesday, March 25, 2008

Son iki gündür Isparta, Süleyman Demirel Üniversitesi'ndeydim. İki gün boyunca Silverlight, WPF, ASP.NET 3.5 AJAX ve LINQ konularına değindik. SDÜ zaten daha önce de öğrencilerinden bana gelen soru mailleri ile beni şaşırtan bir üniversite olmuştu. Bu ziyaretimde de epey şaşkın anlar yaşadım. Peki neye şaşırdım? SDÜ'de şu an Silverlight ve WPF konularında bitirme projeleri hazırlayan kardeşlerimiz var. Daha çoğu üniversitede bu konuların birer mistik ütopya olarak dolaştığını düşünürsek SDÜ öğrencileri ciddi şanslı. Seminerler boyunca gelen sorular ortalamanın çok üstünde bir seviyeye sahipti.

Süleyman Demirel Üniversitesi, Isparta
Süleyman Demirel Üniversitesi, Isparta

Buradan özellikle SDÜ'den sevgili Eğitim Görevlisi dostum Mehmet Albayrak'a ilgisi, misafirperverliği ve organizasyondaki katkısı için çok teşekkür ediyorum. Ayrıca tabi ki güler yüzleri ve teknoloji aşkları ile beni hem şaşırtan hem de sevindiren katılımcılara, SDÜ öğrencilerine de çok teşekürler. Kısa zamanda yakaladığım ufak bir manzara fotoğrafı ile buradan Ispartaya tekrar selamlar.

Eğirdir Gölü Tepesi, Isparta
Eğirdir Gölü Tepesi, Isparta

Tuesday, March 25, 2008 7:59:49 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   AJAX | ASP.NET 3.5 | LINQ | Seminer | Silverlight | WPF  | 
 Sunday, March 23, 2008

Dün INETA ve NETRON sponsorluğundaki Silverlight eğitimimizin ikinci gününü "Silverlight ile Veri Uygulamaları" konusu ile tamamladık. Eğitim çok zevkli geçti. Öğlen yemeği için topluca Capitole'e gittik :) Çıkışta öğrencilerimden Oğuzcan Şahin benimle bir röportaj yaptı :) Sanırım yakında bir şekilde yayınlayacaktır, buradan da size haber veririm röportaj yayına girdiğinde. Terletici sorular vardı.

Silverlight Eğitimi 2. Gün
Silverlight Eğitimi 2. Gün

Eğitim günün sonunda yaptığımız Silverlight uygulamasının kaynak kodlarını aşağıdan indirebilirsiniz. Katılımcı arkadaşların her birine tek tek ilgileri ve yoğu konsantransyonları için teşekkür ediyorum.

Örnek Kaynak Kodu - 23032008_1.zip (11 KB)

Sunday, March 23, 2008 8:37:13 PM (GTB Standard Time, UTC+02:00)  #    Comments [6]   Eğitimler | Silverlight  | 
 Monday, March 17, 2008

Ücretsiz eğitim konseptinde düzenlediğimiz INETA ve NETRON sponsorluğundaki Silverlight 1.0 eğitimine gelen ve gelmeye devam eden büyük ilgi daha önce de tahmin ettiğim bir durumdu. Bu konuda maalesef "talihli" olamayıp seçilemeyen arkadaşlar haklı olarak sitemkar mailler gönderiyorlar. Emin olun bu tarz aktivitelere devam edeceğiz, mekan sponsorları aramaya devam ediyorum.

Bundan yaklaşık bir ay kadar öncesinde sevgili Burcu Kutlu ile temellerini attığımız bir diğer etkinliği bugün sizlere duyurmak istiyorum. Bu sefer de INETA ve TBD Genç işbirliği ile birer tam günlük dört farklı konuda bilgisayar başında eğitimler açıyoruz. "Bir günlük eğitim mi olur?" derseniz aslında haklısınız ama en azından kendi adıma düşündüğümde 3 saatlik seminerlerimden sonraki adım diyebilirim. Diğer Silverlight eğitimini 3 gün olarak tasarlamıştık. Umarım yakında bu gibi ücretsiz eğitimlerin sayısını arttıracağız. Bu seferlik dört konu, dört gün ;)

23 Mart - ASP.NET 3.5 AJAX
30 Mart - Silverlight
6 Nisan - Expression Blend ve WPF
13 Nisan - ASP.NET 3.5 ve LINQ

Eğitim saatleri her gün 10.00-18.00 arasında, eğitim yeri TBD İstanbul (Ali Ruhi Sok. No:2, K.3, Hasanpaşa/ Kadıköy).

Kayıt için bu adresi kullanabilirsiniz; http://www.tbdgenc.org/index.php?page=activityjoin&lang=tr&id=29

Buradan özellikle tekrar sevgili Burcu Kutlu'ya aktivitenin organizasyonundaki yoğun emekleri için çok teşekkür ediyorum.

Monday, March 17, 2008 10:36:44 AM (GTB Standard Time, UTC+02:00)  #    Comments [5]   AJAX | ASP.NET 3.5 | Expression Blend | LINQ | Silverlight | WPF  | 
 Saturday, March 15, 2008

Seminerlerde, videolarda ve geçen gün lansmanda üzerimdeki Silverlight T-Shirt'ü büyük beğeni kazandı :) O kadar ki bir an tekstil sektörüne girsem mi diye düşünmedim değil. Maalesef beğenilerini bana "Ben de istiyorum o T-Shirt'ten" şeklinde ileten arkadaşların hepsine birer T-Shirt hediye etmem mümkün olmayacak :) Onun yerine daha güzel birşey yaptım (en azından benim için daha güzel :)) ve kendi T-Shirt'ümün baskısını da yaptırmış olduğum Tish-O ile iletişime geçerek aynı tasarımın siteye yerleştirilmesini ve böylece herkesin sipariş verebilmesini sağladım :)

Orijinal Tasarımlar
Orijinal Tasarımlar

Tish-O'nun arayüzünü kendi sitesine girdiğinizde zaten rahatlıkla keşfedebilirsiniz. Farklı bedenlerde ve stillerde T-Shirt siparişi verebiliyor, tasarımınızı kendiniz yapabiliyorsunuz. Baskı kalitesi şaşırtıcı derecede iyi, benim T-Shirt yaklaşık 6, 7 defa yıkanmasına rağmen en ufak bir baskı sorunu yok.

Siteden Silverlight T-Shirt sipariş verebilmek için yapmanız gerekenleri bir iki adımda göstermek istiyorum.

Tish-O sitesinde adım 1.
Tish-O sitesinde adım 1.

Herhangi bir T-Shirt tasarımı yaparken T-Shirt'ün ön ve arka yüzüne hazır Silverlight tasarımlarını yerleştirerek sipariş verebilirsiniz.

Tish-O sitesinde adım 2.
Tish-O sitesinde adım 1.

Görselleri ekledikten sonra sitedeki arayüzde basılacak boyutu da ayarlayabiliyorsunuz. Artık hepinizi bir sonraki seminerde Silverlight T-Shirt'leri ile bekliyorum. Kahramanlar aramızda ;)

Saturday, March 15, 2008 3:19:00 PM (GTB Standard Time, UTC+02:00)  #    Comments [5]   Silverlight | Silverlight 2.0  | 
 Wednesday, March 12, 2008

Silverlight uygulamalarında kullandığımız XAML dosyalarının bazı durumlarda IIS tarafından istemciye gönderilmediğinden daha önceki yazılarımda bahsetmiştim. Bazen bu durum özellikle sunucu admini (hosting sağlayıcı) tarafından ek ücret talebi yapabilmek adına kasıtlı olarak yapılabildiği gibi bazen de gerçekten ortada bir sorun olabiliyor. Peki nasıl düzelteceğiz?

MIME Type tanımı nasıl yapılır?

Silverlight XAML dosyalarının IIS tarafından istemciye sunulabilmesi için aşağıdaki şekilde gerekli MIME type'ların tanımlanması gerecektir.

Dosya uzantısı: .xaml
MIME type: application/xaml+xml

Dosya uzantısı: .xap
MIME type: application/x-silverlight-app

XAML'ı biliyorduk da XAP da nesi? :) XAP şu an Silverlight 2.0 Beta 1 ile beraber kullanılan bir dosya uzantısı. Eğer olur ya bir fantezi çerçevesinde Silverlight 2.0 Beta 1 ile sanal makinenizde geliştirdiğiniz bir uygulamayı sunucuya koymak isterseniz şu an için XAP dosyaları için de gerekli MIME Type'ları tanımlamanız gerekecektir. İleride Silverlight 2.0'ın yayına çıkacak orijinal sürümlerinde bu uzantının kullanılmaya devam edeceği tabi ki garanti değil. Bahsettiğimiz teknoloji daha beta aşamasında.

Gelelim bu tanımlama işini nasıl yapacağımıza. Sunucuda IIS Manager'ı açtıktan sonra MIME Type ayarı yapmak istediğiniz siteyi seçerek sağ tuş tıklayarak gelen menüden "Properties" komutunu veriyoruz. Karşımıza gelen pencereden "HTTP Header" sekmesine geçerek en alttaki "MIME Types" düğmesine tıklıyoruz.

IIS Manager içerisinde MIME Types seçeneğini bulduk.
IIS Manager içerisinde MIME Types seçeneğini bulduk.

"MIME Types" bölümüne girdikten sonra hemen "New" düğmesine tıklayarak yeni bir "MIME Type" eklemek üzere bir önceki paragraftaki ayarları buraya aynen yazıyoruz ve gördüğümüz tüm "OK" düğmelerine basarak IIS Manager arayüzüne geri dönüyoruz.

Yeni bir MIME Type ekliyoruz.
Yeni bir MIME Type ekliyoruz.

Artık gerekli uzantılar tanımlandığı için herhangi bir sorun yaşamayacağız.

Hepinize kolay gelsin.

Wednesday, March 12, 2008 1:47:49 AM (GTB Standard Time, UTC+02:00)  #    Comments [2]   Silverlight | Silverlight 2.0  | 
 Tuesday, March 11, 2008

Sizlerle blogumdan paylaştığım makalelerin çoğunu yazgelistir.com üzerinden de okuyucularla paylaşıyorum. Bunun nedeni daha önce birkaç kez yazmıştım; malum herkes benim blogumu takip etmeyebilir. Yazılarımın daha geniş bir kitleye ulaşması için farklı sitelerde aynı yazılarımın yayınlanmasını faydalı görüyorum.

Bugün güzel bir gelişme oldu ve yazgelistir.com'da Silverlight bölümü açıldı. Bu güzel haberle beraber ben de söz konusu bölümün editörü oldum. Buradan tüm YazGeliştir ekibine ve özellikle Işıl Orhanel'e ilgisi ve çalışması için teşekkür ediyorum. Artık bir YazGelistir yazarı olarak Silverlight makalelerimi yazdıktan sonra bir YazGelistir editörü olarak da kendi makalelerimi onaylayabileceğim :) Hoş bir duygu. ;)

Tuesday, March 11, 2008 7:10:44 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Sunday, March 09, 2008

Bugün INETA ve NETRON sponsorluğunda Silverlight Workshop serimizin ilkini gerçekleştirdik. Sabah 10.00'da başlayarak gerekli yüklemelerimizi de yaptıktan sonra 18.00'e kadar sanırım sadece bir teneffüs ve öğle yemeği molası ile yoğun bir maraton yaptık. Gerçekten büyük zevk aldım, eğlendim :) Güzel bir pazar günü oldu.

Silverlight Workshop Gün 1
Silverlight Workshop Gün 1

Workshop'un sonraki günleri için katılımcılar tekrar telefon ile aranarak onaylanacak. Şu anki katılımcılardan sonraki günlere katılamayanların yerine diğer başvuranlardan talihliler seçilecek. O nedenle başvuru yapmaya isteyenler devam edebilir.

İlk günde yaptığımız birkaç minik örneğin kodlarını aşağıda sizlerle paylaşıyorum. Son olarak buradan tekrar sevgili dostum Ercan Altuğ Yılmaz'a ve NETRON ekibine teşekkür ediyorum.

Örnek çalışmalara ait kaynak kodlar - 09032008_1.rar (15,12 KB)

Sunday, March 09, 2008 10:35:52 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]   Silverlight  | 
 Tuesday, March 04, 2008

Hatırlarsanız sizlere Microsoft Student2Business programı kapsamında Microsoft İstanbul ofislerinde yaptığımız eğitimden bahsetmiştim. Hatta sonrasında bir de söz konusu eğitimle ilgili bir video paylaşmıştım. İşte o eğitimdeki öğrencilerimden Özgür Arman sözünü tuttu ve süper bir iş yaptı. Özgür özellikle oyun programlamaya olan ilgisi ve konuya uzmanlık derecesinde hakimiyetini (benim sohbetlerimdeki izlenimimle sabittir) Silverlight dünyasına taşıdı.

http://www.ozgurarman.we.bs/SoloTest_4_0/index.html

Yukarıdaki adresten Özgür'ün hazırladığı Silverlight oyununu inceleyebilirsiniz. Hepimizin çocukken epey oynadığı, taşları birbirinin üzerinden atlatarak yediğimiz :D ve kalan taş sayısına göre genelde "aptal" çıktığımız :) oyunu Özgür Silverlight ile sıfırdan geliştirdi. Oyunu görsel anlamda incelerken bir yazılımcının elinden çıktığını aklınızda bulundurmakta fayda var. :)

Türkiye'de Silverlight 1.0 ile yapılmış ilk oyun!
Türkiye'de Silverlight 1.0 ile yapılmış ilk oyun!

Dikkat: Ekran görüntüsünden de görebileceğiniz üzere Silverlight'ın Cross-Browser olmasından faydalanarak oyunumuzu Safari'de de rahatlıkla çalıştırabiliyoruz.

Teşekkürler Özgür ;)

Tuesday, March 04, 2008 7:33:21 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Eğitimler | Silverlight  | 
 Saturday, March 01, 2008

PCnet'in Mart sayısındaki yazılarımı her ay olduğu gibi yine buradan sizlere duyurmak istiyorum :) Derginin OKUL bölümünde AJAX, ASP.NET 3.5, Expression Blend ve Silverlight ile ilgili yazılarım yer alıyor.

AJAX : İnce ayar AJAX.
Expression Blend : WPF tasarımında görsel kaynaklar
Silverlight: Silverlight projelerinin bileşenleri
ASP.NET 3.5 : ASP.NET 3.5 Veri Kontrolleri

Hepinize sevgiler.

Saturday, March 01, 2008 10:27:22 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   AJAX | ASP.NET 3.5 | Expression Blend | Silverlight  | 
 Wednesday, February 27, 2008

Uzun süredir planladığım WorkShop'lardan ilk seriyi sizlere duyuruyorum. Seminerlerden farklı olarak WorkShop'larda herkes bilgisayar başında olacak. Toplam 24 saat olarak düşündüğüm bu eğitim serisini INETA ve NETRON sponsorluğunda gerçekleştiriyoruz. Katılım tamamen ücretsiz! Üç ayrı gün olarak planladığımız eğitimin tarihleri, konuları, katılım formu aşağıdaki şekilde;

Buradan özellikle sevgili dostum E. Altuğ Yılmaz'a Netron'da sınıf ayarlanabilmesi için yardımlarından dolayı teşekkür ediyorum.

Silverlight Workshop serisi afişleri
Silverlight Workshop serisi afişleri

Unutmadan, bu daha önce sizlere duyurduğum Netron'daki MS Web Designer eğitiminin tanıtımı amacıyla yapılan bir şey değil. Zaten yukarıdaki tarihlerde Nisan ayına kadar yaydığımı da görebilirsiniz. Bu benim müsait günlerime ait plandan kaynaklanıyor. Yukarıdaki programda adam akıllı eğitim yapacağız. Aslında bahsettiğim ücretli eğitimin sadece Silverlight kısmına rakip bile görülebilir, tek farkı buradaki 24 saate karşılık o eğitimde 60 saat ve ek 20 saat de projeye ayrıca ayırabiliyor olmamız. Eh 80 saatlik işi burada 24 saatte yapabiliriz dersem o da bariz yalan olur tabi :)

Tarihler uygun değil diyenlere yakında umarım farklı sürprizler de yapabileceğim ;)

Wednesday, February 27, 2008 2:23:38 AM (GTB Standard Time, UTC+02:00)  #    Comments [2]   Silverlight  | 
 Sunday, February 24, 2008

Silverlight uygulamalarında bazı durumlarda animasyonları dinamik olarak yaratmak gerekebilir. Bu durum genelde söz konusu animasyonla ilgili bazı değerlerin önceden bilinmemesinden kaynaklanır. Örneğin dinamik olarak yarattığınız bir Silverlight nesnesine bağlı bir animasyon hazırlamak isteyebilirsiniz, fakat hedef nesnenin özellikleri belli olmadığı için animasyonu da yaratmanız mümkün olmayacaktır veya animasyonla ilgili bazı değerleri AJAX ile sunucu tarafından alıyor olabilirsiniz. Bu gibi durumlarda dinamik animasyon yaratabiliyor olmak hayati öneme sahip.

Silverlight içerisinde dinamik nesneler yaratırken createFromXaml adında bir metod kullanıyoruz, aynı şekilde dinamil animasyonlar (Storyboard) yaratırken de yine createFromXaml metodunu kullanıyor olacağız. createFromXaml metodu yapısı gereği tek bir parametre alıyor, söz konusu parametre yaratılacak olan nesnenin veya animasyonun XAML kodu. Animasyon tarafına tam olarak geçmeden önce gelin aşağıdaki şekilde bir Silverlight projesi yaratalım.

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="300" Height="300"

  Background="White"

  x:Name="Page"

  MouseLeftButtonDown="Tiklandi"

  >

  <Ellipse Width="45" Height="45" Fill="#FFFF0000" Canvas.Left="22" Canvas.Top="27" x:Name="Top" RenderTransformOrigin="0.5,0.5">

    <Ellipse.RenderTransform>

      <TransformGroup>

        <ScaleTransform ScaleX="1" ScaleY="1"/>

        <SkewTransform AngleX="0" AngleY="0"/>

        <RotateTransform Angle="0"/>

        <TranslateTransform X="0" Y="0"/>

      </TransformGroup>

    </Ellipse.RenderTransform>

  </Ellipse>

</Canvas>

Yukarıdaki Silverlight uygulamamız içerisinde adını Top koyduğumuz bir Ellipse nesnesi yer alıyor. Ayrıca Silverlight uygulamamızın ana öğesi olan root Canvas'ın da MouseLeftButtonDown durumuna bir event handler bağlamış durumdayız. Birazdan Tiklandi adındaki JavaScript fonksiyonumuzu yazmaya başlayacağız.

Uygulamamızda amacımız Silverlight içerisinde kullanıcı her nereye tıklarsa tıklasın topun hoş bir animasyon ile o noktaya gitmesini sağlamak. Bunun için tabi ki her animasyon (StoryBoard) nesneleri yaratmamız gerekecek fakat bu animasyonların özellikleri şu anda belli değil çünkü kullanıcının sahnede nereye tıklayacağını bilmiyoruz. O nedenle animasyonları dinamik olarak tıklama anında yaratarak çalıştırmamız gerekecek. Yaratacağımız animasyonların şablonu aşağıdaki gibi olmalı.

    <Storyboard x:Name="Storyboard1">

      <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Top" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">

        <SplineDoubleKeyFrame KeyTime="00:00:01" Value="185"/>

      </DoubleAnimationUsingKeyFrames>

      <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Top" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)">

        <SplineDoubleKeyFrame KeyTime="00:00:01" Value="200"/>

      </DoubleAnimationUsingKeyFrames>

    </Storyboard>

Yukarıdaki kod içerisinde Top nesnemizin sahnedeki yerini değiştiriyoruz. Bu animasyonu hızlı bir şekilde Blend ile yaratarak örnek XAML kodunu kopyaladık. Animasyon içerisinde özellikle koyu yazılan yerlerdeki Value değerlerine dikkat etmekte fayda var. Bu değerlerin Top'un gideceği hedef X ve Y koordinatları. Şimdi geçip yavaş yavaş Tiklandi JavaScript fonksiyonumuzu yazmaya başlayalım.

function Tiklandi(sender, args)

{

    var TiklananYer = args.getPosition(null);

    var AnimXAML = '<Storyboard xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="Storyboard' + TiklananYer.X.toString() + TiklananYer.Y.toString() + '"><DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Top" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"><SplineDoubleKeyFrame KeyTime="00:00:01" Value="' + (TiklananYer.X - sender.findName("Top").width) + '"/></DoubleAnimationUsingKeyFrames><DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Top" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)"><SplineDoubleKeyFrame KeyTime="00:00:01" Value="' + (TiklananYer.Y - sender.findName("Top").height) + '"/></DoubleAnimationUsingKeyFrames></Storyboard>';

    var Anim = sender.getHost().content.createFromXaml(AnimXAML);

    sender.resources.Add(Anim);

    Anim.Begin();

}

Yukarıdaki fonksiyon istediğimiz işlemi tamamlamamız için yeterli. Gelin bu fonksiyon içerisinde neler yaptığımıza bir bakalım. Birinci satırda hemen TiklananYer adındaki bir değişkene fare ile tıklanan noktanın koordinatlarını kaydediyoruz. Bunun için Tiklandi fonksiyonumuza gelen ikinci parametre olan args üzerinden getPosition metodunu kullanıyoruz. Bir sonraki adımda sıra geldi yaratacağımız animasyonun XAML kodunu hazırlamaya.

AnimXAML adında bir değişkene Blend içerisinde hazırladığımız XAML metnini aktarıyoruz. Fakat bunu yaparken metin içerisindeki bazı şeyleri de JavaScript ile atamamız gerekiyor. Örneğin hem X hem de Y yönünde gidilmesi hedeflenen noktanın koordinatlarını TiklananYer değişkenimizden alarak XAML içerisine yerleştiriyoruz. Top nesnemizin tam olarak tıklanan noktayı ortalayabilmesi için fareden gelen koordinatların topun yüksekliğini veya genişliğini çıkartmayı da unutmamamız gerek. XAML kodu içerisinde değiştirdiğimiz bir diğer özellik de StoryBoard nesnesinin adı. Her tıklama işleminde yeni bir StoryBoard yaratıp Silverlight animasyonumuza ekleyeceğimiz için farklı isimler vermemiz gerekecek. Aynı isimde birden çok StoryBoard ekleyemeyiz. Bunun için biz örneğimizde X ve Y koordinatlarını metin olarak StoryBoard adının sonuna ekledik. Kullanıcının aynı noktaya tıklamayacağını ümit ediyoruz :) İsterseniz siz söz konusu animasyonun var olup olmadığını kontrol ederek daha sağlıklı bir işleyiş de sağlayabilirsiniz. Animasyon varsa yaratmadan doğrudan çalıştırabilirsiniz.

createFromXaml metodu ile hazırlamış olduğumuz XAML kodundan StoryBoard nesnemizi yarattırarak Anim adında bir değişkene aktarıyoruz. Artık sıra geldi bu animasyonu Silverlight sayfamızın kaynaklarına (resource) eklemek. O işlemi de tamamladıktan sonra artık animasyonumuzu çalıştırabiliriz.

Uygulamayı çalıştırdığınızda Silverlight içerisinde nereye tıklarsanız tıklayın topun son tıklanan yere doğru hareket ettiğini göreceksiniz. Eğer top tıkladığınız noktaya ulaşmadan başka bir yere tıklarsanız yönünü değiştirerek oraya doğru geldiğini de görebilirsiniz. Bunun nedeni böyle bir durumda iki farklı animasyonun yaratılarak çalıştırılıyor olması. Son biten animasyon son başlatılan olacağı için top en sonunda kendisini son tıklanan noktada bulacaktır.

Hepinize kolay gelsin.

Sunday, February 24, 2008 2:29:05 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Saturday, February 23, 2008

Silverlight uygulamalarında kullanıcı ile Silverlight nesneleri arasında bir iletişim sağlayabilmek için fare tıklamalarını kullanmak gerçekten çok kolay. Bu deneyimi bir üst adıma yükselterek sitemizin ziyaretçilerine Silverlight uygulamalarında fareleriniz roller'larını kullanma şansı da tanıyabiliriz. Aslında kullanacağımız teknik Silverlight 1.0'ın yapısı gereği istemci tarafında JavaScript ile söz konusu durumları yakalayarak bunu Silverlight nesnelerine yansıtmak olacak.

İlk olarak gelin Expression Blend 2 ile yeni bir Silverlight projesi yaratalım ve tasarım kısmına bir Image nesnesi yerleştirelim. Hedefimiz site ziyaretçisinin faresinin roller'ı ile bu resmi büyütüp küçültebilmesi, bir anlamda Zoom yapabilmesi. Hazılardığımız XAML kodu aşağıdaki şekilde olmalı.

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="640" Height="480"

  Background="White"

  x:Name="Page"

  >

  <Image Width="352" Height="229" Canvas.Left="8" Canvas.Top="8"

        Source="Autumn Leaves.jpg" RenderTransformOrigin="0,0">

    <Image.RenderTransform>

      <TransformGroup>

        <ScaleTransform x:Name="Boyutlandir" ScaleX="1" ScaleY="1"/>

        <SkewTransform AngleX="0" AngleY="0"/>

        <RotateTransform Angle="0"/>

        <TranslateTransform X="0" Y="0"/>

      </TransformGroup>

    </Image.RenderTransform>

  </Image>

</Canvas>

Yukarıdaki XAML kodu içerisinde özellikle dikkat etmemiz gereken nokta Image içerisindeki ScaleTransform tagının programatik olarak ulaşılabilir bir adının olmasının şart olması. Biz örneğimizde söz konusu taga Boyutlandir adını verdik. Böylece bu nesneye ulaşarak ScaleX ve ScaleY değerlerini programatik olarak değiştirerek resme zoom yapılmış gibi bir ortamsağlayabileceğiz.

Bundan sonra tüm yapacaklarımızı projemizin Page.xaml.js dosyası içerisinde yapacağız. İlk olarak bizim için otomatik olarak tanımlanmış olan handleLoad fonksiyonu içerisine sayfa ilk açıldığında ve Silverlight animasyonu yaratıldığında çalıştırılmak üzere aşağıdaki kodları yazıyoruz.

    if (window.addEventListener)

        window.addEventListener('DOMMouseScroll', ScrollOldu, false);

        document.onmousewheel = ScrollOldu;

        window.onmousewheel = document.onmousewheel;

Yukarıdaki kodlarda aslında aynı işlemi birden çok farklı yöntem ile birçok kes yapıyoruz. Bunun nedeni kodumuzun hem FireFox hem Safari hem de Internet Explorer'da çalışmasını sağlayabilmek. Yaptığımız şeyi kabaca tanımlamak gerekirse aslında tarayıcının MouseScroll durumunu kendi tanımladığımız ScrollOldu adında bir JavaScript fonksiyonun yönlendiriyoruz. Bir anlamda kendi "event handler" yapımızı tanımlıyoruz.

Bir sonraki adımda artık yavaş yavaş ScrollOldu fonksiyonunu yazmamız gerekiyor. Fakat bunun öncesinde birkaç ufak bilgiyi paylaşmak istiyorum. ScrollOldu durumu birazdan göreceğimiz, kendisiyle beraber gelen parametresinde scroll işleminin değerini getirir. Bu değer farklı tarayıcılarda farklı şekillerde yakalanır. O nedenle biz de bir çok kontrol yapıyor olacağız. Bahsettiğimiz değer aslında artı veya eksi bir Integer değeridir ve ne kadar scroll edilmesi gerektiğini tanımlar. Biz örneğimizde sadece bu değerin + veya - olup olmadığını kontrol edeceğiz, scroll miktarı ile zoom'u doğrudan eşleştirmeyeceğiz. Böylece farklı bilgisayarlarda scroll hızı farklı ayarlanmış ise bu durum uygulamaya yansımayacak.

    var ScrollMiktari = 0;

    if (!event)

        event = window.event;

    if (event.wheelDelta)

    {

        ScrollMiktari = event.wheelDelta;

        if (window.opera)

            ScrollMiktari = -ScrollMiktari;

    }

    else if (event.detail)

        ScrollMiktari = -event.detail;

Yukarıdaki kodumuz ScrollOldu fonksiyonumuzun baş kısmı. ScrollOldu fonksiyonumuza gelen event adındaki parametrenin tarayıcıya göre var olup olmamasına göre farklı eşleştirmeler yapıyoruz. event nesnesinin yine tarayıcıya göre wheelDelta özelliği var oradan gerekli değeri yakalıyoruz, yoksa bu sefer detail özelliğinden değerimizi alıyoruz. Bazı tarayıcılarda aşağıya doğru scroll + değer anlamına gelirken bazılarında tam tersi olabiliyor. Tarayıcılar arası farkların detaylarına girmeyeceğim fakat mantığı anlamakta fayda var.

Artık ScrollMiktari değişkenimize scroll değerini aldıktan sonra gelen değerin pozitif veya negatif olmasına göre Image nesnemizi boyutlandırmamız gerekiyor.

    if (ScrollMiktari)

    {

        var Boyutlandir = document.getElementById("SilverlightControl").content.findName("Boyutlandir");

        if (ScrollMiktari > 0)

        {

            Boyutlandir.ScaleX = Boyutlandir.ScaleX  + 0.1;

            Boyutlandir.ScaleY = Boyutlandir.ScaleX  +  0.1;

        }

        else

        {

            Boyutlandir.ScaleX = Boyutlandir.ScaleY - 0.1;

            Boyutlandir.ScaleY = Boyutlandir.ScaleY - 0.1;

        }

    }

Gördüğünüz gibi ilk başta sayfadaki Silverlight kontrolümüzü bularak içerisinden Boyutlandir nesnemizi bir değişkene aktarıyoruz. Sonrasında da ScrollMiktarı'nın durumuna göre Boyutlandir'in ScaleX ve ScaleY değerlerini 0.1 artırıyor veya azaltıyoruz.

Son olarak yapmamız gereken işlem ise Silverlight uygulamamızın bulunduğu sayfanın kendi içinde Scroll etmesini engellemek. Bunun için de fonksiyonumuzun sonunda MouseScroll durumunu tarayıcının değerlendirmesini sonlandırmak için olumsuz değerler geri döndürüyor olacağız.

    if (event.preventDefault)

        event.preventDefault();

    event.returnValue = false;

Yazacağımız JavaScript kodları sonlandığında göre artık Page.xaml.js dosyasının son halini inceleyebiliriz.

if (!window.UntitledProject1)

    window.UntitledProject1 = {};

 

UntitledProject1.Page = function()

{

}

 

UntitledProject1.Page.prototype =

{

    handleLoad: function(control, userContext, rootElement)

    {

    if (window.addEventListener)

        window.addEventListener('DOMMouseScroll', ScrollOldu, false);

        document.onmousewheel = ScrollOldu;

        window.onmousewheel = document.onmousewheel;

    }

}

function ScrollOldu(event)

{

    var ScrollMiktari = 0;

    if (!event)

        event = window.event;

    if (event.wheelDelta)

    {

        ScrollMiktari = event.wheelDelta;

        if (window.opera)

            ScrollMiktari = -ScrollMiktari;

    }

    else if (event.detail)

        ScrollMiktari = -event.detail;

    if (ScrollMiktari)

    {

        var Boyutlandir = document.getElementById("SilverlightControl").content.findName("Boyutlandir");

        if (ScrollMiktari > 0)

        {

            Boyutlandir.ScaleX = Boyutlandir.ScaleX  + 0.1;

            Boyutlandir.ScaleY = Boyutlandir.ScaleX  +  0.1;

        }

        else

        {

            Boyutlandir.ScaleX = Boyutlandir.ScaleY - 0.1;

            Boyutlandir.ScaleY = Boyutlandir.ScaleY - 0.1;

        }

    }

    if (event.preventDefault)

        event.preventDefault();

    event.returnValue = false;

}

Hepinize kolay gelsin.

Saturday, February 23, 2008 1:26:11 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Friday, February 22, 2008

Bundan bir süre önce Microsoft'un Students 2 Business programı çerçevesinde bir Silverlight eğitimi düzenlemiştik. Eğitim içerisinde bir ara sınıfı mini bir stüdyoya çevirerek bir video kaydı da yapıldı :) Sonunda söz konusu video kaydı Microsoft'un ücretsiz Silverlight Hosting hizmeti olan Silverlight Streaming Services kullanılarak S2B sitesinde yayınlandı.

Video sınıftaki sıcaklığı pek yansıtamamış ama olsun :) Normalde çok daha eğlenceli bir sınıftık.

Friday, February 22, 2008 12:05:28 AM (GTB Standard Time, UTC+02:00)  #    Comments [1]   Eğitimler | Silverlight  | 
 Wednesday, February 20, 2008

Silverlight çıktığından bu yana özellikle yurt dışında bir çok ücretsiz ve açık kaynak kodlu proje yayınlandı. Bunların arasında gerçek hayatta kullanılabilirliği en yüksek olan proje Slide.Show projesi. Bu yazıda yukarıdan aşağıda Slide.Show'u inceleyerek kurulumuna ve özelleştirilmesine değineceğiz.

Slide.Show paketini aşağıdaki adreste yer alan SlideShowSource linkine tıklayarak bilgisayarınıza indirebilirsiniz.

http://www.codeplex.com/SlideShow/Release/ProjectReleases.aspx?ReleaseId=8862

Slide.Show paketini kullanmak üzere Expression Web ile "File / New / Web Site" menüsünden yeni bir web sitesi yaratalım. Yarattığımız web sitesinde de boş bir HTML dosyası ekleyelim. Örneğimizde Slide.Show'u harici bir XML dosyasına bağlayacağız. Bir sonraki adımda Slide.Show kontrolüne ait Silverlight.js ve Slideshow.js dosyalarını projemize eklememiz gerekiyor. Bunun için Expression Web içerisinde "File / Import / File" menüsünden biraz önce indirmiş olduğumuz Slide.Show paketi içerisinde "Scripts/Release" klasöründe yer alan iki JavaScript dosyasını seçiyoruz. Sıra geldi bu her iki dosyayı da HTML sayfamıza linklemeye. Aşağıdaki şekilde bir kod ile o işlemi de tamamlayabiliriz.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>

 

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

<title>Daron Yöndem Photo Gallery</title>

<script type="text/javascript" src="Silverlight.js"></script>

<script type="text/javascript" src="SlideShow.js"></script>

</head>

 

<body>

 

</body>

 

</html>

Yapacağımız örnekte Slide.Show tüm sayfayı kaplayacağı için aşağıdaki şekilde CSS tanımlamaları da yapmamız gerekecek.

    <style type="text/css">

        html,body,.SlideShow

        {

            height: 100%;

        }

        body

        {

            margin: 0px;

        }

    </style>

Son olarak Slide.Show kontrolünü sayfaya yerleştirmek üzere gerekli JavaScript kodunu da yazarak sayfamızın HTML yapısını aşağıdaki şekilde tamamlıyoruz.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>

 

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

<title>Daron Yöndem Photo Gallery</title>

<script type="text/javascript" src="Silverlight.js"></script>

<script type="text/javascript" src="SlideShow.js"></script>

    <style type="text/css">

        html,body,.SlideShow

        {

            height: 100%;

        }

        body

        {

            margin: 0px;

        }

    </style>

</head>

 

<body>

    <script type="text/javascript">

        new SlideShow.Control(new SlideShow.XmlConfigProvider());

    </script>

</body>

 

</html>

Sıra geldi Silverlight.js ve Slideshow.js dosyamız ile aynı konumda bulunacak olan ve uygulamamızla ilgili tüm ayarları içerek olan Configuration.xml dosyasını düzenlemeye. Bunun için Expression Web içerisinde "File / New / XML" komutunu kullanabilirsiniz. Yaratacağımız Slide.Show uygulamasında kullanacağımız harici componentler de olacak. Söz konusu componentler Slide.Show download paketi içerisinde Script/Debug klasöründe bulunuyor. Bu klasörde bulunan tüm dosyaları kendi projemizde bir Scripts klasörü oluşturarak içerisine kopyalayalım. Böylece Configuration.xml içerisinde bu dosyaları linkleyerek uygulamamıza ek özellikler katabileceğiz.

<?xml version="1.0" encoding="utf-8" ?>

<configuration width="100%" height="100%">

  <scripts>

    <script key="AlbumViewer" url="Scripts/AlbumViewer.js" />

    <script key="Button" url="Scripts/Button.js" />

    <script key="DataProvider" url="Scripts/DataProvider.js" />

    <script key="NavigationTray" url="Scripts/NavigationTray.js" />

    <script key="ProgressIndicator" url="Scripts/ProgressIndicator.js" />

    <script key="SlideDescription" url="Scripts/SlideDescription.js" />

    <script key="SlideViewer" url="Scripts/SlideViewer.js" />

    <script key="ThumbnailViewer" url="Scripts/ThumbnailViewer.js" />

    <script key="Transition" url="Scripts/Transition.js" />

  </scripts>

  <modules>

    <module type="SlideViewer" />

    <module type="ProgressBar" />

    <module type="SlideDescription" />

    <module type="NavigationTray">

      <option name="initialAlbumView" value="true" />

    </module>

  </modules>

  <transitions>

    <transition type="FadeTransition" name="CrossFadeTransition" />

    <transition type="ShapeTransition" name="CircleOutTransition" />

    <transition type="SlideTransition" name="SlideLeftTransition" />

    <transition type="SlideTransition" name="SlideDownTransition">

      <option name="direction" value="Down" />

    </transition>

    <transition type="WipeTransition" name="WipeRightTransition">

      <option name="direction" value="Right" />

    </transition>

  </transitions>

  <dataProvider type="XmlDataProvider" />

</configuration>

Yukarıda gördüğünüz Configuration dosyası içerisinde SlideShow uygulamamızda kullanacağımız modülleri, script dosyalarını ve geçiş efektlerini belirliyoruz. Son olarak sıra geldi Slide.Show içerisinde gösterilecek olan fotoğrafların bir listesini ayrı bir XML dosyası içerisine yerleştirmeye. Bu noktada da data.xml adında bir dosya yaratarak aşağıdaki şekilde albümler ve fotoğraflar yaratabiliyoruz.

<data transition="CrossFadeTransition">

  <album

    title="Silverlight Trainings"

    description="All around the world"

    image="Images/a29.jpg">

    <slide

      title="Microsoft Turkey Silverlight Trainings"

      description="Happy times."

      image="Images/s07.jpg"

      thumbnail="Images/t07.jpg" />

  </album>

</data>

Yukarıdaki yapıyı takip ederek birden çok albüm ve her albüme birden çok fotoğraf ekleyebilirsiniz. Albümlere ait kapak resmini Album tagının içerisinde image özelliğine atarken her bir slayt için de Slide tagına bir normal fotoğraf bir de thumbnail fotoğrafı aktarmanız gerekiyor.

Tüm bu ayarları tamamladıktan sonra ayrı uygulamanızı internet üzerinden yayınlayabilirsiniz.

Hepinize kolay gelsin.

Wednesday, February 20, 2008 9:46:00 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Tuesday, February 19, 2008

Silverlight animasyonları içerisinde XAML ile tanımlanan tüm nesneleri dinamik olarak kod ile de tanımlama şansımız var. Bu makalede Silverlight ile dinamik içerik üretimine dair detaylardan bahsedeceğiz.

Silverlight içerisinde dinamik içerik üretebilmek için kullanacağımız JavaScript metodu createFromXaml adında. Bu metod sadece tek bir parametre alıyor, o da üreteceğimiz nesneye ait XAML kodunun ta kendisi. İstediğimiz herhangi bir XAML kodunu createFromXaml metoduna vererek geriye uygun bir JavaScript nesnesi alabiliyoruz. Gelin ufak bir örnek ile konuya giriş yapalım. Aşağıda bir dikdörtgenin XAML kodu bulunuyor, aynı dikdörtgeni JavaScript ile yaratacağız.

<Rectangle Width="100" Height="100" Fill="#FFFF0000" Canvas.Left="100" Canvas.Top="100"/>

Yukarıdaki dikdörtgenin aynısı JavaScript ile yaratabilmek için ilk seçeneğimiz createFromXaml metoduna Rectangle tagını vererek dikdörtgenin özelliklerini ayrı ayrı ayarlamak.

        var Dikdortgen = control.content.createFromXaml("<Rectangle/>");

        Dikdortgen.width = 100;

        Dikdortgen.height = 100;

        Dikdortgen["Canvas.Left"] = 100;

        Dikdortgen["Canvas.Top"] = 100;

        Dikdortgen.Fill = "#FFFF0000";

        rootElement.children.add(Dikdortgen);

Yukarıdaki kodun ilk satırında createFromXaml metodu ile dikdörtgenimizi yaratarak Dikdortgen adındaki bir değişkene aktarıyoruz. Sonrasında da her satırda Dikdortgen değişkeni ile ilgili bir özelliği ayarlıyoruz. En son satırda ise elde ettiğimiz Dikdortgen nesnesini root Silverlight elementinin içine eklemek için children.add metodunu kullanıyoruz. Bu şekli ile birden çok dikdörtgeni farklı özellikler ile dinamik olarak Silverlight animasyonlarına ekleyebilirsiniz.

Örneğimizde bahsi geçen dikdörtgen nesnesini dinamik olarak yaratmanın bir diğer yolu da doğrudan tüm XAML kodunu createFromXaml metoduna topluca vermek. Böylece tek tek dikdörtgenin özelliklerini sonradan ayarlamaya ihtiyaç duymadan daha az kod ile sorunumuzu çözebiliriz.

        var Dikdortgen = control.content.createFromXaml('<Rectangle Width="100" Height="100" Fill="#FFFF0000" Canvas.Left="100" Canvas.Top="100"/>');

        rootElement.children.add(Dikdortgen);

Buraya kadar yaptığımız tüm örneklerde isimsiz nesneler kullandık. Yarattığımız hiçbir dikdörtgenin özel bir ismi yok. Eğer bu dikdörtgenlere veya yarattığınız farklı nesnelere sonradan programatik olarak ulaşabilmek isterseniz baştan bu nesnelere birer isim vermiş olmak gerekecektir. Böyle bir durumda dikdörtgenimizin kodu aşağıdaki şekilde olacaktır.

  <Rectangle x:Name="KUTU" Width="100" Height="100" Fill="#FFFF0000" Canvas.Left="100" Canvas.Top="100"/>

İlk dikdörtgenimize ek olarak bu dikdörtgenin x:Name şeklinde bir özelliği var ve söz konusu özelliğe KUTU değeri aktarılmış. Böylece bu nesneye programatik olarak KUTU adı üzerinden ulaşabileceğiz. Esas sorun yukarıdaki kodu createFromXaml metoduna verdiğinizde karşınıza çıkacak. createFromXaml metodu sürekli hata verecek ve maalesef verdiği hata mesajının da pek anlamlı olmaması sizi çözüm yoluna yönlendirmeyecektir. Bu tarz bir durumda createFromXaml'ın hata vermesinin aslında basit bir nedeni var. x:Name olarak dikdörtgene verdiğimiz özellik aslında XML yazım kuralları gereği ikinci bir namespace kullanıldığı anlamına geliyor. Söz konusu namespace aslında her Silverlight XAML dosyasının roor (kök) elementinde tanımlı durumda.

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="640" Height="480"

  Background="White"

  x:Name="Page"

  >

  <Rectangle x:Name="KUTU" Width="100" Height="100" Fill="#FFFF0000" Canvas.Left="100" Canvas.Top="100"/>

</Canvas>

Yukarıdaki kod içerisinde kalın olarak yazılı kısımda bulabileceğiniz namespace tanımları kök Canvas nesnesinde tanımlanmış olduğu için tüm alt nesneler için de geçerli olacaktır. Oysa bizim createFromXaml metoduna verdiğimiz XAML kodunda kullanılan x namespace'inden createFromXaml metodunun haberi yok. Bu durumda aynı namespace tanımlarını createFromXaml'a verdiğimiz kod içerisinde de yapmak zorundayız.

        var Dikdortgen = control.content.createFromXaml('<Rectangle xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="KUTU" Width="100" Height="100" Fill="#FFFF0000" Canvas.Left="100" Canvas.Top="100"/>');

        rootElement.children.add(Dikdortgen);

Yukarıdaki kod içerisinde de gördüğünüz üzere artık createFromXaml metoduna verdiğimiz XAML koduna gerekli namespace tanımlamalarını da ekledik. Böylece herhangi bir hata ile karşılaşmadan istediğimiz isimlerde nesneler yaratarak dinamik olarak animasyonlara ekleyebilir ve bu nesnelere sonradan programatik olarak da ulaşabiliriz.

Hepinize kolay gelsin.

Tuesday, February 19, 2008 4:51:47 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Saturday, February 16, 2008

Silverlight animasyonları içerisindeki nesnelerin dinamik olarak kullanıcılar tarafından boyutlandırılmasını sağlayabilirsiniz. Bunun için de tabi ki en hızlı yol kullanıcıya fare ile herhangi bir nesneyi tutarak büyütüp küçültme şansı tanımaktır. Bu makalemizde bu çeşit bir işlevselliği nasıl oluşturabileceğimizi inceleyeceğiz.

Yeni bir Silverlight projesi oluşturarak sahneye deneme amaçlı olarak bir Rectangle nesnesi yerleştirelim. Amacımız kullanıcıların bu nesneye tıklayarak dikdörtgeni fare ile büyütüp küçültebilmelerini sağlamak. Dikdörtgene tıkladıktan sonra fare ile nesneden uzaklaştıkça çizim büyüyecek, nesnenin sol üst köşesine yaklaştıkça dikdörtgen küçülecek.

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="640" Height="480"

  Background="White"

  x:Name="Page"

  >

  <Rectangle MouseLeftButtonDown="FareGeldi" MouseMove="FareHareketli" MouseLeftButtonUp="FareGitti" Width="249" Height="237" Fill="#FFFF0000" Stroke="#FF000000" Canvas.Left="86" Canvas.Top="36"/>

</Canvas>

Yukarıdaki şekliyle Silverlifght animasyonumuzu hazırlıyoruz. XAML kodumuz içerisinde bir dikdörtgen bulunuyor. Bu dikdörtgen yerine siz örneklerinizde MediaElement gibi içerisinde video oynayan nesneler de kullanabilirsiniz. Dikdörtgenimize tıklandığında büyüme ve küçülme işlemleri olacağı için dikdörtgenin MouseLeftButtonDown, MouseMove ve MouseLeftButtonUp durumlarına ayrı ayrı JavaScript fonksiyonları yazmamız gerekiyor. Gelin tek tek bu fonksiyonları yazmaya başlayalım.

var FareBasili;

var SonDurum = {};

 

function FareGeldi(sender,args)

{

    sender.captureMouse();

    FareBasili=true;

    SonDurum = args.getPosition(null);

}

İlk olarak fareye ilk tıklandığında çalıştırılacak olan FareGeldi fonksiyonunu yazıyor. Söz konusu fonksiyon içerisinde farenin durumunu global olarak yakalayabilmemizi sağlayacakolan captureMouse metodunu çağırdıktan sonra FareBasili adında düzenlemiş olduğumuz global değişkenin değerini true olarak değiştiriyoruz. Böylece bir sonraki adımda fare hareketini yakalarken büyütme işlemi başlatılmış mı yoksa başlatılmamış mı kontrolünü yapabileceğiz. Son olarak da farenin sahnedeki konumunu yine global değişkenimiz olan SonDurum değişkenine aktarıyoruz.

function FareHareketli(sender,args)

{

    if(FareBasili)

    {

        sender.width += args.getPosition(null).X - SonDurum.X;

        sender.height += args.getPosition(null).Y - SonDurum.Y;

        SonDurum = args.getPosition(null);

    }

}

Dikdörtgen nesnesi üzerinde fare hareket ettikçe tetiklenecek olan MouseMove durumuna bağlı FareHareketli fonksiyonu içerisinde ilk olarak dikdörtgene basılarak herhangi bir büyütme veya küçültme işleminin başlatılıp başlatılmadığı kontrol etmek için FareBasili değişkeninin değerine bakıyoruz. Eğer öncesinde bir büyütme işlemi başlatılmış ise gerekli değişiklikleri yapıyoruz. Farenin güncel konumu ile bir önceki konumu arasında farkı alıp bu farkı nesnenin genişlik ve yükseklik değerlerine ekliyoruz. Son olarak da farenin güncel konumunu tekrar global değişkenimize kaydederek işlemi bitiyoruz. Böylece fare hareket ettikçe gerçekleşen konum değişikliği kadar piksel değeri nesnenin boyutuna yansıtılacak.

function FareGitti(sender,args)

{

    sender.releaseMouseCapture();

    FareBasili = false;

}

Son olarak MouseLeftButtonUp durumunda çalışacak olan FareGitti fonksiyonumuzu yazıyoruz. Bu fonksiyon kullanıcı farenin düğmesinden parmağını çektiğinde çalışacak. Yani artık büyütme veya küçültme işlemi sonlandı. Bu durumdan MouseMove event'ını haberdar edebilmek için hemen global değişkenimizi false olarak değiştiriyoruz.

Artık örneğimiz çalışmaya hazır. Örneğin son halinin kaynak kodları şu şekilde;

[Page.xaml.js]

if
(!window.Resize)

    window.Resize = {};

 

Resize.Page = function()

{

}

 

Resize.Page.prototype =

{

    handleLoad: function(control, userContext, rootElement)

    {

    }

}

 

var FareBasili;

var SonDurum = {};

 

function FareGeldi(sender,args)

{

    sender.captureMouse();

    FareBasili=true;

    SonDurum = args.getPosition(null);

}

function FareHareketli(sender,args)

{

    if(FareBasili)

    {

        sender.width += args.getPosition(null).X - SonDurum.X;

        sender.height += args.getPosition(null).Y - SonDurum.Y;

        SonDurum = args.getPosition(null);

    }

}

function FareGitti(sender,args)

{

    sender.releaseMouseCapture();

    FareBasili = false;

}

Hepinize kolay gelsin.

Saturday, February 16, 2008 2:19:33 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Friday, February 15, 2008

Silverlight içerisinde fare ile nesneler arasında bir etkileşim kurmak için JavaScript ile çok farklı kodlar yazılabilir. Bu makalede herhangi bir nesneyi fare ile tutarak sahnede kendi etrafında çevirmeyi deneyeceğiz. Bunun için hemen yeni bir Silverlight animasyonu yaratıyoruz ve içerisinde örnek olması amacıyla ufak bir resim yerleştiriyoruz. Image nesnesinin adını Foto olarak verdikten sonra Image tagları arasına aşağıdaki şekliyle RotateTransform nesnesi yerleştirmemiz gerekiyor.

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="400" Height="400"

  Background="White"

  x:Name="Page"

  >

  <Image Width="185" Height="184" Canvas.Left="110" Canvas.Top="103" Source="image[1].jpg" x:Name="Foto" RenderTransformOrigin="0.5,0.5">

    <Image.RenderTransform>

      <TransformGroup>

        <RotateTransform x:Name="FotoAci" Angle="0"/>

      </TransformGroup>

    </Image.RenderTransform>

  </Image>

</Canvas>

Yukarıdaki kod içerisinde özellikle dikkat etmemiz gereken iki nokta var. Bunlardan ilki Image nesnemizin adının Foto olması, ikincisi ise aynı şekilde Foto'ya ait RotateTransform nesnesine de FotoAci ismini vermiş olmamış. Bu isimler üzerinden söz konusu nesnelere ulaşıyor olacağız.

Kullanıcılar fotoğrafımıza tıklayarak döndürme işlemini başlatabilsinler. Yani Foto nesnesinin MouseLeftButtonDown durumunu kontrol etmeliyiz. Aynı şekilde döndürme işlemini bitirebilmek için MouseLeftButtonUp durumunu da kontrol etmemiz gerekecek. Fakat bunların haricinde fare ile döndürme işlemi yapılırken kullanıcı Foto nesnesinin dışına da çıkabilir. Bu durumda döndürmenin devam edebilmesi için tüm sahnedeki MouseMouve durumunu kontrol etmemiz gerekecek. Ayrıca döndürme işlemine fotoğrafın üzerinde başlayıp dışarıda sonlandırılabilir. Özetle aşağıdaki şekilde dört farklı durumu kontrol etmemiz gerekiyor.

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="400" Height="400"

  Background="White"

  x:Name="Page"

  MouseMove="FareHareketli"

  MouseLeftButtonUp="FareGitti"

  >

  <Image MouseLeftButtonDown="FareGeldi" MouseLeftButtonUp="FareGitti" Width="185" Height="184" Canvas.Left="110" Canvas.Top="103" Source="image[1].jpg" x:Name="Foto" RenderTransformOrigin="0.5,0.5">

    <Image.RenderTransform>

      <TransformGroup>

        <RotateTransform x:Name="FotoAci" Angle="0"/>

      </TransformGroup>

    </Image.RenderTransform>

  </Image>

</Canvas>

Şimdi sıra geldi gerekli JavaScript kodlarını yazmaya. Doğruda projemizin Page.xaml.js dosyasına yöneliyoruz. İlk olarak FareGeldi fonksiyonunu yazalım.

var FareBasili;

var SonDurum;

 

function FareGeldi(sender, args)

{

    //Global fare takibini başlat

    sender.captureMouse();

    //Tuşa BASILDI!! :)

    FareBasili = true;

    // Durumu bir kenara kaydet

    SonDurum = args.getPosition(null);

}

Yukarıdaki kodun öncesinde iki adet global değişken tanımlıyoruz. Bu değişkenlerden biri farenin tuşunun basılı olup olmadığı kontrol edecek. Böylece MouseMove durumunda gerekli işlemlerin yapılıp, yapılmamasını sağlayacağız. Diğer değişken ise fare imlecinin pozisyonunu bir kenara kaydediyor, ileride kullanıyor olacağız.

Sıra geldi nesneyi çevirme işlemine, yani FareHareketli JavaScript fonksiyonunu yazmaya.

function FareHareketli(sender,args)

{

    var GuncelDurum = args.getPosition(null);

 

    // Fareye basılı mı??

    if (FareBasili)

    {   

        var AciNesnesi = sender.findName("FotoAci");

 

       // Nesnenin merkez noktasının global

       //koordinatlarını bulalım.

        var Merkez = {};     

        Merkez.X = sender.findName("Foto")["Canvas.Left"] + sender.findName("Foto").width/2;

        Merkez.Y = sender.findName("Foto")["Canvas.Top"] + sender.findName("Foto").height/2;

 

        // Çeviri işlemi

        var SonAci = parseInt(Math.atan2(SonDurum.Y - Merkez.Y, SonDurum.X - Merkez.X) * 360 / (2 * Math.PI));

        var GuncelAci = parseInt(Math.atan2(GuncelDurum.Y - Merkez.Y, GuncelDurum.X - Merkez.X) * 360 / (2 * Math.PI));

        AciNesnesi.Angle += GuncelAci-SonAci;

 

        // Son durumu tekrar sakla.

        SonDurum = GuncelDurum;

    }

}

Yukarıdaki kod sizi korkutmasın. Aslında epey basit bir işlemden bahsediyoruz. İlk satırda farenin güncel koordinatlarını alıyoruz sonrasında da fareye basılı mı yoksa değil mi kontrolünü yapmak için kendi FareBasili değişkenimize danışıyoruz. Eğer farenin düğmesine basılmış ise döndürme işlemini yapmamız gerekecek.

Döndürme işlemini yaptıktan sonra hesapladığımız yeni açı değerini adını FotoAci koyduğumuz RotateTransform nesnesine aktarmamız gerekecek. O nedenle baştan nesnemizi AciNesnesi adında bir değişkene aktarıyoruz. Sıra geldi hesaplamalara; kullanacağımız teknik farenin sahnedeki konumu ile çevirmek istediğimiz nesnenin merkez noktası arasında bir doğru çizerek bu döğrunun X aksına açısını almak olacak. Bu nedenle ilk olarak nesnenin merkezinin global koordinatlarını buluyoruz. Sonrasında açı hesaplama işlemlerini yaparken ilk olarak bir önceki durumdaki, yani bizim SonDurum değişkenine kaydettiğimiz durumdaki açıyı hesaplıyoruz sonra da şu anki durumdaki açıyı hesaplıyoruz. Açı hesaplama için standart JavaScript fonksiyonları kullanıyoruz. Kullandığımız esas fonksiyon olan Math.atan2 geriye Radiant döndürdüğü için onu da dereceye çeviriyoruz.

Son olarak önceki ile sonraki açı arasındaki farkı alarak RotateTransform nesnesinin açısına ekliyoruz. SonDurum değişkenini de güncelledikten sonra işimiz bitiyor.

İşimiz bitiyor derken sadece FareHareketli fonksiyonundan bahsediyordum. Tabi ki daha FareGitti fonksiyonunu da yazmamız lazım.

function FareGitti(sender,args)

{

    FareBasili = false;

    sender.releaseMouseCapture();

}

Gördüğünüz gibi FareGitti kısmı belki de işin en kolay kısmı. Global FareBasili değişkenimizi false yaptıktan sonra global fare yakalamayı da kapatıyoruz.

Artık projemizi çalıştırabiliriz. Foto nesnemizi faremiz ile istediğimiz gibi döndürebiliyoruz.

Hepinize kolay gelsin.

Friday, February 15, 2008 6:16:24 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Thursday, February 14, 2008

Bu makalemizde Silverlight ile bir EKG animasyonu yapacağız. Önce EKG çizimimizi Expression Design ile yapmalıyız. Bunun için 300*200px yeni bir dosya yaratarak "Pen Tool" ile sahneye bir doğru çizelim. Sonrasında çizdiğimiz doğruya "Add Anchor Point" aracını kullanarak birkaç nokta ekleyelim. Son olarak bu eklediğimiz noktalardan istediklerimizi "Direct Selection Tool" ile seçerek yukarı veya aşağı sürükleyerek bir EKG çizimi yaratabiliriz.

Expression Design içerisinde EKG çizimimiz.
Expression Design içerisinde EKG çizimimiz.

Çizimimiz tamamlandığında göre sıra geldi bu çizimi vektörel olarak Expression Blend tarafına almaya. File / Export menüsünden yola çıkarak Silverlight Canvas seçeneği üzerinden bir XAML çıktısı alıyoruz. XAML dosyası içerisindeki Layer1 adındaki Canvas elementini Blend içerisine kopyalayacağız. Tabi bunun için önce Expression Blend 2 ile yeni bir Silverlight projesi yaratmamız gerekiyor.

Expression Design'dan aldığımız XAML kodunu Blend 2 içerisine yapıştırdığımızda Silverlight uygulamamızın XAML kodu aşağıdaki şekilde oluyor.

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="300" Height="200"

  Background="White"

  x:Name="Page"

  >

  <Canvas x:Name="Layer_1" Width="300" Height="200" Canvas.Left="0" Canvas.Top="0">

    <Path Width="300.488" Height="194.519" Canvas.Left="-0.594986" Canvas.Top="5.19727" Stretch="Fill" StrokeThickness="2" StrokeLineJoin="Round" Stroke="#FF000000" Data="F1 M 0.405014,137.11L 30.6097,137.11L 42.6763,76.7877L 53.0284,146.736L 59.0672,127.484L 67.733,137.11L 153.962,137.11L 181.568,6.19727L 203.997,198.717L 223.839,65.2365L 241.092,151.87L 248.857,137.11L 298.893,137.11"/>

  </Canvas>

</Canvas>

Kod içerisinde Path olarak gözüken kısım bizim çizimimiz ta kendisi. Layer_1 adındaki Canvas da Expression Design tarafındaki Layer'ımız. Şimdi sıra geldi ince ayarlar yapmaya. İlk olarak Silverlight animasyonunun fonunu siyah yapalım, sonra da Path nesnemizin Stroke rengini parlak yeşile çevirelim. Böylece koyu bir arkaplan üzerinde yeşil kalp atışları gözükecek. Kalp atışlarının normal EKG gibi gözükmesi için bir maske kullanacağız. Maske olarak kullanılmak üzere sahnenin kenarına ekranın dışına bir dikdörtgen çizelim.

Maskemiz kenarda bizi bekliyor.
Maskemiz kenarda bizi bekliyor.

Maskemizi çizdiğimize göre sıra geldi onu gerçekten Path'imize maske olarak atamaya. Bunun için Expression Blend 2 içerisinde "Objects and Timeline" panelinde hem Path'in içerisinde bulunduğu Canvas'ı hem de dikdörtgenimizi seçerek sağ tuş ile tıklıyoruz. Gelen menüden "Path / Make Clipping Path" komutunu vererek dikdörtgenin bir maske haline gelmesini sağlıyoryz.

"Make Clipping Path" ile maskeleme.
"Make Clipping Path" ile maskeleme.

Şimdi sora geldi gerekli animasyonu yaratmaya. Animasyonumuzda maske olarak ayarladığımız dikdörgenin ekranın solundan sağına doğru dolaşması gerekiyor. Bunun için yeni bir StoryBoard yaratalım. Sahne ilk açıldığında animasyonun otomatik başlaması için "Create as a resource" seçeneğini deaktif bırakalım.

Animasyonu maskemize vereceğimiz için bir şekilde maskemizi seçebiliyor olmamız gerekir. Maskeleme yaptığınız herhangi bir nesneyi seçerek araç çubuğundan "Direct Selection Tool"'u seçtiğinizde maskeye müdahale edebildiğinizi göreceksiniz. Bu şekilde animasyonumuz içerisinde iki farklı KeyFrame kaydederek maskeyi farklı konumlara getirebiliriz.

Artık animasyonumuz hazır. Son olarak StoryBoard'un RepeatBehavior özelliğini de Forever yaparsanız sürekli tekrar edecektir. Uygulamanın son haline ait XAML kodu aşağıdaki şekilde.

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="300" Height="200"

  Background="#FF000000"

  x:Name="Page"

  >

  <Canvas.Triggers>

    <EventTrigger RoutedEvent="Canvas.Loaded">

      <BeginStoryboard>

        <Storyboard RepeatBehavior="Forever" x:Name="Storyboard1">

          <PointAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Layer_1" Storyboard.TargetProperty="(UIElement.Clip).(PathGeometry.Figures)[0].(PathFigure.StartPoint)">

            <SplinePointKeyFrame KeyTime="00:00:00" Value="-31.5,-28.5"/>

            <SplinePointKeyFrame KeyTime="00:00:02" Value="308,-29.5"/>

          </PointAnimationUsingKeyFrames>

          <PointAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Layer_1" Storyboard.TargetProperty="(UIElement.Clip).(PathGeometry.Figures)[0].(PathFigure.Segments)[0].(LineSegment.Point)">

            <SplinePointKeyFrame KeyTime="00:00:00" Value="-9.5,-28.5"/>

            <SplinePointKeyFrame KeyTime="00:00:02" Value="330,-29.5"/>

          </PointAnimationUsingKeyFrames>

          <PointAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Layer_1" Storyboard.TargetProperty="(UIElement.Clip).(PathGeometry.Figures)[0].(PathFigure.Segments)[1].(LineSegment.Point)">

            <SplinePointKeyFrame KeyTime="00:00:00" Value="-9.5,228.5"/>

            <SplinePointKeyFrame KeyTime="00:00:02" Value="330,227.5"/>

          </PointAnimationUsingKeyFrames>

          <PointAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Layer_1" Storyboard.TargetProperty="(UIElement.Clip).(PathGeometry.Figures)[0].(PathFigure.Segments)[2].(LineSegment.Point)">

            <SplinePointKeyFrame KeyTime="00:00:00" Value="-31.5,228.5"/>

            <SplinePointKeyFrame KeyTime="00:00:02" Value="308,227.5"/>

          </PointAnimationUsingKeyFrames>

        </Storyboard>

      </BeginStoryboard>

    </EventTrigger>

  </Canvas.Triggers>

    <Canvas x:Name="Layer_1" Width="300" Height="200" Canvas.Left="0" Canvas.Top="0">

      <Canvas.Clip>

        <PathGeometry>

          <PathFigure IsClosed="True" StartPoint="-31.5,-28.5">

            <LineSegment Point="-9.5,-28.5"/>

            <LineSegment Point="-9.5,228.5"/>

            <LineSegment Point="-31.5,228.5"/>

          </PathFigure>

        </PathGeometry>

      </Canvas.Clip>

    <Path Width="300.488" Height="194.519" Canvas.Left="-0.594986" Canvas.Top="5.19727" Stretch="Fill" StrokeThickness="2" StrokeLineJoin="Round" Stroke="#FF23FF00" Data="F1 M 0.405014,137.11L 30.6097,137.11L 42.6763,76.7877L 53.0284,146.736L 59.0672,127.484L 67.733,137.11L 153.962,137.11L 181.568,6.19727L 203.997,198.717L 223.839,65.2365L 241.092,151.87L 248.857,137.11L 298.893,137.11"/>

  </Canvas>

</Canvas>

Hepinize kolay gelsin.

Thursday, February 14, 2008 6:07:11 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Wednesday, February 13, 2008

Silverlight uygulamaları içerisinde ister sürükle&bırak sistemleri kullanın ister doğrudan InkPresenter gibi fare imlecinin farklı anlamlar taşıdığı uygulamalara değinin yeri geldiğinde farenin imlecini bir Silverlight nesnesi ile değiştirebiliyor olmak gerçekten hoş olurdu. Bu yazıda bu yolda neler yapabileceğimize bakacağız.

İlk olarak Silverlight uygulamamızda imlecimizi oluşturacak olan nesneyi oluşturalım. Bunun için ufak bir daire çizerek sahneye yerleştirelim.

<Canvas xmlns="http://schemas.microsoft.com/client/2007"

      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

      Width="640"

      Height="480"

      Background="White"

      x:Name="Page">

  <Ellipse x:Name="Imlec"

          Width="8"

          Height="8"

          Fill="#FFFF0000"

          Stroke="#FF000000"

          Canvas.Left="176"

          Canvas.Top="231" />

</Canvas>

Gördüğünüz gibi yukarıdaki kodumuz içerisinde adını Imlec olarak koymuş olduğumuz bir Ellipse nesnesi bulunuyor. Bu nesnenin farenin esas imleci ile aynı konumda yer alması için Silverlight ana Canvas'ımızın MouseMove durumunu kontrol ederek farenin ekrandaki pozisyonunu alarak Imlec nesnemizin özelliklerine, yani sahnedeki yerine yansıtacağız. MouseMove durumunu aşağıdaki gibi tanımlayalım.

<Canvas xmlns="http://schemas.microsoft.com/client/2007"

      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

      Width="640"

      Height="480"

      Background="White"

      x:Name="Page"

      MouseMove="FareSallandi">

  <Ellipse x:Name="Imlec"

          Width="8"

          Height="8"

          Fill="#FFFF0000"

          Stroke="#FF000000"

          Canvas.Left="176"

          Canvas.Top="231" />

</Canvas>

Sıra geldi FareSallandi adındaki JavaScript fonksiyonunu yazmaya.

function FareSallandi(sender, args)

{

  //Farenin mevcut koordinatlarını değişkenlere alıyoruz.

  var fareX = args.getPosition(null).x;

  var fareY = args.getPosition(null).y;

 

  // Imlec nesnemizin konumunu fareninkonumuna göre değiştiriyoruz.

  sender.findName("Imlec")["Canvas.Left"] = fareX - (sender.findName("Imlec")["Width"] / 2);

  sender.findName("Imlec")["Canvas.Top"] = fareY - (sender.findName("Imlec")["Height"] / 2);

}

Yukarıdaki kod içerisinde özellikle parametre olarak gelen args deyimine dikkat etmekte fayda var. args parametresi üzerinde getPosition metodu ile farenin pozisyonunu alabiliyoruz. Aldığımız X ve Y poziyonlarını kendi değişkenlerimize kaydettikten sonra onları Imlec nesnesinin Canvas.Left ve Canvas.Top değerlerine aktarak Imlec'in fare imleci ile aynı konuma gelmesini sağlıyoruz.

Koordinat bilgilerini Imlec nesnesine aktarırken imlecin genişlik ve yüksekliğinin yarısını çıkartıyoruz, böylece Imlec görseli tam olarak farenin tıklayacağı yeri ortalayabilecek. Aksi halde biraz sağ altında kalacaktır.

Geriye tek bir sorun kalıyor; o da hala orijinal imlecin gözüküyor olması. Imlecin Silverlight içerisinde görünmemesi için ana Canvas nesnesinin Cursor özelliğini None olarak ayarlıyoruz ve son olarak XAML kodumuz aşağıdaki gibi oluyor.

<Canvas xmlns="http://schemas.microsoft.com/client/2007"

      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

      Width="640"

      Height="480"

      Background="White"

      x:Name="Page"

      MouseMove="FareSallandi"

      Cursor="None">

  <Ellipse x:Name="Imlec"

          Width="8"

          Height="8"

          Fill="#FFFF0000"

          Stroke="#FF000000"

          Canvas.Left="176"

          Canvas.Top="231" />

</Canvas>

Eğer isterseniz Imlec nesnesine bir de animasyon atayabilirsiniz. Söz konusu animasyonu Expression Blend 2 içerisinde "Create as a resource" demeden yaratırsanız Silverlight animasyonu sayfaya yüklendiği gibi başlayacaktır.

<Canvas xmlns="http://schemas.microsoft.com/client/2007"

      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

      Width="640"

      Height="480"

      Background="White"

      x:Name="Page"

      MouseMove="FareSallandi"

      Cursor="None">

  <Canvas.Triggers>

    <EventTrigger RoutedEvent="Canvas.Loaded">

      <BeginStoryboard>

        <Storyboard x:Name="FareAnim"

                  RepeatBehavior="Forever">

          <ColorAnimationUsingKeyFrames BeginTime="00:00:00"

                                      Storyboard.TargetName="Imlec"

                                      Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)">

            <SplineColorKeyFrame KeyTime="00:00:00"

                                Value="#FFFF0000" />

            <SplineColorKeyFrame KeyTime="00:00:00.5000000"

                                Value="#FFFFFFFF" />

            <SplineColorKeyFrame KeyTime="00:00:01"

                                Value="#FFFF0000" />

          </ColorAnimationUsingKeyFrames>

        </Storyboard>

      </BeginStoryboard>

    </EventTrigger>

  </Canvas.Triggers>

  <Ellipse x:Name="Imlec"

          Width="8"

          Height="8"

          Fill="#FFFF0000"

          Stroke="#FF000000"

          Canvas.Left="176"

          Canvas.Top="231" />

</Canvas>

Animasyonun sürekli tekrar etmesi için RepeatBehavior özelliğini Forever olarak ayarlayabilirsiniz. Böylece fare imleci animasyonlu bir Ellipse olacaktır.

Hepinize kolay gelsin.

 

Wednesday, February 13, 2008 1:53:10 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Sunday, February 10, 2008

Visual Studio 2008 ipuçlarına bir tane daha ekliyorum. Özellikle WPF veya Silverlight projeleri ile ilgili çalışmalar yapıyorken XAML dosyalarının görsel panelinin de gösteriliyor olması çoğu zaman can sıkıyor. Visua Studio görsel içerik hazırlama ortamı değil, büyük ihtimal ile Visual Studio içerisinde bir XAML dosyası açıyorsanız kod içerisinde elle müdahale yapmak istiyorsunuzdur.

Sözün özü; "Nasıl yaparız da Visual Studio'nun XAML dosyalarını otomatik olarak sadece kod görünümünde açmasını sağlarız?"

Visual Studio içerisinde "Tools / Options" menüsüne giderek "Text Editor / XAML / Miscellaneous" bölümünde aşağıdaki gibi bir ayarla karşılaşıyorsunuz.

XAML dosyaları sadece kod görüntüsünde açılsın.
XAML dosyaları sadece kod görüntüsünde açılsın.

Bu ayarı işaretledikten sonra XAML dosyalarını açtığınızda doğrudan kod görünümü gelecektir.

Hepinize kolay gelsin.

Sunday, February 10, 2008 1:53:40 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Saturday, February 09, 2008

Bu makalemizde hızlı bir şekilde örnek bir Silverlight düğmesi tasarlayarak fare ile üzerine gelindiğinde parlamasını üzerinden çekildiğinde de eski haline geri dönmesini sağlayacağız. İlk olarak düğmemizi çizmek için Expression Blend 2 içerisinde yeni bir Silverlight projesi yaratalım ve Rectangle çizim aracı ile bir dikdörtgen çizelim. Dikdörtgeni çizdikten sonra Expression Blend 2 içerisinde "Properties" tabından "Fill" kısmında SolidColor seçerek kırmızı tonlarından biri seçebiliriz. Son olarak da dikdörtgenimizin kenarlarında aşağıdaki fotoğraftaki gibi fare ile tutarak köşelerini yuvarlayalım.

Silverlight düğmemizi yaratıyoruz.
Silverlight düğmemizi yaratıyoruz.

Düğmemizi çizdiğimize göre parlama efekti için biraz değişiklik yapalım. SolidColor yerine Gradient seçerek beyazdan kırmızıya bir geçiş ayarlayarak Expression Blend 2 içerisinde sol araç çubuğundan "Brush Transform" aracını kullanarak aşağıdaki şekilde bir parlama efekti hazırlayalım.

Parlama efekti hazır.
Parlama efekti hazır.

Sıra geldi fare ile üzerine geldiğimizde çalışacak olan animasyonu hazırlamaya. Yapacağımız şey birer saniye arayla BrushTranform aracı ile parlama efektinin yani Gradient'ın yönünü değiştirmek. Animasyonumuzu hazırladıktan sonra düğmenin üzerinden fare ile çekildiğimizde çalıştırılmak üzere animasyonumuzun bir kopyasını yaratacağız.

Animasyonumuzun bir kopyasını alalım.
Animasyonumuzun bir kopyasını alalım.

Animasyonumuzun kopyasını aldıktan sonra "geri çekilme" animasyonunu yaratmak için bir önceki animasyondan aldığımız kopyayı tersine çevireceğiz. Bunun için yukarıdaki görselde de görebileceğiniz Blend içerisinde animasyon menüsünden "Reverse" komutunu kullanacağız. Böylece her iki animasyonumuz da hazır. Artık sıra geldi her iki animasyonun da zamanında çalışmasını sağlayacak kodları yazmaya.

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="300" Height="300"

  Background="White"

  x:Name="Page"

  >

  <Canvas.Resources>

    <Storyboard x:Name="Anim1">

      <PointAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(Shape.Fill).(RadialGradientBrush.GradientOrigin)">

        <SplinePointKeyFrame KeyTime="00:00:00" Value="-0.071,-0.091"/>

        <SplinePointKeyFrame KeyTime="00:00:01" Value="1.008,-0.061"/>

      </PointAnimationUsingKeyFrames>

    </Storyboard>

    <Storyboard x:Name="Anim_Copy1">

      <PointAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(Shape.Fill).(RadialGradientBrush.GradientOrigin)">

        <SplinePointKeyFrame KeyTime="00:00:00" Value="1.008,-0.061"/>

        <SplinePointKeyFrame KeyTime="00:00:01" Value="-0.071,-0.091"/>

      </PointAnimationUsingKeyFrames>

    </Storyboard>

  </Canvas.Resources>

  <Rectangle MouseEnter="Geldi" MouseLeave="Gitti" Width="127" Height="33" Stroke="#FF000000" Canvas.Left="62" Canvas.Top="163" RadiusY="10.5" RadiusX="10.5" RenderTransformOrigin="0.189,0.091" x:Name="rectangle">

    <Rectangle.Fill>

      <RadialGradientBrush GradientOrigin="1.008,-0.061">

        <GradientStop Color="#FFFFFFFF" Offset="0"/>

        <GradientStop Color="#FFFF0000" Offset="1"/>

      </RadialGradientBrush>

    </Rectangle.Fill>

  </Rectangle>

</Canvas>

Yukarıdaki XAML kodunda hazırladığımız tüm animasyonlar ve düğmemiz yer alıyor. Düğmemizin MouseEnter ve MouseLeave durumları ayrı JavaScript fonksiyonlarına bağlanmış durumda. Aşağıda söz konusu JavaScript fonksiyonlarını da inceleyebilirsiniz.

function Gitti(sender)

{

  sender.findName("Anim1").Begin();

}

function Geldi(sender)

{

  sender.findName("Anim_Copy1").Begin();

}

Her bir fonksiyon kendisine gönderilen Sender parametresi üzerinden düğmemizi yakalayarak, onun üzerinden de findName ile animasyonları bulup çalıştırıyor.

Böylece üzerine gelince veya fare ile üzerinden ayrıldığımızda uygun animasyonları çalıştıran bir düğmemiz oldu. Hepimize hayırlı olsun ;)

Saturday, February 09, 2008 2:23:24 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Friday, February 08, 2008

Her Silverlight projesinde yer alan en önemli dosyalardan biri Silverlight.js dosyasıdır. Bu dosya içerisinde özünde üç farklı JavaScript fonksiyonu tanımlanmıştır. Bunlar createObject, createObjectEx ve isInstalled fonksiyonlarıdır. Bu fonksiyonlardan createObjectEx yarattığımız her yeni Silverlight projesinde otomatik olarak kullanılan bir fonksiyondur. Bu makalemiz boyunca bu fonksiyonlarla yapabileceklerimize ve Silverlight.js dosyasının derinliklerine ineceğiz.

createObject ve createObjectEx Metodları

Her iki metod da aslında aynı işi yapıyor. Arada tek farkı createObject metodu aldığı parametreleri tek tek alırken createObjectEx metodu bir JSON dizisi olarak alıyor olması. Gelin hızlıca aldıkları parametrelere ve anlamlarına bir göz atalım.

  • Source: Silverlight animasyonuna yüklenecek olan XAML kaynağına ait bir adres veya sayfa içi blok ID'si alabilir.
  • Parent: Silverlight animasyonunun sayfada içerisine yerleştirileceği HTML elementinin ID bilgisini alır.
  • ID: Sayfadaki Silverlight animasyonunun adı olacak olan ID bilgisini alır. Bu ID sayfadaki başka bir HTML elementi tarafından kullanılmamış olmalıdır.
  • Properties : Silverlight animasyonu ile ilgili genişlik, yükseklik, fon rengi gibi özellikleri bir dizi olarak alır.
  • Events: Silverlight animasyonu ilk yaratılırken bağlanabilecek JavaScript durum fonksiyonlarının tanımlandığı yerdir. Tanımlanabilen durumlar onLoad ve onError durumlarıdır.
  • initParam: Kullanıcı tarafından gerektiğinde tanımlanan parametrelerdir.
  • Context: Kullanıcı tarafından gerektiğinde aktarılabilen ve onLoad duruma aktarılacak olan bir parametredir.

  Silverlight.createObjectEx({

    source: "Page.xaml",

    parentElement: document.getElementById("silverlightControlHost"),

    id: "SilverlightControl",

    properties: {

      width: "100%",

      height: "100%",

      version: "1.0"

    },

    events: {

      onLoad: Silverlight.createDelegate(scene, scene.handleLoad)

      }

    }

createObjectEx Metodu kullanım örneği.

  Silverlight.createObject(

    "Page.xaml",

    document.getElementById("silverlightControlHost"),

    "SilverlightControl",

    {

      width: "100%",

      height: "100%",

      version: "1.0"

    },

    {

      onLoad: Silverlight.createDelegate(scene, scene.handleLoad)

      }

    }

createObject Metodu kullanım örneği.

Yukarıda iki metod arasındaki kullanım farkını daha net bir şekilde görebilirsiniz. Her iki metod içerisinde de Properties listesi bir JSON listesi olarak aktarılıyor. Şimdi gelelin bu liste içerisinde neleri tanımlayabiliyor olduğumuza.

  • Width: Silverlight nesnesinin genişliğini belirler. Sabit bir piksel değeri olabileceği gibi bir yüzde değeri de içerebilir.
  • Height: Silverlight nesnesinin yüksekliğini belirler. Sabit bir piksel değeri olabileceği gibi bir yüzde değeri de içerebilir.
  • background: Silverlight nesnesinin fon rengini belirler. Varsayılan değeri null şeklindedir ve bu durum fon renginin beyaz olmasına neden olur.
  • isWindowless: Silverlight nesnesinin sayfa içerisinde nesnelerden bağımsız olarak yerleştirilebilmesini sağlar. True değeri aktarıldığında nesnenin background değeri artık şeffaflık da içerebilir. Silverlight animasyonu önüne HTML kontrollerini overlay koyabilmek için de bu teknik kullanılır.
  • frameRate: Silverlight nesnesinin maksimum gösterebileceği saniyede kare sayısını sınırlar. Desteklenen en yüksek sayı 64 şeklindedir. Varsayılan değer 24'tür.
  • inplaceInstallPrompt: Değeri true olduğunda standart Silverlight yükleme görseli yerine kullanıcı sözleşmesine de link içeren bir görsel kullanılır. Böylece kullanıcı Microsoft web sitesine yönlenmeden doğrudan Plug-In'i yüklemeye başlayabilir.
  • version: Silverlight animasyonunun çalıştırılabilmesi için istemcide yüklü olması gereken minimum Silverlight Plug-In sürümünü belirler.
  • ignoreBrowserVer: Silverlight animasyonu yüklenmeden önce tarayıcının Silverlight destekleyip desteklemediğinin kontrol edilmemesini sağlar. Varsayılan değeri false şeklindedir.
  • enableHtmlAccess: Silverlight animasyonu içerisindeki nesnelerin animasyon dışındaki sayfadaki HTML elementlerine ulaşıp ulaşamayacağını belirler. Varsayılan değeri true şeklindedir.

isInstalled

Otomatik kontrol işlemlerinin yanı sıra isterseniz kendi kontrol kodunuzu yazarak Silverlight.js içerisindeki isInstalled metodunu da kullanabilirsiniz. Böylece istemci tarafında hangi Silverlight Plug-In'in yüklü olduğunu görebilirsiniz.

    if(Silverlight.isInstalled("1.0"))

    {

      createSilverlight();

    }

    else

    {

      alert("AMAN TANRIM! Silverlight yüklü değil!!");

    }

Yukarıda gördüğünüz kod ile Silverlight Plug-In'in 1.0 sürümünün yüklü olup olmadığı kontrol ediyoruz. Eğer yüklü değilse uygun bir uyarı mesajı :) gösteriyoruz. Farklı senaryolarda bu noktada kullanıcıya farklı görsel uyarılar gösterilebilir.

Silverlight.js tarafında detaylar bu kadar. Hepinize kolay gelsin.

Friday, February 08, 2008 12:18:39 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Thursday, February 07, 2008

Bugün Microsoft İstanbul ofislerinde bir başka iş ortakları eğitimini daha bitirdik. Silverlight, WPF ve AJAX konularına değindiğim eğitimde yaptığım bazı demoların kodlarını aşağıda hem blog okuyucularım hem de eğitime katılan öğrencilerimle paylaşıyorum. Peki neden bazılarını? :)

Örnekleri kendime saklama gibi bir çekincem yok, bende örnek bol :) Her gün bir yenisini müşterilere yapıyoruz zaten. Genelde kodları bloga koyamıyor olmamın nedeni tüm örnekleri eğitimlerimde sürekli sıfırdan yapıyor olmam. Bugüne kadar hiçbir eğitimime hazır kod ile veya örnek ile girmedim ve bu durum hiçbir zaman da "hazırlıksız gelmiş" olma gibi bir sıkıntı yaratmadı. Şükür ki eğitimini verdiğim her şeyi zaten her gün 24 saat kullanıyorum :) Durum böyle olunca örnek oluşturma sorunu da olmuyor. Diğer yandan örnekleri canlı canlı yapıyor olmanın bir diğer avantajı da olası "hatalarla" öğrencilerle beraber karşılaşıyor olup, çözebiliyor olmak. Böylece belki de "eve giden öğrencinin karşılaşacağı ilk hatayı" biz çoktan sınıfta işlemiş oluyoruz :)

Sonuçta sınıfta yapılan demoların kodları çoğu zaman "zaman kaybetmemek" adına sadece konsepti gösteren örnekler oluyor. Örneğin bir WPF eğitiminde SQL'den data çekmeyle uğraşmak yerine doğrudan dummy data yaratabiliyorum kod ile. Zaten katılımcılar da SQL'den data çekmeyi zaten biliyor :) Bunun gibi sadece bahsi geçen eğitimin katılımcılarına özel olarak eksikler içeren örnekleri buradan paylaşmayı doğru bulmuyorum.

Neyse, yine çok uzattım. Şimdilik paylaşabileceğim örnek kodlar aşağıda ;)

Silverlight ve WPF Örnek Kodları - 07022008_2.rar (138,72 KB)

Eğitime katılan herkese ve özellikle eğitim sonundaki pozitif olduğu kadar da samimi yorumlara çok teşekkürler.

Thursday, February 07, 2008 8:30:53 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   AJAX | Silverlight | WPF  | 

Bir Silverlight projesi farklı dosyalardan ve yapılardan oluşur. Bu yapılar neredeyse tamamı ister Visual Studio içerisinde ister Expression Blend 2 içerisinde bir Silverlight projesi yarattığınızda otomatik olarak oluşturularak karşınıza çıkar. Her şey ne kadar otomatik olsa da belirli noktalarda işlemlere müdahale edebilmek açısından bizim için otomatik olarak hazırlanan şeylerin neler olduğunu biliyor olmak önemlidir. Bu yazımızda bir Silverlight projesinin doğumundan bahsedeceğiz.

İlk olarak Expression Blend 2 içerisinde yeni bir Silverlight Web Site yaratalım ve bakalım "Project Explorer" içerisinde neler var.

Expression Blend 2 içerisinde Silverlight projesindeki dosyalar.
Expression Blend 2 içerisinde Silverlight projesindeki dosyalar.

Gördüğünüz üzere bizim için yaratılmış olan birden çok dosya bulunuyor. İlk olarak gelin default.html dosyasından başlayalım.

default.html

Herhangi bir Silverlight animasyonu tek başına çalışma yetisine sahip değildir. Silverlight nesnelerinin bir şekilde bir web sayfası içerisinde sunuluyor olması gerekir. Bu nedenle bizim projemizde de Expression Blend 2 bizim için otomatik olarak bir HTML dosyası yaratarak söz konusu HTML dosyası içerisinde Silverlight animasyonumuzu yerleştirmiş durumda. Bu HTML dosyasının içeriğine baktığımızda ilginç yapılarla karşılaşıyoruz.

  <script type="text/javascript" src="Silverlight.js"></script>

  <script type="text/javascript" src="Default_html.js"></script>

  <script type="text/javascript" src="Page.xaml.js"></script>

İlk dikkatimizi çeken yukarıdaki şekli ile üç farklı JavaScript dosyasının sayfaya eklenmiş olması. Bu dosyaların ne işlemler yaptığına birazdan sırası ile göz atacağız. HTML sayfamızı incelemeye devam edelim.

  <style type="text/css">

    #silverlightControlHost {

      height: 480px;

      width: 640px;

    }

    #errorLocation {

      font-size: small;

      color: Gray;

    }

  </style>

Sayfa içerisinde yukarıdaki gördüğünüz gibi CSS sınıfları yer alıyor. Bu sınıflar # deyimi ile tanımlandığı için sayfada kendi adlarındaki HTML elementlerini bularak onları etkileyeceklerdir. SilverlightControlHost adındaki element birazdan kodunu göreceğimiz ve içerisinde Silverlight animasyonunu barındıracak olana DIV elementinin ta kendisi. Bu elementin yükseklik ve genişliğini buradan tanımlayarak aslında Silverlight animasyonunun genel yükseklik ve genişliğini de tanımlamış oluyoruz. Bu genişlik ve yükseklik tanımlama işlemi için aslında faydalanabileceğimiz başka bir yer daha var. Ondan da ileriki adımlara bahsedeceğiz. Konuyu CSS kullanmadan çözmek de mümkün.

Diğer CSS sınıfı olan errorLocation ise yine sayfada errorLocation adındaki DIV elementini etkileyecek. Bu element Silverlight animasyonunda herhangi bir hata olursa söz konusu hataya ait mesajın gösterileceği elementin ta kendisi.

  <div id="silverlightControlHost">

    <script type="text/javascript">

      createSilverlight();

    </script>

  </div>

 

  <!-- Runtime errors from Silverlight will be displayed here.

  This will contain debugging information and should be removed or hidden when debugging is completed -->

  <div id='errorLocation'></div>

Bir önceki adımda incelediğimiz ve detaylarından bahsettiğimiz CSS sınıfları yukarıdaki DIV elementlerini etkiliyorlar. Bu elementlerden özellikle SilverlightControlhost elementi çok önemli. Bu element içerisinde Silverlight animasyonumuz yerleştiriliyor olacak. Yerleştirme işlemini yapan JavaScript fonksiyonu da createSilverlight fonksiyonu. createSilverlight fonksiyonu sayfada herhangi bir yerde olabilir veya herhangi bir şekilde çalıştırılabilir.

Şimdi gelelim sırasıyla sayfamıza linklenmiş olan JavaScript dosyalarının ne işe yaradığına.

Silverlight.js

Silverlight JavaScript dosyası sayfanın en üstünde yer almalıdır. Bu dosya içerisindeki kodlar istemci tarafında Silverlight Plug-In'in yüklü olup olmadığı kontrol ederek gerekli mesajların, görsel uyarıların gösterilmesini sağlayacaktır. Eğer bu görsel uyarıları bir şekilde değiştirmek istiyorsanız Silverlight.js dosyası doğru hedeftir.

Default_html.js

Bu dosya içerisinde aslında tek bir JavaScript fonksiyonu bulunuyor; createSilverlight. Hatırlarsanız bu fonksiyon bizim HTML dosyamızda sayfaya Silverlight animasyonumuzu yüklemek için kullandığımız fonksiyondu. Söz konusu fonksiyon doğrudan Default_html.js içerisinde tanımlanıyor.

  var scene = new UntitledProject9.Page();

  Silverlight.createObjectEx({

    source: "Page.xaml",

    //Silverlight animasyonu için yüklenecek olan XAML kaynağı.

    parentElement: document.getElementById("silverlightControlHost"),

    //Animasyonun yerleştirileceği HTML elementinin ID bilgisi.

    id: "SilverlightControl",

    //Animasyona verilen ID bilgisi.

    properties: {

      width: "100%",

      height: "100%",

      version: "1.0"

    },

Yukarıdaki kod createSilverlight fonksiyonunun sadece bir parçası. Silverlight nesnemiz yaratılırken tabi ki bazı parametrelerin verilmesi gerekiyor. Bu parametreleri olabildiğince yukarıdaki kod içerisinde satır aralarında anlatmaya çalıştım. Silverlight animasyonumuzda kullanılacak olan kaynak XAML kodunun geleceği adresten tutun, animasyonun sayfada yükleneceği konumun HTML elementine ait ID bilgisine kadar herşey burada belirleniyor. Özellikle Silverlight animasyonuna da bu noktada bir ID bilgisi verildiğini atlamamak gerek. Silverlight uygulamasının programlanması noktasında bu ID bilgisi üzerinden Silverlight nesnesine ulaşılacaktır.

Son olarak animasyon alanının toplam genişlik ve yüksekliğinin buradan da ayarlandığını bilmekte fayda var. Varsayılan hali ile yaratılan projelerde genişlik ve yükseklik ayarları CSS ile düzenlenmiş durumda. Oysa burada da gerekli ayarlar yapılarak herhangi bir CSS kullanmadan da ilerlenebilir.

Version bilgisi altında şu an için 1.0 bulunuyor. İleride Silverlight'ın farklı sürümleri de yayınlandığında bu noktadaki bilgiye uygun işlemler Plug-In tarafından yapılacaktır.

    events: {

      onLoad: Silverlight.createDelegate(scene, scene.handleLoad),

      onError: function(sender, args) {

        var errorDiv = document.getElementById("errorLocation");

        if (errorDiv != null) {

          var errorText = args.errorType + "- " + args.errorMessage;

 

          if (args.ErrorType == "ParserError") {

            errorText += "<br>File: " + args.xamlFile;

            errorText += ", line " + args.lineNumber;

            errorText += " character " + args.charPosition;

          }

          else if (args.ErrorType == "RuntimeError") {

            errorText += "<br>line " + args.lineNumber;

            errorText += " character " +  args.charPosition;

          }

          errorDiv.innerHTML = errorText;

        } 

Yukarıdaki kod içerisinde aslında iki işlem yapılıyor. Bu işlemlerden ilki Silverlight animasyonunun yüklenmesi yani onLoad durumunda çalıştırılmak üzere bir JavaScript metodunun aktarılması. Söz konusu bu metodu başka bir dosya içerisinde yazıyor olacağız. İkincisi ise onError yani Silverlight animasyonu içerisinde herhangi bir hata olursa çalıştırılacak olan JavaScript fonksiyonunun hazırlanması. Bu fonksiyon doğrudan kod içerisinde yazılmış. Şu andaki kod hatanın mesajını alarak errorDiv adındaki bir HTML elementinin içerisine yerleştiriyor. Söz konusu element de errorLocation adındaki HTML elementinden yakalanıyor. errorLocation elementini HTML dosyamızın içerisinden hatırlıyoruz.

Page.xaml.js

Son olarak sıra geldi esas Silverlight JavaScript kodlarımızı yazacağımız Page.xaml.js dosyamıza. Bu dosyayı kabaca bir code-behind dosyası olarak kabul edebilirsiniz. Dosya içerisinde bizim için yazılmış olan örnek kodlar bulunuyor.

  handleLoad: function(control, userContext, rootElement)

  {

    this.control = control;

 

    // Sample event hookup: 

    rootElement.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.handleMouseDown));

  },

Bu dosya içerisinde özellikle handLoad JavaScript fonksiyonundan bahsetmek istiyorum, çünkü bu fonksiyon bir önceki adımda default_html.js içerisinde Silverlight animasyonunun onLoad durumuna bağlanmıştı. Söz konusu fonksiyon HTML sayfası açıldıktan ve createSilverlight fonksiyonu çalıştırıldıktan sonra hemen çalışacaktır. Yani Silverlight animasyonun yüklenmesinden sonra yapmak isteyeceklerinizi hemen burada yazabilirsiniz. handlLoad içerisindeki örnek kodları da gönül rahatlığı ile silebilirsiniz.

Böylece yeni başlayan bir Silverlight projesindeki dosyaları ve neyin nasıl çalıştığını incelemiş olduk.

Hepinize kolay gelsin.

Thursday, February 07, 2008 10:34:51 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Wednesday, February 06, 2008

İster Silverlight uygulamaları olsun ister WPF uygulamaları, her şekilde XAML kodları içerisindeki Brush (fırça) tanımlamaları görsel anlamda çok önemlidir. Herhangi bir nesnenin içerisini boyamaktan tutan resim ile doldurmaya kadar çoğu noktada Brush yapıları kullanılır.

Bu makalemizde Silverlight içerisinde kullanabileceğimiz Brush yapılarını ufak örneklerle inceleyeceğiz. Makale boyunca bahsi geçen tüm işlemleri bir "yazılımcı" perspektifi ile değerlendireceğim, o nedenle XAML kodlarını yazmak için Visual Studio kullanacağız. Tasarımcı arkadaşların Expression Blend dünyasında daha farklı araçları ve olanakları olacaktır.

SolidColorBrush

Herhangi bir nesnenin için tek bir renk ile doldurmak istiyorsanız veya herhangi bir alana tek bir renk atamak istiyorsanız yapmanız gereken bir SolidColorBrush kullanmaktır.

<Canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <Canvas Width="120" Height="44">

    <Ellipse Width="500" Height="500">

      <Ellipse.Fill>

        <SolidColorBrush Color="Black"></SolidColorBrush>

      </Ellipse.Fill>

    </Ellipse>

  </Canvas>

</Canvas>

Örneğimizde bir Silverlight animasyonu içerisinde yer alan Ellipse nesnenin içerisini tek bir renk ile doldurmak için uygun bir SolidColorBrush kullanıyoruz. Söz konusu Brush'ın rengini ayarlamak için Color özelliğinden faydalanmamız gerekiyor. Herhangi bir SolidColorBrush'ın Color özelliğine doğrudan bir renk adı verebileceğiniz gibi toplam 8 karakterden oluşan Hexadecimal bir değer de aktarabilirsiniz. #AARRGGBB şeklinde formatlı olan renk değerinin AA kısımlarına Alpha (şeffaflık), RR (Red / Kırmızı), GG (Green / Yeşil), BB (Blue / Mavi) renk değerleri aktarılır.

LinearGradientBrush

Gradient yapısını az çok çoğu programdan biliyoruz, belirli bir renkten başka bir renge doğru geçişlerin yapıldığı boyama şekline Gradient deniyor. Bu şekilde bir boyamayı Silverlight içerisinde yapabilmemiz için GradientBrush yapılarından birini kullanmanız gerekir. Bu çerçevede LinearGradientBrush doğrusal olarak renkler arası geçişlerin yapıldığı bir boyama işlemine olanak tanır.

<Canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <Canvas Width="120" Height="44">

    <Ellipse Width="200" Height="200">

      <Ellipse.Fill>

        <LinearGradientBrush>

          <GradientStop Color="Yellow" Offset="0"/>

          <GradientStop Color="Black" Offset="0.7"/>

          <GradientStop Color="Yellow" Offset="1"/>

        </LinearGradientBrush>

      </Ellipse.Fill>

    </Ellipse>

  </Canvas>

</Canvas>

LinearGradientBrush yapıları içerisinde birbirinden bağımsız GradientStop'lar kullanılır. Her bir GradientStop renk geçişinin tamamlanacağı noktayı ve o noktadaki rengi belirler. Bizim örneğimizde sarıdan siyaha ve sonrasında tekrar siyahtan sarıya doğru bir geçiş olacak. Bu doğrusal geçiş boyunca geçişlerin tam olarak hangi noktalarda yapılacağına da her bir GradientStop'ın Offset değeri karar verir. 0 ile 1 arasında tüm geçiş doğrusu üzerinde belirlenen konuma göre GradientStop'lar yerleştirilir. Yukarıdaki kodun oluşturduğu görseli aşağıda inceleyebilirsiniz.

LinearGradientBrush çizimi
LinearGradientBrush çizimi.

Yukarıdaki resimde de gördüğünüz gibi LinearGradientBrush yapısı sol üst köşeden başlayarak sağ alt köşeye doğru ilerler. Bu doğrunun yönünü değiştirmek için LinearGradientBrush'ların StartPoint ve EndPoint özelliklerinden faydalanabiliriz. Bu özelliklerin her ikisi de LinearGradientBrush doğrusunun başlangıç ve son noktalarının X ve Y koordinatlarını içerir. Söz konusu koordinatlar 1 ile 0 arasında verilerek nesnenin en üst sol noktası 0,0 (origin) olarak kabul edilir. Gerektiğinde bu değerler eksi veya artı olarak 0'dan küçük veya 1'den büyük de olabilir. Bu gibi durumlarda Gradient doğrusunun nesne sınırlarının dışarısında başlayacağı veya biteceği öngörülür.

<Canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <Canvas Width="120" Height="44">

    <Ellipse Width="200" Height="200">

      <Ellipse.Fill>

        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">

          <GradientStop Color="Yellow" Offset="0"/>

          <GradientStop Color="Black" Offset="0.7"/>

          <GradientStop Color="Yellow" Offset="1"/>

        </LinearGradientBrush>

      </Ellipse.Fill>

    </Ellipse>

  </Canvas>

</Canvas>

Yukarıdaki kod içerisinde tanımlanan LinearGradientBrush'ın başlangıç noktası 0,0 ve sonlanma noktası da 0,1 olarak verilmiş. Başlangıç ve bitiş noktalarının sadece Y koordinatları değiştirilmiş ve bitiş noktası nesnenin sol altına denk getirilmiş. Aldığımız görsel sonuç aşağıdaki gibi olacaktır.

LinearGradientBrush yönündeki değişiklik.
LinearGradientBrush yönündeki değişiklik.

RadialGradientBrush

LinearGradientBrush'ların tüm özelliklerine sahip olan RadialGradientBrush'ların tek farkı doğrusal bir renk değişimi sağlamak yerine dairesel bir renk değişimi sağlamalarıdır.

<Canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <Canvas Width="120" Height="44">

    <Ellipse Width="200" Height="200">

      <Ellipse.Fill>

        <RadialGradientBrush>

          <GradientStop Color="Yellow" Offset="0"/>

          <GradientStop Color="Black" Offset="1"/>

        </RadialGradientBrush>

      </Ellipse.Fill>

    </Ellipse>

  </Canvas>

</Canvas>

Yukarıda gördüğünüz yapıda LinearGradientBrush'lara kıyasla tek fark Brush'ımız kendi adı. Aldığımız görsel sonuç ise aşağıdaki şekilde.

RadialGradientBrush çizimi.
RadialGradientBrush çizimi.

RadialGradientBrush'ların merkez noktasını değiştirerek farklı görsel efektler oluşturmak mümkün. Bunun için GradientOrigin denen özellikten faydalanacağız ve söz konusu özelliğe merkez noktası için X ve Y koordinatları aktaracağız. Bu koordinatların da 1 ile 0 arasında olması gerekiyor, aksi halde merkez nokta nesnenin dışına çıkacaktır.

<Canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <Canvas Width="120" Height="44">

    <Ellipse Width="200" Height="200">

      <Ellipse.Fill>

        <RadialGradientBrush GradientOrigin="0,0">

          <GradientStop Color="Yellow" Offset="0"/>

          <GradientStop Color="Black" Offset="1"/>

        </RadialGradientBrush>

      </Ellipse.Fill>

    </Ellipse>

  </Canvas>

</Canvas>

Aldığımız görsel sonuç gerçekten etkileyici. Özellikle bir Ellipse kullanmış olmamız RadialGradientBrush'ın ışık etkisi yaratmasına neden oldu.

Origin'i değiştirilmiş RadialGradientBrush.
Origin'i değiştirilmiş RadialGradientBrush.

ImageBrush

Nesnelerin içlerini resimlerle doldurmak için kullanacağınız fırça (Brush) yapısının adı ImageBrush olarak geçiyor.

<Canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <Canvas Width="120" Height="44">

    <Ellipse Width="200" Height="200">

      <Ellipse.Fill>

        <ImageBrush ImageSource="kaplumbaga.jpg"></ImageBrush>

      </Ellipse.Fill>

    </Ellipse>

  </Canvas>

</Canvas>

Kodumuzda da gördüğünüz üzere Ellipse'imizin Fill özelliğine bir ImageBrush aktarıyoruz. Söz konusu ImageBrush resim kaynağını ImageSource özelliği ile alıyor. Böylece elde ettiğimiz görüntü aşağıdaki şekilde oluyor.

ImageBrush ile gelen kaplumbağamız :)
ImageBrush ile gelen kaplumbağamız :)

ImageBrush'a özel olarak bahsedebileceğimiz bir durum kaynak resmin hedef alana yerleştirilirken en-boy oranına göre ne tarz bir konumlandırma yapılacağıdır. Bu konuyla ilgili ImageBrush'ın Stretch özelliğinden faydalanıyoruz.

  • Fill : Resmin en-boy oranı korunmadan hedef alan doldurulur.
  • Uniform : Resmin en boy oranı korunarak olabilen en büyük boyutta yerleştirilir.
  • UniformToFill: Resmin en-boy oranı korunarak hedef alan tamamen doldurulur. Bu işlemin gerçekleşebilmesi için resmin fazla gelen kısımları dışarıda bırakılır.

VideoBrush

Belki de en ilginç fırçalardan biridir VideoBrush. ImageBrush gibi çalışan VideoBrush kaynak olarak bir resim dosyası almak yerine video alır. Böylece nesnelerin için hareketli bir görüntü ile doldurulabilir.

<Canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <Canvas Width="120" Height="44">

    <MediaElement Name="AyiVideo" Source="ayi.wmv" Opacity="0" IsMuted="True"></MediaElement>

    <Ellipse Width="200" Height="200">

      <Ellipse.Fill>

        <VideoBrush SourceName="AyiVideo"></VideoBrush>

      </Ellipse.Fill>

    </Ellipse>

  </Canvas>

</Canvas>

Yukarıdaki kodumuz içerisinde Ellipse'in Fill değerine bir VideoBrush aktarıyoruz. Bu VideoBrush'a video kaynağı olarak AyiVideo adında bir MediaElement bağlamışız. VideoBrush'lar doğrudan video dosyalarını açamaz, arada aracı bir MediaElement gerekir. Bu nedenle sahneye yerleştirdiğimiz MediaElement'imizin şeffaflığını Opacity değerini 0 yaparak arttırıyoruz. Böylece sahnede MediaElement gözükmeyecek. Ayrıca video ile beraber gelen sesin de duyulmaması için yine MediaElement'e ait IsMuted özelliği True yapıyoruz. Sonuçta aşağıdaki görüntüyü elde ediyoruz.

VideoBrush ile aldığımız ayıcık Ellipse içerisinde.
VideoBrush ile aldığımız ayıcık Ellipse içerisinde.

Silverlight 1.0 içerisindeki Brush'larımız hepsi bu kadar. Hepinize kolay gelsin.

Wednesday, February 06, 2008 2:34:03 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Tuesday, February 05, 2008

Bundan aylaaaar önce :) Türkiye'nin ilk Silverlight eğitimini Microsoft binasında Microsoft iş ortakları için hazırlamıştık. O günlerde konuya ilgisi ile yıldızı parlayan bir öğrencim olan sevgili Eren Emre Kanal :) eğitim sonrasında yazdığı bir Silverlight makalesi ile de dikkatleri çekmişti.

Sevgili Eren'in WordPress altyapısı üzerine kurduğu Silverlight web sitesi olan http://www.weebr.com/ karşınızda! (Gurur duyan bir hoca nidasıyla!) Söz konusu site anında Silverlight resmi sitesinde Showcase bölümünde de Türkiye bayrağı altında yerini aldı.

www.weebr.com Silverlight Showcase'de.
www.weebr.com Silverlight Showcase'de.

Son olarak tekrar dikkatinizi çekmek istiyorum :) bahsettiğimiz web sitesi Debian Linux sunucu üzerinde çalışıyor ;) Yani tekrar : Silverlight sunucu bağımsız bir teknolojidir.

Tuesday, February 05, 2008 12:40:31 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Monday, February 04, 2008

PCnet'in Şubat sayısındaki yazılarımı her ay olduğu gibi yine buradan sizlere duyurmak istiyorum :) Derginin OKUL bölümünde AJAX, ASP.NET 3.5, Expression Blend ve Silverlight ile ilgili yazılarım yer alıyor.

AJAX : Zaman doluyor, AJAX istekleri yolda.
Expression Blend : WPF Uygulamalarında internette
Silverlight: Silverlight ve JavaScript
ASP.NET 3.5 : ASp.NET 3.5 ve LINQ2SQL

Tüm bu yazılara ek olarak Şubat sayısına özel ".NET Framework 3.5'in Yıldızı: LINQ" makalem de OKUL bölümünde yer alıyor :)

Hepinize kolay gelsin.

Monday, February 04, 2008 12:41:34 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   AJAX | ASP.NET 3.5 | Expression Blend | LINQ | Silverlight  | 

Microsoft'da son yaptığımız S2B Silverlight eğitimi sonrası edindiği bilgileri paylaşma kararı alan sevgili Oğuz Sandıkçı'nın yazısını sizlerle paylaşmak istiyorum. Eğitim boyunca "Flashcı" kimliği ile sınıfa renk katan :) sevgili Oğuz'a buradan yazısı için ayrıca teşekkür ediyorum.

http://www.muratkahraman.net/2008/02/konuk-yaz-silverlight-flasha-kar-m.html

Monday, February 04, 2008 12:24:31 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Sunday, February 03, 2008

Dün İTÜ'de Botego organizasyonu ile mini bir "İnternette Gümüş Devrim: Silverlight" semineri yaptık. Seminer toplam 45 dakika sürdü (sürebildi) :( Pek teknik bir sunum olmadı, benim tarzıma göre çoğu şey havada kaldı. Böyle olacağını da zaten zaman kısıtı nedeniyle tahmin ettiğim içindir ki blogumdan sizlere semineri duyurmadım. Özellikle seminer sonrasında bazı arkadaşların teknik soruları oldu. Bu sorulardan yola çıkarak aslında normal seminerlerimde olduğu gibi daha geniş bir zamanlama ile teknik içeriğe de ihtiyaç olduğu açıkça ortada.

Gümüş Devrim: Silverlight :)
Gümüş Devrim: Silverlight, İTÜ, Botego

Daha önce İTÜ'de bir Silverlight semineri gerçekleştirmiştik. Umarım yakında yeni üniversite döneminin de başlaması ile tekrar ünilerde seminerler düzenliyor olacağım. Blogumu takip ederseniz duyurulara zaten ulaşabilirsiniz. Ayrıca "Hocam bize de gel!" diyenler varsa :) mailinizi beklerim.

Sunday, February 03, 2008 5:27:41 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 

Silverlight uygulamalarında videonun yeri çok önemli, tarayıcı ve platform bağımsız olarak istemci tarafında klasik WMV dosyalarını oynatabiliyor olmak büyük avantaj sağlıyor. Tabi tüm bunları yapabilmek için Silverlight içerisinde MediaElement nesneleri kullanmamız gerekiyor. Bu yazıda MediaElement'in kullanımına ve bazı özelliklerine göz atacağız.

<Canvas xmlns="http://schemas.microsoft.com/client/2007"

      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

      Width="300"

      Height="300"

      Background="White"

      x:Name="Page">

  <MediaElement Width="300"

              Height="300"

              Canvas.Left="0"

              Canvas.Top="0" />

</Canvas>

Herhangi bir Silverlight uygulamasına yukarıdaki şekli ile bir MediaElement yerleştirebilirsiniz. Klasik Silverlight nesnelerinde olduğu gibi MediaElement'in de Width, Height ve Canvas.Left, Canvas.Top özellikleri ile sahnedeki boyutu ve konumu belirlenebiliyor.

  <MediaElement Width="300"

              Height="300"

              Canvas.Left="0"

              Canvas.Top="0"

              Source="Lake.wmv"

              Volume="1"

              IsMuted="True" />

MediaElement'e herhangi bir video dosyası yüklemek için Source özelliğini değiştirmek yeterli. Source özelliğine bir dosya adının yanı sıra doğrudan MMS adresleri de aktarabilirsiniz. Ayrıca MediaElement'in Volume özelliği ile sesi veya IsMuted Boolean özelliği ile sesin açık olup olmayacağını da ayarlama şansınız var.

  <MediaElement Width="300"

              Height="300"

              Canvas.Left="0"

              Canvas.Top="0"

              Source="Lake.wmv"

              Stretch="Fill" />

Son olarak MediaElement'e ait Stretch özelliği ile video görselinin MediaElement içerisine nasıl yerleştirileceğine de karar verebilirsiniz. Bu özelliğe verebileceğiniz üç değeri aşağıdaki şekilde tanımlayabiliriz.

  • Uniform : Stretch özelliğinin varsayılan değeri olan Uniform ile video görselinin en-boy oranı bozulmadan MediaElement içerisine yerleştirilmesi sağlanır.
  • UniformToFill: Bu seçenekte video görselinin en boy oranı korunurken videonun boyu veya eni tam olarak MediaElement içerisini dolduracak şekilde büyütülür ve sığmayan kesimler MediaElement'in dışında tutularak kesilir.
  • Fill: Fill seçeneği kullanıldığında video görseli MediaElement içerisine sığacak şekilde tekrar boyutlandırılır. Bu seçenekte videonun en-boy oranı korunmaz.

Videoyu yönetmek...

Herhangi bir video dosyasını oynatırken onu durdurabiliyor olmak önemlidir. Silverlight ile böyle bir işlevsellik sağlayabilmek için kendi düğmelerimizi ve kodumuzu yazmamız gerekiyor. Bu nedenle aşağıdaki şekliyle bir Silverlight uygulaması yaratalım ve sonrasında her bir düğme için yazacağımız kodları incleyelim.

<Canvas xmlns="http://schemas.microsoft.com/client/2007"

      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

      Width="300"

      Height="300"

      Background="White"

      x:Name="Page">

  <MediaElement Width="300"

              Height="300"

              Canvas.Left="0"

              Canvas.Top="0"

              Source="Lake.wmv"

              Stretch="Fill" />

              x:Name="Video" />

  <Canvas Width="73"

        Height="31"

        Canvas.Left="8"

        Canvas.Top="261"

        Opacity="0.7"

        MouseLeftButtonDown="Oynat">

    <Rectangle Width="73"

              Height="31"

              Fill="#FFFFFFFF"

              Stroke="#FF000000"

              RadiusX="16.5"

              RadiusY="16.5" />

    <TextBlock Width="47"

              Height="21"

              Canvas.Left="13"

              Canvas.Top="5"

              TextWrapping="Wrap"><Run Text="Oynat" /></TextBlock>

  </Canvas>

  <Canvas Width="73"

        Height="31"

        Canvas.Left="86"

        Canvas.Top="261"

        Opacity="0.7"

        MouseLeftButtonDown="Bekle">

    <Rectangle Width="73"

              Height="31"

              Fill="#FFFFFFFF"

              Stroke="#FF000000"

              RadiusX="16.5"

              RadiusY="16.5" />

    <TextBlock Width="47"

              Height="21"

              Canvas.Left="13"

              Canvas.Top="5"

              TextWrapping="Wrap"

              Text="Bekle" />

  </Canvas>

  <Canvas Width="73"

        Height="31"

        Canvas.Left="166"

        Canvas.Top="261"

        Opacity="0.7"

        MouseLeftButtonDown="Durdur">

    <Rectangle Width="73"

              Height="31"

              Fill="#FFFFFFFF"

              Stroke="#FF000000"

              RadiusX="16.5"

              RadiusY="16.5" />

    <TextBlock Width="47"

              Height="21"

              Canvas.Left="13"

              Canvas.Top="5"

              TextWrapping="Wrap"

              Text="Durdur" />

  </Canvas>

</Canvas>

Yukarıdaki XAML kodu ile tanımlanan Silverlight nesnesinde toplam üç adet (Oynat, Bekle, Durdur) düğme yer alıyor. Her bir düğme farklı JavaScript fonksiyonlarına bağlanmış durumda. Şimdi sıra geldi gerekli JavaScript fonksiyonlarını yazmaya.

function Oynat(sender)

{

  sender.findName("Video").Play();

}

function Bekle(sender)

{

  sender.findName("Video").Pause();

}

function Durdur(sender)

{

  sender.findName("Video").Stop();

}

Her bir fonksiyonu çalıştıran düğmeye ait sender nesnesi üzerinden findName metodunu çalıştırarak Video ismini vermiş olduğumuz MediaElement'imizi bularak Play, Pause veya Stop metodları ile video üzerinde gerekli işlemleri yapabiliyoruz.

Video'nun Buffer durumunu gösterme...

Video oynatılmadan önce yüklenirken önbellekleme durumunu algılayarak kullanıcıya gösterebiliyor olmak da önemli bir işlevsellik sağlayacaktır. Bu noktada kullanacağımız MediaElement'e ait durumun adı BufferingProgressChanges olarak geçiyor.

  <MediaElement Width="300"

              Height="300"

              Canvas.Left="0"

              Canvas.Top="0"

              Source="Lake.wmv"

              Stretch="Fill"

              x:Name="Video"

              BufferingProgressChanged="Onbellek" />

Yukarıdaki şekli ile gerekli durumu ve çalıştırılacak olan Onbellek JavaScript fonksiyonunu MediaElement içerisinde tanımladıktan sonra sıra geldi gerekli JavaScript fonksiyonunu yazmaya.

function Onbellek(sender)

{

  sender.findName("Fon")["Opacity"]=sender.BufferingProgress;

}

Yukarıdaki fonksiyonda sender nesnesi bizim MediaElement'imizin ta kendisi olduğu için rahatlıkla sender üzerinden yola çıkarak MediaElement'in o anki önbellek durumunu BufferingProgress özelliğinden alabiliyoruz. Önbellek durumu 1 ile 0 arasında decimal olarak gönderileceği için aynı değeri doğrudan başka bir elementin şeffaflığına aktararak yükleme süresince sürekli şeffaftan görünür hale gelen bir animasyon yaratmış oluyoruz. Peki "fon" elementi de nedir? Aşağıdaki şekliyle fonu siyah olan bir dikdörtgeni sahneye koyarsak video yüklenirken söz konusu dikdörtgen giderek görünüz hale gelecek, sonrasında da üzerinde video gözükecektir.

  <Rectangle Width="300"

            Height="300"

            Fill="#FF000000"

            Stroke="#FF000000"

            Canvas.Left="0"

            Canvas.Top="0"

            x:Name="Fon" />

Videoları maskeleme

Maskeleme işlemleri XAML kodlarında Clipping olarak geçer. O nedenle tüm Silverlight nesnelerine olduğu gibi MediaElement'lere de Clip'ler ayarlanabilir. Bunu için aşağıdaki gibi basit bir kod kullanabiliriz.

  <MediaElement Width="300"

              Height="300"

              Canvas.Left="0"

              Canvas.Top="0"

              Source="lake.wmv"

              Stretch="Fill"

              x:Name="Video"

              BufferingProgressChanged="Onbellek">

    <MediaElement.Clip>

      <EllipseGeometry RadiusX="50"

                      RadiusY="50"

                      Center="100,100"></EllipseGeometry>

    </MediaElement.Clip>

  </MediaElement>

Gördüğünüz gibi MediaElement içerisinde ayrı bir EllipseGeometry nesnesi Clip olarak tanımlanmış durumda. Bu şekilde kod yazabileceğiniz gibi doğrudan Expression Blend içerisinde görsel olarak da maskeleme yapma şansınız var. Blend içerisinde herhangi iki nesneyi "Objects and Timeline" panelinden seçerek sağ tıkladığınızda gelen menüden Path / Make Clipping Path komutu vermeniz halinde seçili olan üstteki nesne bir alt nesneye Clip olarak ayarlanacaktır. Aynı şekilde Clip ayarlanmış bir nesneye sağ tıkladığınızda gelen menüden de Path / Release Clipping Path diyerek maskelemeyi kaldırma şansınız da var.

Sunday, February 03, 2008 12:18:05 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Thursday, January 31, 2008

İster Silverlight ister WPF uygulamalarında vektörel çizimlere animasyonlar katıyor olmak hayati öneme sahip. Bu çerçevede bizim elimizde hali hazırda bulunan vektörel çizimleri veya yapacağımız yeni çizimleri WPF veya Silverlight'a uygun şekilde XAML kodları olarak elde etmemiz gerekiyor. Expression Design işte tam noktada devreye giriyor.

Bir Microsoft ürünü olarak Expression Design ile ilgili sizleri şaşırtacağına inandığım birkaç noktadan bahsetmek istiyorum. Bu noktalardan ilki Expression Design içerisinde File / Import menüsüne ufak bir yolculuk yaptığımızda karşımıza Adobe Photoshop ve Adobe Illustrator dosya formatlarının da geliyor olması. PSD veya AI dosyalarını doğrudan vektörel formatları ve katman yapıları bozulmadan Expression Design içerisine aktarabiliyorsunuz. Böylece eldeki hazır tasarımları hızlıca WPF veya Silverlight dünyasına taşımak mümkün oluyor. Bir diğer şaşırtıcı nokta da File / Export menüsünde. Bu menüden WPF ve Silverlight için XAML çıktıları almanın yanı sıra PDF veya PSD dosyaları da alabiliyoruz.

XAML çıktı alma yolunda ilerlerken...

Expression Design içerisinde tasarım yaparken bir tasarımcı olarak dikkat etmemiz gereken noktalardan ilki "Layers" panelinde oluşturduğumuz katmanların yapıları ve özellikle isimleri. Expression Design içerisinde oluşturulan her bir katman ileriki noktalarda WPF veya Silverlight dünyasında programcı tarafından da kullanılabiliyor olacaktır. Hatta söz konusu katmanlara tasarımcının verdiği isimler ile programcılar da ulaşacaktır. Bu nedenle tasarımcının olabildiğince yapılsan çerçevede anlamlı katmanlamalar yaparak, yine anlamlı isimlendirmeler yapmasında büyük fayda var. Aksi halde programcının görsel nesneleri sahnede bulması ve gerekli kodu yazması çok daha zor olacaktır.

Bir diğer dikkat edilmesi gereken nokta da "Effects" menüsü ile ilgili. Maalesef Expression Design içerisindeki tüm efektler WPF tarafından desteklenmiyor, Silverlight tarafında desteklenen bir efekt ise 1.0 sürümünde mevcut değil. Bu noktada efektler kullanırken birazdan XAML çıktısı alacağımız ekranda bahsedeceğim detaylara dikkat etmek gerekecektir.

File / Export / XAML*

Çiziminizi tamamladıktan sonra doğrudan File / Export menüsünü açarak dosya tipi olarak da XAML'ı seçtiğinizde "OK" düğmesine basmanızla birlikte karşınıza yeni bir pencere gelecektir. Bu pencerede çıktı alacağımız XAML kodları ile ilgili ayarları yapmamız gerekiyor.

Expression Design XAML Export penceresindeki ayarlar.
Expression Design XAML Export penceresindeki ayarlar.

İlk olarak çıktı alacağımız XAML kodunun WPF mi yoksa Silverlight ile mi kullanılacağına karar vermemiz gerekiyor. Bu seçim XAML kodunda büyük değişiklikleri neden olacaktır. Basit bir örnek olarak XAML dokümanının kök elementinin WPF'de Window, Silverlight içerisinde ise Canvas olduğunu hatırlayabiliriz. Seçimimizi yaptıktan sonra bizi daha farklı ayarlar bekliyor.

"Text"'leri ne yapacağız? Eğer çiziminiz içerisinde metinler kullanmışsanız bunların da birer TextBlock olarak yerleştirilmesi, ya da vektörele çevrilerek bu yazıların birer vektörel çizim olarak (vectorize) XAML koduna konması gerekiyor. Seçimi yaparken dikkat edilmesi gereken noktalardan biri bahsi geçen metnin programatik olarak değiştiriliip değiştirilmeyeceği detayı. Eğer metinler programcı tarafından veritabanına vs bağlanacak ise kesinlikle TextBlock olmaları şart, aksi halde vektörel olarak sahneye yerleştirilen bir metin doğrudan değiştirilemeyecektir. Fakat bu detayın yanı sıra bir de işin animasyon kısmı var. Eğer yerleştirilen metinlerin büyütülüp küçüldüğü animasyonlar düzenlenecek ise metinleri vektörel olarak sahneye koymak daha yüksek performans sağlayacaktır. TextBlock üzerinden yapılan büyütme ve küçültme animasyonlarında nesne her boyut değiştirdiğinde içerisinde metin tekrar font dosyasından gerekli bilgiler alınarak vektörel olarak yaratılacaktır. Böyle bir animasyon vektörel bir animasyona kıyasla daha çok sistem kaynağına ihtiyaç duyar. Eğer yazılan yazılarda boyut değiştirme animasyonları yapılacaksa ve bu yazılar programatik olarak değiştirilmeyecekse kesinlikle "Paths" seçeneği kullanılarak yazılar vektörele çevirlmelidir.

"Live Effects" olarak geçen gerçek zamanlı efektlerin hepsinin WPF veya Silverlight tarafından desteklenmediğinden bahsetmiştik. Eğer desteklenmeyen bir efekt kullanılmış ise "Rasterize all live effects" seçeneği sayesinde efektlerin ayrı birer PNG görsel olarak kaydedilerek efekt verilen nesnelerin arkasına yerleştirilmesini sağlayabilirsiniz. Bir diğer seçenek ise "Only Export Live Effects supported by XAML" olarak sadece desteklenen efektlerin XAML olarak yerleştirilmesine olanak tanıyor. Efektlerle ilgili de performans konusunda olabildiğince dikkat etmekte fayda var. Eğer efekt verilen nesne boyut değiştirmeyecekse, yani efekti sürekli aynı şekilde gözükecekse söz konusu efektli bir PNG olarak yerleştirmek ileriye dönük animasyonlarda performans artışı sağlayacaktır. Sahnede yerini değiştirdiğiniz bir nesnenin efekti her karede tekrar baştan yaratılacağına nesnenin arkasında bitmap de yer değiştirecektir. Böylece çok daha az işlemci gücü kullanılır. Diğer yandan hedef nesnenin boyutunu değiştiren animasyonlar varsa arkada bir PNG dosyasının durması efeklerin boyutlandırılamamasına, örneğin bir "Drop Shadow" efekti ile yerleştirilen gölgenin nesneden ufak kalmasına neden olabilir. Bu tarz durumlarda ya arkadaki PNG'yi de animasyona dahil etmek ya da doğrudan desteklenen gerçek zamanlı efektleri tercih etmek gerekecektir.

Son olarak tercih etmemiz gereken seçenekler arasında "Image Strokes" yapısı yer alıyor. Expression Design içerisinde vektörel çizimlerinizde kullandığınız "stroke" yapılarının bazıları vektörelken bazıları ise bitmap. XAML çıktısı alırken isterseniz bu stroke yapılarını detay seviyesi (level) belirterek vektörel olarak alabilir veya doğrudan bitmap olarak da (rasterize) kaydedebilirsiniz. Her zamanki gibi vektörel kayıtlarda animasyonlarda herhangi bir bozulma olmazken bitmap kayıtlarda ise daha yüksek performans elde ediliyor.

Tüm ayarları yaptığımıza göre artık XAML çıktımızı almaya hazırız. "Export" düğmesi ile çıktınızı .xaml uzantılı bir dosya olarak alıp WPF veya Silverlight projelerinizde kullanabilirsiniz.

Hepinize kolay gelsin.

*XAML çıktıları ile ilgili sorun yaşamamak adına Expression Design'ın Export bölümü ile ilgili büyük çapta değişiklikler içeren Expression Design SP1 yükleme paketini bilgisayarınıza yüklemenizde fayda var.

Thursday, January 31, 2008 10:10:37 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Expression Design | Silverlight | WPF  | 
 Wednesday, January 30, 2008

XAML kodlarını yazarken hangi elementin ne özelliğe sahip olduğunu bulmak bazen karışık kodlarda iyice içinden çıkılmaz bir hal alabiliyor. Bu tarz durumlarda "Keşke bir kod düzenleyici olsa!" gibi haykırışlarda bulunabilirsiniz. Aslında var :) Visual Studio 2008 içerisinde "Tools/Options" menüsüne ufak bir yolculuk ile bu ayarları bulabilirsiniz.

XAML formatlama özellikleri Visual Studio içerisinde.
XAML formatlama özellikleri Visual Studio içerisinde.

Yukarıdaki şekli ile XAML kodları için "Position each attribute on a separate line" seçeneğini işaretlerseniz bundan sonra Visual Studio içerisine yapıştırdığınız kodlar otomatik olarak formatlanacak ve aşağıdaki hale dönüşecektir.

<Canvas xmlns="http://schemas.microsoft.com/client/2007"

      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

      Width="300"

      Height="300"

      Background="White"

      x:Name="Page">

  <Glyphs Width="147"

        Height="93"

        Canvas.Left="29"

        Canvas.Top="76"

        UnicodeString="Selamlar"

        Fill="#FF000000"

        FontRenderingEmSize="72"

        FontUri="webdings.ttf" />

</Canvas>

Gördüğünüz gibi taglara ait her bir özellik ayrı satırlar olarak yerleştirilmiş. Böylece çok daha kolay okunabilir bir kod sağlanabiliyor. Tercihlerinize göre farklı ayarlar yapmanız da mümkün.

Hepinize kolay gelsin.

Wednesday, January 30, 2008 2:43:32 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight | Visual Studio 2008 | WPF  | 
 Monday, January 28, 2008

Daha önceki yazılarımda Silverlight 1.0 ile beraber sunucu tarafına yerleştirilen font dosyalarının istemcide "yükleme bağımsız" ve "platform bağımsız" olarak nasıl kullanılabileceğinden bahsetmiştim. Bunlara ek olarak daha kolay bir kullanım ile özellikle farklı font dosyalarındaki belirli görselleri gösterme amacıyla kullanabileceğiniz bir de Glyphs kontrolümüz bulunuyor.

Örneğimizde meşhur Webdings font serisinden bir font kullanarak istediğimiz bir görselin gösterilmesini sağlayacağız. Bunun için herhangi bir JavaScript kodu yazmamız gerekmiyor.

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="300" Height="300"

  Background="White"

  x:Name="Page"

  >

  <Glyphs Width="147" Height="93" Canvas.Left="29" Canvas.Top="76" Fill="#FF000000"

  FontRenderingEmSize="72" Indices="134" FontUri="webdings.ttf"/>

</Canvas>

Yukarıdaki XAML kodu içerisinde özellikle koyu yazılı bölgeye dikkat etmekte fayda var. Webdings.ttf dosyası Silverlight tarafından otomatik olarak sunucudan indirilerek font içerisindeki karakter tablosundan 134. karakter alınarak ekranda gösterilecektir.

Glyphs ile font dosyasından alınan vektörel görsel.
Glyphs ile font dosyasından alınan vektörel görsel.

Fontlardan tek tek görsel almanın yanı sıra isterseniz Glyphs kontrolünü belirli bir yazı bir font ile göstermek için de kullanabilirsiniz. Bu noktada benim tercihim yazının başında belirttiğim ve daha önceki yazılarımdaki teknik olacaktır fakat bu tekniğin avantajı herhangi bir JavaScript kodu yazmıyor olmak olarak da değerlendirilebilir :)

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="300" Height="300"

  Background="White"

  x:Name="Page"

  >

  <Glyphs Width="147" Height="93" Canvas.Left="29" Canvas.Top="76"

  UnicodeString="Selamlar" Fill="#FF000000" FontRenderingEmSize="72"

  FontUri="webdings.ttf"/>

</Canvas>

Bu sefer farklı olarak Indices tanımlamasını yapmak yerine doğrudan göstermek istediğimiz karakterleri UnicodeString parametresine aktarıyoruz.

Hepinize kolay gelsin.

Monday, January 28, 2008 5:55:35 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Sunday, January 27, 2008

Silverlight 1.0 ile beraber gelen ve hakkında belki de en az bahsedilen kontrollerden biri de InkPresenter kontrolüdür. InkPresenter kontrolü ile web ortamında TabletPC'lerdeki kalemler ile yazı girişi ve doğrudan dokunmatik ekranlarda elle çizimlerin yapılabilmesi sağlanabilir. Böylece kullanıcılar web sitenizde görsel öğeler , fotoğraflar, videolar üzerine bile kolaylıkla notlar alabilecektir.

Silverlight ile beraber gelen InkPresenter yapısında her şey StylusPoint'ler şeklinde yaratılır. Birden çok StylusPoint bir StylusPointCollection içerisinde StylusPoints adı altında saklanır. Her bir Collection'dan bir Stroke oluşturulur ve Stroke'lar da StrokeCollection ile toparlanır. Tüm bu yapıların her birinin kendine has özellikleri, metodları bulunur. Çok fazla teknik bilgiye boğulmadan hemen bir uygulama yaparak InkPresenter nesnesini nasıl kullanabileceğimize bakalım.

İlk olarak sahneye bir InkPresenter koyarak fonunu da beyaz rengine ayarlıyoruz. Ayrıca InkPresenter nesnesinin toplam üç farklı event'ını (MouseLeftButtonDown, MouseMove ve MouseLeftButtonUp) farklı JavaScript fonksiyonların da bağlamamız gerekiyor. Elimizdeki XAML aşağıdaki şekilde sonlanıyor.

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="300" Height="300"

  Background="White"

  x:Name="Page"

  >

  <InkPresenter Background="White" Width="303" Height="300" Canvas.Left="0" Canvas.Top="0"

  MouseLeftButtonDown="MouseDown" MouseMove="MouseMove" MouseLeftButtonUp="MouseUp"/>

</Canvas>

Toplam üç farklı event kullanacağız. MouseLeftButtonDown ile farenin sol tuşuna basıldığı anda çizim yapmaya başlayacağız. MouseMove yani fare hareket ettikçe yaptığımız çizime yeni noktalar ekleyeceğiz, MouseLeftButtonUp ile farenin tuşu serbest bırakıldığında çizimi tamamlayacağız.

var YeniStroke;

İlk olarak yukarıdaki şekilde tüm JavaScript event'larımızda kullanılmak üzere global bir YeniStroke değişkeni tanımlıyoruz. Fare ile basıldığında bu değişken üzerinden yeni bir çizgi yaratacağız ve fare hareket ettikçe bu değişkeni kontrol ederek eğer yeni bir çizgi yaratmışsak çizgiye yeni noktalar ekleyeceğiz. Eğer yeni bir çizgi yaratmamışsak demek ki farenin düğmesine basılmamış. Gelelim hemen farenin düğmesine ilk tıklandığında çalışacak olan MouseLeftButtonDown durumunda neler yapacağımıza.

function MouseDown(sender,args)

{

  sender.CaptureMouse();

  //Çizgmizi yaratalım

  YeniStroke = sender.getHost().content.createFromXaml("<Stroke/>");

  //Çizginin özelliklerini belirmeke için gerekli nesneyi yaratalım.

  var StrokeSekli = sender.getHost().content.createFromXaml("<DrawingAttributes/>");

  //Yarattığımız çizgi özelliklerini çizgimize aktaralım.

  YeniStroke.DrawingAttributes = StrokeSekli;

  //Çizgi özelliklerini belirleyelim.

  YeniStroke.DrawingAttributes.Width = 4;

  YeniStroke.DrawingAttributes.Height = 4;

  YeniStroke.DrawingAttributes.Color = "Black";

 

  //Yeni gelen Stylus noktaları çizgimize ekleyelim.

  YeniStroke.StylusPoints.AddStylusPoints(args.GetStylusPoints(sender));

  //Çizgimizi InkPresenter kontrolüne ekleyelim.

  sender.Strokes.add(YeniStroke);

}

Olabildiğince satır içi yorumlarla tek tek neler yaptığımızı anlatmaya çalıştım. Genel olarak başlangıçta bir çizgi yaratmamız gerekiyor. Stroke yarattıktan sonra onun özelliklerini belirlemek üzere DrawingAttributes yaratarak Stroke içerisine ekliyoruz. Sonrasında MouseLeftButtonDown durumuna parametre olarak gelen args değişkeni üzerinden GetStylusPoints metodu ile çizilen noktaları alarak kendi çizgimize ekliyoruz. En sonunda da çizgimizi InkPresenter içerisine yerleştiriyoruz. Sıra geldi fare hereket ettikçe çalışacak olan MouseMove durumundaki kodu yazmaya.

function MouseMove(sender,args)

{

  //En son eklenen çizgi hala çiziliyor mu?

  if (YeniStroke!=null)

  {

    //En son eklenen çizgiye yeni gelen noktaları ekleyelim.

    YeniStroke.StylusPoints.AddStylusPoints(args.GetStylusPoints(sender));

  }

}

Fare hareket ettikçe acaba daha önce yeni bir çizgi yaratmaya başladık mı diye ufak bir kontrol yapıyoruz. Eğer yaratmaya başlamadıysak zaten yapacak bir şey yok. Ama eğer ki yeni bir çizgi yaratmaya başlamışsak bunu global değişkenimize de aktarmışız demektir. Bu durumda yeni gelen noktaları da söz konusu çizgiye eklememiz gerekir. Yine MouseLeftButtonDown'da olduğu gibi GetStylusPoints ile yeni noktaları alarak çizgimize ekliyoruz. Son olarak sıra geldi MouseLeftButtonDown durumunu yazmaya.

function MouseUp(sender,args)

{

  //Çizgi bitti. Değişkeni yok et.

  YeniStroke = null;

  sender.releaseMouseCapture();

}

Farenin sol düğmesi bırakıldığı anda biz de global değişkenimizi yok ediyoruz. Böylece artık fare ekranda hareket edildiğinde çizgiye yeni noktalar eklenmeyecek.

InkPresenter çizimi fare ile bu kadar olur :)
InkPresenter çizimi fare ile bu kadar olur :)

İşte hepsi bu kadar, InkPresenter'ı bir resim (Image) veya video (MediaElement) üzerine şeffaf olarak yerleştirerek de kullanabilirsiniz.

Hepinize kolay gelsin.

Sunday, January 27, 2008 5:35:49 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Saturday, January 26, 2008

Son üç gündür Microsoft İstanbul ofislerinde Students 2 Business programı çerçevesinde bir Silverlight eğitimi sunuyordum. Eğitim sanırım şu ana kadar Türkiye'de yapılan en geniş içerikli (3 tam gün) eğitim oldu ve maalesef buna rağmen her zamanki gibi süre "yetmedi de yetmedi". Keşke daha çok zamanımız olsa, daha çok konuya değinebilsek ve daha zengin uygulamalar yapabilseydik.

Microsoft İstanbul, S2B Silverlight Eğitimi
Microsoft İstanbul, S2B Silverlight Eğitimi

Her şey bir kenara benim için çok zevkli ve eğlenceli bir eğitimdi. Eğitimin organizasyonunda Microsoft'tan Students 2 Business program yöneticisi Burak Sarıca'ya ve Burcu Kutlu'ya çok teşekkür ediyorum. Eğitimde yaptığımız, bazılarını yarı bıraktığımız :) çalışmaların projelerini aşağıdaki adresten indirebilirsiniz.

Örnek Projeler - 26012008_2.zip (29.35 KB)

Saturday, January 26, 2008 1:40:56 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Eğitimler | Silverlight  | 
 Friday, January 25, 2008

Visual Studio 2008 ile beraber JavaScript Intellisense geldiğinden her yerde bahsediliyor ama kimse bunun nasıl kullanılacağından bahsetmiyor gibime geldi :) Herkes sadece Ctrl+Space ile gelen bir Intellisense'den ötesi yokmuş gibi davranıyor oysa çok daha ötesi var.

Varsayalım ki birden çok JavaScript dosyasının bulunduğu bir projede çalışıyorsunuz ve iki numaralı JavaScript dosyası içerisinde çalışırken "keşke bir numaralı dosyadaki metodlar Intellisense de gözükseydi!" dediniz. İşte size çözüm;

Import JavaScript Intellisense
Import JavaScript Intellisense

İsterseniz hazırlamış olduğunuz JavaScript sınıfları, metodları başka bir yazılım geliştirici tarafından kullanılacaksa Intellisense üzerinde gözükecek şekilde açıklama satırlarını kaynak kodunuza da yerleştirebilirsiniz.

Metod açıklaması tooltip içerisinde.
Metod açıklaması tooltip içerisinde.

Yukarıdaki şekilde herhangi bir JavaScript metodu içerisinde XML yazımı ile gerekli açıklamaları yerleştirirseniz Visual Studio 2008 otomatik olarak bu açıklamaları Intellisense ile beraber gelen ipuçlarında gösterecektir.

Metod parametrelerine dair ipuçları.
Metod parametrelerine dair ipuçları.

Hepinize kolay gelsin.

Friday, January 25, 2008 11:52:08 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   AJAX | Silverlight | Visual Studio 2008  | 
 Wednesday, January 23, 2008

Beklediğim an geldi! Silverlight 1.0 Plug-In artık Windows Update ile dağıtılıyor. Bugün itibari ile Windows Update içerisinde Silverlight 1.0 Plug-In ve tüm güncellemeler "optional" başlığı altında listelenecek. Ayrıca WSUS üzerinden de Products and Classification kısmında gözükecek ve "feature pack" olarak yer alacak. Kurumsal Silverlight kurulumu ile ilgili aşağıdaki adresten gerekli dokümanı bilgisayarınıza indirerek inceleyebilirsiniz.

http://download.microsoft.com/download/.../Silverlight%20Deployment%20Guide.doc

Hepimize hayırlı, uğurlu olsun :)

Wednesday, January 23, 2008 9:10:56 AM (GTB Standard Time, UTC+02:00)  #    Comments [2]   Silverlight  | 
 Tuesday, January 22, 2008

Silverlight 1.0 ile MediaElement kullanarak MMS adresleri üzerinden gelen "on-demand" veya "live" yayınları kullanıcılara gösterme şansımız var. Bu yazıda Windows Media Services ile Silverlight'ın beraber kullanılmasıyla ilgili karşılaşabileceğiniz sorunlara ve çözümlerine değinirken özellikle canlı bir yayın örneği yapacağız.

Windows Media Services ayarları...

İlk aşamada ayarlanması gereken şey sunucunun ta kendisi. Windows Media Services yüklü bir sunucuda PUSH desteği olan bir Publishing Point yaratmamız gerekiyor. "PUSH desteği" demek uzaktan bir Encoder'ın bağlanarak bu Publishing Point (Yayın Noktası)'e veri aktarabileceği anlamına geliyor. Eğer uzaktan bir kaynak bağlanmaz ise herhangi bir yayın da olmayacak. Bunu yapabilmek için Media Services içerisinde Publishing Points listesine sağ tıklayarak gelen menüden "Add Publishing Point (Advanced)" seçeneğini işaretliyoruz.

"Publishing Point" ayarları
"Publishing Point" ayarları

Karşınıza çıkan ekranda yukarıdaki gibi yapacağınız ayarlar sonrasında geriye kalıyor ince detaylara :) Aslında burada işler biraz karışıyor. Silverlight MMS adreslerinden video oynatabiliyor olsa da aslında MMS protokolü ile video yayını alamıyor. "Nasıl yani?" dediğinizi duyar gibiyim. Bir MMS adresi üzerinden üç farlı protokolde yayın yapılabilir, bunlar HTTP, MMS ve RTSP şeklinde. Her üç protokol için de Media Services içerisinde sunucu bazında genel ayarlar yapılabiliyor. Silverlight bu protokoller arasından HTTP'yi kullanıyor ve maalesef Media Services ile beraber varsayılan ayarlarda HTTP protokolü ile MMS üzerinden yayın 80 portu üzerinden yapılıyor. "Maalesef" dememin nedeni çoğu Media Server'ın aynı anda IIS olarak da kullanılmasından kaynaklanıyor. Eğer sunucunuzda IIS varsa ve Media Services ile Silverlight tarafına video göndermek istiyorsanız özel bir ayar yaparak Media Services'ın MMS üzerinden HTTP protokolünde başka bir port kullanmasını sağlamalı ve Silverlight uygulamalarınıza da söz konusu port bilgisini adres ile beraber aktarmalısınız. Eğer sunucunuzda IIS çalışmıyorsa zaten herhangi bir sorun yaşamazsınız.

Biz örnek olması için Media Services sunucusunun MMS üzerinden HTTP protokolü ile video gönderirken kullanacağı portu değiştirelim. Media Services yönetim penceresinde sunucuya tıkladıktan sonra sağ panelde "Properties" sayfasına geçerek "Control Protocol" ayarlarına geçin.

Media Services ayarları
Media Services ayarları

Yukarıdaki ekranda da görebileceğiniz üzere "WMS HTTP Server Control Protocol" seçeneğineçift tıkladığınızda özel bir ayar penceresi açılacaktır. Bu pencerede "Use Default Port" yerine özel bir port numarası ayarlamanız gerekecektir. Böylece Silverlight bu port üzerinden HTTP ile MMS adresine bağlanabilecek. Windows Media Player gibi istemci yazılımları doğrudan MMS protokolünü kullanacağı için bu ayardan etkilenmeyeceklerdir.

Dikkat Dikkat!

"On-Demand" veya "Live" bir Publishing Point düzenlerken dikkat etmeniz gereken bir diğer nokta da kesinlikle Playlist dosyaları kullanmamanız gerektiği. Silverlight "Playlist" desteği yok.

Yayın Zamanı

Sıra geldi yayın için videoyu gönderecek olan istemciyi ayarlamaya. Bunun için Expression Encoder kullanacağız. Expression Encoder içerisinde "View / Live Encoding Mode" menüsünden yayın moduna geçiş yapabilirsiniz. Burada sisteminize bağlı kameraları veya diskinizde dosyaları kullanabileceğiniz bir yayın ortamı bulunuyor. Bizi şu an ilgilendiren esas ayarlar "Output" tabında yer alıyor.

Expression Encoder ile canlı yayındayız.
Expression Encoder ile canlı yayındayız.

Bu ekranda "Publishing Point" seçeneğini işaretleyerek bağlanacağımız sunucunun IP:Port ve Publishing Point adını girmemiz gerekiyor. (Örn: http://127.0.0.1:8080/deneme) Hemen sonrasında "Pre Connect" düğmesine basarak authentication işlemini de yapabilirsiniz. Yayına hazırsınız, artık "Start" düğmesine basmanız yeterli."

Silverlight ile canlı yayın!

Geldik işin en kolay noktasına. Aslında tek yapmamız gereken artık ekrana bir MediaElement koyup Source özelliğini de Publishing Point'imize yönlendirmek. Aşağıdaki gibi bir kod başlangıç seviyesinde işimizi görecektir.

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="640" Height="480"

  Background="White"

  x:Name="Page"

  >

  <MediaElement Width="401" Height="278" Canvas.Left="106" Canvas.Top="90" Source="mms://127.0.0.1:8080/deneme"/>

</Canvas>

Hepinize kolay gelsin.

Tuesday, January 22, 2008 10:32:58 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Expression Encoder | Silverlight  | 
 Sunday, January 20, 2008

Dün Genç Girişimciler Kulübü çatısında çok verimli bir Silverlight semineri gerçekleştirdik. Seminer boyunca giriş seviyesinden Silverlight ile farklı veri uygulamalarına kadar geniş bir yelpazeye değindik. Toplam 3 saat olarak planladığımız semineri 4 saate uzatmamıza rağmen yetmedi de yetmedi :)

Genç Girişimciler Kulübü Silverlight Semineri
Genç Girişimciler Kulübü Silverlight Semineri

Seminerde kullandığım sunumu aşağıdaki adresten indirebilirsiniz.

Silverlight Semineri Slaytları - 20012008_5.xps (1.96 MB)

Katılan herkese çok teşekkürler. Bir başka seminerde görüşmek dileği ile...

Sunday, January 20, 2008 1:42:56 AM (GTB Standard Time, UTC+02:00)  #    Comments [2]   Seminer | Silverlight  | 
 Thursday, January 17, 2008

Uzun süredir seminerlerimde, eğitimlerimde sürekli Silverlight'ın hem istemci hem de sunucu tarafında platform bağımsız olduğunu söyleyip duruyorum :) İşte size kanıtı.

Pusula Yayıncılık web sitesinde yeni bir hizmet olarak artık kitapların örnek bölümlerini yayınlanıyor olacak. Bu yeniliğe bir ilk olarak hemen benim ASP.NET AJAX kitabım ile başladık. Hazırladığımız Silverlight uygulaması ile artık kitapları gerçekten okuyormuş gibi internet ortamında inceleyebileceksiniz. Sistem tabi ki dinamik altyapısı ile kitap ekleme işlemini de kolaylaştırıyor.

Silverlight ile örnek kitap bölümleri Pusula Yayıncılık sitesinde.
Silverlight ile örnek kitap bölümleri Pusula Yayıncılık sitesinde.

Esas önemli olan bahsettiğimiz tüm bu uygulamaların bir Linux sunucu üzerinden yayınlanıyor olması. Kurumun kendi sitesi PHP ile hazırlanıp hali hazırda bir Linux sunucu üzerinde bulunduğu için biz de Silverlight uygulamamızı Linux üzerine yükledik. Hiçbir sorun yaşamadık desem yalan olur :) Linux sunucularda dosya isimlerindeki harflerin büyük ve küçük harf hassasiyetine sahip olması bizi biraz uğraştırdı fakat bunun dışında herhangi bir sıkıntı yaşamadık.

Aşağıdaki adresten benim kitabım sayfasına ulaşarak "Örnek Bölüm" linkine tıkladıktan sonra karşınıza Silverlight uygulamamız gelecektir.

http://www.pusula.com/2/index.php?option=com_pusula&func=detail&Itemid=1&id=24

Çok yakında sitedeki tüm kitapların örnek bölüm içerikleri internet ortamına Silverlight ile aktarılacak.

Hepinize kolay gelsin.

Thursday, January 17, 2008 5:58:01 PM (GTB Standard Time, UTC+02:00)  #    Comments [3]   Silverlight  | 
 Tuesday, January 15, 2008

Bu hafta sonu Cumartesi günü saat 14.00-17.00 arasında Genç Girişimciler Kulübü'nde Silverlight semineri veriyor olacağım. Hepinizi beklerim. Özellikle CETURK seminerine gelen arkadaşları da bekliyorum :) Tamamen Silverlight işleyeceğimiz için biraz daha derinlere dalma şansımız olacaktır. WPF konusunda ileride ayrı bir seminer daha düzenlemeyi planladığımız için bu seminerde WPF işlemeyeceğiz. Expression Blend 2 ile Silverlight ve özellikle data uygulamalarına değineceğiz.

Etkinlik katılım formu ve detayları için aşağıdaki adresi ziyaret edebilirsiniz.

http://www.gencgirisimciler.org/bpi.asp?cid=594&caid=311

Tuesday, January 15, 2008 7:45:42 PM (GTB Standard Time, UTC+02:00)  #    Comments [4]   Seminer | Silverlight  | 
 Sunday, January 13, 2008

Dün sevgili tasarım dehamız Ercan Altuğ ve dostum Eralp Erat ile beraber CETURK organizasyonunda güzel bir bilişim günü yaşadık. Microsoft ve Ineta sponsorluğunda Microsoft İstanbul ofislerinde düzenlediğimiz gün içerisinde toplam üç seminer ile Expression Web, Design, Blend, WPF, Silverlight, C#3.0 ve LINQ konularına zaman elverdikçe detaylıca değinmeye çalıştık.

Benim sunduğum Silverlight ve WPF bölümünün slaytlarını aşağıdaki adresten indirebilirsiniz.

Silverlight ve WPF Slaytlarını İndir - 13012008_1.xps (5.89 MB)

Organizasyonda emeklerinden dolayı tüm CETURK ekibine çok teşekkür ediyorum. Aktiviteden bir fotoğraf ile yazımı sonlandırıyorum :)

2008 Microsoft Vizyonu ve Yeni Teknolojileri Semineri
2008 Microsoft Vizyonu ve Yeni Teknolojileri Semineri

Sunday, January 13, 2008 1:58:29 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Seminer | Silverlight | WPF  | 
 Friday, January 11, 2008

Bu hafta Microsoft İstanbul binasında gerçekleştirilen Microsoft İş Ortakları'ndan seçilmiş .NET yazılım geliştiricilere hitap eden Visual Studio 2008 eğitimleri çerçevesinde Silverlight ve WPF eğitimlerini verdim. Eğitimlerimde çok fazla sunum kullanmayı sevmeyen biri olmanın yanı sıra "bol bol" konuşarak yeni yazılım geliştirme ve teknoloji konseptlerini anlatırken slaytlardan yardım almayı da ihmal etmiyorum. Burada eğitime katılan arkadaşlara söz verdiğim üzere slaytları sizlerle paylaşıyorum.

Sunum Dosyaları - 11012008_2.zip (5.99 MB)

Katılan herkese çok teşekkürler.

Friday, January 11, 2008 1:52:09 AM (GTB Standard Time, UTC+02:00)  #    Comments [2]   Silverlight | WPF  | 
 Monday, January 07, 2008

Son iki günde yayınladığım makalelerim ışık hızı ile yazgelistir.com üzerinden de yayınlandı :) Hepinizin oylarını bekliyorum ;)

Silverlight ile istemci tarafına ZIP arşivi yükleyerek içeriğini kullanmak ve Preloader uygulaması
Silverlight ile tam ekran uygulamalar

Monday, January 07, 2008 3:17:55 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Sunday, January 06, 2008

Silverlight uygulamalarının yeri geldiğinde tam ekran olarak da kullanılabildiğini örneklerde görmüşsünüzdür. İster amacınız tam ekran video oynatmak olsun ister kullanıcılarınıza bir web sitesinden öte deneyimler yaşatmak olsun Silverlight ile kolaylıkla internet üzerinden yayınlanan tam ekran uygulamalar hazırlayabilirsiniz.

Örneğimizde web sitesi içerisindeki bir videoyu oynatan bir MediaElement kullanacağız. Silverlight animasyonuna fare ile tıklandığında animasyon tam ekran olacak ve beraberinde video da tam ekran olarak oynatılacak. Uygulamamızın XAML kodu aşağıdaki şekilde olabilir.

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="300" Height="300"

  Background="White"

  x:Name="Page"

  >

  <MediaElement Canvas.Left="0" Canvas.Top="0" Source="Bear.wmv" Width="300" Height="300" x:Name="Medya"/>

</Canvas>

Silverlight uygulamamız ilk açıldığında handeLoad durumunu çalıştıracaktır. Animasyon başlatıldığı gibi ilk olarak tüm animasyondaki fare tıklamalarını yakalamamız gerekecek. Böylece herhangi bir tıklama durumunda doğrudan tam ekran moduna geçebiliriz.

  handleLoad: function(control, userContext, rootElement)

  {

    rootElement.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.MouseLeftButtonDown));

    control.Content.OnFullScreenChange = this.OnFullScreenChange;

  }

Yukarıdaki kod içerisinde ilk satırda fare tıklamalarını yakalayacak olan JavaScript fonksiyonumuzu bağlıyoruz. Bir sonraki satırda ise Silverlight animasyonunun FullScreen yani tam ekran olma durumu değiştiğinde çalıştırılmak üzere bir JavaScript fonksiyonu tanımlıyoruz. Böylece animasyon tam ekran moduna geçtiğinde ek olarak video gösterim işlemini yapan MediaElement'i de tam ekran yapacağız. Unutmayın ki MediaElement toplam animasyonun içerisinde sadece bağımsız bir nesne. Tam ekran olan şey bizim Silverlight animasyonumuz MediaElement değil.

  MouseLeftButtonDown: function(sender, keyEventArgs)

  {

    sender.GetHost().Content.FullScreen = true;

  }

MouseLeftButtonDown durumuna iletilen parametreler arasından sender'ı alarak GetHost() metodu ile Silverlight animasyonumuzu yakalıyor ve içeriğine ait FullScreen özelliğini true yaparak tam ekran moduna geçişi sağlıyoruz. Sıra geldi tam ekran moduna geçişi algılayarak animasyon içerisindeki nesneleri uygun boyutlara getirecek olan kodumuza.

  OnFullScreenChange: function(sender, keyEventArgs)

  {

    sender.findName("Medya").Height=sender.getHost().content.actualHeight;

    sender.findName("Medya").Width=sender.getHost().content.actualWidth;

  }

Yukarıda da gördüğünüz gibi doğrudan Medya adındaki MediaElement nesnemizi yakalayarak genişlik ve yükseklik değerlerini değiştiriyoruz. Silverlight animasyonunun tam boyutunu alabilmek için yine Content üzerinden bu sefer actualHeight ve actualWidth özelliklerini kullanıyoruz. Böylece tam olarak ekranın boyutunu alarak MediaElement'imizi tam ekran boyutuna büyütebiliyoruz.

Tam ekran modundan çıkış ile ilgili kurallar zaten bizim değiştiremeyeceğimiz şekilde Silverlight Plug-In tarafından tanımlanmış durumda. Kullanıcılar Esc tuşu ile tam ekrandan çıkış yapabiliyorlar. Konu ile ilgili ufak bir uyarı tam ekran moduna geçiş esnasında otomatik olarak gösteriliyor.

Uygulamamızın son halindeki JavaScript dosyasında bakarsak sonuç aşağıdaki gibi.

if (!window.UntitledProject1)

  window.UntitledProject1 = {};

 

UntitledProject1.Page = function()

{

}

 

UntitledProject1.Page.prototype =

{

  handleLoad: function(control, userContext, rootElement)

  {

    rootElement.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.MouseLeftButtonDown));

    control.Content.OnFullScreenChange = this.OnFullScreenChange;

  },

  MouseLeftButtonDown: function(sender, keyEventArgs)

  {

    sender.GetHost().Content.FullScreen = true;

  },

  OnFullScreenChange: function(sender, keyEventArgs)

  {

    sender.findName("Medya").Height=sender.getHost().content.actualHeight;

    sender.findName("Medya").Width=sender.getHost().content.actualWidth;

  }

}

Hepinize kolay gelsin.

Sunday, January 06, 2008 2:20:09 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Saturday, January 05, 2008

Silverlight ile beraber gelen belki de en güzel özelliklerden biri Silverlight animasyonlarında kullanabileceğiniz harici içeriği sunucudan istemciye indirirken bir ZIP paketi şeklinde indirerek kullanabiliyor olmanız. Aşağıdaki örnekte uygulamamız bir ZIP paketini sunucudan indirerek içerisinde bir resim dosyasını ekranda göstermek üzere bir Silverlight Image nesnesine aktaracak. Tüm bunları yaparkan söz konusu ZIP paketi yüklenirken bir de yüklenme durumunu gösteren görsel çubuk hazırlayacağız.

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="300" Height="300"

  Background="White"

  x:Name="Page"

  >

  <Rectangle Width="245" Height="38" Stroke="#FF000000" Canvas.Left="28" Canvas.Top="23" x:Name="DurumCubugu">

    <Rectangle.Fill>

      <LinearGradientBrush EndPoint="0.988,0.5" StartPoint="0.012,0.5">

        <GradientStop Color="#FF000000" Offset="0"/>

        <GradientStop Color="#FF885656" Offset="0.772"/>

        <GradientStop Color="#FF000000" Offset="1"/>

      </LinearGradientBrush>

    </Rectangle.Fill>

  </Rectangle>

  <TextBlock Width="153" Height="19" Canvas.Left="40" Canvas.Top="34" TextWrapping="Wrap" x:Name="DurumMetin" Foreground="#FFFFFFFF"></TextBlock>

  <Image Width="245" Height="189" Canvas.Left="28" Canvas.Top="80" x:Name="Foto"/>

</Canvas>

Yukarıdaki Silverlight animasyonu içerisinde dosyanın yüklenme durumunu gösterecek olan DurumCubugu adında bir dikdörtgenimiz var. Bu dikdörtgenin genişliğini değiştirerek yükleme işlemini görsel olarak kullanıcıya yansıtacağız. Söz konusu dikdörtgenin üzerine denk gelecek şekilde bir de TextBlock yerleştirilmiş. DurumMetin adındaki bu TextBlock içerisinde 40% şeklinde yükleme durumunu yazılı olarak göstereceğiz. Son olarak yüklediğimiz ZIP dosyasındaki bir resmi göstermek için de adı Foto olan bir Image nesnemiz bulunuyor.

Gelin şimdi ilk olarak sunucudan asenkron bir şekilde ZIP paketini indirecek olan downloader nesnemizi yaratacağımız kodları inceleyelim.

    var yukleme = control.CreateObject("downloader");

    yukleme.AddEventListener("Completed", Bitti);

    yukleme.AddEventListener("DownloadProgressChanged", DurumDegisti);

    yukleme.Open("GET", "paket.zip");

    yukleme.Send();

Yukarıdaki kod Silverlight uygulaması ilk çalıştırıldığında hemen devreye girecek. handleLoad event handler içerisinde bulunan control parametresinden yola çıkarak yukleme adındaki downloader nesnemizi yaratıyoruz. Bu nesneye toplam iki tane EventListener ekleyeceğiz. Download işlemi tamamlandığımda çalıştırılmak üzere Bitti adındaki bir JavaScript fonksiyonunu Completed durumuna referans olarak veriyoruz. Ayrıca download durumunda her değişiklik olduğunda çalıştırılmak üzere bir de DurumDegisti adında bir JavaScript fonksiyonunu DownloadProgressChanged durumuna bağlıyoruz. Bu her iki fonksiyonu da ayrıca birazdan yazacağız. Son olarak sunucudan alacağımız dosya olan paket.zip dosyasını da belirterek Send() metodu ile talebimizi sunucuya gönderiyoruz.

Gelelim yükleme durumu değiştiğinde çalıştırılacak olan DurumDegisti fonksiyonunu yazmaya.

function DurumDegisti(sender, eventArgs)

{

sender.FindName("DurumCubugu").Width = sender.DownloadProgress * 245;

sender.FindName("DurumMetin").Text = Math.floor(sender.DownloadProgress * 100) + "%";

}

Her durum değişikliğinde ilk olarak DurumCubugu adındaki Silverlight dikdörtgenimizi bularak genişliğini değiştiriyoruz. Söz konusu dikdörtgenin maksimum genişliği 245 şeklinde olduğu için bize bir üzerinden gelen DownloadProgress özelliğini doğrudan 245 ile çarparak dikdörtgenin genişliğine aktarıyoruz. Sonrasında da yine aynı değeri 100 ile çarparak yüz üzerinden ne kadar yükleme yapıldığını bularak bu sefer de DurumMetin adındaki TextBlock nesnemizin içerisine yazdırıyoruz. Bunu yaparken gelen değeri Math.floor adındaki klasik bir JavaScript fonksiyonu ile yuvarlıyoruz.

Peki download işlemi bittiğinde ne yapacağız? ZIP içerisinden dosyamızı alarak nasıl Image nesnesine aktaracağız?

function Bitti(sender, eventArgs)

{

sender.findName("Foto").SetSource(sender, "IMG_5237.jpg");

}

Yukarıda da gördüğünüz üzere aslında durum oldukça basit. Image nesnemiz olan Foto nesnesini bulduktan sonra SetSource metodunu kullanıyoruz. Kaynak olarak sender, yani ZIP dosyamızdan gelen veriyi gösterdikten sonra kaynak paketteki dosya adını da vermemiz yeterli oluyor.

Silverlight uygulamasının tam JavaScript kodu aşağıdaki şekilde sonlanıyor.

if (!window.UntitledProject4)

  window.UntitledProject4 = {};

 

UntitledProject4.Page = function()

{

}

 

UntitledProject4.Page.prototype =

{

  handleLoad: function(control, userContext, rootElement)

  {

    var yukleme = control.CreateObject("downloader");

    yukleme.AddEventListener("Completed", Bitti);

    yukleme.AddEventListener("DownloadProgressChanged", DurumDegisti);

    yukleme.Open("GET", "paket.zip");

    yukleme.Send();

  }

}

function Bitti(sender, eventArgs)

{

sender.findName("Foto").SetSource(sender, "IMG_5237.jpg");

}

function DurumDegisti(sender, eventArgs)

{

sender.FindName("DurumCubugu").Width = sender.DownloadProgress * 245;

sender.FindName("DurumMetin").Text = Math.floor(sender.DownloadProgress * 100) + "%";

}

Hepinize kolay gelsin.

Saturday, January 05, 2008 1:38:57 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Friday, January 04, 2008

Blog sistemi olarak Windows Live Spaces'ı kullanıyorsanız beraberinde Windows Live Writer'ı da kullandığınızdan eminim. Tabi bunun için illa Live Spaces kullanmak zorunda değilsiniz. Belirli standartl çerçevesinde Live Writer şu an benim yazmakta olduğum blog sitemle de uyumlu. Rahatlıkla mesajlarımı LiveWriter üzerinden yazarak gönderebiliyorum.

Önceki yazılarımda bolca Silverlight Streaming Servis'lerinden bahsetmiştim, hatta Expression Encoder ile entegre olarak SSS üzerindeki 4GB alanınıza otomatik video yükleyebildiğimizi bile görmüştük. Peki ya bu videoları blogunuz koymak istiyorsanız? Aslında çok zor değil; sistemin size sağladığı IFRAME kodunu kopyalamanız yeterli fakat LiveWriter kullanıyorsanız çok daha kolayı var.

Silverlight Streaming Servis'leri ve LiveWriter Entegrasyonu
Silverlight Streaming Servis'leri ve LiveWriter Entegrasyonu

http://gallery.live.com/liveitemdetail.aspx?li=9f952b71-9883-4937-9f28-1e58002bb2ce&pl=8&bt=9

Yukarıdaki adresten LiveWriter Silverlight Plug-In'i indirerek bilgisayarınıza kurduktan sonra doğrudan LiveWriter içerisinde SSS AccountID ve Key girerek yayındaki tüm Silverlight uygulamalarınıza erişebiliyor ve istediğinizi blog mesajınıza ekleyebiliyorsunuz.

Hepinize kolay gelsin.

Friday, January 04, 2008 6:14:38 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Thursday, January 03, 2008

PCnet'in Ocak sayısındaki yazılarımı her ay olduğu gibi yine buradan sizlere duyurmak istiyorum :) Derginin OKUL bölümünde AJAX, ASP.NET 3.5, Expression Blend, Expression Design, Silverlight ve Expression Web ile ilgili yazılarım yer alıyor.

AJAX : UpdateProgress ile asenkron yüklemelerin takibi
Expression Blend : Animasyonlar ve Tetikleyiciler
Expression Web: Expression Web ile Veri Oyunları
Expression Design : Vektörel Çizim Araçları

Tüm bu yazılara ek olarak Ocak sayısına özel sürpriz makalelerim :)

FaceBook uygulamanızı geliştirin ! : ASP.NET bilgisiyle kolay yoldan FaceBook uygulamaları geliştirmenin yollarını inceliyoruz.
Visual Studio 2008 Bilgisayarlarımızda! : Visual Studio 2008 ve ücretsiz Express sürümleri bilgisayarlarımıza girdi. Peki yeni neler geldi?

Hepsi PCnet Ocak sayısında! :)

Hepinize kolay gelsin.

Thursday, January 03, 2008 12:19:14 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   AJAX | ASP.NET 3.5 | Expression Blend | Expression Design | Expression Web | Silverlight | Visual Studio 2008  | 
 Wednesday, January 02, 2008

2008'in ilk aktivitesini CETURK.com organizasyonunda Microsoft, İstanbul / Dikilitaş binasında gerçekleştiriyoruz. "2008 Microsoft Vizyonu ve Yeni Teknolojileri Semineri" olarak adlandırdığımız güne hepiniz davetlisiniz :) 12 Ocak, Cumartesi günü sabah 10'dan başlayarak 17.30'a kadar sürecek olan seminerlerin konuları arasında Expression Web, Design, Blend, Silverlight, Visual Studio 2008, LINQ bulunuyor. Expression Blend ile WPF Animasyonları ve Silverlight 1.0, 2.0 Uygulamaları bölümünü 12.30-14.30 arasında ben sunuyor olacağım.

Programın detayları ve seminere kayıt için aşağıdaki linki kullanabilirsiniz.

http://www.ceturk.com/etkinlikkayit.asp?id=35

Wednesday, January 02, 2008 11:46:06 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   .NET Framework 3.5 | ASP.NET 3.5 | Expression Blend | Expression Design | Expression Encoder | Expression Web | LINQ | Seminer | Silverlight | Visual Studio 2008 | WPF  | 
 Friday, December 28, 2007

Dün KKTC, Doğu Akdeniz Üniversitesi'nde 3 saatlik bir Silverlight semineri düzenledik. Seminer boyunca gelen sorular ve yoğun ilgi beni gerçekten çok sevindirdi. Aşağıda sizlerle seminerde kullanmış olduğum sunumu paylaşıyorum. Semineri İngilizce olarak düzenlediğimiz için sunumlar da ingilizce.

Silverlight Sunumları - 27122007_2.pdf (1,3 MB)

Seminerin düzenlenmesinde katkılarından dolayı DAÜ ACM grubundan Arif Görkem Güngör'e buradan teşekkür ediyorum. Son olarak aktiviteden bir fotoğraf ile yazımı sonlandırıyorum ;)

KKTC, Doğu Akdeniz Üniversitesi Silverlight Semineri
KKTC, Doğu Akdeniz Üniversitesi Silverlight Semineri

Friday, December 28, 2007 6:55:18 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Seminer | Silverlight  | 
 Sunday, December 23, 2007

Eğer Visual Studio 2008'e geçiş yaptıysanız yeni bir proje yarattığınızda Silverlight 1.0 seçeneğinin var olmadığını görerek eminim ki siz de benim gibi hayal kırıklığına uğramışsınızdır. Visual Studio 2005'e Silverlight 1.0 proje şablonunu yüklemek için Silverlight 1.0 SDK ile beraber gelen "Project Template" kurulumundan faydalanıyorduk. Maalesef Silverlight 1.0 SDK Visual Studio 2008'e ile uyumlu proje şablonlarını yükleyecek şekilde hala yenilenmedi.

Aslına bakarsanız Expression Blend 2 December Preview'u da incelediğimizde artık Silverlight 1.0 projeleri için proje dosyalarının yaratılmadığını ve direk Visual Studio'daki "Open Web Site" menüsü gibi bir klasör göstererek Silverlight 1.0 web siteleri yaratarak eski sitelerini açabildiğimizi görüyoruz. Bu güzel bir gelişme çünkü çoğu zaman Silverlight uygulamaları zaten var olan bir web sitesinin bir parçası olacaktır. Ayrı bir proje olarak değerlendirmek çoğu durumda mümkün olmuyor.

Herşeye rağmen bir şekilde Visual Studio 2008 ile beraber de Silverlight 1.0 proje şablonlarını kullanabilmemiz gerekir. Bunun için bilgisayarınıza Visual Studio 2005 Silverlight 1.0 proje şablonunu yükledikten sonra aşağıdaki konumda yer alan ZIP dosyasını alarak

..\Documents\Visual Studio 2005\Templates\ProjectTemplates\Visual C#\Silverlight\SilverlightJSApplication.zip

aşağıdaki konuma kopyalamanız gerekiyor.

..\Documents\Visual Studio 2008\Templates\ProjectTemplates\Visual C#\Silverlight\SilverlightJSApplication.zip

Kopyalama işlemini tamamladıktan sonra Visual Studio 2008'i açtığınızda aşağıdaki şekilde Silverlight projesi yaratma seçeneği ile karşılaşacaksınız.

Visual Studio 2008 içerisinde Silverlight 1.0 Proje Şablonu
Visual Studio 2008 içerisinde Silverlight 1.0 Proje Şablonu

Bu sistemi kullanarak yarattığınız Silverlight 1.0 projeleri ile beraber Visual Studio 2008 bir de Solution File yaratacaktır. Bu dosyaları isterseniz Expression Blend 2 ile açabilirsiniz veya yukarıda da bahsettiğim gibi direk "File / Open / Site" menüsü ile klasörü açmayı deneyebilirsiniz.

Hepinize kolay gelsin.

Not:Visual Studio 2008 için Microsoft tarafından dağıtılan Silverlight Tools paketi Silverlight 2.0 sürümü içindir. Yukarıdaki bahsettiklerim 1.0 yani şu an yayında olan sürüm için geçerli.

Sunday, December 23, 2007 2:08:38 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Friday, December 21, 2007

Silverlight ile yaptığımız projelerde istemci tarafında eğer Silverlight Plug-In yüklü değilse projemiz dahilinde Silverlight.js dosyası otomatik olarak bir yükleme uyarısı çıkarıyor ve kullanıcıyı gerekli yüklemeleri yapmak üzere Microsoft web sitelerine yönlendiriyor. Bu durumun pek bir zararı yok gibi gözükse de aslında kullanıcıyı başka bir web sitesine yönlendirmeden de bu işi halledebiliriz :)

Standard bir Silverlight yükleme uyarısı.
Standard bir Silverlight yükleme uyarısı.

Peki Microsoft web sitelerine yönlendirmeden doğrudan bir yüklemeyi nasıl ayarlayabiliriz. Aslında durum gerçekten basit bir ayardan öteye geçmiyor.

    properties: {

      width: "100%",

      height: "100%",

      version: "1.0",

      inplaceInstallPrompt: true

    },

Silverlight uygulamamıza ait createSilverlight fonksiyonu içerisinde belirlediğimiz parametreler arasında bir de inplaceInstallPrompt parametresi ayarlıyoruz. Bu parametrenin değeri true olarak ayarlandığında Silverlight yükleme uyarısı aşağıdaki şekilde ekrana gelecektir. Söz konusu resme tıklandığında da direk yükleme işlemi başlayacaktır.

Doğrudan yükleme yapan uyarı mesajı.
Doğrudan yükleme yapan uyarı mesajı.

Hepinize kolay gelsin.

Friday, December 21, 2007 1:23:05 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Wednesday, December 19, 2007
 Monday, December 17, 2007

Silverlight uygulamaları hazırlarken Expression Blend'in 2.0 sürümünü kullanmamız gerekirken maalesef 2.0 sürümünün hala Preview aşamasında olmasa epey sıkıntı yaratıyor. Durum böyle olunca Preview'ların sürümlerini de yakından takip etmek şart. Takriben her ay yeni bir Preview çıkıyor zaten her bir Expression Blend 2 Preview sürümü de söz konusu ayın ismi ile anılıyor. Şu an Expression Blend 2'nin December Preview sürümünü hemen aşağıdaki adresten bilgisayarınıza indirebilirsiniz.

http://www.microsoft.com/expression/products/download.aspx?key=blend2preview

Özellikle Visual Studio 2008 ile proje dosyaları uyumluluğunun gelmesi zaten beklediğimiz bir gelişmeydi. Diğer yandan Silverlight tarafına baktığımızda da aslında Expression Blend 2 arayüzü epey bir derlenip toparlanmış. WPF tarafında olup Silverlight tarafında desteklenmeyen özelliklere ait panellerin program içerisinde Silverlight projelerinde gereksiz yere gözükmesi engellenmiş. Böylece artık özellikle Silverlight seminerlerimde "Programın bu bölümü burada gözüküyor fakat Silverlight ile çalışmıyor sadece WPF'de var." demekten kurtuldum :)

Monday, December 17, 2007 12:33:05 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Expression Blend | Silverlight | WPF  | 
 Saturday, December 15, 2007

Dün Galatasaray Üniversitesi'nde Bilişim Kulübü'nun katkıları ile süper bir Silverlight semineri yaptık. Her zamanki gibi tüm gün yoğun bir ders temposundan çıktıktan sonra ciddi bir konsantrasyon performansı ile semineri sonuna kadar dinleyen tüm öğrenci kardeşlerime çok teşekkür ediyorum. Seminerin sonunda çekilen aşağıdaki fotoğraftan da anlaşılabileceği gibi epey eğlenceli dakikalar geçirdik :)

Galatasaray Üniversitesi Silverlight Semineri
Galatasaray Üniversitesi Silverlight Semineri

Organizasyonu düzenleyen Galatasaray Üniversitesi Bilişim Kulübüne ve özellikle sevgili kardeşim MSP, Emre Çalışır'a buradan teşekkür etmek istiyorum.

Saturday, December 15, 2007 11:52:14 AM (GTB Standard Time, UTC+02:00)  #    Comments [1]   Seminer | Silverlight  | 
 Friday, December 14, 2007

Sayfa içi Silverlight kullanımı özellikle Silverlight animasyonlarını ve görsellerini oluşturan XAML kodunu sunucu tarafında oluşturuyorsanız belirli senaryolarda işinizi kolaylaştırabilir. Örneğin bir ASP.NET Repeater içerisinde ItemTemplate'ler ile XAML kodu oluşturmak bu konsept içerisinde mümkün.

Normal şartlarda bir Silverlight uygulaması createSilverlight fonksiyonundaki Silverlight.createObjectEx metoduna verilen source parametresinde yazan adresteki XAML kodunu alarak gerekli animasyonları oluşturur. Source parametresi içerisinde aşağıdaki gibi # işaret ile başlayarak bir kaynak belirttiğinizde Silverlight.createObjectEx fonksiyonu sayfa içerisinde uygun bir XAML kaynağı arayacak ve varsa gerekli yüklemeyi sağlayacaktır.

function createSilverlight()

{

  var scene = new ITU2.Page();

  Silverlight.createObjectEx({

    source: "#CODE",

    parentElement: document.getElementById("SilverlightControlHost"),

    id: "SilverlightControl",

    properties: {

      width: "100%",

      height: "100%",

      version: "1.0"

    },

    events: {

      onLoad: Silverlight.createDelegate(scene, scene.handleLoad)

    }

  });

}

Peki #CODE da nedir? Yukarıdaki gibi #CODE dediğimizde Silverlight harici bir XAML dosyasına bakmak yerine createSilverlight fonksiyonunun çalıştırıldığı sayfada ID bilgisi CODE olan bir SCRIPT bloğu arayacak. Söz konusu SCRIPT bloğunun aşağıdaki gibi TYPE özelliğinin de TEXT/XAML olması gerekir.

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

  <script type="text/javascript" src="Silverlight.js"></script>

  <script type="text/javascript" src="Default_html.js"></script>

  <script type="text/javascript" src="Page.xaml.js"></script>

  <style type="text/css">

    .silverlightHost {

      height: 480px;

      width: 640px;

    }

  </style>

</head>

 

<body>

<script id="CODE" type="text/xaml">

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="300" Height="300"

  Background="White"

  x:Name="Page"

  > 

  <Rectangle Width="0" Height="2" Fill="#FFFB0000" Stroke="#FF000000" RadiusX="26.5" RadiusY="26.5" Canvas.Left="-113" Canvas.Top="166"/>

</Canvas>

</script>

  <div id="SilverlightControlHost" class="silverlightHost">

    <script type="text/javascript">

      createSilverlight();

    </script>

  </div>

</body>

</html>

Yukarıdaki örnekte de görebildiğiniz üzere Silverlight uygulaması ile ilgili tüm XAML kodu SCRIPT tagları arasına yerleştirilmiş durumda. Daha önceki adımda JavaScript tarafında #CODE diyerek burada ID bilgisi CODE olan bölümden gerekli XAML içeriğinin alınmasını sağladık. Silverlight uygulamamız normal bir Silverlight animasyonu olarak çalışmaya devam edecektir. Direk sayfa içerisinde bulunan bu XAML kodunu harici bir sayfa yaratmadan Repeater gibi nesnelerle veritabanına bağlayarak kullanmamız bu teknik ile çok daha kolaylaşıyor.

Hepinize kolay gelsin.

Friday, December 14, 2007 12:22:26 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Wednesday, December 12, 2007

Seminer veya eğitimlerin faydalı olduğunu hissettiğimde ne kadar mutlu olduğumu anlatamam :) Bugün İstanbul Teknik Üniversitesi'nde "Silverlight" semineri düzenledik. Her zamanki gibi 3 saat süren mini bir maratondu. Maratonun başındaki ilk bir buçuk saatin sonundaki mola sonrasında ortadan kaybolan :) bir kısım katılımcının sonrasında ikinci bölümde "gerçek meraklı ve ilgili" kesimle başbaşa kaldım. Herhalde o dakikadan sonra semineri 6 saate de uzatsam devam edebilirdik :)

İstanbul Teknik Üniversitesi Silverlight Semineri
İstanbul Teknik Üniversitesi Silverlight Semineri

Ben katılan herkese çok teşekkür ediyorum. 3 saatlik seminerler genelde (özellikle yazılım alanında) alışık olunmayan bir durum ve bir de üzerine benim eğitim tadındaki üslubum eklenince aslında epey ağır bir içerik bombardımanına mağdur kalıyor katılımcılar. Üzerine bir de tüm bu katılımcı kardeşlerimin zaten gün içindeki ağır ders temposundan çıktıklarını düşünürsek ilgilerini bu kadar canlı tutarak beni dinlemeleri ciddi bir performans.

Organizasyonla ilgili yardımlarından dolayı sevgili kardeşim MSP, Deniz Demir'e çok teşekkür ediyorum.

Wednesday, December 12, 2007 10:59:17 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Seminer | Silverlight  | 
 Tuesday, December 11, 2007

İstanbul Üniversitesi "Silverlight" SemineriDün İstanbul Üniversitesi'nde zevkli bir "Silverlight" semineri düzenledik. Seminer boyunca Expression Blend 2 ile Silverlight 1.0 ve 2.0 uygulamaları hazırlamanın yollarını incelerken birkaç ufak JavaScript sorunu haricinde :) pürüzsüz bir işleyiş sağlayabildik. Maalesef seminerde internet bağlantım olmadığı için sadece adreslerini söylediğim fakat gösteremediğim bazı sayfaların adreslerini tekrar buradan da paylaşmak istiyorum. Özellikle seminer boyunca not alamayanlar için faydalı olacaktır.

http://www.silverlight.net
http://silverlight.net/Showcase/
http://silverlight.net/GetStarted/
http://www.microsoft.com/express/download/

Organizasyonla ilgili yardımlarından dolayı özellikle sevgili MSP, Hilmi Beydeş'e teşekkür etmek istiyorum.

Tuesday, December 11, 2007 9:06:32 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight | Seminer  | 

Türkiye'nin ilk içerik yönetim sistemli full Silverlight sitesi olma özelliğini taşıyan deveload.com artık Microsoft'un resmi Silverlight sitesinde "Showcase" bölümünde sergileniyor. Böylece "Türk Bayrağı"'nı dalgalandırma konusunda artık bizim de çorbada tuzumuz var.

Silverlight Showcase'de deveload.com

Tuesday, December 11, 2007 11:29:35 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Haberler | Silverlight  | 
 Thursday, December 06, 2007

Silverlight'ın en sevdiğim yanı görsel anlamdaki her şeyi XAML ile yani özünde XML ile tanımlıyor olmamız. Böylece hali hazırda herhangi bir programlama dili ile rahatlıkla Silverlight görsel animasyonlarını yaratmak mümkün oluyor. Ben bu yazımda ASP.NET ile Silverlight XAML kodu yaratacağım. Yazının örnek kodlarını çok uzatmamak ve mantığı sizlere iletebilmek adına sadece bir dikdörtgen ve basit bir animasyon kullanacağım.

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="640" Height="480"

  Background="White"

  x:Name="Page"

  >

  <Canvas.Resources>

    <Storyboard x:Name="Animasyon">

      <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="rectangle" Storyboard.TargetProperty="(UIElement.Opacity)">

        <SplineDoubleKeyFrame KeyTime="00:00:00" Value="1"/>

        <SplineDoubleKeyFrame KeyTime="00:00:01" Value="0.1"/>

      </DoubleAnimationUsingKeyFrames>

    </Storyboard>

  </Canvas.Resources>

  <Rectangle Width="300" Height="300" Fill="#FFFF0000" Stroke="#FF000000" Canvas.Left="65" Canvas.Top="89" RenderTransformOrigin="0.5,0.5" x:Name="rectangle"/>

</Canvas>

Yukarıda gördüğünüz XAML kodunu Expression Blend 2 ile yarattığım Silverlight uygulamamdan aldım. Uygulamam içerisinde bir dikdörtgen bulunuyor. Ayrıca Animasyon adında bir de StoryBoard hazırlayarak dikdörtgenin şeffaflığını değiştirerek ufak bir animasyon yarattım. Bu Silverlight uygulamasına ek olarak tabi ki animasyonu başlatacak olan JavaScript kodlarının da haricen yazılması gerekiyor fakat bizim bu yazıda amacımız işin görsel kısmını ASP.NET ile yaratacağımız XML kodları ile oluşturuyor olmak olacak.

Oluşturmayı hedeflediğimiz XAML kodu önümüzde olduğuna göre hemen örnek bir ASP.NET Web Sitesi yaratarak Page_load durumuna kodlarımızı yazmaya başlayalım. Unutmayın ki amacımız sayfamızın geriye HTML değil XAML kodları döndürmesini sağlamak. Böylece bu kodları alarak JavaScript ile Silverlight uygulamasına çevirebileceğiz.

        Response.ContentType = "text/xml"

        Response.Clear()

Yukarıdaki kod ile içerisinde bulunduğumuz ASP.NET sayfasının artık bir HTML değil XML kodu döndüreceğini belirlemiş oluyoruz sonrasında da sayfanın içeriğini başlangıçta güzelce bir temizliyoruz :) Bir sonraki satırda XAML kodlarımızı yaratmak üzere bir XmlTextWriter nesnesi tanımlayarak nesnenin çıktı vereceği Stream olarak da Response'u yani sayfamızın kaynağını belirteceğiz.

        Dim Dosya As New System.Xml.XmlTextWriter(Response.Output)

Tüm bunları yaptığımıza göre artık bizi klasik bir XML dosyası yaratma prosedürü bekliyor. İlk olarak yaratmamız gereken XAML kodumuzun RootElement'i olan Canvas nesnesi.

        Dosya.WriteStartElement("Canvas")

        Dosya.WriteStartAttribute("x", "Page", "http://schemas.microsoft.com/winfx/2006/xaml")

        Dosya.WriteString("sadasd")

        Dosya.WriteEndAttribute()

        Dosya.WriteStartAttribute("xmlns")

        Dosya.WriteString("http://schemas.microsoft.com/client/2007")

        Dosya.WriteEndAttribute()

Canvas'ımızı yaratırken XAML'e özel XML NameSpace'lerini de tabi ki tanımlamamız şart. Sıra artık yukarıdaki şekliyle tüm XML elementlerini, özelliklerini ve değerlerini tek tek yaratmaya geldi. Yazımın başındaki XAML dosyasını yaratan kodun tamamını aşağıda bulabilirsiniz.

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

 

        Response.ContentType = "text/xml"

        Response.Clear()

        Dim Dosya As New System.Xml.XmlTextWriter(Response.Output)

 

        'CANVAS GELİYOR

        Dosya.WriteStartElement("Canvas")

        Dosya.WriteStartAttribute("x", "Page", "http://schemas.microsoft.com/winfx/2006/xaml")

        Dosya.WriteString("sadasd")

        Dosya.WriteEndAttribute()

        Dosya.WriteStartAttribute("xmlns")

        Dosya.WriteString("http://schemas.microsoft.com/client/2007")

        Dosya.WriteEndAttribute()

 

        'RESSOURCES GELİYOR

        Dosya.WriteStartElement("Canvas.Resources")

        Dosya.WriteStartElement("Storyboard")

        Dosya.WriteStartAttribute("x", "Name", "http://schemas.microsoft.com/winfx/2006/xaml")

        Dosya.WriteString("Animasyon")

        Dosya.WriteEndAttribute()

        Dosya.WriteStartElement("DoubleAnimationUsingKeyFrames")

 

        Dosya.WriteStartAttribute("BeginTime")

        Dosya.WriteString("00:00:00")

        Dosya.WriteEndAttribute()

        Dosya.WriteStartAttribute("Storyboard.TargetName")

        Dosya.WriteString("rectangle")

        Dosya.WriteEndAttribute()

        Dosya.WriteStartAttribute("Storyboard.TargetProperty")

        Dosya.WriteString("(UIElement.Opacity)")

        Dosya.WriteEndAttribute()

 

        Dosya.WriteStartElement("SplineDoubleKeyFrame")

        Dosya.WriteStartAttribute("KeyTime")

        Dosya.WriteString("00:00:00")

        Dosya.WriteEndAttribute()

        Dosya.WriteStartAttribute("Value")

        Dosya.WriteString("1")

        Dosya.WriteEndAttribute()

        Dosya.WriteEndElement()

 

        Dosya.WriteStartElement("SplineDoubleKeyFrame")

        Dosya.WriteStartAttribute("KeyTime")

        Dosya.WriteString("00:00:01")

        Dosya.WriteEndAttribute()

        Dosya.WriteStartAttribute("Value")

        Dosya.WriteString("0.1")

        Dosya.WriteEndAttribute()

        Dosya.WriteEndElement()

 

        Dosya.WriteEndElement()

        Dosya.WriteEndElement()

        Dosya.WriteEndElement()

        'RESSOURCES BİTTİ

 

        'DİKDÖRTGEN GELİYOR

        Dosya.WriteStartElement("Rectangle")

        Dosya.WriteStartAttribute("Height")

        Dosya.WriteString("300")

        Dosya.WriteEndAttribute()

        Dosya.WriteStartAttribute("Width")

        Dosya.WriteString("300")

        Dosya.WriteEndAttribute()

        Dosya.WriteStartAttribute("Fill")

        Dosya.WriteString("#FFFF0000")

        Dosya.WriteEndAttribute()

        Dosya.WriteStartAttribute("Stroke")

        Dosya.WriteString("#FF000000")

        Dosya.WriteEndAttribute()

        Dosya.WriteStartAttribute("Canvas.Left")

        Dosya.WriteString("65")

        Dosya.WriteEndAttribute()

        Dosya.WriteStartAttribute("Canvas.Top")

        Dosya.WriteString("89")

        Dosya.WriteEndAttribute()

        Dosya.WriteEndElement()

        'DİKDÖRTGEN BİTTİ

 

        Dosya.WriteEndElement()

        'CANVAS BİTTİ

 

        Dosya.Flush()

        Dosya.Close()

        Response.End()

 

    End Sub

Kodun epey uzun olduğunun farkındayım. Fakat yukarıdaki kodu böyle elle tek tek yazdığımızı değil de :) herhangi bir veritabanına bağlıyken döngüler içerisinde çalıştırdığımızı düşünürseniz aslında işin ne kadar da kolay olabileceğini anlamış olursunuz. Bu teknik ile veritabanına bağlı gerçek zamanlı olarak vektörel animasyonlar yaratmak çocuk oyuncağı oluyor.

Özellikle kodun son satırlarındaki Response.End() komutunu yazmayı unutmayın. Aksi halde sayfanızın kaynağındaki HTML kodları da istemciye gider ve XAML dosyanızın yapısı bozulmuş olur.

Sayfamızı hazırladığımıza göre artık sıra geldi bu XAML'i bir Silverlight projesinde kullanmaya. Yeni bir Silverlight projesi yaratarak gerekli tüm JavaScript komutlarını ASP.NET sayfanıza veya herhangi bir web sitesine aktardıktan sonra tek yapmanız gereken createSilverlight JavaScript fonksiyonunuz içerisindeki source özelliğini değiştirerek XAML çıktısı veren sayfanızın adresini yazmak.

function createSilverlight()

{

  var scene = new UntitledProject50.Page();

  Silverlight.createObjectEx({

    source: "default.aspx",

    parentElement: document.getElementById("SilverlightControlHost"),

    id: "SilverlightControl",

    properties: {

      width: "100%",

      height: "100%",

      version: "1.0"

    },

    events: {

      onLoad: Silverlight.createDelegate(scene, scene.handleLoad)

    }

  });

}

Unutmayın! :) Source özelliğine yabancı bir domainden kaynak belirtemezsiniz. Kaynak ASPX sayfası ile Silverlight animasyonunuzun yayınlanacağı sayfanın aynı olması gerekiyor.

Hepinize kolay gelsin.

Thursday, December 06, 2007 4:41:58 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Wednesday, December 05, 2007

PCnet'in Aralık sayısı yine dopdolu :) Derginin OKUL bölümünde AJAX, Silverlight, Expression Web, Expression Blend, Expression Media ve Expression Design ile ilgili yazılarım yer alıyor. Ayrıca Aralık sayısından itibaren dünyada ilk defa :) ASP.NET 3.5 bölümü PCnet'te!

ASP.NET 3.5 : ASP.NET 3.5 Geliyor!
AJAX
: UpdatePanel uzmanlığı
Silverlight : Kolay Yoldan Silverlight Animasyonları
Expression Blend : MediaElement ile Video Sihirleri
Expression Web: Expression Web ile yolculuğa devam
Expression Design : İlk Windows Programımızı Tasarlayalım
Expression Media : Mültimedya Dosya Yönetimi

Tüm bu yazılara ek olarak Aralık sayısına özel sürpriz makalem :)

Yeni nesil MashUP uygulamaları : MashUp uygulamaları hazırlamanın zevki Microsoft Popfly ile kat kat arttı.

Hepsi PCnet Aralık sayısında! :)

Daha fazlasını mı istiyorsunuz? PCnet ile beraber Expression Studio paketinden Blend, Web, Design, Encoder, Media'nın deneme sürümleri de DVD olarak geliyor.

Hepinize kolay gelsin.

Wednesday, December 05, 2007 4:51:05 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   AJAX | ASP.NET 3.5 | Expression Blend | Expression Design | Expression Media | Expression Studio | Expression Web | Silverlight | Visual Studio 2008  | 
 Sunday, December 02, 2007

Bolca Silverlight 1.0 uygulamaları hazırladığımız :) bugünlerde maalesef Silverlight 1.0 ile beraber gelen hazır kontrollerin azlığı yüzünden biraz zorluk çekiyoruz. Bu durum Silverlight'ın bir sonraki sürümünde düzeliyor olacak fakat biz o zamana kadar uygulamalarımızda HTML kontrolleri ile idare etmek durumundayız. Peki nasıl olur da bir Silverlight uygulamasında HTML kontrollerini kullanırız?

Esasen çözüm özünde çok basit. Silverlight'ın programlamasını ne de olsa sayfamızdaki JavaScript ile yapıyoruz. Aynı JavaScript aslında sayfadaki diğer HTML kontrollerine de ulaşabilme olanağına sahip. Yani hem Silverlight hem de HTML nesnelerine aynı anda aynı kod ile ulaşabiliriz. Bu durumda geriye sadece bir tek soru kalıyor;

HTML kontrollerini Silverlight animasyonlarının üzerine nasıl yerleştiririz?

İlk olarak ufak bir Silverlight animasyonu hazırlayarak sayfanıza yerleştirin. Sonrasında hemen gidip createSilverlight metodunuzu bularak içerisinde aşağıdaki değişikliği yapın. Eğer projenizi Expression Blend 2 ile yarattıysanız createSilverlight fonksiyonu default_html.js dosyası içerisinde yer alacaktır.

function createSilverlight()

{

  var scene = new DEVELOAD_SV.Page();

  Silverlight.createObjectEx({

    source: "Page.xaml",

    parentElement: document.getElementById("BirHost"),

    id: "BirHost",

    properties: {

      width: "100%",

      height: "100%",

      version: "1.0",

      isWindowless: "True"

    },

    events: {

      onLoad: Silverlight.createDelegate(scene, scene.handleLoad)

    }

  });

}

Özellikle kalın olarak yazdığım satıra dikkat etmenizde fayda var. Silverlight animasyon nesnemize ait isWindowless özelliğini True olarak ayarladığımızda artık bir sonraki adıma geçmek için hazırız demektir. Aslında bundan sonrası tamamen HTML ve CSS bilgisi ile alakalı.

    <div id="BirHost">

 

      <script type="text/javascript">

            createSilverlight();

      </script>

 

      <div class="container1">

 

      </div>

    </div>

Yukarıda gördüğünüz HTML kodu Silverlight animasyonumuzun gösterileceği sayfada yer alıyor. Hali hazırda zaten Silverlight uygulamamız için bir Host element olarak BirHost elementi ayarlanmış durumda. Bir önceki bölümde createSilverlight fonksiyonumuz içerisinde de BirHost elementini parentElement olarak ayarlamıştık. Normalden farklı olarak bu sefer kodumuzda, BirHost elementi içerisinde başka bir DIV elementi daha yer alıyor. İşte bu DIV elementi bizim HTML kontrollerimizi koyacağımız yer. Önemli olan söz konusu DIV elementine doğru CSS özelliklerini aktararak Silverlight uygulamasının önünde gözükmesini sağlamak.

      .container1

      {

        height:300px

        z-index:1

        position:absolute;

        top:230px;

        left:0px;

        width:100%;

      }

Yukarıdaki CSS sınıfı içerisinde özellikle kalın yazılı satırlar çok önemli. z-index CSS özelliğini 1 olarak ayarlayarak söz konusu DIV elementinin bir katman öne gelmesini ve Silverlight uygulamasının önünde gözükmesini sağlıyoruz. Sonrasında position özelliğini de absolute tanımlayarak DIV elementini ekranda istediğimiz yere konumlandırabiliyoruz. Artık DIV elementimiz Silverlight uygulamamızın önünde gözükecek.

DIV elementinin içine istediğiniz HTML nesnelerini yerleştirebilirsiniz ve söz konusu HTML elementlerinin onclick gibi eskiden de kullandığımız eventlarına farklı JavaScript fonksiyonları aktararak yine bu fonksiyonlar içerisinde Silverlight animasyonunuzdaki nesnelere de .findName metodu ile ulaşabilirsiniz. Aslında bu noktada ister HTML elementlerini yakalamak olsun ister Silverlight nesnelerini, bugüne kadar yaptıklarımızdan herhangi bir farklılık söz konusu değil. Esas mesele HTML nesnelerini "Overlay" olarak Silverlight animasyonunun önüne koyabilmekti :)

Hepinize kolay gelsin.

Sunday, December 02, 2007 12:54:48 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Wednesday, November 28, 2007

Visual Studio 2008'in çıkması ile artık eski Silverlight 1.1 Tools paketini kullanma şansınız yok. Visual Studio 2008 Beta 2 ile beraber çalışabilen paket Visual Studio 2008'in RTM sürümüne göre tekrar hazırlandı. Aşağıdaki adresten paketi bilgisayarınıza indirebilirsiniz. Fakat unutmayın ki tüm bu paketler ve Silverlight hala Alpha aşamasında ve release olmamış durumda. Benim tavsiyem kesinlikle sanal makine kullanmanız. Özellikle hali hazırda Silverlight 1.0 projeleri üzerine çalışıyorsanız sisteminizde Silverlight 1.1 Plug'In'in yüklü olması bazen yüklü olmayan sistemlere kıyasla Silverlight 1.0 projelerinde farklı hatalarla karşılaşmanıze veya daha da kötüsü "karşılaşmamanıza" neden olabiliyor.

http://www.microsoft.com/downloads/details.aspx?FamilyId=25144C27-6514-4AD4-8BCB-E2E051416E03&displaylang=en

Kolay gelsin.

Wednesday, November 28, 2007 3:52:16 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight | Visual Studio 2008  | 
 Tuesday, November 20, 2007

Biraz önce mail ile süper bir soru aldım :) Soru şöyle: "Silverlight içerisinde font dahil edip istemci tarafında kullanma şansımız var mı?" EVEEEET :) Var. Silverlight uygulamanızdaki herhangi bir TextBlock'un setFontSource metodunu kullanarak sadece Silverlight animasyonunun çalıştığı istemci makinedeki fontları değil harici font kaynaklarını kullanmasını da sağlayabilirsiniz. Peki bunu nasıl yapacağız?

İlk olarak kullanacağımız fontu tabi ki sunucumuza yerleştirmemiz gerekiyor. Sonrasında Silverlight uygulamamız istemcide yüklendiği anda fontu da yüklemeye başlamamız lazım. Bunun için bir Silverlight downloader nesnesi yaratarak kullanacağız. Aşağıdaki gibi bir kod işimizi görecektir.

if (!window.Font_SV)

  window.Font_SV = {};

 

Font_SV.Page = function()

{

}

 

Font_SV.Page.prototype =

{

  handleLoad: function(control, userContext, rootElement)

  {

    var yukleyici = document.getElementById('SilverlightControl').createObject("downloader");

    yukleyici.addEventListener("Completed", Tamamlandi);

    yukleyici.open("GET", "Dungeon.TTF");

    yukleyici.send();

  }

}

Gelin satır satır yukarıdaki kodu inceleyelim. İlk satırda adını yukleyici olarak verdiğim bir JavaScript değişkenine download nesnesi yaratıyorum. Bunun için sayfamdaki Silverlight uygulamamın ID bilgisini document.getElementById metoduna vererek Silverlight uygulamamı yakaladıktan sonra uygulamama ait createObject metodunu kullanıyorum. Söz konusu metodu obje tipi olarak downloader değerini vermem yeterli oluyor. Artık elimizde bir downloader nesnesi bulunduğuna göre gelelim bu nesnenin ayarlarına.

İkinci satırda hemen downloader nesnesine sunucudan veriyi istemciye asenkron olarak yükleme işini bitirdiğinde çalıştırılmak üzere Tamamlandi adinda bir JavaScript fonksiyonu aktarıyorum. Bu fonksiyonu biraz yazacağız.

Üçüncü satırda downloader nesnesini aynı bir XMLHttpRequest nesnesi gibi sunucudan veri isteme metodunu ve isteyeceği dosyayı ayarlıyorum. GET metodu şimdilik uygun. Dosya adı olarak da benim örneğimde Dungeon.TTF font dosyamın adı. Bu noktada özellikle belirtmem gereken bir nokta var. Yine aynı XMLHttpRequest nesnelerinde de olduğu gibi downloader nesnesi de ancak URL üzerinden dosya çekebiliyor. Yani bu kodları makinenizde çalıştırırken de IIS veya ASP.NET Development Server üzerinden çalıştırmanız gerekecek.

Son olarak dördüncü satırda artık tüm ayarlarım tamamlandığı için veri alım işlemini başlatmak üzere talebimi yukleyici'nin send metodu ile sunucuya gönderiyorum.

Peki veri geldiğinde neler yapacağız? Gelin şimdi de aşağıdaki kodu inceleyelim.

function Tamamlandi(sender, eventArgs)

{

    sender.findName("Metin").setFontSource(sender);

    sender.findName("Metin").fontFamily = "TrSah Dungeon";

    sender.findName("Metin").text = "Bu artık çok özel bir fontla yazılmış bir metin!!!";

}

Tamamlandi adındaki fonksiyonum çalıştırıldığında hemen Silverlight uygulamamdaki Metin ID'li TextBlock nesnemi yakalıyorum. Sonrasında TextBlock nesnesine ait setFontSource metoduna parametre olarak diren sender parametresini veriyorum. Yine aynı karşılaştırmayı yaparak sizlere XMLHttpRequest nesnelerini hatırlatmak isteyorum. XMLHttpRequest nesneleri ile AJAX uygulamalarında da sunucudan asenkron isteklerde bulunduğumuzda isteğimiz tamamlandığında çalıştırılan fonksiyonumuza gelen ilk parametre aslında sunucudan gelen verinin ta kendisi oluyordu. Burada da durum aynı. Bizim Tamamlandi fonksiyonumuzun sender parametresi downloader tarafından gönderilen ve sunucudan gelen font dosyamızın verisi.

Gelen veriyi TextBlock nesnemizin font kaynaklarına ekledikten sonra sıra geldi söz konusu fontu TextBlock için gösterim aşamasında seçmeye. Bunun için TextBlock'a ait fontFamily özelliğini yüklediğimiz fontun adı ile değiştiriyoruz. Son olarak da TextBlock içerisinde metni içerisinde Türkçe karakterler de olan bir metin ile değiştiriyorum. En ufak bir sorun yok :)

Biraz daha kullanıcı dostu bir yükleme süreci için isterseniz siz uygulamalarınızda yükleme işlemini başlatmadan önce ekranda "Yükleniyor" gibi bir uyarı mesajı da gösterebilirsiniz.

Örnek uygulamayı aşağıdaki adreste inceleyebilirsiniz. Kaynak kodlarını özellikle bir paket olarak koymuyorum. İsteyenler sayfanın kaynak kodlarına girerek zaten alabilirler :) Sizler için de biraz Silverlight egzersizi olmuş olur.

http://daron.yondem.com/samples/font_embed/

Kolay gelsin.

Tuesday, November 20, 2007 8:10:57 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Monday, November 19, 2007

Silverlight 1.0'a ait SDK paketi yenilendi. Hemen aşağıdaki adresten bilgisayarınıza indirerek yükleyebilirsiniz. Özellikle hali hazırda Expression Blend 2 ve harici JavaScript editörleri ile Silverlight 1.0 projeleri yürütmekte olanlarla tavsiye ederim. Eski 1.0 SDK paketini yükleyenlerin yenilemelerine gerek yok :) Malum eskisinde zaten Intellisens ve Project Template gibi şeyleri ayrı ayrı yükledik.

Silverlight 1.0 SDK

Monday, November 19, 2007 12:47:43 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Saturday, November 17, 2007

Dün akşam son dersimizle beraber KoçAllianz IT ekibiyle Silverlight safarimizi noktaladık :) Özellikle "safari" olarak adlandırıyorum çünkü Beta yazılımlarla epey tehlikeliydi yolculuk. Eğitim başında Expression Studio'yu inceledikten sonra hemen Silverlight 1.0 dünyasına geçiş yaparak biraz da AJAX'a göz attık.

KoçAllianz ekibi ile beraber Silverlight eğitimi sonunda herkez poz vermekte.

Eğitimimizi sonlandırmadan önce son günümüzde ufak bir de proje gerçekleştirdik. Sınıfımızda hem tasarımcı arkadaşlar hem de programcılar olduğu için Expression Studio ve Visual Studio konseptine uygun olarak tasarımcılar ve programcılar aynı anda proje üzerinde çalışabildiler. Sonuçta ortaya ne mi çıktı?

http://daron.yondem.com/samples/kocallianz/default.htm

Yukarıdaki adresten ziyaret edebileceğiniz site içerisinde bir video paylaşım sitesi bulunuyor. Sitenin sol tarafındaki videoların listesi, açıklamaları ve dosyaların konumları AJAX ile SQL2005 üzerinden çekiliyor. Projeye ders içerisinde çok fazla zaman ayıramadığımız için tabi ki eksikler var, özellikle videolar için loader koyacak zamanımız olmadı ben de bu nedenle videoların kalitelerini düşürdüm. Fakat genel olarak baktığımızda eskiden yapamayacağımız çok sayıda şeyi hızlı bir şekilde yapabildiğimizi görüyoruz. Örneğimizin tasarımı ilk aşamada Expression Design ile yapıldı. Sonrasında Expression Blend 2'ye alınarak animasyon hazırlandı. ASP.NET AJAX web sitesi ve veri katmanı Visual Studio 2005 içerisinde programlandı ve şimdilik JavaScript kodlarını da daha önceki yazılarımda bahsettiğim Aptana ile yazdık.

Projenin tüm kodlarını aşağıdaki adresten bilgisayarınıza indirebilirsiniz.

KoçAllianz Örnek Proje Kodları - 17112007_2.rar (404.13 KB)

Organizasyon için KoçSistem ve Arıbil yetkililerine ve tüm katılımcılara teşekkür ediyorum.

Saturday, November 17, 2007 4:34:38 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Friday, November 16, 2007

Sevgili dostum Mehmet Nuri Çankaya ile beraber sunduğumuz Expression Blend, Expression Media ve Encoder webinerlerinin kayıtlarını nedirtv?com üzerinden yayına aldık. İsteyenler webinerlerin kayıtlarına aşağıdaki adreslerden ulaşabilirler.

Expression Blend Webineri
Expression Media ve Encoder Webineri

Friday, November 16, 2007 11:15:41 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Expression Blend | Expression Encoder | Expression Studio | Silverlight | Webiner  | 
 Thursday, November 15, 2007

Visual Studio 2008'e adım adım yaklaştığımız şu günlerde belki de biraz geç bir yazı yazıyorum. İster AJAX ister Silverlight uygulamalarında olsun artık JavaScript kodu yazmayan veya yazamayan bir "web developer" şu an düşünülemez. Bu noktada daha önceki yazılarımda da bahsettiğim üzere Intellisense desteği VS 2008 ile beraber geliyor fakat VS2008'in resmi lansmanı Şubat'ta yapılacak. Daha acil bir çözüme ihtiyaç duyanlara ücretsiz bir alternatif tavsiyesinde bulunacağım.

Aptana Community Edition!

Aptana'nın aslında ücretli olan bir sürümü var. Ama biz sadece JavaScript editörü olarak kullanacağımız için bize ücretsiz olan Community Edition yeter de artar bile. Programı hemen aşağıdaki adresten indirebilirsiniz.

http://www.aptana.com/download/#windows

Aptana içerisindeki zengin JavaScript Intellisense desteği.
Aptana içerisindeki zengin JavaScript Intellisense desteği.

Aptana sayesinde artık sadece bir noktalı virgül eksiği yüzünden çalışmayan JavaScript dosyalarınıza saatlerce bakıp da hatayı bulamama durumundan kurtulabilirsiniz. Ayrıca Intellisense desteği ciddi kolaylık sağlıyor. Yukarıdaki ekran görüntüsünde de görebileceğiniz üzere Cross-Browser JavaScript kodu yazabilmeniz için tüm JavaScript sınıf ve metodlarının hangi tarayıcılar ile uyumlu olduğuna ait bilgiler de direk Intellisense ile beraber ekrana geliyor. Sıkıştığınız durumlarda gerçekten yardımcı olabilecek bir araç olarak bilgisayarlarınızda kurulu bulundurmanızda fayda var.

Thursday, November 15, 2007 1:12:37 AM (GTB Standard Time, UTC+02:00)  #    Comments [1]   AJAX | JavaScript | Silverlight  | 
 Wednesday, November 14, 2007

Daha önceki blog yazılarımdan birinde Türkiye'nin ilk kurumsal Silverlight uygulaması olarak DEVELOAD Yazılım'a ait web sitesini sizlerin beğeninize sunmuştum. O zamanlar pek önemsemediğimiz için sitenin FireFox ile uyumlu olup olmaması konusunda bir çalışma yapmamıştık. Açıkçası hala pek önemsemiyoruz çünkü hem uluslararası çalışmalardan hem de yurt içi sitelerden aldığımız istatistiklerde hala FireFox'un yaygınlığı %5'i bulamadı. Neyse biz konumuza dönelim.

O tarihlerden beridir Silverlight'ın kullanımı ile ilgili yerli bir örnek vermem gerektiğinde www.deveload.com'u veriyorum. Tabi ki bunu reklam olması amacıyla yapmıyorum :) DEVELOAD tarafında sitemizi Silverlight ile yenilerken amacımız Silverlight olmadan önce Flash ile yaptığımız tarz uygulamaların tıpatıp aynılarının Silverlight ile de başarılı ve kolay bir şekilde yapılabildiğini göstermekti. Fakat her yaptığım demoda önce Silverlight'ın cross-browser olduğundan bahsedip sonra da cross-browser olmayan bir örnek göstermek her tür açıklamama rağmen biraz komik oluyordu :) Malum söz konusu sitenin FireFox uyumsuz olması tamamen bizim yazdığımız kodlardan kaynaklanıyordu (öyle sanıyorduk) Silverlight'ın kendisinden değil.

Sözün özü, biraz önce bu konuya el atarak acaba nedir bu kodların FireFox'da çalışmamasının nedeni diyerek ufak bir çalışmaya giriştim ve tabi ki sorunu buldum.

Sorun maalesef yazdığımız JavaScript kodları ile alakalı değil :) Silverlight ile ilgiliymiş :) Site içerisinde genel olarak kullanılan 100% genişlikte ve 100% yükseklikte bir Silverlight animasyonu var. Bu animasyonun üzerine bir katman (DIV) yerleştirilerek ekstra içerik gösteriliyor. Silverlight animasyonunun genişliğinin ve yüksekliğinin 100% olması için animasyona aşağıdaki parametreleri vermişiz.

function createSilverlight()

{

  var scene = new DEVELOAD_SV.Page();

  Silverlight.createObjectEx({

    source: "Page.xaml",

    parentElement: document.getElementById("DEVELOAD_Host"),

    id: "DEVELOAD_Host",

    properties: {

      width: "100%",

      height: "100%",

      version: "1.0",

      isWindowless: "True"

    },

    events: {

      onLoad: Silverlight.createDelegate(scene, scene.handleLoad)

    }

  });

}

Maalesef Silverlight animasyonu ile ilgili verilen bu parametrelerdeki değerler eğer yüzde üzerinden verilmiş ise FireFox'da herhangi bir görüntü alamıyorsunuz. Internet Explorer içerisinde ise hiçbir sorun yok. Aslında bu sorun FireFox içerisinde normal HTML elementlerinde de var ve çözüm olarak sayfadaki HTML ve BODY taglarına da aynı CSS özelliklerini vermek yeterli oluyor. Fakat Silverlight için bu da yeterli değil. Çok daha farklı bir çözüm gerekiyor.

DEVELOAD_SV.Page.prototype =

{

  handleLoad: function(control, userContext, rootElement)

  {

    if (window.innerHeight)

    {         

      $get('DEVELOAD_Host').style.height = window.innerHeight + "px";

    }

  }

}

Yukarıdaki koddan da anlaşılacağı gibi Silverlight animasyonu yüklenir yüklenmez bir boyutlandırma işlemi başlatıyoruz. Sorun tamamen animasyonun boyutunun tanımlanamaması ile alakalı. FireFox içerisinde animasyon yükleniyor ve Silverlight çalışıyor fakat yüzde olarak verilen genişlik ve yükseklik değerleri geçersiz olduğu için ekranda gözükmüyor. Bu nedenle animasyon yüklendiğinde çalıştırılan handleLoad fonksiyonu içerisinde ilk olarak window.innerHeight diye bir özelliğin olup olmadığını kontrol ederek FireFox gibi bir tarayıcıda olup olmadığımızı anladıktan sonra gerekiyorsa Silverlight nesnesini yakalayarak yüksekliğini pencerenin yüksekliğine eşitliyoruz. Aynı şekilde genişliğini de düzenleyebilirsiniz. Böylece animasyonunuz ekrana tamamen yayılacaktır.

Hepinize kolay gelsin ;)

Wednesday, November 14, 2007 3:20:46 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Wednesday, November 07, 2007

Bugün Microsoft Kurumsal Webiner serisinin ilk webinerini "Silverlight ve ASP.NET AJAX ile Uygulama Geliştirme" konusunda gerçekleştirdik. Duyuruların yavaş yavaş yayılıyor olmasının yanı sıra ilk webinerde 80 kişilik bir katılım ile güzel bir aktivite oldu.

Webinerin mini sunumunu :) ve demoya ait kaynak kodları aşağıdaki adresten indirebilirsiniz.

Webiner Sunum ve Demo Kaynak Kodları - 07112007_1.zip (467.18 KB)

Webiner sonrası gelen soruları ve cevaplarımı buradan paylaşmak istiyorum. Umarım faydalı olur.

Soru: Visual Studio 2008'e bu bu designer (Expression Blend) bağlı gelecek mi?

Cevap: Visual Studio 2008'de JavaScript Intellisense desteği gelecek. Design kısmı şu anki ile aynı. Designer olarak Expression Blend 2'yi ayrı bir program olarak kullanmanız gerekecek.

Soru: Expression Studio, Blend, Design, Web olsun tamamen Visual Studio'yu görsel tasarım açısından desteklemek üzere çıkarılmış bir platform mudur? Ve bunlarda yapabileceklerimiz sadece görsel tasarımdan mı ibarettir? Kod yazamıyor muyuz?

Cevap: Expression serisi aynen bahsettiğiniz gibi tasarımcılara yöneliktir. Kod yazmak için Visual Studio kullanmak şart. Kolay gelsin.

Soru: Bu Expression Designer 2008'de de bu şekilde mi kullanılacak yoksa daha entegre olacak mı?

Cevap: Expression Blend 2 içerisindeki projeler direk VS 2008 ile de açılabiliyor. Solution Explorer içerisind e herhangi bir dosyaya sağ tuş tıklayınca "Edin in VS 2008" opsiyonu var.

Soru: 2008 ne zaman RTM olacak?

Cevap: Bu ay sonu tahmin edilen süre :)

Soru: Animasyon ve benzeri şeyleri eklerken JavaScript kısmı bu kadar manüel olacak mı 2008'de de ?

Cevap: Intellisense desteği gelecek. Bu kadar manüel değil :) AJAX ile ilgili de çok hoş JavaScript Intellisense destekleri yolda.

Soru: Peki teşekkür ederim :)

Cevap: ben teşekkür ederim ;) iyi çalışmalar

Soru: Silverlight hiç bilmiyorum. Sorularım biraz saçma kalabilir. XAML'i değiştirdiğimiz anda mı içerik değişiyor yoksa bekleme süresi var mı? Kendi içinde her hangi bir event işlemi sırasında kendi okuduğu XAML'i değiştirebiliyor muyuz? Değiştirebiliyorsak değiştirdiğimiz anda aynı şekilde işlemine devam ediyor mu?

Cevap: XAML'i değiştirdiğiniz anda sayfayı veya Silverlight animasyon nesnesini baştan yüklemeniz gerekir. Başka bir seçenek olarak arka planda asenkron XAML yükleyerek animasyonu aktarabilirsiniz. Herhangi bir event da XAML ile nesne ekleyip çıkarabiliyorsunuz. XAML'de değişiklik olunca kaynaktan tekrar yükleyerek sayfaya yansıtmanız gerek.

Katılan herkese teşekkürler. Hepinize kolay gelsin.

Wednesday, November 07, 2007 10:39:36 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Expression Blend | Expression Studio | Silverlight | Webiner  | 
 Tuesday, November 06, 2007

Nerden çıktı Silverlight 1.1? Aslına bakarsanız Silverlight 1.1 üzerine uzun bir süre makale yazmayı düşünmüyordum. Bunun nedeni daha Silverlight 1.1'in Alpha aşamasında olması. Yani şu anki yazılım, teknoloji ile yayınlanacak Silverlight 1.1 arasında dağlar kadar farklar olabilir (hatta olacaktır). O nedenle hali hazırda elimizdeki değerli zamanımızı ağırlıklı olarak Silverlight 1.0 ile tüketmek özellikle kurumsal projeler için çok daha mantıklı. Diğer yandan Silverlight 1.1 ile geliştirdiğimiz bir uygulamayı çalıştırmaları için istemcilere yine Alpha aşamasında Silverlight 1.1 Plug-In'ini yüklemelerini de isteyemeyiz. Gerçeği söylemek gerekirse ben orijinal makineme hiçbir zaman Beta ve Alpha yazılım kurmam, bu tarz denemeler için sanal makine kullanırım.

Silverlight 1.1 ile 1.0 sürümü arasındaki en büyük fark programlama kısmında. Silverlight 1.0'da JavaScript ile istemci taraflı programlama yapabiliyorken Silverlight 1.1 sürümünde .NET dillerini de kullanma şansımız var. Yazdığımız kod bir DLL'e çevrilerek yine istemci tarafında Silverlight 1.1 Plug-In ile çalıştırılıyor. Tabi bu noktada tüm .NET Framework Silverlight 1.1'e aktarılmış durumda değil. Klasik .NET Framework 30MB gibi bir boyuta sahipken Silverlight 1.1 Plug-In sadece 3MB. Yani özetle .NET Framework'ün bir kısmı aktarılmış durumda, tamamı değil.

Farkındaysanız hala neden bu makaleyi yazdığımı açıklamadım :) Blogumu takip eden dostlarım tarafından bana bir çok soru maili geliyor. Bu soruların bazılarını cevaplarken "Aslından bunu bir makale haline getirsem herkes faydalanır" diyerek anından bir blogpost'a çeviriyorum. İşte bu makale de böyle bir makale :) Aslında bana gelen maillerden birince cevap olarak yazılması gereken bir çözüm, ama ben buradan paylaşarak herkesin okumasına olanak tanımak istiyorum. Arkadaşımız çözümü C# olarak istemiş, o nedenle bu makaleye özgü olarak C# kullanacağım. Ama lütfen bu bir gelenek haline gelmesin :) arkadaşlar .NET geliştiriciler olarak hem C# hem VB kodunu okumayı öğrenmekte fayda var. Özellikle VB kodunu okumak zaten kolay :) Böylece bana da C# yazdırmış olmazsınız :) Haz etmediğim açıkça ortada sanırım ;)

Son olarak sorulara geçmeden önce kullandığım geliştirme ortamından da bahsetmek istiyorum. Örnekleri yaparken Visual Studio 2008 Beta 2 Professional Edition ve Expression Blend 2 September Preview kullandım. Sistemimde Plug-In olarak Silverlight 1.1 Alpha September Refresh yüklüydü.

Gelen sorulara bakalım :)

Silverlight 1.1 tarafında animasyonlara .NET kodu ile nasıl müdahale ederiz?

Bunun için ilk olarak bir animasyon hazırlamamız gerekiyor. Aşağıdaki şekilde bir animasyonu Silverlight sayfamızda Resource olarak tanımlayalım.

<Canvas

        xmlns="http://schemas.microsoft.com/client/2007"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        x:Name="parentCanvas"

        Loaded="Page_Loaded"

        x:Class="SilverlightProject14.Page;assembly=ClientBin/SilverlightProject14.dll"

        Width="640"

        Height="480"

        Background="White"

        >

 

  <Canvas.Resources>

    <Storyboard x:Name="Timeline1">

      <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="ellipse" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">

        <SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>

        <SplineDoubleKeyFrame KeyTime="00:00:01" Value="209"/>

      </DoubleAnimationUsingKeyFrames>

      <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="ellipse" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)">

        <SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>

        <SplineDoubleKeyFrame KeyTime="00:00:01" Value="29"/>

      </DoubleAnimationUsingKeyFrames>

    </Storyboard>

  </Canvas.Resources>

 

  <Ellipse Width="123" Height="119" Fill="#FFFF0000" Stroke="#FF000000" Canvas.Left="71" Canvas.Top="116" x:Name="ellipse" RenderTransformOrigin="0.5,0.5">

    <Ellipse.RenderTransform>

      <TransformGroup>

        <ScaleTransform ScaleX="1" ScaleY="1"/>

        <SkewTransform AngleX="0" AngleY="0"/>

        <RotateTransform Angle="0"/>

        <TranslateTransform X="0" Y="0"/>

      </TransformGroup>

    </Ellipse.RenderTransform>

  </Ellipse>

 

</Canvas>


Yukarıdaki kod içerisinde basit bir Ellipse nesnesinin ekrandaki yeri değiştiriliyor. Yarattığımız StoryBoard'un adı Timeline1 şeklinde bırakılmış. Şimdi istediğimiz şey Ellipse'in kendisine tıklandığında animasyonun başlatılması. Yazacağımız kod tam olarak aşağıdaki şekilde olacak.

using System;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Ink;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Shapes;

 

namespace SilverlightProject16

{

    public partial class Page : Canvas

    {

        public void Page_Loaded(object o, EventArgs e)

        {

            // Required to initialize variables

            InitializeComponent();

            ellipse.MouseLeftButtonDown += new MouseEventHandler(ellipse_MouseLeftButtonDown);

        }

 

        void ellipse_MouseLeftButtonDown(object sender, MouseEventArgs e)

        {

            Timeline1.Begin();

        }

    }

}


Gördüğünüz gibi ilk olarak Page.Loaded durumunda sayfamızda yer alan ellipse nesnesinin MouseLeftButtonDown durumuna bir Handler bağlıyoruz. Sonrasında da söz konusu handler içerisinde Timeline1 nesnemizin begin() metodunu çalıştırarak animasyonu başlatabiliyoruz. Bu kodu eğer VB.NET koduna çevirecek olursak aradaki tek fark özel olarak Handler tanımlamak yerinde VB.NET'teki Handles deyimini kullanarak işi halledebiliyor olmamız. VB.NET kodunu da koymadan edemeyeceğim sanırım :)

Partial Public Class Page

    Inherits Canvas

 

    Public Sub Page_Loaded(ByVal o As Object, ByVal e As EventArgs)

        ' Required to initialize variables

        InitializeComponent()

    End Sub

 

    Private Sub ellipse_MouseLeftButtonDown(ByVal sender As Object, ByVal e As System.Windows.Input.MouseEventArgs) Handles ellipse.MouseLeftButtonDown

        Timeline1.Begin()

    End Sub

End Class


Mouse ile nesneleri nasıl boyutlandırırz?

Yukarıdaki soruya kıyasla bu biraz ağır bir konu sayılabilir. İlk olarak sorunun çözümüne dair mantığı kavramamız gerekiyor. Hedefimiz Silverlight 1.1 içerisinde bir nesnenin büyüklüğünü, yani genişlik ve yüksekliğini farenin ekrandaki konumuna göre ayarlayabiliyor olmak. Kullanıcı fareyi ekranda gezdirdikçe farenin konumuna göre objemizi tekrar boyutlandıracağız. Boyutlandırma işlemini yapabilmek için fare ile nesneye tıklandığı anda nesnenin yükseklik ve genişliğini bir kenara not alıp fare sürüklendikçe eski konumu ile yeni konumu arasındaki farkı nesnenin boyutuna yansıtacağız. Gelin ilk olarak kullanacağımız global değişkenlerimizi tanımlayalım.

        Boolean Tikli = false;

        Point BaslangicKonum;

        Double BaslangicYukseklik;

        Double BaslangicGenislik;


Gördüğünüz gibi toplam dört adet değişkenimiz var. Bunlardan ilki Tikli adında bir Boolean değişken. Fare ekranda gezdirildikçe nesnemizi boyutlandıracağımızdan bahsetmiştik. Tabi boyutlandırma işleminin başlaması için kullanıcının nesneye tıklayıp sürüklemesi gerekecek. O nedenle nesneye tıklandığında global değişkenimiz Tikli'yi True yaparak fare sürüklendikçe boyutlandırılma yapılmasını onaylayacağız. Farenin sol düğmesi bırakıldığında Tikli değişkenini False yaparak boyutlandırmayı durduracağız. Bunun haricinde BaslangicKonum değişkenimiz farenin sürüklemenin başındaki konumuzun hafızada saklayacak, böylece sürüklenen miktarı bularak nesneye yansıtacağız. Nesnenin başlangıçtaki genişlik ve yüksekliğini de birer değişkende saklıyor olacağız. Bu değerler üzerine farenin ekrandaki konum değişikliğini ekleyeceğiz.

            InitializeComponent();

            ellipse.MouseLeftButtonDown += new MouseEventHandler(ellipse_MouseLeftButtonDown);

            ellipse.MouseLeftButtonUp += new MouseEventHandler(ellipse_MouseLeftButtonUp);

            this.MouseLeftButtonUp += new MouseEventHandler(ellipse_MouseLeftButtonUp);

            this.MouseMove += new MouseEventHandler(Page_MouseMove);


C# için yukarıdaki gibi Event Handler tanımlamalarımızı yapmamız gerekiyor. İlk örneğimizdeki aynı XAML kodu kullanarak ellipse nesnemizi boyutlandıracağız. O nedenle ellipse'in MouseLeftButtonDown ve MouseLeftButtonUp durumlarını kontrol etmemiz gerekiyor. Ayrıca Silverlight uygulamamızın genelinde de MouseLeftButtonUP ve MouseMove durumlarını kontrol edeceğiz. Bu durumlarda neler yapacağımıza birazdan bakacağız.

        void ellipse_MouseLeftButtonDown(object sender, MouseEventArgs e)

        {

            Tikli=true;

            BaslangicKonum=e.GetPosition(this);

            BaslangicGenislik=ellipse.Width;

            BaslangicYukseklik = ellipse.Height;

        }


ellipse üzerine fare ile tıklandığında ve farenin düğmesi tıklı duruma geldiğinde yukarıdaki kodumuz çalışacak. Tıklandığı anda hemen Tikli değişkenimizi True olarak düzenliyoruz. Sonrasında e.GetPosition(this) diyerek farenin Silverlight animasyonumuzun neresinde olduğunu global değişkenimize aktarıyoruz. Aynı şekilde ellipse'in genişlik ve yüksekliğini de değişkenlerimize alıyoruz.

        void ellipse_MouseLeftButtonUp(object sender, MouseEventArgs e)

        {

            Tikli = false;   

        }


Yukarıda tanımladığımız kodumuzu hem ellipse'in hem de genel olarak Silverlight uygulamamızın MouseLeftButtonUp durumuna bağladık. Her iki şekilde de farenin tuşunu kullanıcı bıraktığında Tikli değişkenimizi False yaparak artık boyutlandırma işleminin yapılmamasını sağlayacağız. Gelelim boyutlandırma işlemine.

        void Page_MouseMove(object sender, MouseEventArgs e)

        {

            if (Tikli)

            {

                Point SimdikiKonum = e.GetPosition(this);

                ellipse.Width = Math.Abs(SimdikiKonum.X-BaslangicKonum.X+BaslangicGenislik);

                ellipse.Height  = Math.Abs(SimdikiKonum.Y - BaslangicKonum.Y + BaslangicYukseklik );

            }

        }


Genel olarak tüm Silverlight uygulamamız üzerinde fare sürüklendiği sürece yukarıdaki kod çalışacak. İlk olarak Tikli değişkenini kontrol ediyoruz. Eğer fare ile ellipse nesnemize tıklanmışsa ona uygun boyutlandırma işlemini yapmamız gerekiyor. SimdikiKonum adında bir değişken tanımlayarak farenin mevcut konumunu alarak hem X hem de Y yönlerinde farenin başlangıçtaki konumu ile farklarını, üzerine de nesnemizin başlangıçtaki genişlik ve yüksekliğini koyarak tekrar genişlik ve yükseklik değerlerine aktarıyoruz. Böylece farenin sürüklenme miktarı nesnenin genişliğine ve yüksekliğine eklenmiş oluyor. Tüm bunları yaparken Math.Abs metodu ile hesaplanan değerin mutlak değerini alarak nesnemizin her zaman görünür boyutlarda olmasını sağlıyoruz.

Kodumuzun tamamı aşağıdaki şekilde sonlanıyor.

using System;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Ink;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Shapes;

 

namespace SilverlightProject16

{

    public partial class Page : Canvas

    {

        Boolean Tikli = false;

        Point BaslangicKonum;

        Double BaslangicYukseklik;

        Double BaslangicGenislik;

 

        public void Page_Loaded(object o, EventArgs e)

        {

            // Required to initialize variables

            InitializeComponent();

            ellipse.MouseLeftButtonDown += new MouseEventHandler(ellipse_MouseLeftButtonDown);

            ellipse.MouseLeftButtonUp += new MouseEventHandler(ellipse_MouseLeftButtonUp);

            this.MouseLeftButtonUp += new MouseEventHandler(ellipse_MouseLeftButtonUp);

            this.MouseMove += new MouseEventHandler(Page_MouseMove);

        }

 

        void Page_MouseMove(object sender, MouseEventArgs e)

        {

            if (Tikli)

            {

                Point SimdikiKonum = e.GetPosition(this);

                ellipse.Width = Math.Abs(SimdikiKonum.X-BaslangicKonum.X+BaslangicGenislik);

                ellipse.Height  = Math.Abs(SimdikiKonum.Y - BaslangicKonum.Y + BaslangicYukseklik );

            }

        }

 

        void ellipse_MouseLeftButtonUp(object sender, MouseEventArgs e)

        {

            Tikli = false;   

        }

 

        void ellipse_MouseLeftButtonDown(object sender, MouseEventArgs e)

        {

            Tikli=true;

            BaslangicKonum=e.GetPosition(this);

            BaslangicGenislik=ellipse.Width;

            BaslangicYukseklik = ellipse.Height;

        }

    }

}


Bir de VB.NET tarafına bakalım :)

Partial Public Class Page

    Inherits Canvas

    Dim Tikli As Boolean = False

    Dim BaslangicKonum As Point

    Dim BaslangicGenislik As Double

    Dim BaslangicYukseklik As Double

 

    Public Sub Page_Loaded(ByVal o As Object, ByVal e As EventArgs)

        ' Required to initialize variables

        InitializeComponent()

    End Sub

 

    Private Sub ellipse_MouseLeftButtonDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles ellipse.MouseLeftButtonDown

        Tikli = True

        BaslangicKonum = e.GetPosition(Me)

        BaslangicGenislik = ellipse.Width

        BaslangicYukseklik = ellipse.Height

    End Sub

 

    Private Sub ellipse_MouseLeftButtonUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles ellipse.MouseLeftButtonUp

        Tikli = False

    End Sub

 

    Private Sub Page_MouseLeftButtonUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseLeftButtonUp

        Tikli = False

    End Sub

 

    Private Sub Page_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseMove

        If Tikli Then

            Dim SimdikiKonum As Point = e.GetPosition(Me)

            ellipse.Height = Math.Abs(SimdikiKonum.Y - BaslangicKonum.Y + BaslangicYukseklik)

            ellipse.Width = Math.Abs(SimdikiKonum.X - BaslangicKonum.X + BaslangicGenislik)

        End If

    End Sub

End Class


Böylece sorunumuzu çözmüş aldık. Artık ellipse nesnesine tıklanarak nesne Silverlight animasyonu içerisinde boyutlandırılabilecek.

Silverlight 1.1 ile ilgili gelen sorular şimdilik bu kadar.

Hepinize kolay gelsin.

Tuesday, November 06, 2007 10:39:52 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Monday, November 05, 2007

Sektörle ilgili haberleri tek tek bloga eklemektense biraz biriktirip toplu eklemeyi daha uygun buluyorum. Özellikle bu serideki bir haberin artık yayınlanabileceği son gün geldiği için hemen elimdeki beş haberi bloguma koymak istedim. İyi okumalar :)

Silverlight Showcase'de Türk Bayrağı Dalgalanır!

http://silverlight.net/showcase/ adresinden dünya çapındaki seçkin Silverlight uygulamalarının bir listesine ulaşabilirsiniz. Uygulamaların listelendiği sayfa da ayrıca bir Silverlight şaheseri :) Konumuza dönersek, söz konusu sayfanın sol tarafında uygulamalarının yapıldıkları ülkelere göre filtrelendiği bir bölüm yer alıyor. Bu bölümde artık Türk Bayrağı da var. ODTÜ BÖTE'den Prof. Dr. M.Yaşar Özden'in desteği ile hazırlanan ve internet ortamından görsel olarak seminerlerin, eğitimlerin yayınlandığı Silverlight video oynatıcı ortamı Silverlight resmi sitesinde ülkemizin bayrağı altında listeleniyor. Umarım kısa zamanda yeni uygulamalar ile listeyi genişletiriz.

Silverlight Showcase sitesinde Türk Bayrağı.
Silverlight Showcase sitesinde Türk Bayrağı.

Microsoft HD-Photo standartlaşıyor : JPEG XR

Şu an kullandığımız JPEG standartını oluşturan uluslararası Joint Photographic Experts Group bir sonraki adım olarak Microsoft'a ait HD-Photo yapısını JPEG XR olarak standartlaştırmaya karar verdi. Konuyla ilgili önemli bir otorite olarak Adobe JPEG XR formatını destekleyeceğini belirtti. HD-Photo desteği hali hazırdaWindows Vista ile beraber zaten geliyor. Eski adıyla Windows Media Photo sonrasında HD-Photo olarak adlandırıldığında Microsoft formatın tamamen ücretsiz olarak dağıtılabileceğini ve kullanılabileceğini açıklamıştı. HD-Photo ile ilgili DPK (Device Porting Kit) yüklemesini aşağıdaki adresten indirebilirsiniz.

http://www.microsoft.com/downloads/details.aspx?FamilyID=285eeffd-d86c-48c3-ab93-3abd5ee7f1ce&displaylang=en

HD-Photo ile ilgili gelişmeler ve detaylar için Microsoft'da HD-Photo Program Müdürü Bill Crow'un blog sitesini ziyaret edebilirsiniz.

Blog Konferansı Yarın!

Microsoft sponsorluğunda düzenlenen Blog Konferansı '07 organizasyonu Yıldız Teknik Üniversitesi'nde gerçekleştirilecek. Programın detayları için http://www.blogkonferansi.com/ adresini ziyaret edebilirsiniz. Blog sitesinde sahip olanlar, olmayanlar veya blog dünyasına girmeyi düşünenler için tavsiye ederim.

Microsoft Dynamics Zirvesi 2007

Dynamics ürün ailesi ile ilgilenenlerin kesinlikle kaçırmaması gereken bir gün. Dört paralel seansta toplam yirmi sunumdan oluşacak aktivitenin sloganı "Ürün tanıtımları değil, yaşadığınız problemleri çözmüş müşterilerimizin gerçek deneyimlerini paylaşacağız." şeklinde. 8 Kasım 2007, Perşembe günü saat 09.00-17.00 arasında Swiss Hotel'de yapılacak zirveyle ilgili detaylı bilgilere buradan ulaşabilirsiniz.

Gençsen "Gelecek"sin!!

Süper bir slogan ama bir an kendime "Genç miyim?" diye sormama ve hüzünle "Yaşlandım" dememe neden oldu. :) Her neyse konumuza dönelim; Microsoft Türkiye MSP (Microsoft Studen Partner) grubunun öncülüğünde düzenlenen üniversiteler turunda Silverlight'dan tutun Surface Computing'e kadar çok geniş bir içerik her gün başka bir üniversiteyi ziyaret ediyor olacak. Özellikle üniversite öğrencilerine şiddetle tavsiye ettiğim bu günleri sevgili kardeşim Ali Rıza Babaoğlan'ın sitesinden takip edebilirsiniz.

 

Monday, November 05, 2007 3:10:31 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Haberler | Silverlight  | 
 Saturday, November 03, 2007

Yepyeni bir webiner ile tekrar karşınızdayım :) 7 Kasım Çarşamba günü saat 15:15-16.00 arası Silverlight uygulamaları ile ASP.NET 2.0 ve ASP.NET AJAX Extension kullanımına değineceğiz. İstemci tarafında Silverlight ile ASP.NET AJAX Extension entegrasyonu sağlayarak sunucu tarafında herhangi bir veritabanından asenkron olarak veri çekerek yine Silverlight tarafında verimizi kullanacağız.

Meeting ID: 3KJ7K7
Webiner Bağlantısı : https://www112.livemeeting.com/cc/microsoft/join?id=3KJ7K7&role=attend&pw=x4G%40Ncxxd
Webinere kayıt olmak için tıklayınız.

Bu webiner Microsoft Kurumsal Webiner serisinden olduğu için yukarıdaki linkten giriş yaparak kayıt olmanız gerekiyor.

Saturday, November 03, 2007 6:16:24 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   AJAX | ASP.NET | Silverlight | Webiner  | 
 Friday, November 02, 2007

Silverlight Streaming Servisleri ile ilgili daha önceki yazılarımda detaylardan bahsetmiştim. Bugün ise size Silverlight Streaming Servisleri ile video yayınını daha da kolaylaştıran bir Plug-In duyuracağım.

Silverlight Streaming Publishing Plug-In for Expression Encoder

Yukarıdaki adresten indirebileceğiniz Expression Encoder eklentisi ile artık direk Expression Encoder kullanarak yarattığınız Silverlight Video Oynatıcılarını Silverlight Streaming Servislerine yükleyebilirsiniz. Bunun için eklentiyi yükledikten sonra ilk yapmanız gereken Silverlight Streaming Servis hesabınızdan Account ID ve Account Key bilgilerini alarak Expression Encoder içerisine yerleştirmek.

Silverlight Streaming Serivis Bilgileri
Silverlight Streaming Serivis Bilgileri

Yukarıdaki görseldeki gibi http://silverlight.live.com/ adresinden sisteme Live ID'miz ile giriş yaptıktan sonra "Manage Account" kısmında gerekli bilgileri alarak direk Expression Encoder'da Output kısmına yerleştirebiliyoruz.

Expression Encoder içerisinde eklentiler.
Expression Encoder içerisinde eklentiler.

Expression Encoder içerisinde Output tabında yeni bir bölüm olarak "Publish" seçeneği karşımıza çıkıyor. Buradan Publish To kısmında "Silverlight Streaming" seçerek işlemimize devam edebiliriz. Bir sonraki adımda isterseniz yükleyeceğiniz video uygulaması için bir Application Name (Uygulama İsmi) tanımlayabilirsiniz. Son olarak Silverlight Stream Servisleri web sitesinden aldığımız Account ID ve Key'i de buraya yerleştirdiğimizde ayarlarımız tamamlanmış oluyor. Bölmenin alt kısmına doğru size bir IFRAME kodu veriliyor. Söz konusu IFRAME kodunu herhangi bir web sitesine kopyalayarak uygulamanın kendi sitenizde direk Silverlight Streaming Servisleri üzerinden çalıştırılmasını sağlayabilirsiniz. Eğer isterseniz en alt bölmeden daha önce Silverlight Streaming Servisleri'ne yüklediğiniz diğer uygulamaları silme veya görme şansınız da var.

Videonuzu bir kez Expression Encoder içerisinde bir Output Template (Şablon) seçerek Encode ettikten sonra Publish düğmesi aktif hale gelecektir. Hemen söz konusu düğmeye basarak yüklemeyi başlatabilirsiniz.

Videomuz Silverlight Streaming Servisleri'ne yükleniyor...
Videomuz Silverlight Streaming Servisleri'ne yükleniyor...

Hepinize kolay gelsin.

Friday, November 02, 2007 3:39:01 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight | Expression Encoder  | 
 Thursday, November 01, 2007

PCnet'in Kasım sayısında yepyeni yazılarımla yine karşınızdayım :) Derginin OKUL bölümünü genişlettik, artık AJAX, Silverlight, Expression Web, Expression Blend ve Expression Design ile ilgili yazıyor olacağım. Dünyada ilk defa bir dergide Silverlight Eğitim içeriğine yer veriliyor. Kasım sayısındaki yazılarımın başlıkları aşağıdaki şekilde;

AJAX : UpdatePanel Mucizesi
Silverlight : Expression Encoder ve Silverlight
Expression Blend : Windows Uygulamarında Animasyonlar
Expression Web: Güle Güle Frontpage
Expression Design : Vektörel Tasarım ve XAML Tek Merkezde

Tüm bu yazılara ek olarak Kasım sayısına özel bir sürpriz makale daha var :)

Flash VS Silverlight

Tahmin ettiğiniz gibi Flash ve Silverlight arasında çetin bir karşılaştırma yazısından bahsediyorum. Hepsi PCnet Kasım sayısında! :)

Thursday, November 01, 2007 12:12:06 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]   AJAX | Expression Blend | Expression Design | Expression Studio | Haberler | Silverlight  | 
 Monday, October 29, 2007

Dünkü Silverlight ve MediaElement örneğimize VideoBrush ile devam edeceğiz. İlk olarak MediaElement nesnemizi biraz daha ufaltarak yansıma için ekranda yer açalım. Sonrasında da MediaElement'imize bir isim vereceğiz.

  <MediaElement x:Name="Goruntu" Source="Bear.wmv" MouseLeftButtonDown="VideoTiklandi" Width="384" Height="288" Stretch="Fill" Canvas.Left="8" Canvas.Top="8"/>


Yukarıdaki biri x:Name diyerek herhangi bir elemente isim verme şansımız var. Bu işlemi Expression Blend 2 içerisinde görsel arayüzden de yapabiliriz.

MediaElement'imize isim veriyoruz.
MediaElement'imize isim veriyoruz.

Verdiğimiz bu isim ileride bir VideoBrush tanımlarken çok işimize yarayacak. Şimdi gelin videonun yansımasını gösterecek olan, ekranda taşıyacak olan nesnemizi belirleyelim. Bunun için basit bir dikdörtgen (rectangle) kullanacağız. Rectangle nesnesini Expression Blend 2 içerisinde solda araç çubuğunda bulabilirsiniz. Dikdörtgenin bir yansımayı temsil edebilmesi için perspektifi ile oynamanın yanı sıra dikdörtgene bir de OpacityMask uygulayacağız.

Dikdörtgenimize uyguladığımız perspektif ve yansıma efektleri.
Dikdörtgenimize uyguladığımız perspektif ve yansıma efektleri.

Yukarıdaki ekran görüntülerinde de görebileceğiniz üzere ilk olarak dikdörtgenin Y ekseninde yansımasını alıyoruz sonrasında da perspektif veriyoruz. Son olarak da sıra geldi bir OpacityMask uygulamaya. Böylece yansıma görünür durumdan başlayarak şeffaflığa doğru kaybolacak.

OpacityMask ayarlarımızı yapıyoruz.
OpacityMask ayarlarımızı yapıyoruz.

Dikdörtgeni Expression Blend 2 içerisinde seçtikten sonra sağ sütundan Properties sayfasında OpacityMask'ı seçiyoruz. OpacityMask olarak uygulamak üzere bir Gradient seçerek gradient renklerinden birinin Alpha değerini sıfır yaparak şeffaftan görünürlülüğe doğru giden bir efekt yaratıyoruz. Efektin yönünü ayarlamak için Expression Blend 2'nin sol araç çubuğundan Brush Transform aracını kullanabilirsiniz.

Tüm bunları tamamladığımızda dikdörtgenimizin XAML kodu aşağıdaki şekilde sonlanıyor.

  <Rectangle Width="380.569" Height="70" Canvas.Top="297" RenderTransformOrigin="0.5,0.5" Canvas.Left="-25" Opacity="0.8">

    <Rectangle.RenderTransform>

      <TransformGroup>

        <ScaleTransform ScaleX="1" ScaleY="-1"/>

        <SkewTransform AngleX="23.963" AngleY="0"/>

        <RotateTransform Angle="0"/>

        <TranslateTransform X="51.527" Y="0"/>

      </TransformGroup>

    </Rectangle.RenderTransform>

    <Rectangle.OpacityMask>

      <LinearGradientBrush EndPoint="0.514,0.957" StartPoint="0.507,0.129">

      <GradientStop Color="#00000000" Offset="0"/>

      <GradientStop Color="#FFFFFFFF" Offset="1"/>

    </LinearGradientBrush>

    </Rectangle.OpacityMask>

  </Rectangle>


Tüm ayarlarımızı tamamladığımıza göre sıra geldi bir VisualBrush tanımlayarak dikdörtgenini içini bu VisualBrush ile doldurmaya. Bu işlemleri direk XAML kodları yazarak yapacağız. Aşağıda bir VisualBrush'ın nasıl tanımlandığını inceleyelim.

      <VideoBrush SourceName="Goruntu" />


Hiç zor bir kod sayılmaz. Tek yapmamız gereken hedef video kontrolünün adını SourceName özelliğine aktarmış olmak. Tanımladığımız bu VideoBrush'ı dikdörtgenin Fill değerine atayacağız. XAML sayfamızın tamamının son hali aşağıdaki şekilde sonlanıyor.

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="435" Height="382"

  Background="White"

  x:Name="Page"

  >

  <MediaElement x:Name="Goruntu" Source="Bear.wmv" MouseLeftButtonDown="VideoTiklandi" Width="384" Height="288" Stretch="Fill" Canvas.Left="8" Canvas.Top="8"/>

  <Rectangle Width="380.569" Height="70" Canvas.Top="297" RenderTransformOrigin="0.5,0.5" Canvas.Left="-25" Opacity="0.8">

    <Rectangle.Fill>

      <VideoBrush SourceName="Goruntu" />

    </Rectangle.Fill>

    <Rectangle.RenderTransform>

      <TransformGroup>

        <ScaleTransform ScaleX="1" ScaleY="-1"/>

        <SkewTransform AngleX="23.963" AngleY="0"/>

        <RotateTransform Angle="0"/>

        <TranslateTransform X="51.527" Y="0"/>

      </TransformGroup>

    </Rectangle.RenderTransform>

    <Rectangle.OpacityMask>

      <LinearGradientBrush EndPoint="0.514,0.957" StartPoint="0.507,0.129">

      <GradientStop Color="#00000000" Offset="0"/>

      <GradientStop Color="#FFFFFFFF" Offset="1"/>

    </LinearGradientBrush>

    </Rectangle.OpacityMask>

  </Rectangle>

</Canvas>


VisualBrush ile yarattığımız video yansıması.
VisualBrush ile yarattığımız video yansıması.

Bu yazımızda da VideoBrush tanımlamayı, nesnelere isim vermeyi, dikdörtgen nesnelerini ve transform işlemlerinin bir kısmını inceledik. Silverlight ile videoların yansımalarını almak bu kadar kolay. Bu yansımaların herhangi bir performans alanında dezavantajı yok.

Biz örneğimizde tanımlamış olduğumuz VisualBrush'ı bir Rectangle'a ait Fill özelliğine aktardık. İsterseniz VisualBrush'ları aşağıdaki şekilde istediğiniz yere aktarabilirsiniz.

  <TextBlock Width="244" Height="84" Canvas.Top="300" FontSize="72" FontWeight="Bold" Text="TextBlock" TextWrapping="Wrap">

    <TextBlock.Foreground>

      <VideoBrush SourceName="Goruntu" />

    </TextBlock.Foreground>

  </TextBlock>


Bu örnekte sayfaya yerleştirdiğimiz bir TextBlock nesnesinin ForeGround özelliğine VisualBrush tanımladık. Böylece TextBlock içerisinde yazan yazıların içinde videomuz oynatılacak.

Yazının içerisinde video yerleştiriyoruz.
Yazının içerisinde video yerleştiriyoruz.

Tüm bu video işlemleri çok kolaylıkla sadece birkaç satır kod ile en ufak bir performans kaybı olmaksızın yapılabilir. Gerisi tamamen sizin hayal gücünüze kalmış.

Hepinize kolay gelsin.

Monday, October 29, 2007 11:20:27 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Expression Blend | Silverlight  | 

Geçen hafta Microsoft İstanbul ofislerinde düzenlediğimiz Silverlight ve Expression Studio Eğitimi'nden daha önceki yazılarımda bahsetmiştim. Eğitimin katılımcılarından sevgili Eren Emre Kanal blogumdaki bir yazıya gönderdiği yorumda muhteşem bir link paylaştı :) Eğitim sonrası bilgisayarı başına oturarak eğitimin süper bir özetini çıkarmış. Açıkçası uzun zamandır benim yazmam gereken fakan zamansızlıktan yazamadığım güzel bir yazıyı kendi sitesi üzerinden bizlerle paylaşıyor. Aşağıdaki adrese tıklayarak yazıya ulaşabilirsiniz.

http://www.siberkultur.com/?q=microsoft-silverlight

Sevgili Eren'in yazısını okuduktan sonra hemen bir yorum gönderdim :) Yazıda Eren'in bahsetmiş olduğu Silverlight ile ilgili bir endişesi var. Silverlight uygulamalarının tamamen "metin" / "plain text" olarak istemci tarafına gidiyor olması uygulamanın tüm kaynak kodlarının rahatlıkla istemcideki kullanıcı tarafından alınabilmesini sağlıyor. Bu durum bir açıdan güzel :) Webde gördüğümüz ve "Acaba nasıl yapmışlar?" dediğimiz uygulamalarının kodlarını inceleme şansımız oluyor. Diğer yandan ticari kaygı yüzünden kodlarını paylaşmak istemeyecek kurumlar da olacaktır. Kaynak kod koruması anlamında Silverlight 1.1 ile durum biraz daha güzelleşiyor diyebilirim. Silverlight 1.1 ile .NET programlama dillerini kullanacağımız için yazdığımız kodlar bir DLL haline getirilerek istemciye gönderiliyor. Tabi ki bugün SWF dosyalarında olduğu gibi .NET DLL'lerinin de Decompile (Kaynak kodunun kısmen elde edilmesi) mümkün. Eminim ki bu alanda kısa sürede üçüncü parti yazılımlar ticari olarak sektörde yerini alacaktır.

Sevgili Eren'e tekrar teşekkür ederek (sitesini de blog sitemdeki "Okuduğum Bloglar" listesine ekleyerek) yazımı sonlandırıyorum.

Monday, October 29, 2007 2:16:04 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Haberler | Silverlight  | 
 Sunday, October 28, 2007

Silverlight 1.0 uygulamalarında Video yayınının gücünden daha önceki yazılarımda bahsetmiştim. Gelin şimdi hep beraber sıfırdan bir Silverlight Video Oynatıcı'sı hazırlayalım. Expression Blend 2 September Preview yazılımını kullanacağımız bu demoda yeni bir Silverlight (JavaScript) projesi yaratarak Page1.xaml üzerinde çalışacağız. Dosyamıza bir adet MediaElement eklememiz gerekiyor, bunun için Expression Blend 2 içerisinde sol araç çubuğundan Asset Library'ye girerek "MediaElement" yazarak kontroller arasında arama yaptırmamız gerekiyor. Kontrol listesi içerisinde MediaElement'i bulduktan sonra sayfaya ekleyebilirsiniz.

Asset Library içerisinden MediaElement'imizi buluyoruz.
Asset Library içerisinden MediaElement'imizi buluyoruz.

MediaElement'i sayfaya ekledikten sonra sıra geldi bir de video dosyası eklemeye. MediaElement'e ait Source özelliğine Blend 2 içerisinden bir video bağladığımızda video dosyasının bir kopyası projemize otomatik olarak ekleniyor.

MediaElement'e ait Source özelliğine videomuzu gösteriyoruz.
MediaElement'e ait Source özelliğine videomuzu gösteriyoruz.

Bu işlemleri tamamladıktan sonra Silverlight uygulamamızı direk çalıştırabiliriz. Video dosyamız MediaElement içerisinde oynatılıyor olacaktır. Şimdi gelin videonun üzerine tıklandığında durmasını sonra da tekrar tıklandığında devam etmesini sağlayalım. Bunun için MediaElement'e ait MouseLeftButtonDown özelliğine bir JavaScript fonksiyonu atamamız gerekiyor. Maalesef bunu şimdilik direk XAML kodu içerisinde yapmamız gerekiyor, Expression Blend 2 içerisinde bu işlem için bir arayüz yok. Benim tavsiyem Video projesini Blend 2 ile beraber aynı anda Visual Studio ile de açmanız. Visual Studio içerisinde XAML Intellisense desteğini de kullanarak daha rahat bir çalışma ortamı yaratabilirsiniz. VideoTiklandi adinda bir JavaScript fonksiyonunu aktardığımız MediaElement nesnemizi içeren XAML kodumuzun tamamı aşağıdaki şekilde sonlanıyor.

<Canvas

  xmlns="http://schemas.microsoft.com/client/2007"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  Width="400" Height="400"

  Background="White"

  x:Name="Page"

  >

  <MediaElement Canvas.Left="8" Canvas.Top="8" Source="Bear.wmv" MouseLeftButtonDown="VideoTiklandi"/>

</Canvas>


Sıra geldi JavaScript fonksiyonumuzun kendisini yazmaya. Page.xaml.js adında Expression Blend 2 tarafından yaratılmış JavaScript dosyasında bize örnek olması amacıyla bazı kodlar yerleştirilmiş. İlk olarak bu kodları silerek Page.xaml.js'i aşağıdaki hale getirmemiz gerekiyor.

if (!window.VideoYansima)

  window.VideoYansima = {};

 

VideoYansima.Page = function()

{

}

 

VideoYansima.Page.prototype =

{

  handleLoad: function(control, userContext, rootElement)

  {

  }

}


Tüm bu kodların devamına VideoTiklandi JavaScript fonksiyonumuzu tanımlayalım. Fonksiyonumuz video eğer oynatılıyorsa durduracak, durdurulmuş durumdaysa tekrar devam ettirecek. Videonun var olan durumunu saklamak üzere Oynuyor adında bir JavaScript değişkeni kullanacağız.

var Oynuyor = true;

 

function VideoTiklandi (sender, args)

{

  if (Oynuyor)

  {

    sender.pause();

    Oynuyor = false;

  }

  else

  {

    sender.play();

    Oynuyor = true;

  };

}


Yukarıdaki kod içerisindeki standart JavaScript işlemlerinin yanı sıra Silverlight ile ilişkili olarak dikkat etmemiz gereken noktalardan biri MediaElement'imize sender JavaScript objesi üzerinden ulaşabiliyor olmamız. Hali hazırda JavaScript fonksiyonumuzu MediaElement üzerinden tetiklediğimiz için sender nesnesi de MediaElement'in ta kendisi oluyor. MediaElement'in doğrudan play(), pause() ve stop() metodlarını kullanarak videoyu durdurabilir, başlatabilir veya bulunduğu yerden devam ettirebiliriz.

Basit bir Silverlight video oynatıcısı hazırladığımız bu örnekte MediaElement'i ve JavaScript fonksiyonlarının Silverlight yapısındaki yerini hızlıca inceledik. Bu yazımı takiben sonraki makalemde bu örneğimize devam ederek MediaElement içerisindeki videonun VideoBrush ile yansımasını almayı öğreneceğiz.

Hepinize kolay gelsin.

Sunday, October 28, 2007 10:21:03 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Expression Blend | Silverlight  | 
 Friday, October 26, 2007

Türkiye'nin ilk Silverlight ve Expression Studio eğitimini Microsoft İstanbul ofislerinde bugün sonlandırdık. Üç günlük yoğun bir maraton sonrasında yaptığım anketlerde gelen olumlu yorumlardan yola çıkarak süper bir eğitim geçirdiğimizi söyleyebilirim. Bu ilk kurumsal eğitimde özellikle yazılımda zengin medya sektörünün guruları ile eğlenceli bir ortamda beraber olmak çok zevkliydi. Bilgeadam, Netron, LuckyEye, Enocta, MagiClick, Yogurt, Digital Graphics, Pure ve Project House'un katıldığı eğitim boyunca Expression Studio serisini, Silverlight 1.0, 1.1 ve WPF'i inceleme şansımız oldu.

Eğitime katılan herkese tekrar teşekkürler.

Friday, October 26, 2007 1:05:47 AM (GTB Standard Time, UTC+02:00)  #    Comments [3]   Eğitimler | Expression Studio | Silverlight  | 
 Wednesday, October 24, 2007

Silverlight uygulamaları geliştirirken Expression Studio içerisinde yer alan, faydalanabileceğimiz birçok yazılım bulunuyor. Expression Studio yazılımları ile Silverlight uygulamalarının ilişkilerini incelediğimiz ve hangi uygulamayı hangi aşamada ne amaçlı kullanabileceğimizi görebileceğimiz bu görsel derste ek olarak beni de görme şansınız olacak :) İlk olarak Türkçe görsel derslerimden birinde WebCam kullandım :) Dikkat dağıtıcı mı olur yoksa faydalı mı bilemiyorum, ama bana güzel oldu gibi geliyor :)

nedirtv?com üzerinden paylaştığım görsel derse aşağıdaki adresten ulaşabilirsiniz.

Expression Studio ve Silverlight

Wednesday, October 24, 2007 5:32:12 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Expression Studio | Silverlight | Webiner  | 

Silverlight uygulamaları geliştirmeyle ilgili makalelerime geçmeden önce yavaş yavaş bilgisayarlarımızı Silverlight uygulamalarına hazırlamaya başlayalım. İlk olarak aşağıdaki adreslerden Silverlight 1.0'ı bilgisayarımıza kurmamız gerekiyor. Bu kurulum bilgisayarımızda Silverlight 1.0 uygulamalarının çalıştırılabilmesini sağlayacak.

http://www.microsoft.com/silverlight/downloads.aspx

Kurulumu tamamladıktan sonra sıra geldi yazılım geliştirme araçlarımızı da Silverlight uyumlu hale getirmeye. Bu noktada eğer Visual Studio 2008 Beta 2 kullanacaksanız Microsoft Silverlight Tools Alpha Refresh for Visual Studio 2008 Beta 2 (July 2007) paketini kurmanız gerekiyor. Eğer sisteminizi Beta yazılımlar ile riske atmak istemiyorsanız ve Visual Studio 2005 ile devam edecekseniz benim tavsiyem ilk olarak Visual Studio 2005 extensions for .NET Framework 3.0 (WCF & WPF), November 2006 CTP paketini bilgisayarınıza kurmanız. Böylece artık WPF uygulamalarını da Visual Studio ile açabilirsiniz. Silverlight tarafına gelince de Microsoft Silverlight 1.0 Software Development Kit paketini bilgisayarınıza kurmanız gerekiyor. Kurulumu tamamladıktan sonra "Başlat" / "Start" menünüze "Microsoft Silverlight 1.0 SDK" bölümü gelecektir. Bu bölümde Silverlight 1.0 Visual Studio 2005 Template adında bir kurulum daha bulacaksınız. Bu kurulumu da yüklediğinizde artık Visual Studio 2005 içerisinde yeni bir proje yaratırkan "Visual C#" altında "Silverlight" seçeneği ile de karşılaşacaksınız. Bu seçeneğin sadece Visual C# altında çıkıyor olmasının nedeni Silverlight proje şablonu'nun C# proje şablonlarından türetilmiş olması. Aksi halde Silverlight 1.0'ın C#, VB gibi .NET dilleri ile herhangi bir ilişkisi yok.

Visual Studio 2005 içerisinde Silverlight Proje seçeneği.
Visual Studio 2005 içerisinde Silverlight Proje seçeneği.

Artık Visual Studio 2005 ile Silverlight projeleri yaratabilir veya var olan projeleri açabiliriz. Tabi bu noktada "Varolan proje nerden var olacak biz yaratmazsak?" diyenler varsa :) Silverlight projeleri yaratabileceğimiz bir diğer alternatif yazılıma geçiş yapmakta fayda var. Aslına bakarsan tam olarak bir alternatif denemez çünkü Expression Blend 2 ile Visual Studio'nun projelerdeki konumu çok farklı. Expression Blend 2 görsel animasyonların hazırlanması noktasında devreye girerken Visual Studio ise zengin Intellisense desteği ile daha çok programcılara hitap ediyor. Şu an için Visual Studio 2005 içerisinde JavaScript Intellisense desteği bulunmasa da 2008 sürümünde bu konuda da ciddi gelişmeler olacak.

Konuya geri dönmemiz gerekirse, bilgisayarınıza Expression Blend 2'yi de aşağıdaki adresten yükleyebilirsiniz. Blend 2 şu an September Preview aşamasında, yani daha tam anlamıyla yayınlanmış, son haline gelmiş bir yazılım değil.

http://www.microsoft.com/Expression/products/download.aspx?key=blend2preview

Tüm bu yüklemeleri yaptığınızda aslında tüm hazırlıklarınızı da bitirmiş oluyorsunuz fakat eksik kalan ufak bir nokta var. Visual Studio içerisinde Silverlight uygulamalarımızın XAML kodlarını düzenleme şansımız var. Eğer yukarıda bahsettiğim gibi WPF desteğini de yüklediyseniz zaten Visual Studio XAML dosyaları açarak size gerekli Intellisense desteğini sağlayacaktır. Fakat konu Silverlight olunca Intellisense desteğinin de farklılaşması gerekiyor çünkü Silverlight içerisindeki XAML yapısı WPF'deki kadar zengin değil ve aslında Silverlight içerisinde kullanamayacağımız kodların Intellisense ile gelmesi durumu söz konusu ki bu hiç de hoş bir durum değil. O nedenle Silverlight için özel bir Intellisense veritabanı yüklememiz gerekiyor. Bu veritabanı Silverlight 1.0 SDK ile beraber geliyor.

Benim bilgisayarıma yaptığım kurulumda ihtiyacım olan Silverlight.xsd dosyasını C:\Program Files\Microsoft Silverlight 1.0 SDK\Tools\silverlight.xsd adresinde buldum. Bu dosyayı alarak yine kendi bilgisayarımdaki C:\Program Files\Microsoft Visual Studio 8\Xml\Schemas adresine kopyaladım. Siz bilgisayarınızdaki kurulumlara göre bu yolları özelleştirebilirsiniz.

Tüm işlemleri tamamladık. Artık sonraki makalelerde Silverlight uygulamalarına yelken açabiliriz.

Hepinize kolay gelsin.

Tuesday, October 23, 2007 11:04:48 PM (GTB Standard Time, UTC+02:00)  #    Comments [6]   Expression Blend | Silverlight  | 
 Monday, October 22, 2007

Expression Studio içerisinde yer alan Expression Encoder ile farklı formatlardaki videoları alarak WMV dosyaları çevirmek ve otomatik olarak Silverlight ile yayınlamanın ne kadar kolay olduğunu merak ediyorsanız :) aşağıdaki video tam size göre.

nedirtv?com üzerinden paylaştığım görsel derse aşağıdaki adresten ulaşabilirsiniz.

Expression Encoder ile Silverlight

Monday, October 22, 2007 1:29:02 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Expression Studio | Görsel Ders | Silverlight  | 
 Sunday, October 21, 2007

"Ne zaman Silverlight uygulamaları hazırlamaya başladık da sıra performansa geldi?" diyenleriniz olabilir :) Haklısınız, umarım yakında giriş seviyesi Silverlight yazıları da yazabilirim. Aslında bu tür yazılar yazıyorum ama maalesef şimdilik her ay yayınlanmak üzere PC.NET'e gidiyor yazılar. (Reklam yaptığımın farkındayım:)) Gelin şimdi konuya dönelim ve Silverlight uygulamaları hazırlarken performans konusunda yapabileceklerimizi inceleyelim.

Şeffaf Fon Uygulamaları

Silverlight animasyonunuza şeffaf bir fon vermek çoğu zaman güzel görüntüler alabilmek için uygun bir çözüm olacaktır. Böylece web sayfasının fonunun üzerine oturtulmuş bir animasyon sayfadaki diğer nesnelerin üstünde olsa da aradaki fark ziyaretçi tarafından algılanmaz. Tüm bunlara karşın gerekmeyen durumlarda sürekli şeffaf fon kullanmak da ciddi performans kaybına neden olacaktır. O nedenle herhangi bir Silverlight animasyonunuzun fonunu şeffafa değiştirirken tekrar düşünmekte fayda var.

Animasyonlarınız için StoryBoard kullanın.

Hem Silverlight hem de WPF Windows Uygulamalarında animasyonlar StoryBoard'lar aracılığı ile yapılır. Storyboard'lar ile hedef bir nesnenin Double, Point veya Color tipindeki değerlerinin başlangıç ve son değerleri ayarlanarak aradaki animasyonun otomatik yaratılması sağlanır. StoryBoard'lar yerine JavaScript ile döngülerle nesnelerin özellikleri üzerinde oynayarak animasyonlar yaratmak ciddi performans kaybı yaratacaktır. Aman dikkat diyorum.

Metinlerin Animasyonları

Metinleri animasyonlarda kullanırken metin boyutlarını değiştiriyorsanız ciddi şekilde sistem kaynaklarını tüketiyorsunuz demektir. Metin olarak düzenlenmiş bir nesneyi herhangi bir animasyon ile büyüttüğünüzde Silverlight söz konusu metnin güncel büyüklükteki punto değerlerine göre tekrar oluşturulmasını sonra da netleştirmesini yapacaktır. Yani 10 pikselden 20 piksele büyüyen bir yazı 10 kere tekrar oluşturulacaktır. Oysa bu tarz metinleri vektörel çizimler olarak Silverlight animasyonlarınıza eklerseniz böyle bir performans kaybı yaşamazsınız.

Sihirli Görünmezlik

Bir nesneyi görünmez yapmak için Opacity (Şeffaflık) değerini 0 yapabilirsiniz, ama yapmayın :) Flash'dan alışık olunan bu yapının yerine Silverlight'da direk nesnelere ait Visibility özelliği var. Bir nesnenin şeffaflığı 0 olsa bile ekranda Silverlight tarafından oluşturulmaya devam edecektir. Oysa nesne görünmez ise aslında artık onunla ilgili görsel bir işlem yapılmaması gerekir. Bu durumda söz konusu nesnenin Visibility özelliğini Collapsed olarak ayarlarsanız nesne tamamen ekrandan kalkacak ve hiç sistem kaynaklarını meşgul etmeyecektir.

Videolarınızı Yeniden Encode Edin

Eğer elinizdeki bir videoyu internette yayınlamak istiyorsanız WMV dosyanızı ufak bir MediaElement içerisine yerleştirerek küçültmeyin. Eğer videonun ufak boyutlarda gösterilmesi gerekiyorsa videonuzu söz konusu boyutlarda tekrar encode edin ve uygulamanızda orijinal boyutlarıyla gösterin. Gerçek zamanlı boyutlandırma video dosyaları için gereğinden fazla sistem kaynağı tüketecektir. Diğer yandan ufak boyutlarda bir video dosya boyutu olarak da ufalacağı için sunucu ve istemci arası veri trafiğinde de kara geçmiş olursunuz.

Yoğun JavaScript İşlemlerine Dikkat

Eğer bir JavaScript fonksiyonunuz ile uzun sürecek bazı işlemler serisi yaptıracaksınız bu seriyi ufak parçalara bölerek sırayla yaptırın. JavaScript arka planda çalışırken Silverlight animasyonlarının devam etmesi zor olacaktır ve performans düşüşü yaşanacaktır. Eğer işlemleri bölerek sırayla yaptırırsanız Silverlight'a animasyonlarıyla devam etme şansı tanımış olursunuz.

Hepinize kolay gelsin.

Sunday, October 21, 2007 4:43:55 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Monday, October 15, 2007

Daha önceki yazılarımda Silverlight Streaming Servisleri'nden bahsetmiştim. http://silverlight.live.com/ adresinden ulaşabileceğimiz bu ücretsiz servis ile 4GB'lık bir web alanında Silverlight uygulamalarımızı dünyaya açabiliyoruz. Peki nasıl yapacağız bu işi? İlk olarak http://silverlight.live.com sitesini ziyaret ederek Live ID'miz ile kayıt olmamız gerekiyor. Kayıt işlemini tamamladıktan sonra karşımıza gelen ekranda "Manage Applications" seçeneğini seçerek Silverlight uygulamamızı bir ZIP dosyası olarak yükleyebiliyoruz.

Silverlight Streaming Services
Silverlight Streaming Services sitesine giriş yaptığımıza karşımıza çıkan ekran.

Bir sonraki ekranda bizden ZIP dosyamız ve uygulamamıza verilmek üzere bir isim isteniyor.

Silverlight Streaming Servisleri'ne ZIP dosyamızı yüklüyoruz.

Yükledim ama çalışmıyor diyenler varsa büyük ihtimal ile benim yazılarımı ilk defa okuyorlar demektir.Yazılarımı okurken bir yandan uygulama yapmamanızı tavsiye ederim, çünkü genelde en can alıcı noktaya en sona bırakırım. Yukarıdaki adımları takip ederek Silverlight uygulamanızı bir ZIP dosyası olarak sıkıştırıp yüklediyseniz tabi ki uygulamanız çalışmayacaktır. Neden mi? Çünkü bu işin bazı kuralları var. Gelin şimdi Silverlight Streaming Servisleri için nasıl ZIP dosyası hazırlarız bir inceleyelim.

  • Yükleyeceğiniz Silverlight uygulamasını bir ZIP paketine sıkıştırırken kesinlikle HTML, HTM, ASPX, ASP, MEDIA, CSPROJ veya CONFIG uzantılı dosyaları pakete eklememelisiniz.
  • Dosyalarınız ZIP paketinin ana dizininde olmalıdır. Yani ZIP paketi içerisinde bir klasörde vs bulunmamalılar.
  • Tüm JavaScript dosyalarınız ve kaynaklarınız bir listesinin bulunduğu Manifest.XML dosyası ZIP paketi içerisinde yer almalıdır.

Nedir bu Manifest.xml?

Manifest.xml dosyası Silverlight Streaming Servisleri'nin sizin Silverlight uygulamanızla ilgili gerekli bilgileri edinebilmesini sağlayacak olan dosyadır. Bu çerçevede tabi ki bizim söz konusu dosyayı doğru şekilde hazırlamış olmamız çok önemli. Gelin aşağıda bir manifest.xml örneği inceleyelim.

<SilverlightApp>

  <source>myfile.xaml</source>

  <width>800</width>

  <height>600</height>

  <background>#00FFFFFF</background>

  <version>1.0</version>

  <isWindowless>true</isWindowless>

  <loadFunction>StartWithParent</loadFunction>

  <jsOrder>

    <js>MicrosoftAjax.js</js>

    <js>PreviewMedia.js</js>

    <js>EmePlayer.js</js>

    <js>player.js</js>

    <js>StartPlayer.js</js>

  </jsOrder>

</SilverlightApp>


Yukarıda örnek bir Mainfest.xml dosyasının içeriği görebilirsiniz. Silverlight uygulamanızda eğer birden çok XAML dosyası varsa hangisinin ilk olarak yükleneceğini belirtmeniz gerekiyor. Bunun için source taglarını kullanıyoruz. Eğer sadece bir XAML dosyanız varsa bu tagı yerleştirmenize gerek yok. JavaScript ile Silverlight uygulamanızı yaratırken boyut, arkaplanı rengi bilgilerini belirtmediyseniz Manifest içerisinde de belirtebilirsiniz. Version tagları arasında kullanmış olduğunuz Silverlight sürümünü yazmanız gerekiyor. Biz şimdilik bu sürümü tek release sürümü olan 1.0 olarak bırakacağız. Eğer Silverlight uygulamanızın üzerine HTML Overlay tekniği ile HTML nesneleri yerleştirecekseniz isWindowless seçeneğini de true olarak düzenlemekte fayda var. Gelelim en can alıcı ayarlara; bunlardan ilki Silverlight uygulamanızı yaratacak olan JavaScript fonksiyonu. StartWithParent fonksiyonu yine Streaming Servisleri tarafından yaratılıyor, isterseniz buraya farklı JavaScript metodlarının isimlerini yazarak durumu siz de kontrol edebilirsiniz. Son olarak uygulamanızda kullandığınız tüm JavaScript dosyalarını jsOrder tagları arasına tek tek eklemeniz gerekiyor.

Deneyelim...

Hemen bir deneme yapalım ve ufak bir video dosyasını Expression Encoder ile encode ederek Output kısmından da bir Silverlight Template seçerek Silverlight oynatıcılı bir çıktı alalım. Eğer bilgisayarınızda Expression Encoder yüklü değil ise ve hazırda bir WMV dosyanız varsa bir alternatif olarak http://www.silverlightgenerator.com 'dan da faydalanabilirsiniz. Silverlight paketimizi hazırladıktan sonra içerisinde gereksiz dosyaları (CSPROJ, HTML vs) siliyoruz ve aşağıdaki içeriği ile manifest.xml dosyamızı yaratıyoruz.

<SilverlightApp>

  <version>1.0</version>

  <loadFunction>StartWithParent</loadFunction>

  <jsOrder>

    <js>MicrosoftAjax.js</js>

    <js>BasePlayer.js</js>

    <js>PlayerStrings.js</js>

    <js>player.js</js>

    <js>StartPlayer.js</js>

  </jsOrder>

</SilverlightApp>


Gördüğünüz gibi çok fazla detaylı ayarlara bulaşmadan basit bir şekilde JavaScript dosyalarını sıralayarak manifest.xml dosyamızı tamamladık. Şimdi tüm bu paketi manifest.xml ile beraber bir ZIP dosyası haline getirerek Silverlight Streaming Servisleri'ne yükleyebiliriz.

Yüklemem Tamam... Sıra Yayında...

ZIP paketinizi Silverlight Streaming Servisleri'ne yüklediğinizde karşınıza aşağıdaki gibi bir sayfa gelecek ve Silverlight uygulamanızı web sitenize eklemeniz için ihtiyaç duyacağınız kodları size aktarıyor olacak.

Silverlight Streaming Servisleri'nden uygulamamızı kendi sitemize aktarıyoruz.
Silverlight Streaming Servisleri'nden uygulamamızı kendi sitemize aktarıyoruz.

Yukarıdaki ekran görüntüsüne yer alan açıklamalardan da anlaşılacağı üzere en üst kutuda yer alan kodu web sayfamızın HTML kodları arasında HEAD taglarının arasına yerleştiriyoruz. İkinci kutuda yer alan kodları Silverlight uygulamasının sitenizde gözükeceği konuma yerleştirmeniz gerekiyor. Son olarak üçüncü kutudaki kodları ise harici olarak yaratacağımız bir CreateSilverlight.js dosyasına yerleştirmeliyiz. Tüm bunlar tamamlandığında basit bir HTML sayfasının kodu aşağıdaki şekilde sonlanıyor.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

 

  <script type="text/javascript" src="http://agappdom.net/h/silverlight.js"></script>

 

  <script type="text/javascript" src="CreateSilverlight.js"></script>

 

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  <title>Untitled 2</title>

</head>

<body>

  <div id="Wrapper_denek" style="width: 500px; height: 400px; overflow: hidden;">

  </div>

 

  <script type="text/javascript">

var Wrapper_denek = document.getElementById("Wrapper_denek");

CreateSilverlight();

  </script>

 

</body>

</html>


Geçmiş Olsun..

Tüm yapmamız gereken bu kadar. Artık siz de Silverlight uygulamalarınızı hemen yayına alabilirsiniz. Özellikle videolarınızı hemen Silverlight ile hazırlayarak dünyaya açabilirsiniz.

Kolay gelsin...

Monday, October 15, 2007 10:00:01 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Thursday, October 11, 2007

Silverlight teknolojisinden en hızlı ve kolay şekilde faydalanabileceğimiz noktalardan biri online video yayını. Özellikle WMV formatlı video dosyalarımızı direk internet üzerinden yayınlayabilmemize olanak tanıyan Silverlight ile artık elimizdeki videoları internete aktarmak gerçekten çok kolay.

Tabi video dosyasını direk internete koymak yetmiyor, uygun Silverlight araçlarının da hazırlanmış olması gerekiyor. Bu noktada Expression Studio içerisinden Expression Encoder ürününü kullanabiliriz. Ürün hem farklı video formatlarından WMV'ye çeviri yapabilirken hem de otomatik şablonlar ile Silverlight oynatıcıları hazırlayabiliyor. Benim burada size sunacağım çözüm ise ağırlıklı olarak elinizde hazır olan WMV dosyalarınızı hemen internete taşımanıza yardımcı olmak amacıyla geliştirilmiş. Geliştirilmiş diyorum ama geliştiren de esasen benim :)

http://www.silverlightgenerator.com

Yukarıdaki adresten ziyaret edebileceğiniz sitenin dili ingilizce çünkü bu sitenin yaptığı işi yapan bir site dünyada daha yok. Eh bizim için de iki kelime ingilizce okumak bulunduğumuz sektör gereği çok zor olmayacaktır. Siteye girdiğinizde üst kısma, internette yayınlamak istediğiniz WMV dosyasının adını girmeniz gerekiyor. Sonrasında sol kısımdan beğendiğiniz bir Silverlight Video Oynatıcı şablonunu seçebilirsiniz. Tüm bunları tamamladıktan sonra eğer isterseniz Marker ayarları da yapabilirsiniz. Marker'lar bir video içerisinde belirli bir konuma konan işaretçiler olarak değerlendirilebilir. Site içerisinde Marker tanımlarken saniye ve açıklama bilgisi girmeniz bekleniyor. Bu açıklamalar yaratılacak olan Silverlight Video Oynatıcısı içerisinde ekstra olarak listelenecektir ve herhangi biri bu açıklamalardan birine tıkladığında sizin ayarlamış olduğunuz videonun söz konusu saniyesindeki konumuna dönülecektir.

Ayarlarınızı tamamladıktan sonra sitede Download düğmesine tıklayarak bir ZIP dosyası olarak Silverlight Video Oynatıcısı'nı bilgisayarınıza indirebilirsiniz. ZIP arşivi içerisindeki tüm dosyaları bilgisayarınıza bir klasöre açarak aynı klasöre VMW dosyasını da yerleştirdikten sonra istediğiniz hosting (barındırma) alanına dosyaları aynen yükleyebilirsiniz. Böylece en ufak bir kod bile yazmadan, bilgisayarınıza hiçbir ek program yüklemeden hızlı bir şekilde görsel bir Silverlight Video Oynatıcısı'nı web sitenize eklemiş oldunuz.

Hepinize kolay gelsin...

Thursday, October 11, 2007 12:55:29 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Thursday, October 04, 2007

Türkiye'nin ilk Silverlight webinerini daha önce de duyurduğum üzere bugün gerçekleştirdik. Silverlight webinerimizi özellikle Expression Studio çerçevesinde yeni webinerler takip ediyor olacak. Bizden ayrılmayın diyerek aşağıda sizlerle webinerde kullandığımız sunum dosyasını paylaşarak varsa Silverlight başlıklı sorularınızı bu yazıma yorum olarak gönderebileceğinizi de hatırlatmak isterim.

Webiner Sunum Dosyası - 04102007_1.rar (6,39MB)

Thursday, October 04, 2007 4:56:43 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight | Webiner  | 
 Wednesday, October 03, 2007

Türkiye'nin ilk Silverlight webinerini Microsoft'dan Nuri Çankaya ile beraber yarın gerçekleştiriyor olacağız. Silverlight örneklerinden başlayarak Expression Design, Expression Blend ve Visual Studio 2005'in Silverlight dünyasındaki yerine, uygulamalı bir örnekle bakacağımız Webiner'e aşağıdaki bilgilerle kaydolabilirsiniz.

Adres:https://www112.livemeeting.com/cc/microsoft/join
Meeting ID: 2H5S37
Giriş Kodu: W@;%#d7:j
Tarih ve Saat: 4 Ekim 2007 Perşembe, Saat 10:00-12:00

Türkiye’den Türkçe olarak yapılacak bu webiner sonrası isteyenler, 15:30’da başlayacak olan dünyanın 10 merkezinde aynı anda yapılacak "Expression Around The Clock” etkinliğine katılabilirler. Expression ürün ailesine ait tüm tasarım araçlarının detaylarıyla anlatılacağı bu etkinliği yine internetten izleyebilirsiniz. Auckland – Seoul – Bangalore – Moscow – Cairo – Milan – Zürich - Sao Paulo – Toronto - Mexico City şehirlerinde gerçekleşecek etkinlikte Zürih açılış oturumunu Steve Ballmer gerçekleştirecek. Katılım detayları webiner sonunda verilecek.

Webinerler internet üzerinden online olarak gerçekleşiyor. Webineri izleyebilmek için öncesinde http://go.microsoft.com/fwlink/?LinkId=90703 adresinden bilgisayarınızı test etmenizde fayda var. Son olarak yaklaşık 15 MB civarında olan Office Live Meeting istemcisini de bilgisayarınıza şimdiden kurarsanız son anda sorun yaşama ihtimalinden kurtulursunuz.

Wednesday, October 03, 2007 4:33:32 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight | Webiner  | 
 Tuesday, October 02, 2007

İster internet üzerinden yayınlanan makalelerde olsun ister blog sitenize yollayacağınız bir ipucunda, maalesef sayfanıza HTML kodu veya herhangi bir kod yerleştirmek istediğinizde Visual Studio içerisinden alışık olduğumuz renklendirmeyi almamız pek mümkün olmuyor. Bu durumda çoğu sitede ekran görüntülerinden oluşan resimlerle dolu makaleler görüyoruz. Ben bugüne kadar bu sorunu biraz uğraştırıcı bir yöntemle çözüyordum :)

Bugünden sonra ise CopySourceAsHtml adındaki bir Visual Studio 2005 add-in uygulamasını kullanacağım. Yaptığım testlerde epey başarılı sonuçlar aldım. Uygulama direk Visual Studio içerisindeki renklendirme üzerinden HTML kodu yaratabiliyor. Programı aşağıdaki adresten indirebilirsiniz.

http://www.jtleigh.com/people/colin/software/CopySourceAsHtml/

Tuesday, October 02, 2007 7:43:28 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]   .NET Framework 3.0 | AJAX | ASP.NET | CSS | HTML | JavaScript | Silverlight | Visual Basic 2005 | Visual Studio 2005  | 
 Monday, October 01, 2007

Silverlight ile çalışmalarım yoğun olarak devam ediyor. Bu kapsamda DEVELOAD bünyesinde de Silverlight konusuna eğiliyoruz. Son dört senedir aynı web sitesini kullanmanın derdi ve biraz daha sade bir arayüz arayışı ile Silverlight'ın heyecanı da birleşince sonuç Türkiye'nin ilk kurumsal Silverlight uygulaması oldu.

http://www.deveload.com adresinden inceleyebileceğiniz site Silverlight 1.0 ve ASP.NET AJAX kullanılarak programlandı. Yazılım geliştirme süresince karşılaştığımız herşey bizi o kadar memnun etti ki maalesef bir daha Adobe Flash'a dönmeyi düşünmüyoruz. Silverlight hem XML tabanlı animasyon sistemi, hem de JavaScript ile programlanabiliyor olması ile gerçekten çok daha esnek. Tabi bahsetmeden de geçemeyeceğim, ziyaret edeceğiniz site arkaplanda bir içerik yönetim sistemine de bağlı.

Siteyle ilgili yorumlarınızı heyecanla bekliyorum ;)

Monday, October 01, 2007 9:30:17 AM (GTB Standard Time, UTC+02:00)  #    Comments [7]   AJAX | Silverlight  | 
 Wednesday, September 26, 2007

Son zamanlarda yoğun olarak Silverlight üzerine çalışıyorum ve bir süredir güzelim Silverlight logosunu bloguma JPEG olarak koyuyor olmak canımı sıkıyordu. Diğer yandan blog sitemin de kaynak kodlarına girerek Silverlight JavaScript kodlarını yerleştirmeye de bir türlü zamanım olmadı. Fakat bugün uygun bir yol buldum.

Size ilk önce Silverlight Streaming servislerinden bahsetmek istiyorum. Live.com üzerinden ulaşabileceğiniz servis şu an Alpha sürümünde. 4GB disk alanı kullanabildiğiniz hizmet ile kendi Silverlight uygulamalarınızın web üzerinde yayınlanabilmesini sağlayabiliyorsunuz. Sonrasında yayınladığınız Silverlight uygulamasını kendi web sitenize de yerleştirebilirsiniz. Ben de bu servislerden faydalanarak Silverlight logosunu doğrudan Silverlight Streaming servisleri üzerinden bloguma koyacağım.

<iframe src="http://silverlight.services.live.com/invoke/32/SlLogo/iframe.html"
        frameborder="0" width="258" height="100" scrolling="no" />

Eğer siz de sitenize Silverlight logosunu aşağıdaki şekilde yerleştirebilmek istiyorsanız yukarıdaki kodu kullanabilirsiniz.

Wednesday, September 26, 2007 10:45:07 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Monday, September 24, 2007

Yok böyle birşey! Biraz agresif bir giriş olduğunun farkındayım fakat insanları kısmen aptal yerine koyan ticari mantıktan artık bıkkınlık geldi. Silverlight'ın hayatımıza yeni yeni girmesinden faydalanan yerli ve yabancı bazı hosting şirketleri yeni hosting paketlerini bir gaz satışa sundular.

Silverlight Destekli Hosting!!! Yok böyle birşey! Böyle bir hizmet yok! Silverlight tamamen JavaScript ve XAML, 1.1 sürümünde ise .NET Framework. Bunların hepsi Silverlight Plug-In sayesinde tamamen istemci tarafında çalışan teknolojiler. Hosting sağlayıcınızın bunun için ek bir ayar yapmasına vs hiçbir şeye gerek yok. O nedenle Silverlight uygulamaları yayınlamayı düşünüyorsanız şu anki hosting hizmetinizle devam edebilirsiniz.

Silverlight sadece ASP.NET ile kullanılır. Hayır! Silverlight'ı isterseniz PHP, Coldfusion veya JSP ile kullanabilirsiniz. Hiçbir sınırlama yok. İsterseniz Linux sunucu üzerinden yayınlarsınız, isterseniz Windows veya BSD! Seçim tamamen size kalmış.

Silverlight ile ilgili akılda kalan başka sorular varsa lütfen yorum olarak bu mesaja ekleyin. Elimden geldiğince açıklık getirmeye çalışacağım.

Monday, September 24, 2007 12:47:45 AM (GTB Standard Time, UTC+02:00)  #    Comments [9]   Silverlight  | 
 Wednesday, September 12, 2007

Yazılım sektörü ile ilgili dünyadaki ve Türkiye'deki gelişmelerle ilgili ufak bir haber geçidi oluşturmaya karar verdim :) Gelin beraberce inceleyelim.

İlk haberimiz tabi ki Silverlight 1.0'ın çıkışı. Bu konuda daha önce de blog içerisinde bir yazı yazmıştım. O nedenle çok detaya girmeyeceğim. Özellikle bahsetmek istediğim bir diğer nokta da Moonlight; Microsoft ve Novell tüm Linux sürümlerinde çalışacak Silverlight sürümü için çalışma başlattıklarını duyurdu. Moonlight, FireFox, Konqueror ve Opera ile çalışacak. Gerçekten güzel günler bizi bekliyor.

Microsoft, Silverlight ile hazırlanmış yeni arama motorunu duyurdu: Tafiti.com. Günlük hızlı kullanım için ne kadar kullanışlı olduğu tartışılır fakat teknoloji demosu anlamında gerçekten çok başarılı. Silverlight'ın şu an 3D desteği olmadığı göz önünde alınarak 3D bir ortam 2D nesneler ile kısmen sağlanmış durumda. Arama motoru olarak arka planda live.com kullanılıyor. Live.com ile ilgili web servislerinin kullanımı konusundaki makaleme buradan ulaşabilirsiniz.

İnternette belirli bir metni veya web sayfasını bir dilden diğerine çevirmek istediğimizde genelde gittiğim adres altavista'nın Babel Fish uygulaması olurdu. Artık yeni bir alternatif var; Live Translator. Aşağıda adresi yer alan web sitesinden ulaşabileceğiniz site üzerinden belirli bir metni veya web adresi vererek bir web sitesini farklı dillere çevirtebilirsiniz. Türkçe desteğini de en kısa zamanda bekliyoruz :)
http://translator.live.com/

Türkiye'deki İlk Silverlight uygulaması da artık yayında. ODTÜ BÖTE Bölüm Başkanı Prof.Dr. M.Yaşar ÖZDEN tarafından hazırlanan Türkiye'nin ilk Silverlight uygulamasına aşağıdaki adresten ulaşabilirsiniz. Sayfa içerisinde 24 saat kesintisiz NTV canlı yayını verilmekte.
http://guide.ceit.metu.edu.tr/Expression/SilverLightTV/default.html

Şimdilik haberler bu kadar. Elimden geldiğince haberleri günü gününe değil de böyle topluca derlemeye çalışacağım.

Wednesday, September 12, 2007 10:21:02 AM (GTB Standard Time, UTC+02:00)  #    Comments [1]   Haberler | Silverlight  | 
 Wednesday, September 05, 2007

WPF/E (WPF For Everywhere) kod adı ile tanıştığımız Silverlight'ın 1.0 sürümü Microsoft tarafından yayınlandı. Silverlight 1.0 ile beraber Expression Studio serisinden Expression Encoder'a ait de 1.0 sürümü yayınlandı. Arka planda JavaScript kodları yazarak WPF ile yarattığımız animasyonları tarayıcı bağımsız olarak kontrol edebildiğimiz Silverlight'ın bir sonraki sürümünde .NET kodu yazabiliyor olacağız. Açıkcası ben heyecanla bir sonraki sürümü bekliyorum.

Silverlight 1.0 kullanılarak hazırlanmış sitelere örnek olarak aşağıdaki linkleri inceleyebilirsiniz.

http://www.tafiti.com
http://halo3.msn.com/videos.aspx
http://election.msn.com/podium08.aspx

Wednesday, September 05, 2007 10:07:39 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Wednesday, August 15, 2007

Silverlight ile ilgili uzun süredir herhangi bir yazı yazmadığımın farkındayım. Açıkcası Beta sürecinde olan yazılımlarla ilgili çok derin çalışmalar yapmanın biraz sakıncalı yönleri var. Bu yönleri özellikle ATLAS.NET ile çalıştıktan sonra üzücü bir şekilde farkında vardım. Öğrendiğiniz herşey bir anda uçup gidebiliyor veya bir anda öyle değişiklikler oluyor ki kendiniz söz konusu konu ile alakasız zannetmeye başlayabiliyorsunuz. O nedenle en azından RC sürümüne kadar sessiz bir bekleyişin daha uygun olacağını düşünüyordum.

Tabi bu arada sizler boş durmamış ve aynı benim gibi sessiz sessiz Silverlight çalışıyor da olabilirsiniz. İşte bu noktada Silverlight Beta ile RC uygulamaları arasındaki farkların anlatıldığı bir MSDN makalesini sizlerle paylaşmak istiyorum.

http://msdn2.microsoft.com/en-us/library/bb693297.aspx

RC sürümünden itibaren artık çok büyük değişiklikler beklemiyor, fakat yine de hazırlıklı olmakta ve gelişmeleri yakından takip etmekte fayda var. Ne de olsa daha Visual Studio 2008 için en az 6 ayımız var :)

Wednesday, August 15, 2007 3:44:28 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
 Monday, April 16, 2007

WPF (Windows Presentation Foundation) Windows Vista ile dahili olarak gelen .NET Framework 3.0'ın önemli parçalarından biri. Ses, video ve animasyonun beraber olarak kullanılabildiği XAML (XML bazlı) kodlarının gerçek zamanlı olarak render edilmesi ile oluşturulan uygulamaların altyapısını oluşturan WPF'in internet üzerinden kullanılabilecek sürümünü uzun zamandır kod adı WPF/E (WPF For Everywhere) ile takip ediyorduk.

Şu an CTP (Community Technology Preview) aşamasında olan WPF/E'nin gerçek adı Microsoft tarafından duyuruldu; Silverlight. Silverlight'ın tam olarak ne olduğunu anlamak için esasen WPF'in ne olduğunu anlamak gerek.

WPF özünde XAML (Extensible Application Markup Language) kodundan oluşan bir arayüz ve gerçek zamanlı 3D rendering desteğine sahip. XML kodu ile tanımlanan objeler üç boyutlu olarak yönetilebiliyor. Tüm bu sistemin çalışması için hedef makinede .NET Framework 3.0 yüklü olması şart.

Silverlight ise bu sistemin internet ortamına taşınmış şekli. Arka planda ASP.NET programlama desteği ve veri trafiği için de AJAX kullanımı ile kullanıcı taraflı üç boyutlu grafikler ile etkileyici web siteleri yakın gelecekte sıkça karşımıza çıkacak. Hemen aklınıza ilk gelen soru şöyle olacak; Peki ya .NET Framework 3.0 yüklü değilse site çalışmayacak mı? Aynı Adobe Flash Plug-in gibi ufak bir Plug-In yükleyerek Silverlight'ın sisteminizde çalışabilmesini sağlayabileceksiniz. Sistem tamamen platform (Windows, Mac) ve tarayıcı (IE, FireFox) bağımsız.

Microsoft Silverlight sitesine aşağıdaki adresten ulaşabilirsiniz;

http://www.microsoft.com/silverlight/default_01.aspx

Ayrıca konuyla ilgili Microsoft tarafından bir topluluk sitesi de 30 Nisan'da yayına geçecek.

http://www.silverlight.net/

Bilgisayarınızda şu an Silverlight uygulamalarını çalıştırmak için gerekli Plug-In'i yukarıdaki Microsoft adresinden indirebilirsiniz. Fakat hatırlatmakta fayda var, şu an ürün CTP aşamasında olduğu için sorunlar içermesi olası.

Monday, April 16, 2007 7:03:12 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight  | 
Copyright © 2010 Daron Yöndem. Tüm hakları saklıdır.