Windows Phone İçin Yararlı Cheat Sheetler

Benim düşünceme göre, bir cheat sheet yani kopya kâğıdı iyi hazırlandığı zaman yazılım geliştirmeye biraz bulaşmış birisi için sayfalarca dokümandan yeğdir. Windows Phone üzerinde geliştirme yaparken işe yarayacak bu hızlı referans dokümanları topladım.

Microsoft Windows Phone API QuickStart

 

Native’de dahil olmak üzere WP için API listesini ve bunun alışıl olduğumuz .net ortamlarına ne kadar yakınlıkta olduğunu gösteren poster formatında profesyonel çıktıya hazır bir doküman.

İndirme Adresi : http://bit.ly/T0sGDj

 

ModernUI Apps

 

Windows Phone 7 ve 8 için arayüz geliştirirken gerekli olacak bilgileri barındıryor. Özellikle ezberleme imkanı olmayan yazı tipi ile çıkartılabilen simgeler için oldukça kullanışlı.

 

İndirme Adresi : http://bit.ly/133PZm0

Theme Resources Quick Reference Sheet

Kabul edelim bunu saklamayalım biz yazılımcılar tasarım konusunda çok kötüyüz! Bu yüzden bir ortam için yazılım geliştiriyorsak, o ortamın sağladığı temaların ötesine geçmemeliyiz. Bu hem bizim yapacağımız kırmızı üzerine mor gibi kötü seçimlerin hem de uygulamanın cihaz ile uymsuz görünmesinin önüne geçecektir. Bu doküman WP’nun sağlamış olduğu hazır tasarım sınıflarının isimlerini bir liste halinde veriyor. Oldukça yararlı.

 

İndirme Adresi : http://bit.ly/117VJKI

 

 

Developing a Silverlight Application for Windows® Phone 7

 

Biraz eski bir doküman fakat hala işe yarar ve DZone Refcardz bu işte oldukça başarılı.

İndirme Adresi: http://bit.ly/12UZO9c

 

Controls and Toolkits ve Live Tiles

 

Burada iki adet doküman var ve WP7 ile sınırlılar. Ama WP8 içinde hala geçerli oldukları için listenin sonuna ekliyorum kendilerini.

 

İndirme Adresleri:

 

Windows Phone HTML Uygulamalarda Merhaba Dünya

 

XAML uygulamalara merhaba demiştik. Daha önce Silverlight/WPF tecrübeniz olmayabilir. Normalde Windows platformu dışında çalışıyorsunuzdur ama sizden WP8 platformu içinde bir uygulama geliştiriyor olmanız istenmiş olabilir. Aslında daha sonra değineceğimiz Phone Gap isimli bir ürün tam da bu sorunu çözüyor ama biz böyle bir çözümün olmadığını varsayıyoruz. Ya da tasarımcınız HTML üstadıdır ve kısıtlı vakitte bir Windows Phone 8 uygulaması geliştiriyor olmanız gerekiyordur. Ya da… Tamam, bir durumdan dolayı uygulamanızın HTML 5 ile geliştirmeniz gerekiyor.

Yine detaylara inmeden yalnızca “merhaba” yazmak amacıyla proje şablonlarımızdan HTML 5 şablonunu seçerek işe başlıyoruz.

 

Proje ilk açıldığında “E bu normal XAMLlı uygulama” diyebilirsiniz. Haklısınız da. Aslında HTML 5 uygulaması normal uygulama içerisindeki bir tarayıcı içerisinde çalışıyor. Ama normal tarayıcıdan farklı olarak hem c# metotlarına erişebiliyor (dolaylı) hem de telefonun özelliklerine erişebilen javascript kodlarını çalıştırabiliyor.

XAML koduna baktığımızda tarayıcımızı oluşturan etiketler şe şekilde gözükmekte :

 


<phone:WebBrowser x:Name=”Browser”


HorizontalAlignment=”Stretch”


VerticalAlignment=”Stretch”


Loaded=”Browser_Loaded”


NavigationFailed=”Browser_NavigationFailed” />

Güzel, demek ki uygulamamızı gösterecek arkadaş bu. Peki bu nesne hangi html uzantılı dosyayı çalıştırıyor ve bunu nereden çalıştıracağını nasıl biliyor? Uygulamamızın açılış ekranı olan MainWindow’un kod tarafına geçtiğimizde ilk göze çarpan sınıf içerisinde MainUri şeklinde html dosyamızın yolunu tutan bir string olacak.

private
string MainUri = “/Html/index.html”;

Bu string’i kim nasıl kullanıyor diye baktığımızda zaten her şey bir anda aydınlacak. Bu string in ilk kullanıldığı metot :


private
void Browser_Loaded(object sender, RoutedEventArgs e)

{

Browser.IsScriptEnabled = true;

 


// Add your URL here

Browser.Navigate(new
Uri(MainUri, UriKind.Relative));

}

Metodun adından anlıyoruz ki bu tarayıcı nesnesi yüklendiğinde bu adresi açacak. İyi de metodun adının o olması o işi yaptığını belirtmek ki. Bu yazı içinde birkaç satır yukarıya bakıyoruz ve XAML tarafında tarayıcımızın Loaded olayı için Browser_Loaded metodunun bağlandığını görüyoruz.

Peki nerede bu “index.html” ? Visual Studio içerisinde Solution Explorer ile string de yazdığı gibi Html klasörünün altına baktığımızda kendisi bizi selamlıyor.

