‘Programlama dilleri’ Kategorisi için Arşiv

Common Logger: Pratik bir günlük kütüphanesi

Common Logger 1.0 ekran görüntüsü

Günümüzde neredeyse her program penceresinde ya da konsolda söylediklerinden fazlasını günlüklerine yazıyor. Bu günlükler programların yanında olabileceği gibi işletim sistemlerinin belirlediği yerlerde (Windows’da merkezi bir servis, Linux’da /var/log dizini) bulunabiliyor. Yıllardır kullanılan bu yöntem için bir çok kütüphane de var.

Peki bu kadar oturmuş bir yöntem için yeni bir kütüphaneye neden ihtiyaç var? Nedeni basit esasında. Java’nın içinde gelen logger, devasa bir yapı. Linux’un syslogger sistemi de büyüklükte Java’dan geri kalmıyor. Ya istediğiniz basit bir şey ise? Sadece ekrana ve dosyaya pratik şekilde günlük tutmak, mesajlar yazdırmak istiyorsanız? İlk seçeneğiniz bu kütüphaneleri kullanmak, ikincisi ile kendi kütüphanenizi geliştirmek.

Devamı »

Hexadecimal IP Tools

Bir süredir, iş yerinde otomatik Linux kurulumu üzerinde uğraşıyorum. Sunucularımızın çoğu aşağı yukarı aynı paketler ve dağıtımlar ile çalıştığı için, otomatik kurulum sistemleri oldukça işimize geliyor. Otomatik kurulumun bizim için iki büyük avantajı var:

  • Yeni gelen sunucuları çok kısa sürelerde sisteme entegre edebiliyoruz.
  • Bir sunucumuz bir nedenden dolayı işletim sistemini kaybederse, yine aynı kısa sürede sisteme yeniden dahil edebiliyoruz.

Devamı »

Linux, C++ ve Unicode

Daha önceki yazımda bahsettiğim unicode karakter problemi ile uğraşırken Linux’un bu karakterler ile nasıl baş ettiğini ilginç bir şekilde buldum. Sorun, dosyayı okumak ve işlemek için yazdığım kütüphanenin metni ekrana doğru yazması ama Türkçe karakterleri tanımaması (işlememesi) ile baş göstermişti. Ben de karakterlerin nasıl kodlandığını incelemek için, karakterlerin tamsayı değerlerini ve kendilerini ekrana basan ufak bir C++ programı yazıp derledim…

Programı deneyince sorun daha da karmaşıklaştı. Türkçe karakterlerin tamsayı değerleri hem sıfırdan küçük çıkıyor hem de girdiğiniz karakter ekranda doğru görünmüyor. Peki o zaman, benim kütüphanem dosyayı nasıl ekrana yazabiliyor?

Devamı »

Tatil ve C++

Öncelikle tatilden hepinize merhaba. İnternet bağlantım olmadığı için (iyi ki de yok) yazılarımı yazıp biriktiriyorum. Bugün tatilin 8. günü ve şimdiden kendimi oldukça dinlenmiş hissediyorum. Burada bol bol uyuyor, yüzüyor, kitap okuyor ve az da olsa bilgisayar ile ilgileniyorum…

Tatilin en güzel yanı, internet bağlantımın olmayışı ve beni kimsenin beni rahatsız etmemesinin yanında uzun zamandır ertelediğim projelerime de sonunda zaman ayırabiliyor olmam. Hiç televizyon seyretmediğim için yemekten sonra ve sabahtan az da olsa kendime biraz vakit yaratıyor ve bu ufak aralıklarda ne zamandır yazmak istediğim T-Storm ile ilgileniyorum.

Uzun zamandır C++ ve program yazmadığım için oldukça paslanmışım açıkçası. Masaüstlerimin birinde eclipse açıkken diğerinden Stroustrup’un C++ kitabının PDF’i eksik olmuyor :) . Şu anda düşe kalka ilerleme aşamalarındayım. C++ eski bir dil olduğu ve esasen ASCII ile çalışması için yazıldığı için unicode dosyalarla uğraşmakta biraz zorlanıyorum. Elimde bir iki alternatif olmasına rağmen hala kesin bir çözüm bulamadım. Sanırım çözüm hikayesi daha sonraki bir girdiye kalacak.

