Teknoloji – Batu Incecay
Batu Incecay Rotating Header Image

Teknoloji

Kaba Kuvvet Sıralama Algoritmaları

Bu yazımda Kaba Kuvvet (Brute Force) algoritmaları hakkında genel bilgi sahibi olup kaba iki farklı kaba kuvvet algoritması olan Seçmeli Sıralama (Selection Sort) ve Kabarcık Sıralama (Bubble Sort) algoritmalarına ve bu algoritmaların analizlerine göz atacağız. Bu yazıyı okumadan önce algoritma analizi hakkında genel bilgi edinmek için bir önceki yazımı buradan okuyabilirsiniz.

Kaba kuvvet (brute force) algoritmalar adından da anlaşılabileceği gibi olabildiğince basit algoritmalardır. Basit olmalarına rağmen etkin değildirler. Etkinliği kötü olsa da az elemanlı gruplarda rahatlıkla kullanılabilirler; ancak gruplar büyüdükçe etkinlik de üstel olarak azalacağından daha etkin algoritmalar tercih edilmelidir.

Seçmeli sıralama algoritması her bir iterasyonda en küçük elemanı seçerek bu elemanı dizinin başına getirir. Bu sayede tüm iterasyonlar bittiğinde dizi küçükten büyüğe sıralanmış bir hal alır. (Diziyi büyükten küçüğe sıralamak için her iterasyonda en büyük değerin bulunması yeterlidir.) Algoritmayı sözel olarak açıklayacak olursak; dizinin ilk elemanı en küçük eleman olarak kabul edilir ve bu eleman dizinin diğer tüm elemanları ile karşılaştırılır. Dizide daha küçük bir eleman bulunduğunda bu elemanın yeri tutulmaya başlanır. Bu sayede dizinin tüm elemanları gezildiğinde en küçük eleman bulunmuş olur ve dizinin en başına getirilir. Daha sonra ikinci, üçüncü, dizinin son elemanına kadar aynı işlem yapıldığında dizi sıralanmış olur. Kısaca her zaman dizinin kalan en küçük elemanını bulmak ve bunu en başa getirmek hedeflenmiştir. Seçmeli sıralamanın algoritması şu şekildedir:secmeliSiralamaGelelim seçmeli sıralama algoritmasının analizine. Yukarıdaki algoritmaya baktığımızda bu algoritmadaki temel işlem karşılaştırma işlemidir ( if A[j] < A[min] ). Algoritmadaki döngüleri birer toplam sembolüne dönüştürürsek algoritmadaki temel işlem sayısını şu şekilde hesaplayabiliriz: secmeliAnalizToplam sembolü formüllerini kullanarak sonucu hesapladığımızda temel işlemin n(n-1)/2 kez kullanıldığı sonucuna erişiyoruz. Algoritmanın biraz iyileştirilmiş (her küçük olduğunda swap işlemi yapan) halini anlatan Macar halk dansına buradan erişebilirsiniz.

Bugün inceleyeceğimiz bir diğer algoritma da kabarcık sıralama algoritması. Kabarcık sıralama algoritmasını sözlü olarak anlatmaya çalışırsak; dizinin başından yan yana olan tüm ikililerin karşılaştırılması şeklindedir. Bu karşılaştırma sonucunda ikiliden daha büyük olan eleman dizinin sonuna doğru ilerler (küçükten büyüğe sıralama yapılırken). Bu sayede ilk iterasyon bittiğinde dizinin en büyük elemanı en sona yerleşmiş olur. Bu nedenle de her iterasyonda en baştan başlayarak en sona kadar değil en sondan birer öncesine kadar bu işlem devam etmektedir. Kabarcık sıralama algoritması şu şekildedir:kabarcikSiralamaKabarcık sıralama algoritması için de temel işlem seçmeli sıralama algoritmasında olduğu gibi karşılaştırma işlemidir (f A[j+1] < A[j] ).  Temel işleme göre algoritmanın analizi şu şekildedir:

kabarcikAnaliz

Kabarcık sıralama algoritmasında da temel işlem sayısı n(n-1)/2 kadardır. Kabarcık algoritmanın Macar halk dansı ile anlatılışını buradan izleyebilirsiniz.

Seçmeli sıralama ve kabarcık sıralama algoritmalarının analizlerini incelediğimizde ilk toplam sembolünü açtığımızda birbirleri ile aynı olduğunu görebiliriz. Seçmeli sıralama algoritmasında her seferinde bir eleman sonrasından başlayıp dizinin sonuna kadar giderken; kabarcık sıra algoritmasında her seferinde en baştan başlayıp dizinin sondan daha önceki elemanlarına gittiğimiz görülmektedir. Daha basit bir şekilde ifade etmek gerekirse seçmeli sıralama algoritmasında her iterasyonda en küçük eleman belirlenirken, kabarcık sıralama algoritmasında her iterasyonda en büyük eleman belirlenmiş olur. Böylece iterasyonlar sıralandığında iki algoritmada da aynı şekilde bir sıralama yapılmış olur.

Kaba kuvvet olan iki algoritmada da görüldüğü gibi etkinlik dizinin eleman sayısının karesi ile doğru orantılıdır. Bu nedenle dizinin eleman sayısı arttığında etkinlik azalacaktır. Bu nedenle de daha etkin algoritmalara ihtiyaç vardır.


Bu Yazıya Henüz Yorum Yapılmadı

Algoritma Analizi

Algoritma, bir problemi çözmek için kesin ve açık bir şekilde belirtilmiş bir dizi talimat olarak tanımlanabilir. Bir algoritma etkin (effective), belirli (definite), doğru (correct) ve sonlu (finite) olmalıdır.

Örneğin n elemanlı bir A dizisindeki girdi değeri bulan ve bulunduğu konumu geri döndüren (değer bulunamıyorsa -1 döndüren) algoritma şu şekildedir:

AramaAlgorithm

Biz algoritmanın etkinliğini tam olarak hesaplamak istiyoruz. Bu noktada öncelikle o algoritmadaki temel işlemi bulmalıyız. Yukarıda verdiğimiz arama algoritmasındaki temel işleme bir bakalım. Bu algoritma için temel işlem karşılaştırma işlemi. ( if A[i] = girdi] ) Temel işlemi bulduktan sonra bizi sonuca götürecek konu bu temel işlemin ne kadar tekrarlandığı.

Birkaç örnek üzerinden gidelim. Aşağıda aynı 7 elemana sahip ancak elemanları farklı şekilde sıralanmış 3 dizi var. Bu diziler üzerinde 1 değerini arayalım.

1, 6, 8, 9, 5, 7, 3                     7, 5, 9, 8, 1, 6, 3                      9, 8, 7, 6, 5, 3, 1

Algoritmayı 3 dizi için de uyguladığımızda karşılaştırma sayıları sırasıyla 1, 5, 7 şeklinde olacaktır. Gördüğünüz üzere algoritmanın etkinliği girdiye göre değişiyor; ancak biz girdiden bağımsız çalışıyoruz. Elimizde sadece algoritma var ve bu algoritmanın etkinliğini girdiden bağımsız olarak hesaplamamız gerekiyor. Bu noktada ne yapacağız? Bir algoritmayı analiz ederken; aksine bir söylem yoksa en kötü durumu hesaplarız. Ben burada en iyi, ortalama ve en kötü durumu hesaplayıp nasıl hesaplandığını göstereceğim.

En iyi durum en kolayı… Arama algoritmasını düşündüğümüzde en iyi durum nedir? Tabii ki ilk terimin minimum olmasıdır. Bu durumda da temel işlem yani karşılaştırma işlemi sadece bir kez yapılır. Yani sonuç 1’dir.

En kötü durum için işler biraz daha karmaşıklaşıyor. En kötü durum bizim örneklerimizde de görüldüğü gibi for döngüsüne her girdiğinde temel işlemimiz olan karşılaştırma işleminin yapılıp, dizinin son eleman olması (aranan elemanın dizide bulunamaması durumu da olabilir). Bunu da toplam sembolü ile şu şekilde belirtebiliriz. Döngü n kere döneceğine göre:

toplam olup, temel işlemin yapılma sayısını verecektir. Son örnekte de gördüğümüz gibi bu algoritma için en kötü durum tüm dizinin sonuna gelinmesidir. Bu durumda en kötü durum dizinin boyutu kadar olacaktır.

Son olarak gelelim ortalama durumuna… Aranan elemanın dizide bulunma ihtimali p olsun. Bu durumda hesaplamayı şu şekilde yapabiliriz.

Aranan elemanın dizinin 1. elemanı olması ihtimali                           : p/n
Aranan eleman dizinin 1. elemanı ise yapılan karşılaştırma sayısı          : 1
Aranan elemanın dizinin 2. elemanı olması ihtimali                           : p/n
Aranan eleman dizinin 2. elemanı ise yapılan karşılaştırma sayısı          : 2
Aranan elemanın dizinin 3. elemanı olması ihtimali                           : p/n
Aranan eleman dizinin 3. elemanı ise yapılan karşılaştırma sayısı          : 3


Aranan elemanın dizinin n. elemanı olması ihtimali                           : p/n
Aranan eleman dizinin n. elemanı ise yapılan karşılaştırma sayısı          : n
Aranan elemanın dizide BULUNMAMA ihtimali                                   : 1 – p
Aranan eleman dizide BULUNMUYORSA yapılan karşılaştırma sayısı       : n

Basit bir aritmetik ortalama alırsak:

ortalama

Eğer aranan elemanın dizide mutlaka bulunacağını kabul edersek; yani p = 1 olursa;
Ortalama karşılaştırma işlem sayısı: (n+1)/2 olur. Yani yaklaşık olarak dizinin eleman sayısının yarısıdır.

Basit bir algoritmanın en iyi, ortalama ve en kötü temel işlem sayılarını hesaplamayı görmüş olduk. Sonraki yazılarımda da bilinen bazı algoritmaları (örneğin ikili arama algoritması) analiz etmeye çalışacağım.


Bu Yazıya Henüz Yorum Yapılmadı

2012 Microsoft İzmir Yaz Okulu 1. Hafta

Microsoft’un bu yılki İzmir Yaz Okulu 23 Temmuz tarihinde Yaşar Üniversitesi’nde seçilen 20 öğrenci ile başladı. Malum ilk bir kaç gün Yaşar Üniversitesi’nden kaynaklanan sebeplerle bazı sorunlar olsa da eğitimler aralıksız devam etti.