O halde, bizim şimdilik ne MainPage.xaml ile ne de MainPage.xaml.cs ile işimiz yok diyip bu pencereleri kapatıp “index.html” dosyasını açıyoruz.

Karşımıza basit bir HTML 5 yapısı çıkıyor.

<!DOCTYPE
html>

<html>


<head>


<meta
http-equiv=”Content-Type”
content=”text/html; charset=UTF-8″
/>


<link
rel=”stylesheet”
type=”text/css”
href=”/html/css/phone.css”
/>


<title>Windows Phone</title>


</head>


<body>


<div>


<p>MY APPLICATION</p>


</div>


<div
id=”page-title”>


<p>page title</p>


</div>


</body>

</html>

 

Bir düğme ve “Merhaba Dünya”

 

Daha önce web tasarımıyla uğraşıp buralara gelenler için eve dönüş gibi bir his olsa gerek. Şimdi, kod sayfamı tasarım durmuna geçirip toolboxdan button nesnesini tasarım alanına sürükleyip bırakıyorum.

Sürükleme işini yapınca düğmeye ait HTML kodu otomatik olarak oluşturuluyor.

<input
id=”Button1″
type=”button”
value=”button”
/>

 

Fakat bu düğmeye tasarım alanında çift tıkladığımızda yalnızca HTML karşılığına gitmiş oluyoruz.

Artık JavaScript yazmanın zamanı geldi. Burada web’den farklı bir durum yok. Düğmeye tıklandığında çalıştırılacak kodu ayrı bir javascript dosyasında, script tag’i içinde ya da satır içi (inline) olarak input tagi içinde yazabiliriz. Ben en ortadaki yöntemi seçerek bir script tagi ekliyorum. Bir metot yazıyorum ve düğmenin tanımında Click olayında bu metodu çağırması gerektiğini belirtiyorum. Arayüz kodumun son hali:

<!DOCTYPE
html>

<html>

<head>


<meta
http-equiv=”Content-Type”
content=”text/html; charset=UTF-8″
/>


<link
rel=”stylesheet”
type=”text/css”
href=”/html/css/phone.css”
/>


<title>Windows Phone</title>

</head>

<body>


<div>


<p>MY APPLICATION</p>


</div>


<div
id=”page-title”>


<p>page title</p>


</div>


<p>


<input
id=”Button1″
type=”button”
value=”button”
onclick=”DugmeyeTiklandi()
/>


</p>

 


<script
type=”text/javascript”>


function DugmeyeTiklandi() {

alert(“Merhaba”);

}


</script>

</body>

</html>

 

Uygulamayı çalıştırıp düğmeye bastığımızda sonuç:

 

 

XAML örneğinden farklı olarak bu uygulamada düğmenin stilinin tasarım ile uyumsuz olduğunu ve uygulamanın ekrana tam oturduğu halde çekiştirilebildiğini fark edeceksiniz. Yakında o konulara da değinmek üzere J

WP 8 XAML Uygulamalarda Merhaba Dünya

Windows Phone 8 üzerinde çalışma ortamımızı hazır hale getirdikten sonra hemen bir uygulama geliştirmek lazım. Başlangıcı en kolay ve en çok kullanacağımız XAML uygulamalara ayırmak şaşırtıcı değil. Daha önce Silverlight veya WPF ile uygulama geliştirmişseniz sizi hiç yabancı bir platform beklemiyor. Yeni bir programlama veya işaretleme dili olmadığı için dakikalar içerisinde Silverlight ile neler geliştirebiliyorsanız Windows Phone 8 içinde geliştirebiliyor oluyorsunuz. O yüzden bu yazının ortalarını sıkıcı olacaktır. Yeni başlayanlar için fazıla detaya girmeden anlatayım yine de.