Python

Her şey birden oldu… Ne olduğunu anlamadan akşam kendimi geçen yaz ısmarladığım python kitabını karıştırırken buldum… Amacım basit ama çok tekrarı olan bir işi programa yaptırmak ve ortaya çıkan veriyi yararlı bilgiye çevirmekti. Kısaca tam anlamıyla bir sistem yönetimi problemi çözmem gerekiyordu ve önümde 3 seçeneğim vardı:

  • Bash.
  • Perl.
  • Python.

Devamı »

Python’un Adı, C++’ın Tadı…

Hep merak etmişimdir. Neden bazı programcılar kullandıkları dilleri sadece dünya üzerinde o varmışçasına kullanır, savunur ve bunu yaparken sizin kullandığınız dile hakaret eder?

Devamı »

Bir platform olarak Windows.

Her şey benim son stajımda linux kullanmak zorunda kalmam ile başlamıştı… Staja gittiğim ilk gün elime debian CD sini tutuşturup “hadi kur bakalım” demişlerdi. Benim için çok zor olmamıştı zaten. Bilmediğim bir şey değildi Debian kurmak. Bilmediğim şey, bu kadar zamandır öğrenmeye üşendiğim işletim sisteminin hayatımı değiştireceği idi…

Staj başladıktan bir hafta sonra proje kodlarıma evde devam edebilmek için fedora kurdum. Bir kaç ay önce de SuSE 10.0 a geçtim. Başka hiç bir işletim sistemi kullanmıyorum artık, zaten ihtiaç duymuyorum. Zaten bu yazının linux ile alakası bu açıdan değil.

Bitirme projesinin önümüze konması da bu zamanlara denk geliyordu. Bir yandan konu üzerinde araştırma yapmak, bir yandan da projeyi yazacağımız dili seçmemiz gerekiyordu. Benim kalbimde yatan dil C++ olmasına rağmen, portable olmasını sağlamak çok zor olabilirdi. .NET kullanan arkadaşım C# diye tutturdu ama benim windows kurmama ve .NETi sevmeme fikirlerimi kıramadı. Ben ise yeni yeni Java öğreniyordum ve Java’da yazalım dedim. Hem cross platform hem de senin çok sevdiğin o .NET diline benziyor. İkna çabalarım başarılı olmuştu. Arkadaşımın eline bir paket eclipse tutuşturup evine yolladım.

Proje gelişmeye başlıyordu… Düşe kalka ilerliyor, bir şeyleri çalışır hale getiriyorduk. Hiç bir sorun yoktu. Kodlar tamamen cross-platfom şekilde derlenebiliyor, çalışıyor, test edilebliyordu. Sevinçliydik… Ta ki, ben proje’nin dosya formatını ve yazma okuma sistemlerini yazmaya başlayana kadar. Sıkıştırma algoritmasının hesapları ile dosyaya yazılan boyutlar arasında durmadan sorunlar çıkıyordu. Zaten binbir zorlukla ve numara ile geliştirilen dosya formatı, nedense olması gerektiği gibi çalışmıyor; linux sistemde sıkıştırma elde ederken, windows sistemlerde dosya sadece şişiyordu. Sıkıştırma sadece yazı üzerine olduğu için dosyanın bazı yerlerine özel “karakterler” yazmak gerekiyordu ve ben bunları UTF-16BE (endian sırasını kendim belirlemiştim çünkü böylece java her harf başına byte-sırası karakterleri yazmıyordu) olarak gömüyordum dosyaya… Ayrıca aynı sorunlar dosya çözülürken de çıkıyordu. Benim koymadığım o karakterlerin dosyada ne işi vardı?