Yaz okulunun ilk eğitmeni Microsoft Most Valuable Professional unvanına sahip Maummer Benzeş’ti. İlk gün malum tanışma ile başladı. Tanışmanın ardından Muammer Benzeş, bilgisayarların main framelerden başlayarak buluta gelene kadarki tarihçesinden bahsetti. Bulutun bize sağladığı avantajlar ve bulutun dezavantajlarının ardından bulut hizmetleri (SaaS, PaaS, IaaS) hakkında bilgi edindik. Günün devamında sanallaştırma, Azure üstündeki trafiği yönetme ve Azure üzerinde tanımlayabileceğimiz kuralları gördük. Günün sonunda uygulama geliştirmek için kullanacağımız Windows Azure hesaplarımızı aktivite edip günü tamamladık. İkinci gün Azure hakkında daha detaylı ve teknik bilgiler bizi bekliyordu. Mammer Benzeş, Windows Azure kullanılacak projeler hakkında bilgi verdi. Daha sonra aktivite olmuş hesaplarımız üzerinden Azure arayüzü ile tanıştık ve Azure’un bize sağladığı SQL Azure, depolama ve bulut servisleri hakkında bilgi edindik. Azure portalını tanıdıktan sonra kullanılabilecek roller, yetkilendirmeler, roller ve konfigürasyonları öğrendik. Günün sonunda da Azure’a bir uygulama yüklerken dikkat edilmesi gereken noktalar ve Azure’un arka planda nasıl çalıştığını gördükten sonra ikinci günü de bitirmiş olduk. Windows Azure ve dolayısıyla Muammer Benzeş’in son gününde daha uygulamaya yönelik bir içerik vardı. Basit bir uygulama geliştirdikten sonra, o uygulamayı Azure’a yükledik. Daha sonra Azure üzerinde depolama alanı ve SQL Azure oluşturup, oluşturduğumuz bu servisleri uygulamamızda nasıl çağıracağımızı öğrendik. Uygulamamızı biraz daha geliştirdikten sonra Azure sisteminde daha önceden yüklü olan uygulamamızı nasıl geliştireceğimizi gördük. Azure üzerindeki tüm servisleri kullanıp uygulamamızı yayınlanabilir hale getirdikten sonra günümüz sona erdi. Çıkışta hep beraber fotoğraf çekilip ilk eğitimimizi bitirmiş olduk.

İlk haftanın ikinci ve son konusu XNA ile oyun programlamaydı. Kuşkusuz bütün etkinlikler önemlidir; ancak XNA programlama benim daha önce hiç bilmediğim bir konu olduğu için benim ilgimi en çok çeken, en çok merak ettiğim ve öğrenmeyi sabırsızlıkla beklediğim konuydu. XNA ile oyun programlama için eğitmen olarak, Muammer Benzeş gibi Microsoft Most Valuable Professional unvanına sahip Engin Polat bizlerleydi. İlk günün sabahında bir miktar teorik bilgi ile başladık. Bir oyunun süreçleri, oyun programlama ekibi ve oyun geliştirme hakkında bilgiler aldık. Teorik bilgilerden sonra hemen uygulamaya geçtik. İlk gün XNA stüdyoyu nasıl kullanacağımız bir Windows oyunu geliştirerek öğrendik ve günü tamamladık. İkinci gün ise Windows Phone üzerinde iki farklı oyun gerçekleştirdik. Detayları yaz okulu bittikten sonra Engin Polat’ın internet sitesinden bulabileceksiniz. Engin Polat’ın bu yaz okulu için geliştirdiği iki farklı uygulamayı adım adım bizler de gerçekleştirdik. Böylece oyun geliştirmenin en önemli noktalarını öğrenmiş olduk. Gerisi bize ve hayal gücümüze kalmış =) Unutmadan Engin Polat ile de toplu fotoğraf çekildik ve bu yaz okulu hatırasını ölümsüzleştirdik.

İlk hafta iki çok önemli konuyu bitirdikten sonra hafta sonu uygulama yazmadan geçmek olmaz tabii ki. Hafta sonu Azure üzerinde çalışan bir adam asmaca oyunu uygulaması geliştirdim. Elbette ki mükemmel değildir, hataları vardır; çünkü bu gerçekleştirdiğim ilk Azure uygulamam oldu. Azure geleceğin en büyük olanaklarından bir tanesi; umarım daha çok ve daha başarılı uygulamalar yazacağım zaman içerisinden. Bu arada uygulamam hakkında bu kadar bahsettikten sonra adresini de vereyim; ancak söylemekte yarar var. Hesabım bir deneme hesabı olduğu için sadece 5 ay boyunca uygulamama erişebilirsiniz. Merak etmeyin yazıyı yazdığım tarihten 5 ay eklemek ile sizi uğraştırmayacağım =) Uygulamaya 20 Aralık 2012 tarihine kadar http://batu35144.cloudapp.net/ adresinden ulaşabilirsiniz. Yaz okulu ile ilgili her hafta bir yazı yazmaya çalışacağım. Önümüzdeki haftaya kadar hoşça kalın efenim.


Bu Yazıya Henüz Yorum Yapılmadı

Windows 8 Deneyimi

Windows 8’in Consumer Preview versiyonunun piyasaya sürülmesinden beri 2 ayı aşkın bir süre geçti. Ben bu yazımda size 2 ay süresince yaşadığım deneyimi ve aldığım Windows 8 eğitimlerini bir miktar aktarmaya çalışacağım. Bu aktarım sırasında da Windows 8 yerine Win8 diyeceğim baştan söyleyeyim =)

Win8 kullananlar mutlaka fark edeceklerdir ki; Win8 öncelikle dokunmatik için geliştirilmiş. Benim gibi dokunmatik olmayan bir bilgisayar kullanıyorsanız mutlaka biraz üzüleceksinizdir. Sadece biraz dedim; çünkü o keyfi mouse ile yaşayabilirsiniz. Üzülme için verdiğim süre burada sona erdi =) Şimdi gelelim Win8’i yakından tanımaya. Aman tanrım o da ne? Win8 açıldı ve karşıma klasik bir masaüstü gelmedi. Eminim ki birçok kişi o klasik masaüstünü arayacaktır. Merak etmeyin o da var; ancak gelin boş verin klasik masaüstü görüntüsünü. Biz o ilk açılan arayüz ile oynayalım. İstediğiniz gibi dizayn edebildiğiniz kayan çubuklu bir arayüz.  Bilgisayarım açılır açılmaz o arayüz sayesinde yeni gelen maillerim önümde akıyor, altında takvimimdeki yapacaklarım listeleniyor, yanında 25 GB’lık SkyDrive’ıma anında ulaşabiliyorum ve daha neler neler… Bilgisayar başında müthiş bir tablet deneyimi yaşıyorsunuz. Konu tam da istediğim yere geldi =) Win8 sadece bilgisayarlar için değil aynı zamanda tabletler için de bir işletim sistemi. Bu bize ne güzellikler sağlıyor gelin bir bakalım. Windows Phone kullananlar şu ana kadar anlattıklarıma biz bunları zaten biliyoruz; telefonumuzda aynı şeyler var diyebilirler. İşte ben de tam bunu söylemek istiyorum. Sizin elinizde bugüne kadar kullandığınız bir Windows Phone var diyelim; siz Win8 yüklü bir tablet aldığınızda veya Win8 yüklü bir bilgisayar aldığınızda öğrenmeniz gereken yeni bir şey olmayacak. Ya da en basitinden bir tanesine alıştıktan sonra bu rahatlığı başka yerlerde de yaşamak isteyeceksiniz ve bu rahatlıktan asla vazgeçemeyeceksiniz =)

