Maçka Teknik Lisesi Seminer

Wednesday, April 30, 2008 5:46:41 PM (GTB Standard Time, UTC+02:00)
25.04.2008 tarihinde Maçka Teknik Lisesi öğrencileri ile IT' de Yazılım' ın Yeri başlıklı çok zevkli bir seminer gerçekleştirdik. Pratik kodlamadan öte öğrencilerin iş yaşamı üzerine konuştuk, sektör ile ilgili sorularını yanıtladım.

Seminere 48 kişi katıldı, resimleri aşağıdadır.








Günün Lafı

Tuesday, April 29, 2008 12:41:04 AM (GTB Standard Time, UTC+02:00)
Head First - Design Patterns kitabından "Design Patterns" için mükemmel bir söz ;

"Instead of code reuse, with patterns you get experience reuse."

Ne kadar önemli değilmi ? :-)

Avcılar Anadolu Meslek Lisesi Seminer

Saturday, April 26, 2008 9:58:19 PM (GTB Standard Time, UTC+02:00)
21.04.2008 tarihinde Baki Onur Okutucu arkadaşım ile birlikte Avcılar Anadolu Meslek Lisesin' de tam 167 kişinin katıldığı 2.5 saatlik mükemmel bir panel gerçekleştirdik. Panel' de Bilişim Teknolojileri Sektöründe gelecek 5 yıl ile ilgili 10 - 11 - 12. sınıf öğrencileri ayrıntılı bir şekilde bilgilendirildi. Seminerin neredeyse tümünde ilgili öğrencilerin soruları cevaplandı, Yazılım ve Sistem kavramları üzerine değinildi.

Seminer resimleri aşağıdadır.








Yıldız Teknik Üniversitesi Davutpaşa Kampüsü Seminer

Saturday, April 26, 2008 9:52:53 PM (GTB Standard Time, UTC+02:00)
15.04.2008 tarihinde YTÜ Davutpaşa Kampüsü öğrencileri ile birlikte Yazılım' ın Günümüzdeki Yeri ve .Net Platformu üzerine mükemmel bir seminer gerçekleştirdik. Seminere katılım ciddi anlamda fazlaydı. Seminer' de öğrenciler ile programlama teknikleri ve .Net' in faydaları üzerine konuşuldu.

Seminerin sonunda C# ile örnek bir uygulama geliştirdik. Öğrenciler için bu uygulama çok keyif verici oldu.

Seminere toplam 151 öğrenci katıldı.

Resimleri aşağıdadır.








Haydar Akın Anadolu Meslek Lisesi Seminer

Saturday, April 26, 2008 9:46:09 PM (GTB Standard Time, UTC+02:00)
14.04.2008 tarihinde Haydar Akın Anadolu Meslek Lisesi öğrencileri ile birlikte Bilişim Teknolojileri sektöründe yazılım' ın yeri ve .Net platformu üzerinde mükemmel bir seminer gerçekleştirdik.

Seminere katılan öğrencilerin .Net konusunda bilgili olmaları ayrı bir keyif vericiydi. Öğrenciler ile sohbet ettikten sonra ortak kararlaştırılan örnek bir proje ve akabinde .Net teknolojileri ile Mobil Cihaz Uygulaması geliştirdik.

Seminere toplam 46 kişi katıldı. Seminer sonunda öğrencilerin ve hocalarının sorularını yanıtladım.

Seminer resimleri aşağıdadır.






Borusan Asım Kocabıyık Anadolu Meslek Lisesi Seminer

Saturday, April 26, 2008 9:40:17 PM (GTB Standard Time, UTC+02:00)
14.04.2008 tarihinde Borusan Asım Kocabıyık Anadolu Meslek Lisesi 11. sınıf öğrencileri ile birlikte Bilişim Teknolojileri sektöründe Yazılım' ın yeri, Yazılım' ın kazandırabilecekleri ve gelecek planları üzerine çok zevkli bir seminer gerçekleştirdik.

Seminerin bir sonraki aşamasında .Net platformu üzerinde Mobil Cihaz Uygulamaları üzerine konuştuk ve örnek uygulama geliştirdik.

Seminere toplam 117 öğrenci katıldı, seminerden sonra öğrencilerin soruları üzerine tartıştık.

Seminer resimleri aşağıdadır.



Remzi Bayraktar Anadolu Meslek Lisesindeydim !

Wednesday, April 09, 2008 7:19:27 PM (GTB Standard Time, UTC+02:00)
09.04.2008 tarihinde Remzi Bayraktar Anadolu Meslek Lisesindeki öğrencilerle .NET Teknolojileri ile ilgili çok zevkli bir seminer gerçekleştirdik. Seminere 91 kişi katıldı. Seminerde .NET Teknolojilerinin günümüzdeki yeri ve yazılım sektörü hakkında sohbet ettik, seminer bitiminde öğrencilerin soruları üzerine konuştuk.

Ayrıca C# ile bir Windows Uygulaması geliştirdik.

Seminer' in resimleri aşağıdadır.



Ümraniye Anadolu Meslek Lisesindeydim !

Tuesday, April 08, 2008 8:23:27 AM (GTB Standard Time, UTC+02:00)
01 Nisan 2008 tarihinde Ümraniye Anadolu Meslek Lisesi öğrencileriyle IT' de Yazılım Kariyer ve .NET Uygulamaları konulu çok zevkli bir seminer gerçekleştirdik.

Seminerde öğrencilere IT sektöründe yazılım' ın yeri, yazılım sektöründe gelebilecekleri noktalar ve potansiyelleri üzerine konuştuk.

Ayrıca .NET Platformunun yazılım geliştirme konusunda neler getirdikleri hakkında güzel bir sunum ; ardından C# ile örnek bir uygulama geliştirdik.

Seminere yaklaşık 120 öğrenci katıldı. Resimleri aşağıdadır.





OpenXML Artık Bir ISO Standardı

Thursday, April 03, 2008 8:37:45 PM (GTB Standard Time, UTC+02:00)
OpenXML artık bir ISO standardı . 87 Üye Ülkenin katılımıyla gerçekleşen standartlaşma süreci
bugün itibarıyla nihayete erdi ve Open XML açık dosya saklama standardı olarak ISO tarafından
onaylandı. Open XML 87 Ülkenin %86'sı gibi büyük bir çoğunluğunun desteğini aldı.

ECMA'nın konuyla ilgili açıklamasına
http://www.ecmainternational.org/news/
TC45_current_work/ISO_and_IEC_approve_Office_Open_XML.htm 
linkinden erişebilirsiniz.

Microsoft'un basın duyurusuysa
http://www.microsoft.com/presspass/press/2008/
apr08/04-01OpenXMLVotePR.mspx
linkinde yer almakta.

Microsoft Most Valuable Professional !

Tuesday, April 01, 2008 10:05:35 PM (GTB Standard Time, UTC+02:00)

Merhaba,

Bu sevincimi sizlerle paylaşmak benim için çok büyük bir mutluluk olacaktır.

Bugün akşam saatlerinde aldığım bir elektronik posta vasıtasıyla öğrendiğim üzere, Microsoft' un yılda 10 kişiyi seçtiği ve Türkiye sınırlarında an itibariyle toplam 42, Dünya üzerinde ise 4000 kişiyi seçtiği MVP ünvanına layık görülmüşüm !

Layık görüldüğüm kategori ise : Device Application Development

Bu sonuca ulaşmam yolunda Türkiye MVP Lead' i Mehmet Emre ve Baransel Doğan olmak üzere emeği ve desteğini esirgemeyen herkese çok çok teşekkür ederim !

EkinÖ

 

Bilgisayarınızın CPU Numarasını Almak

Wednesday, February 27, 2008 9:02:53 AM (GTB Standard Time, UTC+02:00)
Bilgisayarınızın CPU numarasını aşağıdaki kod bloğu ile alabilirsiniz.
ManagementObjectCollection mbsList = null;
ManagementObjectSearcher mbs = new ManagementObjectSearcher("Select * 
From Win32_processor"
); mbsList = mbs.Get(); foreach (ManagementObject mo in mbsList) {    MessageBox.Show(mo["ProcessorID"].ToString()); }

.net Micro Framework ?

Monday, February 25, 2008 12:14:53 AM (GTB Standard Time, UTC+02:00)

image

Merhaba,

Bir süredir üzerinde çalıştığım bir framework hakkında sizleri kısaca bilgilendirmek istiyorum ; .net Micro Framework. Belki Türkiye' de bu konu ile ilgili çalışan çok fazla Developer yoktur ama incelendiğinde olayın ne boyutlara geldiği çok rahat bir şekilde anlaşılabiliyor.

.net Micro Framework ile "gerçekten hafıza kısıtlı cihazlara" (Buzdolabı, saat v.s.) managed C# uygulamaları geliştirebiliyorsunuz ! Evet yanlış duymadınız, minicik bir belleğin içerisine yerleştirilmiş mükemmel hazırlanmış bir framework ile managed ortamda o çok sevdiğimiz Vs.Net ortamında C# ile tamamen hazıfa kısıtlı cihazlara uygulama geliştirebiliyoruz.

image

Üzerinde çalışıyorum, örnek uygulamalar geliştirdikçe sizlerle paylaşacağım.

http://msdn2.microsoft.com/en-us/embedded/bb267253.aspx

http://en.wikipedia.org/wiki/.NET_Micro_Framework

Çözüm Park Beta Yayınına Başladı !

Sunday, February 24, 2008 9:25:32 PM (GTB Standard Time, UTC+02:00)

Çözüm Park

Çok yakın dostum, sevgili Hakan UZUNER kardeşimin community' si, CozumPark, Microsoft Türkiye Sponsorluğunda hizmete açılmıştır. Portal üzerinden sistem / network ile ilgili yüzlerce makale, binlerce post' a ve en önemlisi onbinlerce üyenin bulunduğu bir paylaşıma dahil olabiliyorsunuz.

