Ruby Tarafından Redis(Docker Bazlı) Veritabanı ile Konuşmak

Nihayet Ahch-To(MacOS Mojave - Intel Core i5 1.4Ghz, 4 Gb 1600 Mhz DDR3) üzerinde ki ilk çalışmamı gerçekleştirebildim. 2020 yılı için planlarım arasında yer alan kendimi yetiştirme turları kapsamında çıktığım bu ilk macerada epeydir eğilmediğim Ruby kodları ile tekrar bir aradayım. Bu ilk maceradaki amacım Ruby kodlama ile docker container üzerinde host edilmiş bir Redis veritabanında basit işlemler yapabilmek. [Daha fazla]

Bir Ruby Uygulamasını Google Cloud Platform Üzerine Taşımak

Ben bu Cloud platformlarını çok tuttum. Gerek Azure, gerek AWS, gerek Google Cloud Platform...Hepsi çok çekici duruyor. Benim ilgimi çeken şey onları araştırırken özellikle west-world dünyasında yazılmış bir programın ilgili platform üzerinde konuşlandırılması ve yürütülebilmesi. Ağırlıklı olarak REST tipinden servis uygulamalarını taşımaya çalışıyorum. Bu seferki hedefimse rastgele bir sözü sunan ruby ile yazılmış bir REST servisinin Google Cloud Platform'a taşınması ve oradan kullanılabilmesi. İşlemlerime başlamadan önce Google Cloud Platform üzerinden geçerli bir ödeme seçeneğinimizin olması gerekiyor. Yani bir kredi kartı bilgimizi tanımlamış olmalıyız. Bir ablam olduğu için çok şanslıyım :) Sağolsun bu proje için sanal kredi kartını kullanmama izin verdi. Gelin adım adım ilerleyelim. [Daha fazla]

Ruby Kod Parçacıkları 34 - Fiber ve Eş Zamanlı Programlama

Eş zamanlı programlanın farklı dillerde veya çatılarda farklı uygulanma şekilleri olabiliyor. Esas itibariyle genel amaç eş zamanlı olarak birden fazla işin gerçekleştirilmesini sağlayabilmek. Bu noktada en zorlayıcı noktalardan birisi işlemcinin ve işletim sisteminin bu çalışma taleplerine olan anlık tepkilerinin yönetilmesi. Neredeyse pek çok programlama ortamında Thread'ler ile karşılaşıyoruz. Ruby tarafında da böyle bir yapı mevcut ama bunun dışında Fiber adı verilen farklı bir tip daha var. [Daha fazla]

Ruby Kod Parçacıkları 34 - Struct ve OpenStruct

Bir süredir tek günlük bir Ruby eğitimine hazırlanmaktayım. İşlerden çok vakit kalmasa da önceki notlarımı ve farklı kaynakları takip ederek bir içerik oluşturmaya çalışıyorum. Konular üzerinden geçerken struct ve openstruct kavramlarına da rastladım. Struct aslında Ruby'nin built-in sınıflarından birisi. Temel olarak bir sınıf tanımı yapmadan nitelik barındıran tip kullanımına olanak sağlıyor diyebiliriz. Aşağıdaki kod parçasını göz önüne alalım. [Daha fazla]

Ruby Kod Parçacıkları 32 - Singleton

Ruby'nin oldukça geniş bir program kütüphanesi bulunuyor. Fırsat buldukça bazılarını incelemeye çalışıyorum. Geçtiğimiz günlerde Singleton isimli bir modüle rastladım. Kısaca tasarım kalıplarından(Design Patterns) olan Singleton deseninin kolayca uygulanmasını sağlıyor. [Daha fazla]

Duck Typing Nedir?

Son bir yıldır Ruby ve Python gibi script diller üzerinde araştırmalar yapıyor. Daha çok bu dilleri öğrenme, anlama gayretindeyim. En azından orta seviye bilgi sahibi olmak benim için yeterli. [Daha fazla]

Ruby Kod Parçacıkları 31 - Kendi gem Paketimizi Hazırlamak

Bildiğiniz gibi günümüz popüler programlama dillerinin çoğunun internet üzerinden ulaşılabilen paket destekleri mevcut. Özellikle açık kaynak tabanlı ürünlerde önem verilen bir konu olduğu ortada. Yazılımcıların birbirlerinin kullanımına açtığı bu paketler Ruby tarafında da mevcut ve gem olarak adlandırılmakta. Hatta şu adresten bir çok değerli mücehvere ulaşabilir kendi paketlerinizi de yükleyebilirsiniz. Peki kendi gem paketlerimizi en basit haliyle nasıl yazabiliriz? Hatta yazdığımız bir gem'i herkesin kullanımına nasıl açabiliriz? Gelin bu konuyu kısaca incelemeye çalışalım. [Daha fazla]