Win8, Win7’nin bir üst sürümü değil. Win8 baştan yazılmış yeni bir işletim sistemi. Hem tablet hem de bilgisayarlarda çalışması için özel olarak düzenlenmiş.

Peki Win8’in kullanım kolaylıkları neler gelin bunlara bir bakalım. Açılış arayüzüne dönmek için ekranın sol alt köşesine tıklamanız veya gelmeniz yeterli. Menü kendini gösterecek ve tıklamanızın ardından karşınıza gelecektir. Sağ tarafta ise arama ve ayarlar menüsüne ulaşabilirsiniz. Başta söylemiştim aslında; her şey dokunmatikte daha güzel diye ama mouse ile de çalışıyor. Win8’ge göreceğiniz en önemli özellik açık olan programın tam ekran çalışması. Bu durumda bazı işlemler de biraz farklı oluyor. Örneğin programı kapatmak ve programlar arası geçiş yapmak için çarpı ve küçült butonları yok! Program sonlandırma işlemi oldukça sempatik. Açık olan programı aşağıya doğru sürüklerseniz program kapanmış oluyor. Ayrıca açık olan programları sol tarafa gelerek gezebilir veya listesini görebilirsiniz. Son olarak bir program çalışırken başka bir programı ekranın istediğiniz bir yerine sabitleyebilir ve böylece iki programı aynı anda kullanabilirsiniz. Burada anlatmak istediğim klasik masaüstünde yaptığımızdan biraz daha farklı. Biz bunu zaten yapabiliyorduk demeden önce bir denemenizi tavsiye ederim. Win8’i o kadar anlattım ama hiç Metro demedim. Bu yeni arayüzün adı Metro UI(kullanıcı arayüzü) butonlara dikkat ederseniz. Amerika Birleşik Devletleri başta olmak üzere bir çok ülkedeki metro işaretlerinden esinlenildiğini anlayacaksınız. Sadece butonlar değil; yazı stilleri ve daha birçok şey araştırmalar sonunda günlük hayatta en çok rastladığımız yerlerden alınarak karşımıza getirilmiş. Bu sayede hayatımızın önemli bir parçası olan bilgisayarlar ve dolayısıyla Win8, günlük hayatın diğer öğeleri ile tam bir bütünlük içerisinde olacak.

Win8’de yeni karşılaşacağımız özellikler ve yenilikleri biraz olsun anlatmaya çalıştım. Önerim şu ki Consumer Preview’i buradan indirin ve kendiniz de birazcık karıştırın; bu deneyimden kesinlikle memnun kalacaksınız.

Win8 ile gelen İnternet Explorer 10’dan da biraz bahsedeyim. Win8’i yüklediğiniz zaman İnternet Explorer 9 ile birlikte İnternet Explorer 10’un da beta sürümü karşınıza gelecek. İnternet Explorer 9 ile başlayan çıkış eminim ki devam edecek ve browserlar içerisinde İE10 oldukça iyi bir noktaya gelecektir. Bunu söylememin en önemli sebebi İE10’un yeni tasarımı. Yeni tasarımı oldukça etkileyici; biraz önce anlattığım Metro UI ile tam bir bütünlük içerisinde. Bu da hem kullanıcı açısından kolaylık sağlıyor, hem de gözümüze oldukça hoş ve Win8 ile uyumlu geliyor. Performans açısından gelecek düzenlemeler ile İE10 başka bir tarayıcıya ihtiyaç bırakmadan tüm işlerimizi oldukça performanslı bir şekilde yapacak gibi duruyor.

Win8’i anlattık. Peki ben Win8’e uygulama geliştirmek istiyorum diyenler ne yapacak bu konuya gelelim. Win8’e uygulama geliştirme şansınız var; ancak henüz Win8 çıkmadığından sadece Consumer Preview olduğundan dolayı uygulamanızı direk olarak yayınlama şansınız yok. Bu uygulamanızı yayınlama şansınız yok anlamına gelmiyor; uygulama yayınlamak ile ilgili detaylı bilgi almak isteyenler bana ulaşabilirler. Ulaşmak isteyenlere şunu söyleyeyim; uygulamanızın yayınlanabilmesi biraz da uygulamanıza bağlı =) Peki uygulamayı nasıl geliştireceğiz. Öncelikle Win8’in Consumer Preview’ını kurmanız gerekiyor. Daha sonra kurduğunuz bu previewa Visual Studio 2011 Beta’yı kurarak uygulama geliştirmeye başlayabilirsiniz. Uygulama geliştirmek için menüde Windows Metro Style göreceksiniz. Uygulamayı C# kullanarak geliştirebileceğiniz gibi, C++, Visual Basic veya Java Script kullanarak da gerçekleştirebilirsiniz. Gerisi size kalmış =) Kolay gelsin.


Bu Yazıya Henüz Yorum Yapılmadı

Baseball Haberleri Uygulamam

