8 Aralık 2004

İsimler Değişmesin

İsim bir insanın en önemli kimliği iken neden değiştirilir? Okuldaki arkadaşımız "Fatma Kaya" nasıl birden "Aysel Uysal" oluverir? Yıllarca kendini alıştırdığı ismini bırakıp da eşinin adını taşımak neden?

Burada iki temel varsayım var, toplum olarak şartlanmışız, başka türlü olamıyacağını düşünerek:
* Bir ailede herkes aynı soyadını taşımalı
* Nüfus kayıtlarında aile fertleri bir arada olmalı

Bunların ikisi de gereksiz, çağdışı, kadınlar için ek yük getiren varsayımlar. Bu kuralları şöyle basitleştirsek ne kaybederiz?
* Her kişi babasının soyadını taşır
* Her kişi babasının nüfus kütüğündeki kayıtlara eklenir

Böylece, evlenme ve boşanmalarla insanların isimleri ve nüfus kütükleri değişmiyecek. Kimlik krizinden ve gereksiz bir işlemden kurtulacağız.

Peki, "Fatma Kaya" nasıl "Aysel Uysal" oldu?
Vukuatlı nüfus kaydından takip edelim:
* Doğum: Fatma Aysel Kaya
* Evlenme: Fatma Aysel Çalışkan, kayıt Ordu'ya nakledildi
* Boşanma: Fatma Aysel Kaya
* Evlenme: Fatma Aysel Uysal, kayıt Kars'a nakledildi

Kızcağızın adı hep Aysel idi, aslında. Ama okulda öğretmenler hep ilk ismi kullandığından, herkes ona Fatma derdi. Böylece Fatma onun esas kimliği olmuştu. İlköğretimdeki bu küçük kimlik krizinin üstüne, üç kere daha adı değişmiş ve üç kere nüfus kayıtları taşınmıştı.

Kimse kalkıp "Medeni Kanun iki ismi de taşımaya izin veriyor" demesin. Pratikte bunu uygulamaya imkan olmadığı görüldü. Kadınlar hâlâ evlenmenin "erkeğin ailesine verilmek" olduğu, boşanmanın normal kabul edilmediği bir geleneğin bıraktığı yükü taşıyorlar. Nüfus kayıtlarında “isimler ancak mahkeme kararı ile değişir, evlenme ve boşanma ile değişmez” anlayışı kabul edilmeden bu yükten kurtulamayız.

4 Aralık 2004

Neden Java?

Java'ya geçeli tam üç sene oluyor. Bu yazıya o zaman başlamıştım, ancak tamamladım.

Otuz dört senedir program yazıyorum. Bu süre içinde 50 kadar işletim sistemi ve bir o kadar programlama dili kullandım. Çeşitli düzeylerde programlama eğitimi verdim. Doktora çalışmam da dahil, ilk on iki sene Fortran tek aletim oldu. Sonra Pascal’a geçip yirmi sene boyunca çeşitli Pascal derleyicilerinde ustalaştım. Elbette bu arada Cobol’dan APL’e, Prolog’dan SQL’e kadar bir çok dili öğrendim, ama yaptığım işlerde sadece Fortran ve Pascal ön planda kalmıştı. 2001 yılının son günlerinde Java öğrenmeye başladım. İlk izlenimlerim o kadar iyi oldu ki, hemen köklü bir karar vererek diğer derleyicileri sildim ve sadece Java kullanmaya başladım.

Bu yazıda, Java kullanımında karşılaştığım sürprizleri anlatmak istiyorum. Programlama bilenlerin ilgisini çekmek için araya bazı kod örnekleri serpiştirdim. Programcılıkla ilgilenmeyen okuyucum, bu örnekleri okumadan geçebilir.

