TFS 2010 yükseltme, TFS 2012 ye göç ( TFS 2010 upgrage, TFS 2012 migration)

TFS 2010 versiyonundan 2012 versiyonuna yükseltmek için yazılmış birçok İngilizce kaynak bulabilirsiniz. Bu kaynaklarda söz edilmeyen bazı ipuçlarını paylaşalım:
  • TFS yükseltme çalışmasının alacağı süre veritabanı boyutlarınız ve sunucunun işlemci hızı ile doğrudan ilişkilidir.
  • Yükseltme işlemi veritabanındaki en büyük tablolar üzerinde yeni alanlar ekleme, index oluşturma ve kopyalama işlemleri ile veritabanının da güncellenmesini içeriyor.
  • 100 GB'lık bir veritabanı için yükseltme işlemi 3 saat kadar sürebilir.
  • Yükseltme işlemini başlattığınız pencerede çalışma durumu gösterge çubuğu ilerlemiyorsa veritabanındaki aktif işlemlerinizi ve tablo boyutlarındaki değişimleri takip etmeniz iyi olacaktır.

Kurulumu yapacak kullanıcının:

  • TFS kurulacak sunucuda Administrator grubunda olması
  • TFS yükseltmesi olacak veritabanında sysadmin yetkisinde olması
  • TFS Admin grubunda tanımlı olması gerekiyor.

OpenGrok Kaynak Kod Arama Motoru

Büyük yazılım projelerinin kaynak kodları içinde arama yapmak ve referans listesini görebilmek için kullanabileceğiniz bir arama motoru OpenGrok.

CCDL lisansına sahip özgür yazılımı proje sitesinden indirebilirsiniz.

Yazılım Özgürlüğü Günü Türkiye'de de Kutlanacak

Her yıl dünya genelinde Eylül ayının üçüncü Cumartesi kutlanan Yazılım Özgürlüğü Günü bu yıl ülkemizde de çeşitli etkinliklerle kutlanacak. Şu an için Ankara, Çanakkale, İstanbul ve İzmir’de kutlamaları kesinleşen etkinliklere 15 Eylül 2012 Cumartesi günü  özgür yazılım sevdalısı/meraklısı herkesi bekliyoruz.
Etkinlik ile ilgili güncel duyurular yine buradan ve diğer alanlardan yapılacaktır.

Bu etkinlik, özgür yazılımlar konusunda bilgi almaktan tutun da, kendi yaptığı çalışmaları paylaşmak isteyen veya bu konuda güncel ve aktif insanlarla tanışmak isteyen herkese açıktır.

Uluslararası web sitesi: Software Freedom Day
Kaynak: http://yazilimozgurlugugunu.org.tr/ 