Malum vize dönemi bir süre uygulamalarıma ara verdim; ama artık geri dönüyorum. Bundan sonra bir furya olarak internetten veri çeken haber uygulamaları yazacağım. Bunun ilk örneği baseball haberleri.

Uygulamam anlayabileceğiniz gibi pek bizim ülkemiz için değil. Amerika’nın en meşhur sporlarından bir tanesi baseball. Size şimdi baseball’u anlatmayacapım tabii ki; ama öğrenmek istiyorsanız bisiklet üstadı Sarper Günsal ve arkadaşı Savaş Alp’in bloğundaki bu yazıyı okuyabilirsiniz. Bloğa girmişken sadece bu yazıya değil tüm yazılara göz gezdirmenizi tavsiye ederim. Amerikan Baseball Ligi olan MLB’nin resmi sitesinden RSS ile aldığım haberleri kullanıcının önüne yansıtıyorum.

RSS ile nasıl veri çekileceğini buradaki yazımdan okuyabilirsiniz. Aslında her şey o yazıda yazdığım gibi basitti; ancak RSS’ten gelen XML dosyasını açtığımda bir sürpriz ile karşılaştım. XML taglerinde daha önce hiç görmediğim bir şey vardı. Mutlaka “Aa onu bilmiyor musun; çok kolay o, herkes bilir” diyenler çıkacaktır; ama ben bilmiyordum ve bilmeyenler vardır diye aktarmak istiyorum. Bu hiç karşılaşmadığım şey “:encoded”. Bunu gördünüz mü o tagin ismi ile birlikte :encoded yazdığınız zaman bilgiye ulaşmanız mümkün olmuyor. Eee ama bize o tagin içindeki bilgi lazım ne yapacağız? Hiç korkmayın. XML dokümanının en üstüne çıktığınızda dosyanın XML olduğunu gösteren o klasik tagi göreceksiniz. Her şey o tagin içinde gizli =) xmlns: aradığınız tag= “internet sitesi” şeklinde bir bölüm var. İşte aradığınız tage ait o bölümü bulunca hemen orada yazan internet sitesini kopyalayın. Bu kopyaladığımız internet sitesini nasıl kullanacağımıza ilişkin kod örneği şöyle:

 XNamespace ns= XNamespace.Get(“internet sitesi”);

 Bu kod ile encode işlemini nerdeyse yaptık son olarak bilgisini çekeceğiniz yere

 okuyucu.Element(ns+ “encoded”).Value;

yazarak encoded yazan tagin içeriğini elde etmiş oluyorsunuz. Oldukça basit bir işlem; ama daha önce hiç karşılaşmadıysanız benim gibi bir kaç saatinizi kod başında geçirebilirsiniz.

Yaşadığım güçlükten sonra uygulamamı tamamlayıp 13 Nisan tarihinde gönderdim. İlk kez bir uygulamamı paralı olarak gönderdim. Paralı dediysem 0.99 dolar. Bakalım testleri geçtikten sonra indirilme oranı ne olacak. Başka uygulamalarda görüşmek üzere =)


Bu Yazıya Henüz Yorum Yapılmadı

İki Uygulama Bir Arada

Önceki yazılarımda verdiğim bilgileri bu sefer yalancı çıkarmayacağım =) Vakti gelmişti. Eğitim ile ilgili tüm uygulamalarım bundan sonra MiBaLearning adıyla yayımlanacak. Yeni bir şirketin temelleri mi kim bilir? Uygulamam her zamanki gibi basit.

Bilirsiniz basitlikte ferahlık vardır. Bundan sonraki tüm MiBaLearning uygulamalarımda göreceğiniz karakteri fotoğrafta görebilirsiniz. O karakterin adı MiBa. Tüm telif hakları bana aittir; hiçbir yerden alınma veya çalınma değildir. Birebir pelüş hali bu yazıyı yazarken yanımda durmaktadır =) Fotoğraf ve üzerindeki tüm oynamalar bana aittir. Onun dışında göreceğiniz çiçeklerin hepiciğini de bizzat ben çizdim (kötü olmasından belli dediğinizi duyar gibiyim; ne yapalım yetenek bu kadar, umarım zamanla gelişir).

Gelelim ilk uygulamamın içeriğine. Uygulamanın temel amacı 1’den 20’ye kadar olan sayıların yazılışlarını öğretmen. İki ayrı dizide yazılış ve rakamlardan oluşan hallerini sakladığım sayılardan random fonksiyonu yardımı ile bir tane seçip ekranda gösteriyorum. Kullanıcının her sayı için üç deneme hakkı var. Uygulama büyük veya küçük harfe duyarlı değil. Kullanıcı metni girdikten sonra yeşil tamam tuşuna basarak girdiği metnin doğruluğunu kontrol eder. Üç deneme sonunda doğru cevap bulunmazsa ekranda doğru cevap gösterilir ve bir sonraki sayıya geçilir. Bu işlem sekiz defa devam eder. Sekiz sayı da bittikten sonra kullanıcının toplam vermiş olduğu doğru cevap sayısı ekranda yazıldıktan sonra açılış sayfasına dönülür. Uygulamanın oldukça basit olduğunu söylemiştim. Temel olarak kullanıcıya yani hedef kitlesi olan okul öncesi ve ilköğretimin ilk sınıfındaki öğrencilere sayıların yazılışını öğretmeyi amaçlıyor.

