İ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/