Ana Sayfa | English Blog | Seminer TV | Dil Cookie Sil  Blog'u Mail ile takip et!       
Daron Yöndem - February, 2009
bir yazılımcının tasarıları...
 Saturday, February 28, 2009

MSDN Magazine'i takip edenleriniz vardır diye tahmin ediyorum. Microsoft'un yazılımcılara yönelik aylık olarak yayınlanan İngilizce dergisi olan MSDN Magazine'in Mart sayısında benim de bir makalem yer alıyor.

MSDN Magazine Mart 2009 Sayısı
MSDN Magazine Mart 2009 Sayısı

Yukarıdaki kapakta en üstte yer alan :) Internet Explorer 8 yazısı bana ait. Yazılımcılara yönelik olarak Internet Explorer 8 yeniliklerini bugüne kadar birkaç seminerde anlattım, ayrı makaleler şeklinde bilgileri sizlerle blogumdan da paylaştım. Dergi içerisindeki yazıya da aşağıdaki adresten dijital ortamda da ulaşabilirsiniz.

http://msdn.microsoft.com/tr-tr/magazine/dd458804(en-us).aspx

Yazı içerisinde screenshotlara dikkat ederseniz :) Türkçe Live.com arayüzünde statüs barda "TR" karakterlerini de net olarak görebilirsiniz :) Garip bir duygu ama MSDN Magazine'de bu gibi Türkçe bir screenshot görmek beni kendimce gururlandırdı :) Kabul ediyorum bunlar garip duygular...

 

Saturday, February 28, 2009 7:41:15 PM (GTB Standard Time, UTC+02:00)  #    Comments [16]   IE 8.0  | 
 Friday, February 27, 2009

Son iki gündür Erzurum, Atatürk Üniversitesi'ndeydim. Silverlight, WPF, AJAX, LINQ konularına değindiğimiz ikin günlük bir serinin sonunda minik bir de DreamSpark dağıtımı yaptıktan sonra iki saatlik gecikme ile uçağıma binip dönüp dolaşım yine :) İstanbul'a döndüm. Oturumlarda şaşkınlık ile karışık bir tepkisizliğin hakimiyetine karşın aralarda aldığım tepkiler çok sıcaktı. Anadolu'daki üniversitelerin havası gerçekten çok farklı, Erzurum'da da bunu yaşadım. Gençlerin gözlerindeki ışıltı ve kaba tabiri ile doğu bölgelerindeki bu gibi etkinliklere yönelik ihtiyacın tam olarak giderilememesi tezatı beni gerçekten üzüyor. Olanaklar el verdikçe Anadolu üniversitelerine gidiş sevdamı ben de bu şekilde tatmin etmeye çalışıyorum :)

Erzurum, Atatürk Üniversitesi Seminerlerim
Erzurum, Atatürk Üniversitesi Seminerlerim

Tabi ki yine teşekkür etmem gereken onlarca dost var Erzurum'dan. Yüksel hocama ve afacana buradan selamlarımı gönderdikten sonra :) öğrenci kardeşlerimden de Mehmet Keklik'e etkinliğe vesile olması ve organizasyondaki katkısı için çok teşekkür ediyorum. Umarım seneye taptaze ve daha dolu bir etkinlik ile tekrar buluşuruz ;)

Friday, February 27, 2009 2:01:14 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]   AJAX | ASP.NET 3.5 | LINQ | Silverlight 2.0 | WPF  | 
 Wednesday, February 25, 2009

Silverlight 2.0 uygulamaları hazırladığınızda sunucu tarafına yükleme işlemini yaptığınız gibi XAP dosyanızın büyüklüğüne göre Silverlight Runtime tarafından otomatik olarak bir ön yükleme sistemi gösterilecektir. Kullanıcılar sitenizi ziyaret ettiğinde XAP dosyasının istemciye inme sürecini gösteren bu yükleme göstergelerini isterseniz rahatlıkla özelleştirebilir ve değiştirebilirsiniz. Tabi tüm bunları XAP dosyanız dışında daha XAP dosyası yüklenmeden bir şekilde yine Silverlight ile yapabiliyor olmamız gerek.

Silverlight ile beraber gelen standart ön yükleme animasyonu.
Silverlight ile beraber gelen standart ön yükleme animasyonu.

Aslında bu yükleme ekranını değiştirirken belki de eski Silverlight 1.0 günlerini biraz hatırlayacaksınız. XAP dosyası yüklenmeden önce bu şekilde bir yükleme animasyonu gösterebilmemiz için animasyonu oluşturacak ayrı bir XAML ve download durumunu kontrol edecek ayrı bir JavaScript koduna ihtiyacımız var.

Görsel kısmı halledelim...

İlk olarak ön yükleme işlemini gösterecek olan animasyonu ve görsel öğeleri düzenleyelim. Tüm bu görsel öğelerin tabi ki XAP dosyası dışında olması gerek. Bu durumda tek bir alternatif kalıyor, o da hazırlayacağımız tüm XAML kodunun harici bir dosya olarak sunucuda tutulması. Eğer Visual Studio ile bir Silverlight projesi yarattıysanız büyük ihtimal ile yanında bir de ASP.NET siteniz olacaktır. İşte tam da o ASP.NET sitesine bir XAML dosyası eklemeliyiz. Bunu ister Visual Studio içerisinde yapın ister Expression Blend içerisinde, önemli olan projeleri karıştırmayarak XAML dosyasını kesinlikle web sitesinde tarafında bir dosya olarak yaratmanız.