Başlıkta dedim ya iki uygulama birden =) Hızımı almışken ikincisini de yazayım dedim; malum vizeler yaklaşıyor bir süre uygulama yazmaktan uzak kalabilirim. Bu uygulamamda ise aynı MiBa karakteri ile renkleri öğreniyoruz. Diğer uygulamamda olduğu gibi her renk için kullanıcının üç tahmin hakkı var; fakat bu sefer sekiz değil bir oyunda sadece beş renk soruluyor. Bunun en temel nedeni renk sayısının az olması. Toplamda on bir rengimiz var. Diyeceksiniz ki neden bu kadar az? Temel amaç renkleri öğretmek olduğu için, öyle açık-koyu gibi sıfat içeren renklere hiç yer vermeden en temel renkleri kullanmaya çalıştım. Burada da çocukların biraz daha ilgisini çekebilmek için balon kullandım. Bu balonun rengi ne diye sorarak çocukların eğlenerek renkleri öğrenmesini amaçladım.

Uygulamalarımı 28 Mart 2012 tarihinde göndermiş bulunmaktayım. Umarım kısa süre içerisinde testlerden geçip yayınlanırlar.


Bu Yazıya Henüz Yorum Yapılmadı

Gençsen Geleceksin 5.0 Ege Üniversitesi

Gençsen Geleceksin 5.0 etkinliğinin Ege Üniversitesi ayağı, Bilgisayar Mühendisliği Bölümü B4 Amfisinde 16 Mart 2012 günü gerçekleşti. Etkinliğe büyük çoğunluğu bilgisayar mühendisliği bölümünden olmak üzere birçok bölümden öğrenciler ile piyasadan insanlar katıldı. Etkinliğe ilgi oldukça fazlaydı; toplamda katılımcı sayısı 150’yi buldu.

Etkinlikte Microsoft’u temsilen Akademik Programlar Yöneticisi Dr. Mustafa Kasap ve Nokia adına Uygulama Geliştirme Platformları Yöneticisi Görkem Ercan yer aldı. Etkinliğin ilk bölümünde öncelikle Dr. Mustafa Kasap söz aldı. Dr. Mustafa Kasap konuşmasında öncelikle Microsoft’un öğrencilere sağladığı olanakları anlattı. Bu olanaklar içinde; benim de içinde bulunduğum Microsoft Student Partners programı, Microsoft’un kısa ve uzun dönemli stajları, yaz okulu, Student2Business programı gibi iş ve staj olanakları ile Dreamspark gibi öğrencilere ücretsiz yazılım sağlayan programlar yer aldı. Bu olanakların detaylı anlatımından sonra Microsoft teknolojileri hakkında Dr. Mustafa Kasap tarafından bilgiler verildi. Bunlar teknolojiler Microsoft’un bulut bilişimi Azure,  insan hareketlerini algılayan Kinect, yeni nesil dokunmatik ekran Surface ve yeni nesil ofis çözümleridir. Bu bilgilendirme ile birlikte bu gelecek teknolojilerle ilgili ihtiyaç duyulacak elemanlar hakkında bilgi verildi. Microsoft’tan Dr. Mustafa Kasap’ın sunumunun ardından Nokia’dan Görkem Ercan Nokia’nın teknolojileri hakkında bilgi verdi. Ayrıca Nokia’nın telefon segmentleri ve bu segmentlerde kullanılan teknolojiler anlattı. Sadece Microsoft Teknolojileri değil diğer segmentlerde başka teknolojilerle uygulama geliştirme olanağı olduğunu öğrenciler ile paylaştı. En üst segmentte ise Windows Phone kullanıldığını anlatıp bu teknoloji hakkında bilgi verdi. Son olarak da Windows Phone uygulamaların yer aldığı Marketplace hakkında da bilgi verildi.

Etkinliğin ilk kısmı tamamlandığında sıra yarışmaya gelmişti. Yarışmaya katılmak isteyenler fikirlerini bir kağıda yazıp herkesin önünde sundular. Daha sonra yapılan oylama ile be proje finale kaldı. Finale kalan bu beş projeden uygulamasını ilk geliştirip Marketplace’de yayınlayanı bir Nokia Lumia 800 telefon bekliyor.

Yarışmanın ardından ikinci bölüm olan Windows Phone 7 uygulaması geliştirme bölümüne geçildi. Bu bölüme sadece uygulama geliştirmeyi öğrenmek isteyen 30 kadar öğrenci katıldı. Bu bölümde öncelikle Windows Phone’un sahip olması gereken minimum sistem gereksinimleri anlatıldı. Bu sistem gereksinimleri ile birlikte uygulama geliştiricilerin kullanabileceği GPS, ivme ölçer gibi özellikler hakkında bilgi verildi. Nokia’dan Görkem Ercan’ın verdiği teknik bilginin ardından Microsoft’tan Dr. Mustafa Kasap en baştan nasıl bir uygulama geliştirileceğini gösterdi. Uygulama geliştirilecek ortam hakkında bilgi verip, uygulamada kullanılabilecek temel bileşenleri örnekler ile gösterdi. Temel bileşenlerin ardından; internete bağlanarak XML olarak bir kişiye ait twitlerin bilgilerinin nasıl çekileceğini, işleneceğini ve ekranda gösterileceğini anlatan bir uygulama geliştirdi. Bu uygulamayı adım adım göstererek kodladı. Dr. Mustafa Kasap’ın geliştirdiği uygulamaya benzer ve biraz daha kapsamlı bir uygulama hakkında detaylı bilgiye buradan ulaşabilirsiniz.

Gençsen Geleceksin 5.0 Ege Üniversitesi etkinliği gerçekleştirilen uygulamanın ardından sona erdi. Üniversitemize kadar gelen, bizlere emek ve nefes harcayan Dr. Mustafa Kasap ve Görkem Ercan’a çok teşekkür ederim. Umarım önümüzdeki yıllarda nice Gençsen Geleceksin etkinlikleri gerçekleştiririz.


Bu Yazıya Henüz Yorum Yapılmadı

Bir Kişiye Ait Twitleri Listelemek

