Fırat Esmer

Microsoft Yazılımları

8 Haziran 2011 Yazgeliştir Zirvesi

Yazgeliştir8 Haziran 2011 Çarşamba günü, Microsoft İstanbul Ofisi'nde Yazgeliştir zirvesi gerçekleşecek. Etkinlikte Microsoft Regional Director (RD), Microsoft Most Valuable Professional (MVP) ve Yazgeliştir editörleri konuşmacı olacak. Saat 10.00'da başlayıp, 4 paralel sunum ile devam edecek olan etkinliği kaçırmamanızı tavsiye ederim. Çünkü sunumların hepsi farklı dalda gerçekleşeceği için, her kesimden yazılımcıya hitap edecek.

Etkinlik başvurusu için şuan link veremiyorum çünkü kayıtlar 1 Haziran'da başlayacak. Ancak etkinlik hakkında daha fazla detay almak isterseniz buraya tıklayabilirsiniz. Sunumların saatleri ve konuları için bilgi almak istiyorsanız, aşağıdaki etkinlik programına göz atmanız yeterli. Faydalı olması dileğiyle. :)

 Yazgeliştir Etkinlik Programı

Windows Phone "Mango" Duyuruldu

Windows Phone24 Mayıs 2011 Salı günü Microsoft tarafından açıklanan Windows Phone yeni sürümü "Mango" resmiyete kavuşmuş oldu.

Akıllı telefonların işletim sistemi pazarında geri kalan Microsoft, bu seferki sürümüyle oldukça iddialı. Akıllı telefonların daha da akıllanacağı yanı sıra daha iyi bir internet deneyimi, yaratıcı ve daha zeki uygulamalar ve gelişmiş iletişim olanağıyla yenilendiği açıklamasını yapan Microsoft, Windows Phone Mango sürümünde 500'den fazla yenilik olduğunu söylüyor. Gelin en dikkat çekicilerinden bir kaç tanesine göz atalım.

  • Facebook chat ve Windows Live Messenger gibi iletişim uygulamaları bir yerde toplandı. Bu sayede iletişim odaklı uygulamalar arasında geçiş daha kolay ve rahat olacak,
  • Karşımızda daha gelişmiş sosyal ağ seçenekleri bulunacak. Bunlardan bir tanesi rehbere Twitter ve LinkedIn eklentisi,
  • Çoklu e-posta desteği ve bunların bir yerde toplanması (gelen kutusu),
  • Sesi metne, ya da metni sese çevirme işlemi,
  • Multitasking ile uygulamar arası geçiş, programları arka plana atma hatta arka planda çalışan uygulamaların sistem kaynağını tüketmemesi gibi önemlerin olması,
  • Gücünü donanımdan alan, HTML5 destekli yeni Internet Explorer 9,
  • Bing servisleri ve görsel arama. Örneğin bir cisim hakkında bilgi almak istiyorsunuz. Kamera ile bu cismi inceliyorsunuz ve bu incelediğiniz cisim hakkında bilgiler hemen önünüze dökülüyor.

Çok daha fazla yenilik olduğunu ve videosu bulunduğunu söylemeliyim. Haberin en altında 10 dakikalık bir Windows Phone Mango videosu ile yenilikleri görebilirsiniz. Ama ondan önce bilmeniz gereken bir şey var. Mango, güncelleme ile gelecek ve yeni dil destekleri olsa dahi Türkçe dil desteği olmayacak. Bunun sebebi ise Türkiye'de henüz Windows Phone 7'li telefonların satılmaması.

Windows Phone Mango hakkında daha fazla bilgi almak istiyorsanız buraya, eğer geliştiriciyseniz ve Windows Phone Developer Tools 7.1 Beta'yı indirmek istiyorsanız da buraya tıklayın.

BONUS ! Eğer Windows Phone 7 geliştiricisiyseniz Microsoft tarafından ücretsiz dağıtılan "Programming Windows Phone 7" e-kitabını indirmek için buraya tıklayın (kodlar dahil).

27 Mayıs 2011 Microsoft WebCamp Etkinliği