XAML Uygulamaları basit oyunlarda dâhil olmak üzere hemen her türden uygulamaları geliştirmek için kullanacağız. Bu türden bir uygulama geliştirmek için, kullanmak istediğimiz programlama dilinin (C# veya Vb.net) altındaki şablonlardan “Windows Phone App”‘ı seçiyoruz.

Seçimden sonra hangi Windows Phone platformunu hedef olarak uygulama geliştireceğimiz sorulacak. Şu an için WP 7 ve WP 8 seçenekleri karşımıza çıkacak. WP 7 seçeneği seçecek olursak uygulamamız hem WP 7 hem de WP 8 cihazlarda çalışacak fakat WP 8′e özel yeteneklerini yitirecek. Biz WP 8 i seçiyoruz ve karşımıza örnek bir proje çıkıyor:

Ara yüzümüzü tanıyalım.

  1. Ara yüzde yaptığımız değişiklikleri tıpkı bir web editöründe olduğu gibi görmemizi ve görsel olarak düzenleyebilmemizi sağlayan ön izleme alanı.
  2. Ara yüzümüze XAML kodunu yazacağımız alan. Bu kısımda yalnızca ara yüzü şekillendiren kodlar bulunur. İşleyiş ile ilgili kodlar C# veya Vb.net kod dosyalarında bulunur.
  3. Proje dosyalarımızı göreceğimiz alan.
  4. Projemizi test/debug amacıyla çalıştıracağımız düğme. Buradan uygulamayı bir emulator veya cihaz üzerinde mi deneyeceğimizi seçebiliriz. Ayrıca emulator de farklı çözünürlüklerde uygulamamızı kontrol edebiliriz.

     

Bir düğme ve “Merhaba Dünya”

 

Arayüze düğme eklemek için bir çok yol var, Windows Forms’da olduğu gibi toolbox üzerinden tasarım ön izleme alanına sürükle bırak yöntemi klasik bir başlangıç yapılabilir.

Sürükleme işlemi bittiğinde XAML bölümünde ara yüze eklediğimiz düğme için aslında yazıyor olmamız gereken ifadenin otomatik oluşturulduğunu görebiliriz.(Windows Forms, WPF, Silverlight da olduğu gibi)

Bu düğmeye tıklandığında yapılacak işlemi belirlemek için basitçe ön izleme alanında düğmeye çift tıklayabiliriz. Bunu yaptığımızda otomatik olarak kod tarafında ilgili düğmenin “click” olayı için bir metot oluşturulacak, tasarım tarafında button’un click olayında oluşturulan bu metodun çağrılması gerektiği otomatik olarak yazılacaktır.

Uygulamanın CS Tarafında Oluşturulan metot:


private
void Button_Click(object sender, RoutedEventArgs e)

{

 

}

XAML tarafında düğmemizin son durumu:

<Button Content=”Button” HorizontalAlignment=”Left” Margin=”67,91,0,0″ Grid.Row=”1″ VerticalAlignment=”Top” Click=”Button_Click”/>

 

Bu durum daha önce Silverlight veya WPF ile uğraşmadıysanız bile JavaScript’den tanıdık gelecektir. .net tarafında çok iyi bildiğimiz bildirim kutusunu düğmemizin tıklanma olayına yazarsak selamımızı bitirmiş olacağız.

Metodumuza son halini veriyoruz ve uygulamayı çalıştırıp düğmeye basıyoruz.


private
void Button_Click(object sender, RoutedEventArgs e)

{


MessageBox.Show(“Merhaba”);

}

 

Windows Phone 8 Çalışma Ortamının Hazırlanması

Windows Phone 8 Uygulama Türleri

Farklı düzeydeki uygulamalar için 5 farklı uygulama türü sunulmaktadır. Bu türler:

XAML Uygulamalar

Özünde birer Silverlight uygulaması olan bu tür hedef alınarak, C# ve VB.Net kullanarak ağır grafik işlemleri haricindeki her türden uygulama geliştirilebilir.

HTML 5 Uygulamalar

Arayüzde işaretleme dili olarak XAML yerine HTML 5 kullanabileceğiniz proje şablonu. Daha çok multiplatform uygulamalarda tercih sebebi olacaktır. Bu uygulama türü aslında standart XAML uygulamanın içerisinde bulunan bir web tarayıcı ile sağlanmaktadır.

Direct 3D / Native Uygulamalar

WP 8 de 7. Sürümden farklı olarak oyun ve diğer ağır grafik işlemleri isteyen uygulamalar için D3D desteği bulunmakta. Bu uygulamalar C/ C++ kullanılarak geliştirilmekte. Evet, bu tür ile de RSS okuyup ekranda göstermeniz mümkündür. Fakat hem c / c++ seviyesine iniyorsunuz hem de ortada bir label bile yok.

Mixed Mode Uygulamalar

XAML uygulamalar ve native uygulamalar arasında köprü niteliğinde bir proje template’i oluşturmakta. Aynı solution içerisinde hem c# hem c/c++ uygulaması bulunur.

XNA ve XAML & XNA

Bu uygulama türü aslında WP 7.1 de kaldı. Fakat bu türde geliştirilen uygulamalar WP 8 ile de sorunsuzca kullanılabilmektedir. C/C++ bilmeden de grafik ağırlıklı uygulamalar ve oyunlar geliştirmek için kullanılmaktadır. D3D alternatifine göre kendi kütüphanesi bulunduğu için daha kısa sürede uygulama geliştirilebilir.

Gereksinimler

Windows Phone 8 üzerinde uygulama geliştirmek için geliştirici bilgisayarımızın hem donanımsal hem de yazılımsal olarak bazı şartları yerine getiriyor olması gerekmektedir. Uygulamalarınızı markete koyabilmeniz için bir Microsoft hesabı ve bu uygulamaları market üzerinde satmak isterseniz bir geliştirici hesabına sahip olmanız gerekmektedir. Bir oyun geliştirme niyetiniz varsa ve bu oyunun bir Xbox oyunu olmasını amaçlıyorsanız ayrıca bir Xbox geliştirici hesabına ihtiyacınız olacak.

Donanımsal Gereksinimler

Bu başlığı geliştirme ortamı ve emulasyon ortamı olarak ayırabiliriz.

Sadece Geliştirme ortamı

Yazılım gereksinimleri bölümünde belirteceğimiz Visual Studio 2012 ve Windows 8 için en düşük sistem gereksinimleri ilk adım olacak.

  • 1.6 GHz ve üzeri işlemci
  • 1 GB RAM (x86 işlemci varsa) 2 Gb Ram(x64 işlemci varsa)
  • 26 GB disk (x86 işlemci varsa) 30Gb disk (x64 işlemci varsa) (win 8 + vs2012)
  • DirectX 9 destekli 1024 x 768 ve üzerini destekleyen bir ekran kartı

Emulator ile Geliştirme Ortamı

Bir önceki gereksinimler yalnızca cihazı bilgisayara bağlayarak uygulamalarınızı test edebileceğiniz ortam içindi. Peki, uygulamaları bir Windows Phone 8 emulatorü ile denemek isterseniz? Bu durumda istekler biraz ağırlaşıyor. Hatta bir kısmı bilgisayarları tarafından desteklenmediği için ateş püskürenler var.

  • 64 bit işlemci
  • BIOS Desteği
    • Donanım Destekli Sanallaştırma.
    • Second Level Address Translation (SLAT).
    • Hardware-based Data Execution Prevention (DEP).
  • 4 GB RAM

İşlemci ve RAM tarafı kolayda bu diğer üç arkadaşın sistemimiz tarafından desteklenip desteklenmediğini nasıl anlayacağız?

Donanım destekli sanallaştırma (VMX) ve slat için http://technet.microsoft.com/en-us/sysinternals/cc835722 adresinde coreinfo uygulamasını yönetici olarak –v parametresi ile çalıştırdığımızda bize bu iki desteğin olup olmadığını söylecek. Intel işlemciler için SLAT, EPT adıyla geçerken AMD işlemciler için NP kısaltmalarıyla gösteriliyor.

DEP desteğinin kontrolü için bir uygulama indirmeye gerek yok komut satırını açıp wmic OS Get DataExecutionPrevention_Available komutunun çıktısını kontrol etmek yeterli. True ise sorun yok.

Yazılım Gereksinimleri

Sistemde yüklü olması gereken yazılımların listesi :

  • Windows 8 Pro x64 veya üstü
  • Windows Phone 8 SDK
  • Visual Studio 2012 veya Microsoft Visual Studio 2012 Express for Windows Phone

SDK’yı temin etmek

https://dev.windowsphone.com/en-us/downloadsdk adresinden Windows Phone 8 ile ilgili paketi seçip WPexpress_full.exe ‘yi indirip çalıştırmamız yeterli. Sistemimiz için gerekli Visual Studio Express ve Blend gibi yazılım geliştirme ürünleri yüklenecek. Eğer zaten Visual Studio 2012 yüklü ise sadece template’ler yüklenecektir. Aynı uygulamayı olası problemlerde yeniden yükleme amaçlı olarak kullanabilirsiniz.

HyperV nin Aktifleştilmesi

Emulatoru kullanabilmemiz için hyperv nin yüklenmiş olması gerekmete. Burada ufak bir hatırlatma yapayım, eğer VM Ware’in sanallaştırma uygulamaları yüklü ise hyperv aktifleştiğinde çalışmamaya başlıyorlar. Bununla ilgili bir taşıma makalesi hazırlamayı düşünüyorum.

HyperV yi aktifleştirmek için denetim masasında “Programlar ve Özellikler” bölümünden “Windows Özellikleri Aç Kapa” kısayolunu seçip HyperV kutucuğunu seçin.

Ya da alterantif olarak komut istemini yönetici olarak çalıştırıp dism.exe /online /enable-feature:Microsoft-Hyper-V komutunu çalıştırabilirsiniz.

Cihazın Geliştirici Cihazı Olarak Ayarlanması

Geliştirdiğiniz uygulamayı gerçek bir cihaz üzerinde denemek isteyeceksiniz. Fakat bu cihazın developer unlock yani geliştirici için açılmış olması gereklidir. Aksi halde şöyle bir hata alırsınız :

Error    1    Failed to connect to device as it is developer locked. For details on developer unlock, visit http://go.microsoft.com/fwlink/?LinkId=195284.

Bunun için sdk içerisindeki Phone Registration uygulamasını kullanmak gerekli. Bu uygulamayı başlat ekranından veya sdk dizini altında (\Tools\Phone Registration\PhoneReg.exe) bulup çalıştırın. Cihazın ekranı kilitli durumda değil ise resimdeki gibi ekranla karşılaşacaksınız.

Register düğmesine bastığınızda, sizden geliştirici hesabınızın bilgileri istenecektir. Cihazın bağlı olduğu hesap ile geliştirici hesabı aynı olması gerekmemektedir. Geliştirici hesabı bir Microsoft hesabıdır ve https://dev.windowsphone.com üzerinden kayıt olunarak alınabilir. Uygulamatın markete koyulabilmesi için dreamspark hesabınız ile ilişkilendirme yapabilirsiniz.

26.08.2013 Not: Artık ücretsiz olarak telefonları unlock yapabiliyoruz. Fakat, telefona atılacak uygulama sayısında limitler daha düşük.

Giik Fm

Daron Yöndem her zaman olduğu gibi öncesinde kimseye bir kelime çıtlatmadan bir projesini daha hayata geçirdi. Geek geyikleri bulabileceğiniz bu adres ilk kayıttan geleceğinin ne kadar iyi olacağını gösteriyor. Fakat muhabbet güzel olunca 40dk ayırmak cidden zorlaşıyor. Tavsiyem, kaydı indirin ve %25~50 hızlandırarak dinlemeniz yönünde olacak.

 

Giik Fm On Air

 

Visual Studio 2012 ile 2010 renkleri

 

Bir önceki yazıda 2012′nin renklerini de pek sevmediğimi söylemiştim. Bu sıkıntımı çözmek için biraz araştırma yaptığımda Brian Chavez’in renkleri düzenlemek için yaptığı tool’a rastladım. Bu tool u buradan indirebilirsiniz.

Bu araç ile 1- 2 saat uğraşarak Visual Studio 2010′un renklerinin büyük kısmını aktarmayı başardım. Bununla ilgili yaptığım registry dosyasına http://www.cihanyakar.com/2010theme.zip    ulaşabilirsiniz.

Elde edeceğiniz sonuç :

Ek :

Bu yazının hemen ardından vs2010′da olan tema eklentisi 2012 için düzenlendi. Registry vb. uğraşmadan hazır temalardan seçim yapmak için :

http://visualstudiogallery.msdn.microsoft.com/366ad100-0003-4c9a-81a8-337d4e7ace05

adresinden eklentiyi kurabilirsiniz.

 

 

Visual Studio 2012 Menü Çubuğunu Eski Haline Getirme

Metro arayüzünü seviyorum, fakat Visual Studio 2012′yi bu konuda kendimce başarısız buluyorum. Özellikle renk ve BÜYÜK harf konusunda. Bu konulardaki araştırmalarımın sonuçlarını benim gibi kendince bu konuda rahatsız olanlar için paylaşıyorum :)