Maalesef bu noktadan sonra Expression Blend bize pek yardımcı olamayacak çünkü Web sitesindeki XAML dosyasının tam olarak ne tür bir projeye ait olduğunu algılayamayacak. O nedenle çoğu kodu elle yazmak zorunda kalacağız.

[XAML]

<StackPanel Orientation="Horizontal" xmlns="http://schemas.microsoft.com/client/2007"

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

        x:Name="LayoutRoot" Background="White" Height="104">

  <Rectangle Height="33" x:Name="Progress" Fill="#FF00FF00"/>

  <TextBlock Height="18" Text="Yükleniyor..."/>

</StackPanel>

Yukarıdaki kodumuz bizim önyükleme ekranının tasarımı olacak. Tasarım oldukça basit; bir StackPanel içerisinde TextBlock ile Rectangle kullanarak işi çözüyoruz. Tabi siz örneklerinizde farklı tasarımlar kullanabilirsiniz. Bizim örneğimizde ekranda sürekli "Yükleniyor..." yazacak ve yanında da 0 pikselden 100 piksele doğru genişleyecek olan bir Rectangle yer alacak. Böylece kullanıcıya standart görselden farklı bir şekilde XAP dosyasının  yüklenmesine ait süreci göstermiş olacağız.

Bu kod içerisinde en önemli nokta Rectangle nesnesinin adının Progress olması. İleriki aşamalarda yazacağımız JavaScript kodları ile bu nesneyi bularak gerekli değişiklikleri yapacağız.

Ortamı hazırlayalım...

Silverlight uygulamamızı sayfaya yerleştirdiğimiz OBJECT tagları içerisinde bazı ek parametreler tanımlamamız gerekiyor. Böylece Silverlight Runtime XAP dosyasının indirirken nerede ve nasıl bir progress göstermesi gerektiğini bilebilecek. Gelin uygun bir OBJECT tagına göz atalım.

[XAML]

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

            <param name="splashscreensource" value="Scene1.xaml"/>   

<param name="onSourceDownloadProgressChanged" value="onSourceDownloadProgressChanged" />

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

            <param name="onerror" value="onSilverlightError" />

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

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

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

            <a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">

                <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>

            </a>

        </object>

Gördüğünüz üzere kod içerisinde kalın olarak yazılı üç farklı nokta var. Bunlardan birincisi OBJECT taglarına vermiş olduğumuz ID olan SL ismi. OBJECT taglarımızı bu şekilde isimlendirmek zorundayız çünkü birazdan JavaScript ile bu OBJECT taglarına yani Silverlight uygulamamıza ulaşmamız gerekecek. Son olarak ayarlamamız gereken iki tane de parametre bulunuyor. Bu parametrelerden ilki XAP dosyası yüklenmeden önce ve yüklenirken gösterilecek olan XAML dosyamızın tam yolu olacak. splashscreensource adındaki bu parametreye biz örneğimizde basit bir şekilde Scene1.xaml değerini verdik. Bu dosya içerisinde bir önceki adımda yazdığımız ve içerisinde Progress Rectangle'ının bulunduğu XAML yer alıyor. Son olarak onSourceDownloadProgressChanged event'ına da yine aynı isimde bir JavaScript event-listener ekleyerek XAP dosyasının download durumu ile ilgili değişiklikleri takip edebiliyoruz. Gelelim yazacağımız bu JavaScript event-listener koduna...

Biraz da JavaScript...

Bir önceki adımda hazırladığımız OBJECT tagının parametrelerinden birinde onSourceDownloadProgressChanged adında bir event-listener tanımlamıştık. Bu event-listener içerisinde ilk olarak sayfamızdaki OBJECT tagını ve içerisindeki Silverlight uygulamamızı bulmamız gerekiyor. Bu yapı Silverlight 1.0 günlerinden hatırladığımız bir yapı. Aşağıdaki kodumuzda SL adını verdiğimiz OBJECT taglarını bulduktan sonra içeriğine bakarak findName ile Progress adındaki Rectangle'ımızı bulmuş olduk.

[JavaScript]

        function onSourceDownloadProgressChanged(sender, eventArgs) {

            var Progress = document.getElementById("SL").content.findName("Progress");

            if (eventArgs.progress)

                Progress.Width = eventArgs.progress * 100;

            else

                Progress.Width = eventArgs.get_progress() * 100;

        }

Son olarak söz konusu Rectangle'ın genişliğini elimizdeki yükleme durumuna göre değiştireceğiz. Yükleme durumunu bize 1 üzerinden decimal olarak verecek olan şey tarayıcı tipine göre ya bir Property ya da bir metod olacağı için bir IF kontrolü ile onu de kontrol ederek gerekli işlemi yapıyoruz.

Artık Silverlight Runtime ile beraber gelen ön yükleme animasyonlarından kurtulabilir ve kendi özgür iradeniz ile :) kendi tasarımlarınızı kullanabilirsiniz.

Hepinize kolay gelsin.