Ruby Kod Parçacıkları 30 - Programın Çalışma Zamanını İzlemek

Diyelim ki geliştirdiğimiz kodların çalışma zamanındaki işleyişlerini izlemek istiyoruz. Sırasıyla hangi nesneler örnekleniyor, çağırılan metodlar ve varsa sonuçları hangi aşamada icra ediliyor, devreye giren C veya block çağrıları bulunuyor mu? Bu gibi sorular aslında bir uygulamayı Monitor etmek olarak da adlandırılmakta. Büyük kod parçalarında işleyiş sıralarını takip etmek ve olası istisna durumlarında kodun hangi aşamada kalmış olduğunu görmek açısından değerli bir konu. Peki Ruby kodlarının çalışma zamanı işleyişlerini nasıl izleyebiliriz. Konu ile ilgili bir çok gem veya API olsa da gömülü olarak gelen TracePoint sınıfı bize basit anlamda izleme kabiliyetleri sunmakta. Aşağıdaki örnek kod parçasını bu anlamda ele alabiliriz. [Daha fazla]

Ruby Kod Parçacıkları 29 - Kod Yazan Kodlar

Ruby programlama dilinin öne çıkan özellikleri arasında dinamiklik ve meta programlama yetenekleri de yer almaktadır. Aslında işin özeti kod yazan kodlardır diyebiliriz. Ruby yorumlamalı bir dildir ve doğal olarak her şey çalışma zamanında icra edilmektedir. Ancak bazı senaryolarda metinsel olarak gelen bir içeriğin kod parçası şeklinde değerlendirilmesi ve çalışma zamanında yürütülmesi istenebilir. Hatta çalışan kod üzerinde değişiklikler yapılabilmesi de belli ölçülerde mümkündür. Konu pek tabii benim burada anlatacağım kadar basit değil. Örneğin Amazon'da bu konu üzerine yazılmış kitaplar bulabilirsiniz. Bu yazımızda kodu çalışma zamanında üretmek veya çalışan kodu manipule etmek için yapılabileceklerden bir kaçına değinmeye çalışacağız. [Daha fazla]

Ruby Kod Parçacıkları 28 - Multithreading ve Mutex Kullanımı

Ruby Kod Parçacıkları serimizin bir önceki bölümünde çoklu iş parçacıklarının(Multithreading) nasıl yazılabileceğini incelemeye başlamıştık. Başrol oyuncumuz olan Thread sınıfının kullanımını gördük. Lakin birden fazla iş parçacığının ele alındığı senaryolarda dikkat edilmesi gereken önemli konulardan birisi de ortak veriler üzerinde işlemler yapıldığında ortaya çıkmaktadır. Eş zamanlı olarak çalışan iş parçacıkları bazı durumlarda verinin tutarlılığının bozulmasına neden olabilir. Nitekim n sayıda iş parçacığının farklı anlarda aynı veri üzerinde işlem yapması söz konusudur. Birbirlerinin işlerini kesebilirler. [Daha fazla]

Tek Fotoluk İpucu 147 - Port Dinlemek

Diyelim ki bir sunucu üzerinde tanımlı portların anlık durumları hakkında bilgi sahibi olmak istiyorsunuz (Örneğin sunucuda SQL Server yüklü ise varsayılan 1433 portu açık mı veya ftp portu cevap verir konumda mı vb) Ruby dilinde bu tip bir işlevselliği gerçekleştirmek son derece basit. Tek yapmamız gereken makine adı ve port bilgisini kullanmak. Nasıl mı? Aynen aşağıdaki fotoğrafta olduğu gibi. [Daha fazla]

Karabük Üniversitesi Bilişim Günleri 2016

Kısmet olursa 7 Aralık günü Karabük Üniversitesi Bilişim Teknolojileri Kulübü'nün düzenlediği etkinlikte Ruby konulu bir sunum yapacağım. Uzun süredir amatör olarak ilgilendiğim Ruby programlama dilini değerli meslektaşlarıma tanıtmaya gayret edeceğim. İki gün sürecek etkinlikler boyunca birbirinden değerli konuşmacıların sunumları da olacak. [Daha fazla]

Ruby Kod Parçacıkları 27 - Hello Multithreading