İlk sürprizi String sınıfında yaşadım: Java karakter dizileri 32 bit ile modellendiğinden 4Gbyte ile sınırlı. Bu pratik olarak sınırsız demek. Pascal ile programlama öğretirken 255 byte limitini hatırladım. Metin dosyalarını okuturken her satırın bir diziye sığacağını bile garanti edemiyorduk. Dosyada uzun satırlar varsa karakterleri tek tek okumak gerekiyordu. Daha sonra C'de 16 bitlik karakter dizilerine izin verilince bu sınır 64K'ya çıkmıştı. Artık Java programlama öğretirken farklı bir yöntem kullanıyoruz: Bütün dosyayı bir byte dizisine okuyup işlemleri ana bellekte yapıyoruz.
InputStream in = new FileInputStream(f);
byte[] b = new byte[in.available()];
in.read(b); //read the whole file into b
String s = new String(b); //convert b to s

Java’ya geçme kararını verdiğim günlerde “Text Processing” dersini veriyor ve dosya sıkıştırma (file compression) yöntemlerini öğretiyordum. Bu arada Java’da zip dosyalarını okuyup yazan bir format olduğunu farkettim. Çok basit bir iki komutla WinZip ayarında ve hızında sıkıştırma yapabiliyorduk.

Resim dosyalarını açmak için özel bir gayret gerekmiyor. Java’nın tanıdığı resim formatları içinde jpeg, gif ve png bulunuyor. Bütün yapmamız gereken dosyanın adını verip bir JLabel içine atmak. Dosyayı açıp resmi göstermek Java Virtual Machine (JVM) denilen sistemin sorumluluğu. Açılan resmin boyu sadece bellek ile sınırlı.
Icon i = new ImageIcon(f.toURL());
JLabel x = new JLabel(i);

Otomatik çöp toplama (garbage collection) çok ilginç bir özellik. Pascal’da en büyük sorun bellekten dinamik olarak kazandığımız yerlerin geri kazanılması idi. Bunu programcı her dinamik değişken için elle yapmak zorunda idi. Bu hem programları uzatıyor hem de en küçük bir programcı hatası bellek sızıntılarına (memory leak) yol açıyordu. Şimdi programcılar bu işi JVM’ye devrettiler. Sadece “new” demesini biliyoruz, “dispose” işlemi tarihe karıştı. Kullanılmayan bellek sihirli bir şekilde geri kazanılıyor. Böyle bir çöp kutusu evlerde de çok yararlı olurdu: Siz çöpe atın kendi kendine boşalsın!

İlk Java programlarımı yazarken bir soru hep aklıma takılıyordu: “Bu programları nasıl exe dosyasına çevireceğim?” Altı ay bu sorunun cevabını bulamadım. Daha sonra jar formatını öğrenince sorunun yanlış olduğunu farkettim. Java programları exe olarak değil jar olarak dağıtılıyor. Jar dosyaları aslında zip dosyalarına eşdeğer. Aynı format kullanılıyor. Yani WinZip gibi yaygın programlar ile açılabiliyor. Bir programda geliştirilen bütün sınıflar ve ilgili diğer dosyalar bir jar dosyasında toplanıyor. Hem dosyalar “paketlenmiş” oluyor, hem de “java –jar” komutu ile bir exe programı gibi çalıştırmak mümkün. Java kurulumu doğru yapıldıysa, jar dosyalarını tek tıklama ile açabiliyoruz.

GUI uygulamalarında Java çok yetenekli. Swing library içindeki yüzlerce sınıf ile hemen her türlü ekran tasarımı mümkün. Önce JList sınıfı ile ekranda binlerce satırlık listeleri çok hızlı olarak gösterip seçim yaptırmayı öğrendim. Satır sayısı hızı hiç etkilemiyordu. Daha önceki programlama tecrübemde bir kaç yüz satırdan sonra ekrana yazmanın ne kadar yavaşladığını hatırladım. Sonra JTree sınıfı ile hiyerarşik listeler yapmayı öğrendim. Windows Gezgininde olduğu gibi disk yapısını böyle bir ağaç içinde gösterip klasörleri açıp kapamak çok zor değil. Gene binlerce satır açınca ekranda yavaşlama ya da titreme gözlenmiyor.

Kendi programlarımı ve çalıştığım bölümün eğitim dilini Java'ya taşımak güzel sonuçlar getiriyor.

__MAE