Hayırlı olsun !


LINQ ile MAC Adreslerini Almak

Sunday, February 24, 2008 12:00:44 PM (GTB Standard Time, UTC+02:00)

Merhaba,

Bir projede lokal makinemin MAC Adreslerini alma ihtiyacim olmuştu. LINQ ile bu çözümü aşağıdaki kod bloğu ile sağlayabilirsiniz.

using System.Net.NetworkInformation;
 
var MacAddresses = from m in NetworkInterface.GetAllNetworkInterfaces() 
    select new { Isim = m.Name , 
                 Adres = m.GetPhysicalAddress().ToString() };

Nvidia ve Ati PDA için 3D Hızlandırıcı Peşinde

Friday, February 22, 2008 12:49:02 PM (GTB Standard Time, UTC+02:00)
Ati RadeOn II ve Ati Rage Theather Ati'nin bir sonraki planı. Bir fransız sitesinin Ati'den bir kişi ile Cebit'tekiradevuları sonucu edinilen bilgiler aşağıda.

* Ati bilinen PDA ve Telefonlar için çok çok az enerji harcayan Radeon VE tarzı bir 3D hızlandırıcı üretimi peşinde. Yıl sonuna kadar hazır olması bekleniyor. Nvidia'da bu yarışa dahil.
* RadeOn II Directx 8.0'ı Donanımsal bazda destekliyecek ve Ge-Force 3'ten biraz daha hızlı olması bekleniyor.
* Ati Tüm All-In-Wonder RADEON II Ekran kartlarına Rage Theater 2 entegre edecek. Bunun sayesinde MPEG4 bazlı video görüntülerini donanımsal olarak kodlayabilecek. Bu sadece çok güçlü video editing kartlarda mevcut. Çok önemli bir gelişme. Ayrıca sisteme DTS çözümleyicide eklemeyi düşünülüyor.

kaynak : donanimhaber

Delphi 2005 for .NET Compact Framework Technology Preview

Friday, February 22, 2008 12:33:07 PM (GTB Standard Time, UTC+02:00)


Bir Delphi programcısı değilim fakat Mobil Uygulama Geliştiricisi olarak Delphi' ci arkadaşları bilgilendirmek istedim :-)

C#' a geçmem ama Delphi ile .net Compact Framework üzerinde Mobil Cihaz Uygulaması geliştirmek istiyorum diyorsanız Delphi 2005' in .net Compact Framework için derleyicisini incelemenizi tavsiye ederim.

http://downloads.codegear.com/default.aspx?productid=8201

ReadOnly - WriteOnly Automatic Properties

Friday, February 22, 2008 12:21:58 PM (GTB Standard Time, UTC+02:00)
 C# 3.5 ile gelen yeniliklerden bir taneside Automatic Property' ler. Automatic property' ler ile normal şartlarda ;

private int GizliDegisken;
public int OrnekOzellik
{
    get
    {
       return this.GizliDegisken;
    }
    set
    {
       this.GizliDegisken = value;
    }
}
ifade edilen kod bloğunu eğer herhangi istisnati bir durum yok ise (Business Rule olabilir) aşağıdaki şekilde yazabilmekteyiz ;

public int OrnekOzellik { get; set; }
Compiler bu kod satırını derlediğinde aslında ilk örnekte ifade edilen kod bloğunu MSIL oalrak çıkarmaktadır.

Bir süre öncesine kadar internet üzerindeki birçok ortamda bu şekilde ifade edilen özellik tanımlamalarında ReadOnly ya da WriteOnly tanımlamasının yapılamadığı bunun çok büyük bir eksik olduğu yazılmaktaydı.

Yani ;

public int Ozellik { get; } gibi bir ifadenin normal şartlarda ReadOnly bir özellik olması beklenirken Compiler tarafından derlenmediğini ve hata verdiğini deneyerek farkedebilirsiniz.

Bunun çözümünü aşağıdaki şekilde C# 3.5' ta çözüme kavuşturmuşlar.

Olmasını istemediğini accessor' un başına private keyword' ünü ekleyerek özelliğin ReadOnly yada WriteOnly olmasını sağlayabilirsiniz.

public int Ozellik { get; private set; }

// ReadOnly Bir Ozellik

public int Ozellik { private get; set; }

// WriteOnly Bir Ozellik

YazGeliştir - Facebook Application

Thursday, February 21, 2008 3:17:57 PM (GTB Standard Time, UTC+02:00)
En son toplantıda aldığımız kararlardan biride YazGeliştir için bir Facebook uygulamasının geliştirilmesiydi. Bilindiği üzere Facebook milyonlara ulaşabilmek adına çok isabetli bir platformdur :-)

Bu görevi ben üstlenmiştim ve 2 gün önce vakit bulup uygulamayı geliştirdim.

Uygulama uygulamayı ekleyen kişinin profilinde YazGeliştir' e en son eklenen makalelerin linklerini ve bunları diğer arkadaşlarıyla paylaşabilecekleri bir arayüz sunmaktadır.



Uygulamanın eklenebilmesi için tabiki Facebook' a üye olmanız gerekmektedir.

Uygulamanın adresi :

http://apps.facebook.com/yazgelistir

Bilginize. :-)


Projemi ?!

Thursday, February 14, 2008 9:49:16 PM (GTB Standard Time, UTC+02:00)
Bir öğrencimin bana vermiş olduğu "proje analizi sürecini" gösteren mükemmel bir illüstrasyon. :-)

Tıklayın !

Microsoft Sync Framework

Sunday, February 03, 2008 9:38:33 PM (GTB Standard Time, UTC+02:00)
Şu aralar şahsımca süper bir konu üzerinde çalışmaktayım ; Microsoft Sync Framework.

Microsoft Sync Framework adından da anlaşılabileceği üzere bilgisayarlar ve cihazlar arası veri senkronizasyonu için kullanılabilecek yeni bir MS yaklaşımı.




Daha ayrıntılı bilgi için aşağıdaki post' u okuyabilirsiniz :

What Is Microsoft Sync Framework

C# null Coalescing Operator (??)

Sunday, February 03, 2008 9:05:39 PM (GTB Standard Time, UTC+02:00)

Daha önce kullandınızmı bilmiyorum fakat ternary operatörünün bir fan’ ı olarak C# 2.0 ile birlikte gelen null Coalescing Operator açıkçası çok hoşuma gitti.

Ternary Operatörünü hepimiz zaten bolca kullanmaktayız :

string Sonuc = (KullaniciAdi == null) ? “Kullanıcı Adı Bulunamadı” : KullaniciAdi;

Bu expression ‘ ı null Coalescing Operator ile çok daha kısa şekilde ifade edebiliyorsunuz.

string Sonuc = KullaniciAdi ?? “Kullanıcı Adı Bulunamadı”;

Mantık şudur ki eğer işin içerisinde null kontrolü varsa compiler ilk operand’ ın null olup olmadığını kontrol ediyor.

Eğer ilk operand null değilse expression’ ın sonucu ilk operand oluyor. Eğer null ise sonuç ikinci operand oluyor.

Genelde kullandığımız klasik Entity katmanında çok işe yarıyor.

Musteri adında bir entity sınıfımız ve ID üzerinden Musteri getiren bir Facade metodumuz olsun.
olduğunu düşünelim.

Musteri mst = GetMusteriByID(id) ?? new Musteri();

Eğer metodun sonucu null değil ise mst’ ye metotdan dönen instance atanıyor. null ise new Musteri(); çalıştırılıyor. :-)

YazGeliştir' den Ödül !

Wednesday, January 30, 2008 10:26:57 AM (GTB Standard Time, UTC+02:00)
Türkiye' de Yazılım Sektörü başta olmak üzere IT Sektörününde hizmet veren birçok arkadaşımız Microsoft Türkiye' nin Resmi Yazılım Geliştiriciler Topluluğu olarak adlandırılan YazGeliştir' de makeleler yayınlamaktadır.

Her arkadaşımız kendi uzmanlık alanı çerçevesinde birçok makale yayınlamakta, bu makaleler bu sektörde çalışan & çalışacak olan binlerce arkadaşımıza yardımcı olmaktadır.

2 gün evvel Microsoft Türkiye Dikilitaş' ta Marmara Salonunda çok eğlenceli bir YazGeliştir buluşması gerçekleştirdik. Toplantıya editörler ve yazıları belirli sayının üzerinde olan yazarlar davet edildi. Pizza yedik, tanıştık, konuştuk, güldük ve YazGeliştir' in 2008 yılındaki hedefleri üzerinde ayrıntılı bir sohbet gerçekleştirdik. Toplantı esnasında beni sevindiren bir olaydan bahsetmek istiyorum.

2007 yılında YazGeliştir bünyesinde kendi kategorim yani Mobil Teknolojiler kategorisinde en fazla, ayrıca tüm site içerisinde 4. en çok yazı yazan yazar olarak seçilmişim. Bunun karşılığında sevgili Yeliz Korkmaz' ın elinden alarak resimdeki ödüle layık görülmüşüm. Yazılarımı okuyan, destek veren herkese çok ama çok teşekkür ederim. Türkiye' de mobil programlama adına verebildiğim en ufak destek benim bu konudaki çalışmalarıma hırs katacaktır.




2008 yılında çok daha orjinal makaleler ile görüşmek dileğiyle, toplantının gerçekleştirilmesinde başta çok sevgili Mehmet Emre, Atakan Kesler , Selçuk Uzun ve Yeliz Korkmaz olmak üzere tüm YazGeliştir ailesine teşekkürlerimi iletirim.

Ekin ÖZÇİÇEKÇİLER

Silverlight - Nuri Çankaya Podcast

Tuesday, January 15, 2008 12:47:00 AM (GTB Standard Time, UTC+02:00)
Merhabalar,

Silverlight hakkında merak ettiğiniz birçok konuda sevgili Nuri Çankaya çok başarılı bir PodCast hazırlamış.

