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

Veeee yılbaşı geldi :) Yeni bir yıl yeni heyecanlar ve tabi eskitilen bir yıl ve yaşananlar. Neyse geyiği bırakıp konuya dönelim :) Malumunuz yeni yıl gelirken hemen bir E-Kart savaşı başlar :) Herkes birbirine milyonlarca kutlama mesajı gönderir ve bu mesajların içerisinde de E-kartların yeri büyüktür. Ben de bir kaç dakika ayırarak sizler için ufak bir Silverlight 2.0 E-Kart hazırladım.

E-kart'ın kaynak kodlarını da aşağıdaki adresten bilgisayarınıza indirebilirsiniz. Bu vesile ile bloğumu okuyan herkesin yeni yılını da kutluyorum.

E-Kart Kaynak Kodları - 31122008_1.rar (1,83 MB)

Wednesday, December 31, 2008 9:30:28 PM (GTB Standard Time, UTC+02:00)  #    Comments [12]   Silverlight 2.0  | 
 Tuesday, December 30, 2008

WPF veya Silverlight projelerinde Inıt durumu ile PageLoad veya WindowLoad event'ları arasındaki fark bazen ilk bakışta yokmuş gibi varsayılarak kodların doğrudan Init kısmına yazıldığını çok gördüm. Bazen bu durum sorun çıkarmasa da aslında tam olarak Init durumu bitmediği için bazı kaynaklara veya kontrollere ulaşmama hatta bu ulaşıp / ulaşmama durumunun da belli olmaması :) gibi garip hatalar ile karşılaşabilirsiniz. O nedenle benim genel tavsiyem sürekli Loaded event'larının kullanılması ve Init'in sadece ek event-listener tanımlamalarının yapılacağı bir konum olarak saklanması.

Bu çerçevede bir diğer sorun ise Init durumuna yazdığınız kodların aslında hem Blend hem de Visual Studio tarafından Design modundayken çalıştırılıyor olması. Eğer bu bilgiye sahip değilseniz maalesef ki Init durumunda yaptığınız ağır bir işlemin bir anda Visual Studio ve Blend'in arayüzüne de binmesi ve Page.XAML gibi bir dosyayı açtığınız anda yüksek işlemci kullanımları ile karşılaşmanız olası. En basit çözüm bu kodları Init'den çıkarmak ve Loaded'a yerleştirmek olabilir fakat ya Init'i kesinlikle kullanmanız gerekiyorsa?

[C#]

            if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this) == false)

            {

 

            }

İşte yukarıdaki gibi bir kontrol ile söz konusu Init kodunun içinde uygulamanın DesignMode'da olup olmadığını kontrol edebilirsiniz. Böylece eğer sayfa Visual Studio veya Blend ile Design modunda açılmış ise bu IF içerisinde kodlar çalıştırılmayacak. Oysa programı F5 ile compile edip çalıştırdığınızda ise herhangi bir sorun ile karşılaşamaycaksınız.

Hepinize kolay gelsin.

Tuesday, December 30, 2008 9:18:36 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Expression Blend | Silverlight 2.0 | Visual Studio 2008 | WPF  | 
 Monday, December 29, 2008

Bu aralar birçok yazıma "gelen maillerde de sürekli istediğiniz gibi" şeklinde cümlelerle başladığımı görünce aslında bir süredir sizden gelen istekleri yerine getirmekle uğraştığımın farkına vardım :) İşte bu yazımda da böyle bir konu söz konusu. Bana gelen maillerde benden AJAX anlatmamı isteyenler oluyor ve neden ajax semineri vermediğimi soranların sayısı epey fazla. Aslında tam olarak kesin bir cevabı yok bu sorunun. Sanırım AJAX kelimesinin pazarlama anlamında tükettiğimiz içindir! Bu tüketimin sonucunda o kadar çok "AJAX AJAX" denilen dönemler yaşadık ki sanki herkes AJAX'ı yuttu ve biliyor gibi bir izlenim oluştu ki bu tamamen YANLIŞ!

Maalesef kimse AJAX falan bilmiyor! UpdatePanel kullanmanın bile herşeyiyle bilinmediğini iddia edebilirim ki UpdatePanel'in AJAX dünyasında yeri cidden komiktir. O nedenle ben de bir süre önce bir AJAX seminer ayarladım ve semineri videoya kaydettim. Şimdi sizinle bu video yu paylaşıyorum.

Video tabi ki giriş seviyesi, daha anlatmak istediğim çok şey var. Umarım bir gün İleri AJAX semineri verme şansım da olur, böylece onun da videosunu buradan sizinle paylaşırım.

Yukarıdaki videoyu bilgisayarına indirmek isteyenler blogumun SeminerTV bölümünden bunu yapabilirler ;)

İyi seyirler...

Monday, December 29, 2008 9:01:32 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]   AJAX | ASP.NET 3.5  | 
 Sunday, December 28, 2008

Son iki gündür daha önce de sizlere duyurmuş olduğum Microsoft'un MSP Days etkinliğindeydim. Ankara, Çankaya Üniversitesi'nde düzenlenen etkinlikte Microsoft Student Partner unvanına sahip genç kardeşlerimiz teknik sunumlar yaptılar. Açıkçası "genç" olmalarının yanında ortalamanın çok üstünde bir performans sergilediklerini ve abilerine taş çıkartabilecek nitelikte bir içerik ürettiklerini söyleyebilirim. Şaşırmadım desem yalan olur :)

MSP Days'deki MultiPoint SDK sunumum.
MSP Days'deki MultiPoint SDK sunumum.

Benim de normal şartlarda Windows Azure anlatacağım MSP Days etkinliğinde ufak bir sorun yaşadığımız için konumu değiştirerek MultiPoint SDK üzerinden MultiPoint uygulama geliştirmeyi anlatmayı tercih ettim :) Özellikle sunumu ilginç bulan arkadaşlar oldu :) Aşağıda sizlerle de sunumumu paylaşıyorum.

MultiPoint SDK Sunumu - 28122008_2.pptx (3,48 MB)

Etkinlikteki başarılarından dolayı tüm MSP kardeşlerimi kutluyorum. Başarınız daimi olsun ;)

Sunday, December 28, 2008 4:01:55 AM (GTB Standard Time, UTC+02:00)  #    Comments [1]   MultiPoint SDK  | 
 Saturday, December 27, 2008

INETA tarafındaki aktiviteleri duyurdukça gelen yorumlar arasında sürekli "İzmir'e de gelin hocam" serzenişleri oluyor. Geliyoruz! :)

INETA EGE Hit karşınızda.
INETA EGE Hit karşınızda.

Programımız yoğun, her gün üç ayrı oturumumuz var. 10-11 Ocak hafta sonu Dokuz Eylül Üniversitesi Rektörlük Binası'nda DESEM Salonları'nda gerçekleştireceğim etkinliğe İzmir'den herkesi bekliyoruz. Sonra "Hocam gelmiyorsunuz" demeyin :)

Duyuruyu bloguna koymak isteyenlere bir de banner hazırladık ;) Haydi bakalım Ege ;)

INETA EGE HIT!

Saturday, December 27, 2008 2:07:39 AM (GTB Standard Time, UTC+02:00)  #    Comments [16]    | 
 Friday, December 26, 2008

Sonunda hazırlayabildim :) SilverNight'ta çektiğimiz videoların maalesef eğitim kısmını yayınlayamıyorum. Videolarda sunumdaki kodların hiçbiri sağlıklı bir şekilde gözükmüyor. En kısa zamanda başka bir seminerde bu konuyu telafi ederek eğitim kısmının da yayınlanmasını sağlayacağım.

Aşağıda izleyebileceğiniz video ise daha ağırlıklı olarak SilverNight'ın genelinden bahsediyor. Yolculuğumuza çıkışımızdan tutun, ekiplerin video portalını yaparkenki çalışma şekillerine ve SilverNight'ın sonundaki proje sunumları ile oylamaya kadar tüm adımları izleyebilirsiniz.

Uyarmadı demeyin, video 37 dakika sürüyor :)

Hepinize iyi seyirler ;) SilverNight katılımcılarından videoyu bilgisayarına indirmek isteyenler olursa buradan alabilirler.

Friday, December 26, 2008 3:14:43 PM (GTB Standard Time, UTC+02:00)  #    Comments [8]   Silverlight 2.0  | 
 Thursday, December 25, 2008

Bugün sabahtan Bursa Uludağ Üniversitesi'ndeydim. Hazır Microsoft'un Gençsen Geleceksin etkinliği için gitmişken üniversiteye biraz daha erken gidiyim ve arada bir de ASP.NET 3.5 AJAX semineri yapalım dedim. Yaklaşık sanırım 2.5 saat süren bir AJAX semineri sonrasında Gençsen Geleceksin kısmını da tamamlayarak Uludağ Üniversitesi'nden ayrıldım.

Uludağ Üniversitesi, Bursa
Uludağ Üniversitesi, Bursa

Aslında bu AJAX seminerini yapmamın özel bir nedeni var. AJAX biraz eskimiş bir terim olarak gözükse de işin gerçeği Türkiye'de AJAX'ı ve özellikle Microsoft'un AJAX Framework'ünün detaylarını bilen kişi sayısı hala ciddi şekilde kısıtlı. Herkes UpdatePanel'den ötesini bilmiyor. Bu derdime ek olarak bir de arada sırada aldığım "Hocam niye AJAX anlatmıyorsunuz?" maillerini de katarsak ortaya Uludağ Üniversitesi'ndeki AJAX seminerim çıktı. 2.5 saatte herşeyi anlatabildim diyemem, seminerin sonuna doğru bazı şeyleri hızlı geçmem gerekti ama en azından güzel bir giriş oldu. Tabi ki seminerin tamamını videoya da kaydettik ve yakında sizlerle blogumun SeminerTV bölümünden paylaşacağım. Böylece artık mail atmadan AJAX seminerimi webden izleyebileceksiniz.

Uludağ Üniversitesi'ndeki organizasyonlardaki katkısından dolayı özellikle sevgili Muhammed Medeni Baykal kardeşime buradan çok teşekkür ediyorum. Evet biliyorum daha organizasyona katkısı olan bir çok kardeşim var :) onları da buradan kucaklıyor ve çıkışta İskender yemeye gelmedikleri için kınıyorum :)

Thursday, December 25, 2008 3:25:22 AM (GTB Standard Time, UTC+02:00)  #    Comments [9]   AJAX | ASP.NET 3.5  | 
 Wednesday, December 24, 2008

