GoLang - Ticker ile Periyodik İş Çalıştırma

GO dilinin en güçlü yanlarından birisi eş zamanlı programlama(Concurrent Programming) kabiliyetlerinde sunduğu performans ve kullanım kolaylıkları. Daha önceden şu yazıda Concurrency konusunu GoRoutine ve Channel kavramları üzerinden incelemeye çalışmıştım. Çalıştığım kaynaklarda ilerledikçe eş zamanlı programlama konusunda yeni şeyler de öğrendim. Bunlardan birisi time paketinden yer alan time tipi. Bu tipin NewTimer ve NewTicker isimli iki önemli fonksiyonu bulunuyor. [Dah fazla]

GoLang Built-In JSON Desteği

JSON(JavaScriptObjectNotation) ile barışık yaşamayan programlama dili neredeyse yok gibi. Özellikle son on yıl zarfında geliştirilen veya ön plana çıkan ne kadar dil varsa JSON için çekirdekten destek sunuyor. GoLang için de benzer durum söz konusu. Nasıl mı? Aynen aşağıdaki kod parçasında görüldüğü gibi. [Dah fazla]

Powershell'i Kurcalayan Bir Yazılımcı

Aslında Powershell betikleri uzun zamandır yaygın ve etkin bir şekilde kullanılıyor. Sistem yöneticilerinin biraz programlama bilgisi ile veya programcıların da biraz sistem bilgisi ile bu dili temel seviyede kullanmaları mümkün. Elimizdeki Windows 7'den son sürüm Windows Server ailesine kadar pek çok sistemde Powershell betiklerini kullanabiliriz. Geçtiğimiz günlerde bir boşluk yakaladım ve en çok tavsiye edilen Powershell betikleri nelerdir öğrenmek istedim. Uzman olmadığım bir alan olsa da tanıma mahiyetinde neler yapılabileceğini görmek istiyordum. [Dah fazla]

GoLang - Bir Go Paketini Ruby'den Çağırmak

Pek çok kaynak GO dilinin ileride C'nin yerini alabileceği yönünde görüşler belirtmekte. Özellikle IoT alanında bu dilin daha fazla ön plana çıkacağı vurgulanıyor. Bu düşüncenin haklı olabileceği yönünde bazı tespitlerim var. Söz gelimi GO ile yazılmış bir paketi başka bir dilden çağırmamız mümkün. C, Python, Java ve Ruby bunlardan sadece bir kaçı. [Dah fazla]

GoLang - Kalıtım için Gömülü Tiplerin Kullanımı

Bir süredir GO dili ile ilgili çalışmalarıma ara vermiştim. Yakın zamanda ise sevgili Murat Özalp'in GO Programlama isimli kitabını takip etmeye başladım. Gerçekten her bölüm son derece doyurucu. Kitabı düzenli olarak hergün çalışıyorum. Bazen çok az zaman ayırsam da her gece bir kaç sayfasını okuyor ve uygulamaya çalışıyorum. Şimdilerdeki en büyük yardımcım LiteIDE isimli kod editörü(ki Murat Hoca'nın tavsiyesidir ve çok memnun kaldığım bir geliştirme aracıdır) Burada yaptığım günlük çalışmaları aksatmamaya gayret ediyor ve kendime göre hazırladığım örnekleri github üzerinde topluyorum. Geçtiğimiz gün gömülü tiplerin kullanımını öğrenmeye çalıştım. Bildiğiniz gibi GO dili tam anlamıyla nesne yönelimli bir dil değil. Her şeyden önce class gibi bir kavram olmayışı kafaları biraz da olsa karıştırıyor. Lakin struct, interface ve struct'lar ile ilişkilendirilebilen metodlar yardımıyla kalıtımı uygulayabilmek mümkün. Hatta çoğu dilde riskli olduğu için izin verilmeyen çoklu kalıtımı biraz daha güvenli bir şekilde sağlama şansımız var. Gömülü tipler(ya da struct içinde kullanılan struct tipinden değişkenler) yardımıyla bunu sağlayabiliriz. [Dah fazla]

GoLang - Web Programlamaya Giriş