http://www.nuricankaya.com/download/sl.mp3

adresinden dinleyebilirsiniz.

Mobil Cihazlar için Facebook Uygulamaları

Sunday, January 13, 2008 12:00:04 AM (GTB Standard Time, UTC+02:00)

Facebook, facebook, facebook... 7' den 77' sine o herkes için bir fenomen.

Yazılım geliştiriciler perspektifinden bakıldığında facebook için uygulama yazmak gerçekten büyük bir eğlence.

Normal şartlarda kütüphanelerin tümü .Net Framework için geliştirilmişti.

Peki ya .Net Compact Framework ?

Aşağıdaki makaleyi inceleyin derim :-)

http://msdn2.microsoft.com/en-us/library/bb932386.aspx

Windows Mobile 7.0 ' dan ilk görüntüler !

Saturday, January 12, 2008 11:56:52 PM (GTB Standard Time, UTC+02:00)
Daha Windows Mobile 6.0 yüklü cihazlar yaygınlaşmadan 7.0' ın haberlerini almaya başladık. Pes doğrusu , bu ne hız ! :-)

İşte Microsoft' un mobil cihazlar için halen geliştirilme aşamasında olan işletim sisteminin net ortamına düşen ilk resimleri :

Review image
Windows Mobile 7.0 Resimleri İçin Tıklayın !

.Net Compact Framework 2.0 - .Net Compact Framework Assembly’ lerinin GAC’ a Yüklenmesi

Saturday, January 12, 2008 11:51:40 PM (GTB Standard Time, UTC+02:00)

.Net Framework kullanılarak geliştirilen masaüstü Windows uygulamalarında bildiğimiz üzere uygulama geliştiriciler geliştirdikleri uygulamalarının kullandıkları & refere ediyor durumda oldukları .Net Assembly’ lerini işletim sisteminin kök klasörü içerisinde bulunan Assembly klasörü içerisindeki havuzdan kullanabilmektedirler. Daha açık ifade etmek gerekirse Global Assembly Cache ismi ile ifade edebileceğimiz bu merkezcil havuz mekanizması yardımı ile birden çok uygulamanın aynı zaman sürecinde ihtiyaç duydukları assembly’ leri tek bir noktadan kullanılabilmesine olanak sağlayan bu sistem aynı assembly’ nin disk üzerinde defalarca kopyalanması ihtiyacına cevap olmaktadır.

Şekil üzerindende anlaşılabileceği üzere .Net Framework DLL’ lerinin tümü bu merkezcil havuz üzerinde kayıtlı bulunmakta ; bu DLL lere ihtiyaç duyan tüm uygulamalar aynı lokasyon üzerinden DLL’ in kopyasını oluşturmaya gerek duymadan rahatlıkla kullanabilmektedirler.

Global Assembly Cache ; kısa adıyla GAC’ ın sağladığı en mantıklı fayda ise aynı DLL’ in disk üzerinde bu DLL’ i her kullanan uygulama için defalarca tekrar tekrar kopyalanması yerine sunduğu merkezcil yapı olarak ifade edilebilmektedir. Bunun yanı sıra DLL’ in disk üzerinde oluşturulmuş tek bir kopyasının böyle bir havuz içerisinde uygulamala sunulmasının versiyonlama perspektifinden de fayda sağladığı çok açık bir şekilde farkedilebilmektedir.

Fakat günümüzdeki masaüstü bilgisayarlarının donanımsal yeterliliğini göz önünde bulundurduğumuzda disk alanı bakımından aslında çokta sorun yaşanmayacağını ; fakat merkezcillik açısından fayda sağlayacağı açık bir gerçektir.

Bu noktada makalemizinde konusunun temelini oluşturan önemli bir nokta üzerinden yazımıza devam edelim.

Bilindiği üzere uzun yıllardan beri mobil cihazlar üzerinde yaşanan bellek & donanım sıkıntıları uygulama geliştiricilerin başına dert olmaktadırlar. Bu tip cihazlara uygulama geliştiren uygulama geliştiriciler her türlü ihtimali göz önünde bulunduracak şekilde mobil cihaz uygulamalarını geliştirmekte ; yaşanabilecek bellek sıkıntılarının önüne geçebilmek adına ise uygulamalarda gerçekleştirilebildiği kadar kısma işlemine gitmektedirler (Thin Client).

Bu makalemizde ise belki gördüğünüzde “budamı vardı ?” diyebileceğiniz bir konu ile ilgili ; .Net Compact Framework DLL’ lerinin mobil cihazınız üzerinde Global Assembly Cache içerisine kopyalanarak merkezcil bir yapı üzerinden bellek tasarrufunun nasıl sağlanabileceği ile ilgili anlaşılır bir örnek uygulama geliştireceğiz.

Bu noktada konunun daha rahat anlaşılabilmesi açısından teorik ifadelerden öte pratiksel bakımdan çalışmaya hemen başlayalım. Senaryomuz gereği uygulamamız içerisinde basit bir executable uygulama ; bu uygulamanın kullandığıda bir DLL refere olarak kullanılacaktır. Gerçekleştirmek istiyor olduğumuz temel senaryo ise uygulamanın bu DLL’ e lokal lokasyonundan değilde ; mobil cihazımızın işletim sistemi içerisindeki Windows klasörü içerisinden merkezcil olarak ; GAC aracılığıyla erişecek olduğudur.

Hiç vakit kaybetmeden örnek uygulama üzerinde çalışmaya başlayalım. Konu ile ilgili önemli gereksinimler yazı içerisinde detaylı olarak anlatılacaktır.

İlk noktada GACAssembly isminde bir Mobil Cihaz Class Libraryı projesi açıyoruz.

Bu proje içerisine standart olarak eklenen fiziksel cs dosyasının ismini clGAC.cs olarak değiştiriyor ; şekildeki sınıfı fiziksel dosya içerisine ekliyoruz.

Projemizi build ediyoruz ve GAC’ a atılmak üzere geliştiriyor olduğumuz DLL ile ilgili “çok önemli” gerçekleştirmemiz gereken birkaç adım üzerinden uygulamamıza devam ediyoruz.

Bilindiği üzere bir DLL’ in GAC’ a atılabilmesi için gerçekleştirilmesi gereken en önemli adım DLL’ in Strong Name bir DLL olmasıdır. Bu noktada aynı yapı mobil cihazlar üzerindeki sistem içinde geçerlidir.

Mobil cihazlar üzerinde bir DLL’ in cihaz üzerinde GAC’ a gönderilebilmesi için DLL’ in strong name bir DLL olması gerekmektedir. Bu noktada strong name key file üretmek için Visual Studio 2005 Command Prompt penceresi üzerinden :

Şekildeki komutu çalıştırarak c:\Key.snk lokasyonunda bulunacak bir strong name key file oluşturuyoruz. Sıra geldi bu Key file ile DLL’ imizi ilişkilendirmeye. Bu noktada projenin özellikleri içerisinde bulunan Signing sekmesi içerisinde key dosyamızı DLL ile ilişkilendirip projeyi build ediyoruz.

İşte bu kadar ! Konu ile ilgili gerçekleştirilmesi gereken tüm işlemlerin neredeyse hepsi gerçekleştirilmiş durumda.

Sıra geldi test amaçlı geliştirilecek olan mobil cihaz uygulamamıza. Bu uygulama içerisinde senaryo gereği DLL içerisinde tanımlı olan sınıfımızın bir instance’ ı oluşturulacak ; kısaca uygulama bu DLL’ e ihtiyaç duyacak şekilde tasarlanacaktır.

Hiç vakit kaybetmeden mobil cihaz uygulamamızı geliştirmeye başlayalım. İlk noktada standart bir Mobil Cihaz Windows projesi açarak işe başlıyoruz.

Hız kesmeden uygulamamızı geliştirmeye devam ediyoruz. Amaç bir önceki adımda geliştirmiş olduğumuz DLL’ i kullanan standart bir uygulama geliştirmek olacaktır. Bu noktada ilk olarak DLL’ i projemize refere ediyoruz. Dikkat edilecek unsurlardan birisi ise DLL referansının Copy Local özelliğine false değeri verilmiş olduğudur. Bu değer DLL’ in uygulamanın çalıştırılıyor olduğu işletim sisteminin GAC’ ı üzerinden erişileceği anlamına geliyor olmaktadır.

Bir sonraki adımda şekildeki 3 satırlık kod bloğunu uygulama ekranının yüklenmesi esnasında çalıştırılacak şekilde tasarlıyoruz.

Ve bitti ! Uygulamamızı build ediyor ve ilgili adımları gerçekleştirmek üzere makalemize devam ediyoruz.

Bu noktada bir DLL’ in mobil cihazımız üzerindeki GAC’ a atılabilmesi için DLL’ in mobil cihaz üzerinde bir klasöre kopyalanmış olması gerekmektedir. Biz örnek olarak mobil cihazımızın kök klasörü içerisinde bulunan GACFiles isimli bir klasörün içerisine DLL’ imizi kopyalayacak ; bir sonraki adımda ise bu noktadan GAC’ a göndereceğiz.

DLL’ i mobil cihazımız üzerine kopyalamadan önce gerçekleştirmemiz gereken bir diğer önemli adım ise DLL’ in mobil cihaz üzerindeki fiziksel lokasyonunu belirten *.gac uzantılı bir metin dosyası oluşturmamız gerekliliğidir.

Hazırlanan bu dosyayı mobil cihazımız üzerinde bulunan Windows klasörü içerisine kopyalamamız gerekmektedir. Hiç vakir kaybetmeden *.gac uzantılı bu dosyayı oluşturuyor ; içerisine az sonra mobil cihazımız içerisine kopyalayacak olduğumuz DLL’ in adresini tanımlıyoruz.

Dosyayı *.gac uzantısıyla kayıt ediyoruz.