Bugün KKTC Doğu Akdeniz Üniversitesi'nde Microsoft Oyun Turu'nun bir ayağını daha gerçekleştirdik. Sevgili XNA uzmanımız Engin Yıldız ile beraber günü birlik gittiğimiz için maalesef zamanımız biraz kısıtlı oldu ve konular iç içe geçti :) Fakat özünde eminim ki salondaki herkes hem Silverlight hem XNA ile oyun programlamanın kendisi için ne kadar kolay veya zor olduğunu anlayarak en azından bu sektöre atılıp atılmama konusunda karar verebilecek bilgiyi edindi.

KKTC Doğu Akdeniz Üniversitesi, Microsoft Oyun Turu
KKTC Doğu Akdeniz Üniversitesi, Microsoft Oyun Turu

Organizasyondaki katkılarından dolayı DAÜ Yazılım Kulübü'nde ve Yazılım Kulübü Başkanı Olcay Kük'e buradan çok teşekkür ediyorum. Süper bir misafirperverlik örneği gösterirdiler yine.

Wednesday, December 24, 2008 1:50:11 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight 2.0  | 
 Tuesday, December 23, 2008

Kendi kodumuzu hepimize kendimiz yazarız ve çoğu zaman da kafamıza göre yazarız. Oysa bir ekip içerisinde çalışırken ortak bir dil kullanmak gerekir. Hatta buna kurum bazında bakarsak daha da ileri giderek kurumların kendi kodlama standartlarını oluşturmalarında büyük fayda vardır. Böylece ekipler değiştiğinde, yazılımcılar gelip gittiğinde aynı projeler üzerinde çalışmaya devam etmek bir işkence olmaktan uzaklaşır.

Ben bu yazımda çok uçuk detaylara girmeyeceğim fakat genel geçer olarak kabul edebileceğimiz bazı kurallardan bahsederek daha kaliteli kod yazma konusunda bir katkı sağlamak ve belki de bu yazıyı okuyan öğrenci, free-lance programcıların yarın öbür gün bir şirkette kod yazmaya başladıklarında karşılaşabilecekleri sorunları az da olsa giderebilmeyi hedefliyorum.

VB ile kod yazmanın kuralların!

  • İç içe olanlar haricinden her class, struct, interface, enumeration ve delegate için ayrı dosyalar yaratarak kodları birbirinden ayrı tutun.
  • Option Explicit ve Option Strict'i açın. Project / Properties / Common Properties / Build altında bu ayarları bulabilirsiniz. Ayrıca isterseniz bu ayarları varsayılan ayarlar olarak da ayarlayabilirsiniz.
  • On Error Goto ve On Error Next komutlarını sakın kullanmayın. Adam gibi Try/Catch yazın.
  • Kodunuza yorumlar yazın ve önce yorumları yazıp sonra koda geçin.
  • Eksik kalan yerler varsa oralara yorumlar yerleştirerek yapılması gereken veya yazılması gereken kodun yapacağı işi tanımlayın.
  • Kodunuz içinde sayılar veya metinlere doğrudan yer vermeyin. Contsant değişkenler ve enumaration yapılarına alışın ve kullanın.
  • Lütfen artık metin birleştirme işlemlerini StringBuilder ile yapın!
  • Yarattığınız nesnelerin Dispose metodlarını çağırmayı unutmayın. Bunu rahatlıkla Try/Catch bloklarının Finally kısmında yapabilir veya söz konusu değişkenleri tanımlamak için Using deyimini kullanabilirsiniz.
  • Debug datalarını MessageBox ile göstermeyin! Visual Studio'nun Debug araçlarını kullanın. Sonra o MessageBox'lar kalıyor ve kullanıcıya da zırt pırt gösteriliyor!
  • Imports kullanın, tren uzunluğunda namespaceleri her yerde yazmayın.
  • Tüm değişkenleri Me. üzerinden kullanma alışkanlığınız varsa, acilen kurtulun!
  • 80 kolondan uzun kodları alt satıra alın!
  • Pascal, Camel ve Upper Casing dışında kafanıza göre değişken isimleri tanımlamayın.
  • Class ve Structure tanımlarken Pascal Casing kullanın.
  • Değişken tanımlarken Camel Casing kullanın.
  • Bir metod 30 satır kodu geçiyorsa bir yerlerde hata vardır. Onu bölmeye çalışın.
  • Event handler tanımlarken OBJEADI_EVENTADI kuralına uyun.

Ekleyecekleriniz varsa yorum olarak alabilirim ;) Hepinize kolay gelsin.

Tuesday, December 23, 2008 1:44:27 AM (GTB Standard Time, UTC+02:00)  #    Comments [8]   Visual Basic 2008  | 
 Monday, December 22, 2008

Yaptığınız işi neden yaptığınızla ilgili duygu ve düşünceleriniz sapıtırsa ortaya SAPIK bir insan olarak çıkarsınız. Sapık kelimesi genelde bize cinsel anlam enjekte etse de aslında sözlük anlamı ile yolundan sapmış herhangi bir şeye sapık demek tamamen uygun bir davranıştır. Peki insanlar nasıl ve neden sapıtırlar?

Microsoft ürünlerini pazarlıyoruz Microsoft bize destek olmuyor!

Bugünlerde bir sitenin yöneticisinden bu tarz bir serzeniş duydum! Sitesi üzerinden bilgi paylaşan hatta seminerler vs yapan bir kişi veya grup diyelim buna. Biliyorsunuz bu gibi konularda yazılar yazarken gerçek hikayeler üzerinden ilerliyorum fakat sizlerin benim gerçek hikayeyi anlatmamdaki amaç dışında hedefleri anlayamamamız için bazı noktaları da saptırıyorum. O nedenle boşa hedef aramayın :) Konuya dönersek.

Sosyal topluluklarda, kişilerde veya sektörde orada burada seminerler verenlerde şöyle bir yanılsama oluyor; "Ben Microsoft ürünlerini anlatıyorum her yerde pazarlamasını yapıyoruz ama Microsoft bize destek olmuyor!" Birincisi, alenen belli olan konu şudur ki arkadaş maddi destek istiyor. İstediği şey sırtının sıvazlanması falan değil. İkinci komik nokta ise kendisine Microsoft tarafından böyle bir görev verilmemesi ile beraber bunu kendince gönüllülük şapkası altında görev olarak edinmiş olan X kişi sonrasında bu göreve bir maddi karşılık bekleme sapkınlığa düşünüyor. Eh hani gönüllüydü?

Gönüllü değilmişsin onu anladık. Senin gönüllü olduğun şey aslında Microsoft'un Pazarlama Departmanı'nda işe girmekmiş! Zaten bu konuda da Microsoft gerçekten gönüllü arıyordu! Microsoft'un kendi pazarlama departmanları zaten var ve işlerini çok da iyi yapıyorlar. Eğer istiyorsanız buyurun gidip iş başvurusu yapın. Bizim üniversitelerde gezecek gönüllü pazarlamacılara ihtiyacımız yok. Bu işi meslek olarak yapanlar zaten bolca var.

Bugün aynı sapkınlığa ben de düşsem emin olun aynı tepkileri benim de vermem gerekir. Eskiden insanların benim Microsoft'tan yaptığım seminerler ve aktiviteler için para aldığımı sandıklarını düşünürdüm. Ki aslında bir dönem bu böyleydi de, herkes para aldığımı sanıyordu. Emin olun hiçbiri için 5 kuruş almıyorum! Kimse de almıyor! Bu işler gönüllü ilerliyor, İŞİNİZE GELİRSE. Hayır cidden anlayamıyorum, bir Microsoft ürünü ile ilgili bir yere gidip "Nasıl kullanıldığını" anlattığınızda, yani bilgi paylaştığınızda bu bir pazarlama aktivitesi oluyor da aynı şey (tamamen atıyorum) Oracle anlatırken neden böyle olmuyor? veya Java anlatırken? Ayrıca neden pazarlama aktivitesi olsun ki? Ben çok net söyleyebilirim ki yeri geliyor MS ürünlerinin kötü yanlarını da seminerlerimde açık ve net dile getiriyorum. Nasıl ve Neden mi? Çünkü ben Microsoft'ta çalışmıyorum. Ben kendi işime geleni yaparım çünkü kimse zaten bana bunu yapmam için para da vermiyor.

Ama en azından biraz destek verseler?

İşte o "biraz"ın miktarı ile ilgili sorunlar oluyor çoğu zaman :) Bazısı için "biraz" destek aktivitenin duyurusunda destek sağlamakken bazısı ise "destek" adı altında neredeyse günlük maaşını bile istemeye kalkıyor. Özellikle INETA Türkiye başkanı olduğum için INETA tarafındaki sosyal topluluklardan bahsettiğimi düşünebilirsiniz, düşünmeyin, o tarafta herhangi bir sorunumuz yok. Sorun genel, hem de çok genel. İnsanlar gönüllü olarak yaptıkları bir işin bir süre sonra "gönüllülük" kelimesinin anlamını yitirecek şekilde "enayilik" biçiminde tanımlayınca sigortalar atıyor. "Abi ben neden anlatayım ki o zaman kimse desteklemiyorsa?" Eee... neden anlattın ki şimdiye kadar? Demek ki bir beklentin varmış!

Kural 1: İyilik yap denize at!

Bu bir şikayet falan değil. Kesinlikle bir gerçek ve çok önemli bir tavsiyedir. İyilik yapacaksanız sakın ve de sakın! denize atmayı unutmayın. Karşılık beklemeyin yoksa üzülürsünüz. Her iyilik en fazla o iyiliği yapan için değerlidir o nedenle hiçbir zaman sizin yaptığınız iyilik ile aynı miktarda karşılık alamayacaksınız. Eğer karşılık beklerseniz enayi konumuna düşersiniz ve bu da sinirinizi bozar. O nedenle bir şey yapıyorsanız kendiniz için yapın. Şimdi bu söylediğim cümleye şaşıracaksınız ama benim üniversitelerde Adobe anlatılmasını sağladığım aktiviteler oldu! Java etkinliklerine destek verdiğim oldu. Bunların sayıları tabi ki .NET konusundakiler kadar çok değil. .NET konusunda bir görevim var INETA tarafında. Fakat bugüne kadar hiçbir zaman X kurumdur diye bir etkinliğe yardım etmemek veya köstek olmak gibi bir niyetim olmadı. Bunları tabi ki blogumdan duyurmadım :) çünkü etkinliklerin sahibi ben değildim ve ayrıca isteseniz de istemeniz de hepiniz benim blogumu okurken bir Microsoft MVP'si ve INETA Türkiye Başkanı kimliği ile okuyorsunuz. Benim de bu kimlikleri olabildiğince zedelemeyecek şekilde bir içerik üretmem gerekir. Bu apayrı bir konu, ileride başka bir yazıda dertleşiriz bu konuda da....