Bu uygulama üzerinde istediğimiz Twitter ID’sine sahip kişinin bugüne kadar yaptığı twitleri uygulamamız ile listeleyeceğiz. Uygulama sizlere sakın karmaşık gelsin. Kodları yazımın sonunda sizlerle paylaşıyor olacağım şimdi ise uygulamanın nasıl çalıştığına ve dikkat etmemiz gereken püf noktalarına bir bakalım.

Öncelikle bize twit bilgileri gerekiyor. Peki bu bilgileri nasıl alacağız. Twitter bizlere bu konuda oldukça yardımcı oluyor. Adresi link olarak koymadığım bu adresten https://api.twitter.com/statuses/user_timeline.xml?screen_name=xxx istediğiniz Twitter kullanıcısının xml formatında twit bilgilerini çekebilirsiniz. Unutmayın xxx yerine Twitter ID’sini yazacaksınız =)  XML verisini çekip incelediğinizde birçok tag ile karşılaşacaksınız. Bu uygulamada sadece text, gönderen ve gönderenin fotoğrafının URL bilgilerini kullanacağız. İsteyenler tarihten tutun da status id’ye bir çok başka bilgiyi de kullanabilir. Peki o zaman şimdi bu XML dokümanını uygulamamızın içinden indirelim. Bunun için bir WebClient’a ihtiyacımız var. Aşağıda gördüğünüz kod parçası ile bu dokümanı indirip IcerikAyikla fonksiyonuna gönderdik.

WebClient tw = new WebClient();            

            tw.DownloadStringCompleted += new DownloadStringCompletedEventHandler(IcerikAyikla);

            tw.DownloadStringAsync(new Uri(“https://api.twitter.com/statuses/user_timeline.xml?screen_name=” + twitID.Text));

İndirilen XML dokümanı IcerikAyikla fonksiyonu içerisinde pars edilerek, yukarıda sözüne ettiğim text, gönderen ve gönderenin fotoğraf URL bilgileri ayıklanıp listBox1 içerisine yeni bir item olarak ekleniyor. Bunu yapan koda da şöyle bir göz atalım:

private void IcerikAyikla(object sender, DownloadStringCompletedEventArgs e)

        {

            if (e.Error != null)

                return;

             XElement xTwit = XElement.Parse(e.Result);

            listBox1.ItemsSource = from tweet in xTwit.Descendants(“status”)

                                   select new TwitterBilgisi

                                   {

                                       URL = tweet.Element(“user”).Element(“profile_image_url”).Value,

                                       metin = tweet.Element(“text”).Value,

                                       gonderen = tweet.Element(“user”).Element(“screen_name”).Value

                                   };

        }

Bu kodda gördüğünüz TwitterBilgisi sınıfı hakkında hemen ufak bir bilgi vereyim. Malum nesneye yönelik programlama yapıyoruz bu nedenle okuduğumuz bilgileri tanımladığımız değişkenlerde tutmak yerine bir class’ın değişkenlerinde tutuyoruz. Class’ımızın kodu aşağıdaki gibi oldukça basit.

public class TwitterBilgisi

        {

            public string metin { get; set; }

            public string gonderen { get; set; }

            public string URL { get; set; }

        }

Aslında bu kadar basit; ancak görsel olarak bir kaç düzenleme yapmamız gerekiyor. Eğer siz kodları indirmek yerine uygulamayı kendiniz yapmak istiyorsanız lütfen bu işlemleri yaptıktan sonra programınızı çalıştırın ve görsel sorunlarla yüz yüze gelin. Bu arada görsel sorunları çözmeden şunu belirtmeliyim XML okumak için kullandığımız XElement değişkeni sizde default olarak çıkmayacaktır. Bunun için uygulamanıza System.Xml.Linq kütüphanesini eklemelisiniz. Bu kütüphaneyi eklediğinizde uygulamanız kütüphaneyi de bulamayacaktır. Bu noktada da referans eklememiz gerekecek. Referans eklemek için Solution Expres altında yer alan Referances bölümüne sağ tıklayarak Add Referance seçeneğini seçtikten sonra .NET menüsü altından System.Xml.Linq bileşenini seçip eklemeniz gerekiyor. Bu ekleme işlemini yaptıktan sonra gönül rahatlığı ile XML dokümanınızı okuyabileceksiniz.

Gelelim görsel düzenleme kısmına. Çalıştıranlar görmüştür twitler listeleniyor ancak mesajların yarısı yok, gönderen bilgisi yok. İşte bu noktada xaml dosyasının içine girmemiz gerekiyor. Xaml dosyasının içine girdiğimizde listBox’ımızı buluyoruz. ListBox’ımız tek satırda açılıp kapanmış; araya eklemeler yapacağımız için sondaki kapama işaretini (/) silip, alt satıra </ListBox> olarak ekliyoruz. Böylece artık araya eklemelerimizi rahatça yapacağız. Önce eklenecek kodu göstereyim; ardından kod üzerine konuşalım.

<ListBox.ItemTemplate>

                    <DataTemplate>

                        <StackPanel Orientation=”Horizontal” Height=”Auto”  HorizontalAlignment=”Stretch”>

                            <Image Source=”{Binding URL}” Height=”73″ Width=”73″ VerticalAlignment=”Top” Margin=”0,10,8,0″/>

                            <StackPanel Width=”370″>

                                <TextBlock Text=”{Binding metin}” Foreground=”#FFC8AB14″ FontSize=”28″ TextTrimming=”WordEllipsis” TextWrapping=”Wrap” />

                                <TextBlock Text=”{Binding gonderen}” TextWrapping=”Wrap” FontSize=”24″ />

                            </StackPanel>

                        </StackPanel>

                    </DataTemplate>

</ListBox.ItemTemplate>

Bilgilerimiz düzenli dursun diye listBox’ın her bir item’ında bir image source ve iki text box kullanacağız. Bunları kullanabilmemiz için öncelikle bir stack panel’a ihtiyacımız var. Panel’in Height’ını da otomatik yaptım ki böylece text’iniz 140 karakter de olsa 10 karakter de olsa tamamı görüntülenebilecek. Bunun dışında burada Binding  metin, Binding URL ve Binding gonderen’e özellikle dikkat ediniz. Bu değişkenler bizim yarattığımız TwitterBilgisi sınıfının değişkenleri. Eğer sizler farklı isimler kullandıysanız buradaki isimleri değiştirmeyi unutmayın.

Uygulamamız bu kadar. Sizler bu uygulamayı kendi ihtiyaç ve isteklerinize göre değiştirebilirsiniz. Umarım biraz olsun yararlı olabilmişimdir.

Uygulamanın Kodları =)


2 Yorum

İkinci Windows Phone 7 Uygulamam

Bir önceki yazımda verdiğim bilgiyi yalancı çıkarmış gibi olmak istemem. İkinci uygulamamın okul öncesi eğitimi ile ilgili bir uygulama olacağını söylemiştim. O uygulamamın hatta uygulamalarımın çalışmaları devam ediyor.

O uygulamalar nispeten daha karmaşık olduğu için çıkması biraz daha süre alacak gibi; malum ben de Windows Phone uygulaması yazmaya yeni başladım. Her ne kadar C# biliyor olsam da Windows Phone uygulaması yazarken kullanımı farklı olan şeyler var. Aşağıda bunun bir örneğini vereceğim.

Gelelim bu uygulamama. Bazen sıkça aklımıza takılır ya şu ülkenin başkenti neydi ya da bu ülkenin nüfusu ne kadar; hiç olmadı ya o ülke küçük değil mi gibi sorular. Yeni uygulamam bu sorulara cevap verecek bir nitelikte. Dünya üzerinde yer alan 241 (ben bu kadar ülke olduğunu bilmiyordum) ülkenin tamamının nüfusu ve yüzölçümünü kilometre kare cinsinden içeriyor. 241 ülkenin yarısından biraz fazlasının da başkentlerini içeriyor. Umarım ki zamanla, daha sonraki versiyonlarında tüm ülkelerin başkentleri de olacak. Gönül isterdi ki ülkelerin bayrakları da olsun; maalesef o da yok. Neden diyeceksiniz çünkü o kadar bayrağı bulup tek tek indiremedim. Bir kısmının olsun bir kısmının olmasın da hoş olmadı. Buna bir süreç olarak bakıyorum. Zamanla bayrakları tamamlayabilirsem veya yarısından fazlasını indirebilirsem uygulamama bayraklar da eklenebilir. Kim bilir belki biraz daha iyi bir çocuk olursam tüm ülkeler ile ilgili bilgileri içeren bir uygulamam olabilir =)

