‘Programlama’ 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ı »

Günün Sözü

Any fool can write code that a computer can understand.
Good programmers write code that humans can understand.
-Martin Fowler.

Her aptal bir bilgisayarın anlayabileceği kod yazabilir.
İyi programcılar insanların anlayabileceği kod yazar.
-Martin Fowler.

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ı »

codefoundry

Bu blogda linklemiş olduğum ve daha sonra linkleyeceğim her türlü ufak tefek programa direkt ulaşılabilmesi için codefoundry adında ufak bir web sayfası hazırladım.

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.

Üretime Geçiş

Son zamanlarda tatile gittiğim ve gelince bir sürü işle uğraştığım için, buraya pek zaman ayıramadım doğrusu. Peki son zamanlarda ne oldu? Merak edenleriniz varsa okumaya devam etsin.

Devamı »

Bilgisayarlar Hızlanırken Yavaşlayan Programlar

Bu yazıyı uzun zamandır yazmak istememe rağmen, giriş kısmını bir türlü beceremediğimden dolayı uzun zamandır aklımın bir köşesinde yatıyordu fakat; son zamanlarda okuduğum bir test, bu sorunu da ortadan kaldırdı.

İnternette dolanırken (günde 8 saatini bilgisayar başında geçiren birinden başka bir yerde dolanmasını bekleyemezsiniz zaten) ilginç bir test buldum. Canı sıkılan bazı insanlar (ki ilginç şeylerin bir kısmı sıkılan yaratıcı insanlardan çıkar zaten) ellerindeki eski bilgisayarla yeni bilgisayarın ofis uygulamalarındaki performansını merak etmişler. Karşılaştırılan bilgisayarlar ise şöyle: Apple-][ ve AMD Athlon X2 4800+ işlemcili bir bilgisayar. Sonuç ise şaşırtıcı: Temel ofis uygulamalarında ve işlemlerinde iki bilgisayar neredeyse eşit. Hatta bazı şeylerde Apple-][ önde!

Bu testin elbette Apple-][ ile doom III ya da unreal tournament 2004 oynayabileceğiniz (hiç dikkat ettiniz mi? Bilgisayar delileri genelde FPS oynarlar) anlamına gelmediği ya da çift çekirdekli bir AMD'nin bir Apple-][ kadar yavaş olduğunu söylemediği açıkta. Peki ne söylüyor, ona bakmakta fayda var:

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ı »

Son kullanıcı neden program yazmayı bıraktı?

Son ama hatırlamadığım zamanda slashdot’ta bir haber okudum: “Why Johnny can’t code?” Son kullanıcı ve çocukların neden program yazmadığını, yazamadığını ve neden yazmak istemediğini araştıran bir gazete haberine gidiyordu link. Hatırladığım kadarı ile konu oyunlara, tüketim toplumuna bağlanmıştı. Bu konu üzerine ben de bir şeyler yazmak istedim.

Program yazmak, üretmek bilgisayarı öğrenmenin en kolay ve güzel yoludur bana göre. Bir otomatik saatin işleyişini görmek gibidir. Neyin neyi tetiklediğini seyredebilir, x’e 5 vermenin 4 vermekle farkını anlayabilirsiniz. Hatta bu bir birimlik değişikliğin cennet ile cehennem arasındaki çizgiyle haşır neşir edebileceğini de…

Peki, neden eskiden çocuklar, büyükler program yazarken artık bu işlerle pek ilgilenmiyorlar. Bunun esasında bir çok nedeni var ama; bunlar arasındaki bir nedenin yeri bunlardan fazla. Bu yazıda bu noktalara değinmeye çalışacağım.

1- Toplumun tüketime kayması: Bilgisayarlarda program yazılmamasının en yüzeysel sebeplerinden biri budur. Toplumda üreten bir hizmet sektörü vardır. Size programlar, aparatlar, işletim sistemleri, hizmetler üretir / sunar; sizi rahat ettirirler. Bir tanıdığımın ettiği bir laf vardı: “Eğer bir şeye ihtiyacın varsa ve bu şey yeterince primitif ise mutlaka biri senden önce yazmıştır.” Bu düşünce yapısına sahip bir toplum oluştuğu zaman zaten otomatik olarak programcıların sayısının düşmesi kaçınılmaz bir hal alıyor, zaten almış vaziyette. Böyle düşünen bir toplumun bir kısmı üretmeyi sevmediği için (evet, bu da bir haktır, sadece tüketmek) ya da üretimin verdiği hazzı henüz tatmadığı için hazır paketlere yönelirler ve poşet çay programlarına bile para verebilirler (ya da bedava alternatifleri kullanırlar).

2- Oyunlar, sosyal hayatın ve trendlerin değişmesi: Eski zamanlarda çocuklar ve gençler arasında popüler olan şey program yazmak, demo yazmak gibi hobilerdi. Oyun oynamak bu kadar popüler olmasa bile yine vardı. İnternet, MMORPG, MSN Messenger gibi şeyler icad edilmemiş olduğundan dolayı, insanlar bilgisayarın başına çoğul olarak oturur; oyun oynar ya da yazdıkları programları yarıştırırlardı. Eskiden “demoscene” denilen şeyler prestij ifade ederdi, yer altı gruplar olarak anılmazlardı. Teknolojinin primitif olmasının da yan etkisi olan bu durum; bu teknolojiyi kullanmak isteyen herkese onu iyi bilmeyi şart koşardı. Bu nedenlerden dolayı BBS lerden Hüseyin Uslu’nun telefon rehberlerini başka birinin yazdığı telnet prprogramını çeker, kullanırken heyecanlanır, içine bakıp; adam yapmış derdik. Herkes az çok neyin ne anlama geldiğini bilirdi.

Bugüne geldiğimizde ise o zamanlarda hayal edemediğimiz hızların alınabilir fiyatlarda (kota ve ucuzluğu karıştırmayın, yarama basmayın) olduğunu, laptopların cep telefonları gibi satıldığını, insanların sabahtan akşama kadar World of Warcraft oynadığını hatta orada evlendiğini, akradaş çevresi edindiğini, sözlükten tanışıp komün olduklarını görüyoruz. HP bile reklamlarını yapıyor. “Computer is personal again”. Bugünlerde topluluklar internet üzerinden kuruluyor, dersler evden yapılıyor, programlar intenetten servis olarak kullanılıyor ve bu bilgi denizinde insanlar herşeyi bulabildiği için şunu yapsak nasıl olur pek demiyorlar.

3- Programlanabilirliğin bir özellik olmaktan çıkışı: Bu yazıyı okuyan sizin hala çalışan bir Amiga’sı, Commodore’u var mı? Ya da onlarla hiç tanıştınız mı? Datasette kullanıp kafa ayarı yaptınız mı? Ferhat’tan ya da Mikromedya’dan disket, kaset çektirdiniz mi? Hala pinball fantasies oyununu özlüyor musunuz? Bu terimlere aşina olan okuyucular o zaman bilgisayarların “programlanabilir kişisel bilgisayar” ve “kendi programlarınızı da yazabileceğiniz oyun, eğlence ve iş makineleri” olarak lanse edildiğini hatırlayacaklardır. Commodore kitabındaki ilk bölümün basic’e giriş olmasını da…

Bilgisayarın emekleme dönemlerini yaşadığı o zamanlarda insanların bilgisayarlarına program yazabilir olması büyük bir gelişmeydi ve bu insanlara pazarlanıyordu. O zamanlar bir bilgisayarın hızından ve özelliklerinden öte; desteklediği / kullandığı programlama dili dahi piyasa payını belirleyebilmekteydi. PC’nin gelişi ve DOS bunu çok değiştirmemiş olsa bile; Windows’un gelmesi ile bu özellik yavaş yavaş kaybolmaya başlamıştı ama; PC demoscene daha henüz yeni doğuyordu.

4- İşletim sistemlerinin karmaşıklaşması ve programlanabilirliğin saklanması: ve sonunda olan olmuştu. Microsoft’un her eve bir bilgisayar vizyonu çerçevesinde kolay kullanılabilir, insanların kafasını karıştırmayan işletim sistemleri üretilmeye başlandı. Önceleri bazı işlerin daha kolay hale getirilmesi için yazılmış olan windows shell, zamanla bilgisayarın ana kabuğu olmaya başlamış, MacOS’u tarihe gömmek için her sene çıkartılmak için uğraşılmış olan her cici windows DOS ve DOS prompt’u daha gerilere atmıştı. Windows 2000 ile Microsoft zafer ilan etti. Windows artık DOS tabanlı bir işletim sistemi değildir. Böylece DOS tarihe gömülmüş, kara ekran sadece emüle edilen ve “öcü” bir yer ilan edilmişti. Böylece basit programların çalışabileceği alan lanetlenmiş ve programlama öğrenmek isteyenlere başka yollar görünmüştü.

Windows üzerinde yazdığınız programın görünebilmesi için bir pencereye sahip olması şart hale gelmişti artık. Peki bunu nasıl yapacaktık? Fortran, Pascal ile bu imkansızdı fakat; C++ ve win32 API ile bu gayet mümkündü. İşin kötüsü ise bu durumun göründüğü kadar iç açıcı olmadığı idi. Win32API; güç ve kullanılabilirlik dengesini kaçırmış, anlamsız derecede zorlaştırılmış bir yapı olup çıkmıştı. Bunun iki sebebinden biri çok büyük bir hızla geliştirilip hiç ama hiç son kullanıcının düşünülmemiş olmasıydı. Diğeri ise son kullanıcıyı kuvvetli dillerden soğutup iş ortaklarına para kazandırmaktı. Çünkü Windows aynı zamanda ticari bir platformdu ve iki tarafa da para kazandırmalıydı. Microsoft ayrıca herkesi kendi platformuna bağlayabilmek için visual dil ailesini çıkardı ve böylece tüketicilerin yazdığı programların kendi platformuna bağımlı olmasını sağladı.

Sonuç olarak, daha önceleri bir özellik olarak lanse edilen ve sonra diğerlerine “güzel” para kazandırdığı için kullanıcıdan soyutlanan programlanabilme özelliği nedeni ile son kullanıcı program yazmayı bırakmak yerine, program yazmayı unuttu. Bunu unutmayan, merak eden insanlar için ise genel geçer dillerin işletim sistemi ile olan interface’leri son derece zorlaştırılarak daha basit ve high level diller üretildi (VC++, C#, J# vb. Microsoft dilleri). Daha önceki zamanlarda Sun ise tamamen farklı bir felsefe ile (Bir kere yaz her yerde kullan) Java’nın temelini attı. (.NET ailesi aynı zamanda Microsoft’un java’ya açtığı ve başka bir sürü amaç içeren , ki bunlar başka yazıların konularıdır). Sonuç olarak son kullanıcı high-level ve yavaş programlama dillerinde kendi egolarını tatmin ediyorlar. (Biliyorum, java ve .NET çok gelişmiş sistemler, yapılar vs. ama; ben aynı kodu da C++ ve WxWidgets ile yazabilir bu programları toza boğabilirim). Bu ekolün karşısında ise şu anda yavaş ama kararlı şekilde kök salan GNU/Linux durmakta ve bilgisayar meraklısı bir çok insan bu işletim sistemini windows’un yanına ikinci ya da birinci işletim sistemi olarak kurmakta, kullanmakta ve isteyenler çok rahat şekilde büyük / küçük programlar yazabilmekte. Şimdi sorun, daha sonraki nesillere bu işletim sistemlerini ve üretmenin zevkini tattırabilmekte…

Sonraki Sayfa »