Links for the day
- pinguary's bookmarks on del.icio.us yukarıya taşındım..
Pınar Yanardağ wants to visit this place
Pınar Yanardağ wants to visit this place
Pınar Yanardağ wants to visit this place
Links for the day
Bu sene gördüğümüz son sınıf dersleri arasında "Yazılım Mühendisliği" diye bir ders var. Aslında hep teori içerikli gittiği için; öğretici olabilecek bu ders öğrenci psikolojisi karşısında direnemiyor ve anlatılanlar bir kulağımızdan gidip ötekinden çıkıyor :) Ancak hepimiz içgüdüsel olarak yazılım geliştirme konusunda kendimize göre yöntemler uygulamışız zaman içinde: mesela ben 1. sınıftayken ucundan tek kişilik ? extreme programlama yapıyor olduğumu farkettim * *. Programın tasarım sürecini göz ardı ederek direkt kodlamaya geçiyordum; hızlı geliştirme/bol bug oluyordu haliyle. Ya da yıllardır üst sınıflardan aldığımız bazı derslerin ödevlerini yeni ihtiyaçlara göre 'modifikasyon' ederken aslında reengineering yapıyormuşuz...Açıkçası yazılım geliştirirken genel/geçer kuralları izlemiyorum. Ama daha iyi bir geliştirici/mühendis olmak için bazı kuralları akılda bulundurmakta fayda var. Deneyimli Ruby hackerlarından Yurii Rashkovskii, dün daha efektif bir geliştirici olmak için bir kaç ipucu vermiş. Bazıları benim de benimsediğim kurallar olduğu için bahsettiği ipuçlarına burada yer vermek istedim:
Planlama
Planlama şüphesiz bir yazılım için olmazsa olmaz adımlardan biri. Her ne kadar yazılım hakkında tasarladığınız bir takım adımlar olsa da; direkt kafanızdaki taslak ile kodlamaya geçerseniz mutlaka geri dönmeniz gereken adımlar oluyor. Yurii'nin önerdiği planlama şöyle:
- Yapmanız gereken işlerin bir listesini hazırlayın
- Kısa zamanda bitecek işleri 'Rightnow' dizinine koyun
- Ertesi gün bitmesi gerekenleri 'Today', haftaya kadar bitirilmesi gerekenleri 'ThisWeek', ... vb. dizininlere koyun
- Bunları yaparken görevleri kısa ve açıkça belirleyin
- Zamanlama konusunda gerçekçi olun
Ben planlama için genelde kağıt-kalem :) bunları webe aktarmak için de Ta-da List'i kullanıyorum. Zihin haritalama programları da bu iş için alternatif olabilir.
Çalışma
- Öncelikli işleriniz için 'Rightnow' dizinine göz atın. Yapılacakları yapın, dizin boşaldığında Today'a, o boşaldığında bir sonraki dizine atlayın
- Ancak üzerinde çalıştığınız dizini bitirmeden bir sonrakine geçmeyin
Kaynak Kodun Yönetimi
Kaynak kodlarımız ortaya koyacağımız en önemli eser değil mi? :)
Hepinizin başına gelmiştir: kendi kendinize geliştirdiğiniz amatör uygulamalarda radikal bir değişiklik yaparken yedeğini alırsınız, bir süre sonra eğer sürüm numarası da vermesiyseniz iş içinden çıkılmaz hale gelir. Kendi subversiyon sunucunuzu kurmanıza gerek yok. *forge türü proje barındırma siteleri genelde bu hizmeti sunuyor.
- Versiyon kontrol sistemi kullanın: Subversion, Darcs gibi..
- Kontrol mesajlarınızın açıklayıcı olmasına dikkat edin
- trac ya da ona benzer bir scm kullanın
Kaynak Kod
Kodumuzu açık kaynaklı olarak yayınlamakla iş bitmiyor tabii. Anlaşılır kodlar yazmak için de bir dizi öneri var:
- İsimlendirme kurallarına uyun
- Anlamlı değişken, metot, sınıf adları kullanın
- Okunabilir kodlar yazmaya çalışın
- Kod boyutunuzu küçültmeye çalışın; eğer kullandığınız metodun daha kısa hali varsa onu kullanın *
- Kodunuzu depoya göndermeden önce gözden geçirin; beğenmediğiniz yerleri düzeltmeye çalışın
- Meslektaşınızdan kodunuzu 15 dakikalığına gözden geçirmesini rica edin
Bu zaten sıkça dile getirilen bir şey ama, aynı zamanda kodunuza yorum satırları eklemeye özen göstermelisiniz. Bu sadece kodu okuyana değil, uzun bir aradan sonra koda baktığınızda size de faydalı olacaktır.
Test
Yurii bu maddeyi daha çok Ruby kullancıları için özelleştirmiş. Test noktasında ben birşeyler söyleyeyim: yazacağınız metodun/sınıfın önce iskelet halini oluşturun. Böylece neler yapmanız gerektiğini önünüze koymuş olursunuz. Aynı zamanda belli bir işi yapan kod parçalarını interaktif kabukta deneyerek tüm programı derlemeden/çalıştırmak zorunda kalmadan test edebilirsiniz. Tabii test aşaması oldukça geniş bir alan. Pek çok argüman eklenebilir.
Sonradan gelen edit: Bugun konuyu biraz daha araştırayım dedim. Keşke daha önce rastlasaydım dediğim harika bir makaleye rastladım: "How To Write Unmaintainable Code". Roedy Green tarafından yazılmış. Eğer benden önce davranan olmazsa en kısa zamanda Türkçe'ye çevireceğimdir ;)
WebExpose Ekibi, Linux makinenizde hem IE 5.0 & IE 5.5 & IE 6.0 hem de IE 7.0 sürümlerini nasıl yükleyeceğinize dair bir girdi yazmışlar. Yalnız 7.0 sürümünü arayüzü ile değil de, 6.0'ın rendering motoruna gömülü olarak kullanabiliyorsunuz (ki zaten bizi de IE 7.0'ın getirdiği tab ya da rss okuyucu gibi son teknoloji (!) özelliklerine ihtiyacımız yok :)).