İşte bu kadar ! Sıra geldi üç dosyayı ilgili lokasyonlara kopyalarak GAC’ a kopyalama işini gerçekleştirmeye. Başka bir makalemizde ifade ettiğimiz üzere mobil cihazımız ile paylaşımlı kullanılacak şekilde bir klasörün içerisine EXE, DLL ve GAC Dosyalarını kopyalıyoruz.

Sıra geldi uygulamamızın en heyecanlı noktasına. Bu dosyalara bu klasör ile haberleşebilecek şekilde konfigüre edilmiş bir emülatör yardımıyla erişeceğiz ve sırasıyla şu adımları gerçekleştireceğiz :

Emülatörümüz üzerinde kök dizin içerisinde GACFiles isimli bir klasöre oluşturacak ; GACAssembly isimli DLL’ imizi bu klasörün içerisine kopyalacağız. GACSample.gac isimli dosyamızı Windows klasörü içerisine kopyalayacağız. Ve son olarak GACSample.exe isimli uygulamamızı çalıştırmaya çalışacağız.

.Net Compact Framework lokal lokasyon içerisinde DLL’ i bulamayacağından GAC içerisine bakacak ; ilk istekte bu lokasyondada bulamadığı için *.gac uzantılı dosya içerisinde dosyanın gerçek lokasyonuna erişecek ; ve bu lokasyondan DLL’ i GAC içerisine taşıyacaktır. Hepsi bu kadar !

Hiç vakit kaybetmeden ilgili işlemleri gerçekleştiriyoruz :

Emülatör içerisinde dosyalara erişebilmekteyiz. İlk olarak DLL’ imizi GACFiles isimli kök klasörün içerisine taşıyoruz.

Bir sonraki adımda *.gac dosyamızı Windows klasörü içerisine taşıyoruz :

Ve sıra geldi uygulamamızı çalıştırmaya ! Normal şartlarda uygulama DLL’ i bulamadığı için hata vermesi gerekmektedir. Ama senaryomuz ve yapı gereği DLL GAC içerisinde aranacak ; bulunamadığı durumda ise gerçek lokasyonundan GAC içerisine taşınacaktır. Uygulamamıza tıklayarak çalıştırıyoruz :

Bingo ! Uygulamamız DLL lokal lokasyonda olmamasına rağmen başarılı bir şekilde çalıştırılmıştır. GACFiles içerisine baktığımızda DLL’ in olmadığını rahatlıkla farkedebiliriz :

Çünkü DLL’ imiz .Net Compact Framework tarafından GAC içerisine taşınmıştır :

İşte buda kanıtı !

Bu makalemizde mobil cihazlar üzerinde GAC kullanımına değindik. Başka bir makalede daha görüşmek dileğiyle.

.Net Compact Framework 2.0 - WM 5.0 Managed Api – Microsoft.WindowsMobile.Telephony API PPC

Saturday, January 12, 2008 11:51:05 PM (GTB Standard Time, UTC+02:00)

Windows Mobile 5.0 Managed Kod kullanan uygulama geliştiriciler için birçok yenilikle birlikte sahneye çıktı. Bunlardan en önemlisi bir önceki sürümlerinde bulunmayan ve Managed Kod kullanan uygulama geliştiricilerin hayatını önemli derecede kolaylaştıran Managed API’ ler olarak söylenebilir. Bu makale serimizde bu API’ lerin içerilerinde bulunan sınıfları tek tek inceleyerek küçük, anlaşılır ve faydalı örnekler geliştireceğiz. İlk olarak Microsoft.WindowsMobile.Telephony API’ si içerisinde bulunan tek Class (Sınıf) olan Phone sınıfını bu makalemizde inceleyerek anlaşılır bir uygulama geliştireceğiz.

NameSpace içerisinde bulunan tek sınıf olarak yapısı incelendiğinde sistemin çokta karmaşık olmadığı kolayca anlaşılabilmektedir.

Bu API içerisinde bulunan Phone sınıfının Talk metodunu kullanarak uygulama geliştiriciler kendi uygulamaları içerisinden Mobil Cihazları üzerinden verilen “Telefon Numarasına” aramalar yaptırarak uygulamalarının kullanılabilirliliğini arttırabilirler. Bu noktada örnek bir uygulama geliştirmek konunun anlaşılabilirliği açısından daha faydalı olacaktır.

Örneğe başlamadan önce birtakım uyarılarda bulunmak yerinde olacaktır. Makale serisi, Windows Mobile 5.0 işletim sistemine sahip Pocket PC Cihazları üzerinde çalıştırılacak şekilde yazılacaktır. Dolayısıyla sisteminiz üzerinde bu işletim sistemi ile ilgili gerekli Uygulama Geliştirme Kit (SDK) ‘ inin yüklü olması gerekmektedir.

Windows Mobile 5.0 SDK For Pocket PC Phone Edition yükleme dosyasını adresinden indirip sisteminize kurduktan VS.NET 2005 üzerine de gerekli eklentiler yüklenmektedir. Bu eklentilerin yüklenmesi gerçekleştirildikten sonra VS.NET 2005 üzerinde New Project – Visual C# - Smart Device – Windows Mobile 5.0 Pocket PC seçeneği altından yeni bir Device Application projesi açarak işe başlayalım.

Uygulama ekranını tasarlamadan önce Projemize ilgili API referansını ekliyoruz.

Uygulama ekranına şekildeki kontrolleri ekleyerek örneğimize devam ediyoruz.

Form üzerine arama yapılacak numaranın girilebilmesi için bir Metin Kutusu (txtNUMARA) ve arama işlemini tetikletmekten görevli bir Button (btnARA) yerleştirdik. Bu noktadan sonra “Numarayı Çevir” button’ una basıldığı zaman aşağıdaki kod bloğunun çalışmasını sağlamak :

Kod’ a genel hatlarıyla bakıldığı zaman Phone sınıfının Global bir referansını tanımladıktan sonra Uygulamanın Form’ u yüklendiği zaman Sınıf’ ın instance’ını oluşturduk. Ve bir sonraki adımda Button’ a tıklandığında yakalanan metot içerisinde Phone sınıfının instance’ ı üzerinden Talk() metodunu çalıştırdık. Metodun parametrelerine bakıldığında yapının çokta karmaşık olmadığını rahatlıkla anlayabiliriz.

Metot uygulama geliştiriciden iki adet parametre istemektedir. Birincisi Arama Yapılacak Telefonun numarası, bir diğeri ise arama işlemi gerçekleştirilemek istenildiğinde İşletim Sistemi tarafından Telefon’ un ekranında konu ile ilgili “Onaylama” notifikasyonunun çıkıp çıkmayacağı ile ilgili bool tipinde bir değişkendir. İki parametre değerini girdikten sonra Arama işlemi başarıyla başlatılacaktır.

Bu noktadan sonra yapılması gereken tek şey uygulamayı emülatörümüz üzerinden çalıştırmak olacaktır. Bu noktada önemli bir uyarıyı atlamak uygulamamızın çalışmamasına sebep olacaktır. Geliştirdiğimiz uygulama Mantık çerçevesinde düşünüldüğünde telefon özelliği barındıran cihazlarda çalışacak şekilde tasarlanmıştır. Dolayısıyla çalıştıracak olduğumuz emülatörün böyle bir özelliğinin olması gerekmektedir. Emülatörler ile ilgili önümüze çıkan listede “Microsoft Windows Mobile 5.0 Pocket PC Phone Edition” seçeneğini seçerek Telefon özellikli bir emülatörü kullanmak istediğimizi belirtiyoruz. Peki emülatör üzerinden aramalar nasıl gerçekleştirilecek ? Bu noktada Emülatörlerin uygulama geliştiricileri cevapsız bırakmadığını rahatlıkla görebilirsiniz. Uygulamayı çalıştırdığınız zaman sanki Fiziksel bir cihaz üzerinde arama yapıyormuşsunuz gibi Emülatör verilen numarayı arayacaktır. OK’ e tıklayarak uygulamayı Emülatör üzerine Deploy ediyoruz ve çalıştırıyoruz.

Şekilde görüldüğü üzere Button’ a basıldığı süreçte ekran üzerinde aramanın onaylanıp onaylanmadığını soran bir notifikasyon kutusu çıkmaktadır. Bu noktada işlem onaylandıktan sonra arama işlemi başarıyla başlatılmaktadır.

Bu makalemizde Microsoft.WindowsMobile.Telephony API içerisindeki Phone sınıfını kullanarak Uygulamamız üzerinden bir arama işlemini tetikledik. Bir başka makalede görüşmek üzere.

WM 5.0 Managed Api - Microsoft.WindowsMobile.Forms.SelectPictureDialog

Saturday, January 12, 2008 11:50:29 PM (GTB Standard Time, UTC+02:00)

Windows Mobile 5.0 ile birlikte artık Managed Uygulama geliştiriciler işletim sistemi üzerinde hali hazırda kullanımda olan birçok dialog penceresine çok daha rahat ulaşabilmektedirler. Birçok karmaşık fonksiyon tanımlaması bir yana Windows Mobile 5.0 API’ leri üzerinden managed uygulama geliştiriciler işletim sistemi üzerindeki dialog pencerelerinden kendi uygulamalarında yararlanabilmektedirler. Bu makalemizde ise işletim sistemi üzerinde tanımlı olan bir klasör içerisinde bulunan resimleri görüntülemeye ; bu resimlerin seçilmesi & sıralanması ile ilgili hazır tanımlı olan bir dialog penceresini ; SelectPictureDialog dialog penceresini Managed Uygulamalar içerisinde kullanımına değineceğiz.

SelectPictureDialog adından da anlaşılabileceği üzere uygulama içerisinde kullanıcılara resim seçtirebilmek adına geliştirilmiş bir dialog penceresi kontrolüdür. Bu kontrol işletim sistemi üzerinde standart olarak gelen birçok resim tabanlı uygulamada kullanılmış ; resim seçtirtme eylemi konusunda esneklik sağlamaktadır.