Dünya Özgür Yazılım Günü Bildirgesi
Yaşamımız her gün teknoloji, akıllı cihazlar ve bunları çalıştıran yazılımlar nedeniyle her gün gelişmekte, kolaylaşmakta ve zenginleşmektedir. Yazılım, Bilişimi; Bilişim, Bilim ve Teknoloji ise insanlığı Bilgi Toplumuna götürmektedir. Bir başka deyişle, yazılım ülkelerin gelişme yarışında stratejik bir önem kazanmıştır. Biz özgür yazılım gönüllüsü birey ve kuruluşlar, tüm dünyada Eylül’de 3. cumartesiyi “Dünya Özgür Yazılım Günü” olarak kutluyoruz. Bu yıl, 15 Eylül  de Ankara, İstanbul, İzmir ve Çanakkale’de çeşitli etkinlikler yapıyoruz.
Hayatımızı ulaşımdan savunmaya, üretimden dağıtıma, eğitimden sağlığa, ticaretten kamu yönetimine, iletişimden eğlenceye   tüm boyutlarını düzenleyen akılllı cihaz ve sistemlerin önemli bir bileşeni yazılımdır. Özgür yazılımlar,   kaynak kodları herkesin incelemesine,  kullanımına ve  dağıtımına açık, kullanıcıya sınırsız özgürlük veren yazılımlardır.   Özgür  yazılımlar, ücretsiz, uyarlanabilir, sağlam, hızlı ve güvenlidir. Özgüt yazılım  dünyası, yeni bir yazılım üretme biçimi, yeni iş modelleri sunmaktadır. Tüm dünyaya yayılmış   kullanıcı ve uzmanlarca  imece yöntemi ile geliştirilen özgür yazılımları, insanlığın ortak malıdır.
Özgür yazılımlar, en küçüğünden  gömülü sistemlerden, en büyüğünden süper bilgisayarlara, ev kullanıcılarından bankalara, kamu kurumlarından üniversitelere, tüm kurum ve bireylerin rahatça kullanabileceği, gereksinimlere göre basitleştirilebilen, sağlamlaştırılabilen, güçlendirilebilen yazılımlardır. Özgür yazılımlar, her alanda çözümler sunarak, yazılım tekellerine karşı tüketiciye seçenekler sunmaktadır.  Pek çok ülke, kamu kurumlarında  özgür yazılımlarının kullanımını şimdiden benimsemiş ve bilgi toplumu stratejilerin bir parçası yapmışlardır. Ülkeler, güvenlik, tasarruf, istihdam ve rekabet avantajı için özgür yazılımları kullanmaktadır.  Dünya üzerindeki hemen her ülke kendi gereksinimlerine göre bir  Linux dağıtımı geliştirmektedir. Ülkemizde de gönüllülerce çeşitli dağıtımlar üretilmiş, ve TÜBİTAK’ın girişimi ile   Pardus hazırlanmıştır. Bir Özgür yazılım eko sistemi kurulmaya başlanmış,  yeni özgür yazılımlar ve uygulamalar geliştirilmekte, yerli özgür yazılım  firmaları kurulmaktadır.
Özgür yazılım  felsefesinin paylaşımcı yapısı  başka alanlarda yankı bulmuştur. İnsanlık açık ders malzemeleri, açık erişim, açık patentler, açık donanım gibi yaklaşımlarla dünyanın daha yaşanır bir hale gelmesinine katkıda bulunmaktadır.
Bugün İnternet büyük ölçüde özgür yazılımların üzerinde çalışmaktadır. Dünyada 300 binin üzerinde özgür yazılım projesi vardıKanımızca, özgür yazılımların, kapalı kaynak kodlu yazılımlarla  yetenek ve performansta yarışacak konumdadır. r. Özgür  yazılımlara bu sansın verilmesi, kamu ihalelerinde eşit sans verilmesi istiyoruz.   Kamudaki uygulamaların platform bağımsız olması gerekir. Başta temel bilişim eğitimin olmak üzere, her kademe marka bağımlılığı yaratmayacak, kullanıcıyı tüm alternatif platform ve ürünlerde çalışabilme yeteneğini kazandıracak, ürünlere değil kavramlara ağırlık vermesi gerekir.
Özgür yazılımlarının ülkemizin kalkınması,  bilgi toplumuna dönüşmesinde önemli rol oynaması gerektiğini düşünüyoruz.   Ülkede herkesin özgür yazılımlarla tanışmasını öneririz. İster kişisel bir kullanıcı, ister küçük ölçekli bir işletme, ister büyük ölçekli bir kamu veya özel kuruluşun yöneticisi olun, özgür yazılım alternatifini, maliyet ve verimlilik acısından değerlendirmeden karar vermeyin!
Ülkemizin geleceğinde bilişim önemli rol oynayacaktır. Özgür yazılımlar çoğu sektör ve bireyler için, Türkiye’nin üretmesi ve gelişmesi için, en etkin ve verimli secenektir.

Daha Özgür ve verimli bir yaşam için Özgür Yazılım !

Bilgisayar Mühendisleri Odası

Ayrıntısıyla anlatmak gerekiyor mu bilmiyorum, ancak hızlıca haber vermek lazım. Belki de geç kaldı(k)m. Bilgisayar Mühendisleri Odası kuruldu. Genel kurulu da gerçekleştirildi, ilk dönemine seçilen kişilerle başlıyor. Bekleyenlere, ilgililere, meraklılara duyurulur :)

DNA'da Kitap

Geçenlerde bir haberde görmüştüm: DNA'ya kitap kopyalanmış. Haberde nasıl yapıldığına dair hiçbir bilgi yoktu. Tahminim; adenin, timin vb. bileşenleri kullandıkları yolundaydı. Ama tabii DNA yapısını bilmediğim ve bu çalışmalardan haberim olmadığı için çok fazla fikir yürütememiştim.
Bugün bilim.org sitesinde bir yazıya rastladım. DNA dijital veri deposu olarak ele alınıp, 1 gram DNA'ya 700 terabayt veri kaydedilmiş. Günümüz veri depolama yöntemleri için gerçekten önemli bir gelişme. Bu veri, 14336 adet 50 GB'lı blueray diske sığabilir. Bir diğer özelliği de verinin uzun süre kalabilmesi.
Merak edenler için, bu işlemin nasıl yapıldığına dair yazıda genel bir bilgi var.
1 Gram DNA içine 700 Terabayt Veri Kaydedildi