Wednesday, February 25, 2009 12:53:01 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight 2.0  | 
 Sunday, February 22, 2009

Son iki gündür sevgili Uğur Umutluoğlu ile Ankara, Bilkent Üniversitesi'ndeyiz. Toplam iki gün süren ve 6 oturumdan oluşan bir seri ile birçok konuya değindik. WPF, WCF, LINQ, C# 3.0, Silverlight, ASP.NET 3.5 SP1 başlıklarına sahip oturumların hepsinde de muhteşem ilgili bir kitle bulunduğunu itiraf etmeliyiz.

Bilkent Üniversitesi, Ankara, Silverlight Oturumum
Bilkent Üniversitesi, Ankara, Silverlight Oturumum

Oturumlarımızdan birini de LAB çalışması olarak gerçekleştirdik ve Silverlight seminerinde öğrendiklerimizi Silverlight ile bir oyun geliştirerek pekiştirdik. LAB çalışması benim neredeyse etkinlik içerisinde en sevdiğim bölüm oldu. "Üretmenin" zevkini herkesin gözlerinde gördüm.

Silverlight Lab Çalışması
Silverlight Lab Çalışması

Buradan teşekkür etmem gereken o kadar çok kişi var ki :) Sevgili MSP'lerimiz Ali Uğur Çakmak, Alper Özçetin'a çok teşekkürler. Ayrıca BTS ve ACM'deki herkese teşekkürler. Süper bir hafta sonu geçirdim, "dayının yeri"ni hala unutamıyorum :)

Sunday, February 22, 2009 10:29:12 PM (GTB Standard Time, UTC+02:00)  #    Comments [6]   ASP.NET 3.5 | LINQ | Silverlight 2.0 | WCF | WPF  | 
 Friday, February 20, 2009

Bugün Kocaeli Üniversitesi'ndeki yazgelistir.com seminer serisinin ikincisini gerçekleştirdik. Sevgili Burak Batur ile beraber SharePoint ve Silverlight oturumlarımızla katılımcılara ilginç duygular yaşattığımızdan eminim :) Silverlight'ı görünce şaşıranlardan tutun SharePoint'i görünce "Ne gerek var ASP.NET öğrenmeye" :) diyenlere kadar ilginç bir manzara içerisinde bitirdik seminerlerimizi diyebilirim.

Kocaeli Üniversitesi, Silverlight Oturumum
Kocaeli Üniversitesi, Silverlight Oturumum

Tüm katılan arkadaşlar ve MSP'miz Gökhan Gülbiz'e buradan çok teşekkürler. Ayrıca organizasyonda emeği geçen tüm genç kardeşlerimi de buradan kutluyorum. Çok başarılı bir iş çıkardınız ;) Umarım başka bir zamana daha uzun oturumlar ile daha da detaylara girebiliriz.

Friday, February 20, 2009 10:02:58 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]   Silverlight 2.0  | 
 Wednesday, February 18, 2009

Bugün Silverlight 2.0 Runtime için yeni bir update çıktı. İstemci tarafında Silverlight Runtime kendini otomatik olarak update edecek şekilde ayarlı geldiği için çoğu kullanıcı bu değişikliği fark etmeyecektir fakat özellikle Developer tarafındaki Runtime'ın farklı olduğunu düşünürsek bu konuya dikkat etmenizde fayda var.

Silverlight 2.0 Developer Runtime (2.0.40115.0)

Gelen update ile beraber sadece bazı buglar kapatıldığı için yukarıdaki yükleme haricinde Visual Studio için herhangi bir ek yükleme vs yapmanız gerekmiyor.

Wednesday, February 18, 2009 10:26:38 PM (GTB Standard Time, UTC+02:00)  #    Comments [7]   Silverlight 2.0  | 
 Tuesday, February 17, 2009

Son iki aydır duyurmaya fırsat bulamadığım bir haberi sizlerle paylaşmak istiyorum. Ocak 2009 başlangıcı ile karşınızda bir Microsoft Regional Director olarak bulunuyorum. Akla onlarca soru geldiğinden eminim o nedenle hem soruları cevaplayalım hem de ne nedir konusuna açıklık getirelim.

Regional Director nedir?

İlk aşamada sizi Microsoft sitesinden yaptığım bir çeviri ile baş başa bırakıyorum;

"Microsoft Regional Director'lar bağımsız yazılım geliştiriciler ve yazılım mimarlarıdır. Tamamen gönüllü olarak teknoloji topluluklarına liderlik yapan ve ana amaçları yazılım geliştirici topluluklar ile Microsoft teknolojileri üzerine bilgi paylaşımı olan uzmanlar aynı zamanda Microsoft'a da geri dönüş sağlarlar. Regional Director'lar Microsoft çalışanları değil, sektörde yer alan ve müşterilerine yardımcı olmak için Microsoft ürünlerini seçen kişilerdir."

Daha akıllara birçok soru geleceğini tahmin ettiğim için birkaç bilgi de ben kişisel olarak aktarmak istiyorum. Regional Director programı çerçevesinde şu an dünyada 117 RD bulunuyor. Türkiye'de benimle beraber üç RD olduk, sevgili Atakan Kesler, Selçuk Uzun çoğunuzun tanıdığı isimler. RD programının detaylarından bahsederken aslında MVP programı ile karşılaştırarak da ilerleyebiliriz çünkü eminim ki çoğunuz zaten MVP programını çok net biliyor ve aradaki farkları merak ediyor.