Konunun bu noktada daha rahat anlaşılabilmesi açısından örnek bir Mobil Cihaz uygulaması geliştirmek daha uygun olacaktır.

Hiç vakit kaybetmeden işe standart bir C# Smart Device Windows Application projesi açıyoruz.

Bir sonraki adımda makalemizin temel konusunu oluşturan sınıfı içerisinde barındıran System.WindowsMobile.Forms referansını mobil cihaz uygulamamıza refere ediyoruz.

Bir sonraki adımda şekildeki uygulama ekranını tasarlıyoruz.

Geliştiriyor olduğumuz örnek uygulamamızdaki temel amacımız mobil cihaz kullanıcısının SelectPictureDialog penceresi yardımı ile uygulama içerisinde işletim sistemi üzerinde bulunan resimlerini görüntüleyebilmektir. Uygulama ekranı üzerinde en üste bir Image kontrolü, altına bir TextBox ve dialog penceresini açtırabilmek adına bir button kontrolü yerleştiriyoruz.

Hiç vakit keybetmeden uygulamamızın kod bloklarını geliştirmeye geçelim.

Şekilden de anlaşılabileceği üzere Global erişim seviyesinde bir SelectPictureDialog referansı oluşturuyoruz. Bir sonraki adımda ise uygulama ekranı yüklendiğinde bu referansa objesini eşitliyoruz ve ilgili özelliklere ilgili değerleri belirliyoruz. Sıra geldi button’ a tıklandığında çalıltırılacak olan kod bloklarına.

İşte bu kadar ! Kod blokları ile ilgili açıklamaları yorum satırı olarak bir üst noktalarına ekledik. Hiç vakit kaybetmeden uygulamamımızı çalıştırıyoruz.

Uygulama ekranı içerisinde hiç vakit kaybetmeden ilgili button’ a basıyoruz ve SelectPictureDialog kontrolünü ekrana getirtiyoruz. StorageCard içerisinde çıkan ilk resmi seçiyoruz.

Resmin üzerine tıklıyoruz :

Ve sonuç ! Mükemmel !

Bu makalemizde Windows Mobile 5.0 API’ leri ile birlikte gelen SelectPictureDialog kontrolünü mercek altına aldık. Bir başka makalede daha görüşmek üzere.

Visual Studio Remote Tools – Remote File Viewer

Saturday, January 12, 2008 11:49:09 PM (GTB Standard Time, UTC+02:00)

Visual Studio 2005 ile birlikte sistemimize Mobil Uygulama Geliştiricilerin hayatını kolaylaştırabilecek bazı “küçük” uygulamalar yüklenmektedir. Bu uygulamalar tamamen izole ve birbirlerinden farklı amaçlar üzerine geliştirilmiş ; Emülatörler ve Fiziksel cihazlar üzerinde çalışabilmektedirler.

Genel hatlarıyla ;

Remote File Viewer

Remote Heap Walker

Remote Process Viewer

Remote Registry Editor

Remote Spy

Remote Zoom In

Şeklinde sıralanabilecek bu küçük uygulamalar normal şartlarda 3rd party uygulamalar kullanılarak yada mobil cihazımızın sınırlı ekranı üzerinden zahmetli bir şekilde gerçekleştirilebilerek yapılan işlemlerde kullanıcılara masaüstü rahatlığı sağlamaktadır. Bu makale serimizde ise liste üzerinde sıraladığımız uygulamalar ile ilgili kısa açıklamalarda bulunacağız.

Şimdiki durağımız Remote Zoom In. RZI genel hatlarıyla uzaktaki bir cihazın ekran görüntüsü almaya – bu görüntüyü yazdırmaya ve kaydetmeye yarayan yardımcı bir uygulama olarak özetlenebilir. Uygulamanın hangi noktalarda kullanılabileceğine gelinirse ; makalelerde, proje sunumlarında, kitap yazarken v.b. gibi süreçlerde mobil cihazımızın anlık ekran görüntüsüne ihtiyaç duyduğumuzda kullanılabilir. Küçük bir örnekle uygulamayı tanımaya başlayalım.

Uygulamamızı Başlat – Programlar – Microsoft Visual Studio 2005 – Visual Studio Remote Tools – Remote Zoom In seçenekleri üzerinden başlatıyoruz. Karşımıza diğer Remote Tools uygulamalarında olduğu gibi hangi mobil cihaz üzerinden bağlantı kurulacağını soran bir seçenek penceresi çıkmaktadır. Bu pencereden daha öncekilerde olduğu gibi aktif bağlı olan Cihaz / Emülatörü seçerek devam ediyoruz.

OK’ e tıkladığımızda uygulama o an aktif bağlantısı olan Cihaz / Emülatörün ekran görüntüsünü almak üzere bir Progress Bar çıkarmaktadır.

İşlem tamamlandığında :

Şekildeki gibi ekran görüntüsünü uygulamamız sistemimize yüklemektedir.Bundan sonra yapılabilecekler menü üzerinden New Bitmap seçeği üzerinden görüntüyü tazelemek olacaktır.

Emülatör üzerinde değişiklik yapıldıktan sonra New Bitmap seçildiğinde Yeni ekran görüntüsü sistemimize kopyalanmaktadır. Kullanıcılar bu görüntüyü File – Print seçenekleri üzerinden Yazdırabilmektedirler.

Ayrıca Save As seçeneği üzerinden görüntüyü sistemleri üzerine kaydedebilmektedirler.

Bir makalemizin daha sonuna geldik. Bir başka makalede daha görüşmek üzere.

.NET Compact Framework 2.0 – WM 5.0 PPC Notification Kontrolü

Saturday, January 12, 2008 11:48:17 PM (GTB Standard Time, UTC+02:00)

.NET Compact Framework 2.0 daha önceki makalelerimizde belirttiğimiz üzere bir önceki sürümünde “keşke olsa” diyebileceğimiz birçok yenilikle birlikte mobil uygulama geliştiricilerin beğenisine sunuldu. Windows Mobile 5.0’ ında kullanımına geçilmesiyle birlikte mobil cihaz üzerinde yapabileceklerimizin sınırı genişlerken bu yapılabileceklerden uygulama geliştiricilerinde faydalanabilmesi için düzenli süreçler halinde yeni API’ ler yazılmaktadır. Ama hepimizinde bildiği üzere Unmanaged API’ leri kullanarak uygulama geliştirmenin kolay olmayacağı gibi konu ile ilgili SDK’ larda yoğun bir dil üzerinden yazılmaktadır. Bu noktada Managed uygulama geliştiricilerin bu güzelliklerden faydalanabilmeleri için .NET Compact Framework 2.0 üzerinde birçok “Managed” yenilik gelmektedir. Bu makalemizde Windows Mobile 5.0 işletim sistemi üzerinde cihaz ekranı üzerinde kullanıcıyı küçük “popup” niteliği taşıyabilen, ama bir o kadarda yetenekli bir kontrolü ; Notification kontrolünü mercek altına alacağız. Amacımızın her zaman kullanıcıyla maksimum seviyede iletişimin olduğunu göz önünde bulundurduğumuzda Notification kontrolünün bu konuda ne kadar yetenekli olduğunu geliştirecek olduğumuz örnek uygulamada farkedebileceksiniz.

Örnek uygulamamızı geliştirmeye başlamadan önce Notification kontrolünün Özellik ve Olaylarını tanımak bu noktada daha doğru olacaktır.

Şekil üzerindende anlaşılabileceği üzere Notification Kontrolü Windows Mobile 5.0 işletim sistemini kullanan Pocket PC Cihazlarının ekranlarının alt kısmı içerisinde gözüken ; kimi gerekli durumlarda kullanıcıyı bilgilendirmek üzere kullanabileceğimiz faydalı bir Mobil Windows Form kontrolü olarak ifade edilebilir. Şekildeki görünümde dikkatinizi çekmiş olmalıdır ki üzerinde örneğini geliştirecek olduğumuz Notification kontrolü standart düz metinlerin yanısıra görsel açıdan daha kapsamlı mesajlarıda ekran üzerinde kullanıcıya gösterebilmektedir. Bu kavramlar ile ilgili yukarıda örneği makalenin sonunda birlikte geliştireceğiz.

Hızlı bir şekilde makalemize devam edelim. Bu noktada konunun daha rahat anlaşılabilmesi açısından şekilde örneği geliştirmek daha doğru olacaktır.

Örneğin geliştirilebilmesi için ilk olarak yeni bir C# - Smart Device – Windows Mobile 5.0 Pocket PC – Device Application projesi açarak işe başlayalım.

Geliştirecek olduğumuz uygulamanın senaryosu şu şekilde olduğunu kabul edelim. Microsoft Türkiye için bir mobil uygulama geliştirdiğimizi ve bu uygulamanın kullanıcıya belirli periyotlarda Microsoft’ un kendi sitesi üzerinde gerçekleştirdiği bir Anket’e katılıp katılmayacağını sorması gerektiği bir durumu ele alalım. Bu noktada gerçekleştirilmesi gereken senaryoda bu tip bir sorunun gösterildiği konfirmasyon kutusunun uygulamayı kullanan kullanıcıyı rahatsız etmemesinin gerektiği gibi ana ekran üzerindende kullanıcıyı kesinlikle uzaklaştırmamalıdır. Bu noktada Notification kontrolünün ne kadar başarılı olduğu açıkça ve rahatlıkla söylenebilir.

Bir sonraki adımda konu ile ilgili form tasarımı şekildeki gibi gerçekleştiriyoruz ; toolbox içerisinde bulunan Notification kontrolündende form üzerinde bir adet sürükleyip bırakıyoruz.

Kontrolün ToolBox üzerindeki yeri :

Form üzerine bir adet sürükleyip bırakıyoruz.