okumalisteleri.org sitesi ve İzlem Gözükeleş'ten Bilişim ve Toplum üzerine liste

Bilginin üretilmesinde sorgulayıcı, bilinçli, sistematik ve bize dayatılanın dışında okumalar yapabilme ihtiyacından hareketle, okumalisteleri.org sitesinde bir süredir farklı konularda okuma listeleri paylaşılıyor. Okumalisteleri.org'un Neden? yazısında dediği gibi deneyimlerin ve bilginin paylaşılması bazı sorunları aşmada ve bir şeyleri değiştirmede gerçekten önemli.

Sitenin ilk paylaşılan okuma listelerinden biri bizim alanımızla bire bir ilişkili: Bilişim ve Toplum.
Listeyi gönderen; özgür yazılım, bilişim politikaları üzerine önemli yazılarıyla tanıdığımız, Bilim ve Gelecek dergisinden de bildiğimiz İzlem Gözükeleş. Okuma listesinde iletişim ve bilgisayar teknolojileri, fikri mülkiyet, enformasyon toplumu-çağı, özgür yazılım, dijital gözetim vb. üzerine kitaplar bulunuyor. Bu alanda çalışanların, alana dair sözü olanların listeyi incelemesi eminim yararlı olacaktır. 

Yazılım Geliştirme Firmalarında Kullanılan Yöntem ve Teknolojiler



Yazılım geliştirme süreçlerinin iyileştirilmesi için yapılan araştırmalar, uygulama geliştirmede tercih edilen yöntemlerin de değişmesini sağladı. Yazılım firmalarında çoğunlukla kullanılan yöntem ve teknolojileri şöyle özetleyebiliriz:

Çevik yazılım geliştirme yöntemlerinin kullanımı (Agile Methods).
Birim testleri yazma (Unit testing).
Sürekli Tümleştirme (Continuous Integration).
Parametre, koşul (condition), kural (rule) yapısına geçiş.
İş akışlarının tanımlanabilmesi.
Ekranların, istenilen alanlar ve akışına göre dinamik oluşumu.
Yazılım Yaşam Döngüsü(Application Lifecycle Management) kullanımı.
Bilgi Yönetimi (Knowledge Management) prensipleri ile kişiye bağımlılığı azaltma.
Kaliteli yazılım geliştirme çalışmaları.

Richard Stallman Haklıydı!

Bir yazıda özgür yazılımın önemine dair bir paragrafın günümüzde nasıl gerçek olduğuna değiniliyor. Böylece çoğu kimse tarafından "çok fazla radikal" biri olarak kabul edilen Stallman'ın haklı olduğu (tekrar) kanıtlanmış oluyor. Özgürlüğümüz için özgür yazılım...

Toplumumuz bilgisayarlara daha fazla bağımlı oldukça, üzerinde çalıştırdığımız yazılımlar özgür toplumumuzun geleceğini güvence altına almada kritik bir öneme sahip oluyor. Özgür yazılım; evlerimizde, okulumuzda ve işlerimizde kullandığımız teknoloji üzerinde kontrol sahibi olmamız hakkındadır, nerede bilgisayarlar bizim bireysel ve toplumsal (komünal) yararımız için çalışıyorsa, bizi kısıtlamak ve gözetlemek isteyen özel mülk yazılım firmaları veya hükümetler için değil (Kaynak, çeviri hızlıca benim tarafımdan yapılmıştır).

Linux İşletim Sistemi

Linux işletim sistemini kullanan insan saysı 2012 itibariyle 60 milyonu geçmiş bulunuyor. Dünyanın en büyükleri arasında bulunan 500 kurumsal kullanıcıya uygulanan ankette % 80 oranında "gelecek 5 yıl içinde Linux kullanımı artacak" yanıtı alınmış. Kurumlar Bilgi Teknolojileri maliyetlerini düşürmenin yanında, uzun süre çalışabilen, kararlı sistemler kurabilmek için de Linux tercih ediyorlar.

LinuxCounter sitesinde, linux kullanıcı sayısının, 1991 yılından günümüze kadar olan artış grafiğini görebilirsiniz.

Kendi firmanızda kullanmak üzere Linux işletim sistemi ve açık kaynak kodlu yazılımları incelemenizi ve kullanmanızı tavsiye ederiz. Bilgisayarınıza tamamen yüklemeden de deneyebileceğiniz Ubuntu Linux dağıtımı ile başlayabilirsiniz. 