Menü çubuğunun şu görüntüsünden rahatsızsınız :

registy’yi açıyoruz ve

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\General\

alanına gelip  SuppressUppercaseConversion  adında bir DWORD değeri oluşturup değerine 1 veriyoruz.

ve ardınan istenen sonuçla karşılaşıyoruz :

 

 

 

Web Güvenliğinde Otomasyon ve SQL Injection Etkinliği

Yarın, Tütev’de güzel bir etkinlik olacak. Katılıyor olacağım. Yakınsanız kaçırmayın derim.

Yer: TÜTEV ( Google map )

Yandex Haritalar (Tandoğan Metrosundan Erişim) )

Facebook Etkinliği: Etkinliğe Kayıt Ol

Tarih: 26 Mayıs 2012 – 17:00 – 18:10

Etkinlik saatinde canlı olarak izlemek için: http://ankara.yazilimatolyesi.org/canli-yayin/

Konuşmacı Konu
Onur Yılmaz Web Güvenliğinde Otomasyon ve SQL İnjection

The maximum uri length of 2083 was exceeded. Çözümü

RIA Services ile çalışırken  başlıkta geçen “The maximum uri length of 2083 was exceeded.” hatasını aldım. Hata çok şaşırtıcı olmadı çünkü RIA’nın sorguyu GET ile yaptığını biliyordum. Http GET’in maalesef bir karakter limiti var, bu limit tarayıcıdan tarayıcıya, sunucudan sunucuya değişsede 2048′i aşmamak en doğrusu aslında.