27 Mayıs'ta, Microsoft İstanbul Ofisi'nde, saat 10.00 - 17.00 saatlari arasında gerçekleşecek olan Microsoft WebCamp serisinin bu ayağını kaçırmamanızı öneririm. Daron Yöndem eşliğinde HTML5 ve Internet Explorer 9 ile Web uygulamaları gerçekleştirirken bir yandan da aşağıda sunacağım etkinlik ajandasındaki konulara değinilecek. Yaklaşık 2 saatlik süreci laboratuar çalışması için ayrılan bu etkinlik için dizüstü bilgisayarlarınızı getirmeyi unutmayın. Etkinlikte görüşmek üzere :)

Kayıt olmak için buraya tıklayın.

Microsoft WebCamp Etkinlik Programı

ADO.NET ile MARS Kullanımı

Hazırlamış olduğumuz projelerde bir kere dahi olsa bir yerlerde açık DataReader unutmuşuzdur (Connected Mimari ile çalışıyorsak). Bu yüzden her DataReader kullanımı öncesi connection'ı kapatıp, sonraki işlemde tekrar açmak ve bunun kontrolünü neredeyse her sayfada yapmak çok can sıkıcı ve projemizi hataya açık bir hale getiriyordu. Fakat tek bir connection üzerinden, mevcut connection'ı kapatmadan birden fazla işlemi gerçekleştirmek mümkün. İşlemlerden kastım sorgu ve stored procedure'ler. Peki nasıl yapacağız bu işi?

Senaryo : Veritabanımız için bir tane SqlConnection, 3 tane SqlCommand ve bu SqlCommand'ları çalıştırmak için de 3 tane SqlDataReader yaratacağım. Yaratmış olduğum bu tek connection üzerinden (hiçbir DataReader arasında bağlantıyı açıp / kapatmadan) sorguları çalıştıracağım.

Bilinmesi Gerekenler :

  • Makaledeki örnek .NET Framework 3.5 ve Visual Studio 2010 ile hazırlandı,
  • Makale, Northwind veritabanı gerektirmektedir. Northwind veritabanını indirmek istiyorsanız buraya tıklayın. (projenin boyutunu artırmamak için eklemedim)
  • Makalede dispose işlemlerini yapmadım (veya using)

Yukarıda belirtmiş olduğum yöntem dışında yapılacak iki alternatif yol var. Birincisi bağlantıyı açıp kapatmak, ikincisi ise çalıştırmak istediğimiz sql sorgusu kadar connection tanımlamak. Ama ADO.NET 2.0 ile gelen yeni bir özellik var. Adı MARS (Multiple Active Result Sets). Tanımlamış olduğumuz SqlConnection'larda MARS default olarak false'tur. MARS'ı aktif etmek için yapmanız gereken tek şey yaratmış olduğunuz SqlConnection'a "MultipleActiveResultSets=true" ifadesini eklemek. Ama daha önce bunu neden yaptığımızı anlatmak istiyorum. Aşağıdaki kod parçasıyla Northwind veritabanında bulunan "Products" ve "Customers" tablolarından veri çekeceğim. Basit bir işlemle bunu gerçekleştirmek istiyorum.

SqlConnection baglanti = new SqlConnection("Server=.; Database=Northwind; Trusted_Connection=Yes");

SqlCommand komut1 = new SqlCommand("select * from Products", baglanti);
SqlCommand komut2 = new SqlCommand("select * from Customers", baglanti);

baglanti.Open();

SqlDataReader okuyucu1 = komut1.ExecuteReader();
SqlDataReader okuyucu2 = komut2.ExecuteReader();

baglanti.Close();

Hata

ve GÜM! Yukarıdaki hata mesajında (There is already an open DataReader associated with this Command which must be closed first.) diyor ki : "Bu komut ile ilişkili, öncelikle kapatılması gereken açık bir DataReader zaten var." Akla gelen ilk yollardan birisi hemen Connection'ımızı kapatıp tekrardan açmak olacak. O da böyle görünecektir.

baglanti.Open();

SqlDataReader okuyucu1 = komut1.ExecuteReader();

baglanti.Close();

baglanti.Open();

SqlDataReader okuyucu2 = komut2.ExecuteReader();

baglanti.Close();

İkincisi ise DataReader sayımız kadar SqlConnection yaratmak.

SqlConnection baglanti = new SqlConnection("server=.; database=northwind; Trusted_Connection=Yes");
SqlConnection baglanti2 = new SqlConnection("server=.; database=northwind; Trusted_Connection=Yes");

