Yeni Yıl Çekilişine Siz De Katılın
1 Yorum31/12/2010 at 00:13Kategori:Blog
Seval Ünverin blogundaki çekilişte muhteşem ödüller varmış, hala katılmadıysanız bir an önce şansınızı deneyin derim. Buradan çekilişe katılabilirsiniz. Mutlu yıllar...
Arşivler: 2010
31/12/2010 at 00:13Kategori:Blog
Seval Ünverin blogundaki çekilişte muhteşem ödüller varmış, hala katılmadıysanız bir an önce şansınızı deneyin derim. Buradan çekilişe katılabilirsiniz. Mutlu yıllar...
03/11/2010 at 23:26Kategori:GNU/Linux
Buraya tıklayarak linux işletim sistemi hakkında hazırladığım sunuma ulaşabilirsiniz.
25/07/2010 at 12:43Kategori:Android
Android geliştirme için ilk olarak Ubuntu üzerinde ortamı kurmuştum ve gayet güzel çalışıyordu. Windows için de eclipse + ADT plugin ve Android SDK ile hem geliştirme hem de test ortamını sağlamış oluyoruz. Ama dünden beri bir problemden dolayı windows üzerinde oluşturduğum sanal sistemler çalışmıyordu.Hata mesajı olarak; ERROR: no search paths found in this AVD's configuration. Weird, the AVD's config.ini file is malformed. Try re-creating it. alıyordum. Congif.ini dosyasının sağlam ve yerinde olduğuna emin olmama rağmen dün gece ne yaparsam yapayım emulatorü çalıştıramadım. Sonunda sorunun benle alakalı olduğunu anladım. Direk benimle yani ismimle alakalı bir sorun vardı. Windows kullanıcı adımı içinde türkçe karakterleri de içerir şekilde yazdığım için emulator dosyayı bulamıyordu. Windowsda yeni bir kullanıcı açınca (sadece latin karakterler içerecek şekilde tabiki) sorun kalmadı. Belki aynı sorunla karşılaşanlar olur diye burada yer vermek istedim.
24/06/2010 at 11:56Kategori:.Net | Test Driven Development
Yazılım geliştirme sırasında klasik olarak uygulanan yöntem önce problemi tesbit ederek problemi çözecek olan algoritmanın geliştirilmesi ve sonrasında kodun çalıştırılarak çalışma zamanında hatalarının tesbit edilmesidir. Ben de yıllardır bu yöntemle yazılımlar ürettim ve bu yöntemin eksikliklerine göre çalışma şeklimi iyileştirmeye çalıştım. İlk olarak nesne yönelimli yazılım tasarımına geçtiğimi söyleyebilirim çünkü iyi yazılmış sınıflarla image processing, veritabanı işlemleri ve mail, logging gibi enterprise uygulamaları birer sınıf olarak tasarlayıp kullanmayı öğrendim. İlk etapta bu işlem çok büyük yarar sağlıyorsa da bazen bu temel sınıflarda yaptığınız değişikliklerin nereleri etkileyeceğini kestirmeniz mümkün olmayabiliyordu. Tüm durumları test etmek ve bu testleri her seferinde tekrarlamak ise imkansızlaşıyordu. Bu gibi durumlar için test güdümlü yazılım geliştirme teknikleri geliştirilmiş. Bu teknik test işlemi için üretilmiş bir framework ve test araçlarının kullanımıyla uygulanıyor. En yaygın test frameworkü Xunit. Xunit olarak isimlendirilmesinin sebebi java için geliştirilmiş Junit frameworkünün çok beğenilip .Net (Nunit), C++ (CppUnit) , Python (PyUnit) gibi diller için de yazılmış olması. Ben .net ve java ile ilgilendiğim için genellikle Nunit ve Junit ile çalışmaktayım.
Test güdümlü yazılım geliştirme konusunda bazı sıkıntılar da yok değil. Öncelikle test güdümlü yazılım geliştirmede sanılanın aksine önce test kodunu yazmanız ve sonrasında ürün (production ) kodunu yazmanız gerekiyor. Sonrasında ise test işlemini başlattığınızda kodun hangi testlerden geçip geçemediğini belirliyorsunuz. Ayrıca doğal olarak yazdığınız test kodu, sadece o anda kodun iyileştirilmesi için ve ilerde yazılımın değiştirilebilmesi için kullanılıyor yani müşterinin sisteminde çalışacak olan yazılımda test kodunun doğrudan bir görevi olmuyor. Test güdümlü yazılım geliştirmede yazdığınız kodun en az yarısının test kodu olacağı düşünüldüğünde bunun boşa giden zaman ve emek olduğunu düşünüp TDD(Test Driven Development) tekniğini kullanmanın gerçekten yararlı olup olmadığı konusunda ikileme düşüyorsunuz. Ama yazılmış bir sistemdeki yapılacak tek bir değişikliğin nasıl yeni buglar çıkaracağını ve domino etkisi yaratacağını tecrübe etmiş birisi iseniz TDD tam size göre olabilir. Ayrıca TDD için beklemeye hiç gerek yok. Bundan sonraki yazılan kodlarda biraz da test kodunun yer alması ve bu testlerin her zaman tekrar edilebilir ve kullanılabilir olması gerçekten yaptığınız işte daha emin adımlarla yol aldığınızı gösteriyor. Buraya kadar TDD hakkında internetteki bazı kaynakları okuyarak elde edilebilecek şeylerden söz ettim. Test güdümlü yazılım geliştirme tekniklerini Visual Studio IDE üzerinde uygulamaya çalışacağım. Basit bir test kodu da içeren uygulamaya yer vereceğim. Java ile junit kullanımının daha kolay olduğunu söyleyebilirim. Özellikle Netbeans ortamı test için hazır olarak geliyor.Ama Nunit ve Junit çalışma mantığı ve assertions'lar bakımından birbirinin aynısı olduğu için birini öğrenmenin yeterli olacağını düşünüyorum. Öncelikle .net ortamında NUNit kullanabilmek için http://www.nunit.org/?p=download adresinden NUnit-2.5.5.10112.msi paketini indirip kuruyoruz. (Bu yazı yazılırken Nunit 2.5 versiyonuna sahipti. Daha güncel paketler de indirilebilir.) Bu paket ile bilgisayarımıza Nunit GUI, Nunit Framework kurulmuş oluyor. Visual Studio ile Nunit'i kullanabilmek için http://www.testdriven.net/download_release.aspx?LicenceType=Personal adresinden TestDriven.Net dosyasını indiriyoruz. Bu programla Visual Studio içerisinde testlerimizi çalıştırabileceğiz. (Kişisel kullanımı ücretsizdir.) Bu iki yükleme sonucunda sistemimizde test ortamı hazırlanmış oluyor. Şimdi yapmamız gereken sadece Nunit frameworkü projemize referans olarak eklemek ve test kodumuzu yazmak. Test kodunun yazımında ise farklı yollar izlenebilir. İlk yol aynı solution için yeni bir proje açıp test kodumuzu hep bu projede yazmaktır. Diğer yol ise projemiz içindeki bazı sınıfları test projesi olarak kullanmaktır. Ben öğrenmek için yazdığım kodlarda aynı proje içindeki test sınıflarını kullanıyordum. Örnekte de yeni bir windows console application oluşturarak test kodumu da bir sınıf içinde yazdım.

