Yazilim Dunyasi

Neden İşletim Sistemi Geliştirmemeliyiz?

Türkiye de işletim sistemi geliştirmek, özellikle Pardus'un çıkışından sonra, ilgin çeken bir konu haline geldi. Çeşitli forumlarda, işletim sistemi nasıl geliştirilir, Python ile işletim sistemi geliştirmek mümkün müdür gibi sorular soruldu. Daha dün Neden işletim sistemi geliştirmeliyiz{: rel="nofollow" } isminde bir yazı okudum. Ben de diyorum ki, işletim sistemi geliştirmemeliyiz. Bu yazıda, neden böyle düşündüğümü açıklayacağım.

Devamını oku…

Haskell Öğreniyorum

Hazır tatil, boş vaktim varken Haskell öğrenmeye bir şans daha vereyim dedim. Bir yandan öğrenirken, bir yandan da ufak bir Haskell tanıtımı yapayım (bkz: araklamak).

Haskell tamamen fonksiyonel bir dil. İmperatif dillerde, programa hangi adımları izleyeceğini adım adım anlatıp, neyin nasıl yapılacağını anlatıyoruz. Fonksiyonel dillerde ise, neyin ne olduğunu belirtiyoruz, nasıl yapılacağına program kendi karar veriyor.

Haskell tembel bir dil. Haskell size bir sonuç göstermek zorunda kalmadıkça, fonksiyon çalıştırmaz. Örneğin, bir liste döndüren bir fonksiyonu çalıştırıp, ilk iki elemanını ekrana basmak istediğinizde, Haskell ilk iki elemanı bulacak kadar fonksiyonu çalıştırıp, orada bırakıyor.

Haskell, statik tipleme kullanıyor. Yani, derleme sırasında bir takım hataları yakalayabiliyorsunuz. Ayrıca, C'nin aksine, çıkarım yapma yoluyla veri tiplerini bulabiliyor. Örneğin, a = 5 derseniz, a'nın bir int olduğunu belirtmenize gerek yok, Haskell kendi anlıyor.

Haskell zarif ve ifade gücü yüksek bir dil. Python'dan hatırlayacağınız, list comprehension yapısı Haskell kaynaklı. Ne kadar az kod, o kadar kolay bakım gereksinimi ve o kadar az bug demek.

Devamını oku…

İyi Programcı Nasıl Olunur

Ben iyi bir programcı olduğumu iddia edemem. Ancak, kendi çabalarıyla programcılık hakkında bazı şeyler öğrenmiş ve hayatının belirli bir kısmında, amatör olarak da olsa, programcılıkla uğraşmış biriyim. Bu maceram boyunca, edindiğim deneyimler doğrultusunda, doğru veya yanlış, "iyi programcı nasıl olunur?", "iyi programcı olmak için neler yapmak gerekir", "yazılım konusunda kendini geliştirme nasıl mümkün olur" gibi sorulara bir cevap yazıyorum. Yazı iki kısımdan oluşuyor; önce bana göre iyi bir programcı olmak için ihtiyaç duyacağınız şeylerden bahsedeceğim, sonra kendinizi geliştirebilmeniz için bazı adımlar tavsiye edeceğim. Ancak, bunlara geçmeden önce şunu da belirtmek istiyorum ki, bunları benim gibi bu işin okulunu okumamış ve kendi çabalarıyla programlama konusunda bir yerlere gelmek isteyen kişileri düşünerek yazdım. Çünkü, burada tavsiye edeceğim adımlar, zaten bilgisayar mühendisliği bölümlerinde derslerde veriliyordur diye düşünüyorum. O yüzden, bu yazı okullulara çok hitap etmeyebilir.

Bence programcılar iki kısımdan oluşuyor. İlk grup, programcılığı programcılık için yapanlar grubu. Bu gruptaki kişiler, sırf eğlence olsun diye program yazan, farklı ve yeni şeyler denemeye yatkın kişilerdir. Diğer grup ise, programcılığı bir araç olarak kullanan ve programcılık aracılığıyla bir işini halletmesi gereken kişilerdir. Bunlara örnek olarak, bilimsel amaçlarla programcılık yapanları verebiliriz. Bu yazı ilk gruba yönelik olacak.