Multithreading, programlamanın zor konularından birisidir. Aslında amaç işlemciye aynı andan birden fazla iş yaptırabilmek ya da bir işi parçalara bölerek eş zamanlı olarak yürütebilmektir. İşlemcinin bu farklı iş parçacıkları(Thread) arasında kısa sürelerde geçişler yapması sonucu istenen sonuçlara daha çabuk ulaşılması sağlanır. Bu, performans gerektiren bazı vakalarda oldukça önemlidir. Büyük veri kümelerinde arama yapan algoritmalar, yüksek boyutlu video görüntülerinin render eden programla, çeşitli matematik problemleri, oyun programlama ve daha pek çok alanda çoklu iş parçacığı tekniklerine başvurulur. [Daha fazla]

Ruby Kod Parçacıkları 26 - Eğlenerek Binary Dosya Okumak

Vakit buldukça Ruby programlama dili ile ilgili bir şeyler yapmaya çalışıyorum. Halen daha dilin kabiliyetlerini tanıma aşamasındayım. Geçtiğimiz günlerde de Ruby Cookbook kitabından binary dosyalar üzerinde yapılan işlemlere ait örnekleri inceliyordum. Hoşuma giden uygulamalardan birisi de MP3 dosyalarına ait Tag bilgilerinin elde edilmesiydi. Gerçek hayat örneği olduğundan benim için daha öğretici idi. Örnekleri inceledim ve kendime göre farklılaştırarak basit bir kod parçası oluşturmaya çalıştım. [Daha fazla]

Ruby Kod Parçacıkları 25 - Unit Test Yazmak

İyi yazılım geliştirmenin olmazsa olmaz parçalarından birisi de birim testleridir(Unit Tests) Tahmin edileceği üzere Test Driven Development denildiğinde(aklımızda hemen Red Green Blue - Fail, Fix, Refactoring oluşmalı) birim testleri ön plana çıkmaktadır. Pek çok programlama ortamında birim testler için hazır kütüphaneler yer alır. Ruby dilinde ise standart kütüpanede yer alan Test::Unit modülü kullanılmaktadır. Testlere dahil edilecek savlar(assert diyelim) oldukça geniştir. assert, assert_not_equal, assert_nil, assert_respond_to, assert_raise ve benzeri fonksiyonellikler söz konusudur (Kullanılabilecek savların listesine şuradan bakabilirsiniz) Aşağıdaki kod parçasında basit bir test düzeneğine yer verilmiştir. [Daha fazla]

Ruby Kod Parçacıkları 24 - Binary Tree ve Morse Kodları

Geçtiğimiz günlerde çalışma arkadaşımla aramızda gelişen teknolojiler üzerine bir takım konuşmalar geçti. Amazon Alexa'dır, Facebook'un Face Recognation teknolojileridir, Arduino'dur, Drone'lardır vs derken OCR konusuna da değindik. Bükük duran bir kağıdın fotoğrafını çeken uygulamanın, kağıt üzerindeki şekli düz bir biçimde algılayabilidiğini, bunu yapmak içinse matematik'teki Laplace denklemleri ve Fourier serilerine başvurduğunu öğrendik. Bir Matematik Mühendisi olarak bu dersleri hep teorik olarak okumuştum. Tabii o zamanlarda bu tip denklemlerin gerçek hayat uygulamalarını pek görememiştim. Bu yüzden çoğu teori soyut olarak kalmıştı. [Daha fazla]

Tek Fotoluk İpucu 141 - Dosyadan Rastgele Satır Çekmek

Elinizde N sayıda şarkı adının kayıtlı olduğu fiziki bir dosya olduğunu düşünün. Amacımız ise bu dosya içerisinden rastgele şarkılar çekmek. Ancak bunu yaparken ilgili dosyanın tamamını belleğe açmak istemiyorsunuz. Nitekim dosyayı okuma modunda açıp readlines gibi bir metod ile tüm içeriğ okuduktan sonra içinden rastgele bir satırı seçme yolunu tercih edebilirsiniz. Ama bu büyük boyutlu bir dosyanın tamamen belleğe yüklenmesine de neden olacaktır. Performans ve hız açısından farklı bir şey yapılabilmelidir. Örneğin belleğe sadece o anki satırı okuyup ileri yönlü hareket edecek bir iterasyon kodu geliştirilebilir. Peki Ruby'de bunun için nasıl bir yol izlerdiniz? Aşağıdaki fotoğraftaki gibi olabilir mi? [Daha fazla]

Tek Fotoluk İpucu 140 - Distributed Ruby(dRuby)