Şekil üzerinden de anlaşılabileceği üzere Notification kontrolü form üzerinde görsel açıdan herhangi bir anlam ifade etmemektedir. Sadece Form üzerinde eklendiğine dair bir görsel çubuk Visual Studio 2005 Mobil Form Dizayn ekranı altında uygulama geliştiriciyi bilgilendirmektedir. Örneğimize devam etmeden önce kontrolü biraz daha yakından tanımak bu noktada daha doğru olacaktır.

Daha öncede belirtildiği üzere Notification kontrlü adındanda anlaşılabileceği üzere kullanıcıları notifike etmek üzere tasarlanmış bir kontroldür. Bu noktada mantık çerçevesinde düşünüldüğünde kontrolün en temel özellikleri notifikasyon esnasında görüntüleyecek olduğu mesaj, bu mesajın başlığı ve mesajın ne derece önemli olduğu parametresi. Kontrolü uygulamamız içerisinde ntfMICROSOFT olarak adlandırdıktan sonra Özellikler (Properties) penceresi üzerinden kontrolün özelliklerini mercek altına alıyoruz.

Listenin kalabalık olmadığı eminizki dikaktinizi çekmiştir. Bir sonraki adımda bu özellikleri kısaca açıklayalım.

·         Name – Kontrolün benzersiz ismi.

·         Caption – Notifikasyon esnasında bilgilendirme kutusunun üzerinde görünecek olan başlık değeri.

·         Critical – Notifikasyon’ un kritik bir eylem oluğ olmadığı ifade eden bir özelliktir. True değeri bilgilendirme kutusunun etrafının “kırmızı” renk alacağı anlamına gelmektedir.

·         Icon – Opsiyonel ikon değeri. Notifikasyon esnasında ikon olup olmayacağını ifade eder.

·         InitialDuration – İstisnai bir durum oluşmadığı sürece (Kullanıcı Kutuyu Kapatır v.b.) Notifikasyon Bilgilendirme kutusunun ekran üzerinde ne kadar süre görüneceğini belirtir.

·         Text – Notifikasyon metnini ifade eder. Bu özellik ayrıntılı olarak incelenecektir.

·         Visible – En önemli özelliklerinden biridir. True değeri ekran üzerinde görüneceğini ifade eder.

Özelliklerinin yanısıra Notification kontrolünün Olaylarıda bu noktada önemli bir yer teşkil etmektedir. Örneğimize devam etmeden önce kontrolümüzün olaylarını yakından incelemek daha doğru olacaktır.

Evet, bu noktada kalabalık bir liste ile karşı karşıya kalmamaktayız. Olaylar ile ilgilide kısaca açıklama yapmak gerekirse ;

·         BalloonChanged – Adındanda anlaşılabileceği üzere Ekran üzerinde notifikasyon esnasında görünen Balon’ un görünürlüğü değiştiğinde fırlatılır.

·         ResponseSubmitted – Bu olay kontrolün Text özelliğine HTML gömüldüğü ve bu HTML üzerinden bir sonuç geldiğinde tetiklenir. Ayrıntılı olarak incelenecektir.

Genel hatlarıyla kontrol incelendiğinde çokta karmaşık bir yapısı olmadığı kolaylıkla gözlenebilir. Sıra geldi örneğimizi geliştirmeye. Örnek basit seviyeden karmaşık seviyeye doğru geliştirilecektir. İlk olarak form üzerindeki Button kontrolüne tıkladığımızda ekrana basit bir notifikasyon balon’ u getirelim.

Bu değerler üzerinde uygulamamızı Emülatörümüz yada Fiziksel cihazımız üzerinde çalıştırdığımızda şekildeki görünümü görüyor olmamız gerekmektedir :

Ve sonuç. Ekran üzerinde belirttiğimiz özellik değerleri üzerinden bir notifikasyon balon’ u görünmektedir. Peki bu noktada daha kapsamlı neler yapılabilir ? Bu konuya az sonra değineceğiz. Fakat şunu belirterek devam etmeliyizki kullanıcı ekran üzerinde balon dışında herhangi bir lokasyona kalem kullanarak tıkladığında notifikasyon balon’ u kaybolacak ; mavi çubuk üzerinde “Notification” metninin çıkmasını sağlayacaktır. Kullanıcı Notification metnine tıklayarak balon’ un ekran üzerine tekrar gelmesini sağlayabilecektir ; ta ki Visible özelliği false olana kadar.

Sıra geldi özellikler listelenirken ayrıntılı olarak inceleyeceğimizi ifade ettiğimiz Text özelliğinin mercek altına alınmasına.

Text özelliği daha öncede ifade edildiği üzere balon içerisinde gösterilecek olan metni temsil etmektedir. Bu noktada entereasn bir kavram üzerinde konumuza devam edelim.

Uygulama geliştiriciler bu özelliğe çok ilginç ve başarılıdır ki basit HTML sintaksını kullanarak HTML içeriğini gömebilmektedirler. Hemen kafamızdaki soru işaretlerini çözümleyelim.

HTML (HyperText Markup Language) Internet üzerinde kullanılan basit işaretleme dili olarak ifade edilebilir.

Bu dili kullanarak kullanıcılar görsel ortamda her türlü standartize işlemi gerçekleştirebilirler. Peki Notification kontrolü içerisinde bu yapıdan Uygulama geliştiriciler nasıl faydalanacaklardır ?

Konuyu örnek üzerinden anlatmak bu noktada daha faydalı olacaktır :

HTML üzerinde bir metnin kalın olması için metni <b></b> tagleri arasına almak yeterli olacaktır. Ayrıca bir alt satıra geçmek için <br> tag’ inden faydalanabilmektedir.

Text özelliğini şekildeki gibi düzenliyoruz :

Uygulamımızı çalıştırıyoruz :

Ve sonuç. Merhaba ! yazısı ekran üzerinde kalın harflerle yazılmış ve metnin diğer kısmı alt satıra taşınmıştır. Peki HTML kullanarak yapabileceklerimiz sadece metnin görsel anlamda değiştirilmesimi ? Tabiki hayır. Bu noktada HTML kullanarak Balon’ umuzun içerisine Input Tag’ i kullanarak eklenebilecek her türlü objeyi Notification Balon’ umuzun içerisine ekleyebiliriz. Ayrıca bir diğer önemli nokta ise <a href=””></a> tag’ lerini kullanarak metin içerisine linkler gömebiliriz. Şimdi balon’ umuzu senaryomuza uygun olarak düzenliyoruz.

Uygulamımızı çalıştırdığımızda :

Sonuç süper. Kullanıcıya belirli periyotlarda (bu noktada timer kontrolü kullanılabilir) Anket’ e katılıp katılmak istemediğini uygulama ekranından uzaklaştırmadan rahatlıkla sorabiliyoruz. Üzerinde çalışmamız gerekecek tek birşey kaldı. Balon içerisindeki Link yada Button’ lara tıkladığımız zaman gerekli aksiyonları nasıl gerçekleştireceğiz ? HTML ile uygulamamız arasındaki haberleşme nasıl gerçekleştirilecektir ? Hemen cevaplayalım.

Olaylardan bahsederken ResponseSubmitted olayı için “Bu olay kontrolün Text özelliğine HTML gömüldüğü ve bu HTML üzerinden bir sonuç geldiğinde tetiklenir.” Şeklinde bir açıklama kullanmıştık.

Evet, gömülü HTML içerisinden “Response” kavramını ifade edecek bir eylem gerçekleştirildiğinde (buton’ a tıklamaki link’ e tıklamak) sistem gerekli parametreler üzerinde bu olay’ ı tetiklemektedir.

Olay tetiklendiğinde inceleyebilmek açısından gerekli delegeyi Çalışma Zamanında Form yüklendiğinde atıyoruz.

Ve olay tetiklendiğinde yakalanan kod bloğunu incelediğimizde “e” parametresi üzerinden tek bir özelliğin ; Response özelliğinin geldiğini görmekteyiz.

Response özelliği Buton’ a tıklandığında button’ un name özelliğine atanan değeri, link’ e tıklandığında ise Link’ in adres değerin kullanıcıya geri döndürmektedir. Senaryoyu şu şekilde tamamlayalım. Kullanıcı “Evet” butonuna bastığında Mobil Cihazımız üzerinde Internet Explorer uygulamasını açarak anket sayfasına yönlendirelim ; Hayır’ a tıkladığımızda ise sadece balon’ u ekran üzerinden kaldıralım. Ayrıca Link’ e tıkladığında ise Microsoft.com adresine surf yapmasına izin verelim. Kod bloğunu şu şekilde düzenliyoruz :

Uygulamayı hiç vakit kaybetmeden çalıştırıyoruz ve çıkan soruya “Evet “ diyoruz.

Mesaj kutusu kapandığında ise :

Internet Explorer’ ın açıldığını görebiliriz. Ayrıca Microsoft.com linkine tıklandığında ise aynı sonuca ulaşabiliriz.

Evet, bu makalemizde .NET Compact Framework 2.0 ile birlikte gelen Notification Kontrolünü mercek altına aldık. Bir başka makalede daha görüşmek üzere. İyi Çalışmalar.

Mobil Cihaz Emülatörleri Üzerinde Dosya Paylaşımı

Saturday, January 12, 2008 11:44:18 PM (GTB Standard Time, UTC+02:00)

Genel hatlarıyla bakıldığı zaman Mobil Cihazlar üzerinde uygulama geliştiren uygulama geliştiricilerin, geliştirdikleri bu uygulamaları her zaman fiziksel cihaz üzerinde test edebilme imkanları bulunmayabilir. Bu tip istisnai durumlarda fiziksel cihazların “bire-bir” yerini tutabilecek emülatör adını verdiğimiz “sanal cihazlar üzerinden” yardım almak birçok uygulama geliştirici tarafından iç rahatlatıcı bir yöntem olarak karşımıza çıkmaktadır.

Şu ana kadar üzerinde bahsettiğimiz neredeyse tüm makalelerimizde geliştirmiş olduğumuz Mobil Cihaz uygulamalarımızı ilgili emülatör üzerinde test etmiş ; sonuçlarını emülatörler üzerinden izlemiş bulunmaktayız.

