PINguAR.org

Archive for the ‘Ruby’ Category


Ruby Multipled By Agile & RoR Podcast’ı

Jun 4, 2007 Author: PINguAR | Filed under: Linux, Ruby, WIC, Java, Gezegen

Uykusuzluk insanın hayal gücünde ve görme yetisinde oyunlar oynayabiliyor. Aşağıdaki fotoğrafa ilk baktığımda, Matz’ın (en sağdaki) yerlere kadar uzanan kırmızı bir pelerin giyen, göğsünün ortasında kocaman bir M yazan bir süperkahraman olduğunu falan zannettim :)

Herneyse, harika bir vidyo: Kenji Hiranabe, Shintaro Kakutani, ve bizim Matz C++, Java ve Ruby’yi irdeliyorlar (ingilizce altyazı mevcut).

Diğer güzellik de Rails Podcast’inin yeni bölümü. Çoğu devchix‘ten olan bağyanlar ile bilişim ve programlama dünyasında kadınlar hakkında sohbet etmişler:

Daha etkin bir geliştirici olmanın ip uçları…

Jan 11, 2007 Author: PINguAR | Filed under: Linux, Ruby, Gezegen

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 ;)

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…

Ruby Advent Calendar v.2

Dec 8, 2006 Author: PINguAR | Filed under: Ruby, Programlama

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 ;)

Ruby & Symbian

Nov 19, 2006 Author: PINguAR | Filed under: Ruby

Birileri Ruby & Cep telefonları ile ilgili uktemi duymuş olacak ki, Ruby’nin Symbian üzerinde çalışan versiyonu resmi olarak duyuruldu. Aslında daha önce Ruby’yi Symbian OS’a port etmeyle ilgili planlar yapıldığını duymuştum, ama bugün karşıma böyle bir haber çıkınca sevindim açıkçası :)

Tabii ki GPL ile lisanslanmış ve S60 ve UIQ için POC kütüphanesi aşağıdaki özellikleri sunuyor:

  • Rendering
  • Messaging
  • Persistence

Symbian paketini buradan indirebilirsiniz.

Not: Aslında bir süre önce Symbian’ı kurcalamayı planlamış, araya bambaşka işlerin girmesiyle * * bir türlü yeterince ilgilenememiştim. Bir göz atmak için iyi bir fırsat olabilir.

Ruby Advent Calendar, Ruby #12 @ TIOBE

Nov 10, 2006 Author: PINguAR | Filed under: Linux, Ruby, Programlama

Ruby Inside tayfası Ruby Advent Calendar diye bir proje duyurdu. Projenin ayrıntıları henüz belli değil, ama kabataslakça; Ruby ile ilgili bir takvim projesi diyebiliriz. Aralık ayında başvuruya açılacak projenin Rss adresi burada. Ayrıca eklemek istediğiniz herhangi bir tarih varsa, buraya e-posta ile bildirebiliyorsunuz: rubyinside [et-ot] bigbold.com

Bir süre önce, Ruby’in de artık mainstream diller arasına girdiğinden bahsetmiştim. Ruby “ağır ama emin adımlarla ilerleme” sıfatının hakkını vererek bu ay 12. sıraya yükseldi.

Bakalım 1. sırayı kapabilecek mi? (Ve fekat dürüst olmak gerekirse… Ortada her cep telefonunda fink atan bir Java * *, ortadan kaldırdığımızda dünyadaki uygulamaların yarısından fazlasının duracağı bir Perl, ve aslında Ruby ile karşılaştırmanın anlamsız olacağı bir C varken * pek mümkün değil bu dileğim…)

Ruby & Sürrealizm

Nov 8, 2006 Author: PINguAR | Filed under: Ruby, Biraz da Gülelim =)

Eski programlama kitaplarını nereye göndermeli acaba?

Cevabı vidyonun sonunda :)

Ruby ile Sıralama Algoritmaları Yazmak

Nov 7, 2006 Author: PINguAR | Filed under: Ruby

Bilgisayar alanında okuyan her öğrenci, bir kere bile olsa; sıralama algoritmalarıyla uğraşmanın, bazen ne kadar vahim bir hal aldığını bilir. Özellikle vize/finalde, türlü türlü sıralama algoritmasını performansına, zamanına, türlü kriterine göre sıralamaya çalışmak, bir yandan kodlamayı akla getirmek vs.vs… Pek de keyifli bir iş değil aslında; en son 2 sene önce C finalinde sadece Selection Sort için bir sayfa kod yazan bir insan olarak, aşağıdaki Ruby kodlarını sunmaktan gurur duyuyorum efem :)