Biraz uğraşı biraz vi sonucu gördük ki, o karakterler byte-sıra karakterlerinden başka bir şey değildi. Yani kısacası; benim özellikle seçtiğim encoding; java’nın ve benim istediğim gibi çalışmıyordu. Windows yine bildiğini yapıyor, istediğini istediği gibi yazıyor, okuyordu… Dünyanın en popüler işletim sistemini yazan amcalar size istediğiniz gibi program yazma özgürlüğü de bırakmamışlardı anlaşılan…

Sonuç olarak, arkadaşın makinasına da SuSE kurup geliştirme işine o şekilde devam edip bitirdik ve ben Windows’dan bir program, bir işletim sistemi olarak iyice soğudum… Bu nedenle programcı olmak isteyenler bence hangi platformu kullanacağını, o platformun getirdiklerini iyi bilsinler, ona göre seçim yapsınlar.

İyi Akşamlar…

Bir eğitimcinin mühendislik görüşü üzerine denemeler

Bugün, mesleki sertifika eğitimi veren bir eğitimci ile biraz sohbet ettim. Kısa bir sohbet olmasına rağmen neden olduğunu anlayamadığım halde, ciddi şekilde sürtüşmeyi başardık. Sohbet, benim açık kaynak kodlu yazılım ve GNU/Linux sempatimin ortaya çıkması ile alevlenmeye başladı ve bu insanın ağzından bir çok görüş öğrendim. Mesela….

Türkiye’de .net kullanılıyor çünkü; bu ülkede bundan para kazanılıyor. IBM ve büyük firmalar açık kaynak “kullanıyorlar” çünkü bundan ekmek yiyorlar. Yoksa açık kaynak ile bir gönül bağları yok. Açık kaynağa gönül verenler bir tek GNU cular ve komik şeyler söylüyorlar. Evet haklı ama; ikinci cümlenin başına kadar. IBM ve benzeri firmalar açık kaynaklı yazılım kullanmaktan öte, bu yazılımların üretimine, korunmasına (OIN, open innovation network) ve desteklenmesine (kendi yazılımlarını değil, genel olarak açık kaynağın desteklenmesine) ciddi anlamda para yatırıyorlar. Hiç bir ücret alınmadan dağıtılan bu yazılımların bütün teknolojilerinin açık olması ise bu adamların bunun üzerinden para kazanmalarını engelliyor. Peki, bu adamlar nereden ve nasıl para kazanabiliyorlar?

Açık kaynak kodun en büyük özelliklerinden biri, program ile beraber desteğinin indirilemiyor oluşu. Yani sizin yeterince yetenekli ve bu işi seven bir ekibiniz yoksa; bu adamlardan destek ve eğitim almalısınız. Adamlar bu noktada yazılımdan para kazanıyorlar. Adamlar kodu satarak daha çok para kazanabilecekken neden peki daha az para kazanıyorlar? Cevabı basit. Çünkü adamlar kodu açarak maliyetten düşüyorlar. Açık kaynaklı yazılımların belli bir ekibi ve belli gönüllüleri var. Gönüllüler, böcek ayıklama ya da geliştirme yapıyorlar. Sonuç olarak programın kodu daha geniş bir kitleye yayılıyor ve daha kolay böcek temizleme (kod ve tasarım seviyesinde) ve alana göre özelleştirilme / yerelleştirme çalışmaları yapılıyor. Bu değişiklikleri uyarlayan insanlar bunu firmaya geri gönderdiği zaman bunlar da firmanın sistemine göre (eğer böyle şeyler kabul ediliyorsa) koda ekleniyor. Böylece çift yönlü döngü başlıyor. Profesyonel programcılar, diğer gönüllü “code hacker” lardan görüş, öneri ve destek de alabiliyorlar böylece. Sonuç olarak yazılım hızlı evriliyor, hızlı gelişiyor ve daha stabil bir noktaya geliyor.

