Tek Fotoluk İpucu 135 - Ruby ile Tek Satırda Dosya içi Arama

Geçenlerde notpead++ ile oluşturduğum bir text dosya üzerinde düşünüyordum da...Dosya içerisinde House dizisinde çalan 75 adet şarkının bilgisi vardı. Söyleyenler ve şarkı adları. Sonra aklıma bu dosya içerisinde belli bir metnin geçtiği satırları nasıl bulabilirim sorusu geldi. Örneğin "House dizisinde çalınan şarkılardan hangileri The Rolling Stones grubuna aittir?" Mutlaka komut satırından bazı araçlar ile bu işlem kolayca gerçekleştirilebilir. [Daha fazla]

Ruby Kod Parçacıkları 23 - set,prime,logger,pathname,benchmark,find,zlib Kullanımları

Epey zamandır Ruby notlarımın(özellikle de Amazon'dan getirttiğim kitapların) yüzüne bakmadığımı gördüm de...Pişmanlık hissettim(İtiraf ediyorum bu aralar biraz tembellik yapıyordum) Sonra onunla uğraşmayı özlediğimi fark ettim. Onun sadeliğini, yalın yazımını, gücünü, pratikliğini. Pasımı atmak için bir şeyler araştırmam gerekiyordır. Derken kendimi her zaman ki gibi Google' da Ruby standart kütüphanesi ile ilgili faydalı kod parçalarını ararken buldum. [Daha fazla]

Bir .Net Geliştiricisinin Ruby ile İmtihanı

Yaklaşık 15 yıldır aktif olarak yazılım geliştirme işinde yer alıyorum. Son 4 yıldır ise bir bankanın kurumsal çözümlerinde çalışıyorum. Tüm yazılım hayatım boyunca ağırlıklı olarak .Net platformu üzerinde çalıştım. Zaman ilerledikçe sürekli olarak aynı şeylerle uğraşmamın beni paslandırdığını gördüm. İçimdeki araştırmacı kişiliği uyandıracak, beni tekrardan keyiflendirecek bir şeyler gerekiyordu. Sonuç olarak çok sıkıldığım bir günün devamında "yeni ne öğrenebilirim?" diye araştırmaya karar verdim. Daha önceden Java ile ilgili bir maceram olmuş ve 24 bölümlük bir makale serisi hazırlayabilmiştim. O zamanlar epeyce keyif alıyordum. Bu kez düşünce yapım biraz daha farklıkaştı. Çocuklara nasıl programlama öğretilebilir fikrinden yola çıktım. İlk iş bir Lego yapmaktı ? ve devamı geldi... [Daha fazla]

Ruby Kod Parçacıkları 21 - Basit Web Server Geliştirmek

Web tabanlı çalışan uygulamalar genellikle IIS(Internet Information Services) ve benzeri ortamlar üzerinde barındırılırlar. Aslında IIS basitçe TCP soket haberleşmesi gerçekleştiren bir ürün olarak düşünülebilir. Üzerinde konuşlandırılan kaynaklara olan erişimde ise genellikle HTTP protokolü ve Get, Post vb metodları kullanılır. Gelen taleplere göre uygun servislerin devreye girmesi söz konusudur. [Daha fazla]

Ruby Kod Parçacıkları 19 - SQLite ile Basit Veritabanı İşlemleri

Sanıyorum bir programlama dilini öğrenirken en çok merak edilen konulardan birisi de veritabanı işlemleridir. "Hani bir uygulama yazabilsem de bilgileri veritabanına kayıt edebilsem ve oradan okuyabilsem süper olur" benzeri bir cümleyi eminim hepimiz kurmuşuzdur. Günümüzde geliştirilen uygulamalar mutlak suretle verileri kalıcı olarak saklamaya ihtiyaç duyar. [Daha fazla]

Hamming Distance Algoritmasının Basit Kullanımı

Hamming Distance, Amerikalı Matematikçi Richard Hamming tarafından bulunmuş olan ve kodlama teorisinde geçen vektör bazlı bir karşılaştırma algoritmasıdır(Bu adresten teori hakkında biraz bilgi alabiliriz) Programlama tarafından baktığımızda çoğunlukla eşit uzunluktaki içeriklerin benzerliklerine ilişkin bir mesafe ölçüsünün bulunmasında kullanılır. Bu sayede bir metnin diğerine dönüştürülebilmesi için kaç adımlık değişime ihitiyaç duyulduğu da hesaplanabilir. Ya da benzerliğin ne kadarlık bir değere denk geldiği anlaşılabilir. Hata tespiti ve düzeltilmesi, grafik dosyaları üzerinden şekil eşleştirmelerinin(Shape Recognation) yapılması gibi hesaplamalarda kullanılmaktadır. Aslında örnekler ile konuyu daha iyi anlayabiliriz. Basit düşünmeye çalışalım ve aşağıdaki gibi bir kaç kelime çiftini ele alalım. [Daha fazla]

Ruby Kod Parçacıkları 18 - Çeşitli Kırıntılar

Takip edenlerin bildiği üzere bir süredir Ruby programlama dili üzerinde çalışmaktayım. İlerledikçe öğrendiklerimi kod parçacıkları halinde paylaşmaya çalışıyorum. Ne kadar faydalı oluyor bilemiyorum ama arada sırada takip ettiğim kaynaklardan geriye dönerek acaba atladığım bir şeyler var mıdır diye de bakıyorum. İşte bu düşünceler ışığında çıktım yola ve gerçekten de atladığım bir çok şey fark ettim. Bu kod parçacığında kısaca bu konulara değinmeye çalışacağım. Önce kod parçamızı ele alalım. [Daha fazla]

Ruby Kod Parçacıkları 17 - (YAML ve Binary Serileştirme)

Bir önceki kod parçacığında geliştirici tanımlı bir sınıf koleksiyonunun JSON formatından nasıl serileştirilebileceğini incelemiştik. Ruby dilinde dahili(built-in) olarak gelen serileştirme kütüphaneleri de vardır(YAML ve Binary) Tahmin edeceğiniz üzere duruma göre bu serileştirme çeşitlerinden birisinin kullanılması tercih edilebilir. Aşağıdaki örnek kod parçacığında bu biçimdeki serileştirme ve ters-serileştirme işlemlerinin nasıl yapıldığı ele alınmaktadır. [Daha fazla]

Ruby Kod Parçacıkları 16 - (JSON Serileştirme)

Aslında bu kod parçasında temel dosya giriş çıkış işlemlerini(IO operasyonları diyelim) ele almayı planlamıştım. Ancak konuyu araştırırken dosya içerisine ne yazabilirim sorusuna denk geldiğimde, bir nesne koleksiyonunu aktarmanın uygun olacağını düşündüm. Hal böyle olunca ortaya "hangi fortmatta?" sorusu çıktı. [Daha fazla]

Ruby Kod Parçacıkları - 15 (Mixins)

Ruby tam anlamıyla nesne yönelimli(Object Oriented) bir dildir. Bunu her fırsatta vurguluyoruz. Bu nedenle bünyesinde temel OOP özelliklerini taşır. Kalıtım(Inheritance) bunlardan birisidir. Ancak Ruby dilinde bir sınıfın aynı seviyede birden fazla sınıftan türemesine izin verilmez(Single Inheritance söz konusudur). [Daha fazla]

Ruby Kod Parçacıkları - 14 (Module Kullanımı)

Module’leri sınıf değişkenleri, sınıflar, metodlar ve sabitleri(Constant) içerisinde barındırabilen isim alanları(namespace) olarak düşünebiliriz. Özellikle projelerin büyüdüğü durumlarda kullanılan tip veya metodların çakışmasını engellemek, kod tekrarlarının önüne geçmek(DRY-Don'r Repeat Yourself), bakım maliyetlerini azaltmak ve özellikle aynı iş alanına(Domain) özgü operasyonları anlamlı isim alanlarında konuşlandırabilmek maksadıyla tercih edilirler. [Daha fazla]

Ruby Kod Parçacıkları - 13 (Exception Handling)

Malumunuz hata yönetimi(Error Handling) oldukça önemli bir konu. Bu amaçla .Net/Java gibi çalışma zamanı motoru olan ortamlarda genellikle Exception yönetim mekanizmaları kullanılmakta. Benzer durum Ruby programlama dili için de söz konusu. Aşağıdaki kod parçacığında hata yönetiminin Ruby tarafında nasıl ele alındığını temel anlamda incelemeye çalışıyoruz(Aslında beni benden alan rescue, retry ve ensure kullanımlarıdır. Söylemeden geçmek istemedim.) [Daha fazla]

Ruby Kod Parçacıkları - 12 (Lambda)

Daha önceki kod parçacıklarımızda Block ve Proc kavramlarına değinmiştik. Benzer kavramlardan üçüncüsü de Lambda' dır. Hatırlayacağınız gibi kod parçalarını Block şeklinde tanımlayıp metodlara parametre olarak geçirebiliyorduk. Bununla birlikte tekrardan kullanılabilirliğin öne çıktığı ve kod parçasının bir değişken olarak kullanılmasının istendiği durumlarda Proc örneklerinden yararlanıyoruz. [Daha fazla]

Ruby Kod Parçacıkları - 11 (Procs)

Bir önceki kod parçacığımızda Ruby dilinin önemli özelliklerinden birisi olan Block kavramına değinmiştik. Bu kod parçacığında ise Proc kullanımını anlamaya çalışacağız. Kod parçalarını metodlara taşımanın yollarından sadece birisi Block' lardır. Ancak block' lar bir nesne olarak ifade edilemezler. Oysa ki Ruby dilinde her şeyin bir nesne olduğu öne sürülür. İşte bu noktada devreye Proc ve Lambda enstrümanları girer. [Daha fazla]

Ruby Kod Parçacıkları - 9 (Operator Overloading)

Neredeyse her programlama dilinin öğrenilirken çalışana sıkıcı gelen bölümleri muhakkak vardır. Sanıyorum o dildeki operatörler bunların başında gelir. Ancak nesne yönelimli bir dil öğreniyorsak, kullanıcı tanımlı tipler için operatörlerin yeniden programlanması gerektiğini de er geç fark ederiz. Bu nedenle operatorlerin kendi tiplerimiz(User Defined Class) olması halinde yeniden nasıl yükleneceğini bilmemiz gerekir. [Daha fazla]

Ruby Kod Parçacıkları - 8 (Kalıtım/Inheritance)

Ruby, nesne yönelimli(Object Oriented) bir dil olduğu için kalıtım(Inheritance) ilkesi karakteristiklerini de taşımaktadır. En temel haliyle var olan bir tipin özelliklerini ve fonksiyonelliklerini alt sınıflara taşıyabildiğimiz(alt sınıfta kullanabildiğimiz ve hatta gerekirse ezebildiğimiz) kalıtım ilkesinin Ruby tarafındaki uygulanış biçimi oldukça kolaydır. Gelin basit bir kod parçacığı ile konuyu anlamaya çalışalım. [Daha fazla]

Ruby Kod Parçacıkları - 7 (Object Method, Class Method, Public, Private, Protected)

Ruby sınıflarında farklı amaçlarla kullanılan metodlar mevcuttur. Serimiz boyunca pek çok çeşidini kullandık. Nesne örneklerini oluşturmak için initialize metodundan, sınıf varlığını String olarak yazmak için ezdiğimiz(override) to_s metodundan, sınıfa ait durum bilgisini taşıyan nitelikler(Attributes) için accessor' lardan vb... [Daha fazla]

Ruby Kod Parçacıkları - 6 (Sınıflarda Accessor, Setter ve Attribute Kullanımları)

Nesne yönelimli dillerde sınıfların birer varlık(Entity) olarak düşünüldüğüne sıklıkla şahit oluruz. Bu sayede bir Domain' e özgü gerçek dünya varlıklarının tasarlanması ve örneklenerek kullanılması mümkün hale gelir. Üstelik Domain içinde dolaşımda olacak anlamlı nesneler ortaya çıkar. Çok doğal olarak her bir varlığın karakteristik özellikleri bulunur. Nitelik(attribute) olarak da düşünebileceğimiz bu özellikler ilgili varlığın çalışma zamanı(Runtime) durumu hakkında bilgiler taşır. Aslında .Netçi gözüyle bakıldığında sınıf ve özelliklerinden bahsettiğimizi anlamışsınızdır. [Daha fazla]

Ruby Kod Parçacıkları - 5 (Sınıf Kavramına Giriş)

Bilindiği üzere Ruby nesne yönelimli bir programlama dilidir. Bu yüzden Ruby dilinde her şey bir nesne olarak düşünülür. Dolayısıyla OOP dillerin Kalıtım(Inheritance), Encapsulation(Kapsülleme), Çok Biçimlilik(Polymorphism) gibi temel özelliklerini bünyesinde barındırır. Elbette en küçük yapı taşı sınıflardır(Class). İzleyen kod parçacığında basit olarak bir sınıfın nasıl tanımlandığına yer verilmektedir. Bu anlamda değişken türlerinden(Instance,Class ve Global Variable), sınıf yapıcılarından(initialize), nesne örnekleme operasyonlarından(new), standart sınıf içi metod tanımlamalarından(def) ve metod ezme(overriding) gibi işlemlerden kısaca bahsedilmektedir. [Daha fazla]

Ruby Kod Parçacıkları - 3 (Range Kullanımı)

Range sınıfı ile başlangıç ve bitiş değerleri belli olan aralıklar tanımlanabilir. Bu aralığa ait değerler sayısal veya metinsel olabileceği gibi kullanıcı tanımlı sınıf örnekleri de olabilir(Bu benim için de henüz ileri seviye bir konu olduğundan ilerleyen günlerde değinmeye çalışacağım) Gelin bu aralıkların Ruby programlama dilinde nasıl kullanıldığına kısaca bakalım. [Daha fazla]

Ruby Kod Parçacıkları - 2 (Hashes)

Ruby programlama dilinde de veri yapıları(Data Structures) oluşturmak için kullanılan tiper vardır. Dictionary benzeri koleksiyon olarak kabul edebileceğimiz Hash sınıfı bunlardan birisidir. Benzersiz anahtar(key) ve değer(value) çiftlerinden oluşan Hash nesne örneklerinin kullanımı oldukça kolaydır. [Daha fazla]