Selection Sort:

a = [1,5,54,1,543,5,431,541,54,5,43]

 
def sort(array)
  def min(array, from)
    min_val = array[from..-1].min

    min_idx = array[from..-1].index(min_val) + from
    return min_idx
  end

 
  array.each_with_index { |v, i|
    min_idx = min(array, i)

    tmp = array[i]

    array[i] = array[min_idx]
    array[min_idx] = tmp
  }
  array

end
 
p sort(a)

Quick Sort:

a = [60,5,54,1,543,5,431,541,54,5,43]

 
def sort(f, array)
  return [] if array.empty?
  pivot  = array[0]

  before = sort(f, array[1..-1].delete_if { |x| not f.call(x, pivot) })

  after  = sort(f, array[1..-1].delete_if { |x| f.call(x, pivot) })
  return (before << pivot).concat(after)

end
 
p sort(Proc.new { |x, pivot| x < pivot }, a)

Bubble Sort:

a = [1,5,54,1,543,5,431,541,54,5,43]

 
def sort(array)
  i = 0
  while (i < array.size)

    j = array.size - 1
    while (i < j)
      if array[j] < array[j - 1]

        tmp = array[j]
        array[j] = array[j - 1]
        array[j - 1] = tmp
      end
      j -= 1

    end
    i += 1
  end
 
  return array
end
 
p sort(a)

Diğer algoritmalar için buraya bakabilirsiniz.

It’s all about Ruby baby!

Oct 13, 2006 Author: PINguAR | Filed under: Ruby, Gezegen

Ruby 1.9 ile gelecek yeniliklere hep beraber göz atalım:

String

hello".bytes.to_a                               # => [104, 101, 108, 108, 111]

Introspection

NilClass.instance_methods(false)  # => [:to_a, :inspect, :yield, :to_f, :| , :to_s, :&, :to_i, :^, :nil?]

Syntax

   def m(a, b=nil, *c, d)
     [a,b,c,d]
   end
   m(1,2)                                         # => [1, nil, [], 2]

… Tamamı için Changes in Ruby 1.9.

Not #1: Ruby sonunda mainstream diller arasına girdi. Meşhur TIOBE istatistiklerine göre 13. sıradan A listesine girmeyi başararak en popüler 13. programlama dili oldu. İlgili link: TIOBE İstatistikleri, İlgisiz link: Jobtrends: Ruby Programmer

Not #2: Uzun süredir modernlikten uzak tasarımıyla eleştirdiğimiz Ruby‘nin web sitesi yeni bir görünüme kavuştu. Tek kelimeyle harika olmuş! * *

Not #3: Yazın hazırladığım Ruby belgelerini doğru dürüst bir dizgiye sokup yayınlamam gerek. Buraya da yazayım da geri dönüşüm olmasın. Ruby & GTK, Ruby & SNMP ve bir de (mysql desteği eklenecek, sadece Postgresql versiyonu var şimdilik) Jabber Sunucusu NASIL. Eğer tembellik yapmayıp bir kaç saatimi verirsem yakında sizlerle olacaklar efeem. :)

Not #4: Blogger adam gibi tag&rss desteği verene kadar böyle ayda bir haber postası modunda gider gibi görünüyor girdiler.. * *

Son zamanlarda, Matz’a harakiri yaptıracak cinsten olaylara karıştım… Evet.. İtiraf ediyorum; son bir kaç zamandır, Ruby’yi aldatıyorum! Üstelik hem Java, hem de Python ile!

Zaten, hayatım hep ironik olaylarla çerçevelenmiştir, ama böylesi hoş oldu açıkçası :) Zaten bu iki dili de biraz kurcalamak istiyordum daha önceden. Ama fırsat olmamıştı hiç. Artık var; bendenizin Perşembe & Cuma; Python; Çarşamba & Cuma da Java dersi var.

Şimdilik her ikisiyle de iyi gidiyor, ancak en büyük vicdan azabını eve gelip Ruby kodlarken hissediyorum :)

Neyse, bir süre sonra, Python ve Java programcılarının Ruby’le, Ruby’cilerin de diğerleriyle derdi neymiş, anlayacağız galiba…

Sonradan gelen edit:

moon@debian:~$ free -m

total used free shared buffers cached

Mem: 250 248 2 0 1 45

-/+ buffers/cache: 202 48

Swap: 729 233 495

İnsaf diyorum. Alt tarafı Eclipse’de iki üç basit Java kodu yazıyorum. Benim sistem mi görmeyeli iyice kaplumbağa olmuş yoksa Eclipse kullanmak için bir canavara mı sahip olmak gerek?