Nedir?

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

Kaptan 3.0 Ekran Görüntüleri

May 20th, 2008 by PINguAR

Mmmhh, aylar öncesinden (Koray beni öldürecek :) ) koymam gerekiyordu bunları, ama Gökhan grafikleri tamamlayınca daha güzel oldu =) Tekrarlama olmasın, ilk ekran burada, gerisi diğer blog‘da.

Linux, Pardus, Python, Gezegen altında kategorilenmiş | 8 Yorum »

Yeniyıl $ekeri: Nasıl Sürdürülemez Kod Yazılır?

December 30th, 2007 by PINguAR

Bu belgeden daha önce de bahsetmiştim. How to Write Unmaintainable Code, Roedy Green tarafından yazılmış, maintanence programcılarına nasıl daha güzel işkence çektirilebileceğine dair ipuçları veren, oldukça eğlenceli bir makale.

Aslında bu belgeyi Eylül ayında çevirmiş, ama bir türlü aklıma takılan bir iki yeri rötuşlayamamıştım. Az önce tekrar aklıma geldi, en azından 2008′e girmeden bir köşeye koyayım dedim :) (dikkat! hala eksik/hatalı kısımlar olabilir.)

Makaleye buradan ulaşabilirsiniz.

Linux, Pardus, Belgelendirme, Gezegen, Programlama altında kategorilenmiş | 8 Yorum »

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 »

« Ö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

    • 4 <- şu anki çevrimiçi kişi sayısı
    • 34 <- aynı anda maksimum çevrimiçi kişi sayısı
    • 362264 <- toplam ziyaretçi

    Pardus

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

    Lisans

    Creative Commons License

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