Peki ya geliştirmiş olduğumuz Mobil Cihaz uygulamamızın çalıştırılması için işletim sistemimiz üzerinde bulunan herhangi x bir dosyaya ihtiyaç duyuluyor ise ? Bu tip bir durumda ihtiyaç duyulan fiziksel dosyayı Mobil Cihaz Emülatörüne nasıl kopyalabiliriz ?

Standart fiziksel mobil cihazlar üzerinde bu tip dosyalama işlemleri ilgili araçlar üzerinde işletim sistemimiz vasıtası ile gerçekleştirilebilirken ; Mobil Cihaz emülatörleri üzerinde farklı bir yaklaşımlada gerçekleştirilebilmektedir : Paylaşımlı Klasör (Shared Folder).

Üzerinde çalışıyor olduğumuz mobil cihaz emülatörümüzün içerisinde bulunan işletim sisteminin dosya sistemine herhangi bir dosyayı transfer etmek istediğimizde karşımıza çıkacak olan bu seçenek yardımıyla uygulama geliştiriciler istedikleri herhangi bir dosyayı herhangi bir zaman sürecinde mobil cihaz emülatörü üzerine kopyalayabilmektedirler.

Bu noktada konunun anlaşılabilmesi açısından görsel bir örnek geliştirmek daha doğru olacaktır. Amacımız Windows Mobile 5.0 işletim sistemi üzerinde çalıştırılan bir Mobil Cihaz emülatörüne Paylaşımlı Klasör tekniği yardımıyla bir dosyayı transfer edebilmektir.

Bu amaç uğruna ilk noktada Mobil Cihaz emülatörümüze ilgili bağlantıyı kuruyoruz. Bunun için en etkili ve basit yöntem Visual Studio 2005 üzerinden Connect To Device seçeneğine tıklamak olacaktır.

Açılan pencereden Emülatörümüzü seçip Connect’ e tıklıyoruz.

Connect button’ una tıkladığımız noktada karşımıza bu pencere açılacak ; akabinde emülatörümüz çalıştırılacaktır. Bağlantı ile ilgili durumu üstteki pencere yardımı ile izleyebilmektesiniz. Bağlantının başarılı olduğu bilgisini gördüğünüzde emülatörümüzün ayarları ile ilgili penceresine girmemiz gerekmektedir. File -> Configure ‘ a tıklıyoruz.

Önümüze çıkan ayarlar penceresinde General sekmesi altında bulunan Shared Folder kısmına tıklıyoruz ve bu noktada duraklıyoruz.

Emülatörümüz, kendi üzerinden erişilebilmek adına işletim sistemimiz üzerinde oluşturulmuş olan bir klasörü bizden istemektedir. Makalemizde örnek olarak C:\ kök dizini altında MobilCihazPaylasim adında bir klasör oluşturuyoruz.

Bir sonraki adımda ayarlar penceresinden bu klasörün emülatör tarafından paylaşımlı kullanılacağı bilgisini sisteme kayıt ediyoruz.

OK’ e tıklıyoruz. İşte bu kadar !

Geldik en önemli sürece, klasör üzerinden işletim sistemimiz ve emülatörümüz arasında dosya transferi gerçekleştirmeye. Klasör içerisine örnek bir metin dosyası oluşturuyoruz.

Peki, Mobil Cihaz emülatörümüz üzerinden bu klasöre nasıl erişeceğiz ?

İlgili paylaşımlı dosyaya mobil cihaz emülatörümüzün içerisindeki işletim sistemi üzerinden “Storage Card” olarak ulaşabilmekteyiz. Başka bir söylem ile Mobil Cihaz emülatörümüz ilgili klasörü “Sanal Bir Hafıza Kartı” olarak algılamakta ve işletim sistemi üzerinden bu şekilde kullanıcıların kullanımına sunmaktadır. Mobil cihazımızın dosya sistemi üzerinde Storage Card içerisine giriyoruz.

Ve sonuç ! Mükemmel ! Dosyaya mobil cihazımız üzerinden erişebilmekteyiz. Aynı senaryonun terside bu noktada geçerlidir, yani mobil cihaz üzerinden kopyalanan dosyaya da İşletim sistemimiz üzerinde bulunan klasör içerisinde erişebilmekteyiz.

Başka bir makalede daha görüşmek dileğiyle.

.Net Compact Framework 2.0 – Mobil Cihazlarda Socket Programlama – II

Saturday, January 12, 2008 11:43:39 PM (GTB Standard Time, UTC+02:00)

Makalemizin ilk bölümünde ifade edildiği üzere Mobil Cihazlar üzerinde Socket uygulamaları geliştirebilmeyi telaffuz etmek bundan yaklaşık 3-4 yıl öncesine kadar çok nadir görülebilirdi. Günümüzde ütopik ; en azından çok yüksek programlama bilgisi gerektirebilecek birçok kavramı .Net Framework ; akabinde mobil cihazlar üzerinde .Net Compact Framework ile çok anlaşılır ve basit bir seviyede masaüst ve mobil cihaz uygulama geliştiriciler gerçekleştirebilmektedirler.

Konuya bu açıdan bakıldığında .Net Framework ve .Net Compact Framework’ ün ; özellikle makalemizin asıl konusu gereği mobil cihazlar üzerinde .Net Compact Framework’ ün 2.0 sürümünden itibaren ne kadar başarılı ve güçlü olduğunu makalemizin ilk kısmında birçok noktadan değinerek ifade etmiştik.

Bu makalemizde ise teorik bilgilerin yanısıra ; ilk makalemizde hedeflenen senaryonun ; bir mobil cihaz chat uygulamasının ikinci bölümüne ; mobil cihaz uygulamasını ayrıntılı bir şekilde anlaşılır ekran görüntüleri ile geliştirmeye çalışacağız. Hatırlanabileceği üzere ilk bölümde masaüstü bilgisayarımız üzerinde 15423 numaralı TCP Portu üzerinden “Asenkron Mimari” ile süslenmiş bir sunucu uygulaması geliştirmiştik. Bu noktada ifade etmemiz gerekebilirki geliştirmiş olduğumuz sunucu sadece mobil cihazlar ile çalışacak şekilde tasarlanmamıştır. Standart bir masaüstü socket uygulaması üzerinden bağlantı kurabilecek şekilde ; konuşabilecek şekilde tasarlanmıştır.

Cümlenin son kısmına dikkat edilecek olursa uygulamanın tasarım aşamasında mobil cihazların bağlanabileceği yapıda özelleştirilmiş herhangi bir çabanın sarfedilmediğinden bahsedilmektedir. Bu cümleden de çıkarılabileceği üzere makalemizin ilk bölümünde ifade edildiği şekilde, Socket uygulamaları geliştirilmesi ile ilgili kavramların neredeyse hepsinin masaüstü socket uygulamaları ile birebir aynı olduğu rahatlıkla anlaşılabilir.

Bu noktadan itibaren hiç vakit kaybetmeden ilk bölümde geliştirmiş olduğumuz masaüstü sunucumuz ile haberleşebilecek ve aynı zaman sürecinde mesajlaşabilecek bir Mobil Cihaz Chat uygulaması geliştirelim.

İlk adımda diğer tüm makalelerimizde olduğu üzere standart bir C# Smart Device Application projesi açarak işe başlıyoruz.

Bir sonraki adımda şekilde arayüzü tasarlıyoruz. Amaç girilen ip adres / port kombinasyonu üzerinden geliştirmiş olduğumuz sunucu uygulamasına “dünyanın herhangi bir noktasından” iletişim kurabilecek ve “asenkron mimari üzerinden” mesajlaşabilecek bir mobil cihaz uygulaması geliştirmektir.

Şekilden de anlaşılabileceği üzere form üzerine basit ve temel Mobil Cihaz Windows form kontrolleri yerleştirerek uygulama arayüzünü tasarlamış oluyoruz. Form üzerine “sunucu ile kurulacak olan başarılı bağlantı sonucunda” mesajları girebileceğimiz bir metin kutusu ; mesaj gönderdiğimiz süreçte ekran üzerinde görünecek olan isim bilgimizi girebileceğimiz bir metin kutusu ; sunucu adresi ve port değerini girebileciğimiz bir metin kutusu ; gelen / gönderilen mesajların listeleneceği bir liste kutusu ve son olarak bağlantı kurma ile ilgili eylemi tetikleyecek olan bir buton kontrolü yerleştiriyoruz.

Ve sıra geldi kod blokları üzerinde çalışmaya.

Bu noktada dikkat edilecek unsur Mobil Cihaz üzerinde çalışacak olan uygulamamız adına geliştirecek olduğumuz kodların makalemizin ilk bölümünde geliştirmiş olduğumuz masaüstü sunucu uygulamasını geliştirirken yazdığımız kodlar ile neredeyse birebir aynı olduğudur. Sunucu uygulamasında geliştirildiği üzere bu noktadada gerekli nesnelerin tanımlamaları yapılacak, socket ayarları belirlenecek, ilgili referanslar verildikten sonra uygulamamız sunucu uygulamamız ile haberleşip mesajlaşmaya başlayacaktır. Hiç vakit kaybetmeden uygulama kodlarını geliştirmeye devam edelim. Bir önceki uygulamamızda olduğu gibi ilk noktada uygulama içerisinde kullanacak olduğumuz nesne referanslarını tanımlayalım.

Şekil üzerindende anlaşılabileceği üzere uygulama içerisinde tanımlı olan nesnelerin referanslarını global tanım alanında tanımlamış olduk. Bu noktada DefaultDelege isimli delegenin ayrıntılı işlevinden bir önceki makalede bahsetmiştik.

Sıra geldi asenkron mimari üzerinden çağırılan metotların işlerini tamamladığında gelip haber verecekleri CallBack metotlarını tanımlamaya. Uygulama içerisinde tasarım ve önem bakımından CallBack metotlarının yerinin başka olduğunu yine bir önceki makalemizde ifade etmiştik.