Kural 2: Açık ve net olun!

Öyle üstü kapaklı işleri sevmem. Bir şeyle ilgili ne düşünüyorsanız uygun yerde dile getirin. Hatırlayanlarınız olacaktır geçenlerde Pardus ile ilgili bir yazı yazdım :) Bana küfür edenlerden tutun beni bir satır bile kod yazamayan ahmak olarak adlandıranlara kadar bir sürü insan çıktı ortaya. Hatta bazıları kendi bloglarında beni taşa tutup zekice linkini yorum olarak benim bloga göndermeye bile kalktı trafik almak için :) Hatta beni taşa tutmak için blog açanlar oldu :D

Aldığım bir maili çok iyi hatırlıyorum. "Her şey bir yana medeni cesaretinizi kutlarım" şeklinde bir maildi. Yazmaktan çekinmeyin, yazdıklarınızın sorumluluğunu yüklenmek şartı ile çekinmeden her şeyi yazabilirsiniz. Özellikle kişisel yorum yazılarında kimse her şeyi bilemez. Ben o söz konusu Pardus yazısına gelen yorumlardan çok şey öğrendim. İyi ki yazmışım. Siz de yazın ama samimi olun!

Geldiler reklam yapıp slayt gösterim gittiler!

İşte bu arkadaşlar pazarlamacı arkadaşlar. Onları da çok seviyoruz ve onların da bu işi yapmak zorunda olduğunu, yaptıkları işi bizim kadar sevdiklerini anlıyoruz. Gönüllü pazarlamacı diye bir mantık olmaz ama pazarlamacılar vardır ve hatta bazen siz de olmak zorunda kalırsınız. Genelde üniversitelerden aldığım yorumların çoğunda "X Eğitim firmasından seminere geldiler hocam slayt gösterip gittiler" şeklinde oluyor. Maalesef durum genelde böyle ve böyle de olmak zorunda gibi gözüküyor. Birincisi gelen kişi ne kadar teknik olsa da oraya gelme nedeni ve kimliği belli. Eğitim firması adına geliyor, gönderiliyor! Bu onun maaş aldığı görevinin bir parçası ve yapması gereken şey de çalıştığı kuruma pazar kazandıracak şekilde seminerden olabildiğince çok kendi çalıştığı kurum için öğrenci üretmek, reklam yapmak. Ben bu sistemi onaylamıyorum ve kendi eğitim şirketim olsa farklı yapardım. Ama belki de şirketi batırırdım :) Sonuçta o işi ticari olarak yapmıyorum o nedenle atıp tutmak da saçma. Sadece bu durumun neden böyle olduğunu ve neden doğal algılanması gerektiğini açıklamak istedim. Bir eğitim firmasından üniversitenize gelen "eğitim firması kimliği" ile gelen birinin maaşı ile görevli bir kişi olduğunu hatırlamanızda fayda var. Böylece çok yıkıcı eleştirileri engellemiş oluruz.

Bir soru: Daron nasıl para kazanıyor?

Geçenlerde tanıdığım bir firmaya yeni girmiş olan bir arkadaşım bana "Firmada herkes seni tanıyor sektörden ama senin nasıl para kazandığını anlamıyorlar" şeklinde bir yorumda bulundu :) Bu yorum en azından benim seminerlerden vs para almadığımla ilgili doğru bilginin etrafa yayıldığının da bir kanıtı olduğu için sevindim. Fakat bu gibi bir soru varsa aslında hızlı bir cevap da verebilirim.

Bilmeyenler için özellikle dile getiriyim www.deveload.com şirketinin sahibiyim. Koca bir holding falan değil :) Güzel işler yaptığımız bir yazılım şirketi. Ağırlıklı uzmanlık alanı içerik yönetim sistemi, son zamanlarda tabi ki SL ve WPF uygulamaları da bolca var. Herhangi bir ürünümüz yok genelde söküğü olan müşterileri dikiş yapıyoruz veya 100KG üstüne özel sipariş kıyafetler vs :) Yaptığımız ticari işleri genelde blogdan paylaşmıyorum çünkü sizler için bir anlam ifade etmiyor :) Yani bizim ASP.NET ile bıdı bıdı sitesi yaptığımızı buraya yazsam ne olacak? Bana anlamsız geliyor. Ha bazı şeyleri de yazıyorum, anlatıyorum. Güzel bir Silverlight uygulaması yapmışsak bunu size duyuruyorum. Sizlerin de incelemesi ve SL ile neler yapılabiliri görebilmeniz adına faydalı olabileceğini düşünüyorum.

Aslında bir süredir bazı projelerle ilgili, özellikle danışmanlık verdiğim yerlerle ilgili bloga içerik üretmek istiyorum fakat zamansızlık tekrardan peşimi bırakmıyor.

Özetle :) Daron kendi parasını kendisi kazanıyor merak etmeyin :) beni düşünenler için çok teşekkürler. Bundan 5 yıl önce de seminer vermeden para kazanıyordum, hatta daha fazla kazanıyordum :D Şu an zamanımı böldüğüm için doğal olarak daha az kazanıyorum ama şimdilik ferrari ile gezmek veya yatımda güneşlenmek gibi bir niyetim yok. O nedenle ortada bir sorun da yok. İskenderimi yiyebildiğim sürece hayat güzel ;)

Hepiniz kalın sağlıcakla...

Monday, December 22, 2008 2:43:29 PM (GTB Standard Time, UTC+02:00)  #    Comments [16]   Dertli Kerem  | 
 Sunday, December 21, 2008

Süper bir geceydi. Neden mi? :) Tabi ki SilverNight yüzünden. Talihliler arasında yer alamayanların unuttuğunu tahmin ettiğim SilverNight etkinliğimizi bu sabah bitirdik. Tüm etkinliği canlı olarak silvernight.ms üzerinden de yayınladık. Gelen SMS'lerden ve maillerden yola çıkarak izleyenlerin %25'inin sorun yaşadığını gördüm :) Herhalde internet bağlantılarından olsa gerek. Beni şaşırtacak şekilde gece yarısı 3'te bile 40'a yakın izleyicimiz varmış! Bugün istatistiklere bakınca şaşırmadım desem yalan olur.

SilverNight başlıyor...
SilverNight başlıyor...

Neler yaptınız? Nasıl yaptınız?

Dün akşam 08.00'da Taksim'den servisimiz kalktı ve Koç Üniversitesi'nde doğru yolculuğumuz başladı. Üniversiteye ulaştığımızda canlı yayın hazırlıklarını da yaptıktan sonra 10.30 gibi bir video portalı yaparken ihtiyaç duyacağımız Silverlight ile ilgili bilgileri aktarmaya başladım. Hem tasarım, hem programlama, hem de veri tabanı bağlantılarına kadar değindik. Hatta hızlıca LINQ konusunu bile işledik. Tabi benim yine gevezeliğim tuttu ve bir baktık ki saat gece yarısı 03.00 olmuş!

Herkes çok heyecanlı :)
Herkes çok heyecanlı :) Hangi grup birinci olacak?

Tabi detayları atlamiyim. Tam gece yarısında pizzalarımız geldi :) Sonra sponsorlarımızdan RedBull geldi :) Güzel bir doping yapmayı unutmadık. Neyse gece yarısı 03.00'a geri dönelim. Hazırlayacağımız video portalının tanımını yaptık, detayları belirledik ve 5 ayrı grup oluştururduk. Her grup kendi portalını yazmaya başladı. Sabah 08.00'da gruplar hazırlamış oldukları portalları tüm gruplara sundular. 5 gruptan 4'ü ortaya bir şeyler çıkarabildi. Oylamalar sonrasında benim de favorim olan "DeveDizayn" grubu birinci oldu. Tam olarak skor tablosu şöyle;

Birincili : Devedizayn
İkincilik : Grup 1 Gece
Üçüncülük: Grup Dinçer
Sonuncu : Komedi Dans Üçlüsü

Tüm etkinliği videoya çektik fakat ekranlar pek iyi çıkmamış maalesef :( Ama ben çoğu videoyu hazırlayarak sizinle buradan paylaşacağım. Minibüs yolculuğumuzdan tutan grupların projeleri yaparkenki halleri ve projelerini sundukları sunumlara kadar hepsinin video kayıtları mevcut :) Eminim izlerken siz de bizim kadar eğleneceksiniz. Tabi tüm bu içeriği hazırlamam için bana biraz zaman vereceğinizden eminim :)

SilverNight sonrası, sabah evlere dağılmadan önce!
SilverNight sonrası, sabah evlere dağılmadan önce!

Şimdilik aktivitenin fotolarından elime ulaşanları sizlerle paylaşıyorum :)

http://cid-8eca4439fd9a640f.skydrive.live.com/browse.aspx/SilverNight%202008%20Istanbul?link=0

Ayrıca her 4 grubun da yapmış olduğu projelerin kaynak kodlarını aşağıdan indirebilirsiniz. Birinci olan grubumuzun projesini CodePlex'e yükleyerek ileriki SilverNight etkinlikleri ile projeyi büyütmeyi de düşünüyoruz :) Yakında siteyi yayına alıp sizlerle adreslerini paylaşacağım.

Birinci Proje - 21122008_01.rar (2,08 MB)
İkinci Proje - 21122008_02.rar (537,82 KB)
Üçüncü Proje - 21122008_03.rar (818,55 KB)
Sonuncu Proje - 21122008_04.rar (515,5 KB)

SilverNight'a katılan herkese çok teşekkürler. Ayrıca özellikle Koç Üniversitesi Bilgisayar Kulübü, sevgili MSP'lerimiz Yiğit Kıran ve Yasemin Avcular'a çok çok teşekkür ediyorum. Sizler olmasaydınız böyle güzel bir gece geçiremezdik. Ayrıca aldığınız hediyeyi de hiç unutamayacağım :)

Bu hediyeyi unutmayacağım :D
Bu hediyeyi unutmayacağım :D

En kısa zamanda etkinlik videoları ile görüşmek üzere ;)

Sunday, December 21, 2008 2:48:57 AM (GTB Standard Time, UTC+02:00)  #    Comments [14]   Silverlight 2.0  | 
 Saturday, December 20, 2008