SqlCommand komut1 = new SqlCommand("select * from Products", baglanti);
SqlCommand komut2 = new SqlCommand("select * from Customers", baglanti2);

baglanti.Open();
baglanti2.Open();

SqlDataReader okuyucu1 = komut1.ExecuteReader();
SqlDataReader okuyucu2 = komut2.ExecuteReader();

baglanti.Close();
baglanti2.Close();

Bu iki alternatif yol da işimizi görür. Ancak hiç gerek yok. Şimdi en kısa ve güzel yolu yazacağım.

// MultipleActiveResultSets=True ibaresini SqlConnection'ımıza ekledikten sonra işimiz bitiyor.
SqlConnection baglanti = new SqlConnection("server=.; database=northwind; MultipleActiveResultSets=True; Trusted_Connection=Yes");

SqlCommand komut1 = new SqlCommand("select * from Products", baglanti);
SqlCommand komut2 = new SqlCommand("select * from Customers", baglanti);

baglanti.Open();

SqlDataReader okuyucu1 = komut1.ExecuteReader();
SqlDataReader okuyucu2 = komut2.ExecuteReader();

baglanti.Close();

SQL Server Profiler ile bağlantıyı incelediğimizde bağlantının kapatılmadan art arda gerçekleştiğini göreceksiniz.

SQL Server Profiler

Not : Multiple Active Result Sets, MS SQL Server 2005 ve yüksek versiyonları tarafından destekleniyor. MS SQL Server 2005'in altındaki versiyonlar için kullanılırsa ne olur bilmiyorum. Hatta deneme şansınız olursa bana da bildirin. Bu arada SqlConnection.ServerVersion ile bağlandığınız veritabanı versiyonunu kontrol edebilirsiniz.

Uygulamalı halini görmek için buraya tıklayın.

ASP.NET İle reCAPTCHA Kullanımı

reCAPTCHAEğer bu makaleyi okumaya niyetliyseniz, birazdan güzel bir güvenlik önlemi olan CAPTCHA'yi (Completely Automated Public Turing Test To Tell Computers and Humans Apart, yani sizin insan mı yoksa bilgisayar mı olduğunuza karar veren mekanizmayı) ASP.NET ile kullanmayı öğreneceksiniz. Peki nedir bu CAPTCHA? CAPTCHA, bir resim üzerine işlenmiş metinin insan tarafından okunabilmesi için kolay ancak bilgisayar (bot diyelim) tarafından okunulabilmesi için zor sözcük üreten programdır. En az bir kere görmüşsünüzdür bu uygulamayı. Siteye üye olurken ya da yorum gönderirken sizden insan olup olmadığınızı anlayabilmeleri için soru sorarlar. Siz de cevap verirsiniz. Cevap doğruysa insansınızdır, yanlış ise bot muamelesi görürsünüz. İşte o yapı CAPTCHA'dir. Bu CAPTCHA'nin doğru resmi tıklatma, üzerinde rakamlar bulunan kutuları sıraya dizdirme gibi farklı varyasyonları da mevcut. Peki niye böyle bir şey yapıyorlar? Sebebi ise yorum eklenen bir sayfa düşünün, buraya botların girip 100'lerce gereksiz yorum yazdığını göz önüne alırsak hem görüntü hem de gereksiz veri açısından çok can sıkıcı bir durum olacaktır. Evet öyleyse başlayalım.
Senaryo : Bir adet textbox, bir adet button ve reCAPTCHA uygulaması ile post işlemi gerçekleştirmeye çalışacağız.
Bilinmesi Gerekenler :
  • Makaledeki örnek .NET Framework 3.5 ve Visual Studio 2010 ile hazırlandı,
  • reCAPTCHA uygulaması Google tarafından sunulan ücretsiz bir servis ancak Google hesabınız olması lazım.