Burada Math.cs içinde basit bir iş yapan metod yazacağım ve TestKodu.cs içerisinde yazdığım test kodu ile metodu de test etmiş olacağım.
Test ortamını oluşturmak için yapmamız gereken son bir adım kaldı. O da Nunit referanslarının eklenmesi.


Şimdilik mock objelerle çalışmayacağımız için 2. referansın (nuint.mock) eklenmesine gerek yok. Nunit.framework referansını ekliyoruz. Artık test kodu yazmaya başlayabiliriz.
Senaryomuzda 4 sayıdan en küçüğünü bulan bir metod yazmak isteyelim ve bunun için gerekli olan test kodunu senaryoları düşünerek oluşturalım. Öncelikle negatif sayıları test etmeliyiz ve sayıların metoda giriş sıralamasının vereceği tesadüfi doğru sonuçları da engellemeye çalışacağız.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
namespace NUnitTestProjesi
{
[TestFixture]
public class TestKodu
{
[Test]
public void testEt()
{
Math p = new Math();
Assert.AreEqual(4,p.EnKucukBul(new int[] { 9, 4, 7 }));
Assert.AreEqual(9,p.EnKucukBul(new int[] { 9, 12, 15 }));
Assert.AreEqual(-9,p.EnKucukBul(new int[] { -9, 4, 7 }));
}
}
}
Test.cs nin içeriği.
Burada [TestFixture] sınıfın test aygıtı (elektronikçe adı) ve [Test] metodun test olarak çalıştırılacağını belirten attribute'lar. Assert ise tüm test metodlarına verilen ad. Test sonucuna göre çıktı olarak testin başarılı ya da başarısız olduğu döndürülüyor. Aynı metod içinde 1 adet assertion olabileceği gibi çok sayıda da olabilir. Çok sayıda assertion içeren testlerde assertionlardan birisi hatalı olduğunda o test başarısız sayılır. AreEqual ise expected (beklenen) ve actual(dönen değer) i karşılaştıran test metodudur.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace NUnitTestProjesi
{
class Math
{
public int EnKucukBul(int[] sayilar)
{
int min = sayilar[0];
for (int i = 0; i < sayilar.Count(); i++)
{
if (sayilar[i] < min)
min = sayilar[i];
}
return min;
}
}
}
Math.cs içeriği.
Yukarıda da en küçük sayıyı bulan algoritmaya ait metod var. Bu iki sınıfı yazdığımızda test işlemini başlatmak yeterli.
Test sonucum ise şöyle:
Şimdi biraz kodda ya da test kodunda değişiklik yapıp hata oluşturmaya çalışalım. Assertion işlemlerinden birisini değiştirdiğimde
Assert.AreEqual(p.EnKucukBul(4,new int[] { 9, 4, 1 }));
için beklenen değer 1 olması gerekirken 4 olarak işaretledim. Algoritmamızın yanlış değer döndürdüğünü varsayarsak (ki bunu sağlamak da zor değil aslında) beklenen değerin 4 olduğunu ama dönen değerin 1 olduğunu söyleyen bir hata alırız.
Test senaryolarının ve metodlarının artmasıyla tüm testlerimiz her defada çalışacak ve sınıflarımız değişikliklere karşı tekrar tekrar test edilmiş olacaktır. Şu ana kadar sadece NUnit ve Test Güdümlü Yazılım Geliştirme tekniğine giriş yapmış olduk. Agile Principles ve TDD üzerine yazılarıma devam etmeyi düşünüyorum. Şimdilik hoşçakalın.
02/06/2010 at 21:35Kategori:GNU/Linux
Uzun zamandır vrms (Virtual Richard M. Stallman) isimli küçük yazılımı biliyor fakat kurup deneme imkanı bulamıyordum. Geçenlerde acaba şu anda ubuntu kullanıyorum ama gerçekten sistemim birileri tarafından hala incelenemeyen hangi program kodlarını içeriyor diye merak ettim. Debian tabanlı sistemlerde çalıştırabileceğiniz
sudo aptitude install vrms
komutuyla gerekli yazılımı kurdum. Bu yazılım Richard Stallman'ın sanal bir kopyası. R. Stallman %100 açık kaynak kodlu bilgisayarlar kullanıyor ve Biostan tutun da tüm firmware ve bileşenlerine kadar açık kaynak kodlu ve tamamen yine GNU felsefesiyle örtüşen ve fazla da yaygın olmayan bir linux dağıtımı kullanıyor. Bu küçük yazılım da sanki bilgisayarınız R.Stallman tarafından inceleniyormuş gibi tüm kurulu programları inceliyor ve açık kaynak olmayan yazılımları ortaya çıkarıyor. Benim bilgisayarımda kurulu olan açık kaynak olmayan ( non-free )programlar listesi şöyle:
***************************************************************
Non-free packages installed on atci-linux
opera The Opera Web Browser
unrar Unarchiver for .rar files (non-free version)
Contrib packages installed on atci-linux
flashplugin-installer Adobe Flash Player plugin installer
flashplugin-nonfree Adobe Flash Player plugin installer (transitional pack
gstreamer0.10-pitfdll GStreamer plugin for using MS Windows binary codecs
nvidia-common Find obsolete NVIDIA drivers
ttf-mscorefonts-installer Installer for Microsoft TrueType core fonts
2 non-free packages, 0.1% of 1433 installed packages.
5 contrib packages, 0.3% of 1433 installed packages.
Güvendiğim ve birçok insanın kullandığı yazılımlar oldukları için şimdilik affediyorum. Çalışmaya devam etsinler. En azından fontlara ve codec lere bir süreliğine daha ihtiyacım var. Listeye bios yazılımını da eklemek lazım bir de
30/05/2010 at 23:39Kategori:Java
JUnit yazılım geliştirme metodolojilerinden TDD(Test Driven Development) alanında en etkili frameworklerden birisidir. Uzun zamandır ünite testinin ne olduğunu bilip de şu zamana kadar geliştirdiğim hiçbir yazılımda kullanamamış olmanın verdiği huzursuzlukla bir test frameworkünü inceleyip küçük denemelerde bulunmaya heves ettim. Konu test olunca bu alanda çok yaygın kullanılan JUnit (.net için geliştirilen versiyonu NUnit) üzerinde inceleme yapmaya karar verdim. Sonuç olarak JUnit'in ya da herhangi bir test frameworkün yazılım projelerinde kullanılması çok önemli. Her durum için yazılımı tekrar build etmek ya da tekrar serverda test etmek can sıkıcı ve zaman kaybettirici olabiliyor. Ayrıca her bir durum için ayrı ayrı parametreyi üretmek her bir butona tıklamak ya da veritabanına elle kayıt ekleyip silmek gibi sıkıntılı işlemleri yazdığımız test sınıflarıyla deneme imkanına kavuşuyor ve aynı zamanda yazılımı geliştirip değiştireceğimiz zaman aynı testleri tekrar çalıştırarak uygunluğunu öğrenebiliyoruz.Konuyla ilgili birkaç türkçe kaynak da var.
http://web.cs.hacettepe.edu.tr/~turgay/ymlab/pdf/junitTutorial.pdf
http://www.teknoturk.org/docking/yazilar/tt000136-yazi.htm
30/05/2010 at 10:21Kategori:Java
Ubuntu artık Sun-Java6-jre/jdk paketlerini repositoryden çıkarmış. Sebebi ise OpenJdk/Jre nin Sun jdk/jre lerden bir farkı olmadığından tamamen open source ilerleyen bir projeye destek vermek istemişler. Tercih meselesidir ama ben hep Sun jre nin Open Jre den hızlı çalıştığını düşünüyorum ve gözlemliyorum. Yeni versiyonları test etme imkanım olmadı ama yine de Sun Jre/jdk kullanmak için Ubuntu'da yapılması gereken ufak bir repository eklemesine burada yer vermek istedim. (Adı da artık Oracle JVM olacaktır. İlk etapta tüm sun logolarının Oracle ile değiştirilmesini bekliyoruz:) )
1. sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
2. sudo aptitude update
3. sudo aptitude install sun-java6-jdk
Farklı java versiyonları ve dağıtımları arasından Sun dağıtımlarını seçmek için:
sudo update-alternatives --config java
Ubuntu 10.04 gerçekten LTS(uzun süreli kullanım) için hazırlanmış. En azından 9.X versiyonlarındaki basit kararsızlıklar giderilmiş ve tamamıyla tüm çalışmalarınızı yürütebileceğiniz bir ortam sunuyor. Ayrıca Gwibber ile facebook ve twitter gibi tüm sosyal ağları da bir tık ile açılacak ve göz atıp çıkılacak
duruma getirmiş ki bu facebook ve twitter gibi ortamlarda çok fazla zaman harcayanlara gwibber bir çözüm olabilir.
09/04/2010 at 00:22Kategori:Bilgisayar
Uzun zamandır günlüğe yazmadığımı farkettim ama gereksiz yazılar yazarak internetin çöplük olma yolundaki gidişine katkıda bulunmak istemediğimden aklıma gelen bazı konularda yazmamaya karar verdim. Yine de yazmaya değer şeyler de oluyor hayatımda
Mesela uzun zaman sonra Çukurova Üniversitesinde iki önemli etkinlik düzenlendi. Birincisi bu pazartesi yapılan internet haftası etkinlikleri için düzenlenen Mustafa Akgül hocanın internet haftası ile ilgili semineriydi. Burada genel olarak sosyal ağlar, internet, www pazarı ve internetin ortaya çıkışı ile geldiği nokta arasındaki uçurumdan söz edildi. Mustafa Akgül linux listelerinden duyduğum bir insandı ama konferans salonuna gittiğimde pardus kurulu laptoptan vi editoründe yazdığı mesajları konsoldan yollayan birini gördüğümde zaten seminer benim için 1-0 önde başlamıştı. İkinci güzel etkinlik ise veritabanı dersi sonrasında gerçekleşen Kartaca Şirketinden Zeynep Özdemir ile MySQL Cluster Yapısı semineriydi. Seminerde Cluster ve teknik özellikleri, Standart MySQL mimarisi ile farkları,Web uygulamalarında cluster yapısını kullanma gibi konulardan bahsedildi. Ayrıca Kartaca tamamen açık kaynak yazılımlarla çözümler üreten bir şirket olduğu için ve Adana'da böyle bir şirket çalışanını bir daha yakalama imkanım olmadığı için aklımda ne kadar soru varsa (hem mysql hem de linux'le ilgili) sordum. Bizim düşündüğümüz şekilde iş yapan şirketlerin varolması ve daha önemlisi piyasada tutunup iş yapabilmesi gerçekten çok umut verici oluyor. Aynı zamanda Turkcell , Genpa gibi şirketlere üretilen projelerin nasıl geliştirildiğinden ve hangi teknolojilerin kullanıldığından da bahsedildi. Ayrıca linux kümeleme, yük dengeleme gibi konularda da varolan bilgilerime eklemeler yaptım. Ayrıca PostgreSQL ve diğer açık kaynak yazılımların da uygulama alanlarındaki avantaj ve dezavantajları konuştuktan sonra seminer sona erdi. Bu hafta özgür yazılım konulu ilgili iki seminerden sonra kendimi daha iyi hissetmeye başladım. Özgür günler dileklerimle...
03/02/2010 at 13:58Kategori:Java
http://tinyurl.com/4evmdy adresinden Sun java dökümantasyonunun windows help formatındaki düzenlenmiş şekline ulaşabilirsiniz. Really Big Index!
29/01/2010 at 19:43Kategori:.Net
SQL Injection programcıdan kaynaklanan bir sorundur. Bazen yetkisin erişime olanak verdiği için bilgisayar sistemleri için çok önemli fakat önlemi alınabilen bir konudur.Parametre kullanmadan doğrudan SQL cümlecikleriyle işlemler yaptığımızda kötü niyetli kişiler tarafından girilen SQL cümleciğindeki şartlı durumları doğru yapacak şekilde girdiler, sisteme yetkisiz ya da yanlış yetkilendirilmiş girişlerle sonuçlanır. SQL cümlelerinde bu kondisyonları bozan girdiler şöyledir:
’ or 1=1--
" or 1=1--
’ or ’a’=’a
or 1=1--
’) or (’a’=’a
" or "a"="a
SQL Injection'dan korunmak için yapılması gerekenler ise gayet basittir. İlk alınacak önlem ' ve " karakterlerinin yukarıdaki gibi kullanımını önlemek. ' karakterlerini '' ile değiştirmek iyi bir çözümdür. Diğer karakterler için de yine bir karakteri ikilemek ya da tamamen silmek düşünülebilir. Burada önemli nokta girişin ne olarak kullanılacağıdır. Bir parola girişi için tüm üye kayıt ve girişlerindeki karakterler üzerinde aynı işlemleri yaparsanız verilerin doğrulanması ve tutarlılığında sorun olmayacaktır.