Bugün Imagine Cup Türkiye Lansmanı'nda "Expression Studio ile Tasarım" oturumunu sundum. Oturuma katılan arkadaşların çoğu hali hazırda daha önce beni izlemiş olmanın avantajını kullanarak neredeyse tüm hamlelerimi tahmin etseler de en azından daha önce dinlemeyenler için faydalı bir saat olduğunu tahmin edebilirim. Bu vesile ile aslında uzun zamandır Expression Studio anlatmadığımın da farkına vardım. Sürekli Silverlight ve WPF anlatırken sadece Expression Blend'den bahsetme şansım oluyor oysa Expression Studio içerisinde Design, Media, Encoder ve Web de çok güzel özelliklere sahip.

Imagine Cup Lansmanı - Expression Studio Oturumum
Imagine Cup Lansmanı - Expression Studio Oturumum

En kısa zamanda daha detaylı bir Expression Studio semineri yapma kararı aldım :) Imagine Cup'a katılmayı düşünen arkadaşların sorularını her zaman mail olarak bekliyorum ;) Yardım gerekirse buralardayım.

Saturday, December 20, 2008 2:08:07 AM (GTB Standard Time, UTC+02:00)  #    Comments [2]   Expression Blend | Expression Design | Expression Encoder | Expression Media | Expression Studio | Expression Web | Seminer | Silverlight 2.0 | WPF  | 
 Friday, December 19, 2008

27-28 Aralık hafta sonu düzenlenen bir etkinliği duyurmak istiyorum. Yok bir yılbaşı partisi değil :) Bu sefer sektörden uzmanların yerine akademik dünyadan öğrenci uzmanların konuşmacı olduğu bir aktiviteden bahsediyoruz. Microsoft'un Student Partner programını duyanlarınız olmuştur. Kabaca Microsoft'un üniversitelerdeki öğrenci iş ortakları gibi Türkçe'ye çevirebiliriz diye tahmin ediyorum. Özellikle bizim INETA tarafındaki etkinliklerde de üniversitelerdeki MSP'lerin organizasyonda çok büyük katkıları oluyor.

MSP Days olarak adlandırılan etkinlik bir hafta sonu boyunca sürecek ve Ankara, Çankaya Üniversitesi'nde yapılacak. Ben de misafir konuşmacı olarak ilk defa Azure'da Yazılım Geliştirme konusuna değineceğim. Etkinlikle ilgili detaylara http://mspdays.spaces.live.com/ adresinden ulaşabilirsiniz.

Friday, December 19, 2008 4:24:27 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Azure  | 
 Thursday, December 18, 2008

Bugün INETA Türkiye tarafından sizlere çok güzel bir duyurum var. Uzun zamandır hayalini kurduğum ve sonunda gerçekleştirebildiğimiz bir projeden bahsedeceğim.

INETA Türkiye K12 Ekibi

Bildiğiniz üzere benim için meslek okulları çok önemli. Daha önceki yazılarımda da bahsettiğim üzere ülkemizde yazılım üretimi için veya diğer bir deyiş ile "kod yazan" insanların artması için meslek liselerinin çok önemli bir misyonu var. Bu çerevede INETA Türkiye olarak biz de K12 ekibimizi kurduk ve K12 okullarındaki seminerlerimizi hızlandırma kararı aldık.

K12 Ekibimizin başında sevgili Emre Ordukaya, Bağcılar Ticaret Meslek Lisesi bilgisayar öğretmeni bulunuyor. Emre hocam ile bu çalışmaya yaklaşık altı ay önce başladık. K12 ekibinde ayrı bir konuşmacı listemiz var. Amacımız genel olarak hem sektöre yeni konuşmacılar yetiştirmek hem de meslek liselerindeki kardeşlerimiz ile sektörde 2 ile 5 yıl arası deneyimi olan kardeşlerimizi buluşturmak. Gelin sizleri şu anda K12 Ekibi'nde bulunan konuşmacılarımızla tanıştıriyim.

Fatih Çoşkun -Trakya Üniversitesi - Microsoft Student Partner
Gökhan Gülbiz - Kocaeli Üniversitesi - Microsoft Student Partner
Hamdi Ekmen - Free-Lance Yazılım Geliştirici
Faruk Durak - Bravoo! - Yazılım Geliştirici

Tüm bu arkadaşlarımıza son dönemde yaptıkları çalışmalar için birer INETA K12 Speaker olarak teşekkür ediyorum. Eğer siz de bir meslek listesi'nde öğrenci iseniz veya öğretmen iseniz Emre Ordukaya hocamızla iletişime geçip bir sonraki seminerin sizin okulunuzda yapılması için aksyon alabilirsiniz. "Yok ben konuşmacı olmak istiyorum" diyorsanız yine aynı şekilde minik bir CV ile iletişime geçmenizde fayda var.

Hepimize hayırlı olsun...

Thursday, December 18, 2008 1:16:41 AM (GTB Standard Time, UTC+02:00)  #    Comments [0]    | 
 Wednesday, December 17, 2008

Bugün Abdurrahman – Nermin Bilimli Anadolu Teknik Lisesi'ndeydim. Cevher gibi VB.NET bilen gençlerin arasında 5 saat geçirdim. Tüm bu sürede Silverlight ve WPF dünyasına göz attık, sona doğru da hızlıca bir LINQ girişi yaptık. Meslek liselerinde heyecan beni de bir o kadar heyecanlandırıyor. Zaten bu konuda çok yakında bazı ek duyurular da yapacağım. Ülkemizin bilişim ve özellikle yazılım üretimi ile gelir elde eden bir ülke olabilmesi için meslek liselerinin önemi bence çok büyük. Aşağıdaki fotoğrafa baktığınızda eminim ki sizler de benimle aynı duyguları paylaşacaksınız.

Abdurrahman-Nermin Bilimli Anadolu Teknik Lisesi
Abdurrahman-Nermin Bilimli Anadolu Teknik Lisesi

Organizasyon için sevgili hocalarımıza çok teşekkür ediyorum. Normalde 3 saat olarak planladığımız etkinliği onların da desteği ile 5 saate uzattık. Her şey çok güzeldi. Tek sorun : "Meslek liselerini ziyaret ettikçe kendimi daha yaşlanmış hissetmem" :)

Seminere katılan tüm kardeşlerimi buradan öpüyorum.

Wednesday, December 17, 2008 12:44:50 AM (GTB Standard Time, UTC+02:00)  #    Comments [5]   LINQ | Seminer | Silverlight 2.0 | WPF  | 
 Tuesday, December 16, 2008

Dün detaylarından bahsettiğim Windows Live yeni sürüm hizmetlerinden Live Groups'ta yeni bir grup açtım. Bugün sizlere onu duyurmak istiyorum fakat onun öncesinde gelin beni takip edebileceğiniz diğer medyalardan bahsedelim.

Genelde "Hocam nerede bir sonraki seminer?" "Nasıl?" vs gibi soruları tek tek cevaplamak yerine beni, seminerleri, INETA aktivitelerini vs takip edebilmeniz adına aslında en ana kaynak benim blogum. Blogumu RSS üzerinden takip edebileceğiniz gibi eğer blogun en üstündeki "Mail ile takip et" kısmından  ilerlerseniz mail adresinizle kayıt olup blogdaki değişikliklerden mail ile de haberdar olmayı tercih edebilirsiniz.

Bir diğer seçenek ise twitter üzerinden beni takip etmek. Twitter'ı bir anlamda microblog olarak tutuyorum. Sektörle ilgili kısa haberler, duyuruların yanı sıra bazen seminerleri de oradan anlık olarak duyuruyorum.

Peki tüm bunların yanında Live Groups'ta bir grup açarak amacımız nedir?

http://daronyondem.groups.live.com/ adresinden gruba kayıt olduğunuzda artık daronyondem@groups.live.com adresine mail atarak grubu takip eden herkese ulaşabilirsiniz. Böylece belki de Silverlight ile ilgili takıldığınız bir noktada ben değil de sorunuzu bir başka Silverlight meraklısı cevaplandırabilecek :) Sorulara yetişmekte ciddi sorun yaşadığımı itiraf etmem gerek. Ayrıca bazen çok ilginç haberler veya sizlerin yaptığı Silverlight, WPF uygulamalarını da paylaşmak için grubu kullanabilirsiniz. Özetle yeni yazılım teknolojilerine meraklı olan herkesin birbiri ile iletişimi için Live Groups altyapısını kullanıyor olacağız. Grubun yönetimi bende olsa da yukarıdaki bahsettiğim diğer sistemlerden farklı olarak Live Groups "Daron merkezli" değil. Sizler de birer "yayıncı"sınız artık. Belki de bulduğunuz bir ip ucunu veya çözdüğünüz bir sorunu herkesle paylaşmak isteyebilirsiniz, böylece mail groupta paylaşma şansınız olacaktır.

Tabi tüm bunların yanı sıra olabildiğince duyuruları da gruba taşıyor olacağım. Ayrıca çok yakında Live Groups üzerindeki gruba özel takvimde bir etkinlik takvimi de düzenleyeceğim. Böylece "Bir sonraki seminer nerede?" sorusunun da cevabını sürekli online tutuyor olacağız.

Outlook kullananlar tavsiyem bir klasör oluşturup bir de kural belirleyerek grubun maillerini bir klasöre toplamanız :) takibi çok daha rahat olacaktır.

Hepimize hayırlı olsun ;)

Tuesday, December 16, 2008 12:28:16 AM (GTB Standard Time, UTC+02:00)  #    Comments [2]   live.com | Silverlight 2.0 | WPF  | 
 Monday, December 15, 2008

Windows Live hizmetlerinin yeni serisi yayına geçti. Yeni seriyi www.windowslive.com adresinden inceleyebilirsiniz. Özellikle SkyDrive entegrasyonu ve LiveID başına verilen 25GB dosyalama alanı hoşuma giden özellikler arasında. Bunların yanı sıra tabi ki Live Groups yapısı ve bildiğimiz mail group sisteminin gelmesi de bir ayrı güzel. Hotmail entegrasyonu ve tüm bunların yeni yazılım serisi ile de desteklenmesi Live hizmetlerinin kalitesini ciddi anlamda arttırıyor.

Live Messenger, Outlook Express'in yerini alan Live Mail, Live Photo Gallery, Live Writer, Office Live ve Movie Maker gibi bazıları güncellemeler içeren bazıları ise yepyeni yazılımlar söz konusu. Ben ilk bakışta kendi favorilerimizi sizlerle paylaşacağım.

Live Fotoğraf Galerisi