MVP ve RD farkı nedir?

  • İlk olarak MVP programı RD programından daha geniş çaplıdır. RD programı sadece Developer tarafına hitap ederken MVP programında Office uygulamalarından ITPro tarafına kadar çok farklı uzmanlıklar görebilirsiniz.
  • Genel olarak MVP'ler bire bir ilişkilerde destekleri ile öne çıkarken RD'ler kurumsal alandaki destekleri ile var olurlar.
  • MVP ünvanı bir önceki senede yapılan çalışmalar için kişilere verilir ve MVP olan uzmandan Microsoft'un bir beklentisi yoktur. RD'lerin ünvanları taşıyabilmek için yerine getirmeleri gereken sorumlulukları vardır. Örneğin aylık raporlamalar.

RD'leri tanımlarken aslında Microsoft içerisinde çalışan Developer Evangelist'lere benzetebiliriz. Yeni teknolojilerin yaygınlaşmasını sağlarken sektörden bağımsız uzmanlar olmanın avantajlarını da kullanan RD'ler yeri geldiğinde yazılım geliştiricilerin tepkilerini de olumsuz geri dönüşleri de dile getirebilir ve Microsoft tarafına iletebilirler. Tabi bu avantaj bir anlamda Microsoft çalışanı olmamanın bir avantajı da diyebiliriz fakat bu durum da zaten RD programının hedefi ve en büyük işlevlerinden biri. Son olarak RD ve MVP programları birbirinden bağımsızdır ve aynı anda hem RD hem MVP olunabilir.

RD'ler bu çalışmaları karşılığında ne alırlar?

RD'ler Microsoft çalışanı olmadıkları için herhangi bir ücret, maaş vs almazlar. Zaten çoğu hali hazırda RD olmasa da yaptıklarını yapmaya devam edecek insanlardır. Fakat tabi ki RD olmanın avantajları da var. MVP programında da olduğu gibi ücretsiz MSDN üyeliği, ayrıca uluslararası Microsoft konferanslarına ücretsiz giriş ve en önemlisi Microsoft teknolojileri ile ilgili detaylı erken bilgi alımı ve ürün grupları ile yakın temas.

Peki bizim ne işimize yarar?

Gelelim esas konuya. Sonuç olarak blogumu okuyorsanız eminim ki sizi ilgilendiren kısım "Tamam da bu RD olayı şimdi bizim ne işimize yaradı" kısmıdır :) MVP'ler ile RD'ler arasında farktan bahsederken ufak bir ip ucu vermiştim aslında. RD'lerin aynı MVP'lerin bireysel anlamda yazılımcılara yardımcı olduğu gibi kurumsal alanda kurumlara yardımcı olma misyonu vardır. İster bir sosyal topluluk olun ister bir kurum herhangi bir RD'yi uzmanlık alanlarından birinde konuşmak üzere şirketinize davet edebilirsiniz. RD'lerin varlığının anlamı zaten budur. Şirketinizin doğru teknolojiyi seçmesi ve yeni teknolojilerden haberdar olabilmesi adına size gönüllü olarak yardımcı olabilecek melekler olarak görebilirsiniz RD'leri :) Tabi unutmayalım ki konumuz yazılım geliştirme araçları ve teknolojileridir.

Kendi adıma sevinçli bir haberi paylaşiyim derken açıklamalarla dolu uzun bir yazı yazdım. Yine de aklınızda sorular olursa yorum olarak bu yazıya bırakabilirsiniz.

Sevgilerle...

Tuesday, February 17, 2009 2:54:28 AM (GTB Standard Time, UTC+02:00)  #    Comments [27]    | 
 Monday, February 16, 2009

Bundan tam iki ay önce sizlere blogumdan minik bir duyuru yapmıştım. Söz konusu duyuruda Live Groups üzerinden açtığım bir mail grubu tanıtmıştım. Geçen iki ay içerisinde mail gruba 120 üye kayıt oldu ve bu süreçte hiç fena sayılmayacak bir paylaşım ortamı yarattık. Bazen geyik yaptık bazen teknik konularda hep beraber çözüm aradık. Benim için önemli olan şey aslında gelen sorulara verdiğim cevapları alan dostların aynı cevapları gruba yeni katılanlara da aktarabilmeleriydi. Böylece sürekli benden yola çıkan bir paylaşım ağındansa daha iç içe bir ağ oluşturup paylaşımın çok taraflı olarak ilerlemesini sağladık. Bu zamana kadar bu ortama katkısı olan herkese çok teşekkürler.

Tabi ki tüm bu süreçte itiraf etmem gerekiyor ki blogdan çok daha etkileşimli bir ortamın getirdiği avantajla bir an kendimizi özel bir topluluk gibi hissetmeye başladık :) ben bazı duyurularımı anlık olan ancak mail gruptan geçebildim ve hatta bazılarını da sadece mail gruba gönderdim :) Bazı duyuruları ise blogdan önce mail gruba yazdım :) vs... Tüm bu süreç devam ederken kendimizi bir mail grup buluşması içerisinde bulduk! :)