Linux işletim sistemi, çalışacakları amaç için özelleştirilmiş olarak sunuluyorlar. En iyi dağıtımları sıralayacak olursak:

Ubuntu : Dizüstü bilgisayarınız için,
Mint   : Masaüstü bilgisayarınız için,
RedHat : Büyük ölçekli firmanızda kullanacağınız masaüstü bilgisayar ve sunucularınız(server) için,
Suse   : Büyük ölçekli firmanızda kullanacağınız masaüstü bilgisayar ve sunucularınız(server) için,
Knoppix : Kurulum yapmadan, CD üzerinden bilgisayar açılışı yapabilmek için uygun dağıtımlardır.

RedHat ve Suse dağıtımları, büyük firmaların kurumsal ihtiyaçlarını karşılamak üzere geliştirilmiştir. Bu dağıtımları ücretsiz  kullanabilir, isterseniz geliştirici kurumların belirledikleri ücretler karşılığında 7/24 destek alabilirsiniz. 

Google Code Test Otomasyonu - Vaka Analizi

2009 da test otomasyonu için kod yazılmaya başlanmış.
Önce yeni kod için, sonra değiştirilen her kod için test kodunu zorunlu tutmuşlar.
Herkes kendi sahte nesnelerini (mock object) oluşturmaya başlamış, zaman geçtikçe bunu yönetmek durumunda kalmışlar.

Çıkardıkları sonuçlarda biri : sahte nesne kullanmamaya çalışın, kullanacaksanız gerçek bir sahte nesne olsun ve bunu diğerleri ile paylaşın. Devamı için, ilgili sunumun videosuna buradan ulaşabilirsiniz.

OBEB için Özyinelemeli Öklid Algoritmaları

Bilinen en eski algoritmalardan biri, iki sayının OBEB(ortak bölenlerin en büyüğü)'ini bulan Öklid(Euclid) Algoritması'dır. MÖ 300 yılında Öklid'in bir kitabında geçtiği bilinmektedir. Öklid Algoritması şifrebilimin önemli algoritmalarından RSA Algoritması'nda, Diofant denklemlerinin (Diophantine Equations) çözümünde, sayılar kuramındaki bazı kuramların kanıtlanmasında kullanılmakta.
Ayrıca Genişletilmiş(Extended) Öklid Algoritması denilen algoritma ile sadece OBEB'i değil,  OBEB(a,b) = ax + by denklemindeki x ve y tam sayıları da bulunabiliyor.

Aldığım derslerden birinde 0 ile 2^64 -1 arasındaki pozitif tam sayılar için geçerli olacak şekilde bu algoritmaların kodunun yazılması ödev olarak verilmişti. C++ ile yazdım; ancak geç gönderdiğim için benim çözümler değerlendirilmedi. Ben de yazdığım kodları burada paylaşarak değerlendireyim dedim. İki algoritmanın özyinelemeli (recursive) biçimlerini aşağıda paylaşıyorum.

Özyinelemeli Öklid Algoritması 

Wikipedia'da Özyinelemeli Öklid Algoritması için verilen sözde kod(pseudocode) şu şekilde

function gcd(a, b)
    if b = 0
       return a
    else
       return gcd(b, a mod b)


Benim çözümüm şu şekilde:


...

typedef unsigned long long int PozitifTamSayi;

...  

//Oklid(a,b)
//Özyinelemeli Öklid Algoritması kullanarak OBEB bulma algoritması

 PozitifTamSayi Oklid(PozitifTamSayi a,PozitifTamSayi b)
{
    if (a == 0)
        return b;
    if (b == 0)
        return a;

    if (a > b)
        return Oklid(a % b, b);
    else
        return Oklid(a, b % a);

}  


Özyinelemeli Genişletilmiş Öklid Algoritması

Wikipedia'da Özyinelemeli Genişletilmiş Öklid Algoritması için verilen sözde kod(pseudocode) şu şekilde:

function extended_gcd(a, b)
    if b = 0
        return (1, 0)
    else
        (q, r) := divide (a, b)
        (s, t) := extended_gcd(b, r)
        return (t, s - q * t)

Benim çözümüm şu şekilde:


...
typedef long long int TamSayi; 
...

//GenisletilmisOklid(a,b)
//Özyinelemeli Genişletilmiş Öklid Algoritması kullanarak 
//ax + by = OBEB(a,b) şeklindeki denklemden OBEB, x ve y bulma algoritması
//işaretçi(dizi) döndürür