Live programlarından biri olarak Fotoğraf Galerisi'ni bilgisayarınıza yüklediğinizde aslında online olarak SkyDrive ile beraber çalışmaya başlıyor. Video veya fotoğrafların meta tagları veya sizin tanımladığınız özel taglara göre kategorilemeler yapabiliyor. Bu özellikler çok yabancı özellikler olmasa da Live Fotoğraf Galerisi ile web ortamının entegrasyonu ve hatta Flickr desteği ilginç bir şekilde dikkati çekiyor.

Live Mail

Tamamen ücretsiz bir Mail İstemcisi olarak artık Outlook Express'e "byby" demenin zamanı geldi. Karşınızda Live Mail istemcisi duruyor. Live Mail istemcisi ile hotmail vs gibi Microsoft mail sunucularını kullanabileceğiniz gibi standart POP3 maillerinizi de tabi ki kullanabiliyorsunuz. Ek olarak Outlook'taki Calendar sisteminin kişisel kullanım için olan kısımları Live Mail'in artık bir parçası. En güzel tarafı ise windowslive.com'dan giriş yaptığınızda webde göreceğiniz takviminiz ile Live Mail içerisindeki takvimin otomatik senkronize olması. Tüm bunları normalde sadece Exchange üzerinden alınabilen veya Office Live ile sağlanabilen hizmetlerken artık doğruda Windows Live üzerinden sunuluyor. Ücretsiz bir mail istemcisi olarak Live Mail'i beğendiğimi itiraf etmeliyim.

Web ortamındaki yenilikler: Live Groups

Mail grouplar hala işlevselliklerini koruyan ve bazı durumlarda gerçekten iş gören yapılar. Artık Live hizmetlerinde yer alan Groups yapısı ile de mail grouplar kurabiliyorsunuz. Her grubun kendine özel fotoğraf albümleri, takvimi ve web / mail adresi bulunuyor. Ayrıca FaceBook tarzında kişiler için arkadaş listeleri, yorumlar vs ile bir sosyal portal da oluşturulmuş durumda. Tabi tüm site üzerinden arkadaşlarınızın Live Messenger ile de entegre bir şekilde listelendiğini unutmayalım.

Ben de yakında bir kaç Live Group ile karşınıza çıkacağım ;)

Monday, December 15, 2008 11:20:04 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   live.com  | 
 Sunday, December 14, 2008

Silverlight 2.0 ile beraber gelen DataGrid'in aslında SDK paketi ile beraber geldiğini biliyoruz. Yani normal şartlarda DataGrid Silverlight Runtime içerisinde bulunmuyor. Haricinde bir DLL içerisinde yer alan DataGrid'i referans alarak projenize eklemeniz ve o şekilde ilerlemeniz şart. Durum böyle olunca tabi ki bu kontrolleri yenilemek, upgrade ve update'ler sunmak da kolaylaşıyor.

Silverlight 2 DataGrid için yeni bir Aralık 2008 sürümü yayınlandı. Gelen yenilikler ve değişikliklerle ilgili ufak bir liste yapmak gerekirse;

  • 30'a yakın bug giderildi.
  • Focus alan satırlar ItemsSource değiştiğinde görünmez olmuyor.
  • Sorting yapıldığında artık Selection kaybolmuyor.
  • DataGrid içerisinde Popup açan kontroller artık DataGrid'in editin mode'undan çıkmasına neden olmuyor.
  • Geliştirilmiş FrozenColumn
  • Selection artık CurrentCellChanged event'ı ile güncelleniyor.

Peki nasıl kullanırız?

Eğer Visual Studio içerisinde Toolbox'ı kullanıyorsanız (ki şimdilik Silverlight 2.0'da tavsiye etmiyorum) işiniz biraz zor olacak. Kullanıcınıza ait AppData\Local veya Local Settings\Application Data içerisinde Toolbox ile başlayan tüm dosyaları silmelisiniz. Silverlight 2.0 SDK'yı yüklediğiniz yerdeki System.Windows.Controls.Data.dll ve System.Windows.Controls.Data.Design.dll dosyalarını download edecekleriniz ile değiştirdiğinizde aslında işlem tamamlanmış oluyor. Tabi daha önce bu DLL'leri kullandığınız tüm projelerdeki reference'ları da güncellemeniz şart.

Download adresi : http://www.microsoft.com/downloads/details.aspx?FamilyID=084a1bb2-0078-4009-94ee-e659c6409db0&displaylang=en

Hepinize kolay gelsin.

Sunday, December 14, 2008 10:08:56 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   Silverlight 2.0  | 
 Saturday, December 13, 2008

Sizlere şaşıracağını düşündüğüm bir haberim var :) Genelde neredeyse tüm seminerlerimde Microsoft'un yazılım geliştirici ve tasarımcı araçlarının pahalı olmasından yakınılıyor. Visual Studio tarafında Express sürümleri önersem de maalesef Expression tarafında önerebileceğim bir alternatif bulunmuyor. Peki pahalı diyoruz da acaba ne kadar? :) İşte size buradan yeni bir indirimi duyurmak istiyorum.

Expression Web
Expression Design
Expression Blend
Expression Media
Expression Encoder
Visual Studio 2008 Standart

Hepsi sadece 350$!

Şaşırdığınıza eminim çünkü ben de ilk duyduğumda şaşırdım. Tüm bu araçları kullanarak proje yapan firmaların veya kişilerin bu lisanslara 350$ ayıramamaları gibi bir durum olamaz. Gerçekten çok komik bir rakam. İlk yaptığınız projeden bir miktar ayırmanız en azından Silverlight 3.0 veya Visual Studio 2010 çıkana kadar sizi idare edecek araçları lisanslı olarak edinebilmeniz için yeterli olacaktır.

Biraz reklam tadında oldu fakat bu haberden ve indirimden faydalanabilecek kişileri düşününce yazmadan geçemedim.

Bu arada satın almak için : http://store.microsoft.com/microsoft/Expression-Studio-2-Full/product/524ABA6C

Saturday, December 13, 2008 9:58:57 PM (GTB Standard Time, UTC+02:00)  #    Comments [2]   Expression Blend | Expression Design | Expression Encoder | Expression Media | Expression Studio | Expression Web | Visual Studio 2008  | 
 Friday, December 12, 2008

Son zamanlarda çok fazla Virtual Earth ve Silverlight'ın beraber kullanımı ile ilgili mail alıyorum. Bu konuda uzun uzun teknik bir makale yazmaya hazırlanırken bir baktım ki birileri daha hızlı davranmış ve Silverlight 2.0'ın MultiScaleImage altyapısını da kullanan bir Virtual Earth kontrolünü Silverlight için open source olarak hazırlamış.

Deep Earth adını verdikleri altyapı sayesinde rahatlıkla Virtual Earth'ü Silverlight uygulamalarınızda da kullanabiliyorsunuz. Hemen kontrolü indirebileceğiniz adres CodePlex üzerinde şu şekilde ; http://www.codeplex.com/deepearth

Benim tavsiyem ilk başta buradaki demoyu inceleyerek ne kadar güzel bir kullanıcı deneyimi yaratıldığında göz atmanız. Virtual Earth ve Silverlight ikilisi ile muhteşem şeyler yapılabilir. Genelde bu mapping sistemlerinin en büyük dezavantajı DHTML ve JavaScript ile programlanıyor olmasıydı ;)

Unutmadan :) Virtual Earth'ın altyapısını böyle rahat rahat kullanabilmek için tabi ki https://mappoint-css.live.com/mwssignup bu adresten bir Developer Account almanız gerekiyor. Burada verilen bilgileri DeepEarth'e aktararak uygulamanızın Virtual Earth haritalarını web servisi üzerinden çekebilmesini sağlıyorsunuz.

Hepinize kolay gelsin.

Friday, December 12, 2008 6:37:04 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   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  | 
 Wednesday, December 10, 2008

Özellikle kod yazarken mouse kullanmak zorunda kalmak pek de hoş olmuyor. Klavye ile başbaşa ilerlemek çok daha hızlı kod yazılmasını sağlayabiliyor. Bu çerçevede olabildiğince klavye ile işlerinizi halledebilmeniz için tabi ki tuş kısayollarına alışık olmanız şart. Aşağıdaki adresten VB 2008 için klavye kısayollarının bulunduğu bir posteri bilgisayarınıza indirebilirsiniz. Artık basıp duvarınıza asmak size kalmış ;)

http://www.microsoft.com/downloads/details.aspx?familyid=255b8cf1-f6bd-4b55-bb42-dd1a69315833&displaylang=en

Wednesday, December 10, 2008 3:52:08 PM (GTB Standard Time, UTC+02:00)  #    Comments [4]   Visual Basic 2008  | 
 Tuesday, December 09, 2008

Bugün SilverNight'ın çekiliş günüydü :) Malum artık çekiliş için kayıtları kapattık ve gözümüzü de kapatıp parmağımızı listede rastgele yerlere basarak çekilişimizi yaptık. :) Tamam, itiraf ediyorum bu kadar ilkel bir çekiliş olmadı ama mantıken aynı işi bizim için .NET Framework'ün Random sınıfı yaptı. Peki kimler mi kazandı? Buyurun liste karşınızda.

Nejat Can Ünlü, Mehmet Turac, Ahmet Enes Dabanlıoğlu, Özge Çimendere, Alp Çoker, Ararat Avşaroğlu, Tarık Kranda, Yağız Gönüler, Mehmet Kurt, Hüseyin Aydın, Sinan Sağer, Sinan Asil, Osman Kucuksonmez, Kemal Can Kara, Cüneyt Değer, Tolga Birsen, Barış Özaydın, Ercan Zengin, Dinçer Uygun, Ali Yalçın, Arif Refik Şenol, Çağlar Araz, Fatih Gençaslan, Ali İncir, Şeref Seçil

Kazanan arkadaşları kutluyorum. Kendilerine bugün içerisinde birer mail ulaşacak ve o maillere cevap vermeleri gerekiyor :) Aksi halde şanslarını kaybedebilirler ve yeni çekilişlerle yedekler belirlemek zorunda kalabiliriz. Eğer böyle bir durum olursa yedekleri tekrar blogdan duyurmayacağım, sadece kendilerine mail atacağım.

Umarım muhteşem bir gece geçirir ve sabahına da video portalımızı yetiştiririz.

Sevgilerle...

Tuesday, December 09, 2008 4:38:12 PM (GTB Standard Time, UTC+02:00)  #    Comments [27]   Silverlight 2.0  | 
 Monday, December 08, 2008