GET’in limitine takılınca, sorguyu nasıl POST yöntemi ile talep edebilirime bakınca şu yöntemi buldum :

[Query(HasSideEffects=true)]

sorgularınızı böyle belirtirseniz, karakter limitlerine takılmayacaksınız.

Purevison 2 HD

Biraz yazılım dışına çıkıyorum  ve kontakt lens kullanan arkadaşlar için bir iki tecrübe aktarıyorum:)

Bugüne kadar hep Johnson&Johnson markalı kontakt lensleri kullandım (10yıldan fazla). Bir keresinde doktor tavisyesi ile Ciba Vision’ın adını hatırlamadığım ürününü kullanayım demiştim ve 1 lensi ancak 1 gün kullanabilmiştim -gün sonunda bembeyaz oluyordu. Geçen gün meraktan Purevision 2 HD (evet high definition) adında oldukça övülen ve kullananların memnun kaldıkları -ben katılmıyorum-  bir kontakt lens aldım ve sonuç Ciba Vision kadar olmasa da maalesef kötü.

1.si J&J Acuvue Oasys kullanırken gün içinde lensin varlığını hiç hissetmezken bu meret gözümü kapamayı unuttuğumu (kod yazarken) anlayınca  önce bulanıyor sonra gözümü kırptığımda kuru yüzeyini göz kapaklarımda çok rahat hissedebiliyorum. Bilgisayar kullananları sanırım düşünmemişler.

2.si lens çok ince ve sert, makbulü belki budur fakat saklama kabından çıkartmak işkence.

3. olarak lensin üzerindeki ters mi düz mü olduğunu belirten işaret sadece D harfi. Evirip çevirmem gerekiyor mereti. Oasys de ne güzel 123 yazıyor. (Oasys’den önce AV yazıyordu o daha iğrenç, ters olduğunda VA yazdıyor :D yine okunaklı).

Bir de Renu ‘dan başka solüsyon kullandığımda temizleme zamanım 2 katına çıkmıştı..

Daron Yöndem’den Kasım Ayı Webinerleri, SL, WP7, Win8, IE10, Azure

 

Daron Yöndem, yeni bir web cast serisine başlıyor. .net ile açılan yeni kapılara
giriş niteliğinde olan bu derseler pek kaçıralacak türden değiller, üstelik
anlatan Daron Yöndem olunca!

02 Kasım | 21.00 -

Silverlight geliştiricileri için Windows Phone 7.5’e Giriş
03 Kasım | 21.00 -

Windows Phone 7.5’te Multitasking

15 Kasım | 21.00 -

IE10 ile HTML5 Dünyasında Bir Gezinti

17 Kasım | 21.00 -

Windows 8 İle Tablet Development’a Giriş

18 Kasım | 21.00 -

Windows 8 ve Windows Runtime’ın İncileri

23 Kasım | 21.00 -

Silverlight, RIA Services
ve Kendi Business Objeleriniz, Kendi Data Katmanınız

24 Kasım | 21.00 -

Windows Azure Platformu Da Ne Nedir?
25 Kasım | 21.00 -

Windows Azure’a Migration Senaryoları
 

C# ve Vb.net Farklılıkları 5 : Taşma Kontrolü

Hemen aynı gibi görünen şu iki kodu inceleyin :D

C#:

int t = 260;
byte y = (byte) t;
Console.WriteLine(y.ToString());

Vb.net :

Dim t As Integer = 260
Dim y As Byte = CType(t, Byte)
Console.WriteLine(y.ToString())