Gelen mesajın işlenmesi, yeni mesajların beklemeye başlatılması v.s. gibi birçok önemli unsur CallBack metotları olarak ifade ettiğimiz bu metotlar içerisinde gerçekleştirilmektedirler.

Ve ilk CallBack metodumuz. Sunucu uygulaması ile bağlantı kurulduğu süreçte yakalanacak olan bu metot içerisinde socket’ imiz asenkron olarak “mesaj bekleme” durumuna geçirilmektedir. Mesaj geldiğinde ise MessageDelegate delegesinin adreslediği metot çalıştırılmaktadır. Hiç vakit kaybetmeden bu delegenin adreslediği CallBack metodunu yazalım.

Bu metot içerisinde ise mesaj geldiğinde içi dolu olan byte[] dizimizin (MessageBuffer) içerisinde barındırdığı mesajı liste kutusu içerisine ekliyoruz. Fakat bu noktada dikkat edilmesi gereken en önemli unsur bu ekleme işleminin worker thread içerisinden değilde primary thread içerisinde gerçekleştirildiğidir. Bu amaca uygun olarak lstMESSAGES isimli liste kutumuzun Invoke metoduna ekleme işleminin gerçekleştirileceği metodun adresini barındıran dlg isimli delegemizi gönderiyoruz.

Son olarak dlg isimli delegenin adreslediği “mesaj ekleme” ile ilgili metodumuzu tanımlıyoruz.

Gerçekleştirilen tek eylem gelen byte[] dizisini türkçe karakter setine uygun olarak metne dönüştürüp liste kutusu içerisine eklemektir.

Sıra geldi uygulamanın yaşam süreci başlatıldığında gerçekleştirilecek olan standart eylemleri tasarlamaya. Sunucu uygulamamız üzerinde hazırladığımız yapının neredeyse birebir aynısını mobil cihazımız üzerinde tasarlıyoruz. Uygulama ekranı açıldığında standart olarak bir socket tanımlanacak, 54123 numaralı port ile bind edilecek ve gerekli istek geldiğinde bağlantı kurulacaktır. Değinilmesi gereken bir önemli nokta daha ise uygulama ekranı açıldığında bir önceki bölümde tanımlanan delegelerin adresleri belirlenecektir. Şekildeki kod bloğu üzerinden devam ediyoruz.

Kod bloğu dikkatli incelendiğinde bir önceki sunucu uygulaması içerisinde tasarlanan yapı ile neredeyse birebir aynı olduğu kolayca farkedilebilmektedir. Ne kadar ilginç...

Bu noktada gerçekleştirilen başka bir yapı ise delegelerin tanımlanması ve gerekli metot adreslerinin belirlenmesidir. Hiç vakit kaybetmeden kaldığımız noktadan devam ediyoruz.

Sırada uygulama ekranı üzerine yerleştirilmiş button kontrollerine tıklandığı zaman gerçekleştirilecek eylemlere. İlk durağımız Connect button’ u.

Connect button’ una tıklatıldığında uygulama ekranı yüklendiğinde tanımlanan socket objesi üzerinden “asenkron mimari” yardımıyla sunucu üzerine bağlantı kurulmak istenmektedir. Bu noktada sunucu adresi “ : “ operatörü üzerinden iki parçaya ayrılmakta ; ilk parça IP Adresini ikinci parça ise port bilgisini ifade etmektedir.

Bağlantı kurulma sürecinde uygulama ekranı üzerinde herhangi bir kilitlenme yaşanmamakta ; Socket.BeginConnect metodu üzerinden dönen IAsyncResult yardımı ile bağlantı kurulup kurulmadığı sürekli kontrol edilmekte ; kurulmadığı süre zarfında Application.DoEvents() metodu üzerinden uygulama ekranı serbest olarak çalıştırılmaktadır.

Başarılı bir bağlantı kurulabildiği taktirde uygulama ekranı üzerinde bulunan kontrollerin erişilebilirliği değişmekte ; mesaj paneli aktif hale gelmektedir.

Şekildeki kod bloğu üzerinden uygulama tasarımına devam ediyoruz.

Sıra geldi mesajı gönderecek olan kod bloğunu tasarlamaya. Gerçekleştirilecek olan tek eylem başarılı bir bağlantı sonucunda aktif hale gelen socket objemiz yardımı ile girilen metin mesajını byte[] dizisine çevirip karşı sunucuya göndermek olacaktır.

İşte bu kadar ! Kod bloklarına dikkat edilecek olursa yapı sunucu uygulaması ile neredeyse birebir aynı olarak ifade edilebilir ! Yaşasın .Net Compact Framework 2.0 ! :)

Hiç vakit kaybetmeden uygulamamızı test ediyoruz. Bu noktada dikkat edilecek unsur senaryo gereği ilk olarak sunucu uygulamamızı çalıştıracak olup ilgili sunucuya “aynı blok değerleri üzerinden” IP Adresi alabilmiş bir fiziksel cihaz ya da mobil cihaz emülatörü yardımıyla bağlantı kuracağız. Sunucu uygulamasını çalıştırıp Sunucuyu başlatıyoruz.

Start Server button’ una tıkladığımızda işletim sistemimiz uygulamamızın bir portu dinlemeye çalıştığını ve bunun engellenip engellenmeyeceğini soracaktır. Unblock seçeneğini seçerek sunucumuzu dinleme moduna geçiriyoruz.

Sıra geldi mobil cihaz uygulamasını sunucuya bağlanabilecek şekilde yapılandırmaya. Örnek olarak çalıştırılan sunucunun IP Adresi 10.5.10.37, port değeri ise 15423’ tür. Bu değerleri kullanarak mobil cihazımız üzerinde gerekli bağlantı işlemlerini gerçekleştiriyoruz.

Connect’ e tıklıyoruz :

Ve bağlantı kuruldu ! Mesajlaşmaya başlıyoruz :

Sonuç mükemmel ! Bir makalemizin daha sonuna geldik. Başka bir makalede daha görüşmek üzere.

.Net Compact Framework 2.0 – Mobil Cihazlarda Socket Programlama - I

Saturday, January 12, 2008 11:43:12 PM (GTB Standard Time, UTC+02:00)

Genel hatlarıyla makalemizin konusunun başlığına bundan yaklaşık 3-4 sene önce bakılsaydı birçok uygulama geliştirici için böyle bir sistemi gerçekleştirmek ütopik ; belkide, imkansız olarak düşünülebilirdi. Mobil Cihazlar’ dan öte standart Windows işletim sistemimiz üzerinde Socket’ ler üzerinden haberleşip birbirleri arasında veri transferi gerçekleştiren uygulamalar geliştirebilemek için bile bundan kısa bir süre öncesine kadar yüksek bir programlama bilgisi gerektirmekte ; herşeyden öte işletim sistemimiz üzerindeki API (Application Programming Interface) Fonksiyonlarını bilmemizi gerektirmekdeydi.

Olaya bu açıdan bakıldığında Socket programlama her zaman uygulama geliştiriciler için bir problem ; en azından bir önceki paragrafta belirtildiği üzere yüksek programlama bilgisi gerektiren bir kavram olmuştur.

2000 yılında .Net Framework “dünyası” ile tanıştığımızda ise neredeyse tüm sıkıntılarımız sona ermiş, yepyeni bir platform ile karşı karşıya kalmıştık. Az önce üzerinde konuştuğumuz yüksek porgramlama bilgisi gerektiren birçok kavramı .Net Framework üzerinde çok daha kolay bir şekilde gerçekleştirmenin verdiği rahatlık ve esneklik ile çok daha büyük ölçekli ve hatasız projeler günümüzde birçok platform üzerinde geliştirilmektedir.

Konuyu bu noktada toparlamak gerekirse birçok noktasında olduğu gibi .Net Framework üzerinde Socket uygulamaları geliştirmekte eskiye nazaran çok daha az efor sarfedilerek gerçekleştirilebilmektedir. System.Net.Sockets NameSpace’ i içerisindeki sınıfları doğru yer ve doğru kombinasyonlar üzerinden kullanarak uygulama geliştiriciler .Net Framework üzerinde çok optimize ve sağlam Socket uygulamaları geliştirebilmektedirler.

Peki .Net Framework üzerindeki bu esnek yapıya .Net Compact Framework üzerinde hangi oranda sahip olabilmekteyiz ? Mobil Cihazlar üzerinde Socket uygulamaları geliştirmek günümüzde hala bir ütopyamıdır ?

İşin biraz derinine inildiğinde özellikle 2.0 sürümü ile birlikte .Net Compact Framework kendisine hayranlık bırakabilecek seviyede başarılı ; konumuz ile ilişkilendirdiğimizde ise hayli sağlam bir grafik çizmektedir.

Socket uygulamaların geliştirilmesi bakımından neredeyse .Net Framework ile başabaş giden .Net Compact Framework , .Net Framework üzerinde olduğu gibi işletim sistemi üzerinde tanımlı olan API Fonksiyonlarını kullanan managed metotları uygulama geliştiricilerin kullanımına sunmaktadır.

Bu makalemizde ise sayfalar dolusu teori ile konuyu anlatmak yerine, Masaüstü Bilgisayarımız üzerinde çalışacak olan bir sunucu uygulaması  ile Mobil Cihaz üzerinde çalışacak olan bir istemci uygulamasını baz alan ; Socket’ ler üzerinden birbirleriyle haberleşen bir mobil chat uygulaması geliştireceğiz.

Bu noktada üzerinde çalışacak olduğumuz kavramlardan bahsetmeden herşeyin “neredeyse .Net Framework ile birebir aynı” olduğunu belirtmek daha doğru olacaktır.

Ayrıca uygulamanın geliştirilme aşamasında standart seviyede Socket kavramlarını biliyor olduğunuzu kabul edeceğiz.

Fakat her ne olursa olsun uygulamamızın parçaların