Uygulamalarda kullandığımız ikonlar veya görselleri çoğu zaman uygulama klasöründe saklamayı sevmeyiz. Hem bu görselleri kısmen korumak için hem de kalabalık yaratmamaları için EXE'nin içerisinde gömmeyi tercih ederiz. WPF ile beraber bu iş biraz daha kolaylaşıyor. Gelin bir WPF uygulamasında herhangi bir görseli nasıl dahili hale getirebileceğimizi inceleyelim.

Visual Studio ile yarattığımız yeni WPF projemize Solution Explorer içerisinde sağ tuş ile tıklayarak gelen menüden "Add Existing Item" diyip yeni bir JPEG dosyası ekliyoruz. Amacımız bu dosyayı EXE'nin içinde saklayarak uygulamanın ana penceresinde de göstermek.

Dosyayı projenize ekledikten sonra onu seçerek hemen "Propterties" paneline göz atmanız gerekiyor. Böylece bu resim dosyası ile ilgili projedeki ayarları değiştirebileceğiz. Dosya ile ilgili "Build Action" ayarının kesinlikle "Resource" olması gerekiyor. Tüm bu ayarları tamamladıktan sonra XAML tarafında bir Image nesnesi ekleyelim.

[XAML]

<Window x:Class="Window1"

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

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

  Title="Window1" Height="300" Width="300">

    <Grid>

    <Image x:Name="Foto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></Image>

  </Grid>

</Window>

Basit bir şekilde eklediğimiz ve adı Foto olan bu Image nesnesine çalışma zamanında biraz önce EXE'mize eklediğimiz fotoğrafı aktarmamız gerekiyor. Bunun için Window.Loaded event'ını kullanacağız.

[VB]

Foto.Source = New BitmapImage(New Uri("pack://application:,,,/resim.jpg"))

Gördüğünüz üzere işlem epey basit. Aslında anahtar kısım Uri tarafında. Eğer uygulama içerisindeki Resource'lara ulaşmak istiyorsanız pack Uri'leri kullanmanız gerekiyor. pack Uri'lerinin syntax yapısına girmeyeceğim, epey uzun ve detaylı bir konu. Bizim için şimdilik önemli olan bu Uri'nin sonundaki dosya ismini değiştirerek istediğimiz kaynağa erişebiliyor olmamız. Eğer uygulama içi klasörler yaratarak dosyaları ayrı klasörlere koyduysanız doğrudan resim.jpg'in önünde path bilgisi de yazabilirsiniz.

Bu sistemi ister resim, ister ses, ister fare imleci saklamak için kullanabilirsiniz. Artık bu gibi ufak kaynaklar otomatik olarak EXE'nizin içerisinde taşınıyor olacak.

Hepinize kolay gelsin.

Monday, December 08, 2008 2:58:30 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   WPF  | 
 Sunday, December 07, 2008

Bu aralar hızlıca bitirmem gereken bir WPF uygulaması üzerine çalışıyorum :) O nedenle pratik çözümler üretmem gerekiyor ve tabi ki bunları sizinle de paylaşmak istiyorum. Dün WPF içerisindeki bir kontrolün görselliğini nasıl diske bir JPEG dosyası olarak kaydedebileceğimizi görmüştük. Bugün de WPF'deki bir kontrolün görselliğini nasıl yazıcıya gönderebileceğinizden bahsedeceğim :) Çok kısa sürecek! :)

[VB]

Dim MyPrinter As New PrintDialog

If MyPrinter.ShowDialog Then

   MyPrinter.PrintVisual(YazdirilacakWPFKontrolu, "Printer kuyruğunda gözükecek bir açıklama yazın!")

End If

[C#]

PrintDialog MyPrinter = new PrintDialog();

if (MyPrinter.ShowDialog) {

    MyPrinter.PrintVisual(YazdirilacakWPFKontrolu, "Printer kuyruğunda gözükecek bir açıklama yazın!");

}

Bu kodları okuduğunuzda verdiğiniz tepkiyi çok merak ediyorum :) Acaba WPF'deki bir kontrolün görselliğini yazıcıya yollamak bundan kolay olabilir miydi? Basit bir şekilde bir PrintDialog yarattıktan sonra onu kullanıcıya gösterip bir Printer seçmesini sağladıktan sonra PrintVisual metodu ile hangi Visual'ın yazdırılacağını belirtmemiz yeterli oluyor. Böylece rahatlıkla vektörel çıktılar alabiliyorsunuz. Tabi ki burada herhangi bir sayfalama mekanizması vs yok, doğrudan Paint'ten print alırmış gibi düşünebilirsiniz. Benim projemde ihtiyacım olan da buydu zaten :)

Hepinize kolay gelsin.

Sunday, December 07, 2008 2:39:58 PM (GTB Standard Time, UTC+02:00)  #    Comments [2]   WPF  | 
 Saturday, December 06, 2008

Bugün karşılaştığım bir sorunun çözümünü sizinle paylaşmak istiyorum. Hazırladığım bir WPF uygulamasında ekranda bir şeyler çizdiriyordum ve sonrasında bu çizimin bir JPEG olarak kaydedilmesini sağlamam gerekiyordu. GDI'a girişerek tekrardan herşeyi bir BitmapImage içerisine çizdirmek istemedim :( Zaten baktığınızda WPF uygulamalarında varsayılan sınıflar arasında System.Drawing gelmiyor, ek olarak referans almak gerekiyor.

Peki nasıl halledebiliriz bu işi?

Aslında çözüm epey kolay. Ekranda görsel olarak gösterebildiğiniz herhangi bir Visual nesnesinin görselliğini alarak rahatlıkla diske bir Encoder aracılığı ile kaydedebiliyorsunuz.

[VB]

        Dim Genislik As Integer = 500

        Dim Yukseklik As Integer = 640

 

        'Genişlik, Yükseklik, Yatay ve Dikey DPI, Renk Derinliği verilir.

        Dim MyRender As New RenderTargetBitmap(Genislik, Yukseklik, 96, 96, PixelFormats.Pbgra32)

        'Görseli alınacak nesne Render metoduna verilir.

        MyRender.Render(Me)

 

        Dim Dosya As String = "C:\1.jpg"

 

        'İstenirse GifBitmapEncoder veya PngBitmapEncoder kullanılabilir.

        Dim Encoder As BitmapEncoder = New JpegBitmapEncoder()

        Encoder.Frames.Add(BitmapFrame.Create(MyRender))

 

        Using BirStream As System.IO.Stream = System.IO.File.Create(Dosya)

            Encoder.Save(BirStream)

        End Using