Bu iki kodu çalıştırdığımızda ekran görüntüleri şu şekilde olacaktır :

C# Sonuç:

C# Sonuç

Vb.net Sonuç:

Vb Sonuç

Ne yaptık, neden böyle oldu sorusunun cevabına gelince. Byte veri türü bildiğiniz üzere en fazla 255 değerini alabilir. Biz değeri 260 olan integer türünden veriyi byte türünden bir değişkene aktarmaya çalışıyoruz.  Doğal olarak yapmaya çalıştığımız işlem mümkün değil. Peki ama C# nasıl oldu da 260′ı 4 olarak sonuçlandırdı. Basit, C# bilinçli tür dönüşümlerinde  sayısal ifadelerde büyük olan türün değerinin küçük olan türün alabileceği farklı değere (byte için 0 dan 255 e 256 farklı değer)  ile mod işlemi yapar ve sonucu atar. Örneğimizde 260 mod  256 uygulanarak sonuç 4 bulunmuştur. Peki biliçsiz tür dönüşümlerinin şampiyonu Visual Basic .net nasıl oldu da exception fırlatmayı başardı ?  Aslında aynı exception’ı C#’da fırlatıyor olabilirdi, bu dile özgü bir senaryo değil aslında.  Derleme varsayılanı olarak C#’da aritmetik taşma kontrolü devre dışı iken Vb.net’te ise aktif olarak belirtilmiştir. Eğer ki bu davranışın vb.net ile de geçerli olmasını istiyorsanız, projenizin gelişmiş derleyici ayarlarından “Remove integer overflow checks” seçeneğini işaretlemesiniz. İşlemin ardından uygulamanız c#’da olduğu gibi davranacaktır.

Vb.net'de taşma kontrolünün devre dışı bırakılması

C# ve Vb.net Farklılıkları 4 : Null (Nothing) kontrolü

Vb.net’in esrarengiz davranışlar sergilediği bir konudur bu hiçlik kontrolü. Kullanacağınız yönetemde C#’dan farklı olarak verinin türü hakkında da bilgi sahibi olmanız gerekebilir. Vb.net’de null değerlerin karşılığını Nothing olarak öğrenmiş olabilirsiniz ama bu isim çelişkisinde biraz farklılıklar var, hemen aynı gibi görünen kodlarımızı dökelim ortaya:

Dim sayi As Integer = 0

If sayi = Nothing Then
Console.WriteLine("NULL")
Else
Console.WriteLine("NULL DEĞİL")
End If
int sayi = 0;

if (sayi == null)
{
    Console.WriteLine("NULL");
}
else
{
    Console.WriteLine("NULL DEĞİL");
}

Çıktıya bakalım ve hemen yoruma geçelim :

Vb.net:

Vb.net Sonuç

C#:

C#

Peki ama neden?  “0 hiç değil bir değeri vardır, o yüzden c#’ın sonucu doğrudur”   şeklinde düşünebilirsiniz. Peki o zaman bir soruda ben sorarım “integer’ın null olabilme ihtimali var mıdır ki?” (sakın integer? demeyin o integer değil başka bir nesne). Sorunun cevabı hayır olacaktır çünkü integer bir referans değil değer türüdür. Peki ama o zaman “vb.net bunun Nothing olduğunu nasıl doğruladı ?”  Cevap vb.net’teki çeşitli null kontrollerinden ve bunların referans ve değer türlerine göre farklı davranışlarında. Bu yöntemler şunlardır:

1:

If obje = Nothing Then

Bu kullanımda değişken;

referans türünde ve bir nesne belirtmiyor ise true dönecektir.

değer türünde ve nesenin değeri o nesnenin varsayılan değeri ise (integer için varsayılan değer = 0) true dönecektir!  işte bu kısım C# ve Vb.net’in ayrıldığı kısım oluyor.

Değer türündeki nesnelerin başlangıç değerlerinde olup olmadığını kontrol etmek için kullanın. Bir değer türündeki nesneyi varsayılan değerine getirmek için Nothing’e eşitlemeniz yeterlidir.

2.

If IsNothing(obje) Then

Bu kullanımda değişken;

referans türünde ve bir nesne belirtmiyor ise true dönecektir.

değer türünde ise daima c#’da olduğu gibi false dönecektir.

3.

If Equals(obje, Nothing) Then

Bu kullanımda değişken;

referans türünde ve bir nesne belirtmiyor ise true dönecektir.

değer türünde ise daima c#’da olduğu gibi false dönecektir. IsNothing

4.

If obje Is Nothing Then

Bu kullanımda değişken;

referans türünde ve bir nesne belirtmiyor ise true dönecektir.

değer türünde ise kod derlenemeyecek hata verecektir.

Eğer kullandığınız değişkenin referans türü olduğunu biliyorsanız seçmeniz gereken yol bu olmalıdır.

Tüm bu yöntemler derlenme aşamasında nesnenin türü biliniyorsa optimizasyondan geçirilirler. Nesnenin türü bilinmiyor ise, nesnenin türüne yorum yapılır.

C# ve Vb.net Farklılıkları 3 : Ayraçlar (Brackets)