Peki, makinamızda her çeşit IE sürümü çalıştırmanın ne gibi mantıklı sebepleri olabilir?
- Linux üzerinde çalışan web tasarımcıları: Sayfalarınızı yalnız Firefox, Opera, Epiphany vb. Linux ile uyumlu web tarayıcılarında değil, aynı zamanda makinanızda Windows beslemek zorunda kalmadan IE üzerinde de test edebilirsiniz (ki nerede bir Windows makina görsem, hemen IE'ı açıp web sayfalarımın nasıl gözüktüğünü kontrol eden - akabinde sayfalarımın bu kadar berbat gözüktüğüne inanamayıp olay yerinden hızla uzaklaşan ben: bu seçeneği kendime önermiyorum :))
- Windows üzerinde çalışan web tasarımcıları: Aynı Windows makinada hem IE 6.0 hem de 7.0 çalıştıramayan * web tasarımcıları bu yolla her çeşit IE üzerinde sayfalarını deneme imkanına sahipler! * *
- Veee... Ailesinde öğretmen barındıran, ve bu yüzden Milli Eğitim Bakanlığı'nın tasarım harikası ILSIS web sitesine login olabilmek için makinasında Windows beslemek zorunda kalan geniş kitle * : Annemi geçen sene emekli ettiğimiz için ihtiyaç duyup denemedim. Bu yüzden İlsis Sistemi her ne kadar "Internet Explorer 5.0 ve üzerindeki versiyonları için hazırlanmıştır." dese de yine de Windows üzerinde çalışmayan bir IE ile sorun çıkabilir. *.
Bu adreste kurulum işinin nasıl yapıldığı ayrıntılı olarak anlatılmış. Ama WINE'la * mı yoksa bu yolla mı daha güvenli bir IE'ye sahip olunur, bilemiyorum...
Links for the day
Pınar Yanardağ visited this place (worth it!)
Pınar Yanardağ wants to visit this place
Dün daha önce bahsettiğim gibi Yenice Özgür Yazılım Seminerleri'ndeydik. Yenice Çanakkale'nin merkezden en uzak ilçesi olunca, yol bayağı uzun sürdü. Yılın ilk karını da görme fırsatı yakaladık ;)Seminere geç kaldığımız için, planlananın aksine Pardus semineriyle başladık. Dinleyicilerin seminer sırasında yabancılık çekmemeleri için bir süre Özgür Yazılım felsefesinden ve Linux'dan bahsettim. Sonrasında Pardus'un ortaya çıkış nedenlerinden, nasıl geliştirildiğinden, beraberinde getirdiği yeni yazılımlardan konuştum. Bir de seminerin sonunda planlanmamış bir Beryl şovu çekmek zorunda kaldım - ki seminer boyunca tüm anlattıklarımın haricinde, öğrencilerin öğretim görevlilerine dönüp "Hocam, biz de Pardus istiyoruz! Biz de, biz de!" şeklinde çığırmalarına sebep olan bir olay oldu.
Figen ve Şule ilk seminerlerini verecekleri için bir miktar heyecanlandıysalar da, seminer verirken bu heyecandan eser yok gibiydi. Zaten katılımcılar bilgisayar bilimlerinden olmadıkları için (işletme, muhasebe gibi bölümlerden dinleyiciler vardı) Pardus + Firefox + Openoffice.org'dan oluşan bir paket çok iyi gitti.
Kısacası hem biz, hem de onlar iyi vakit geçirdik. Böylece kendi adıma yılın son seminerini vermiş oldum ;)
Her ne kadar slayt değil, konuşma tabanlı bir seminer olsa da ana hatlardan oluşan seminer notlarına buradan erişebilirsiniz.
Links for the day
Links for the day
Dün INETD kapsamında IBM Linux'da seminerim vardı. Aslında Seminer-CG çalışanı olduğumdan bu tür seminerlere katılımcı sayısını az çok tahmin edebiliyordum, ama dünki seminere gelen katılımcı sayısının çokluğuna bir miktar şaşırdım diyebilirim. Seminer umduğum gibi güzel geçti. Aslında aynı gün olsa da iki seminerden oluşan bir etkinlikti. İlk seminerde Ruby'nin genel özelliklerinden bahsettim ve beraber kod örneklerine baktık. İkinci seminerde de bir kaç basit örnekle GTK ile arayüz tasarlamanın nasıl olduğundan bahsettim ve Glade ve Gecko kullanarak bir web tarayıcısı yaptık *.
İlk kısım 70, ikinci kısım ona nazaran daha insancıl olarak 25 slayttan oluşuyordu. Katılımcılara zafiyet geçirtmeden etkinliği bitirdiğime sevindim :) Kısacası bir günlüğüne İstanbul'a gidip geldiğime değdi.
Birinci seminerin notlarına buradan, GTK ile ilgili seminere buradan ulaşabilirsiniz.
Tabii maraton henüz bitmedi :) Bu Cuma da bizim üniversitemize bağlı Yenice Meslek Yüksek Okulu'nda "Pardus ve Yenilikleri" isimli bir seminer vereceğim. Aslında tek günlük bir özgür yazılım etkinliği olacak. Necdet hoca "Linux nedir? Neden Önemlidir?" diyecek, ardıdan Figen bir Firefox semineri, Şule de Openoffice semineri verecek. Bu kez sadece seminer vereceğimiz öğrencilere faydalı olacağımız için değil, seminer camiasına iki yeni arkadaşı da katacağımız için mutluyuz (kendileri aynı zamanda bilgi işlem'de beraber çalıştığım iş arkadaşlarım). Umarım güzel bir etkinlik olur...
Links for the day
Daha önce "Ruby Advent Calendar" diye bir projeden bahsetmiştim. Proje Aralık ayı başından beri aktif halde ve her gün Ruby ile yazılmış minik betikler/siteler/bazen kütüphaneler yayınlanıyor. Mesela benim en çok işime yarayanı; dün (7 Aralık'taki) yayınlanan kod renklendirme aracı.
Sitenizin ya da blogunuzun css'ine burada yazan kodları yerleştiriyorsunuz, ve kodlamak için yine aynı sayfadaki kutucuğu kullanıyorsunuz. Ve Ruby kodlarınız aşağıdaki gibi renklendirilmiş oluyor (Eskiden bu iş için kodlarımı Lapis Nopaste'e yapıştırıp html kaynağından da renklendirilmiş hallerini çalıyordum ama şimdi bloguma münhasır renklendirmem var :)
def power(x,n)
result = 1
while n.nonzero?
if n.modulo(2).nonzero?
result = result * x
n = n-1
else
x = x*x
n = n/2
end
end
return result
end
Advent Calendar'da daha ne gibi ilginç uygulamalar çıkacak merakla bekliyoruz ;)
Links for the day
Anaokulunu da sayarsak (2+13) yıllık eğitim hayatımda, sevdiğim & eğlendiğim tek ders matematik olmuştur *.
Aslında yeterince cesaretlensem, yüksek lisansımı matematik üzerine yapmak istiyorum (ama matematik bölümünde öğrenim gören birinin aldığı derslerin %90'ını almadığım için şimdilik gözüm korkuyor).
Her neyse. Glumbert'de "A new way to multiply" diye bir vidyoya rastladım. Nette de bir iki haftadır bayağı ilgi gören bir vidyo.
Aslında yeni bir yöntem falan değil, yine bildiğimiz çarpma ama basit bir "eye-hack" de diyebiliriz buna.

Yukarıdan da görebileceğiniz gibi, her rakamı çizgilerle ifade ediyoruz (3 rakamı için 3 çizgi). İki sayıyı birbiriyle çarptığımız noktalar zaten çizgileri kesiştirdiğimiz noktalar olduğundan, klasik çarpma işlemini gerçekleştiriyoruz aslında. Ama bunu, "çizgilerin üzerindeki noktaları sayma" eylemine indirgediğiniz zaman ilginç bir yöntem gibi geliyor.
Metot büyük sayılar için oldukça elverişsiz fakat küçük sayılarda işe yarıyor. Bir de biraz üzerinde uğraşılsa Napier'in Kemikleri'nin yandan yemişi olacak gibi geldi bana :)
Vidyoyu buradan izleyebilirsiniz.
Links for the day
recently listened to:
- Thievery Corporation – The State of the Union
- Basement Jaxx – Raindrops
- U2 – A Day Without Me
- Moby – Stock Radio
- Giovanni Allevi – Come Sei Veramente
- Ludovico Einaudi – Monday
- Ludovico Einaudi – Divenire
- Ludovico Einaudi – UNO
- Ludovico Einaudi – Andare
- Ludovico Einaudi – Svanire
SuprTags
archives
- July 2009
- June 2009
- May 2009
- April 2009
- March 2009
- February 2009
- January 2009
- December 2008
- November 2008
- October 2008
- September 2008
- August 2008
- July 2008
- June 2008
- May 2008
- April 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
- August 2007
- July 2007
- June 2007
- May 2007
- April 2007
- March 2007
- January 2007
- December 2006
- November 2006
- September 2006
- May 2006
sources