[C#]

            int Genislik = 500;

            int Yukseklik = 640;

 

            //Genişlik, Yükseklik, Yatay ve Dikey DPI, Renk Derinliği verilir.

            RenderTargetBitmap MyRender = new RenderTargetBitmap(Genislik, Yukseklik, 96, 96, PixelFormats.Pbgra32);

            //Görseli alınacak nesne Render metoduna verilir.

            MyRender.Render(this);

 

            string Dosya = "C:\\1.jpg";

 

            //İstenirse GifBitmapEncoder veya PngBitmapEncoder kullanılabilir.

            BitmapEncoder Encoder = new JpegBitmapEncoder();

            Encoder.Frames.Add(BitmapFrame.Create(MyRender));

 

            using (System.IO.Stream BirStream = System.IO.File.Create(Dosya))

            {

                Encoder.Save(BirStream);

            }

Kod içerisinde yazdığım açıklamalar sanırım detaylar için yeterli olacaktır. RenderTargetBitmap sınıfından aldığımız instance'ın Render metoduna verdiğimiz Visual tipindeki herhangi bir nesnenin görselliğini alarak istediğimiz bir Encoder tipi ile Encode edip diske rahatlıkla kaydedebiliyoruz.

Hepinize kolay gelsin.

Saturday, December 06, 2008 2:30:31 PM (GTB Standard Time, UTC+02:00)  #    Comments [1]   WPF  | 
 Friday, December 05, 2008

Makalemize ilk olarak MultiPoint programlamanın ne olduğunu tanımlayarak başlayalım. Bugün bilgisayarlarımızda alıştığımız sistem sadece tek bir Pointer / İmleç kontrol etmeye dayanır. Örneğin bilgisayarınıza iki fare bile bağlasanız aslında her ikisi de aynı imleci kontrol eder. Oysa geleceğe baktığımızda artık birden çok Pointer'ın bulunduğu sistemlere doğru ilerliyoruz hatta birden çok imlecin tabi ki farklı kullanıcılar tarafından kullanıldığını da görebiliyoruz. Özellikle i-Phone ile popülerleşen Surface Programming mantığına kısmen yakın olsa da MultiPoint programlamada her bir Point'in kesinlikle ayrı kimliklere ait olduğu varsayılır. Bu varsayımla en azından hangi noktaların hangi kimliğe ait olduğunu bulma gibi bir dertlerle uğraşmaya gerek kalmıyor.

Özetle bu yazımızda amaçladığımız şey bilgisayarımıza bağlı farelerin farklı imleçler şeklinde ekrana yansımasını sağladıktan sonra oluşturacağımız bir düğme kontrolüne de hangi kullanıcının tıkladığını algılayabilecek kodu yazmak.

MultiPoint SDK

Windows ortamında .NET ile MultiPoint uygulamaları geliştirmek istiyorsanız donanımla doğrudan uğraşmamak adına işinizi kolaylaştırabilmek için Microsoft tarafından bir SDK paketi yayınlanmış durumda. MultiPoint SDK olarak geçen paketi bilgisayarınıza yüklediğimizde projelerimizde kullanacağımız kütüphaneleri de edinmiş oluyoruz.

http://www.microsoft.com/downloads/details.aspx?FamilyID=a137998b-e8d6-4fff-b805-2798d2c6e41d&displaylang=en

Yeni bir MultiPoint projesi yaratalım.

Visual Studio içerisinde yeni bir WPF projesi yaratalım ve MultiPoint kütüphanelerini referans olarak ekleyelim. MultiPoint DLL'lerini doğrudan MultiPoint'in yüklendiği klasörün içinde Bin klasöründe bulabilirsiniz. DLL'lerin yanı sıra yarattığımız projeye sağ tuş tıklayarak "Add Existing Item" diyip yine Bin klasöründeki Microsoft.MultiPoint.MultiPointSDK.dll.config dosyasını de eklemeliyiz. Artık her şey hazır, sıra geldi kodlamaya.

İlk olarak uygulamamız için MultiPointSDK'dan bir Instance almamız gerekiyor. Söz konusu değişkenin uygulama genelinde kullanılabilmesi için Application.xaml'ın arkasında tanımlanmasında fayda var.

[VB]

Class Application

 

    Public Shared MultiPointObject As Microsoft.MultiPoint.MultiPointSDK.MultiPointSDK = Microsoft.MultiPoint.MultiPointSDK.MultiPointSDK.GetInstance

 

End Class

[C#]

using Microsoft.MultiPoint.MultiPointSDK;

 

class Application

{

    public static MultiPointSDK MultiPointObject = MultiPointSDK.GetInstance;

}

Application.xaml'ın arkasında yukarıdaki kodumuzu yazdıktan sonra WPF uygulamamızın ana penceresine geçerek MultiPointObject değişkenimizi kullanabiliriz.

[VB]

Application.MultiPointObject.RegisterMouseDevice()

Application.MultiPointObject.CurrentWindow = Me

Application.MultiPointObject.DrawMouseDevices()

MultiPointSDK.SystemCursorPosition = New Point(Me.Left + 10, Me.Top + 10)

MultiPointSDK.HideSystemCursor()

[C#]

Application.MultiPointObject.RegisterMouseDevice();

Application.MultiPointObject.CurrentWindow = this;

Application.MultiPointObject.DrawMouseDevices();

MultiPointSDK.SystemCursorPosition = new Point(this.Left + 10, this.Top + 10);

MultiPointSDK.HideSystemCursor();

Bir sonraki adımda WPF uygulamamızın ana ekranında Page.Load event'ı içerisinde yukarıdaki kodları yazıyoruz. Böylece o an sisteme bağlı fareleri algılayarak ekrana getirebiliyoruz. Bu işlemi yaparken normal imleci de görünmez hale getiriyoruz. Aslında MultiPoint API'ları bizim yerimize donanım olarak var olan her bir fare için ayrı ayrı imleçler yaratıyor. Sistemde o an var olan tüm farelerin bir listesini Application.MultiPointObject.MouseDeviceList dizisinde bulabilir ve her bir MultiPointMouseDevice için ayrı ayrı DeviceVisual tanımlayarak imleçleri değiştirebilirsiniz.

Kendi kontrollerimizi yaratmamız gerek....

Aslında sıfırdan kontrol yaratmaktan bahsetmiyoruz fakat maalesef ki hali hazırdaki WPF kontrollerinin hiçbiri MultiPoint desteklemiyor. Yani hiçbiri farklı imleçler ve onların kimliklerinden haberdar olamıyor. Bu nedenle bizim kendi kontrollerimizi hazırlamamız gerekecek. Bu kontrolleri yaratırken IMultiPointMouseEvents ve IMultiPointGenericDeviceEvents interfacelerini implemente edersek aslında çoğu işlemi yine MultiPoint kütüphanelerine paslamış oluyoruz. Gelin bir Button yaratarak nasıl ilerleyebileceğimizi görelim.

[VB]

Public Class MultiPointColorButton

    Inherits System.Windows.Controls.Button

    Implements IMultiPointMouseEvents

    Implements IMultiPointGenericDeviceEvents

 

End Class

[C#]

public class MultiPointColorButton : System.Windows.Controls.Button, IMultiPointMouseEvents, IMultiPointGenericDeviceEvents

{

}

Yukarıdaki kodları yeni yarattığınız bir VB veya C# dosyasına yapıştırabilirsiniz. Aslında işlemler çok basit; sistemde tanımlı herhangi bir kontrol olarak Button kontrolünü alıp MultiPoint kütüphanelerinden gerekli arayüzleri dahil ediyoruz. Böylece otomatik olarak birçok yeni event tanımlanmış oluyor. İkinci adımda işin biraz karışık kısmına doğru geçiş yapacağız. MultiPoint kütüphanesi ile gelen eventları her bir fare cihazı için ayrı ayrı oluşturuluyor bizim bunları doğru bir şekilde ayrı bir genel geçer eventlar tanımlayarak onlara bağlamamız gerek.

[VB]

    Public Custom Event CustomClick As RoutedEventHandler

        AddHandler(ByVal value As RoutedEventHandler)

            MultiPointMouseEvents.AddMultiPointMouseDownHandler(Me, value)

        End AddHandler

        RemoveHandler(ByVal value As RoutedEventHandler)

            MultiPointMouseEvents.RemoveMultiPointMouseDownHandler(Me, value)

        End RemoveHandler

        RaiseEvent(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)

        End RaiseEvent

    End Event

[C#]

    public event RoutedEventHandler CustomClick {

        add { MultiPointMouseEvents.AddMultiPointMouseDownHandler(this, value); }

        remove { MultiPointMouseEvents.RemoveMultiPointMouseDownHandler(this, value); }

    }

Yukarıdaki kodlarda kendi tanımladığımız eventların ataçlanması ve detaçlanması noktasında yapılacak işlemleri de biz belirliyoruz ve elimizde MultiPoint kütüphanesinden gelen metodları kullanıyoruz. Kodumuzda da görebileceğiniz gibi MultiPoint ile kullanılabilecek her durum için ayrı ayrı event bağlama metodları MultiPointMouseEvents sınıfı altında bulunuyor. Biz şimdilik Button kontrolümüze sadece MultiPoint için Click event'ını tanımlamış olduk. Kullanacağınız tüm event'ları bu şekilde tanımlamak zorundasınız.

Peki nasıl kullanacağız?

İsterseniz kod tarafında otomatik olarak bu kontrollerden yaratıp uygulamanıza ekleyebilirsiniz. Eğer XAML tarafında yarattığımız bu Button kontrolünü kullanmak isterseniz XAML'da uygulamanızın XML NameSpace'larını yaratmanız gerek. Bir anlamda XAML tarafına kodumuzu "import" etmek olarak tanımlayabiliriz bu işlemi.

[XAML]

<Window x:Class="Window1"

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

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

  xmlns:Daron="clr-namespace:MPP"

  Title="MultiPointPaint" Height="480" Width="640" >

Yukarıda gördüğünüz kod yarattığımız uygulamanın ana penceresinin XAML kodunun başlangıcı. Burada ben Daron adında bir XML namespace yaratarak onu da arka planda adı MPP olan uygulamamın ana sınıfına bağladım. Zaten tüm bu kodlar otomatik olarak Intellisense içerisinde geliyor.

[XAML]

    <Daron:MultiPointColorButton Background="#FF000000" Content="Exit" x:Name="btnExit" VerticalAlignment="Center" HorizontalAlignment="Center" Width="50"/>

Bir önceki adımda kodunu yazdığımız ve adını da MultiPointColorButton verdiğimiz düğmemizi XAML tarafında yukarıdaki şekilde kullanabiliyoruz. Eğer XML NameSpace tanımını doğru yaptıysanız XAML kodları içerisinde de NameSpace'in adını yazdıktan sonra içerisindeki bütün kontrollerin listesi Intellisense'de görebilirsiniz.

Düğmemizi de yarattığımıza göre son olarak code-behind tarafına geçip daha önce tanımladığımız CustomClick adındaki özel event'ı kullanarak düğmeye tıklayan imleçleri ve kullanıcıları algılayabiliriz.

[VB]

Private Sub Color_CustomClick(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)

        Dim MyDeviceInfo As DeviceInfo = CType(e, MultiPointMouseEventArgs).DeviceInfo

        Dim MyMultiPointMouseDevice As MultiPointMouseDevice = CType(MyDeviceInfo.DeviceVisual, MultiPointMouseDevice)

        MessageBox.Show(MyMultiPointMouseDevice.DeviceId)

End Sub

[C#]

private void Color_CustomClick(object sender, System.Windows.RoutedEventArgs e)

{

    DeviceInfo MyDeviceInfo = ((MultiPointMouseEventArgs)e).DeviceInfo;

    MultiPointMouseDevice MyMultiPointMouseDevice = (MultiPointMouseDevice)MyDeviceInfo.DeviceVisual;

    MessageBox.Show(MyMultiPointMouseDevice.DeviceId);

}

Kod içerisinde de görebildiğiniz üzere aslında event-listener'lara gelen RoutedEventArgs'ın kendisi bir MultiPointMouseEventArgs. Biz bu parametre üzerinden DeviceInfo'nın DeviceVisual'ını MultiPointMouseDevice olarak alabiliyoruz. Sonuç olarak bu değişken üzerinden de DeviceID geliyor. Tahmin edebileceğiniz gibi sisteme bağlı her cihazın kendine özel bir DeviceID'si var ve biz de bu ID'ler üzerinden imleçlerin kimliklerini ayırt edebiliyoruz. Artık gerisi sizin hayal gücünüze kalmış ;)

Hepinize kolay gelsin.

Friday, December 05, 2008 5:51:20 PM (GTB Standard Time, UTC+02:00)  #    Comments [6]   WPF | MultiPoint SDK  | 
 Thursday, December 04, 2008

Silverlight dünyasında 1.0 sürümü ile başlayan video uygulamalarındaki yüksek performans gibi avantajların yenileri 2.0 sürümünde de tabi ki devam ediyor. Bu yenilikler arasında en ilginçlerinden biri Adaptive Streaming. Bugün internet ortamında video yayını dediğimizde en büyük sorunlarımızdan biri farklı bant genişliklerine hitap edebilecek içeriği oluşturmak. Maalesef ülkemizde 1 MBit bağlantıyı baz alarak ilerlemek zorunda kalsak da aslında 4 MBit'e kadar ADSL hatlarının kullananların sayısı hiç de az değil. Peki tüm bu kullanıcılara en uygun kalitede video yayınını nasıl yapabiliriz?

Farklı bant genişliklerine farklı kalitelerde video yayını!

Bu hiç de yabancı olduğumuz bir çözüm değil. Elimizdeki video dosyasını farklı bitrate'lerde encode ederiz ve kullanıcılara sitemize girdiklerinde farklı seçenekler sunarız. Her kullanıcı kendi bağlantısına göre istediği kaliteyi seçer. Peki ya videoyu seyrederken bant genişliğinde değişiklikler olursa? Varsayalım ki kullanıcımız paylaşımlı internet bulunan bir ortamda ve kişisel olarak elde ettiği bant genişliği değişebiliyor. Bu durumda ne yapacağız? Tabi ki "Yükleniyor." mesajları göstereceğiz, yapacak pek bir şey yok! Aslında var!

Adaptive Streaming! Bırakın yayın akışı bant genişliğine uysun!

Silverlight 2.0 ile beraber kullanabildiğimiz Adaptive Streaming teknikleri ile artık videonuzun kalitesi ile kullanıcının bant genişliği arasında ilişki ile ilgilenmeniz gerekmiyor. Adaptive Streaming otomatik olarak kullanıcının bant genişliğini algılayarak uygun kalitedeki video dosyasının sunucudan çekiyor. Hatta bunu sadece video ilk oynatılırken değil video oynatıldığı sürece yapıyor! Böylece videoyu başta kaliteli bir şekilde izleyen bir kullanıcının bant genişliği düştüğünde video duracağına ve "yükleniyor" mesajları gösterileceğine videonun daha düşük kaliteli sürümlerine otomatik geçiş yapılıyor. Tabi ki bu geçişlerin hepsi otomatik olduğu üzere video duraksamıyor ve kullanıcılarımız hiçbir şey hissetmiyor. Peki tüm bunlar için biz ne mi yapıyoruz? Hmm bir kaç düğmeye tıklamak.

Expression Encoder 2 SP 1 ile gelenler!

Adaptive Streaming için video içeriği hazırlamanın birkaç yolu var. Aslında ilki oturup gerekli dosyaları tek tek encode ederek gerekli manifest XML dosyalarını da elle hazırlamak. Fakat bu zahmete girmek yerine doğrudan Expression Encoder 2'yi de kullanabilirsiniz. SP1 ile beraber Expression Encoder'a gerekli Adaptive Streaming şablonları da eklendi.

Adaptive Streaming için seçenekler.
Adaptive Streaming için seçenekler.

Video profili olarak "Adaptive Streaming"i seçtiğinizde varsayılan ayarları ile dört farklı kalitede videonun encode edilmesi sağlanacaktır. İsterseniz ek kalite sekmeleri tanımlayabilir veya var olanları değiştirebilirsiniz. Tüm bu ayarları tamamladıktan sonra sıra geliyor Adaptive Streaming için hangi altyapıyı kullanacağınıza.

Adaptive Streaming için ne kullanalım?
Adaptive Streaming için ne kullanalım?

Adaptive Streaming ile yayın yapmanın birkaç yolu var ama bunların öncesinden şu ufak detaylardan bahsedelim. Adaptive Streaming sadece HTTP üzerinden çalışıyor. Zaten Silverlight'ın MMS üzerinden de HTTP protokolü ile çalıştığını biliyoruz. O nedenle pek bir değişiklik yok fakat ek olarak burada yarattığımız tüm video dosyalarının doğrudan HTTP üzerinden yayınlanması gerektiğini hatırlatmak isterim. Yani dosyalar IIS gibi bir web sunucusunu üzerinden sunulmalı.

Yukarıdaki ekran görüntüsünde de görebileceğiniz üzere Expression Encoder bizden bir seçim daha yapmamızı istiyor. "Output Mode" olarak kastedilen aslında Adaptive Streaming için dosyaların ve Manifest'lerin nasıl hazırlanması gerektiği ile ilgili. Eğer "IIS Smooth Streaming"i işaretlerseniz manifest harici bir XML olarak tutuluyor. "ASF" seçeneği ise duruma göre tek bir dosyada tüm farklı streamleri ve manifesti veya her stream için bir dosya ve dahili manifestleri oluşturuyor.

Ama tüm bunları kullanabilene kadar yaklaşık bir altı ay kadar beklemeniz gerekecek :) Bunun nedeni "Smooth Streaming" için IIS tarafında yüklü olması gereken HTTP Handler'ların daha Microsoft tarafından yayınlanmamış olması. "Smooth Streaming" handlerlarının 2009'un ilk çeyreğinde yayınlanması bekleniyor. Tabi MS'ten önce bu konuda başka bir sunucu altyapısı için kendi HTTP Handler'ını yazan olmaz ise :) sonuçta kodlar açık.

Peki ne yapacak Smooth Streaming?

IIS tarafında çalışacak olan Smooth Streaming altyapısını şu an http://www.smoothhd.com/ adresinden test edebilirsiniz. Tabi gerçekten HD kalitesine ulaşabilmek için bağlantınızın kuvvetli olması şart aksi halde sistem düşük kaliteye otomatik olarak geçecektir.

Smooth Streaming sunucu tarafında video dosyalarını tamamen istek üzerine parçalara bölerek istemciye gönderiyor. Bu parçaları ayrı ayrı 2, 3 saniyelik video dosyaları olarak düşünebilirsiniz. Bu parçalama sistemi sayesinde internetin doğasında yer alan proxy ve cache mekanizmalarından otomatik olarak video içerikleri de faydalanmış oluyor.

İstemci tarafındaki tüm işlemler ise MediaStreamSource sınıfı ile hallediliyor. Bu sınıf ile gelen videodan kaç karenin eksik olduğu ve saniyede kaç karenin mevcut internet hattı üzerinden alınabildiği gerçek zamanlı olarak kontrol edilerek kaynak değişimi yapılabiliyor. Tüm bu işlemleri yapacak olan kodları ayrı bir AdaptiveStream sınıfı olarak Expression Encoder 2 SP1 ile beraber gelen Silverlight 2 video oynatıcılarına dahil edilmiş durumda. İsterseniz haricen bu sınıfları alıp kendi yarattığınız uygulamalara da ekleyebilirsiniz.

Şimdilik bu kadar, IIS 7 için "Smooth Streaming" yayınlandığında işin sunucu tarafına da ayrı bir yazıda değineceğiz.

Hepinize kolay gelsin.

Thursday, December 04, 2008 9:13:41 PM (GTB Standard Time, UTC+02:00)  #    Comments [4]   Silverlight 2.0  | 
 Wednesday, December 03, 2008

Bugün Microsoft'un Yazılım Geliştiriciler Zirvesi gerçekleştirildi. Benim de sizlere daha önce duyurduğumuz üzere Silverlight 2.0 oturumunu ben sundum. Ayrıca Live Framework ile ilgili oturuma da konuk konuşmacı olarak katılma şansım oldu :)

Microsoft Yazılım Geliştiriciler Zirvesi, Silverlight 2 Oturumum
Microsoft Yazılım Geliştiriciler Zirvesi, Silverlight 2 Oturumum

45 dakika süren oturumda WCF ile sunucudan veri çekerek bir Silverlight DataGrid'inde gösterip, sıfırdan bir DeepZoom uygulaması yapıp bir de Expression Encoder ile video player yarattık. Her üç demoyu da bu 45 dakikaya sıkıştırmak için yine epey hızlı konuşmak zorunda kaldım fakat katılımcıların hepsinin de yazılımcılar olduğunu düşünürsek sanırım beni anlayabilmişsinizdir :)

Gün boyunca epey yoğun bir trafik vardı ama bir o kadar da zevkliydi. Gelen sorulardan tutun MVP standını ziyaret eden dostlara kadar her şey süperdi. Umarım aktiviteye gelen misafirlerimiz için de bir o kadar faydalı olmuştur etkinlik.

Zirvede kullandığım sunumu aşağıdaki adresten indirebilirsiniz;

Silverlight 2.0 Sunumum - 03122008_2.pptx (298,82 KB)

Hepinize kolay gelsin.

Wednesday, December 03, 2008 11:54:52 PM (GTB Standard Time, UTC+02:00)  #    Comments [12]   Seminer | Silverlight 2.0  | 
 Tuesday, December 02, 2008
Get Microsoft Silverlight

Yarın Microsoft Yazılım Geliştiriciler Zirvesi var. Daha önce size detaylarını aktardığım aktivite için Microsoft Türkiye'ye Silverlight ile bir Vista Gadget'ı hazırladık. Vista Gadget'ları hazırlamanın belki de en zor kısmı JavaScript ile uğraşmaktır. İşte bu dertten Silverlight ile kurtulabiliyoruz ve Gadget geliştirmek gerçekten çok zevkli bir hal alıyor. Tüm bu kolaylıklara ek olarak tek bir Silverlight geliştirip hem Vista Gadget'ı hem de yandaki gibi Widget tadında kullanabiliyorsunuz :)

Hazırladığımız Gadget'ı ve içerisindeki Silverlight uygulamasının kaynak kodlarını aşağıdaki adresten indirebilirsiniz;

Silverlight ile Vista Gadget Kaynak Kodları - 02122008_2.rar (206,82 KB)

Not: Normalde Silverlight uygulaması Gadget olması için yani Windows'ta çalışacak şekilde hazırlandığı için pek optimizasyonu yok o nedenle webden bu şekilde kullanımda boyutu biraz büyük kalıyor :) Şimdilik hoş görün ;)

Tuesday, December 02, 2008 11:02:38 PM (GTB Standard Time, UTC+02:00)  #    Comments [5]   Silverlight 2.0 | Vista  | 
 Monday, December 01, 2008

Son üç gündür Isparta, Süleyman Demirel Üniversitesi'ndeydim. Cumartesi günü başladığımız INETA Boot Camp Isparta etkinliğimizde LINQ ve WCF konularını işledik. Pazar günü Microsoft'un Oyun Turu'nun da Isparta ayağını kampımıza ekleyerek dün de bahsettiğim gibi SL 2.0 ile ve XNA ile Oyun Programlama konularını inceledik. Son günümüz olan Pazartesi günü de ASP.NET Dynamic Data Web Site yapılarını göz attık sonra "Silverlight 2.0 ile Data Uygulamaları" ve "WPF" oturumlarımızı tamamladık. Böylece dolu dolu bir üç gün geçirdik.

Isparta, Süleyman Demirel Üniversitesi, INETA Boot Camp
Isparta, Süleyman Demirel Üniversitesi, INETA Boot Camp

Etkinliklere katılan hem konuşmacı arkadaşlarıma hem de sevgili öğrenci kardeşlerime çok teşekkür ediyorum. Geçen öğretim yılında da Süleyman Demirel Üniversitesi'nde gittiğimde blogumda yazmıştım hatta dün de yazmışım :) SDÜ'nün yeri benim için çok ayrı. Yukarıda resimde gördüğünüz tüm öğrencilerin Silverlight ve WPF konulu ödevleri var. Hepsi giriş seviyesini çoktan geçmiş durumda. Bu duruma tabi ki öğretim görevlilerinin katkısı çok büyük.

Özellikle organizasyonun gerçekleşmesindeki katkılarından dolayı sevgili Eğitim Görevlisi dostum Mehmet Albayrak'a çok teşekkür ediyorum.

Son gün yaptığımız bazı örnekleri toparlayıp bir poşete koydum :) aşağıdaki linkten indirebilirsiniz.

Örneklere ait kaynak dosyalar - 01122008_2.rar (2,81 MB)

Monday, December 01, 2008 2:57:22 PM (GTB Standard Time, UTC+02:00)  #    Comments [3]   ASP.NET 3.5 | Expression Blend | LINQ | Silverlight 2.0 | WCF | WPF  | 
Copyright © 2010 Daron Yöndem. Tüm hakları saklıdır.