Uygulamanın geliştirilme kısmı hakkında biraz bilgi vereyim. Zor değil =) Başlangıç seviyesinde; ancak en azından benim için aklıma her takıldığında açıp bakabileceğim bir uygulama. Uygulamanın bilgileri XML’den okunuyor. Ah XML ah… Windows Phone uygulaması yazarken okuma işlemleri biraz farklı olduğundan beni biraz yordu; ama yorulmadan bir şey öğrenilmez. Öyle form uygulaması yazıyormuş gibi XMLElement, XMLAttribiute falan yok; ne var diye sormayın araştırın öğrenin efenim =)

Uygulamamı 05 Mart 2012 tarihinde göndermiş bulunmaktayım. Umarım kısa süre içerisinde testlerden geçip yayınlanır. Eğer araya yine bir reklam almazsam sıradaki uygulamam okul öncesi eğitim ile ilgili olacak; ama bakalım zaman ne gösterir bilinmez.


Bu Yazıya Henüz Yorum Yapılmadı

Ege Üniversitesi WCF Workshop

Windows Communication Foundation ve Data Access etiğimi 10-11 Mart 2012 tarihinde Ege Üniversitesi Bilgisayar Mühendisliği Bölümü Sinan Yılmaz Laboratuvarında gerçekleşti. Eğitimi Microsoft’un alanında uzman profesyonel yazılımcılara verdiği unvana sahip yani Most Valuable Professional’ı Ahmet Sertay HALKA verdi. Etkinlik iki gün boyunca 12.30’dan 18.00’a kadar sürdü. Eğitim baştan sona oldukça keyifliydi; aralarda beraber yenilen yemekler, içilen kahveler ile çok dostane bir ortam oluştu.

İçerik konusuna gelince WCF büyük ölçüde bitti dersek çok da abartmamış olurum. Yok yok abartmış olurum =) WCF oldukça geniş ve önemli bir konu; çünkü çoğu zaman bir web servisi ihtiyacımız olabiliyor ve bu ihtiyacı WCF ile gerçekleştirebiliriz. Detayları anlatmak bana düşmez sanırım bu konu ile ilgileniyorsanız Sertay Hoca’nın bloğuna göz atabilir ve sorularına kendisine sorabilirsiniz. Biz eğitimde öncelikle WCF nedir, nerelerde kullanılır gibi temel konuları öğrendik. Devamında toplama, çarpma gibi işlemler yapan basit bir servis yazdık. Bu servisleri Silverlight’ta Ajax kullanarak nasıl oluşturabileceğimizi gördük.  İkinci günde ise WCF üzerinde Data Servis kullanarak veri tabanı üzerinden insert, update, delete işlemlerinin nasıl kapılacağını gördük ve bununla ilgili uygulamalar geliştirdik.

İki günün sonunda WCF kullanımı ile ilgili bilgi sahibi olduk bu süre boyunca bizlere katlanan Sertay Hoca’ya teşekkürü bir borç bilirim.


Bu Yazıya Henüz Yorum Yapılmadı