Devamını oku…

Neden nikola'yı tercih ettim?

Eğer statik blog oluşturucuların size göre olmadığını düşünüyorsanız, bu yazı fikrinizi değiştirebilir. Aslına bakarsanız, artık devir statik blog devri. Veritabanları'nın yerini markdown dosyaları ve html şablonları aldı. Statik siteler oluşturulduğu anda kullanılmaya hazır!

Statik bloglar, birtakım programlar tarafından oluşturulmuş html dosyalarından oluşturulan sitelerdir. Bu programlar, örneğin markdown gibi, bir markup dilinde yazılmış olan dosyaları okurlar ve bunları siteyi hazırlamak için kullanırlar. Böylece ortaya, index sayfası, RSS'i, site haritası dahil her şeyiyle tam bir site meydana gelir. Bu şekilde hazırlanmış sitelerin, alışılagelmiş blog sistemlerine göre birtakım avantajları vardır.

  • Güvenlik: Statik siteler, güvenlik açığı bulundurmaz. Çünkü, dinamik olarak sunulan kısımları yoktur.
  • Verimli Kaynak Kullanımı: Statik siteler çok az server kaynağı kullanırlar.
  • Platform bağımsızlığı: Statik siteler, herhangi bir sunucuda rahatlıkla barındırılabilir. Belli bir php, python sürümü veya belli bir işletim sistemi ihtiyacı yoktur.
  • Ücretsiz Server İmkanı: GitHub Pages statik siteler için ücretsiz hosting sağlıyor. Üstelik, bununla birlikte kendi domain adınızı kullanabilirsiniz.

    Devamını oku…

Java izlenimleri 2

Yaklaşık 1 haftadır (belki daha fazla da olabilir, tam emin değilim) az çok Java'yla uğraşıyorum, az çok birşeyler yazdım;

  • yas git benzeri versiyon kontrol sistemi (gibi birşey)
  • HttpTools Http araçları kütüphanesi olacak, şimdilik sadece sitelerin durum kodların topluca almaya yarayan bir class var.
  • MathTools Asal sayı, narsist sayı bulma ve labirent oluşturma class'ları
  • wikicategory WikiPedia'a bir kategorideki makaleleri komple almak için bir class

Java'nın ve NYP'nin mantığını biraz daha iyi kavramaya başladığımı hissediyorum. Ancak, halen alışamadığım şeyler var.

Devamını oku…

Java'da ilk izlenimlerim

Uzun zamandır java'yı denemek istiyordum ama nedense içten içe ayak diretiyordum. Şu günlerde biraz java öğrenmek için fırsatım oldu. Java diliyle ilgili ilk izlenimlerimi buradan paylaşayım dedim. Daha önce Python ve C gibi dillerle ufak tefek programlar yazan bana, Java bir hayli farklı geldi. Şimdilik alışamadığımı söylemem gerek.

Java dilinin en belirgin özelliklerinden birisi, Türkçe'ye nesne yönelimli programlama diye çevrilen "Object-oriented programming" paradigmasına sahip bir dil olması. Python'da da sınıflar ve objeler var ancak Java tam anlamıyla bir NYP dili. Beni billenler bilir, C++ ve genel anlamda NYP konusuna karşı biraz antipatim var.

Devamını oku…

Xlib, ne kadar zor olabilir ki?

Dün müydü, ondan önceki gün müydü hatırlamıyorum, aklıma bir fikir geldi. Mouse ile tıkladığım noktaları bir yere kaydedeyim, bir kaç gün veri topladıktan sonra da scatter plot'unu çizerim, enteresan birşey olur diye düşündüm.

Mouse ile tıklanan noktaları bulmak kısmını Xlib ile yapmak gerekir diye düşündüm, gui kütüphaneleri işimi görmüyordu, çünkü programın pencere oluşturmadan arka planda çalışması, hangi pencere seçili olursa olsun, mouse tıklanma durumunu görebilmesi lazımdı. Aradan bir miktar araştırma süresi geçtikten sonra, #xorg-devel'de şöyle bir muhabbet geçti;

Devamını oku…