Birinci Geleneksel Mail Grup Buluşması - High Definition İskender
Birinci Geleneksel Mail Grup Buluşması - High Definition İskender

Gözlerinize inanabilirsiniz :) Oniki kişilik bir ekip olarak İstanbul'da toplanmayı başardık ve tabi ki hemen İskender yemeye yöneldik :) High Definition İskender'lerimizi yemeden önce restoran girişindeki arkadaşın "Dört kişi misiniz?" sorusunu cevaplamama gerek kalmadan görevli durumu algılayıp :) hemen masa organizasyonuna girişti. Sonrasında bir de çay sefası yaptık mecburen :) Tüm bu organizasyonu sadece İskender yemek için yaptık sanıyorsanız aldanıyorsunuz :)

Mail Grup Recep İvedik 2 izler :)
Mail Grup Recep İvedik 2 izler :)

Bir sonraki adımda yaklaşık 3 gün önceden ayırttığımız biletler ile Recek İvedik 2'yi ilk izleyenlerden olduk. Özellikle ikinci seansın başarılı olduğunu itiraf edebilirim. Hele o sandık :) Neyse, daha fazla spoiler vermiyim buradan fakat hoş, izlenesi, sanatsal açıdan çerez bir film olmuş diyebilirim. Sonuç olarak hepimiz bolca gülerek yediğimiz iskenderleri erittik diyebilirim.

Şimdi eminim ki aranızdan bazıları "Neden blogdan duyurmadınız?" diyecek :) Adı üzerinde, Mail Grup Buluşması. Eğer isterseniz siz de mail gruba buradan katılabilirsiniz. Fakat unutmayın ki bu gibi buluşmaları amaçlayan bir grup değiliz :) Amacımız teknik bilgi paylaşımı. O nedenle kayıt olup sonra da günde gelen onlarca mailden sıkılırsanız ben karışmam ;)

Hepinize başarılı yepyeni bir çalışma haftası dilerim ;)

Monday, February 16, 2009 1:09:47 AM (GTB Standard Time, UTC+02:00)  #    Comments [3]    | 
 Sunday, February 08, 2009

Haber aslında açık ve net :) TRT'nin tüm televizyon ve radyo kanalları Silverlight ile yayında. Hali hazırda uzun süredir Windows Media Services ile yayın yapan TRT arayüz olarak MediaPlayer'a bağımlı iken artık Silverlight ile çok daha hareketli ve zengin bir kullanıcı deneyimi sağlayabiliyor. Diğer yandan ASP.NET tarafında yazılım geliştiren bir ekip için Silverlight tarafına geçiş de bir o kadar kolay oluyor tabi ki.

Daha fazla konuşmayarak yorumu sizlere bırakıyorum ;)

www.trt.com.tr sayfasında üst köşedeki "Canlı Yayın" linkine tıklamanız yeterli!

Sunday, February 08, 2009 2:47:38 AM (GTB Standard Time, UTC+02:00)  #    Comments [21]   Silverlight 2.0  | 
 Friday, February 06, 2009

Her zaman söylerim; web yazılım dünyası "grafik tasarım yapmak zorunda kalan yazılımcıların" kurbanı oluyor :) Kimseyi suçlamıyorum çünkü çok açık ve net bir şekilde aslında hiçbir yazılımcının grafik tasarım da yapmak zorunda kalmaktan memnun olmadığını biliyorum. Özetle kimse isteyerek yapmıyor. Bazen de yazılımcının bu işi üstlenmemesi veya proje gereği böyle bir "grafik tasarım" ihtiyacı yokmuş gibi davranılması sonucu bu sefer de ortaya çıkan ürün gerekli değeri görmeyebiliyor. Örnek mi istiyorsunuz? :)

Bir yazılımcıdan arayüz tasarımı!
Bir yazılımcıdan arayüz tasarımı!

Yukarıda görmekte olduğunuz program bir MultiPoint Paint yazılımı. Yani özetle bir bilgisayara birden çok fare bağlayarak birden çok kişinin aynı anda çizim yapabilmesini sağlıyor. Özellikle İlköğretim seviyesinde öğrenci başına bir bilgisayar düşmediğini düşünürsek güzel bir alternatif olabilir. MultiPoint programlama ile ilgili blogumda gerekli makaleleri bulabilirsiniz.

Neyse konumuza dönelim. Gördüğünüz üzere yazılımın işlevsellik anlamında bir sorunu yok. Her şey açık ve net. Değil mi? Peki aynı yazılımı bir de bir grafik tasarımcının elinden geçtikten sonra inceleyelim ne dersiniz?

Bir grafik tasarımcının arayüz tasarımı...
Bir grafik tasarımcının arayüz tasarımı...

Nereden nereye? Değil mi? Gerçekten arada büyük fark var. Aslına bakarsanız yukarıdaki yazılım ile aşağıdaki arasında işlevsellik veya kod açısından hiçbir fark yok! Bahsini ettiğimiz yazılım bir WPF uygulaması ve tasarımı Expression Design ile yapıldıktan sonra hali hazırda programlanmış olan WPF uygulamasına tasarımın aktarılması yeterli oldu. Bu süreçte arka planda yazılımcının yazmış olduğu hiçbir kod değiştirilmedi!