Ayraç , soru işareti gibi adı üzerinde bir noktalama işareti. Konunun tamamından alakasız bölümlerin ayrılmasını sağlarlar. Bölümün içeriğine göre çeşitli parantezler veya başlangıç,bitiş noktalama işaretleri kullanılabilir Konuşma dillerinin yazıya çevrilmesinde olduğu kadar çoğu programlama dilleri içinde -bizim için c# ve vb.net yeterli- hayati öneme sahiptir. Vb.net ve C# ‘da ayraçların ayırdıkları kısımların cinsi maalesef farklı olmakta. Sıra ile gidelim bakalım, hangi dilde hangi ayraç ne işlere yarıyor görelim. Tabloda önce ortak özellikleri yazılmıştır.

Visual Basic .net Visual C#

 ( ) Yay Parantezler

Metot Tanımlamalarında metodun alabileceği parametrelerin belirtilmesinde kullanılır.
Sub MetotIsmi (p1 as String)

Metot Çağrılarında metoda parametre gönderirken kullanılır

MetotIsmi("Merhaba")

NOT: Eğer metot, parametre almıyorsa parantezlerin kullanımı zorunlu değildir. Sadece çağrılmak istenen metodun isminin yazılması yeterlidir.

İfadelerde, önce hesaplanması istenen kısımları ayırmak için kullanılır.

x = (5 + 4) / 2  'önce 5 + 4  hesaplanacaktır. aksi halde işlem önceliğinden 4 /2 hesaplanır.

Dizilerin belirtilmesinde kullanılır.

Dim x() as String  ' değişkenin/sabitin adında
Dim x as String()  'veya tür üzerinde belirtilebilir

Eğer parantez içine sayı yazılır ise dizinin boyutu belirtilmiş olur. Parantez içine yazılan sayı, dizinin eleman sayısını değil, dizinin en son elemanının indisini belirtir. (2) 3 elemanlı tek boyutlu bir diziyi, (2,1) 3 e 2 elemanlı, iki boyutlu bir diziyi belirtir. Bunun nedeni vb.net öncesi visual basic sürümlerinde dizilerin başlangıç indisleri (lowerbound) ayarlanabiliyor olması idi.

Generic ifadelerde tür belirmek için “(Of” ön takısı ile kullanılır

Dim  liste = new List (Of String) 'string türünden değer alan bir List sınıfı tanımlar
Metot Tanımlamalarında metodun alabileceği parametrelerin belirtilmesinde kullanılır.
void MetotIsmi (string p1)

Metot Çağrılarında metoda parametre gönderirken kullanılır

MetotIsmi("Merhaba");

NOT: Metot parametre içermiyorsa dahi parantezlerin kullanılması zorunludur.

İfadelerde, önce hesaplanması istenen kısımları ayırmak için kullanılır.

x = (5 + 4) / 2;  //önce 5 + 4  hesaplanacaktır. aksi halde işlem önceliğinden 4 /2 hesaplanır.

 [ ] Köşeli Parantezler

Kullanıcının tanımladığı nesnelerin adının herhangi bir anahtar sözcük
olduğu durumlarda.
Örneğin bir sınıf kütüphanesinde yer Next adında bir metot tanımlamak
istiyorsunuz. Ya da kullandığınız kütüphanede tanımlanmış. Vb.net’e ait Next
sözcüğü ile karışmaması için [] içinde kullanabilirsiniz. Diğer dillerden
yapılan çağrılarda [] kullanılmaz.
Dizilerin Belirtilmesinde Kullanılır

int[] sayilar; 

Attribute Belirtilmesinde Kullanılır

 [Serializable]

class OrnekSinif

 { } Süslü Parantezler

Dizileri göstermede kullanılır.

 Dim sayilar = {5, 150, 8, 130, 5}

Başlatıcı (Initializer) ifadelerde with sözcüğü ile birlikte nesnenin
özelliklerinin belirtilmesinde kullanılır

Dim dugme = New Button With {.Text = "Tıkla", .Size = New Size(50, 32)}
Dizileri göstermede kullanılır.
int[] sayilar = new[] {5, 150, 8, 130, 5};

Başlatıcı (Initializer) ifadelerde nesnenin
özelliklerinin belirtilmesinde kullanılır

 Button dugme = new Button() {Text = "Tikla",
Size = new Size(50, 32)};

Kod Bloklarının Belirtilmesinde kullanılır

using (var ms = new MemoryStream())
{}

 < > Açılı Ayraçlar (Brokets)

Attribute Belirtilmesinde Kullanılır

Class OrnekSinif
Generic ifadelerde tür belirmek için  kullanılır
 List sayiDizisi = new List();

[box type="info"] Bir iki atladığım örnek olabilir, fark ettiğimde ya da siz belirttiğinizde düzenlerim.[/box]

C# ve Vb.net Farklılıkları 2 : Tam sayılarda bölme işlemi

Başlık biraz uzun oldu :). Ama ciddi bir farklılık olduğu için mümkün olduğunca açık yazmaya çalıştım.  Aslında davranış farkını oluşturan şey ondalıklı sayı şeklinde sonuç verecek olan matematiksel işlemler. 3 ün yarısını almak gibi.

Birbirinin aynı görünen şu kodları inceleyin :

C# :


static void Main(string[] args)

{

double sonuc = 3/2;

Console.WriteLine(sonuc);

Console.ReadLine();

}

Vb.net:


Sub Main()

Dim sonuc As Double = 3 / 2

Console.WriteLine(sonuc)

Console.ReadLine()

End Sub

İşlem aynı olsada sonuç aynı olmayacaktır.