TamSayi* GenisletilmisOklid(TamSayi a, TamSayi b){
    TamSayi* sonuclar=new TamSayi[3];
    TamSayi q,r;
    if (b == 0)
    {
        sonuclar[0]=a;
        sonuclar[1] = 1;
        sonuclar[2]=0;
    }
    else
    {
        q = a/b;
        r = a%b;
        sonuclar= GenisletilmisOklid(b,r);
        int gecici= sonuclar[1] - sonuclar[2]*q;
        sonuclar[1] = sonuclar[2];
        sonuclar[2] = gecici;
    }

    return sonuclar;
} 



Kaynaklar
  • Wikipedia, Euclidean Algorithm, http://en.wikipedia.org/wiki/Euclidean_algorithm.
  •  Wikipedia, Extended Euclidean Algorithm,  http://en.wikipedia.org/wiki/Extended_Euclidean_algorithm.

İnternette Güvenli Gezinti

Günümüzde İnternet üzerinde dolaşırken bilgilerimizin korunması önemli bir konu haline geldi. Herkes bilgilerimize erişme, onları elde etme çabası içerisinde. Bu hızlı yazıda hızlıca bir kaç araçtan söz edeceğim:
  • Tor Browser Bundle: Her ne kadar Türkçe olarak indiremeseniz de, size anonim internet gezintisi sunan önemli bir araç. Tabi Firefox kullanmak zorundasınız. İndirdiğiniz dosya doğrudan Tor anonimleştirici destekli Firefox tarayıcı.
  • JonDoFox: Bu da JonDonym anonimleştiricili Firefox dağıtımı. Şu adreste bir karşılaştırma bile var.
  • I2P: Bir başka anonimleştirici ağ hizmeti. 
  • HTTPS Everywhere: EFF tarafından geliştirilen bu araç bütün sitelere https ile girmenizi sağlıyor, böylece şifrelenmiş veri aktarımı garantilenmiş oluyor.
  • Orbot:  Android için Tor proxy uygulaması
Konuyla daha fazla ilgilenenler doğrudan google araması yapabilir veya başlangıç olarak şu adresi ziyaret edebilir.

Çevik Yazılım Geliştirme ve Scrum Deneyimleri


Altı ay kadar önce Çevik yazılım geliştirme metodolojisini, biraz kendimize uyarlayarak, uygulamaya başladık.

Scrum için, genel olarak benim düşüncelerim şöyle:


+Artıları
  • Önceki yöntemlere göre yazılım geliştirme işine daha uygun, çok şey bilmeyi beklemeden, hızlı başlayıp sadece ihtiyaç olan şeyleri geliştiriyoruz. Eskiden uzun analizlerde, sonradan kullanılmayacak özellikleri de ekliyorduk yazılıma, şimdi bu çok azaldı.
  • Ekibin işi sahiplenmesini sağlıyor, herkes kendi işinin farkında, takip etmesi gerekeni biliyor, ona göre de hesap soruluyor.
  • Herkesin her işle ilgili genel bir fikri oluyor.
  • Bir işe bitti diyebilmek takım psikolojisini olumlu etkiliyor, başarı hissi veriyor.
  • İletişimi çok arttırıyor, takım üyeleri de müşteri de sana daha yakın, daha samimi oluyor.
-Eksileri
  • Normalde herkes iş havuzundan kendi işini seçmeli, ancak kendi haline bırakınca işler zamanında bitemiyor, bu nedenle birbirine bağlı işlerde verilen süreye uyulamadığı oluyor. Böyle durumlarda önceliklendirme yapıyoruz. Gerekirse iş ataması yapıyoruz.
  • Farklı takımlar arasında scrum değerleri ölçüm metrikleri olarak kullanılırsa sorun oluyor. A takımının bir işe verdiği saat x iken B takımı 4x verebiliyor. Aynı takım içinde bu olmuyor ama takımlar arasında suistimale açık diyebiliriz.
  • Müşterinin de bu çalışma yapısına fikren hazır olması gerekiyor, aksi halde senin işini 2 hafta sonra değerlendirmeye alacağız demek anlayışla karşılanmayabiliyor.
Diğer

  • İşleri takibinin ve sorun çözümünün, ürünün sahibi sıfatında olan yöneticiden, scrum master’a ve takım liderlerine kaymasına neden oluyor.

25 Yıllık Birikim: GCC

GNU tarafından geliştirilen GCC derleyicisi bu yıl 25. yaşını kutluyor. İlk olarak 1987 yılında Richard Stallman tarafından dağıtılan GCC, Özgür Yazılım Vakfı tarafından GPL ile dağıtılan önemi büyük özgür bir araçtır.