Demek ki neymiş? Görsel tasarım gerçekten çok önemli. Görsel tasarım, Kullanıcı deneyimi tasarımı ve programlama konuları bir projede topluca düşünülmesi gereken konular ve maalesef ki bu konuların ayrı uzmanlar tarafından değerlendirilmesi de şart!

İsterseniz yukarıdaki projeye geri dönelim ve süreci nasıl işledi biraz da ondan bahsediyim. İlk olarak ilk görselde gördüğünüz yazılım bir yazılımcı tarafından kodlanıyor ve arayüz görüldüğü üzere rezalet. Sonrasında tasarımcı bu rezalet arayüz için Expression Design ile alternatif bir tasarım hazırlıyor. Bir sonraki adımda ise hem programlama tarafına hem de kullanıcı deneyimi tarafına hakim bir başka uzman hazırlanan görsel tasarımı yazılıma uyguluyor! Bu uygulayan kişi ise Expression Blend kullanarak eldeki hazır programlanmış projeyi açarak tasarım öğelerini düzenliyor. Sonuçta ortaya süper bir yazılım çıkıyor diyebiliriz.

Sizlerin de elinde bu gibi karşılaştırmalı örnekler varsa lütfen yorumlarda paylaşın ;)  

Friday, February 06, 2009 4:55:28 PM (GTB Standard Time, UTC+02:00)  #    Comments [5]   Silverlight 2.0 | WPF  | 
 Thursday, February 05, 2009

Yarışmayı kazananları büyük bir sürpriz bekliyor! Sanırım bir yazıya böyle başlamak epey garip olsa gerek fakat maalesef şu anda sürpriz olduğu için sizlerle paylaşamayacağım fakat yarışmanın birincisini bekleyen süper bir sürpriz var! Peki nedir Mobil-Star? Hemen aşağıdaki adresten web sitesini ziyaret ederek inceleyebilirsiniz.

www.mobil-star.net

Siteyi tamamen Silverlight 2.0 ile yaptığımızı özellikle belirtmek isterim :) Hepiniz iyi şanslar ;) Bakalım Star siz misiniz?

Thursday, February 05, 2009 4:38:13 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight 2.0  | 
 Wednesday, February 04, 2009

Internet Explorer 8 ile ilgili sanırım bugüne kadar 10'a yakın seminer verdim ve bu seminerlerin hepsinde de doğal olarak "Ne anlatacak ki bu adam?" soru işareti ile şaşkın gözlerle bana bakan yazılım geliştiricileri daha da şaşkın bir şekilde seminerin sonunda azat ettim diye tahmin ediyorum :). Aslında bu çok doğal bir süreç çünkü maalesef ki Internet Explorer'dan beklentilerimiz ürünün geçmişinden dolayı çok düşük ve gerçek anlamda işimizi kolaylaştırabilecek, değer katabilecek neler olabilir dediğimizde aklımıza pek bir şey gelmiyor.

Bundan önceki dönemde ben IE 8 ile gelen yeniliklerle ilgili yazdığım makalelerin linklerini sizinle tekrar paylaşmak istiyorum. Çünkü emin olun IE8'in son sürümü ile karşı karşıya kalmamıza çok az kaldı.

IE8'de Offline ve Online Çalışma Modları
Internet Explorer 8.0 için Accelerator nasıl hazırlanır?
Internet Explorer 8.0 için Search Provider ve Search Suggestions sistemlerini hazırlamak.
Internet Explorer 8.0 için Web Slice hazırlayalım.
Internet Explorer 8.0 ve dahili JSON işlemleri
Internet Explorer 8.0 ile beraber gelen Developer Tools'u inceleyelim.
Internet Explorer 8.0 ile beraber "Compatibility View" ve web sitelerinin uyumluluk ayarları.
Internet Explorer 8.0 Beta 2 ile gelen güvenlik yenilikleri

IE8 ile beraber gelen en güzel özelliklerden biri Web Slice yapıları. Ben bu yapıların çok popüler bir şekilde kullanılacağından ve site yayıncıları için de çok güzel avantajlar getireceğinden eminim. Geçen hafta içerisinde TRT.NET.TR ekibi ile görüşme şansım oldu ve heyecanlarına hayran kaldım. Çok yakında başka haberlerim de olacak sizlere ;) Şimdilik TRT'nin resmi ana sayfasında ve iç sayfalarda Web Slice desteğinin verilmeye başlandığını müjdeleyebilirim. Artık isterseniz TRT'nin haberlerini hiç sitelerine girmeden IE 8 içerisinden birer Web Slice olarak takip edebiliyorsunuz!

Buyurun buradan bir inceleyin ;) http://www.trt.net.tr/ 

Wednesday, February 04, 2009 4:32:27 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   IE 8.0  | 
 Tuesday, February 03, 2009

Silverlight projeleriniz büyüdükçe projenin bazı bölümlerini sonradan istemci tarafına aktarmayı daha uygun bir seçenek olarak görebilirsiniz. Bu gibi durumlarda acaba ayrı bir XAP dosyası yapsak da onu haricen istemciye yüklesek diye düşünürseniz maalesef söz konusu XAP dosyasını kendi kodlarınız ile ZIP şeklinde açmanız ve içerisindeki Manifest.xml'i yine kendi kodunuz ile okuyup tek tek DLL'leri yüklemeniz gerekecektir. Bu konuda detaylı bir makaleye buradan ulaşabilirsiniz.