Türkiye’de .net kullanılıyor çünkü; bu ülkede bundan para kazanılıyor. IBM ve büyük firmalar açık kaynak “kullanıyorlar” çünkü bundan ekmek yiyorlar. Yoksa açık kaynak ile bir gönül bağları yok. Açık kaynağa gönül verenler bir tek GNU cular ve komik şeyler söylüyorlar.


Bu kadar paralel şey söyledikten sonra benim bu adamla ne diye anlaşamadığımı da merak edeceksiniz, eminim. Sorun şu: bana göre açık kaynak dünyasını bu kadar dinamik, firmaları da bu işe bu kadar istekli tutan bir şey var. Bu işin amatörlüğü. Plana programa bağlı olsa bile bir kültürü var. Kişisel hırslardan çok ortak geliştirme ve anlaşabilme disiplinine dayalı, saydam ve eğlenceli. Programcı ekibiniz sürekli değişken. Mutlaka işi iyi bilen biri var ve en önemlisi severek yapılıyor (en azından gönüllüler tarafından). Bana göre ayrıca bir yazılım profesyonel bir sekreterlikten (özel bir dilde özel bir metni şekline uygun şekilde yazmak) çok gönüllü bir sanatçılık. Kendi imzanı kendi kodlama stilin ile birleştirip ortaya istenilen işi yapan ama senin zeka ve anlayşını yansıtan bir ürün çıkarmak. Bu ürünü çıkartırken karşılaştığın sorunlarla kendi çözüm anlayışını ve bilgini uygulayarak metodoloji olarak bu kodu bir kere daha imzalamak. Böylece hem kendini hem çalıştığın yeri memnun edip hayatına devam etmek.
Bugün konuştuğum insana göre ise programcılık daha basit. Yapılması istenen işi, eğitim ya da çözüm dökümanlarındaki en popüler yöntemle yazıp, karşılaşılan sorunları internetten ulaşılabilen çözümlerden basitçe devşirmek. Bu tamamen yeniden kullanılabilir kod konseptine otursa bile bu kadar saf şekilde bu yöntemin uygulanması sadece ve sadece günü kurtaran, n. revizyonda “sphagetti code” olup, programınızı hazmedilemez bir pelteye çeviren bir metodoloji. Benim özel sektör ve şu zamanlarda çok popüler olan yazılım mühendisliği (otomatikleştirilmiş programcı yetiştirme bölümü de diyebiliriz) ile anlaşamamaktaki temel nedenim bu.

Bir de GNU cuların komik olmak gibi bir özellikleri olduğunu öğrendiğimden bahsetmiştim. GNU cuların komik olmalarının sebebi ise idealist olup, bir şeyi gönülden desteklemek ve diğer firmalara bu ciddi alternatifi kabul ettirebilmeleri sanırım. Eğer bir insan 70lerdeki iyi niyeti özleyip bu hayalini gerçekleştirip IBM gibi bir firmaya eclipse gibi bir teknolojiyi açtırıp, kocaman bir işletim sistemi yazıp bunu dünyanın en büyük firmasının karşısına çıkarabilecek bir örgütlenme yaratabiliyor ise, buna “komiklik” diyen insanların aynaya bakıp “lan acaba…” demelerinde fayda olduğunu da düşünüyorum.

Ayrıca bir insanı “bu ülkede” “ar-ge” yapmak istediği için ve “her şey para değil, yaşayabileceğim kadar para kazanıp sevdiğim işi yapıp dünyanın en mutlu insanı olabilirim” dediği için, “küçüksün sen, 25 ine gel konuşalım.” Diyerek aşağılamasını da tasvip etmiyor, bu konunun kişisel olması ve karşı tarafa cevap hakkı verdiği için ise bu yazıda yeri olmadığını düşünüyor, kendisini aynaya davet edip yazımı bitiriyorum…

Unutmadan size iyi bir geceler küpesi: “Hayalleri olmayan insanlar yaşayamazlar.” (ya da onun gibi bir şeydi, hatırlayamadım şimdi.)