25 yıldır özgür yazılım dünyasına bütük katkılar sağlayan bu derleyici günümüzde çoğu GNU/Linux, BSD, Mac OS X dağıtımlarında kullanılan temel derleyicidir. Her ne kadar ilk çıktığında GNU C Compiler (GNU C Derleyicisi) adını almış olsa da bugün bir çok dili destekliyor (dolayısıyla adı da değişmiş durumda: GNU Compiler Collection - GNU Derleyici Derlemesi)  : C++, Objective C, Objective C++, Fortran, Java, Ada, Go. GCC'nin Bu dillerin kütüphanelerini de barındırdığını belirtelim.

22 Mart günü, 25. yılını kutlayan bu derleyicinin yeni GCC 4.7.0 sürümü  de yayınlandı. Değerini pek de anlayamadığımız (ama pek çok yerde kullanılan ve kullandığımız) bu araç, özgür yazılım dünyasının temel altyapı gereksinimlerinden birini karşılıyor. 1989 yılından 2012 yılına GCC'nin gelişim çizgisini anlatan bu video (33 dk. olduğunu belirteyim), nereden nereye gelindiğini gösterecektir.

Ayrıntılı bilgi için: http://gcc.gnu.org/

Not: Başlığa aldanmayın, 25 yıllık değil aslında belki de binlerce yıllık bir birikim GCC'yi bugüne taşıyor. Bilimin üretimlerinin ilk merak eden insandan günümüze birikimsel bir şekilde oluştuğunu savunan biri olarak başlığı bu duruma özel olarak değerlendirmenizi rica ediyorum.

Çevrimiçi Bilgisayar Bilimleri Ders Siteleri

Son zamanlarda özellikle gözde amerikan üniversitelerinin artan bir yönelimle çevrimiçi derslere yoğunluk verdiğini gözlemliyorum. En çok bilinen MIT tarafından sunulan OpenCourseWare hizmetine doğrudan görüntülü, etkileşimli ders olanağı sunan yeni siteler de ekleniyor. Ben de özetle bunları bir paylaşayım dedim.

Bunlar gözüme çarpanlar. Ayrıca kapsamlı listeler incelenerek, sadece bilgisayar bilimleri değil bir çok alandaki çevrimiçi dersler de incelenebilir.

Güncelleme: TÜBA tarafından Açık Ders Malzemeleri de sunuluyor: http://www.acikders.org.tr/course/index.php

Bağlantılar
İngilizce
http://www.openculture.com/freeonlinecourses
http://www.openculture.com/2006/10/university_podc.html
http://oedb.org/library/beginning-online-learning/200-free-online-classes-to-learn-anything
http://education-portal.com/articles/Universities_with_the_Best_Free_Online_Courses.html
http://www.onlinecollegeclasses.com/
http://academicearth.org/
http://www.khanacademy.org/
http://ocwconsortium.org/
http://www.openscience.org/
Türkçe
http://yunusemre.anadolu.edu.tr/
http://www.megep.meb.gov.tr/mte_program_modul/
http://uzaktanegitim.meb.gov.tr:8050/
http://kursiyernet.meb.gov.tr/kursiyer/
http://internettv.meb.gov.tr/
http://www.acikders.org.tr/
Kitaplar-Kaynaklar

http://ebooksgo.org/
http://freescience.info/

Python ve Test Güdümlü Yazılım Geliştirme (TDD)

Python'dan bahsediyorum sürekli ya, kullanabiliyor musun derseniz o kadar aktif kullanmaya başladığımı söyleyemem. Yine de kullanmak isteyenlere yardımcı olmaya çalışıyorum bir taraftan (umarım olabiliyorumdur :) ). Bu yazıda da Python ile yazılım geliştirirken önce test yazmak sonra testlere göre kod yazmak isteyenler için ilk adımlardan söz etmek istiyorum.

(Başlamadan önce doctest ile birim test yazımı için şu adresi inceleyebilirsiniz)

Öncelikle Python'da test yazmak için kullanmanız gereken kütüphane Python ile birlikte geliyor, kütüphane unittest kütüphanesi. Oluşturacağımız test sınıflarını da unittest.TestCase sınıfını kalıtarak ("extend" ederek) yazıyoruz. Yazacağımız test_ ile başlayan metotlar da otomatik olarak çalıştırılacak test metotları olarak kabul ediliyor. setUp ve tearDown metotları da kullanamayacağınız isimlere sahip. Bu metotlar testler çalışmadan önce (setUp - kur) ayarlamayı ve testler bittikten sonra (tearDown - yık) ayarlamayı yapan metotlar. Bu metotların sadece self parametresi aldığını da belirttikten sonra ilk örneği yazalım:

import random
import unittest

class TestSequenceFunctions(unittest.TestCase):

    def setUp(self):
        self.seq = range(10)

    def test_shuffle(self):
        # make sure the shuffled sequence does not lose any elements
        random.shuffle(self.seq)
        self.seq.sort()
        self.assertEqual(self.seq, range(10))

        # should raise an exception for an immutable sequence
        self.assertRaises(TypeError, random.shuffle, (1,2,3))

    def test_choice(self):
        element = random.choice(self.seq)
        self.assertTrue(element in self.seq)

    def test_sample(self):
        with self.assertRaises(ValueError):
            random.sample(self.seq, 20)
        for element in random.sample(self.seq, 5):
            self.assertTrue(element in self.seq)

if __name__ == '__main__':
    unittest.main()


Sınamalarımızda kullanacağımız savlar ("assertion") JUnit kullananlara tanıdık gelecektir:

assertEqual(beklenenDeger, gercekDeger) metodu parametre olarak verdiğimiz beklediğimiz değerle, üretilen gerçek değerin eşit olup olmadığını sınar. Aynı şekilde kullanılan assertNotEqual(beklenenDeger, gercekDeger) metotu eşit olmama durumunu sınar. assertTrue(deyim) ve assertFalse(deyim) metotları parametre olarak verilen deyimin mantıksal sonucunun doğru (true) veya yanlış (false) olup olmadığını sınayan metotlardır. Bir de bir sınıfın belli bir sınıfın örneği olup olmadığını sınayan assertIsInstance(nesne,sınıf) metodu vardır.

Test durumlarını barındıran dosyaları test* kelimesiyle başlayacak şekilde kaydettiğimizde (örneğin test_tenis.py gibi)  python -m unittest discover komutuyla otomatik olarak bulunabilirler. Ayrıca python -m unittest test_tenis komutuyla dosya olarak çalıştırılabilirler. Tek bir test sınıfını veya metodunu çalıştırmak için de python -m test_tenis.DosyaIsmi, python -m test_tennis.DosyaIsmi.testSkor kullanımlarından yararlanılabilir.

Örnek olarak https://github.com/giorgiosironi/python-tdd-tutorial adresindeki kodlar incelenebilir.

Bu yazı için yararlandığım kaynak biraz daha ayrıntılı olarak kullanımı anlatmaktadır: http://css.dzone.com/articles/tdd-python-5-minutes

Bağlantılar:
http://powertwenty.com/kpd/downloads/TestDrivenDevelopmentInPython.pdf
http://onlamp.com/pub/a/python/2004/12/02/tdd_pyunit.html
http://www.blog.pythonlibrary.org/2011/03/09/python-102-an-intro-to-tdd-and-unittest/
http://www.slideshare.net/Siddhi/test-driven-development-with-python
http://dirtsimple.org/2005/02/making-it-from-scratch-with-tdd-and.html
http://www.givp.org/blog/2010/07/22/test-driven-development-how-do-i-start/

Theo Angelopoulos

Theo Angelopoulos'u da yitirdik. Tam da söylediği gibi film çekerken. Gerçi komplo teorisi de var. Yunanistan krizi üstüne film çektiği için bir motorsiklet suikastıyla öldürüldüğüne dair. Nasıl öldüğü, neden öldürüldüğü öldüğü gerçeğini değiştirmiyor.

Bu günlükte ölümlerden söz etmek her ne kadar hoşumuza gitmese de bazen eserleriyle dünyaya katkıda bulunan insanları yitirdikçe, yitirdiğimiz değerler canlanıyor gözümüzde ve özlemimiz artıyor bu değerlerin korunduğu dünyaya.

Sinemanın bu değerli insanı da - her ne kadar çoğu kişiye sıkıcı gelse de - o güzel filmleriyle dünyanın güzelliğine güzellik kattı. Bize kalan görevse ancak onu anmak ve anımsatmak - tıpkı diğer anımsatılması gerekenler gibi - oluyor.

Sonsuzluk ve bir gün filmindeki otobüs sahnesi

Hep Aramızda Olacaklar!