Bu zorluklarla uğraşmadan hızlı bir şekilde belki de sadece bir UserControl'ü haricen sonradan yüklemek istiyorsanız aslında çok daha pratik ve hızlı bir yöntem de kullanılabilir. Bu yönteme sadece UserControl'ler değil harici olarak yazılan sınıflar da dahil. Gelin daha fazla teorik konuşma yerine bir örnek üzerinden ilerleyelim.

Haricen yüklenecek içeriği hazırlayalım....

İlk olarak ana Silverlight uygulamamıza sonradan yüklenecek olan içeriği hazırlayalım. Bunun için Visual Studio içerisinde "File / New Project" dedikten sonra "Silverlight" seçeneği altındaki "Silverlight Class Library" proje tipini seçiyoruz. Bu proje tipinde doğrudan tüm proje içeriği bir DLL içerisine konacak fakat bu DLL ayrıca bir XAP dosyası içerisinde sıkıştırılmayacak. Böylece biz de Silverlight ile istemci tarafında bir XAP dosyası açmak veya Manifest ile uğraşmak zorunda kalmayacağız.

Normal şartlarda Silverlight Class Library projesi yarattığınızda proje içerisinde sadece bir CS veya VB dosyası görebilirsiniz. Oysa bu projelere de isterseniz XAML dosyaları ile beraber UserControl'ler eklenebilir. Projenize sağ tuş tıklayarak Solution Explorer içerisinden "Add New Item" demeniz ve gelen seçeneklerden de "Silverlight User Control"ü seçmeniz yeterli olacaktır. Artık isterseniz bu projeyi Blend içerisinde de açıp normal bir Silverlight projesindeki gibi animasyonlar vs kullanabilirsiniz.

Örnek olarak projemize bir resim dosyası ekleyerek UserControl'ümüz içerisinde de onu gösterebilir. Unutmayın ki resim dosyasını projeye "Add Existing Item" diyerek eklerseniz artık bu resim de DLL'inizin içerisine dahil edilecektir.

[XAML]

<UserControl x:Class="SilverlightClassLibrary1.SilverlightControl1"

   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">

        <Image Margin="71,47,97,122" Source="Forest.jpg"/>

    </Grid>

</UserControl>

Yukarıdaki şekli ile UserControl'ümüz hazır olduktan sonra projemizi Build ederek DLL'imizi yaratmış oluyoruz. Bu DLL'i bir sonraki adımda yaratacağımız Silverlight projesinin XAP dosyası ile aynı konuma koyabilirsiniz. Silverlight projemiz içerisinden bu DLL'i istemciye asenkron olarak download ederek sahneye DLL içerisindeki UserControl'ü yükleyeceğiz.

Gelelim Silverlight projemize...

Tertemiz bir Silverlight projesi yarattıktan sonra proje ile beraber gelen ASP.NET sitesi içerisinde ClientBin klasörüne bir önceki adımda yarattığımız DLL dosyasını kopyalayalım. Böylece projeyi Build ettiğimiz aynı konuma otomatik olarak kopyalanacak olan XAP dosyası üzerinden DLL'e de rahatlıkla ulaşabiliriz.

Yeni Silverlight projemizin ana Page.XAML dosyasına bir Button ve bir de Canvas ekleyelim. Böylece düğmeye basıldığında harici DLL'i yükleyecek ve DLL içerisindeki UserControl'ümüzü de Canvas içerisine yerleştireceğiz.

[XAML]

<UserControl x:Class="SilverlightApplication5.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">

        <Button x:Name="btnTikla" Height="19" HorizontalAlignment="Right" Margin="0,0,18,17" VerticalAlignment="Bottom" Width="89" Content="Button"/>

        <Canvas x:Name="Icerik" Margin="13,13,18,54"/>

    </Grid>

</UserControl>

Düğmeye tıklandığı anda hemen bir WebClient yaratarak download işlemimizi başlatalım.

[VB]

Private BirAssembly As System.Reflection.Assembly

 

Public Sub New()

    InitializeComponent()

    AddHandler Me.btnTikla.Click, AddressOf btnTikla_Click

End Sub

 

Private Sub btnTikla_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)

    Dim Yukleyici As New WebClient()

    AddHandler Yukleyici.OpenReadCompleted, AddressOf Yukleyici_OpenReadCompleted

    Dim Yol As String = System.Windows.Application.Current.Host.Source.AbsoluteUri.Replace("SilverlightApplication5.xap", "SilverlightClassLibrary1.dll")

    Yukleyici.OpenReadAsync(New Uri(Yol, UriKind.Absolute))

End Sub

