Nedir?

Pınar Yanardağ'ın Özgür Yazılım, Linux, Ruby, Pardus, ıvır zıvır günlüğü...

Ruby Multipled By Agile & RoR Podcast’ı

June 4th, 2007 by PINguAR

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:

Linux, Ruby, WIC, Java, Gezegen altında kategorilenmiş | 5 Yorum »

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

January 11th, 2007 by PINguAR

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

Linux, Ruby, Gezegen altında kategorilenmiş | 7 Yorum »

Ruby Semineri ve bir parantezin hayatımdan götürdüğü dakikalar

December 17th, 2006 by PINguAR

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…

Linux, Ruby, Seminerler, Gezegen altında kategorilenmiş | 7 Yorum »

Ruby Advent Calendar v.2

December 8th, 2006 by PINguAR

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, Programlama altında kategorilenmiş | Yorum Yok »

Ruby & Symbian

November 19th, 2006 by PINguAR

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 altında kategorilenmiş | 2 Yorum »

Ruby Advent Calendar, Ruby #12 @ TIOBE

November 10th, 2006 by PINguAR

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

Linux, Ruby, Programlama altında kategorilenmiş | 12 Yorum »

Ruby & Sürrealizm

November 8th, 2006 by PINguAR

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

Cevabı vidyonun sonunda :)

Ruby, Biraz da Gülelim =) altında kategorilenmiş | Yorum Yok »

Ruby ile Sıralama Algoritmaları Yazmak

November 7th, 2006 by PINguAR

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.

Ruby altında kategorilenmiş | 5 Yorum »

It’s all about Ruby baby!

October 13th, 2006 by PINguAR

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.. * *

Ruby, Gezegen altında kategorilenmiş | 12 Yorum »

Özgür Yazılım ve Açık Kaynak Günleri’nin Ardından

February 26th, 2006 by PINguAR

Bir kaç gündür, Özgür Yazılım ve Açık Kaynak Günleri kapsamında, Bilgi Üniversitesi’nde bir seminer vermek için İstanbul’daydım. Seminerin umduğum gibi geçmesi ve katılımın yoğun olması beni sevindirdi tabii ki ;) Notları (.sxi) buradan, pdf halini de buradan alabilirsiniz. Notları kısa süre içinde, burada da bulabileceksiniz.

Etkinliğin ilk gününe, daha önce de bahsettiğim, “penguen meraklısı” dayımı da götürdüm. Özellikle Ian Murdock’ın seminerinden oldukça yararlandığını söyledi, biz de mutlu olduk tabii ;) Ama aynı şeyi, benim sunumumun olduğu ikinci gün, “ben de! ben de gelmek istiyorum!” şeklinde çığırmalarını göz ardı edemeyerek yanıma aldığım sevgili ananeciğim için söyleyemeyeceğim :)

Kısaca, herşey güzeldi. Üstelik yıllardır göremediğim İstanbul’daki ilkokulumu da bu vesileyle görmek beni çok mutlu etti. Seneye, yine katılımcı ya da konuşmacı olarak orada bulunmaktan mutluluk duyacağım.

Ruby, Guncel, Seminerler, Gezegen altında kategorilenmiş | 6 Yorum »

« Önceki Yazılar


En Popüler Yazılar

Kategoriler

Son Yazılanlar

Arşiv

İstatistikler

  • Şu an Pınar'ın Linux Günlüğü'nde 93 yazı ve
  • 1074 yorum var.
  • Ziyaretçiler

    • 3 <- şu anki çevrimiçi kişi sayısı
    • 135 <- aynı anda maksimum çevrimiçi kişi sayısı
    • 344911 <- toplam ziyaretçi

    Pardus

    Pardus... Özgürlük İçin...

    Lisans

    Creative Commons License

    Bu günlük Creative Commons ile lisanslanmıştır.