Eğitmenlik yaptığım dönemlerde .Net'in en zor alanlarından birisi de Remoting idi. Konu aslında Client-Server mantığına uygun olacak şekilde farklı process'ler arasında veri alışverişinin yapılmasından ibaretti ancak uygulaması web servis geliştirmek kadar kolay olmuyordu. TCP/IP bazlı ağlarda .Net Remoting epeyce iyi performans sergilemekteydi. Özellikle ağ üzerinde hareket eden nesnelerin Binary olarak serileşmesi ve TCP/IP protokolünün devrede olması hız avantajı sağlıyordu. [Daha fazla]

Tek Fotoluk İpucu 139 - Singleton Method

Gün geçmiyor ki Ruby dilinde beni şaşırtan bir kabiliyet ile daha karşılaşmayayım. Dün gece Ruby kitapları arasında dolanırken öğrendiğim yeni bir kavram var; Singleton Method. Instance metodlarından farklı olarak sadece belli bir nesne örneği için çalışabilecek fonksiyonellikler tanımlayabilmemizi sağlayan önemli bir yetenek. Yani sınıf tanımı içerisinde yer almayıp nesne örneği üzerinden tanımlanabilen ve sadece o örnek için kullanılabilen fonksiyonlar geliştirebildiğimizi düşünün. Konuyu aşağıdaki fotoğrafta yer alan kod parçasında daha net bir şekilde görebiliriz. [Daha fazla]

Tek Fotoluk İpucu 138 - Bir Web Sayfa İçeriğini İndirmek

Vakti zamanında(90lı yılların ortaları diyelim) internette dolanırken bir şeyler öğrenmeye çalıştığım geliştirici siteleri olurdu. Internet o zamanlar kıymetli olduğundan site içeriklerini offline olarak da dolaşabilmek için bazı yardımcı uygulamaları kullanırdık. O yıllarda Delphi konulu makaleler içeren bir sitenin tüm içeriğini indirdiğimi hatırlıyorum. Geçenlerde bu tip bir uygulamayı nasıl yazabilirim diye düşünerken işe web içeriklerini nasıl indirebileceğimi araştırarak başlayayım dedim. .Net tarafında bununla ilgili daha önceden uğraşmıştım ama bu sefer Ruby'yi seçtim. Aşağıdaki ekran görüntüsünde bu işi gerçekleştiren basit bir kod parçasını görebilirsiniz(Fotoğraftaki Zero Hour Maps tab'ına aldırmayın :D ) [Daha fazla]

GDG Bolu DevFest'te Buluşalım

Bir aksilik olmazsa 17 Kasım'da Google Developer Group için düzenlenen etkinlikte Abant İzzet Baysal Üniversitesi'nin konuğu olacağım. Ben kıt kanaat bilgilerimle Ruby programlama dilini tanıtmaya çalışacağım. Etkinlikte çok değerli konuşmacılar ve konular da yer alıyor. Kuzzum.com kurucusu Barış Dur konum bazlı uygulamalar'ı, Kodcu.com kurucusu Altuğ B. Altıntaş Java teknolojilerindeki yenilikleri, DigiSecure'dan İbrahim Saruhan bilgi güvenliği ve adli bilişimi, MT Yazılım'dan Mete Yamak Endüstri 4.0 uygulamalarını ve IBM Cloud EcoSystem geliştiricisi Burak Aykan'da IoT ve Bluemix'i anlatacak. Dolu dolu bir etkinlik olacağı kesin. [Daha fazla]

Tek Fotoluk İpucu 137 - Temporary File ile Çalışmak

Geliştirdiğimiz uygulamanın sadece çalışma zamanında oluşturup kullanacağı ve herhangi bir anda ortadan kaldıracağı geçici bilgilere ihtiyacı olduğunu düşünelim. İlk akla gelen bu tip bilgileri bir yerlerde işi bitene kadar saklamak olacaktır. Bunun için veritabanında geçici bir tabloyu veya işletim sisteminin Registry gibi alanlarını kullanabiliriz. Aslında nesne yönelimli dünyada söz konusu içerikleri birer sınıf örneği olarak tutmakta mümkün. [Daha fazla]

Tek Fotoluk İpucu 136 - Dosyayı Külçeler Halinde Okumak

Büyük boyutlu dosyalar neredeyse her programlama ortamının en büyük sorunlarındadır. Nitekim bu tip içeriklerin bir yerden bir yere taşınması, içeriklerinde arama yapılması ve benzeri senaryolarda oluşan sistemsel yükler söz konusudur. Tek işlemli süreçlerde sıkıntı olmasa da eş zamanlı olarak n sayıda dosya üzerinde toplu işlemler söz konusu olduğunda farklı tekniklerin uygulanması önerilmektedir. [Daha fazla]