Güney Gönenç'i yitirdik bir süre önce. Pek duyan oldu mu bilemem. Nereden tanırsın derseniz de TBD başkanlığı yaptığını bilmezden önce "Hep Aranızda Olacağım Frederic Joliot-Curie'nin Yaşamöyküsü" kitabını okumuştum. Öldükten sonra öğrendim TBD başkanlığı yaptığını. Güzel insanlar güzel şeyler yapmaya çalışırlar, bize de onları okumak, bir şeyler öğrenmek, nedense onların değerini öldükten sonra anlamak düşer.

Hep aranızda olacağım kitabı, benim için oldukça değerli bir kitap (içeriği kadar bir arkadaşımın doğum günümde hediye etmesi de cabası). Doktora sürecimde arkadaşlarımla tartıştığım bilim ne için, kimin için, nereye kadar sorularına bir nebze olsun yanıtlar vermemi, kendimce kafamda bir bilim-bilim insanı portresi oluşturmamı sağlayan kitaplardandır. Bilim insanı nasıl olmalıdır - özellikle bence - sorusuna yanıt arayanlar varsa edinsinler ve okusunlar bu kitabı. Örnek bilim insanlarından birini - ve hatta bir kısmını - en azından öğreniyorsunuz. Günümüzde bu değerlerin ne kadarı kaldı bilinmez ama insanlık eninde sonunda insanı ve insanlığı değerli kılan dönemleri tekrar yaşayacak, buna dair umudum sonsuz.

Uzun Aradan Sonra

Çok uzun zamandır kodveus'a bir şey yazmıyordum. Yazamamamın  nedeni olarak "özel sebepler" deyip geçeyim. Aslında Mehmet ve Emre dışında pek yazanımız olmuyor bir süredir. Emre, askerde olunca ağırlık Mehmet'in üzerine kaldı. Sağ olsun O da elinden geleni yapıyor.
Bu uzun süre boyunca bilişim alanında birçok gelişme yaşandı. Aklımda kalanlar; internette filtre-sansür konusu, dünyadaki hareketlilikler içinde sosyal paylaşım sitelerinin rolü, Wikileaks, Bilgisayar Mühendisleri Odası kurulması çalışmaları, bilgisayar bilimleri alanından ölümler... Teknik gelişmeler her dönem çok hızlı şekilde oluyor zaten. Onları saymıyorum.
Elbette bu konular üzerine bu kadar zaman geçtikten sonra sadece bir iki laf etmek çok doğru değil. Bir şeyler söylenecekse ayrıntılı yazılmalı. Ama "bilgisayar alanında ölümler" konusuna değinmeden geçmek istemiyorum. Çünkü Steve Jobs ölümü üzerine hala bir şeyler söyleniyor, ilgili kitaplar satılıyor. Ama ben bilgisayar bilimleri alanından ölümler diye bahsederken Steve Jobs'ın ölümünün gölgesinde kalan iki ustadan söz ediyorum.  Elbette bilişim dünyasını yakından takip edenler diğer ölümleri de duydu. Ama genele yönelik haberlerde çok fazla altı çizilmedi. Oysa bilgisayar bilimleri alanına -bence- kesinlikle Steve Jobs'tan daha fazla katkıları olmuştu. Evet, C programlama dilinin ve Unix işletim sisteminin geliştiricilerinden Dennis Ritchie ve yapay zeka alanındaki çalışmaların öncüsü John McCarthy'den bahsediyorum.
 Ne yazık ki "ölü"ler bile eşitsizlikten payını alıyor, "ölüm"ler bile "kullanılabilirlik" açısından sınıflandırılıyor. Steve Jobs'ın hayatını herkese örnek olarak göstermek ve onu toplumun gözünde aklamaya çalışmak, bilimsel çalışmanın veya genel olarak üretimin ne için yapıldığını görmek açısından önemli. "Steve Jobs"lar yaptıklarıyla insanlar için model olarak dayatılırken, bilgisayar biliminin mihenk taşları olan bilimciler satır aralarında bırakılıyor. Yaşamda tek yol olarak zengin olmak ve bunun için her yolun mübah olduğu gösterilirken, insanlığa katkı koymanın yolu gizleniyor. Neyse, uzun süre sonra yazdığım bu yazıyla sizi daha fazla sıkmadan bu konuyla ilgili sözü Richard Stallman'a bırakayım:
...“Öldüğüne memnun değilim; ama gittiğine memnun oldum”. Kimse ölmek zorunda olmayı  hak etmiyor- Ne Jobs, ne Bay Bill, hatta onların yaptıklarından daha fazla kötülük yapmış insanlar bile. Ama hepimiz Jobs'ın, insanların bilgisayar kullanmasına olan kötü etkilerinin sonlanmasını hak ediyoruz.