Vb.net de  bir matematiksel işlemin sonucu hesaplanıyorken, eğer sayılardan en az birisi ondalıklı ise (double,single) bu türlerden en geniş olanı şeklinde sonuç hesaplanır ve değişkenin türüne çevrilir. Eğer her tüm sayılar ondalıklı değil ise (integer,long…) ve bölme  işlemi yapılmıyorsa bu türlerden en geniş olanının türünde hesaplama yapılır ve değişkenin türüne çevrilir. Ve örneğimizdeki gibi, ondalıklı olmayan sayılarda bölme işlemi yapılıyorsa sonuç double olarak üretilir ve değişkenin türüne çevrilir. Bizim işlemimizde ikiside integer olan 3 ve 2 bölme işlemine tabi tutulduklarından sonuç double olarak hesaplanacak, değişkenin türüde double olarak belirtildiğinden herhangi bir dönüştürme yapılmadan 1.5 olarak aktarılacak.

Kısaca vb.net de :

integer / integer = double
integer / double = double
integer / single = single

C#’da ise durum biraz farklı, ondalıklı sayı varsa ve bölme işlemi yoksa hesaplamalar vb.net ile aynı şekilde yapılır. Ama tam iki sayı bölme işlemine tutulursa sonuç yine tam sayı olarak hesaplanır. Bu durumda 3 ün 2 ye bölümü yuvarlanarak 1 tam sayısı olarak sonuç verir. Eğer 1.5 sonucunu istiyor olsa idik, 3 ve 2 den en az birini ondalıklı bir türde tanımlamış olmalıydık. Örneğimizde 3 sayısını 3.0 olarak veya 3F olarak veya (double)3 …. gibi bir şekilde ondalıklı hale getirirseniz sonucun 1.5 olarak döndüğünü göreceksiniz.

Kısacası c# da :

int / int = int
int / double = double
int / float = float

C# Sonuç :

Vb.net Sonuç :

Ufak Not : Vb.net’de “/” işleminin yanı sıra “\” işlemi bulunmaktadır. Bu işlemde sayıların türleri ne olursa olsun sonuç daima tam sayı olacaktır. Yine türlere göre integer ya da long olarak farklılık gösterir.

C# ve Vb.net Farklılıkları 1 : FOR

Vb.net ‘i daha çok sevsem de, her zaman tercih etsem de hayatın acı gerçeği olarak C# kullanıyor olmam gerekiyor. Her ikisi .net dili olmasına rağmen bir takım özellikler bir dilde bulunurken diğerinde bulunmuyor ya da benzer çalışmasını umduğunuz yapılar hiçte beklediğiniz gibi çalışmayabiliyorlar. Bunun en güzel örneklerinden biriside FOR döngüleri olsa gerek, Aşağıda yer alan C# ve Vb.net kodlarını inceleyeniz :

Vb.net :

    Sub Main()

        For i = 1 To SayiGetir()
            Console.WriteLine(i)
        Next

        Console.ReadLine()

    End Sub

    Function SayiGetir() As Integer
        Console.WriteLine("çalıştım")
        Return 5
    End Function

c# :

        static void Main(string[] args)
        {
          for (int i = 1; i <= SayiGetir(); i++)
          {
              Console.WriteLine(i);
          }
            Console.ReadLine();

        }

       static int SayiGetir()
        {
            Console.WriteLine("Çalıştım");
            return 5;
        }

Her iki döngüde 5 defa tur atacak ve i değişkenini konsol ekranına yazacak. Peki ama, SayiGetir metodu kaç defa çağrılacak? Cevap şudur ki, Vb.net döngüsü döngünün kaç defa dönmesi gerektiğini sadece 1 kere hesaplayacak, C# döngüsü ise bir “do while” döngüsü gibi her döngüde şartın sağlanıp sağlanmadığını kontrol edecektir. Bu sebeple özellikle C# tarafında hesaplama işleminin döngüden önce yapılması gerekmektedir.

Vb.net Sonuç :

Vb.net For

C# Sonuç :

csharp for

LINQ kitabı

Blog’u uzun bir süre yazısız bırakmamın nedeninin ürünü nihayet hazır. Yakın zamanda kitapçılarda yerini alacak.

Kitapta yer alan konular şu şekilde :

  • Adlandırılmış Parametreler (named parameters)
  • Generic İfadeler
  • Arayüzler (Interfaces)
  • Linq ile Sık Kullanılan Arayüzler
  • Koleksiyon Sınıfları
  • Lambda Expressions ve Anonymous Methods
  • Genişletilmiş (extended) Metotlar
  • Veri Kaynakları
  • Linq
  • Linq isim alanları (ad uzayları…)
  • Linq Sorguları
  • Linq Sorgularında hata ayıklama
  • Referans ve Değer Türlerinin Linq içinde yeri
  • Linq ile Kullanılan Metotlar ve Anahtar Sözcükler
  • Paralel Linq
  • Linq to Objects
  • Linq to XML
  • Linq to DataSet
  • Linq to Sql
  • Entity Framework
  • Linq to Twitter
  • Linq Sağlayıcısı Geliştirme
  • Araçlar
  • Yararlı İnternet kısayolları

İlk yazarlık deneyimim olduğu için kusurlarımı hoş karşılamanız dileği ile :)  Kitap bildiğim kadarıyla 24TL’ye raflarda yerini alacak. İnternet mağazalarında satışa çıktığı zaman linkleri buradan paylaşacağım. Kitabın sırtında LINQ Yakar şekilde eğlenceli bir durum olmuş :)

İçindekiler bölümü için : http://www.dikeyeksen.com/pdf/linq-icindekiler.pdf

Kitapla ilgili daha fazla bilgi için : http://www.dikeyeksen.com/programlama/linq-language-integrated-query.html

Teşekkürler