İlk olarak reCAPTCHA uygulamasını indirmemiz için bir kaç basit adım gerekiyor.
İlk adımımız reCAPTCHA'nin sitesine girip "USE reCAPTCHA ON YOUR SITE" yazısı bulunan butona tıklıyoruz.
Use reCAPTCHA On Your Site
Daha sonra ise "Sign Up Now!" yazısı bulunan butona basıp Google hesabımız ile giriş yapıyoruz.
Sign Up Now
Google hesabımız ile giriş yaptıktan sonra karşımıza şöyle bir ekran çıkacak.
Create reCAPTCHA key
Burada domain yazan kısma internet sitenizin ismini yazarak "Create Key" butonuna bastığınızda sitenize özel iki adet key üretecektir. Bunlar private key ve public key'dir. Ekran görüntüsünde bulunan "Enable this key on all domains (global key)" opsiyonunu en sonunda anlatacağım.
Daha sonraki adımda domain ismine göre üretilecek şifreler aşağıdaki ekran görüntüsündeki gibi görünecektir.
reCAPTCHA Keys
Tüm işlemleri geçtik. Artık gerekli olan dökümanları indirip projemize dahil edeceğiz. Yukarıdaki ekran görüntüsünde bulunan "reCAPTCHA plugins and libraries" yazısına tıklayıp gerekli olan yerden de indirebilirsiniz ancak adım sayımızı biraz artıracağı için size direkt indirmeniz için indirme linkini veriyorum. (TIKLAYIN)
İndirdiğiniz sıkıştırılmış dosyayı açtığınızda karşınızda bir DLL dosyası göreceksiniz. Bu DLL dosyasını projenizde kullanabilmek için projenize sağ tıklayarak "Add Reference" demeniz gerekiyor.
reCAPTCHA DLL
Şimdi kod yazma işlemimiz başlıyor. Sayfanızın source kısmında üst tarafa aşağıdaki satırı ekleyin.
<%@ Register TagPrefix="recaptcha" Namespace="Recaptcha" Assembly="Recaptcha" %>
Burada reCAPTCHA kontrolünün sayfamızda kullanılacağını söylemiş oluyoruz. Daha sonra ise ;
<recaptcha:RecaptchaControl ID="recaptcha" runat="server" PublicKey="SİZE VERİLEN PUBLIC KEY’İ GİRİN" PrivateKey="SİZE VERİLEN PRIVATE KEY’İ GİRİN" />
satırını form tag'leri arasına eklediğinizde sayfamızın source tarafı ile işimiz bitiyor.
Şimdi kod yazma kısmına gelirsek yapacağımız işlem sayfamızdaki butona tıklandığında reCAPTCHA tarafından üretilen iki kelimenin doğru bir şekilde yazılıp yazılmadığını kontrol etmek ve çıkacak sonuca göre işlem yaptıracağız. Hepsi bu. Bu kodu da ekleyelim. 
protected void btn_Gonder_Click(object sender, EventArgs e)
    {
        // Sayfanın geçerli olup olmadığını kontrol ediyoruz.      
        if (Page.IsValid)
        {
            lbl_Sonuc.Text = "Doğru girdiniz!";
            lbl_Sonuc.ForeColor = Color.Green;
            return;
        }

        lbl_Sonuc.Text = "Yanlış girdiniz!";
        lbl_Sonuc.ForeColor = Color.Red;
    }
Gelelim  "Enable this key on all domains (global key)" olayına. Bu checkbox seçili ise size üretilecek olan private ve public key'ler tüm çapraz domainlerinizde geçerli olacak. Ancak seçili olmazsa, tek bir domain ve onun alt domain'lerinde geçerli olacak. Birden fazla site için key almak istiyorsanız reCAPTCHA'nin sitesinde sol taraftaki menüde bulunan "My Account" kısmına girerek birden fazla site için key alabilirsiniz. Bu arada reCAPTCHA ile ilgili söylemek istediğim son 2 şey var. Birincisi kontrolünüze uygulayabileceğiniz toplam 4 farklı tema bulunuyor. Bunları görmek için form tag'leri arasına yazdığınız recaptcha satırında Theme özelliğini kontrol edin. İkincisi, reCAPTCHA kontrolünüzde bulunan butonların üzerine gelindiğinde Türkçe açıklamalar bulunmasını istiyorsanız Language="tr" özelliğini ekleyin. Projemizde bulunan reCAPTCHA örneğinin en son ekran görüntüsü böyle olacaktır :
reCAPTCHA Demo Görüntüsü
Uygulamalı halini görmek için buraya tıklayın.
reCAPTCHA hakkında daha fazla bilgi almak için buraya tıklayın.