Bir web uygulamasının temel malzemeleri nelerdir? Sunucu tarafında çalışan bir çatı, içeriklerin gösterildiği dinamik web sayfaları, tasarım, görsel zenginlik katan materyaller(resimler,css'ler vb), veri depolama enstrümanları ve diğerleri. Aslında internet programcılığının ilk yılları düşünüldüğünde basit HTML sayfalarının neredeyse her tür ihtiyacı karşılayacağı düşünülüyordu. Zaman geçtikçe programlama dillerinin dinamik web sayfaları ile olan etkileşimi, istemci taraflı çalışan betiklerin sunucu taraflı kullanılabilmesi de gündeme geldi. Modern programlama dillerinin neredeyse tamamı web uygulamaları geliştirebilmek için gerekli temel donanıma sahip. Backend tarafında eş zamanlı işlemlerde yüksek performans sunan GO diliyle de web tabanlı uygulamalar geliştirebilmemiz mümkün. [Dah fazla]

Tek Fotoluk İpucu 159 - GoLang ile Fonksiyonları Parametre Olarak Kullanmak

GoLang fonksiyonel programlama konusunda oldukça fazla kabiliyete sahip. Birinci sınıf fonksiyonlar(first-class functions), yüksek öncelikli fonksiyonlar(higher-order functions), closures, birden fazla değer döndüren fonksiyonlar,function literals ve kullanıcı tanımlı fonksiyon tipleri(user defined function types) bu kabiliyetler arasında. Dili anlamaya çalışırken strings paketinde yer alan FiledsFunc fonksiyonu ile karşılaştığımda etkilendiğim bir tanımlama keşfettim. [Dah fazla]

Tek Fotoluk İpucu 158 - GoLang'de Constructor var mı?

GO tam anlamıyla nesne yönelimli bir dil değildir. Object yerine aslında Type kavramının öne çıktığı bir ortam söz konusudur. Geliştirici tanımlı tipler için struct'lardan yararlanılır ve onların varsayılan olarak doğal yapıcı metodları(constructor) vardır. Ancak istersek kendi yapıcı metodlarımızı da işin içerisine dahil edebiliriz. [Dah fazla]

GoLang - Concurrency (goroutine, channel)

Go dilinin en önemli özelliklerinden birisi de eş zamanlı görevlerdeki performansıdır. Concurrency ile bir sürece ait n sayıda görevi(Task) aynı anda başlatabiliriz. Okuduğum kaynaklarda buna verilen en güzel örnek web sunucuları. İstemcilerden gelen talepler(Request) web sunucusu üzerinde ait oldukları uygulamalara yönlendirilip işletilmekte. Hiç bir talep için bir diğerini bekleme söz konusu değil. Web sunucusu bu görevleri eş zamanlı olarak yürütebilmekte. Concurrency'deki temel amaç da bu zaten. Görevleri aynı anda işletebilmek. Go dilinde Goroutine ve Channel yapıları ile Concurrency işlemlerini gerçekleştirebiliriz. [Dah 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. [Dah fazla]

Tek Fotoluk İpucu 157 - GO ile Bir Queue Yazalım mı?

Go programlama dilinde C#,Java veya bunlara benzer dillerden gelenler için söz konusu olan pek çok kolaylık bulunmayabilir. Söz gelimi Stack veya Queue gibi bir koleksiyon kullanmak istersek bu veri yapısını bizim tasarlamamız gerekebilir. Nitekim bu adresteki standart kütüphanelerde Queue ile ilgili bir şey bulamadığımı ifade edebilirim(aslında github üzerinde açık kaynak ek kütüphaneler var) Olsa da olmasa da biz kendimiz de bir queue veri yapısı tasarlayabiliriz. Aynen aşağıdaki fotoğrafta olduğu gibi. [Dah fazla]

JSON to BSON

Amacımız çalışan listesinin içeriğini BSON formatında bir dosyaya yazdırmak ve sonrasında bu içeriği tekrar okuyup ters-serileştirme işlemini gerçekleştirerek ekrana yazdırmak. [Dah fazla]

DevNot Developer Summit Ankara

8 Nisan tarihinde gerçekleştirdiğimiz DevNot Summit etkinliği arından sıradaki durağımız Ankara. Uzun zamandır ziyaret etme fırsatı bulamadığım, yedek subaylık anılarımla dolu Ankara'ya gitmek için şimdiden sabırsızlanıyorum. İstanbul etkinliğinde Script Tabanlı Dillerin Önemi ve Geleceği'nden bahsetmeye çalışmıştım. Ankara etkinliğimize de Ruby programlama dilini götürüyorum :) [Dah 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. [Dah fazla]

Tek Fotoluk İpucu 155 - C# 7.0 Tuple İyileştirmeleri

C# 7.0 tarafında geliştiricileri mutlu eden iyileştirmelerden birisi de Tuple tipi ile ilgili. Klasik olarak bir tip tanımı yapmamıza ihtiyaç duymadan özellikle metodlardan dönüş yaptığımız noktalarda faydalanabildiğimiz generic Tuple tipinin en büyük handikapı üye isimlendirmesiydi. Aşağıdaki kod parçasında bu durumu görebilirsiniz. [Dah fazla]

DevNot - Script Tabanlı Dillerin Önemi ve Geleceği

Bir kaç ay önce yaklaşık beş yıldır çalışmakta olduğum turuncu bankanın oldukça yaşlı bir ürününde değişiklik yapmamız istendi. Söz konusu ürün bir devlet kurumunun eski nesil SNA protokol tabanlı sunucuları ile iletişim kurmaktaydı. Bankanın kritik süreçlerinde rol alan bu ürün VbScript tabanlı klasik ASP ile yazılmış bir Web uygulamasıydı. Uygulamanın neredeyse 13 yaşındaydı. Geliştiricisi olan 3ncü parti firma çok uzun zaman önce kapanmıştı. [Dah fazla]

GoLang - Pointers

1993 yılında girdiğim Matematik Mühendisliği bölümünün bilgisayar programlama ağırlıklı bir müfredatı vardı. GWBasic ile başlayan maceramızda Pascal, C, C++, Cobol gibi programlama dillerine uğradık. Sınavlarımız çoğunlukla kağıt üzerinde olurdu. Basit for döngülerini dahi kağıt üzerinde yazarak algoritma çözmeye çalışırdık. [Dah fazla]

Tek Fotoluk İpucu 154 - C# 7.0 out İyileştirmesi

Henüz C# 6.0'ın nimetlerini şirket projelerinde deneyimleme fırsatı bulamamışken yakın zaman çıkan Visual Studio 2017 ile birlikte gündeme oturan C# 7.0 kabiliyetlerini yeni yeni keşfetmeye başlıyorum. C# 7.0 tarafında epey yenilik var. Bunlardan birisi de özellikle TryParse operasyonlarında ele alınan out kullanımına yönelik. En yaygın senaryo string bir içeriğin sayısal tipe dönüştürülmesi sırasında TryParse fonksiyonunun kullanılması. Normal şartlarda aşağıdaki kod parçasındaki gibi gerçekleştirdiğimiz bir operasyon. [Dah fazla]

DevNot Developer Summit İstanbul

Nisan'ın 8inde DevNot adına düzenlenen birbirinden değerli konuşmacıların yer aldığı DevNot Developer Summit'de kısmet olursa Script Dillerin Önemi ve Geleceği konulu bir sunum yapacağım. Doğruyu söylemek gerekirse benim için oldukça kazık bir konu. Script dillerdeki kısa geçmişim ve katılımcılar arasında Script diller konusunda duayen olmuş isimler olduğundan biraz çekinerek hazırlandığımı itiraf etmek isterim. [Dah fazla]

GoLang - Slice ve Map Kavramları

Gopher olma çalışmalarına veri türlerini tanıyarak devam ediyorum. Geçtiğimiz günlerde Slice ve Maps veri türlerini anlamaya çalıştım. Her ikisi de sağladıkları esneklikler açısından kullanışlı. Şimdi gelin kısaca bu türleri tanıyalım. [Dah fazla]