[C#]

        System.Reflection.Assembly BirAssembly;

 

        public Page()

        {

            InitializeComponent();

            this.btnTikla.Click += new RoutedEventHandler(btnTikla_Click);

        }

 

        void btnTikla_Click(object sender, RoutedEventArgs e)

        {

            WebClient Yukleyici = new WebClient();

            Yukleyici.OpenReadCompleted += new OpenReadCompletedEventHandler(Yukleyici_OpenReadCompleted);

            string Yol = System.Windows.Application.Current.Host.Source.AbsoluteUri.Replace("SilverlightApplication5.xap", "SilverlightClassLibrary1.dll");

            Yukleyici.OpenReadAsync(new Uri(Yol, UriKind.Absolute));

        }

Yukarıdaki kodu dikkatli incelemek gerekirse ilk adımda en üstteki Assembly tipindeki BirAssembly adındaki değişkenimizi açıklamak gerekecek. Kodumuz sunucudan bir DLL indirecek ve içindeki UserControl'ü sahneye koyacak. Aslında DLL'i indirdikten sonra içerisinden UserControl1 sınıfından bir instance alarak sahneye koyacağız. Eğer bu işlemi yaptıktan sonra başka instance'lara da ihtiyacımız olursa tekrar DLL'i indirmemek için eldeki Assembly'yi bir değişken olarak tutmak daha mantıklı olacaktır. O nedenle en üstteki BirAssembly değişkenimiz şimdiden yerini almış durumda.

Button'umuzun Click koduna baktığımızda bir WebClient yarattığımızı ve OpenReadCompleted event listener'ını da başka bir koda bağladığımızı görebilirsiniz. Sunucudan bir dosya indireceği ve indirme işlemi bittiğinde de başka işler yapacağız. O nedenle bu event'ları yakalayabiliyor olmak çok önemli. İsteyenler WebClient'ın DownloadProgressChanged event'ını da yakalayarak download durumu ile ilgili yüzde üzerinden ne kadarının indirildiğine dair bilgileri de ekranda gösterebilirler.

Sunucudan indireceğimiz dosyanın tam yolunu verebilmek için şu anki XAP dosyasının tam yolunu alıp sadece dosya adını değiştiriyoruz. Bizim örneğimizde saten her şeyin yeri ve dosya adları belli olduğu için herhangi bir sorun olmayacaktır.

Son olarak OpenReadAsync metoduna da indirilecek olan dosyanın yolunu verip download işlemini başlatıyoruz. Peki ya bu işler bitince çalışacak olan Yukleyici_OpenReadCompleted metodunda neler yapacağız?

[VB]

Private Sub Yukleyici_OpenReadCompleted(ByVal sender As Object, ByVal e As OpenReadCompletedEventArgs)

    Dim GelenAssembly As New AssemblyPart()

    BirAssembly = GelenAssembly.Load(e.Result)

    Dim Kontrol As UserControl = DirectCast(BirAssembly.CreateInstance("SilverlightClassLibrary1.SilverlightControl1"), UserControl)

    Me.Icerik.Children.Add(Kontrol)

End Sub

[C#]

            AssemblyPart GelenAssembly = new AssemblyPart();

            BirAssembly = GelenAssembly.Load(e.Result);

            UserControl Kontrol = (UserControl)BirAssembly.CreateInstance("SilverlightClassLibrary1.SilverlightControl1");

            this.Icerik.Children.Add(Kontrol);

Download işlemi bittiği anda bir AssemblyPart değişkeni yaratarak onun da Load metodunu kullanıyoruz. Load metoduna e.result ile aslında Yukleyici_OpenReadCompleted event-listener'ına gelen argüman üzerindeki datayı almış oluyoruz. Yani özünde sunucudan indirdiğimiz DLL'in Stream'i e.result içerisinde saklanıyor ve biz de bu AssemblyStream'i doğrudan bir AssemblyPart üzerinden Load ederek Assembly tipindeki BirAssembly değişkenimize yüklüyoruz. Hatırlarsanız zaten bu değişkenimiz de global anlamda sürekli hafızada tuttuğumuz bir değişkendi. Bir sonraki adımda bir UserControl değişkeni tanımlayarak bunu da Assembly'miz içerisinde SilverlightControl1'e eşitlememiz gerekiyor.

Assembly üzerinden CreateInstance metodu bizden yaratılacak nesnenin TypeName'ini istiyor. Silverlight Class Library projesinin içerisindeki UserControlümüzün tipinin adını full path olarak veriyoruz. Bunu zaten UserControl'ün XAML dosyasının en üstünden de bulabilirsiniz. Artık elimizdeki Kontrol değişkeni yine elimizdeki BirAssembly'nin içerisinden SilverlightControl1'in bir instance'ıdır. Herhangi bir UserControl gibi bu da alıp sahnede istediğimiz yere yerleştirebiliriz.

Hepinize kolay gelsin.

Tuesday, February 03, 2009 3:57:55 PM (GTB Standard Time, UTC+02:00)  #    Comments [4]   Silverlight 2.0  | 
 Sunday, February 01, 2009

Bloğun son dönemde teknik yazılardan iyice mahrum kaldığının farkındayım. Size söz en kısa vadede bu durumu düzelteceğim ama kendimi tutamıyorum ve bu kısa yazı ile bile olsa Dertli Kerem'in kardeşine bir link vermek istiyorum :)

http://www.oguzyagmur.com/PermaLink,guid,651575ac-3df5-4b39-af91-9fd5e892828a.aspx

Oğuz'un yazdığı yazının altına imzamı atıyorum, umarım bana kızmaz :)

Sunday, February 01, 2009 2:07:50 AM (GTB Standard Time, UTC+02:00)  #    Comments [6]   Dertli Kerem  | 
Copyright © 2010 Daron Yöndem. Tüm hakları saklıdır.