Česky   |  Deutsch   |  English   |  Español   |  Français   |  Indonesia   |  日本語   |  한글   |  Polski   |  Português (BR)   |  Türkçe   |  中文   |  正體中文   |  Your Language  
PlanetNetbeans
NetBeans Gezegeni Blogosferde yer alan NetBeans ile alakalı içerikleri bir araya getirmek üzere oluşturulmuştur.
Takip Edin
[RSS 1.0 Feed] [RSS 2.0 Feed]
[FOAF Subscriptions] [OPML Subscriptions]
NetBeans hakkında günlük mü tutuyorsunuz? NetBeans Gezegenine günlüğünüzü ekleyin.
Üyeler

Powered by:    Planet

Last updated:
February 09, 2010 09:49 AM
All times are UTC

sponsored by Sun Microsystems

visit NetBeans website
Sekkaşı'nın Bayırı » Yazilim - February 04, 2010 12:07 PM
Python Deneyimleri 2

Python Logo

Python Logo

  1. Fonksiyon tanımlamak için def anahtar kelimesini kullanıyoruz. Fonksiyon çağrılmadan önce tanımlanmış olmalı
  2. from … import … ifadesinde birinci importtan sonra gelen yere modül adı importtan sonra gelen yere de fonksiyon adı giriliyor. Yani fonksiyonu import etme durumu var. Modül ednilen şey de bağımsız .py uzantılı dosyalar.
  3. Anladığım kadarıyla fonksiyona parametreler pass-by-value yöntemiyle gönderiliyor.
     def fonksiyon(isim ):
            print "Fonksiyondan çağrıldı", isim
            isim = "hübele"
        isim = "hebele"
        fonksiyon(isim)
        print isim
    

    kod parçacığı

    Fonksiyondan çağrıldı hebele
    hebele
    

    çıktısını veriyor.

  4. Hemen bir recursive fonksiyon deneyip fibonacci yazıyorum. Sorun yok :)
    def fibonacci(number):
        if number == 0:
            return 0
        elif number == 1:
            return 1
        else:
            return number + fibonacci(number-1)
    
    print fibonacci(5)
    
  5. Modülleri import ederken from “modül_adı import *” kullandığımızda “__” ile başlayan fonksiyonları import etmiyormuş dikkat etmek gerek
  6. Klasör oluşturma,silme,klasör içeriğini listeleme,harici çalıştırılabilir dosya çalıştırma, process açma kapama gibi işlemlerios modülü aracılığıyla yapıyoruz. Hayati öneme sahip.
  7. Herhangi bir modülde hangi fonksiyonların olduğunu öğrenmek için dir(module_adı) kullanılıyor.
  8. Text dosya okumak,yazmak çok kolay. Sadece open, write, close gibi fonksiyonlar kullanılıyor. Ama open dedikten sonra size dönen değişkenin tipini anlayamadım doğrusu. Fonksiyonlar modül dönebiliyorlar mı?
  9.  dosya = open("testdosyasi.txt","w")
        print type(dosya)
    

    çıktı olarak type ‘file’ veriyor. Bu file tipi nerede tanımlanmış onu bilmem lazım.

  10. Matematikte üstlü sayıları hesaplamak için ** operatörü kullanılıyor

İlgili Yazılar:

  1. Python Deneyimleri 1 http://www.istihza.com buradaki python2.x derslerini takip ediyorum from … import...
  2. HSQLDB İpuçları HSQLDB’yi sunucu kipinde çalıştırmak için : java -cp ./hsqldb.jar...

Sekkaşı'nın Bayırı » Yazilim - February 02, 2010 11:25 AM
Python Deneyimleri 1

Python Logo

Python Logo

  1. http://www.istihza.com buradaki python2.x derslerini takip ediyorum
  2. from … import … ifadeleri sayfanın başına yazılmalıymış
  3. from’dan sonra gelen şeyin paket importtan sonra gelen şeyin sınıf tarzı bir şey olduğunu zannediyorum
  4. Türkçe karakterleri kullanabilmek için #_*_ coding: utf-8 _*_ yazıyoruz. Yine sayfamızın en başına ekliyoruz bunu
  5. print fonksiyonuna birden fazla argüman verirken , kullanıyoruz
  6. Kullanıcıdan girdi input() ve raw_input() fonksiyonları ile alınıyor. input() nümerik değer dönerken, raw_input() string değer dönüyor
  7. pre/post increment/decrement (++/–) operatörleri mevcut değil.
    a = 1
    while a < 10:
        print "Daha Bitmedi"
        ++a;
    

    ifadesi sonsuz döngüye sebep oluyor. Syntax hatası vermedi ilginç!

  8. döngülerde range() fonksiyonu kullanılıyor. Bu fonksiyon Matlab’dan tanıdık geldi bana.
  9. Java ve C++ dan bildiğim liste veri yapısı Python’da built in type olarak karşıma çıktı. Kullanımı çok kolay. append(), insert() gibi fonksiyonlarla düzenleme yapmak pratik.
  10. Liste içinde farklı veri tipleri barınabiliyor.
  11. Listeler + operatörü ile birleştirlebiliyor fakat – operatörü tanımlı değil
  12. pop() listenin son elemanını atıyor
  13. Listeler tersten indekslenebiliyor liste[-1] son elemanı gösteriyor. Büyük kolaylık
  14. Matlab’da bulunan aralık indeksleme yöntemi mevcut. Liste[1:3] 1. eleman dahil 3. eleman dahil olmamak kaydıyla aralıktaki elemanları belirtiyor
  15. Değiştirilemeten bir liste yapısı (tuple) var. Bunun tam olarak ne işe yaradığından emin değilim.
  16. HashTable benzeri sözlük veri yapısı da built in type olarak mevcut. Farklı bir özellik olarak tüm anahtarlar aynı tipte olmak zorunda değil. Scripting diye buna diyorlar herhalde

İlgili Yazılar:

  1. Python Deneyimleri 2 Fonksiyon tanımlamak için def anahtar kelimesini kullanıyoruz. Fonksiyon çağrılmadan...
  2. İkili Ağaç Veri Yapısı (Binary Search Tree) İkili ağaç veri yapısı, arama ve sıralama algoritmalarındaki hızı nedeniyle...

Sekkaşı'nın Bayırı » Yazilim - January 26, 2010 09:14 PM
Fruchterman-Reingold Graf Yerleşim Algoritması

Fruchterman-Reingold

Fruchterman-Reingold


Algoritma Adı:Fruchterman-reingold Graf Yerleşim Algoritması
Algoritma Türü:
Graf Yerleşim Algoritması
Açıklama:
Graf yerleşim algoritmaları, graf üzerinde bulunan köşelerin verilen alan içerisine en iyi şekilde yerleştirilmesini amaçlar. En iyi yerleşimi sağlamak için şu temel prensipler göz önünde bulundurulur :

  1. Köşeleri verilen alan içerisine homojen bir şekilde yay
  2. Kenar kesişmelerini en aza indirge
  3. Kenar uzunluklarını birbirine eşit tut
  4. Varolan simetriyi yansıt
  5. Alan büyüklüğüne adapte ol

Fructerman-Reingold algoritması bunların tamamını sağlayamasada 1,3 ve 4. prensipler bazında iyi bir performans sunar. Bu algoritma graf köşelerini birer çelik bilye kenarları ise birer yay kabul eden algoritmalar sınıfındandır. Graf yapısını fiziksel bir sisteme benzeterek enerjisini minimuma çekmeye çalışır. Gerçek fiziksel yay kuvvet hesapları kullanılmaz. Ayrıca gerçek sistemlerdeki itme ve çekme kuvvetlerini uygulamak yerine daha basit bir model takip edilir. İtme kuvvetleri tüm köşeler için hesaplanırken, sadece bağlı köşeler birbirini çeker. Algoritmanın pseudo kodu şu şekildedir :

  1. Her köşe üzerine düşen itici kuvvetleri hesapla
  2. Her köşe üzerine düşen çekici kuvvetleri hesapla
  3. Köşeleri hareket ettir
  4. Maksimum mesafeyi azalt
  5. Yukarıdaki 4 maddeyi yeterince tekrarla

Algoritma her basamakta köşelerin maksimum hareket mesafesini biraz daha daraltarak sisteme damper etkisi vermekte. Algoritmanın nasıl çalıştığını daha iyi anlamak için ufak bir uygulama geliştirdim. Kullanmak için öncelikle graf yapınızın kayıtlı olduğu dosyayı açmanız, sonrada animasyon menüsünden başlatı seçmeniz gerekli. Algoritmanın detaylarına ve uygulamaya aşağıdaki linkten ulaşabilirsiniz.
Note: There is a file embedded within this post, please visit this post to download the file.

İlgili Yazılar:

  1. K-Orta Kümeleme Algoritması Algoritma Adı: K-Orta Kümeleme Algoritması(K-Means Clustering) Algoritma Türü: Kümeleme...
  2. Sobel Kenar Algılama Algoritması Algoritma Adı:Sobel Kenar Algılama Algoritması (Sobel Edge Detection) Algoritma...
  3. Kabarcık Sıralama (Bubble Sort ) Algoritma Appleti Algoritma Adı: Kabarcık Sıralama Algoritması (Bubble Sort) Algoritma Türü: Sıralama...

Sekkaşı'nın Bayırı » Yazilim - January 17, 2010 10:16 PM
HSQLDB İpuçları

  1. HSQLDB’yi sunucu kipinde çalıştırmak için :
    java -cp ./hsqldb.jar org.hsqldb.Server -database.0 file:veritabanı dosya adı -dbname.0 veritabanı alias adı
    komutu girilmlidi. Bu komut hsqldb.jar dosyasının olduğu klasör içinde verilmiştir.
  2. HSQLDB’ye dosya kipinde bağlanırken veritabanı dosya yolunu jar dosyanıza göreceli verebilirsiniz. Jar dosyanız ile veritabaı dosyanız aynı klasörde bulunuyorlarsa veritabanı bağlantı Stringiniz :
    "jdbc:hsqldb:file:./veritabanı dosya adı" şeklinde olmalıdır.

İlgili Yazı Yok.

Sekkaşı'nın Bayırı » Yazilim - January 06, 2010 11:16 AM
Proje Bülbül

Bülbül pojesi Twitter API sarmalayan bir Java katmanı geliştirmek için başladığım bir proje. Uygulamalarınızdan Twitter mesajlarınıza, listelerinize ulaşabilir. Yeni mesaj yollayabilirsiniz. Proje halen gelişme aşamasında olup ilgili kaynaklara http://kenai.com/projects/bulbul adresinden ulaşabilirsiniz. Şu anda desteklenen API fonksiyonlarının listesi :

  • statuses/public_timeline
  • statuses/home_timeline
  • statuses/friends_timeline
  • statuses/user_timeline
  • statuses/mentions
  • statuses/retweeted_by_me
  • statuses/retweeted_to_me
  • statuses/retweets_of_me
  • statuses/show
  • statuses/update
  • statuses/destroy
  • statuses/retweet
  • statuses/retweets
  • users/show
  • users/search
  • statuses/friends
  • statuses/followers
  • POST lists(create)
  • POST lists id (update)
  • GET lists(index)
  • GET list id(show)
  • DELETE list id (destroy)

İlgili Yazı Yok.

Sekkaşı'nın Bayırı » Yazilim - December 26, 2009 05:15 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 37

Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun.
‘i3(3([i]>))’ komutu kaç numaralı şekli çizer?
A) (8)
B) (3)
C) (11)
D) (14)
E) (7)

CEVAP: Verilen komutu incelersek önce bir defa kuzeye ilerleyip arkasından 9 kere parantez içindeki komutu işletmemiz gerektiği anlaşılır. Parantez içindeki komut ise konumumuzu kaydetmeyi sonra ilerlemeyi sonra kaydettiğimiz konuma geri dönmeyi ve en sonunda sağa 45 derecelik bir dönüş yapmamızı söylüyor. Soru37
Yukarıdaki şekilden tosbağanın izleyeceği yolu takip edelim. Önce ilerle komutuyla 1′den 2′ye gidiyoruz. Kaydet komutu 2. noktada kuzey yönünü kaydeder. İlerle komutu 2′den 3′e gider. Kaydettiğimiz 2 noktasına geri geliyoruz. 45 derece sağa dönüş yapıyoruz. Konumumuzu kaydedip ilerleyerek 2′den 4′e gidiyoruz. Kaydettiğimiz 2 noktasına geri geliyoruz. 45 derece sağa dönüş yapıyoruz. Konumumuzu kaydedip ilerleyerek 2′den 5′e gidiyoruz.Bu işlemi 9 kere tekrarladığımızda yukarıdaki şekili elde etmiş oluyoruz. Doğru şıkkımız A.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 40 Aşağıdakilerden hangisi 13 numaralı şekli çizer? A) 4([i<[i]>[i]]>) B)...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 38 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘8(i3(>))’...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 39 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. Aşağıdakilerden...

Sekkaşı'nın Bayırı » Yazilim - December 13, 2009 03:57 PM
Birleştirmeli Sıralama (Merge Sort) Algoritma Appleti

Algoritma Adı: Birleştirmeli Sıralama Algoritması (Merge Sort)
Algoritma Türü: Sıralama Algoritması
Açıklama: Parçala yönet mantığıyla geliştirilmiş özyinelemeli (recursive) sıralama algoritmasıdır. Temel olarak üç aşamadan oluşur. Algoritma kendine verilen diziye ikiye böler. Birinci ve ikinci parçaların sıralanmasını sağlar. Son olarak da sıralı iki altdiziyi birleştirir. Örnek olarak 6 elemanlı 6 5 4 3 2 1 dizisini sıralayalım.

1. Adım : Dizi 6 5 4 ve 3 2 1 olmak üzere ikik alt diziye ayrılır.
2. Adım : 6 5 4 alt dizisi 6 ve 5 4 olmak üzere ikiye ayrılır.
3. Adım : 6 tek elemanlı olduğu için sıralanmış kabul edilir.
4. Adım : 5 4 dizisi 5 ve 4 olmak üzere ikiye ayrılır.
5. Adım : 5 ve 4 tek elemanlı olduklarından sıralanmış kabul edilir.
6. Adım : 5 ve 4 birleştirilir. Sıralama 4 5 şeklinde olur.
7. Adım : 6 ve 4 5 dizisi birleştirilir. Sıralama 4 5 6 şeklinde olur. İlk dizimizin ilk alt dizisi sıralanmış olur. 2
8. Adım : 3 2 1 dizisi 3 ve 2 1 olarak ikiye ayrılır.
9. Adım : 3 tek elemanlı olduğundan sıralı kabul edilir.
10. Adım : 2 1 dizisi 2 ve 1 olmak üzere ikiye ayrılır.
11. Adım : 2 ve 1 tek elemanlı olduklarından sıralanmış kabul edilir.
12. Adım : 2 ve 1 birleştirilir. Sıralama 1 2 olur.
13. Adım : 3 ve 2 1 dizileri birleştirilir. Sıralama 1 2 3 şeklinde olur. İlk dizimizin ikinci alt dizisi de sıralanmış olur.
14. Adım : 4 5 6 ve 1 2 3 alt dizileri birleştirilerek 1 2 3 4 5 6 sıralı dizisi oluşur. Algoritma sonlanır.

Algoritma Java Kodu :

int[] mergeSort(int[] siralanacakArray) {

        //eğer sıralanacak dizi uzunluğu 2'den küçükse
        //dizi sıralı sayılır
        if (siralanacakArray.length < 2) {
            return siralanacakArray;
        }

        //ikiye bölünen dizi boyutlarını hesaplıyoruz
        int ilkArrayBoyutu = siralanacakArray.length / 2;
        int ikinciArrayBoyutu = siralanacakArray.length - ilkArrayBoyutu;

        //iki alt diziyi ilklendiriyoruz
        int[] ilkArray = new int[ilkArrayBoyutu];
        int[] ikinciArray = new int[ikinciArrayBoyutu];

        //dizinin ilk parçasını bölüyoruz
        for (int i = 0; i < ilkArrayBoyutu; i++) {
            ilkArray[i] = siralanacakArray[i];
        }

        //Dizinin geri kalanını ikinci diziye atıyoruz
        int j = 0;
        for (int k = ilkArrayBoyutu; k < siralanacakArray.length && j < ikinciArrayBoyutu; k++, j++) {
            ikinciArray[j] = siralanacakArray[k];
        }

        //Böldüğümüz ilk diziyi sıralıyoruz
        int[] siraliIlkArray = mergeSort(ilkArray);

        //Böldüğümüz ikinci diziyi sıralıyoruz
        int[] siraliIkinciArray = mergeSort(ikinciArray);

        int m = 0, n = 0, y = 0;

        //Sıralı iki diziyi tekrar birleştiriyoruz.
        //Sırasıyla bütün elemanları karşılaştırarak küçük olanı önce
        //olmak kaydıyla ilk dizide birleştiriyoruz
        while (m < ilkArrayBoyutu && n < ikinciArrayBoyutu) {
            if (siraliIlkArray[m] <= siraliIkinciArray[n]) {
                siralanacakArray[y] = siraliIlkArray[m];
                m++;
                y++;
            } else if (siraliIlkArray[m] > siraliIkinciArray[n]) {
                siralanacakArray[y] = siraliIkinciArray[n];
                n++;
                y++;
            }
        }

        //Eğer ilk dizide eleman kalmışsa bunları listenin sonuna ekliyoruz
        while (m < ilkArrayBoyutu) {
            siralanacakArray[y] = siraliIlkArray[m];
            y++;
            m++;
        }

        //Eğer ikinci dizide eleman kalmışsa bunları listenin sonuna ekliyoruz
        while (n < ikinciArrayBoyutu) {
            siralanacakArray[y] = siraliIkinciArray[n];
            y++;
            n++;
        }

        //Sıralanmış diziyi dışarı veriyoruz.
        return siralanacakArray;
    }

İlgili Yazılar:

  1. Eklemeli Sıralama (Insertion Sort) Algoritma Appleti Algoritma Adı: Eklemeli Sıralama Algoritması(Insertion Sort) Algoritma Türü: Sıralama Algoritması...
  2. Seçim Sıralama(Selection Sort) Algoritma Appleti Algoritma Adı: Seçim Sıralama Algoritması(Selection Sort) Algoritma Türü: Sıralama Algoritması...
  3. Kabarcık Sıralama (Bubble Sort ) Algoritma Appleti Algoritma Adı: Kabarcık Sıralama Algoritması (Bubble Sort) Algoritma Türü: Sıralama...

Sekkaşı'nın Bayırı » Yazilim - December 11, 2009 05:54 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 38

Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun.
‘8(i3(>))’ Komutu kaç numaralı şekli çizer?
A) (12)
B) (10)
C) (4)
D) (5)
E) (2)

CEVAP : 39. ve 40. soruya nazaran daha kolay bir soru. Yapmamız gereken komutları takip ederek yolu çizmek. Verilen komutu incelersek 8 kere aynı komutların tekrar edilmesini istiyoruz. Tekrar edeceğimiz komut ise ileri gidip sağa 3*45 yani 135 derecelik dönüş yapmak. Yani tosbağamız sırasıyla aşağıda verilen köşelerden geçer :
soru38
Doğru seçenek B şıkkı.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 44 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? int i, a[]...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 39 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. Aşağıdakilerden...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 37 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘i3(3([i]>))’...

Sekkaşı'nın Bayırı » Yazilim - December 07, 2009 09:18 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 39

Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun.

Aşağıdakilerden hangisi (5) numaralı şekli çizer.
A) 4([<i2(3(>)i)]>>)
B) >4([i]>>i>>i)
C) 4([ii3(>>>i)]>>)]
D) 4([ii3(>>>i)]>)]
E) >4([i]>>i>i)

CEVAP: Şekil her ne kadar karmaşık görünsede aynı alt şeklin 4 kere tekrar edilmesinden oluşuyor. Yapı olarak 40. soruya çok benziyor. Biz 5 numaralı şeklin sol üst çeyreğindeki şeklin çizilmesine odaklanalım.
Soru 39
Yukarıdaki şekle göre algoritmamızı yazmaya başlayabiliriz. Tosbağamız kuzeye baktığından dolayı öncelikle 45 derecelik sola dönüş gerekli bize. İfademiz < şeklinde başlıyor. 1′den 2′ye gitmek için ilerliyoruz. İfademiz <i oldu. 2. köşeden saat yönünde 135 derecelik dönüş lazım. İfademiz <i>>> oldu. 2′den 3′e gitmek istiyoruz. İfademiz <igt;>>i oldu. Yine 3. köşede 135 derecelik dönüş yapmamız gerekiyor. İfademiz <i>>>i>>> oldu. 3′den 4′e gitmek istiyoruz. İfademiz <i>>>i>>>i oldu. Diğer tüm alt şekiller için aynı algoritma uygulanabilir. Bunu değişik şekillerde sadeleştirebiliriz. Örneğin <2(i3(>))i veya <i2(3(>)i) şeklinde sadeleştirebiliriz. Diğer şekilleride çizebilmek için bize 90 derecelik dönüşler gerekli. Tabi bunun için öncelikle ilk konumumuzu hatırlamalı ve alt şeklin çizilmesi bittiği zaman tekrar ilk konuma dönmemiz gerekir. Yani ifade [<i2(3(>)i)] şeklini alır. Bunun sonuna 90 derecelik dönüş ekleyip işlemi 4 kere tekrarlamamız 5 numaralı şeklin çizilmesini sağlayacaktır. İfademiz 4([<i2(3(>)i)]>>) şeklini aldı. Doğru seçenek A şıkkı.
Not: Çizim Dia yazılım ile üretilmiştir.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 40 Aşağıdakilerden hangisi 13 numaralı şekli çizer? A) 4([i<[i]>[i]]>) B)...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 38 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘8(i3(>))’...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 37 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘i3(3([i]>))’...

Sekkaşı'nın Bayırı » Yazilim - December 06, 2009 04:15 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 40

Soru40
Soru40-Devam

Aşağıdakilerden hangisi 13 numaralı şekli çizer?
A) 4([i<[i]>[i]]>)
B) 4([i<[i>>i]]>>)
C) >4([i<[i]>>[i]]>>)
D) 4([i<[i]>>[i]]>>)
E) 4([i<[i]>>[i]]>)

CEVAP: 13 Numaralı şekli incelediğimizde Y biçimli bir şeklin 4 defa 4 ana yönde tekrarlandığını görmekteyiz. Öyleyse yapmamız gereken Y biçimli çizim için gerekli olan algoritmayı bulup bunu 4 defa yinelemek olacaktır. Kuzeye bakan Y biçimli yolu çizmeden önce yerimizi kaydetmeliyiz ki geri dönüp diğer yönelere de çizim yapabilelim. O zaman ifademiz [] içinde yeralacaktır. İlk yapmamız gereken kuzeye bir çizgi çizmek. İfademiz [i] şeklini aldı. Bu noktada iki farklı yöntem uygulanabilir. Önce soldaki sonra sağdaki bacak çizilebilir, veya tersi olarak önce sağdaki sonra soldaki bacak çizilebilir. Şıkları incelediğimizde tüm seçeneklerde önce sola dönüş yapıldığını görüyoruz yani önce soldaki bacağın çizilmesi isteniyor. Sol 45 derecelik bir dönüş gerekli. İfade [i<] şeklini alır. Bu noktaya sağ bacağı çizmek için geri döneceğimizden kaydediyoruz. İfade[i<[] şeklini alır. Sol bacağı çiziyoruz. İfade [i<[i] şeklini aldı. Sağ bacağı çizmek için bir önceki konumumuza gidiyoruz. İfade [i<[i]] şeklini aldı. Yönümüzü sağ bacağa çevirmek için 90 derece sağa dönmemiz gerekiyor. Çift dönüş gerekli. İfademiz [i<[i]>>] şeklini aldı. Burada yerimizi kaydetmemize gerek olmamasına rağmen tüm seçeneklerde yer kaydedilmiş. İfademiz [i<[i]>>[] şeklini aldı. Sağ bacağı çiziyoruz. [i<[i]>>[i]. Önce sağ bacağı çizmeden önceki konumumuza daha sonra da ilk konumumuza geri dönüyoruz. İfademiz [i<[i]>>[i]] oldu. Şu anda kuzeye bakan Y şeklini tamamlamış bulunuyoruz ve tosbağamızın yönü kuzeye bakıyor. Burada yine iki farklı yol izlenebilir. Saat yönünde veya saat yönünün tersinde ilerlenebilir. Saat yönünde dönmeyi tercih ediyoruz. 90 derecelik dönüş gerekli. İfademiz [i<[i]>>[i]]>> şeklini aldı. Aynı algoritmayı 4 kere uygulamak istiyoruz. İfademiz 4([i<[i]>>[i]]>>) şeklini aldı. Doğru seçenek D şıkkı. Burada tekrar dikkatinizi çekmek istiyorumaynı şekli çizecek birden fazla algoritma olabilir. Burada seçenekleri takip ederek doğru sonuca ulaşabilirsiniz.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 39 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. Aşağıdakilerden...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 37 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘i3(3([i]>))’...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 49 Aşağıdaki programın derlenip calıştırılması sonucu ne basılır? int i=5, j=7;...

Sekkaşı'nın Bayırı » Yazilim - December 06, 2009 11:29 AM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 41

Aşağıdaki programın çalışması sonucu ekrana ne basılır?

int n=5, t, a, b, c;
main(void)
{ for (a=1; a<=n; a+=1)
     for (b=1; b<=a; b+=2)
        for (c=1; c<=b; c+=3) t += a+b+c;
   printf("%d",t); }

A) 36
B) 54
C) 67
D) 74
E) 93

CEVAP: 42. Soruyla aynı tip soru. Takip edeceğimiz yöntem 42. soru ile aynı olacaktır. Yine döngü değişkenlerinin alabilecekleri değerleri yazarak işe başlayalım.

a : 1, 2, 3, 4, 5
b : 1, 3, 5
c : 1, 4

a = 1 iken b = 1 c = 1 olabilir
a = 2 iken b = 1 c = 1 olabilir
a = 3 iken b = 1 c = 1 olabilir
b = 3 c = 1 olabilir
a = 4 iken b = 1 c = 1 olabilir
b = 3 c = 1 olabilir
a = 5 iken b = 1 c = 1 olabilir
b = 3 c = 1 olabilir
b = 5 c = 1 olabilir
b = 5 c = 4 olabilir
Buradan t değişkeninde birikecek olan değer = [1+1+1] + [2+1+1] + [3+1+1] + [3+3+1] + [4+1+1] + [4+3+1] +[5+1+1] + [5+3+1] + [5+5+1]+ [5+5+4] = 74 Doğru seçenek D.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 42 Aşağıdaki programın çalışması sonucu ne basılır? int n=5, t, a,...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 38 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘8(i3(>))’...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 39 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. Aşağıdakilerden...

Sekkaşı'nın Bayırı » Yazilim - December 03, 2009 06:41 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 42

Aşağıdaki programın çalışması sonucu ne basılır?

int n=5, t, a, b, c;
main(void)
{ for (a=1; a<=n; a+=1)
     for (b=1; b<=a; b+=3)
        for (c=1; c<=b; c+=2) t += a+b+c;
   printf("%d",t); }

A) 36
B) 54
C) 67
D) 74
E) 93

CEVAP : İçiçe geçmiş döngü soruları çetrefilli olabilir. Genelde bu tür sorular için herkesin ayrı bir stratejisi vardır. Benim stretejim döngü değişkenlerinin alabileceği değerleri listeleyip kontrol ifadelerini doğrulamaktır. Yukarıdaki soru için sırasıyla a, b, c değişkeninin alabileceği değerleri yazalım :

a : 1, 2, 3, 4, 5
b : 1, 4
c : 1, 3

a = 1 iken b = 1 ve c = 1 olabilir.
a = 2 iken b = 1 ve c = 1 olabilir.
a = 3 iken b = 1 ve c = 1 olabilir.
a = 4 iken b = 1 ve c = 1 olabilir.
b = 4 ve c = 1 olabilir.
b = 4 ve c = 3 olabilir.
a = 5 iken b = 1 ve c = 1 olabilir.
b = 4 ve c = 1 olabilir.
b = 4 ve c = 3 olabilir.
Buradan t değişkeninde birikecek olan değer = [1+1+1] + [2+1+1] + [3+1+1] +[4+1+1] +[4+4+1] +[4+4+3] + [5+1+1]
+ [5+4+1] + [5+4+3] = 67. Doğrue seçenek C.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 41 Aşağıdaki programın çalışması sonucu ekrana ne basılır? int n=5, t,...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 43 Aşağıdaki programın derlenip çalıştırılmasında ne olur? int i,j; main(void) {...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 50 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? #include <stdio.h> int...

Sekkaşı'nın Bayırı » Yazilim - December 02, 2009 07:20 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 43

Aşağıdaki programın derlenip çalıştırılmasında ne olur?

int i,j;
main(void)
{ for (;i<j<10; i++,j++) printf("*"); }

A)Sonsuz döngüye girip sürekli ‘*’ basar
B) 9 tane ‘*’ basar.
C) 45 tane ‘*’ basar.
D) Derleme hatası oluşacağından çalıştırılamaz
E) Çalışır ama hiç birşey basmaz.

CEVAP: Güzel bir operatör associativity sorusu. Associativity baskınlığı aynı olan operatörlerin sağdan sola mı soldan sağa mı hesaplanacağını belirtir. Burada döngü kontrol ifadesi olan

i<j<10

buna bir örnektir. < operatörünün hesaplanma yönü soldan sağadır. Yani yukarıdaki

i<j<10

ifadesinde öncelikle

i<j 

hesaplanır. < operatörü mantıksal (logical) bir operatör olduğu için yanlış olduğu durumda 0 doğru olduğu durumda 1 döner. Soruda i ve j'ye değer atanmadığından dolayı ilk olarak 0 değerini alırlar. Bundan dolayı

i < j 

ifadesi yanlış olur böylelikle 0 değeri döner.

i<j<10 

ifadesi

0 < 10 

olur ve döngüyü doğrular. i ve j değişkenleri döngünün her turunda eşit olacaklarından

i<j 

ifadesi her zaman 0 döncektir. Böylelikle döngü sürekli dönecektir.
Doğru şıkkımız A.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 50 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? #include <stdio.h> int...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 46 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? int a,b,c; int...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 41 Aşağıdaki programın çalışması sonucu ekrana ne basılır? int n=5, t,...

Sekkaşı'nın Bayırı » Yazilim - December 02, 2009 06:49 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 44

Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır?

int i, a[] = {1,2,3,4,5,6,7};
void f(int i, int j)
{ int temp;
  if (i==j) return;
  temp = a[i];
  a[i] = a[j];
  a[j] = temp; }
main(void)
{ f(1,2);
  f(2,6);
  f(6,1);
  for (i=0; i<7; i++) printf("%d ",a[i]); }

A) 1 2 7 4 5 6 3
B) 1 6 3 4 5 2 7
C) 1 2 3 4 5 6 7
D) 1 1 1 1 1 1 1
E) Derleme hatası oluşacağından, çalıştırılamaz.
CEVAP: Nispeten kolay bir soru. Öncelikle programda herhangi bir sentaktik hata yok. Tanımlanan f fonksiyonu bir değiş tokuş fonksiyonu (swap) olup parametrelerde verilen i. ve j. elemanların yerini değiştirir. Yapmamız gereken her f fonksiyonu çağrıldığında a dizisinin içeriğini yazarak takip etmek.
f(1,2) sonrası : 1 3 2 4 5 6 7
f(2,6) sonrası : 1 3 7 4 5 6 2
f(6,1) sonrası : 1 2 7 4 5 6 3
Görüldüğü gibi son durumda dizimizde sırasıyla 1 2 7 4 5 6 3 değerleri bulunur. Doğru seçenek A şıkkı.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 38 Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun. ‘8(i3(>))’...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 41 Aşağıdaki programın çalışması sonucu ekrana ne basılır? int n=5, t,...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 42 Aşağıdaki programın çalışması sonucu ne basılır? int n=5, t, a,...

Sekkaşı'nın Bayırı » Yazilim - November 24, 2009 07:05 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 45

char a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};

void x(char i,char j)
{ char s;
  s = a[i][j];
  a[i][j] = a[2-i][2-j];
  a[2-i][2-j] = s; }

main(void)
{ int i,j;
  for (i=0; i<4; i++) @@@@@@ ;
  for (i=0; i<3; i++) for (j=0; j<3; j++) printf("%d ",a[i][j]); }

Yukarıdaki programın çalıştırılması sonucu
9 8 7 6 5 4 3 2 1
basılması için @@@@@@ ile gösterilmiş yerde ne olaması gerekir?

A) x((i+1)%3-1,(i-1)%3+1)
B) x((i-1)%3+1,(i+1)%3-1)
C) x((i+1)%3,i/3)
D) x(i/3,i%3)
E) Bu seçeneklerden başka bir ifade.

CEVAP : Programımızın verilen girdideki elemanlarının sırasını tersine çevirmesi beklenmektedir. Bunun için x(i,j) fonksiyonumuz tanımlanmıştır. x(i,j) iki boyutlu dizimizde (i,j) elemanı ile (2-i,2-j) elemanının yerlerini değiştiren bir swap fonksiyonudur. Örneğin i = 0, j = 0 için fonksiyonumu z a[0][0] ile a[2][2] elemanlarının yerlerini değiştirir. Dizimizin tersine çevrilmesi için şu yer değiştirme işlemleri yapılmalıdır :
[0][0] <--> [2][2]
[0][1] <--> [2][1]
[0][2] <--> [2][0]
[1][0] <--> [1][1]
Yani x(i,j) fonksiyonumuzun alması gereken parametreler yukarıdaki değişimlerin sol tarafındaki değerlerdir. @@@@@@ ile gösterilen yer for (i=0; i<4; i++) döngüsünün altındadır. Buradan 1. sütundaki değerleri i/3 integer bölmesi ve i%3 mod işlemi ile elde edilebileceği görülmektedir. Doğru seçeneğimiz D olacaktır.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 44 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? int i, a[]...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 47 Aşağıdaki programın derlenip çalıştırılmasında ne olur? char i, *p="ABCDEFG", q[8]="GFEDCBA";...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 42 Aşağıdaki programın çalışması sonucu ne basılır? int n=5, t, a,...

Sekkaşı'nın Bayırı » Yazilim - November 20, 2009 11:22 AM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 46

Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır?

int a,b,c;
int main(void)
{ a = 9;
{ int b = 8;
c = b;
{ int c=7;
a = b;}}
printf("%d %d %d",a,b,c);}

A) 8 7 8
B) 8 0 8
C) 9 8 7
D) 7 0 8
E) Derleme hatası vereceğinden çalıştırılamaz.

CEVAP: Yine klasik sayılabilecek bir değişken kapsamı (scope) ve gölgeleme (shadowing) sorusu. C’de değişkenlerin kapsamları ve ömürleri kapsama alanı içinde bulundukları süslü parantezlerle {} belirlenir. Örneğin programın başında tanımlanan int a,b,c, değişkenleri herhangi bir parantez içinde olmadıklarından evrensel(global) değişkenlerdir ve kod içinde her yerden ulaşılabilirler. Ömürleri programın başlamasıyla başlar bitişiyle sona erer. main fonksiyonu gövdesi içinde içiçe iki kod bloğu var. Bunlardan birincisinde tanımlanan int b = 8 ifadesi global b değişkenini gölgeler. Yani bu ifadededen sonra gelen ve blok içinde kalan tüm b’ler bu tanımdaki b’ye işaret eder. yine aynı şekilde ikinci iç blokta tanımlanan int c = 7 ifadesi evrensel c değişkenini gölgeler. Bu kurallar gözönünde bulundurarak değişkenlerimize atanan değerleri iç bloktan dış bloğa doğru takip edersek kolayca çözüme ulaşırız. En iç bloktaki a = b ifadesi ile evrensel a değişkenine 8 değeri atanır. İlk bloktaki c = b ifadesi ile de aynı şekil de evrensel c değişkenine 8 değeri atanır. kod bloklarına dikkatlice bakılacak olursa evrensel b değişkenine herhangi bir değer atanmamıştır dolayısıyla varsayılan değer olarak 0 değerindedir. Doğru cevabımız B seçeneği olacaktır.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 43 Aşağıdaki programın derlenip çalıştırılmasında ne olur? int i,j; main(void) {...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 47 Aşağıdaki programın derlenip çalıştırılmasında ne olur? char i, *p="ABCDEFG", q[8]="GFEDCBA";...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 44 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? int i, a[]...

Sekkaşı'nın Bayırı » Yazilim - November 19, 2009 10:15 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 47

Aşağıdaki programın derlenip çalıştırılmasında ne olur?

char i, *p="ABCDEFG", q[8]="GFEDCBA";
main()
{ for(i=1; i<7; i++) q[i-1] -= p[i] % p[i-1];
  printf("%s",q); }

A) i değişkenine sayısal değer atandığından derleme hatası oluşur.
B) p değişkenine atanan ilk değerin türünden ötürü derleme hatası oluşur.
C) FEDCBAA
D) AAAAAAA
E) FFFFFFF

CEVAP : i değişkeni her ne kadar char olarak tanımlansada sayısal değer atanabilir çünkü C’de char değişkenler sayısal değer olarak hafızada tutulurlar. p değişkeni de karakter işaretçi (pointer) olarak tanımlanmış olup atanan ilk değerde sorun yoktur. Döngümüzü inceleyecek olursak i değişkeni 1′den 6′ya kadar değerler alır yani döngümüz 6 kere döner. q[i-1] -= p[i] % p[i-1]; ifadesinin sağ tarafına bakacak olursak p[i] mod p[i-1] hesaplanmıştır yani p dizisinde bir sonraki elemanın bir önceki elemana göre modu alınmıştır. Örneğin döngünün ilk turunda bu ifade ‘B’ % ‘A’ şeklinde olacaktır. p dizisini incelediğimizde birer karakter artarak giden bir seri olduğunu görürüz. Yani bu işlemin sonucu her daim 1 olacaktır. İfademiz q[i-1] -= 1 şekline gelir. Bu da q dizisindeki elemanları birer azaltmak manasına gelir. Doğru şıkkımız C olacaktır.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 46 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? int a,b,c; int...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 50 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? #include <stdio.h> int...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 45 char a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; void x(char i,char j) {...

Sekkaşı'nın Bayırı » Yazilim - November 19, 2009 09:11 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 48

Aşağıdaki programın derlenip calıştırılması sonucu ne basılır?

int i;
main(void)
{ printf("%d",(++i)++); }

Cevap: 49. soruya benzer bir soru. Pre increment ve post increment operatörlerinin kullanımı soruluyor. Bu öoperatörlerin aldığı parametreler lvalue cinsinden olmalıdır yani pointer veya variable cinsinden olmalıdır. Yani 9++ gibi bir ifade geçersizdir. Dolayısıyla (++i)++ ifadesinde (++i) değeri lvalue olamayacağı için ifade geçersizdir. Programımız derleme hatası verecektir.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 49 Aşağıdaki programın derlenip calıştırılması sonucu ne basılır? int i=5, j=7;...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 47 Aşağıdaki programın derlenip çalıştırılmasında ne olur? char i, *p="ABCDEFG", q[8]="GFEDCBA";...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 46 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? int a,b,c; int...

Sekkaşı'nın Bayırı » Yazilim - November 18, 2009 07:45 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 49

Aşağıdaki programın derlenip calıştırılması sonucu ne basılır?

int i=5, j=7;
main(void)
{ ((i>j) ? i : j) = 9;
  printf("%d %d",i,j); }

Cevap: Bu soru biraz detaylı bilgi gerektiren bir soru ve programla dilinden diline değişen cevaplara sahip. Ternary operator (üçlü operator) sentaksının bilinip bilinmediğini ölçen bir soru. C dilnde üçlü ?: operatörü koşullu ifadeler yazmakta kullanılır. Örneğin :

int a;
int b;
b=5;
a = (b > 3) ? 1 : 2;

burada b 3′ten büyük olduğu için ilk değer yani 1 değeri a değişkenine atanacaktır. Sorumuzda önemli olan ifade

((i>j) ? i : j) = 9;

ifadesidir. Burada üçlü operator asignment yani atama operatörünün solunda yer almaktadır. İfadenin sentaks olarak doğru olabilmesi için üçlü operatörün çıktısının lvalue olması beklenir. C dilinin standart versiyonunda yukarıdaki üçlü operatörün çıktısı i > j yanlış olduğu için j değişkeninin değeridir yani 7 dir, değikenin kendisi değildir. 7 = 9 gibi bir ifade geçerli bir ifade olmadığından programımız derleme hatasından dolayı çalışmayacaktır. Daha önce de belirttiğim gibi bu sorunun cevabı tamamen üçlü operatörün programlama dilinde nasıl gerçeklendiğine bağlıdır. Örneğin aynı programı c++ dilinde değiştirmeden derleyip çalıştırırsanız 5 9 değerlerinin basıldığını göreceksiniz. Bu ayrımın sebebi c++’da üçlü operatörün dönüş değerinin değişkenin değeri değil kendisi olmasıdır, bu da geçerli bir lvalue olduğundan program beklenen çıktıyı verir. Yine GNU C eklentilerinde de c++’a benzer bir yaklaşım sergilenmiş olup program 5 9 çıktısını verir. Aşağıdaki linkten daha ayrıntılı bilgiye ulaşabilirsiniz :
http://tigcc.ticalc.org/doc/gnuexts.html#SEC70

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 48 Aşağıdaki programın derlenip calıştırılması sonucu ne basılır? int i; main(void)...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 44 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? int i, a[]...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 43 Aşağıdaki programın derlenip çalıştırılmasında ne olur? int i,j; main(void) {...

Sekkaşı'nın Bayırı » Yazilim - November 18, 2009 06:58 PM
Ulusal Bilgisayar Olimpiyadı 2009 – Soru 50

Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır?

#include <stdio.h>
int x,y,z;
main(void)
{
for (x=1,y=2,z=3; x<10,y<5,z<10; x++,y--,z=x++);
  printf("*");
}

Cevap : Klasik bir dikkat sorusu. Hemen döngünün kaç kere dönmesi gerektiğini hesaplamak yerine sentaktik olarak programı incelememiz gerekir. For döngüsünün hemen sonundaki ; döngü gövdesi yerine geçmiştir. Yani aşağıdaki printf(”*”) satırı döngü dışındadır böylelikle sadece bir kere çalışmış olur. Cevabımız 1 adet * basılır olacaktır. Bu soruda döngü sonundaki ; kaldırılacak olursa cevabımız 5 adet * basılır olacaktır. Döngü sayısını kısıtlayan değişken z değişkenidir. z değişkeni sırasıyla 3,2,4,6,8 değerlerini alarak döngü koşulunu 5 kere sağlamış olacaktır.

İlgili Yazılar:

  1. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 46 Aşağıdaki programın derlenip çalıştırılması sonucu ne basılır? int a,b,c; int...
  2. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 47 Aşağıdaki programın derlenip çalıştırılmasında ne olur? char i, *p="ABCDEFG", q[8]="GFEDCBA";...
  3. Ulusal Bilgisayar Olimpiyadı 2009 – Soru 42 Aşağıdaki programın çalışması sonucu ne basılır? int n=5, t, a,...

Sekkaşı'nın Bayırı - October 30, 2009 06:42 PM
İki Tepe, İki Dağ Ortasında Bizim Bağ

Haşhaş

Haşhaş


Malumunuz ekmek kavgası, iş güç ve benzer nedenlerden dolayı ülkemizin nadide şehirlerinden birinde ve hatta en kalabalık olanında ikamet etmekteyim. İstanbul’un boğazıydı, tarihiydi, erguvanıydı, kargaşasıydı, kapkaççısıydı, tinercisiydi derken yedi tane tepesini unutmamak lazım gelir. Buraya “yedi tepe” İstanbul diyorlar. Bu yakıştırma öylesine yerleşmiş ki İstanbullu’ların hayatına, üniversitesinden tutun da giyim markasına (bknz. SevenHill) kadar her alanda karşınıza çıkması mümkün. İyidir güzeldir bu yakıştırma da nereden gelir acep diye biraz googling (internette araştırma yapmanın gavurcası) yaptıkan sonra İstanbul’un suriçi diye tabir edilen eski kısmının yedi adet tepe üzerine kurulu olduğunu öğrendim. Burada sizlere bu tepeleri tanıtacak değilim. O zaman ne diye anlatıyon bize bunları demeden önce bi düşünün bakalım. Bayat’ımızı, etrafını bi hayalinizde canlandırın bakalım. Hah işte şimdi oldu. Kardeşim İstanbul’un yedi tane tepesi varsa bizim de iki tepemiz üstüne üstlük iki tane de dağımız var. Çalca’mız, Dedegırağı’mız, Eğerli’miz, Asar’ımız var. Bunlar da yetmedi bi de ortalarında bağımız Bağyeri’miz var.

Çalca’dan başlamak istiyorum önce. Zira o sevdaların, sevdalıların mekanıdır. Bayat düğünlerinin olmazsa olmazı Çalca gezileri bu tepeyi özel kılar. Koskoca tepede kala kala 3 tane ağaç kalmış bunlarda zirvede. O üç ağacın altında sohbet edilir, ağaca para çakılır. Baraj yapımı sırasında buradan alınan taşlar kullanıldığı için bu tepe bana hep böğründen yaralanmış bir canavarı anımsatırdı. Sekkaşı’na uzak olması hasebiyle pek içli dışlı olamadık kendisiyle ama yine de Bayat coğrafyasının vazgeçilmezidir kendileri. Evimize yakın olmasından dolayı Dedegırağı daha bir hatıra doludur benim için. Bayat’a Ankara yönünden girerseniz üzerindeki gsm antenleriyle ilginizi hemen çekecektir. Bu günlerde eteklerine evler kondurulduğuna, üzerinden yollar geçtiğine bakmayın, küçüklüğümde kendi halinde yeşil mi yeşil bir tepeydi. Bugünkü evlerin yerinde ise harmanyerimiz vardı. Kendimi yeni yeni bildiğim yıllarda harmanyerinde top oynardık abilerle. Şimdinin çim sahalarına taş çıkaracak bir çayırı vardı o zamanlar. O zamanlar Dedegırağı’nın çocuklar için diğer bir manası ise patates közlemesiydi. Evden getirdiğimiz patatesleri bir kaya dibinde közler bir güzel yerdik. O günün izlerini ve islerini hala kayalar üstünde görmeniz mümkündür. Kışın ise Dedegırağı bizler için kızak pistine dönüşürdü. Tepenin dik yamacında hızlı bir kızaktan daha nefes kesici ne olabilir ki. Baharda uçurta uçurmak için mükemmel bir ortam hazırlardı çocuklara Dedegırağı. Kısaca çocukların cennetiydi Dedegırağı ve etekleri. Tepeleri yalnız bırakıp dağlarımıza selam duralım. Asar’ın heybeti, Eğerli’nin muhabbeti…
Asarın kendine has bir duruşu, asaleti olmuştur bana göre. Kaleyi andıran görünüşü insana gözdağı verir.
DEVAM EDECEK

İlgili Yazılar:

  1. Haşkeş Gafeliler Bütün serüven tohumun toprağa düşmesiyle başlar. Toprakta huzura kavuşan tohum...

Sekkaşı'nın Bayırı - October 27, 2009 07:54 PM
Tehlike Anında Camı Kırınız!

İmdat Çekiçi

İmdat Çekiçi


Korkmayın canım herhangi bir acil durum söz konusu değil. Yangın, sel felaketi de yok. Sadece moladan sonra çalışmayan bir otbüs tüm bu yazının esin kaynağı. Nerede, nasıl mı oldu? Ankara’da 23:58′de binilen Kamil Koç Otobüsleri A.Ş. ye ait Setra markalı otobüs saat 03:45 sularında mola verir. Veriş o veriş mola uzar, otobüs çalışmaz, yolcular sabırsızlanır…Aylardan ekim ayı olması hasebiyle ortada çok büyük sıkıntı yaratacak hava şartları yoktur. Mola yerinde olmamız da ayrı bir güvenlik hissiyatı uyandırır. Pekala otobüs kuş uçmaz kervan geçmez bir yerde de arıza yapabilirdi. Yaklaşık bir saat süren arayışlardan sonra rica minnet anlaşılan farklı bir taşımacılık firmasına ait otobüsle İstanbul’a yolcu edildik. Edildik edilmesine de sabah 05:30′da İstanbul’da olmamız gerekirken Selimiye Kışlası’nı saat 07:00 gibi görebildik. Burada söz konusu firmayı ağır şekilde eleştirmek istemiyorum, zira bu tür sorunlar çoğu firmanın başına gelebilir. Anlayış göstermek, empati yapmak gerekir gerekmesine de gözüm biletimdeki sigorta tutarı kısmına takılıyor. Biletin arkasını okuyup bu sigortanın sadece kazalarda ölümle veya yaralanmayla sonuçlanan durumlar için geçerli olduğunu anlıyorum. Aklıma şu soru geliyor otobüs kışın ortasında, dağın başında yolda kalsaydı ve insanlar hasta olsaydı, daha kötüsü donma tehlikesi atlatsaydı sigorta bir işe yarar mıydı? Varmak istediğim nokta otobüs firmalarımızın acil durumlar için herhangi bir acil eylem planının olmayışı. Hangi ülkede yaşıyoruz birader? Daha geçen günlerde İstanbul İkitelli civarında yaşanan sel felaketi devletin acil durum eylem planını gözler önüne serdi. Devlet bu haldeyken biz otobüs firmalarından plan program bekliyoruz. Olacak şey değil. Olmalı arkadaşım olmalı. Herkes 15 liraya yolcu taşırken 30 liraya yolcu taşıyorsan acil eylem planın da olmalı yedek otobüsün de.

İlgili Yazı Yok.

Sekkaşı'nın Bayırı - October 25, 2009 11:58 AM
Mobilya

dsc04295
dsc04294
dsc04293
dsc04292
dsc04296
dsc04291
dsc04288
dsc04290
dsc04289
dsc04287

İlgili Yazı Yok.

Sekkaşı'nın Bayırı - October 10, 2009 06:07 PM
Otobüste Fahiş Fiyatlı Akbile Hayır

İstanbul belediye otobüslerinde sıkça karşılaştığım ve bir türlü içime sindiremediğim modern haraç kesme operasyonu karşısında elimden geldiğince gerekli mercilere şikayette bulunmaya gayret ediyorum. Sizleri de bu konuda hassas olmaya davet ediyorum. İETT müdürlüğünden yapılan duyurulara kulak asmadan bilet parasından rant elde eden, “Bilet parası 1.50 lira değil mi?” demenize karşılık sizi devletin otobüsünden indirmeye çalışan ve bu yaptığının yanına kâr kaldığını zanneden şahısları bir nebze de olsa huzursuz etmeyi kendime görev biliyorum. Yaptığım bir şikayet üzerine bana

Başvurudan bilgi alınmış olup,fazla ücret alan şoför personel hakkında; Toplu İş Sözleşmesi hükümleri gereğince, gerekli işlem başlatılmıştır.

şeklinde bir cevap gönderildi. Başınıza buna benzer bir vaka gelirse şu ayrıntıları aklınızın bir köşesinde tutun ve iett@iett.gov.tr adresine şikayet maili atın:

  1. Otobüs Hat Numarası
  2. Otobüs plakası yada numarası : Bu numara genellikle otobüslerin arkasında 99-*** şeklinde yazılı olan numaradır.
  3. Otobüse hangi tarihte, saat kaçta, hangi duraktan bindiğiniz

İlgili Yazı Yok.

Sekkaşı'nın Bayırı » Yazilim - October 05, 2009 07:41 PM
Java Dersleri 12 – String İşlemleri

Bu dersimizde Java’nın ve diğer dillerin en temel elemanlarından olan String sınıfını inceleyeceğiz. Java’da String nesneleri immutable yani değiştirilemeyen nesnelerdir. Herhangi bir string nesnesi üzerinde değişiklik yapıldığında tamamen yeni bir nesne oluşturularak değişiklikler üzerine yansıtılır. Örneğin toUpperCase metodunu ele alalım :

 String s = new String("orhan");
 s.toUpperCase();
System.out.println(s)

şeklinde yazacağımız kod parçası istenilenin aksine “ORHAN” değil “orhan” yazacaktır çünki toUpperCase metodu üzerinde çalıştığı nesneye herhangi bir değişiklik yapamaz, yeni bir String nesnesi döner. İkinci satırımızı

s = s.toUpperCase();

olarak değiştirisek istenilen çıktıyı alabiliriz. Stringlerle ilgili ikinci hatırlamamız gereken konu ise karşılaştırma meselesidir. Stringler karşılaştırılırken mümkün olduğunca == ifadelerinden sakınılmalıdır. == ifadeleri referans karşılaştırması yaptığından
istenmeyen sonuçlara yol açabilirler. Örneğin :

String s = new String("orhan");
String s2 = new String("orhan");
if(s == s2)
 System.out.println("true");
else
System.out.println("false");

Yukarıdaki kod parçası beklenilenin aksine false yazacaktır. Karşılaştırdığımız iki nesne bellekte farklı yerlerde bulunduğundan dolayı == karşılaştırması yanlış dönecektir. Üçüncü satırımızı :

if(s.equals(s2))

olarak değiştirirsek doğru sonucu elde ederiz. equals() metodu alfabeye göre karşılaştırma yaparak sonuca ulaşır.
Diğer veri türlerinden String tipine dönüşüm yapmak için String sınıfının statik overload metodları olan valueOf() metodları kullanılır. Örneğin :

        int s = 50;
        String k = String.valueOf(s);
        System.out.println(k);

kod parçasında s integer değişkeninden k stringi elde edilmiştir.
Herhangi bir string nesnesinin belirli bir parçasını almak için substring() metodunu kullanabiliriz :

String s = new String("deneme");
String l = s.substring(1);

bu örnekte l string nesnemizin değeri “eneme” olacaktır. Burada substring() metodumuza ikinci parametre olarak bitiş indeksini de verebiliriz. Son olarak split() ve replace metodlarından bahsetmek istiyorum. Herhangi bir string nesnesini belirli ayraçlarla bölmek için split() metodunu kullanabiliriz. Örneğin dosyadan virgülle ayrılmış değerleri bir string nesnesine okuduğumuzu düşünelim :

String s = new String("Afyon,Bayat,İstanbul");
String[] result = s.split(",");

burada result string arrayimizde “Afyon”,”Bayat” ve “İstanbul” elemanları bulunacaktır. replace() metodu ise herhangi bir string nesnesi içinde geçen alt stringi istediğimiz başka bir stringle değiştirmeye yarar. Bu metoda özellikle HTML rapor hazırlarken şablonda gerekli yerleri doldurmada baş vurabilirsiniz. Örneğin :

String s = new String("Hava Durumu : @@@");
s = s.replace("@@@", "Bulutlu");

Son durumda s string nesnemizde “Hava Durumu : Bulutlu” değeri bulunacaktır.

İlgili Yazılar:

  1. Java Dersleri 7 – Çok Biçimlilik (Polymorphism) Bu dersimizde Java’nın nesne odaklı programlamanın olmazsa olmazlarından çok biçimliliği...
  2. Java Dersleri 5 – Kalıtım (Inheritance) Bu derste Java’nın nesne yönelimli programlamanın temeli olan kalıtım(Inheritance) kavramını...
  3. Java Dersleri 9 – Dosya Okuma/Yazma İşlemleri Bu derste sizlere Java’nın dosya işlemlerinden bahsedeceğim. Üç bölümlük serinin...

Sekkaşı'nın Bayırı » Yazilim - October 01, 2009 05:12 PM
Java Dersleri 11 – XML Okuma – Yazma İşlemleri

Bu dersimizde Java’nın XML işlemleri için kullanılan sınıflarının genel özelliklerini öğreneceğiz. XML hiyerarşik ve özyineli yapısı sayesinde günümüz uygulamalarında standartlaşmış bir veri iletim ve depolama biçimidir. Özellikle Web 2.0 ile önemi web tarafında da iyice ortaya çıkan XML biçimli dosyaları uygulamalarımızda işlemek kaçınılmaz olduğuna göre bu işin Java’da nasıl yapıldığına bir göz atalım. Geliştirdiğimiz uygulamaya göre XML’den veri okuyor olabileceğimiz gibi ürettiğimiz veriyi XML biçiminde yazmak da isteyebiliriz. Okuyup yazdığımız XML biçimi standartlaşmış, dünya çapında kullanılan bir biçim olabileceği gibi (RSS,XSPF), biçimini bizim geliştirdiğimiz veriler de olabilir. Örneğin bir çoklu ortam oynatıcısı(multimedia player) geliştirdiğimizi düşünelim. Oynatmak istediğimiz mp3 dosyaları olsun video dosyaları olsun bunların bir listede kayıtlı olması lazım. XSPF (XML Sharable Playlist Format) bu listeyi XML biçiminde saklamaya yarayan bir standarttır.

<?xml version="1.0" encoding="UTF-8"?>
<playlist version="1" xmlns="http://xspf.org/ns/0/">
 <trackList>
  <track>
   <location>LimeWire/Saved/Melihat Gülses - Incesaz - Cok Asigin Var Diyorlar.mp3</location>
  </track>
  <track>
   <location>file:///media/VM/MP3/Aldirma Gonul.mp3</location>
  </track>
 </trackList>
</playlis

Eğer bu biçimi desteklemek istiyorsak yukarıdaki XML dosya tipini okuyabiliyor olmalıyız. Java’da XML işlemlerini yapabilmek için bir org.w3c.dom.Document arayüzünü gerçekleyen bir nesne oluşturmalıyız. Bu nesne XML ağacını (XML içeriğine hiyerarşik yapısından dolayı verilen ad) tüm özellikleriyle hafızada tutar. Herhangi bir XML dosyasından Document nesnesi oluşturma işlemini ise DocumentBuilder sınıfı yapar. DocumentBuilder sınıfı soyut bir sınıf olduğundan farklı alt sınıfları tarafından farklı XML parçalama (parse) algoritmaları gerçeklenir. Bu algoritmalar iteratif yada öz yineli (recursive) olabilir. DocumentBuilder nesnesini ise DocumentBuilderFactory sınıfı üzerinden elde ederiz. Bu işlemin kodunu görelim :

        DocumentBuilder builder = null;
        Document doc = null;
        try {
              builder  = DocumentBuilderFactory.newInstance().newDocumentBuilder();
              doc = builder.parse(new File(fileName));
             }
        catch (ParserConfigurationException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (SAXException ex) {
            ex.printStackTrace();
        }

Document nesnesi elde edildikten sonra ihtiyacımız olan XML elemanlarına ulaşma kolaydır. Örneğin yukarıdaki örnek XML dosyasındaki etiketleri arasındaki veriyi almak istiyorsak Document arayüzünün getElementsByTagName metodunu kullanabiliriz. Bu metod bize bir düğüm listesi döndürecektir. Bu düğüm listesi üzerinden bir bir giderek tüm metinlerini okuyabiliriz. Eğer dosyanın tamamına düğüm düğüm ulaşmak istiyorsak XML’in ağaç yapısından yararlanmalıyız. Bunun için önce kök düğüme ulaşmalıyız. Document arayüzünün getDocumentElement metodu bize kök elemanı verecektir. Bu kök elemanın çocuk elemanlarına oradan da onların çocuklarına gidebiliriz. Yukarıdaki XML örneğinden location etiketleri arasındaki metni okumak istersek :

            NodeList songs = doc.getElementsByTagName("location");
               if(songs.getLength() != 0) {
                model = new PlayListModel();
            }
            for (int i = 0; i < songs.getLength(); i++) {
                model.addSong(songs.item(i).getTextContent());
            }

Burada getElementsByTagName ve getTextContent metodlarına dikkat edelim. getTextContent metodu Node arayüzüne dahil olup o düğümün metin içeriğini almaya yarar.
XML Yazma işlemi de yine okuma işlemi gibi Document nesneleri üzerinden yürütülür. Hafızadaki herhangi bir veriyi XML olarak yazabilmek için öncelikle bu veriden bir DOM ağacı oluşturmalıyız. Örneğin elimizdeki şarkı listesinden DOM ağacı oluşturmak için :

    private static Document createDOM(final IPlayListModel playListToBeExported) throws DOMException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = null;
        Document doc = null;
        Element root = null;
        try {
            builder = factory.newDocumentBuilder();
            doc = builder.newDocument();
            root = (Element) doc.createElement("playlist");
            doc.appendChild(root);
        } catch (ParserConfigurationException ex) {
            ex.printStackTrace();
        }

        if(root != null) {
            List songList = playListToBeExported.getSongList();

            for(int i = 0; i < songList.size(); i++) {
                Element el = doc.createElement("location");
                el.setTextContent((String)songList.get(i));
                // el.setNodeValue();
                root.appendChild(el);
            }
        }

        return doc;
    }

DOM ağacında herhangi bir düğüme çocuk düğüm eklemek için appendChild metodunu, herhangi bir düğümün metin içeriğini girmek için ise setTextContent metodunu kullanıyoruz. DOM ağacımızı dosyaya yazmak için ise javax.xml.transform paketi sınıflarını kullanabiliriz. Bu paketten Source, Result arayüzleri Transformer soyut sınıfı aracılığıyla herhangi bir DOM ağacını çeşitli çıktılara yönlendirebiliriz. DOM ağacımızı dosyaya yazmak için :

  private static void writeDocToFile(Document doc, String fileName) {
        try {
            JFileChooser ch = new JFileChooser();
            if (ch.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
                Source source = new DOMSource(doc);
                File file = new File(ch.getSelectedFile().getAbsolutePath());
                Result result = new StreamResult(file);
                Transformer xformer = TransformerFactory.newInstance().newTransformer();
                xformer.transform(source, result);
            }
        } catch (TransformerConfigurationException e) {
        } catch (TransformerException e) {
        }
    }

İlgili Yazılar:

  1. Java Dersleri 9 – Dosya Okuma/Yazma İşlemleri Bu derste sizlere Java’nın dosya işlemlerinden bahsedeceğim. Üç bölümlük serinin...
  2. Java Dersleri 6 – Arayüzler ve Gerçeklenmesi (Interface and Implementation) Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır. Bir...
  3. NetBeans Video Ders (Screencast) #4 İkilik (Binary) Dosya Okuma Sitede yaptığım anketler sonucunda java video derslerimizin sesli anlatımlı...

Sekkaşı'nın Bayırı » Yazilim - September 17, 2009 08:30 PM
Sobel Kenar Algılama Algoritması

sobel2
Algoritma Adı:Sobel Kenar Algılama Algoritması (Sobel Edge Detection)
Algoritma Türü: Görüntü İşleme Algoritması
Açıklama: Sobel kenar algılama algoritması görüntü işleme algoritmaları arasında en çok bilinenlerdendir. Verilen herhangi bir resimdeki kenarları elde etmeye yarar. Böylelikle resimler içindeki isteğe yönelik nesneler algılanıp gerekli işlemler yapılabilir. Sobel algoritmasında iki adet konvolusyon kerneli kullanılır. Bunlardan birisi yatay kenarları bulmaya yararken diğeri dikey kenarları bulmaya yarar. Bu kerneller görüntü içerisinde ışık yoğunluk değişiminin ani olduğu yerleri belirlememize yarar. Bir nevi türev yaklaşımıdır. Bu kerneller sırasıyla :

1 0 -1
2 0 -2
1 0 -1
Yatay Sobel Kernel
1 2 1
0 0 0
-1 -2 -1
Dikey Sobel Kernel

şeklindedir. Gradyanlar (kernel uygulamasından sonraki yoğunluk değerleri) herhangi bir pixel için hesaplandıktan sonra büyüklükleri hesaplanarak kenarlar bulunmuş olur. Gradyan büyüklüğü iki gradyanın kareleri toplamının karekökü olarak hesaplanır. Java’da geliştirilmiş örnek bir sobel filtresini aşağıdan indirebilirsininiz.
Note: There is a file embedded within this post, please visit this post to download the file.

İlgili Yazılar:

  1. K-Orta Kümeleme Algoritması Algoritma Adı: K-Orta Kümeleme Algoritması(K-Means Clustering) Algoritma Türü: Kümeleme...
  2. Seçim Sıralama(Selection Sort) Algoritma Appleti Algoritma Adı: Seçim Sıralama Algoritması(Selection Sort) Algoritma Türü: Sıralama Algoritması...
  3. Kabarcık Sıralama (Bubble Sort ) Algoritma Appleti Algoritma Adı: Kabarcık Sıralama Algoritması (Bubble Sort) Algoritma Türü: Sıralama...

Sekkaşı'nın Bayırı - September 04, 2009 10:27 AM
Her Çocuğun Rüyası Charlie’nin Çikolata Fabrikası

Charlie'nin Çikolata Fabrikası

Charlie'nin Çikolata Fabrikası


Sizi bilmem ama ben küçükken ekmek üstü sarelle ziyafetine bayılırdım. Malum ailenin maddi durumu da pek öyle ahım şahım olmadığından annem o sarelleden maksimum sayıda ekmek dilimi çıkarmakta ustaydı. Peki ya annem evde olmayınca ne olurdu. Tabi ki sarelle kavanozuna bir iki parmak daldırılırdı. O dönemlerde insan çikolata denizinde balık olmak ister de anca ekmek dilimiyle yetinirdi. İşte Charlie’nin Çikolata Fabrikası bu felsefe üzerine bina edilmiş eğitici yanı ağır basan bir film. Fantastik filmlerin meşhur üçlüsü Tim Burton, Johnny Depp ve Helena Bonham Carter’ın hayata geçirdiği filmde ufak bir veledin dünyanın en meşhur çikolata fabrikası olan Wonka diyarında geçirdiği yolculuk anlatılmakta.

Filmin eğitici yanına pek değinmek istemiyorum. Açgözlülüğün kötülüğü üzerine çocuklara sosyal mesajlar vermeye çalışılıyor filmde. Kısaca

Mütevazi ol insan evladı

demek istiyor masal yazarı. O değil de asıl fantastik üçlüyü yazmak istiyorum. Bu arakadaşlar galiba çocukluklarını yaşayamamışlar, nerede masal var onu beyaz perdeye yapıştırıyorlar. Sanki gerçek hayatta değil bu şahıslar kendileri de birer masal kahramanı. Şu Johnny Depp denen adamın bir kadın kılıklı erkek rolü oynamadığı kalmıştı onu da bu filminde gördüm. Nedir o gülüş, o saçlar falan. Bir de bu adamın çocukken çikolata yiyememek içine oturmuş, sonra da oturmuş çikolatadan dünya kurmuş. Helena bacı için ise söyleyeceğim tek şey var artık o siyah eldivenlerden kurtulma vakti geldi. Hatun annesinden gotik doğmuş sanki, tarz olayı bu kadar da abartılmaz ki. Bu ablanın siyah elbise giymediği şöyle hanım hanımcık giyindiği, gotik takılmadığı bir film bilen varsa benimle paylaşsın lütfen. Çağımızın masal dedesi Tim Burton’a diyecek laf yok.
Şaka bi yana yaptığı her işte bu kaliteyi yakalayabilen bir takım var mı bilmiyorum. Takdir ediyorum, takip ediyorum, severek izliyorum.

İlgili Yazı Yok.

Sekkaşı'nın Bayırı » Yazilim - August 23, 2009 12:43 PM
NetBeans Video Ders (Screencast) #4 İkilik (Binary) Dosya Okuma

Gerekli NetBeans Sürümü
Sitede yaptığım anketler sonucunda java video derslerimizin sesli anlatımlı olması gerektiğine karar verdim. Video derslerle ilgili yaptığım ikinci ankette ise derslerin NetBeans ile anlatılması çoğunluk tarafından istenmekte. Bu doğrultuda ilk video dersimi yayınlıyorum. Bu video derste mp3 dosyalarından id3 etiketlerini okuyarak binary dosya okuma yöntemini göstereceğim. Sesli anlatım nispeten yazılıya göre zor olduğundan kötü olabilir. Yorumlarınızı bekliyorum.

NetBeans Video Ders #4 Bölüm 1

NetBeans Video Ders #4 Bölüm 1



DEVAM EDECEK

İlgili Yazılar:

  1. Netbeans Video Ders (Screencast) #1 JUnit Birim Test Video dersi izlemek için resme tıklayın. ...
  2. NetBeans Video Ders (Screencast) #2 GUI Tasarımcısı Özellik Bağlama Kipi Video dersi izlemek için resme tıklayın. ...
  3. NetBeans Video Ders (Screencast) #3 Kod Şablonları Video dersi izlemek için resme tıklayın. ...

Sekkaşı'nın Bayırı - August 11, 2009 05:20 PM
Berber Dükkânından Diyaloglar

Berber Dükkânından Diyaloglar

Berber Dükkânından Diyaloglar

Meseleye giriş yapmadan belirtmek isterim ki bu yazı blogum için bir ilk teşkil ediyor. 2007 yılında yayına başlayan Sekkaşı’nın Bayırı’nda prensip gereği şimdiye kadar günlük tarzında herhangi bir yazı yayımlamadım. Bu yazıyla başlayarak bu kuralı tarihin tozlu sayfalarına göndermeyi planlıyorum.

Hafta sonu arkadaşımın düğününe icabet etmek amacıyla Anadolu’muzun güzide şehirlerinden birindeydim. İstanbul’dan gecenin geç saatlerinde başladığım otobüs yolculuğu ertesi sabahın erken saatlerinde sonlandı. Şehrin adını özellikle zikretmek istemiyorum. Pek saçına sakalına özen gösteren birisi olmadığım için yine sakal traşı olmadan yola çıkmıştım. Sonra birden aklıma “düğün” sebebiyle orada olduğum dolayısıyla da traş olmam gerektiği aklıma geldi. Şöyle bir çarşı turu attıktan sonra mağazaların, dükkânların büyük çoğunluğunun kepenk kaldırmadığını gördüm. Tamam hafta sonu olabilir, pekâla sabah 9 olabilir ama benim esnaflık anlayışım dükkânı erken açmak olduğundan durumu garipsedim. 15 20 dakikalık bir yürüyüşten sonra nihayet açık bir berber dükkânı bulup daldım içeri. 3 koltuklu klasik bir berber dükkânıydı burası. Koltuklardan birisi doluydu. Hemen ortadaki boş koltuğa kuruldum. Klasik soruya :

- Sakal

diyerek cevap verdim.

- Şu saçları da geriye tararsan tam olacak.

Sabah rahatsız olduğum konuyu sordum berbere:

- Buraların yabancısıyım. Hep böyle geç mi açar esnaf dükkânını buralarda? Sabahtan beri açık berber dükkânı arıyorum.
- Tok esnaf

Öyle ya tok esnaf paraya ihtiyacı yok. Ülkenin hatta dünyanın içinde bulunduğu durumu düşünürsek bazılarına kriz teğet geçiyor hakkaten. Berber sakalımı sabunlarken yan koltuğa bir müşteri oturuyor. Konuşmalardan müşterinin düğün hazırlığı yapan damat adayı olduğunu anlıyorum. Dükkânın yerli müşterisi olduğu da çıkıyor kelimelerden. Bu arada berber iklisi koyu bir muhabbette dalıyor aralarında:

Berber1 : Abi tatile gidecem ben.
Berber2 : Git git iyi olur. Nereye gidecen?
Berber1 : Marmaris yada Turgutreis. Neresi daha güzel sence ?
Berber2 : Hadi len ordan sen daha şuraya pikniğe gidemezsin ne
          Marmaris'i  :)  ?
Berber1 : Abi ciddiyim neresi güzel sen gitmiştin oralara.
Berber2 : Marmaris güzel. Hem halk plajı var beleş.
Berber1 : Abi para mühim değil. Hem öyle ben halk malk uğraşamam
          kalabalık olur.
Berber2 : Ulan cebinde harçlık yok bir de halk malk uğraşamam diyosun.
          Gir özel plaja bayıl giriş parası, bayıl şemsiye parası,
          bayıl şezlong parası göreyim ben seni.
          Hem Turgutreis'de cami yok.
Berber1 : Küçük mescid de mi yok abi.
Berber2 : Yok
Berber1 : Abi girerim otele kılarım namazı ne olacak.
Berber2 : He bi de plajdan otele namaz kılmaya gideceksin.

Parasını halktan kazanan esnafımız bile halk olmaktan bıkmış baksanıza halk plajına gitmeye imtina ediyor. Sakal traşım bitip saçım tarandıktan sonra borcumu sorup “K” lirayı berbere ödedim. Günün kalan kısmında damat adayı arkadaşımla buluştuk. Sabah çorba faslından sonra arkadaşı damat traşı olmak üzere kuaföre götürdük. Berber değil ha kuaför, yanlış anlaşılmasın. Berberle kuaför arasındaki farkı söylememe gerek yok zaten çalışanlar arasındaki yumuşaklık katsayısı kendini zonk diye belli ediyor. Kuaför salonu her ne kadar
daha çekiciymiş gibi görünse de size garanti edebilirim ki berber dükkânı kuaför salonundan daha bakımlıydı.
Her neyse arkadaşın damat traşını bitirdikten sonra borcumuzu sorduk tekrar. “10K” borcu duyunca biraz yadsımadık değil. Tamamdır damat traşıdır, fondotenidir, hedesidir, hödösüdür lakin insaftır. Altı üstü bir traştır. Ne kadar pazarlık ettiysek de “10K” lira borcumuzu ödedik.
Velhasılı kelam berber dükkânında yan koltukta traş olan damat adayımız “K” liraya traş olurken, kuaför salonunda traş olan damat adayı arkadaşım “10K” liraya traş oldu. Yani berber abim sen ne kadar benim halk plajında yerim yok desen de halksın hem de dibine kadar. İyi ki öylesin orası ayrı mesele. Kuaför salonundaki arkadaşa da bir tavsiye biraz daha halk olsun. Hem kim bilir halk olmak yarar belki.

İlgili Yazı Yok.

Sekkaşı'nın Bayırı » Yazilim - August 04, 2009 10:33 AM
Java Dersleri 9 – Dosya Okuma/Yazma İşlemleri

Bu derste sizlere Java’nın dosya işlemlerinden bahsedeceğim. Üç bölümlük serinin ilkinde genel dosya girdi çıktı mekanizmasından bahsedip metin dosyalarını nasıl okuyup yazabileceğimize bakacağız. Java’da üm girdi çıktı işlemleri, bu dosya olabilir, network soketi olabilir, Stream (akım) sııfları vasıtasıyla gerçekleştirilir. Stream sınıflarını içerisinden veri akan yollar şeklinde düşünebilirsiniz. Bu sınıflar içerisindeki verilere ve buffering (tamponlama) vs gibi özelliklerine göre birbirlerinden ayrılırlar. Genel olarak taşıdıkları verilere göre üçe ayrılırlar:

  1. İkilik Veri Akımları (Byte Streams) : İkili tipteki dosyaları okuyup yazmakta kullanılırlar
  2. Karakter Akımları(Char Streams): Metin belgeleri okuyup yazmakta kullanılırlar
  3. Nesne Akımları(Object streams): Serializable olan Java nesnelerini okuyup  yazmakta kullanılırlar

Bu sınıfların dışında akım sınıflarının özelliklerini değiştiren sarmalayıcı akım sınıfları da mevcuttur. Örneğin BufferedReader sınıfı herhangi bir Reader sınıfını sarmalayarak tamponlama özelliği katar.

İlk olarak karakter akımlarını incelemeye çalışalım. Yazılım geliştirme sürecince çokça karşımıza çıkan metin dosyalarını Java’da okumak için Reader soyut sınıfından türeyen InputStreamReader alt sınıfı olan FileReader sınıfı kullanılır. Dosyaya yazmak için ise API’de bu sınıfın muadili FileWriter sınıfı mevcuttur. Örnek olarak herhangi bir metin dosyasının satır başlarına satır numarasını ekleyen şu kod satırlarını inceleyelim:

    FileWriter fw = null;
                try {
                    int lineNumber = 1;
                    FileReader fr = new FileReader(fileName);
                    fw = new FileWriter("linenumber.txt");

                    int c = fr.read();
                    do {
                        if ((char) c == '\n') {
                            lineNumber++;
                            fw.write(c);
                            fw.write( Integer.toString(lineNumber));
                        }
                        else
                        {
                            fw.write(c);
                        }

                        c  = fr.read();
                    } while (c != -1);

                } catch (IOException ex) {
                    Logger.getLogger(FileIOUI.class.getName()).log(Level.SEVERE, null, ex);
                } finally {
                    try {
                        fw.close();
                    } catch (IOException ex) {
                        Logger.getLogger(FileIOUI.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }

Metin dosyamızı okumak için FileReader sınıfını kullandık. Öncelikle okumak istediğimiz dosya adını kullanarak bir FileReader nesnesi oluşturup, bu nesne üzerinde read() metodunu çağırdık. Bu sınıfın dosyadan okumak için birden fazla metodu bulunmakla beraber burada dosyayı karakter-karakter okumamızı sağlayan int dönüş değerine sahip olan read() metodunu kullandık. Bu metodun dışarıya verdiği int tipindeki değişken aslında char tipinde bir değişken olduğundan tür dönüşüm operatörünü uygulamamızda bir sakınca yoktur yani :

 int c = fr.read();
 if ((char) c == '\n') {
}

kullanımı doğrudur. Burada son olarak dikkat etmemiz gereken husus read() metodunun dosya sonuna geldiğinde değer olarak -1 döndürmesidir. Yani dosya sonuna gelip gelmediğimizi dönüş değerinin -1 olup olmadığını kontrol ederek anlayabiliriz.

Metin dosyası yazmak için ise FileWriter sınıfını kullandık. Yine bu sınıfta da dosyaya yazmak için birden fazla metod bulmak mümkün. Biz burada yine karakter-karakter yazmamıza olanak sağlayan write(int) metodunu kullandık. Sadece satır başlarına yazdırmak isediğimiz satır sayısını String tipine dönüştürüp write(String) metodunu kullanarak dosyaya yazdık. Bu iki farklı kullanımı gösterirsek :

int c = fr.read();
if ((char) c == '\n')
{
	lineNumber++;
        fw.write(c);
        fw.write( Integer.toString(lineNumber));
}

Metin dosyalarını işlerken genellikle karakter-karakter okuma/yazma yerine kelime-kelime okuma/yazma yada satır okuma/yazma işlemlerini kullanırız. FileReader ve FileWriter sınıfları bu yeteneklere sahip değildir dolayısıyla bunun için sarmalayıcı sınıflar mevcuttur. Bu sınıfları ve yeteneklerini bir sonraki derste anlatacağım.

İlgili Yazılar:

  1. Java Dersleri 11 – XML Okuma – Yazma İşlemleri Bu dersimizde Java’nın XML işlemleri için kullanılan sınıflarının genel özelliklerini...
  2. NetBeans Video Ders (Screencast) #4 İkilik (Binary) Dosya Okuma Sitede yaptığım anketler sonucunda java video derslerimizin sesli anlatımlı...
  3. Java Dersleri 4 – Erişim Denetleyicileri (Access Modifiers) Bu dersimizde Java’nın metodlar ve sınıflar üzerinde erişim kurallarını düzenleyen...

Sekkaşı'nın Bayırı » Yazilim - July 13, 2009 06:49 PM
Java Dersleri 8 – İç, Gömülü ve İsimsiz Sınıflar (Inner, Nested and Anonymous Classes)

Bu dersimizde Java’nın gömülü sınıf yapısını öğreneceğiz. Java programlama dili kullanıcıya bir sınıf içerisinde başka bir sınıf tanımlama olanağı sağlar. Bu tür sınıflara Gömülü Sınıf (Nested Class) adı verilir. Gömülü sınıflar statik ve statik olmayan gömülü sınıflar olmak üzere ikiye ayrılırlar. Statik olmayan gömülü sınıflara İç Sınıf(Inner Class) adı verilir. Gömülü sınıfların üç temel faydası vardır. Bunlar :

  1. Sınıfların Mantıksal Gruplanması : Ortak iş yapan sınıfların bir arada bulunmasını sağlayarak daha sağlıklı API’ler oluşturmanızı sağlar
  2. Daha İyi Kapsülleme : Sınıf değişkenlerinin private kalmasını sağlayarak daha iyi kapsülleme sağlar
  3. Kod Okunabilirliği : Üst seviye sınıflar altında iş gören gömülü sınıflar kod okunabilirliğini arttırır.

Gömülü sınıf hiyerarşisi aynı zamanda arayüzler için de geçerlidir. Yani arayüzlerde birbirleri içerisinde tanımlanabilirler. Java JDK içerisinde gömülü sınıf kullanımına örnek olabilircek çok sayıda sınıf ve arayüz vardır. Bunlardan bir tanesini inceleyelim :

//üst seviye arayüz tanımı
public interface Map<K ,V> {
int size();
boolean isEmpty();
boolean containsKey(Object key);
boolean containsValue(Object value);
V get(Object key);
V put(K key, V value);
V remove(Object key);
void putAll(Map<? extends K, ? extends V>m);
void clear();
Set<K> keySet();
Collection<V> values();

//gömülü arayüze referans var
Set<Map.Entry<K, V>>; entrySet();

//gömülü arayüz tanımı
interface Entry<K ,V>
{
K getKey();
V getValue();
V setValue(V value);
boolean equals(Object o);
int hashCode();
}

boolean equals(Object o);
int hashCode();
}

Örnekte görüldüğü üzere Map arayüzünün altında Entry gömülü arayüzü tanımlanmış ve

//gömülü arayüze referans var
Set<Map.Entry<K, V>>entrySet();

metod imzasında gömülü arayüz kullanılmıştır. Bu kullanımdan yola çıkarak gömülü arayüz/sınıf tanımlarına nasıl ulaşabiliriz onu görelim. Burada yine statik gömülü sınıflar ve iç sınıflar arasında ayrım yapmalıyız. Statik gömülü sınıftan bir nesne oluşturmak istiyorsak :

ÜstSeviyeSınıf.StatikGömülüSınıf  s  = new ÜstSeviyeSınıf.StatikGömülüSınıf();

Statik gömülü sınıftan bir nesne oluşturmak için üst seviye sınıftan nesne oluşturmamıza gerek yoktur. Oysa ki iç sınıflar üst seviye sınıf olmadan oluşturulamazlar. Yani statik olmayan iç sınıfların varlığı üst seviye sınıfa bağlıdır. Herhangi bir iç sınıfdan nesne oluşturmak için ise :

ÜstSeviyeSınıf s = new ÜstSeviyeSınıf();
ÜstSeviyeSınıf.İçSınıf i = s.new İçSınıf();

Burada en çok dikkat etmemiz gereken kullanım s.new kullanımıdır.

Sınıf tanımı veya herhangi bir metod tanımı içinde isim vermeden yeni bir sınıf tanımı yapılabilir. Bu şekilde tanımlanan sınıflara isimsiz (anonymous) sınıflar denir.  İsimsiz sınıflar sadece tanımlandıkları yerde kullanılırlar.  En klasik kullanım alanları …Listener (ActionListener,MouseMotionListener vs) gerçeklemeleridir. Örneğin NetBeans tarafından düğme kontrolü için üretilen kodları inceleyelim :

jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

Burada addActionLisener metodu parametre olarak ActionListener arayüzünü gerçekleyen bir nesne alır.  Bu nesne isimsiz olarak tanımlanıp ActionListener’da gerçeklenmesi gereken actionPerformed metodunu içerir. Görüldüğü gibi sadece sınıf tanımı yapılıp sınıfa herhangi bir isim verilmemiştir.  İsimsiz sınıf tanımlama sentaksı

new Sınıfİsmi/Arayüzİsmi () {}

şeklindedir. Eğer Sınıfİsmi verilmişse isimsiz sınıf bu sınıftan türer. Eğer Arayüzİsmi verilmişse isimsiz sınıf bu arayüzü gerçekler.

İlgili Yazılar:

  1. Java Dersleri 6 – Arayüzler ve Gerçeklenmesi (Interface and Implementation) Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır. Bir...
  2. Java Dersleri 7 – Çok Biçimlilik (Polymorphism) Bu dersimizde Java’nın nesne odaklı programlamanın olmazsa olmazlarından çok biçimliliği...
  3. Java Dersleri 5 – Kalıtım (Inheritance) Bu derste Java’nın nesne yönelimli programlamanın temeli olan kalıtım(Inheritance) kavramını...

Sekkaşı'nın Bayırı » Yazilim - June 24, 2009 06:12 PM
Java Dersleri 7 – Çok Biçimlilik (Polymorphism)

Bu dersimizde Java’nın nesne odaklı programlamanın olmazsa olmazlarından çok biçimliliği nasıl gerçeklediğini öğreneceğiz. Çok biçimlilik aynı tip değişken üzerinden birbirinden farklı davranışlar elde etme tekniğidir. Programlama dillerinin dinamik bağlama (dynamic binding) yada koşum zamanı bağlama (runtime binding) özelliğinden faydalanılarak hayata geçirilir. Tabiki dinamik bağlamadan yararlanabilme için metod ezme (method overriding) tekniğini bilmemiz gerekiyor. Öncelikle bahsettiğimiz terimleri örneklerle açıklayalım. Metod ezme işlemi kalıtım esnasında ana sınıfta halihazırda tanımlı olan methodu yeniden yazarak ana sınıftaki metodu geçersiz kılma işlemidir. Örneğin :

public class KMeansCluster {

    public String toString()
    {
        return "KMeansCluster";
    }
}

yukarıdaki kod parçasında KMeansCluster sınıfı varsayılan ana sınıfı olan Object (Java’da her sınıf Object sınıfından türer)
sınıfının toString metodunu ezmiştir. Bu metod KMeansCluster cinsinden herhangi bir nesnenin print() metodlarından herhangi birine verildiği zaman çalışır yani :

KMeansCluster kmc = new KMeansCluster();
System.out.print(kmc);

satırları ekrana KMeansCluster yazacaktır. Burada dikkat etmemiz gereken iki temel nokta var :

  1. Ezdiğimiz metodların imzaları aynı olmalıdır. Metod imzası ise metod adı, metod parametre sayısı ve metod parametre tiplerinden oluşur.
  2. static tanımlanan metodlar ezilemezler

Dİnamik bağlama referans tiplerinin derleme zamanında değil de çalışma zamanında atanması esasında dayanır. Bir örnekle açıklarsak :

public class ClusteringBase
{
    public void cluster()
   {
           System.out.println("Cluster Base");
   }
}

public class KMeansClustering extends ClusteringBase
{
    public void cluster()
   {
           System.out.println("KMeansClustering");
   }
}

public class HierarchicalClustering extends ClusteringBase
{
    public void cluster()
   {
           System.out.println("HierarchicalClustering");
   }
}

Yukarıda bir tane ana sınıf (ClusteringBase) iki tane de bu ana sınıftan türeyen alt sınıf tanımladık(KMeansClustering,HierarchicalClustering). Alt sınıflarda cluster(kümeleme) metodunu ezdik. Şimdi bu sınıfları kullanarak çok biçimlilik esasına göz atalım :

ClusteringBase cluster1 = new ClusteringBase();
ClusteringBase cluster2 = new KMeansClustering();
ClusteringBase cluster3 = new HierarchicalClustering();

cluster1.cluster();
cluster2.cluster();
cluster3.cluster();

Buradaki

ClusteringBase cluster2 = new KMeansClustering();
ClusteringBase cluster3 = new HierarchicalClustering();

ifadeleri kalıtım kuralları çerçevesinde doğrudur. Yani bir üst sınıf referansına alt sınıf referansı atanabilir(Tersi yanlıştır).
Dikkat etmemiz gereken kısım üst sınıf referansıyla yapılam cluster() metod çağrımlarıdır. Burada referans tipi her ne kadar
üst sınıf olan ClusteringBase tipinde olsa da çağrılan metodlar çalışma zamanında (runtime) belirlenerek ilgili alt sınıfların metodlarının çağırımı sağlanır. Yukarıdaki kod parçası :

ClusterBase
KMeansClustering
HierarchicalClustering

çıktısını verir. Çok biçimliliğin yazılımcıya sağladığı en büyük avantaj farklı türden nesneleri ana sınıflarını baz alarak aynı ortamda yönetebilme ve gerektiğinde özel fonksiyonaliteyi tekrar kazanabilme avantajıdır.

İlgili Yazılar:

  1. Java Dersleri 6 – Arayüzler ve Gerçeklenmesi (Interface and Implementation) Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır. Bir...
  2. Java Dersleri 5 – Kalıtım (Inheritance) Bu derste Java’nın nesne yönelimli programlamanın temeli olan kalıtım(Inheritance) kavramını...
  3. Java Dersleri 8 – İç, Gömülü ve İsimsiz Sınıflar (Inner, Nested and Anonymous Classes) Bu dersimizde Java’nın gömülü sınıf yapısını öğreneceğiz. Java programlama dili...

Sekkaşı'nın Bayırı » Yazilim - June 18, 2009 10:11 PM
K-Orta Kümeleme Algoritması

screenshot-k-orta-kumeleme-algoritmasi

Algoritma Adı: K-Orta Kümeleme Algoritması(K-Means Clustering)
Algoritma Türü: Kümeleme Algoritması
Açıklama: K-Orta kümeleme algoritması varolan veriyi K nokta etrafında toplamaya yarar.
Bu algoritmada önemli olan veriler arası yakınlık-uzaklık tanımlamasıdır. Örneğin iki boyutlu yada üç boyutlu nokta verilerinin benzerliğini geometrik olarak hesaplayabilirken iki renk arasındaki benzerlik bağıntısını kurmak tamamen kullanıcıya bağlıdır. İlk olarak rastgele belirlenen küme orta noktaları her iterasyonda yeniden hesaplanarak yer değiştirir. Algoritma verilerin kümelerde sabitlenmesiyle sona erer. Bu kümeleme algoritmasının zayıf noktası küme sayısının kullanıcı tarafından belirlenmesidir. Örneğin doğası gereği iki kümeye ayrılması gereken veriyi daha fazla kümeye ayırabilir. Bunun tam tersi de mümkündür.
Note: There is a file embedded within this post, please visit this post to download the file.

İlgili Yazılar:

  1. Sobel Kenar Algılama Algoritması Algoritma Adı:Sobel Kenar Algılama Algoritması (Sobel Edge Detection) Algoritma...
  2. Seçim Sıralama(Selection Sort) Algoritma Appleti Algoritma Adı: Seçim Sıralama Algoritması(Selection Sort) Algoritma Türü: Sıralama Algoritması...
  3. Kabarcık Sıralama (Bubble Sort ) Algoritma Appleti Algoritma Adı: Kabarcık Sıralama Algoritması (Bubble Sort) Algoritma Türü: Sıralama...

Sekkaşı'nın Bayırı - May 06, 2009 09:10 AM
NetBeans Yerelleştirmesi İçin Gönüllüler Aranıyor

NetBeans 6.7 versiyonunu İngilizce bilmeyenlerin de kullanabilmesi amacıyla Türkçeleştirmeye çalışıyoruz. Bu konuda çeviri ve test başta olmak üzere her türlü desteğe ihtiyacımız var. Çevirilere ben de el atmak istiyorum derseniz benimle orhanbalci@gmail.com adresinden iletişime geçebilirsiniz.

İlgili Yazılar:

  1. NetBeans Video Ders (Screencast) #3 Kod Şablonları Video dersi izlemek için resme tıklayın. ...
  2. Netbeans Video Ders (Screencast) #1 JUnit Birim Test Video dersi izlemek için resme tıklayın. ...
  3. NetBeans Video Ders (Screencast) #2 GUI Tasarımcısı Özellik Bağlama Kipi Video dersi izlemek için resme tıklayın. ...

Sekkaşı'nın Bayırı » Yazilim - May 05, 2009 06:19 PM
Java Dersleri 6 – Arayüzler ve Gerçeklenmesi (Interface and Implementation)

Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır. Bir başka deyimle arayüzler sınıflar arası iletişimde imzalanan kontratlardır. Bir arayüzü gerçekleyen sınıf o arayüze ait metodların tamamını gerçeklemek zorundadır. Java prensip olarak çoklu mirası desteklememektedir. Bunun yerine ise çoklu arayüzleri gerçekleme imkanı sağlamıştır. Arayüzleri tanımlamak için “interface” anahtar kelimesi kullanılır.

Örnek bir arayüz tanımı :

public interface IDatabaseConnection {

   public void initConnection(String databaseName, String userName,
	    String password) throws SQLException;

    public void destroyConnection() throws SQLException;

    public Connection getConnection();
}

Arayüzler “interface” anahtar kelimesiyle tanımlanırken herhangi bir sınıf belirli bir arayüzü gerçekleyeceğini “implements” anahtar kelimesiyle bildirir. Şimdi yukarıdaki arayüzü gerçekleyen sınıfa bir gözatalım :

public class MYSQLDatabaseConnection implements IDatabaseConnection {

	private Connection mysqlConnection;

	public MYSQLDatabaseConnection() {
	}

	public void initConnection(String databaseName, String userName,
			String password) throws SQLException {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException ex) {
			ex.printStackTrace();
		}
		mysqlConnection = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/"
				+ databaseName, userName, password);
		mysqlConnection.setEncoding("utf8");
		mysqlConnection.setCharacterEncoding("utf8");
		mysqlConnection.setUseUnicode(true);

	}

	public Connection getConnection() {
		return mysqlConnection;
	}

	public void destroyConnection() throws SQLException {
		if (mysqlConnection != null)
			mysqlConnection.close();

	}

}

Burada dikkat etmemiz gereken hususlar şunlardır:

  1. Arayüz tanımıdaki metodlar public veya default erişim seviyesinde olabilir.
  2. Arayüz kendisi public veya default erişim seviyesinde olabilir.
  3. Arayüzlerde sadece final sınıf değişkeni tanımlanabilir.
  4. Bir sınıf sadece bir sınıftan miras alabilirken, birden fazla arayüzü gerçekleyebilir.
  5. Arayüz ile bu arayüzü gerçekleyen sınıf arasında mirastakine benzer bir ilişki vardır(is-a relationship).
    IDatabaseConnection dc = new MYSQLDatabaseConnection();
    

    kullanımı doğrudur.

  6. Arayüzler birbirinden miras alabilirler.

İlgili Yazılar:

  1. Java Dersleri 4 – Erişim Denetleyicileri (Access Modifiers) Bu dersimizde Java’nın metodlar ve sınıflar üzerinde erişim kurallarını düzenleyen...
  2. Java Dersleri 8 – İç, Gömülü ve İsimsiz Sınıflar (Inner, Nested and Anonymous Classes) Bu dersimizde Java’nın gömülü sınıf yapısını öğreneceğiz. Java programlama dili...
  3. Java Dersleri 5 – Kalıtım (Inheritance) Bu derste Java’nın nesne yönelimli programlamanın temeli olan kalıtım(Inheritance) kavramını...

Sekkaşı'nın Bayırı » Yazilim - April 26, 2009 11:56 AM
Java Dersleri 5 – Kalıtım (Inheritance)

Bu derste Java’nın nesne yönelimli programlamanın temeli olan kalıtım(Inheritance) kavramını nasıl gerçeklediğini öğreneceğiz. Yazılım terminolojisinde kalıtım bir sınıfın diğer bir sınıfın özelliklerini belirli kısıtlar çerçevesinde kazanmasıdır. Aynı kod parçalarının tekrar tekrar yazılmasını engellemenin yanı sıra nesneler arasında gerçek hayata benzer mantiki bağlar kurulmasını
kolaylaştırır. Kalıtımın gerçeklenmesini sağlayan anahtar kelime “extends” dir. Örneğin :

public class PointPlotter extends JXGraph

sınıf tanımında PointPlotter sınıfının JXGraph sınıfından miras aldığını belirtmiş oluyoruz. Buradaki JXGraph sınıfına PointPlotter sınıfının üst sınıfı denir. Kalıtım sınıflar arasında tek yönlü bir ilişki tanımlar. PointPlotter sınıfının her nesnesi aynı zamanda bir JXGraph nesnesinin özelliklerini taşımakta iken tersi yeni JXGraph nesnelerinin PointPlotter nesnesi özellikleri taşıması söz konusu değildir. Buradaki sınıf değişkenleri ve metodlarının miras alınmasında erişim denetleyicilerin kısıtlamaları söz konusudur.
Erişim denetleyicilerin anlatımı için buraya bakabilirsiniz. Bit örnekle kalıtım mekanizmasının nasıl işlediğini daha iyi anlayalım:

package net.orhanbalci.data;

/**
 *
 * @author Orhan BALCI
 */
public class Point2D<t> {

    protected T x_;
    protected T y_;

    public Point2D(T x_, T y_) {
        this.x_ = x_;
        this.y_ = y_;
    }

    public Point2D(Point2D</t><t> p)
    {
        this.x_ = p.getX();
        this.y_ = p.getY();
    }

    public Point2D()
    {

    }

    public T getX() {
        return x_;
    }

    public void setX(T x) {
        this.x_ = x;
    }

    public T getY() {
        return y_;
    }

    public void setY(T y) {
        this.y_ = y;
    }

    @Override
    public String toString() {
        return "Point2D ["+x_+"," +y_+"]";
    }

}
package net.orhanbalci.data;

/**
 *
 * @author orhan
 */
public class Point3D</t><t> extends Point2D</t><t> {

    private T z_;

    public Point3D(T z) {
        this.z_ = z;
    }

    public Point3D(Point2D</t><t> p, T z) {
        super(p);
        this.z_ = z;
    }

    public Point3D(T x, T y, T z) {
        super(x, y);
        this.z_ = z;
    }

    public Point3D(Point3D</t><t> p)
    {
        this.z_ = p.z_;
        this.y_ = p.y_;
        this.x_ = p.x_;
    }

     public T getZ() {
        return z_;
    }

    public void setZ(T z) {
        this.z_ = z;
    }

    @Override
    public String toString() {
        return "Point3D ["+x_+","+y_+","+z_+"]";
    }
}

Yukarıdaki örnekte yazılımımızda kullanmak üzere iki ve üç boyutlu noktaları temsil eden iki tane sınıf tanımlıyoruz. Point2D sınıfımızın x_ ve y_ olmak üzere iki adet sınıf değişkeni var. Point3D sınıfımızın kendisinde ise sadece z_ sınıf değişkeni varken Point2D sınıfından miras alarak x_ ve y_ değişkenlerine de sahip olmuştur. Dikat edilecek olursa x_ve y_ değişkenlerinin erişim denetleyicisi protected olarak ayarlanmıştır. Böylelikle alt sınıflardan erişilebilirsler. Burada dikkat etmemiz gereken bir diğer husus ise üst sınıf metodlarının alt sınıftan nasıl çağrıldığıdır. “super” anahtar kelimesi alt sınıftan üst sınıf metodlarına ve değişkenlerine erişimi sağlayan kapıdır.

public Point3D(T x, T y, T z) {
        super(x, y);
        this.z_ = z;
    }

yapıcı metodunda super(x, y); satıları üst sınıfın

 public Point2D(T x_, T y_) {
        this.x_ = x_;
        this.y_ = y_;
    }

yapıcı metodunun çağrılmasını sağlar. Yapıcı metodlar dışındaki metdolara “super.” şaklinde ulaşabiliriz.

İlgili Yazılar:

  1. Java Dersleri 4 – Erişim Denetleyicileri (Access Modifiers) Bu dersimizde Java’nın metodlar ve sınıflar üzerinde erişim kurallarını düzenleyen...
  2. Java Dersleri 6 – Arayüzler ve Gerçeklenmesi (Interface and Implementation) Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır. Bir...
  3. Java Dersleri 7 – Çok Biçimlilik (Polymorphism) Bu dersimizde Java’nın nesne odaklı programlamanın olmazsa olmazlarından çok biçimliliği...

Sekkaşı'nın Bayırı - April 12, 2009 04:52 PM
Java Dersleri 4 - Erişim Denetleyicileri (Access Modifiers)

Bu dersimizde Java’nın metodlar ve sınıflar üzerinde erişim kurallarını düzenleyen anahtar kelimelerini ve nasıl kullanıldıklarını örnekleriyle öğreneceğiz. Java’da dört adet erişim düzeyi bulunmakla birlikte üç adet erişim denetleyici anahtar kelime vardır. Dördüncü erişim düzeyi ise bu kelimelerin bulunmadiği seviyedir. Erişim kontrolü yazılımda her birimin kendi işine odaklanmasına yardımcı olur. Temelde nesne yönelimli programanın ana unsrlarındandır. Veri kapsülleme, miras ve çok biçimlilik paradigmalarının hayata geçirilmesine olanak tanırlar. Java’da erişim denetleyici anahtar kelimeler şunlardır:

1)Public
2)Protected
3)Private


Bu anahtar kelimelerle işaretlenmemiş her türlü Java yapısı default erişim seviyesine sahip olur ki bu da
dördüncü erişim seviyesidir. Sırasıyla bu seviyeleri ve aralarındaki erişim ilişkilerini açıklamaya çalışalım.

1)Public Erişim Seviyesi
Bu anahtar kelime önüne geldiği sınıfı,değişkeni, methodu diğer bütün kod bloklarından erişilebilir olarak işaretler. Sınıf seviyesinde kullanılabildiği gibi sınıf elemanları seviyesinde de kullanılabilir. Örneğin :

public class FrmVet extends JPanel implements IDataChangeListener, ListSelectionListener {
}

FrmVet sınıfı tanımında kullanılan public anahtar kelimesi bu sınıfın proje kapsamında diğer tüm sınıflar tarafından kullanılabilieceğini belirtir. Bu örnekte ise :

public abstract class QueryManagerBase {

	public ResultSet runSelectQuery(String query) throws SQLException
	{
		Statement s = (Statement) connection.getConnection().createStatement();
		return (ResultSet) s.executeQuery(query);
	}

}

public anahtar kelimesi runSelectQuery(String query) metodunu diğer sınıflar tarafından kısıtlama olmadan erişilebilir olarak işaretlemiştir.

2)Protected Erişim Seviyesi
Bu erişim seviyesi sınıflara uygulanamamakla birlikte metodlara ve sınıf değişkenlerine uygulanır. Önünen geldiği elemana
“alt sınıflardan” ve “aynı pakette bulunan sınıflardan” ulaşılmasına izin verir. Örneğin :

public abstract class QueryManagerBase {

	protected IDatabaseConnection				connection;
	protected ArrayList<idatachangelistener>	dataChangeListeners;
}

bu sınıftaki connection ve dataChangeListeners değişkenlerine ancak QueryManagerBase sınıfının alt sınıflarından yada bu
sınıfla aynı pakette yer alan sınıflardan erişilebilir. Yukarıdaki sınıfın alt sınıfı olan bu örnekte kullanımı görelim :

public class QueryManager extends QueryManagerBase {
public boolean addClient(EntityClient client) throws SQLException
	{
		java.sql.PreparedStatement ps = connection.getConnection()
				.prepareStatement(_insertClientQuery);
		ps.setString(1, client.getAd());
		ps.setString(2, client.getSoyad());
		ps.setString(3, client.getAdres());
		ps.setString(4, client.getTelefonEv());
		ps.setString(5, client.getTelefonCep());
		ps.setString(6, client.getAciklama());
		int result = ps.executeUpdate();
		notifyDataChangeListeners(DataChangeKey.CLIENT);
		return result == 1;
	}
}

Bu örnekte QueryManager sınıfı QueryManagerBase sınıfının alt sınıfıdır. QueryManagerBase sınıfında protected olarak işaretlenen

connection değişkeni java.sql.PreparedStatement ps = connection.getConnection()
				.prepareStatement(_insertClientQuery);

satırında kullanılmıştır.

3)Private Erişim Seviyesi
Protected erişim seviyesine benzer olarak sadece sınıf elemanlarına yani sınıf değişkenlerine ve metodlarına uygulanabilir,
sınıf seviyesinde uygulanamaz. İşaretlediği elemanı sadece sınıf içerisinden erişilebilir kılar. Yani ne aynı paketteki diğer
sınıflar ne de alt sınıftan bu elemanlara erişilemez. Örnek :

public class MYSQLDatabaseConnection implements IDatabaseConnection {

	private Connection mysqlConnection;

}

Buradaki MYSQLDatabaseConnection sınıfına ait olan mysqlConnection değişkeni private olarak işaretlenmiş yani sadece sınıf elemanları
tarafından kullanılabilir, MYSQLDatabaseConnection sınıfı haricinde kullanılamaz.

4) Default Erişim Seviyesi
Java’da sınıf seviyesinde veya sınıf üyeleri seviyesinde herhangi bir erişim belirleyici anahtar kelimenin kullanılmadığı durumdur.
Bu tip sınıflara ve elemanlara kullanıldıkları sınıf içerisinden ve aynı paketteki diğer sınıflardan erişilebilir.

Anlattıklarımızı aşağıdaki tabloda özetleyebiliriz:

Erişimci Sınıf Paket Alt Sınıf Diğer
Public Erişim Var Erişim Var Erişim Var Erişim Var
Protected Erişim Var Erişim Var Erişim Var Erişim Yok
Default Erişim Var Erişim Var Erişim Yok Erişim Yok
Private Erişim Var Erişim Yok Erişim Yok Erişim Yok

Kaynaklar:

İlgili Yazılar:

  1. Java Dersleri 5 - Kalıtım (Inheritance) Bu derste Java’nın nesne yönelimli programlamanın temeli olan kalıtım(Inheritance) kavramını...
  2. Java Dersleri 6 - Arayüzler ve Gerçeklenmesi (Interface and Implementation) Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır. Bir...
  3. Java Dersleri 2 - Sınıf Kavramı ve Yapısı (Class Structure) JDK kurulumunu ve derleyici kullanımını öğrendikten sonra kod geliştirmeye başlayabiliriz....

Sekkaşı'nın Bayırı - April 08, 2009 08:06 PM
Java Dersleri 3 - Kontrol Yapıları

Bu dersimizde Java’nın kodun akışına yön veren kontrol ifadelerinin kullanımını öğreneceğiz. Java kontrol ifadeleri
temel olarak şunlardan oluşmaktadır:

1)if-else if - else blokları
2)for ve foreach döngüleri
3)while ve do-while döngüleri
4)switch-case blokları

Şimdi sırasıyla bunları örneklerle açıklayalım.

1)if-else if-else blokları

Genel manada doğrulanabilir bir ifadenin sonucuna göre yazılımın dallanmasına olanak tanır. Temel bir “if”
deyiminin yapısı:

if(doğrulanabilir ifade)
{
	doğru ise çalışacak ifadeler;
}

şeklindedir. Burada doğrulanabilir ifadenin sonucu boolean veri tipinde olmak zorundadır. Burada bir diğer husus
ise if deyiminden sonra sadece bir ifade yer alacaksa parantezlerin kullanımı kullanıcıya bağımlıdır zorunlu değildir. Yani

if(doğrulanabilir ifade)
	tek ifade;

kullanımı doğrudur. Test edilen durumun yanlış olması durumunda çalışacak kod bloğunu ise “else” anahtar kelimesiyle belirtiyoruz.

if(doğrulanabilir ifade)
{
	doğru ise çalışacak ifadeler;
}
else
{
	yanlış ise çalışcak ifadeler;
}

Doğrulama durum sayısı arttığında ise bunu “else if” anahtar kelimesiyle belirtiyoruz. Burada kontrol etmek istediğimiz durum sayısı
kadar “else if” bloğu kullanabiliriz.

if(doğrulanabilir ifade)
{
	kontrol doğru ise çalışacak ifadeler;
}
else if(farklı doğrulanabilir ifade)
{
	kontrol doğru ise çalışacak ifadeler;
}
...

else
{
	yanlış ise çalışcak ifadeler;
}

Bloklar arası sıralama önemlidir. İsteğe bağlı “else if” blokları “if” bloğundan sonra “else if” bloğundan önce gelmelidir. Ayrıca
isteğe bağlı “else” bloğu mutlaka sonda yer almalıdır. Doğrulanabilir ifade yazarken yapılan en sık hatalardan bir tanesi karşılaştırma “==” operatörü yerine değer atama (assignment) “=” operatörünün kullanılmasıdır. Değer atama operatörünün sonucu değer atama işleminden sonra sol tarafta bulunan değişkenin değeridir. Örnekleyecek olursak :

boolean a = false;
if(a = true)
{
	System.out.println("a doğrudur");
}

Yukarıdaki kod parçasında amaç a nın doğru olup olmadığını tespit etmek iken yanlışlıkla a değişkenine doğru değeri atanıp ekrana “a doğrudur” mesajı basılır. Oysaki “=” yerine “==” kullanılsa ekrana herhangi birşey yazılmadığı görülecektir.
İf-else bloğu kullanmak yerine üçlü operatörü de kullanabiliriz. Üçlü operatörün kullanım şekli :

ireturnValue = (x>y) ? x :y;

Örnek if-else if-else bloğu :

if(subTreeNode == null)
            return false;
        else if(element.compareTo(elementAt(subTreeNode)) == 0)
            return true;
        else if(element.compareTo(elementAt(subTreeNode)) < 0)
            return search(element,subTreeNode.left);
        else if(element.compareTo(elementAt(subTreeNode)) > 0)
            return search(element, subTreeNode.right);
        else
            return false;

2)for ve foreach döngüleri
Döngüler kod içinde tekrarlanan bölümlerin tanımlanmasında kullanılırlar. For döngüsü tanımı temel olrak üç kısımdan oluşur :
a)Döngü değişkeni tanımı : döngü hayatını kontrol edecek değişkenin tanımlandığı ifade
b)Döngü kontrol ifadesi : döngünün bitip bitmeyeceğini kontrol eden ifade
c)Döngü ilerleme ifadesi : döngü ilerleme ifadesi, döngü değişkeninin güncellendiği ifade

for(döngü değişkeni tanımı; döngü kontrol ifadesi; döngü ilerleme ifadesi)
{
	döngü gövdesi;
}

Örnek :

 for (int i = 0; i < numberOfPoints; i++) {
            Random r = new Random();
            int k = r.nextInt(xUpperLimit) % (xUpperLimit - xLowerLimit) + xLowerLimit;
            int j = r.nextInt(yUpperLimit) % (yUpperLimit - yLowerLimit) + yLowerLimit;
            Point2D<Integer> p = new Point2D<integer>(k, j);
            al.add(p);
        }

Java 1.5 ile gelen syntax değişimlerinden biriside geliştirilmiş for döngüsü olarak adlandırılan for each döngüsüdür. Listelerde ve arraylarda rahat
bir şekilde gezinmek amacıyla geliştirilmiştir. Kullanımı :

for(eleman : array)
{
	döngü gövdesi;
}

şeklindedir.

Örnek :

ArrayList&lt;Point2D &lt;Integer&gt;&gt; al = new ArrayList &lt;Point2D &lt;Integer&gt;&#62;();
	for(Point2D&lt;Integer&gt; a : al)
        {
                System.out.println(a);
        }

Bu örnekte içinde Point2D tipinde nesneler barındıran bir liste elemanları geliştirilmiş for döngüsü kullanılarak ekrana yazdırılıyor.

3)while ve do-while döngüleri
while döngüleri tekrar edilecek kod bloğunun kaç defa tekrar edeceğini bilmediğimiz durumlarda kullanılır. Kullanımı:

while(döngü kontrol ifadesi)
{
	döngü gövdesi;
}

şeklindedir. For döngüsünden farklı olarak döngü kontrol değişkeninin tanımı while döngüsünden önce yapılmalıdır.
while(int i = 0) kullanımı yanlıştır.
do-while döngüsü while döngüsünden farklı olrak kapsadığı kod bloğunun en az 1 kere çalıştırılmasını garanti eder. Kullanımı:

do
{
	döngü gövdesi;
}while(döngü kontrol ifadesi);

4)switch-case blokları
switch-case blokları dallanmış if-else if-else bloklarını daha okunabilir hale getirmek için oluşturulmuştur. Genel yapısı :

switch(ifade)
{
	case sabit :
	kod bloğu;
	case sabit 2:
	kod bloğu;
	....
	default:
	kod bloğu;
}

şeklindedir. Burada “ifade” int,short,byte,char ve enum tiplerinde olabilir. Sabitler ise switch ifadesi tipiyle aynı tipte olmalıdır.
Yukarıdaki ifadede sabit ve sabit 2 değerleri aynı olamaz. Kod blokları sonunu “break” anahtar kelimesiyle belirtmezsek doğru case bloğunun altındaki
tüm bloklar çalışır.Yani :

switch(1)
{
	case 1: System.out.println("sayi bir");
	case 2: System.out.println("sayi iki");
	default: System.out.println("varsayilan");
}

çıktı olarak :
sayi bir
sayi iki
varsayilan
verecektir.

İlgili Yazılar:

  1. Java Dersleri 7 - Çok Biçimlilik (Polymorphism) Bu dersimizde Java’nın nesne odaklı programlamanın olmazsa olmazlarından çok biçimliliği...
  2. Java Dersleri 6 - Arayüzler ve Gerçeklenmesi (Interface and Implementation) Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır. Bir...
  3. Java Dersleri 5 - Kalıtım (Inheritance) Bu derste Java’nın nesne yönelimli programlamanın temeli olan kalıtım(Inheritance) kavramını...

Sekkaşı'nın Bayırı - April 01, 2009 07:50 PM
Duvarlara Sinen Yıllar

Kim bilir kaç mezuniyet gördü şu duvarlar, binanın yanan ışıkları kim bilir kimlere şahitlik etti. Yine ayrılık vakti
geldi bazıları için ama o hep yerli yerinde. Duvarlarına sinmiş sevinç nidalarının haddi hesabı yok. O güzel ve ulvi
duyguları defalarca yaşadı, ömrü yettiğince de yaşayacak. Oysa öğrenciler öyle değil, onlar o anı sadece bir defa yaşayabiliyorlar. Öyle ya insan bir defa mezun olur aynı okuldan. Ama arkalarında tüm sırlarına vakıf bir dost bırakırlar, kimisi bunun farkında kimisinin umrunda bile değil.

Her ne kadar mahpushane koğuşlarını andırsada yatılı okul yatakhane odaları, sağlam arkadaşlıkların temellerinin atıldığı nadir yerlerden birisidir. Küçük yaşta paylaşılan büyük hissiyatların mekanlarıdır onlar. Tren katarları gibi arka arkaya dizilen 101,102,103 numaralı odalarda yapılır gece sohbetleri. Buralarda yaşanır ilk aşk acısı, buralarda düşer sıla hasreti buruk yüreklere, buralarda hissedersiniz boğazınıza düğümlenen ve gitmek bilmeyen üzüntü ilmeklerini. Kendine has bir kültürü de içinde barındırır yatılı okul yatakhaneleri. Her şeyden önce bir düzen, nizam, intizam hakimdir her köşeye. Bu düzenin anahtarları yat ve kalk saatleridir. Yat saatinden sonra yapılan sohbetlere doyum olmazken kalk saatinden önceki dakikalar da en stresli vakitlerdir. Eğer şanslıysanız kalk saatinden bir saat önce uyanır, uyanır uyanmaz da daha kalkmanıza bir saat olduğunun farkına varır ve o an dünyanın en mutlu insanı oluverirsiniz. Uykulu gözlerle etüt salonunun yolunu tutarken ayaklar adeta tersine e gider. Sabah etütlerinde akşamın gürültüsü, şamatası yerini derin bir sessizliğe bırakır. Kahvaltı saati yaklaşırken salonlar hareketlenmeye başlar. Yatılı öğrencinin en büyük eğlencesi ister öğle yemeği olsun ister kahvaltı, sıra kapma yarışıdır. Etüt sınıfından start alan yarış yemekhane kapısında biter. Uçarak üçer beşer atlanan merdivenler kimi zaman üzücü olaylara da sahne olur. Tabi muhabbet ehli olan yatılı öğrenci yemekhane sırasındaki zaman boşluğunu da gayet iyi değerlendirir. Kazan çayı eşliğinde yapılan kahvaltı herzaman istekleri karşılamada yeterli olmaz. Alır eline çatal kaşığı başlar protestoya bilse de sonuç alamayacağını.

Yatılı öğrenciler arasında bir grup vardir ki onlar arasindaki bağ diğerlerine nazaran daha sıkıdır : Hafta sonu eve gidemeyenler grubu. Bu grup için hafta sonu çok çeşitli aktivite ve oyunlarla dolu zevkli bir zaman dilimidir. Her ne kadar eve gidememenin burukluğu olsada zamanla aşılır bu duygu. Hafta sonu oyunları arasında en güzeli japon kaledir. Her yatakhane kapısı birer birer kapılır, çoraptan yada kağıttan top yapılır, golü kapısında gören yerini sırada bekleyene bırakır. Yatakhane koridorunda ikiye iki maç yapmakta ayrı zevktir. Eğer küçük plastik bir top bulunabilirse koridorda tekvuruş da oynanabilir. Hele sayı biraz fazlaysa okulun kapalı spor salonundaki hentbol sahasını futbol amaçlı kullanmak da hınzır öğrencilerin favorileri arasındadır. Bu öğrenciler futboldan başka oyun oynamıyor mu arkadaşım diyenleriniz olabilir. Oynar elbet. Uzun eşek oynar, satranç oynar,havuza yüzmeye gider… Hele bir de mevsimlerden ilkbahar ise yapılan gezilerin, pikniklerin haddi hesabı olmaz. Hafta sonu macerası pazar akşamüstü eve gidenlerin dönmesiyle sona erer.

Ranzalar, yatakhane odaları, etüt salonları, kapalı spor salonu ve arkadaşlar… Duvarlara sinen kahkahalar, nidalar, hıçkırıklar… Maziden bir gün çalmak istersen eğer duvarlarına bak yatakhanelerin. Değişse de boyası,sıvası bil ki hatıralar orada saklı.

İlgili Yazı Yok.

Sekkaşı'nın Bayırı - February 15, 2009 06:11 PM
NetBeans Video Ders (Screencast) #3 Kod Şablonları

Video dersi izlemek için resme tıklayın.
Netbeans Code Templates

İlgili Yazılar:

  1. Netbeans Video Ders (Screencast) #1 JUnit Birim Test Video dersi izlemek için resme tıklayın. ...
  2. NetBeans Video Ders (Screencast) #2 GUI Tasarımcısı Özellik Bağlama Kipi Video dersi izlemek için resme tıklayın. ...
  3. Eclipse Video Ders (Screencast) #3 Introduce Parameter Refactoring Video dersi izlemek için resme tıklayın. ...

Sekkaşı'nın Bayırı - November 14, 2008 06:23 PM
NetBeans Video Ders (Screencast) #2 GUI Tasarımcısı Özellik Bağlama Kipi

Video dersi izlemek için resme tıklayın.
Netbeans Connection Mode

İlgili Yazılar:

  1. Netbeans Video Ders (Screencast) #1 JUnit Birim Test Video dersi izlemek için resme tıklayın. ...
  2. NetBeans Video Ders (Screencast) #3 Kod Şablonları Video dersi izlemek için resme tıklayın. ...
  3. Eclipse Video Ders (Screencast) #3 Introduce Parameter Refactoring Video dersi izlemek için resme tıklayın. ...

Sekkaşı'nın Bayırı - October 21, 2008 08:44 AM
Kd Ağacı (Kd Tree) Veri Yapısı Görselleştirmesi

Aşağıdaki resme tıklayarak uygulamalı olarak kd ağaç veri yapısına değerler ekleyip çıkarabilirsiniz.

İkili Ağaç Veri Yapısı

İlgili Yazılar:

  1. İkili Ağaç Veri Yapısı (Binary Search Tree) İkili ağaç veri yapısı, arama ve sıralama algoritmalarındaki hızı nedeniyle...

Sekkaşı'nın Bayırı - September 17, 2008 05:34 AM
Netbeans Video Ders (Screencast) #1 JUnit Birim Test

Video dersi izlemek için resme tıklayın.
Netbeans Junit Test

İlgili Yazılar:

  1. NetBeans Video Ders (Screencast) #2 GUI Tasarımcısı Özellik Bağlama Kipi Video dersi izlemek için resme tıklayın. Paylaş Hide Sites ...
  2. NetBeans Video Ders (Screencast) #3 Kod Şablonları Video dersi izlemek için resme tıklayın. Paylaş Hide Sites ...
  3. Eclipse Video Ders (Screencast) #3 Introduce Parameter Refactoring Video dersi izlemek için resme tıklayın. Paylaş Hide Sites ...

Sekkaşı'nın Bayırı - September 13, 2008 10:47 AM
Java Dersleri 2 - Sınıf Kavramı ve Yapısı (Class Structure)

JDK kurulumunu ve derleyici kullanımını öğrendikten sonra kod geliştirmeye başlayabiliriz. Kod geliştirmeye başlamanın ilk adimi olarak Java’nın yapıtaşı olan sınıf (class) kavramını öğreneceğiz. Gerçek hayattaki kalıpların yazılım dünyasındaki karşılıkları sınıflardır. Sınıflar yazılım içerisinde tanımlamak istediğimiz nesneler için şablon görevi görürler.

Genel olarak bir Java sinifinin yapısı şu şekildedir :

[Paket Deklerasyonu] (package)
[Dış Kütüphane Referansları] (import)
[Sınıf Yorum Bloğu] (/***/)
[Sınıf İmzası] (class extends implements)
{
[Sınıf Değişkenleri](int double … MyClass)
[Metod Yorum Blokları]
[Sınıf Metodları]
}

Buradaki sıralamada dikkat etmemiz gereken birkaç husus var. Eğer sinifimiz herhangi bir paket içinde bulunacaksa Paket Deklerasyonunu sinifin en başında yapmamız zorunludur. Paket deklerasyonundan sonra ise dış kütüphane referansları gelir. Tabi eğer herhangi bir dış kütüphane kullanılmayacaksa bunlara gerek yoktur. Sınıf değişkenleri ile metodlarının yazımında herhangi bir sıralama söz konusu değildir. Yani önce metodları tanımlayıp sonra da değişkenleri tanımlayabilirsiniz.

Üzerinde durmamız gereken diğer bir hususta sinif ismimizle dosya ismimizin aynı olması gerektiğidir. Yani QueryManagerBase sinifimizi QueryManagerBase.java dosyamızda bulundurmalıyız. Bu konuda bir kaç istisna var
bunlara ileride değinilecektir

İlgili Yazılar:

  1. Java Dersleri 4 - Erişim Denetleyicileri (Access Modifiers) Bu dersimizde Java’nın metodlar ve sınıflar üzerinde erişim kurallarını düzenleyen...
  2. Java Dersleri 6 - Arayüzler ve Gerçeklenmesi (Interface and Implementation) Nesne odaklı programlamada arayüzler sınıfların dış dünyaya açılan kapılarıdır. Bir...
  3. Java Dersleri 5 - Kalıtım (Inheritance) Bu derste Java’nın nesne yönelimli programlamanın temeli olan kalıtım(Inheritance) kavramını...

Suat ATAN * KARALAMA DEFTERİ » NetBeans - August 25, 2008 09:19 PM
Netbeans: O da ne?



Netbeans da ne oluyor? Adın sıkça duyuyor, kerametlerini işitiyorsunuz. Ancak Netbeans nedir diye soramıyorsunuz? Netbeans ile ilgili binlerce yazının yazılıp çizildiği Google Cehenneminde eminim kimse size Netbeans’ın tam olarak ne olduğunu açıklamıyor. Sanki herkes sırrı saklamak için paylaşmış gibi.
İşte sırların cevabı:


Netbeans Nedir?
Netbeans bir IDE’dir. Yani yazılım geliştirme ortamıdır. Bu yönü ile daha evvel duyma ihtimaliniz olan Eclipse, JBuilder, Oracle JDeveloper, Visual Studio gibi geliştirme ortamlarının meslektaşıdır:) [ Benzeridir diyemeyeceğim çünkü Netbeans IDE'lerin piridir.]
Eğer Java ileyazılım geliştirme ile uğraşıyorsanız belki de Notepad ile kodlarınızı yazıp, windows’un sevimsiz konsoünde “cavaj” ön komutu ile derleme yapıyor daha sonra da “hatasız kod olmaz” diyerek hatalarınızı düzelttikten sonra programınızı son bir kez daha derleyip “java” yada “javaw” ön komutu ile çalıştırıyordunuz.
Belki bunların hiç birini yapmıyor, ya hu kodlarımı nasıl “compile” ederim diyordunuz.
İşte Netbeans bunların hepsini sizin yerinize yapıyor. Bu en basit özelliği.

Mobil geliştirme ortamından görünüm.

İşte diğer özellikleri:

  • GUI olarak tesmiye edilen, grafiksel yani düğmeli, textfieldli, adamakıllı programlar için sürükle bırak tekniği ile hızlıca arayüz oluşturma imkanı
  • GUI’lerdeki düğme vb. objelerin tıklanması gibi özel olaylarda programın ne yapacağını belirleyen kodların çerçevesini özel olarak oluşturma
  • Java ile (JSP,JSF) Web programcılığı için neredeyse tamamen sürükle bırak tekniği ile çalışma imkanı
  • Sürükle bırak yöntemi ağırlıklı ve üstün özelliklere sahip, hızlı ve esnek mobil programcılık ortamı (cep telefonları,PDA’LAR). Bu programları ilgili ortama anında yükleyebilme imkanı. (Örneğin derlediğiniz mobil programınızı direkt netbeans üzerinen cep telefonunuza atabiliyorsunuz (6.1+))
  • Binlerce özel eklenti ile farklı yazılım geliştirme seçenekleri. (Örneğin Mozilla Eklentisi geliştirmek için yazılmış Netbeans modülü ile Mozilla Browser’inize eklenti yazabiliyorsunuz)
  • Netbeans için kendi özel eklentilerinizi yazabilme imkanı
  • Java dışında C, Ruby, ve 6.1 versiyondan sonra PHP ve Javascript için de özel geliştirme ortamı
  • Web servisleri geliştirme ortamı

Eh dostlar, gelin de böyle bir IDE’yi kullanmayın. Ben 4.1 versiyonundan beri yani 2004′ten beri kullanıyorum.
Netbeans ile yaptığım örnek bir proje için:
http://code.google.com/p/mocawa/

adresinden (Google Kod barındırma hizmeti) programı inceleyebilirsiniz.

Bilenler, bilmeyenlere anlatsın.

Suat ATAN * KARALAMA DEFTERİ » NetBeans - August 25, 2008 08:58 PM
PlanetNetBeans’ta Blogum Yayınlandı


Eh…! bir blog yazarını gurulandıracak bir husus.
Dün gece gelen mail ile Blog’umun Netbeans etiketlerini içeren kısmının PlanetNetbeans’ta yayınlandığını bildiren bir eposta aldım.
Benim blogum dışında da güzel bloglar var.
Elbette bu “kutsal sitede” blogumun yayınlanması ile Netbeans için daha fazla çalışacağım.

Saygılarımla…

Sekkaşı'nın Bayırı - August 24, 2008 02:02 PM
Eclipse Video Ders (Screencast) #3 Introduce Parameter Refactoring

Video dersi izlemek için resme tıklayın.
Eclipse Introduce Parameter Refactoring

İlgili Yazılar:

  1. Eclipse Video Ders (Screencast) #1 Extract Method Refactoring Video dersi izlemek için resme tıklayın. Paylaş Hide Sites ...
  2. Eclipse Video Ders (Screencast) #2 Extract Super Class Refactoring Video dersi izlemek için resme tıklayın. Paylaş Hide Sites ...
  3. NetBeans Video Ders (Screencast) #2 GUI Tasarımcısı Özellik Bağlama Kipi Video dersi izlemek için resme tıklayın. Paylaş Hide Sites ...

muarifer * ruby, rails ve yazılım geliştirimi üzerine - August 16, 2008 06:41 AM
NetBeans 6.5 Beta Yayımlandı

Haberi sevgili Fatih’in sitesinden aynen kopyalıyorum.

NetBeans 6.5 Beta sürümü bugün yayımlandı.

Birçok yenilikle gelen NetBeans 6.5 Beta sürümünün release notlarını http://www.netbeans.org/community/releases/65/relnotes.html adresinden okuyabilirsiniz.

NetBeans 6.5 Beta sürümünü indirmek için http://download.netbeans.org/netbeans/6.5/beta/ adresini ziyaret edebilirsiniz.

NetBeans’ın 6.5 i Türkçeleştirmek için bu sefer daha ciddi adımlar atıyoruz. Bu nedenle sizlerin de yardımına ihtiyacımız var. Bu konu ile ilgili Fatih ya da benimle iletişime geçebilirsiniz.
Hayırlı kandiller.

Sekkaşı'nın Bayırı - July 23, 2008 05:29 PM
Eclipse Video Ders (Screencast) #2 Extract Super Class Refactoring

Video dersi izlemek için resme tıklayın.
Eclipse Extract Super Class Refactoring

İlgili Yazılar:

  1. Eclipse Video Ders (Screencast) #1 Extract Method Refactoring Video dersi izlemek için resme tıklayın. ...
  2. Eclipse Video Ders (Screencast) #3 Introduce Parameter Refactoring Video dersi izlemek için resme tıklayın. ...
  3. NetBeans Video Ders (Screencast) #2 GUI Tasarımcısı Özellik Bağlama Kipi Video dersi izlemek için resme tıklayın. ...

Sekkaşı'nın Bayırı - July 23, 2008 05:23 PM
Eclipse Video Ders (Screencast) #1 Extract Method Refactoring

Video dersi izlemek için resme tıklayın.
Eclipse Extract Method Refactoring

Suat ATAN * KARALAMA DEFTERİ » NetBeans - April 25, 2008 09:51 PM
Netbeans’de Persistence Kullanımı ve önemli ipuçları


Java Netbeans Desktop Database App.
(Resim:1 Netbeans resmi sitesinden persistence uygulaması örneği)

Ücretsiz Java Program Geliştirme Ortamı olan Netbeans IDE’nin 6.0 ve üstü sürümlerinde masaüstü programlar için desteklediği Persistence teknolojisi sayesinde veritabanı programcılığının rahatlığının .NET ile boy ölçüşür düzeye geldiği bilinmektedir.
Ancak bu teknolojinin yeni olması itibari ile internette ingilizce kaynak bile bulmakta sıkıntı çekilmektedir.
Persistence teknolojisinin en temel kullanımı hakkında Netbans’ın resmi sitesindeki:
http://www.netbeans.org/kb/60/java/gui-db.html
adresli makale inclenebilir. Bu makalede varolan bir veritabanından CRUD uygulaması ya da CREATE,UPDATE,DELETE uygulamasının yani Türkçesi ile; Veri ekleme, Veri güncelleme, Veri Silme uygulamasının yapılışı anlatılmaktadır. Buna bir de listeleme özelliği eklemek gerekir nitekip program listeleme özelliğini de otomatik olarak oluşturuyor.
Buraya kadar sorun yok;
Ancak Netbeans’ta sözkonusu makalede geçen veritabanından ya da kendinzize ait özel veriabanından spesifik sorgulama yapmak istediğinizde sofistike sql sorgusu rahatlığında işi gerçekleştiremiyorsunuz.
Bunun için geçirdiğim iki uykuz geceden sonra ortaya çıkardığım metodu sizlerle paylaşayım:

Netbeans\'de persistence kullanımı

(Resim2: Suat ATAN tarafından yazılan bir uygulanada Netbeans IDE’nin Inspector ekranı)

Gerek Netbeans’ın Desktop Database Project seçeneği ile otomatikmen oluşturulan projelerinde gerekse sizin program içinde herhangi bir component’e sağ tıklayıp data bindirmek için “bind” ibaresini tıklamanızda ekran kesitinde görüldüğü gibi kırmızı ve yeşil şeritle işaretlediğim componentler ortaya çıkar. Bu componentleri sağ tıklayıp properties (özellikleri) incelenince sorgunun:

SELECT t FROM Teklıfler t

gibi ilginç ve sql’den bozma olduğu görülür. Bu sorguyu maalesef WHERE, ORDER BY gibi taglarla zenginleştiremezsiniz. Bunun için yapmanız gereken işlem biraz uzun,şöyle ki;
Spesifik hale getirmek istediğiniz query’i (bundan böyle kırmızı şeritle işraretli comonenti ifade için böyle diyeceğim) seçip yine sağ tıklayarak “customize code” diyeceksiniz. Daha sonra kod bloğuna örneğin şöyle bir sorgu ekleyebilirsiniz:

Orjinalinde parantez içinde geçen sorgu SELECT t FROM Teklıflerlıstesı t iken siz şöyle yazabilirsiniz:

teklıflıstesıQuery = mocawaPUEntityManager.createQuery(“SELECT t FROM Teklıflıstesı t WHERE t.teklıfno =’”+SECILEN_TEKLIF_NO_STRING+”‘”);

Bu sorgu vasıtasıyla sorgumuzu filitreliyoruz. Gördüğünüz gibi biraz uzun ve sorgu dış parametre kabul etmiyor. Bu yüzden sorgu stringini değişken hale getiriyoruz. Durun daha bitmedi:
Bu hali ile herhangi bir yerden SECILEN_TEKLIF_NO_STRING değişkenini alarak veri dökümünü yapmaya çalışırsanız sonuçta yine veri dönmez. Bunun nedeni ise veri döküm listesinin örneğin bir tabloya ya da combobox’a bindirme işleminin Netbeans’ın standart programı içinde initComponents() metodu içinde kalması ya da bir kereye mahsus program başında çalıştırılması işidir.
Bu derdi de aşmak için verilerin ilgili component’e bir daha bindirilmesi gerekir. Bunu sağşamak için ise Netbeans’ın initComponents() metodu altındaki standart veri bindirme kodlarını kopyalayıp, sorgu filtre parameteresi ortaya çıktıktan sonraki olayla tekrar tetiklemektir.
Yani mesela bir buton tıklamasında bu kodları butonun tıklanma metodu altına tekrar yapıştırmaktır.

Aşağıda bunun güncel bir örneği var: (Kendi programımdan)

private void BT_TEKLIF_DETAYMouseClicked(java.awt.event.MouseEvent evt) {
// FİLTRE PARAMETERESİNİ BİR TEXTFİELDDEN ALIP DEĞİŞKENİMİZE YÜKLEDİK
SECILEN_TEKLIF_NO_STRING=SECILEN_TEKLIF_NO.getText();

//SORGUYU ENTITY MANAGER ILE TEKRAR İŞLEDİK
mocawaPUEntityManager = javax.persistence.Persistence.createEntityManagerFactory(“mocawaPU”).createEntityManager();

teklıflıstesıQuery = mocawaPUEntityManager.createQuery(“SELECT t FROM Teklıflıstesı t WHERE t.teklıfno =’”+SECILEN_TEKLIF_NO_STRING+”‘”);
teklıflıstesıList = teklıflıstesıQuery.getResultList();

//ŞİMDİ SONUÇLARI TABLOYA YENİDEN İŞLİYORUZ
org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, teklıflıstesıList, TABLO2);
org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${teklıfno}”));
columnBinding.setColumnName(“Teklıfno”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${boy}”));
columnBinding.setColumnName(“Boy”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${bırımfıyat}”));
columnBinding.setColumnName(“Bırımfıyat”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${dalga}”));
columnBinding.setColumnName(“Dalga”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${ebatSerıNo}”));
columnBinding.setColumnName(“Ebat Serı No”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${en}”));
columnBinding.setColumnName(“En”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${fıyatsafıaenı}”));
columnBinding.setColumnName(“Fıyatsafıaenı”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${kalıte}”));
columnBinding.setColumnName(“Kalıte”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${safıaboyu}”));
columnBinding.setColumnName(“Safıaboyu”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${safıaenı}”));
columnBinding.setColumnName(“Safıaenı”);
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create(“${yukseklık}”));
columnBinding.setColumnName(“Yukseklık”);
columnBinding.setColumnClass(String.class);
bindingGroup.addBinding(jTableBinding);
jTableBinding.bind();

TEKLIF_DETAYLARI.setSize(600, 600);
TEKLIFLER_EKRANI.setVisible(false);
TEKLIF_DETAYLARI.setVisible(true);
TEKLIF_DETAYLARI.setTitle(“TEKLİF DETAYI: “+SECILI_FIRMA.getText());
}

Evet yukarıdan da anlaşılacağı üzere püf noktamız;

  1. Sorgumuzu yenilemek
  2. Ortaya çıkan sonuçları ilgili componentimize tekrar yüklemek
  3. Sorgularımızı alışılmış SQL tarzında değil, biraz daha özel bir formda string olarak kurmak

Değerli arkadaşlar;

Bu makalenin faydalı olacağına inanıyorum. Her türlü soru ve sorunlarınız için bana ulaşabilirsiniz.
Bu makaleyi de kaynak göstermek kaydı ile istediğiniz gibi kullanma hakkınız var.

Sevgi ve Java ile…

Sekkaşı'nın Bayırı - April 25, 2008 04:51 PM
Yanık Fotoğraflar

İlk bakışta hızla gelişen teknolojinin yaşam standardını yükselterek insanoğlunu daha mutlu ettiği yargısına varabiliriz. Öyle ya hayatımıza giren her türlü teknolojik zerzevat yapmamız gereken birçok işte bize yardımcı oluyor. Peki o işler gerçekten yapmamız gereken işler mi? Yeni teknolojik ürünler beraberinde yeni ihtiyaçları da doğurmuyor mu yani teknoloji kendi kendini besleyen bir canavar mı? İlerleyen teknolojinin kendimize ve sevdiklerimize ayırdığımız zamanı çoğaltması beklenirken gün ve gün bilgisayar karşısında geçirdiğimiz saat sayısı artmıyor mu? Hatıralarımızı kaydedebilme imkanlarımızın genişlediği nisbette kaydedecek hatıralarımız azalmıyor mu? Etrafınızda beraber fotoğraf çektireceğiniz güler yüzlü yakınlarınız yoksa, bilmem kaç mega piksel, otomatik flaşlı, vırt X optik zum, zırt X dijital zum, görüntü iyileştirmeli fotoğraf makinanız olmuş neye yarar. Bir bayram sabahı cümbür cemaat aynı sofranın etrafında toplanan aile efradınız olsun da, varsın fotoğraflarınızda gözleriniz kırmızı olsun. Fotoğrafın bir ucunun yanık olmasında da bir behis yoktur vesselam.

Fotoğraflar da yanardı bir zamanlar. Şimdilerde yok şu makinananın çözünürlüğü yüksek, yok bu makinanın renk kalitesi öbüründen kötü yorumlarını duyunca aklıma hep filmli makinalar geliyor. Hani şu filmlerini baskıdan sonra alıp güneşe karşı tutup, eski televizyon filmlerindeki gulyabanilere benzeyen adamlara bakıp bakıp güldüğümüz makinalar. O fotoğraf filmlerinin karanlık oda macerasını öğrendiğimde hem filmlere hem de fotoğrafçılara saygım bir kat daha arttı. Makinada gümüş-brömür ihtiva eden levhaların üzerinde düşen ışığın kağıdın üzerinde şekle bürünmesi icraatına şapka çıkarmamak elde değil. Bundan dolyıdır ki eskiden özenle çekilen fotoğraflara kavuşmamız filmlerin banyoya verilmesinden bir kaç hafta sonrasını bulurdu. Tabi bu arada tatlı bir “Acaba fotoğraflar nasıl çıkacak?” merakı da tüm zihinleri kaplardı. Nasıl kaplamasın zira fotoğrafların yanma olasılığı bile vardı. Şöyle düşünün ki hayatınızda bir defa yaşadığınız düğününüzün fotoğrafları yanmış heba olmuş. Ondandır ki eskiden düğünlerde bu işleri yapan fotoğrafçılar vardı. Günümüzde ise bırakın fotoğrafların yanmasını, çektiğiniz fotoğrafın anında
nasıl göründüğüne bakıp yok “Aaa gözlerim kapalı çıkmış bi daha çekelim” yok “Bu pozu beğenmedim çok itici görünmüşüm sil onu” nevinden geri dönüşler, düzenlemeler yapma şansına sahibiz. Düğün fotoğrafçıları da artık fotoğraf çekmekle değil fotoşopta müşterilerin isteklerini yerine getirmekle meşgul. Hani şu bizi biz gibi görünmekten alıkoyan istekler. Hani yüzünüzdeki beni, kızarıklığı ortadan kaldıran, kilomuzu azaltan istekler. Oysa ki yanık fotoğraflar
öyle değildi. Onlar sadece olanı gösterirlerdi yani bizi biz gibi, olmak istediğimiz gibi değil. Bize benzerdi o fotoğraflar, zihnimize. Kimi yeri karanlık, kimiyeri flu, kimi yeri de berrak. Sanki bize hiçbir şeyin kusursuz olamayacağını anlatırdı bu günkü harika pozların aksine.

Çok değil bundan 10 sene evvelinde vitrinimizin raflarında duran fotoğraf albümünü zaman zaman yerinden çıkarıp
ailecek hatıraları yad ettiğimiz günler yerini dizüstü bilgisayarımızın “My Pictures” ya da diğer bir adıyla “Resimlerim” klasörü altında sakladığımız(”Yok kardeşim ben resimlerimi orada saklamıyorum!” diyerekten itiraz eden olabilir saygı duyarım) piksel topluluklarını yalnız başımıza iç çekerek temaşa ettiğimiz günlere bıraktı. Kimse yanlış anlamasın her ne kadar kimyasal kokulu fotoğrafları sevsem de duyduğum özlem analog fotoğraf makinalarına değil bilakis o karanlık odalardan çıkan hatrıralardaki bilimum güzel değerlere, hayatın kötüymüş gibi görünen eksikliklerindeki güzellikleredir. Hayatın anlamını rütuşlanan renk hücrelerinde değil, yapıştırmalı albümün sayfalarında senelerdir duran sol alt köşesi yanmış fotoğrafta arayanlara selam olsun.
————————————————————————————————————-
Not: Fotoğrafçılıkla ilgili konulardaki teknik desteğini esirgemeyen Soner Avşar’a teşkkürlerimi bir borç bilirim.

Sekkaşı'nın Bayırı - April 15, 2008 05:38 PM
Biletofobi

Önceleri “bilet korkusu” diyesim geldi bu hissiyatıma fakat üzerinde biraz düşününce iç dünyama yerleşenin bir korku değil sadece bir endişe olduğuna kanaat getirdim. Aslında herhangi bir endişenin korkuya iltica etmesinin bir eşik değeri olduğu görüşündeyim. Bu eşik değeri ise hissedenin kendi lebileceğine inanırım. Burada amacım endi?e mi korku mu sorusuna yanıt bulmaktan ziyade bu kaygının sebebine dikkat ekmek ve kendime yandaş aramak.
Acaba benden başka bu duyguyu hisseden, yeryüzünde yüreğinin bir köşesinde bunu taşıyan bir insanoğlu var mı? Peki nedir bu “bilet endişesi/korkusu/kaygısı”? Böyle bir olgunun varlığına kendimi Yalova/Yenikapı 19:30 deniz otobüsü biletime üst üste beşinci kez bakarken yakaladığım anda karar verdim. Evet yanlış okumadınız üst üste tam beş kez. Tekrar, tekrar biletin tarihini, saatini, kalkış yerini, varış yerini, deniz otobüsünde oturacağım koltuğu okuduğumu farkedince bu olayın bende bir saplantı haline geldiği teşhisini koydum kendime. Bunun üstüne “ya gişelerde problem olursa” düşüncesi de peydah olunca düpe düz paranoyaya dönüştü her şey. Şimdilerde şöyle bir mazinin yamaçlarında gezintiye çıktığımda aynı düşüncelerin otobüs yolculuklarında da beni markaj altına aldığını gülümseyerek anımsıyorum. Otobüs yolculuklarında verilen otuz dakikalık molalar da çoğu zaman “ya otobüs beni bırakır da giderse” endişesine sahne oluyor. Gülüyorum zira ne kadar komik bir endişe olduğunun tamamen bilincindeyim ama
çoğu zaman bilincimizle değil hissiyatımızla hareket ettiğimiz için kendime de hak veriyorum. Öyle ya işin ucuna yanlış otobüse binip niyet Konya iken kendini Hanya’da bulmak ihtimali var ne de olsa! Bence psikopatlar pardon psikologlar için yeni bir tez konusu olabilir bu korku. Nitekim güzelim, şirin eklembacaklı örümceklerin bile korkusu oluyor da, o soğuk yazılı biletlerin niye korkusu olmuyor. Biletlerin neyi eksik. Hatta isim bile düşündüm ben bu korkuya “biletofobi” ya da latince adıyla “ticketophobia”. Evet psikoloji camiasına hediyem olsun. Telif hakkı falan da istemiyorum. Değil mi bizim de bilim dünyasına bir katkımız olsun. Hiç öyle gülümsemeyin tezime destek olacak malzemelerim var. Geçenlerde izlediğim orjinal adı “turistas” olan filmde bir turist kafilesinin aracının uçurumdan yuvarlanmasından, organlarının çalınmasına kadar uzanan serüven anlatılmakta. “Ne alaka caným” dediğinizi duyar gibiyim. Hiç alaka olmaz olur mu? Bir düşünsenize otobüs mola veriyor ve sizi mola yerinde unutuyor. Bunu fırsat bilen iç organ mafyası sizi kendine hedef seçiyor. Hatta ve hatta otobüs şöförü ve muavini de bu mafyaya yardım ve yataklık için sizi unutmuş numarası yapıyorlar. Aslında onlar da mafyanın elemanı. Tırstınız değil mi? Bakın bakın tüylerim diken diken oldu.

Sekkaşı'nın Bayırı - March 15, 2008 03:48 PM
JTable İp Uçları

1) JTable Header görünmeme problemi.
Jtable kullanırken tablonun başlığını görebilmeniz için tablonuzun mutlaka
JScrollPane içerisinde gösterilmesi gerekmektedir.

Örnek Kullanım:

booksTable = new JTable();
JScrollPane jsp = new JScrollPane();
jsp.setViewportView(booksTable);

Aksi takdirde direkt olarak başka bir JComponent içerisinde gösterilmek istenirse
tablonun sadece gövde kısmı görülecektir. Eğer tablonun başlık kısmı da gösterilmek istenirse
JTable getTableHeader() metodu ile tablo başlık kısmının da ayrı olarak gösterilmek istenen JComponent
üzerine eklenmesi gerekir.

2) JTableHeader Yüksekliğinin Ayarlanması
Herhangi bir tablonuzun başlık yüksekliğini ayarlamak için öncelikle JTable nesnenizden
JTableHedaer nesnenize getTAbleHeader() metoduyla ulaşıp bu nesne üzerinde setPreferedSize()
metodunu çağırmanız gerekir.

Örnek Kullanım:

Dimension d = booksTable.getTableHeader().getPreferredSize();
d.setSize(d.width,BOOK_TABLE_ROW_HEIGHT);
booksTable.getTableHeader().setPreferredSize(d);

muarifer * ruby, rails ve yazılım geliştirimi üzerine - March 13, 2008 07:37 PM
aptana studio 1.1 radrails 1.0 incelenimi

İlk göz ağrılarımızdan olan RadRails editörünün geliştirimi Aptana’ya geçtikten sonra 1.0 numaralı kararlı sürümü geçenlerde (11 Mart) duyuruldu. Hemmen incelemeye başladım ve ekran görüntüleri eşliğinde bir yazı hazırlamaya çalıştım.

RadRails’i kurabilmek için öncelikle Aptana Studio’nun sisteminizde kurulu olması gerekiyor.
Aptana Studio’da sırasıyla Help > Software Updates > Find and Install menüsüne ulaşıp buradan Search for new features to install seçimini yapıp Next dedikten sonra RadRails’i seçebilir ve kurabilirsiniz.

Yükledikten sonra Aptana Studio’yu kapatıp açmalısınız. Eğer Türkçe bir işletim sistemi kullanıyor iseniz fi tarihinde olan problem hala devam ettiği için -nl en-En parametresini kısayola eklemelisiniz. Ardından yeni bir rails projesine başlayabilir ya da var olan bir projenizi ithal (import) edebilirsiniz.

İlk dikkatimi çeken yeni bir rails projesi oluşturup o projeye geçtiğim halde görünümün (perspective) Rails’e geçmemesiydi. Bu nedenle bunu elle çevirmek durumundasınız. ( Window > Open Perspective > Other > RadRails )

RadRails’in yeni özelliklerine liste halinde karşılaştırmalı (karşılaştırmalar çok yanlı bu arada) olarak buradan bakabilirsiniz. Tabii bu liste de ayrı bir komedi. Zira listede "Eclipse Compability" özelliğinin (!) karşılaştırması da yer alıyor.

Ekran görüntüleriyle bazı özellikler şu şekilde:

 

generator  Generator penceresi ilk sürümden bu yana hemen hemen aynı, görevini layıkıyla yapıyor.

 

hizlibutonlar Kod penceresinde helper/view/model/controller ve test dönüşümleri güzel düşünülmüş. Örn. controllerdan view’a dönerken fonksiyon içerisinde iseniz hangi tür dosya istediğiniz, herhangi bir fonksiyonunun dışında iseniz fonksiyon seçimi ve dosya tipi soruluyor ve yok iseler oluşturuluyor.

h1-editor Rhtm düzenleme ekranında ufaktan xhtml düzenleme butonları yerleştirilmiş. Güzel olmuş.

 

presence

Kod tamamlama özelliği geliştirilmiş, daha fazla dökümansal ayrıntıya yer vermeye başlamış.

 

 

tabilegecis

Tab ile kod tamamlamalar ile geçiş yapılabiliyor.

 

tail

Bu güzel bir özellik. Entegre tail sistemi.

Kelimesel ya da düzenli ifadeler eşliğinde renklendirme özelliği verilebiliyor. Bir editörün içinde bulunması çok güzel.

Tutulası bir özellik.

 

 

 

rails-api

Rails Api ve Ruby Standart Kütüphanesine direkt erişim yapılabiliyor. Böylece yalnızca RadRails üzerinden tüm işlemlerin yapılabilmesi amaçlanmış. IDE’nin anlamını hatırlatıyor gibi bir nevi.

 

 

 

 

railstest test-basarili

Entegre test sistemiyle testlerin sonuçları grafiksel ekranda sunuluyor.

 

 

 

 

 

 

NetBeans, Ruby için destek vermeye başladığından beri NetBeans kullanan ve öncelerinde RadRails kullanmış biri olarak, NetBeans’ın ben de daha ayrı bir güzellik olgusu oluşturduğunu da belirtmek isterim.

Ayrıca, yukarıda adresini verdiğim karşılaştırma tablosuna NetBeans IDE’nin Ruby geliştiricisi olan Tor Norbye tarafından yazılmış ve gerçek dışı/saptırılmış olan bazı özelliklerin gerçeklerine yer verilmiş cevabı okumakta fayda var.

Şimdilik incelediğim özellikler bunlar. RadRails güzel bir aşama kaydetmiş. Daha öncede söylediğim gibi editör savaşları her daim geliştiricilere yarayan bir karşılaşma.

İyi çalışmalar.

muarifer * ruby, rails ve yazılım geliştirimi üzerine - December 03, 2007 12:00 PM
netbeans 6.0 final sürümü yayımlandı

nb-logo-productspage Netbeans’ın 6 numaralı serisinin "final" sürümü e-posta listesinde duyuruldu. Web sayfasında da yakında geniş bir bilgi yer alacaktır. Şimdilik yükleme sayfasını yazabiliyorum.

http://download.netbeans.org/netbeans/6.0/final/

 

Türkçe olarakta çıkmasını istiyordu(m|k) fakat takımdaki kişilerin iş yoğunluğu (4 yahut 5 kişilik bir takım zaten) ve tam olarak organize olamama sebebiyle bu isteğimizi en azından final sürümüne yetiştiremedik. Ama er ya da geç Türkçe bir sürüm çıkacak inşallah.

muarifer * ruby, rails ve yazılım geliştirimi üzerine - November 01, 2007 03:27 PM
çevirgeç - otomatik zemin değiştiricisi

cevirgec.png

Bundan bi’ kaç hafta önce yazmıştım çevirgeç‘i anca atabildim internete.

Nedir?

Çevirgeç, belirtilen klasörlerdeki resimleri belirtilen sürede duvar kağıdı yapar. Tüm resimler duvar kağıdı olana kadar aynı ada sahip dosya bir daha duvar kağıdı olmaz. Süre ise saniye cinsinden belirtilir. Aynı zamanda win32 servisi olduğu için bellekte fazla harcama yapmaz.

Neden?

Bu tür bir çok yazılım piyasada mevcut. Bunların bir çoğunda sonraki resime basınca aynı resim gelebiliyor. Ve yine bir çoğunda süre ayarı için belirli dakikaların altına inme/üstüne çıkma olayları yoktu. Ve yine bir çoğu win32 servisi değildi. Ve yine, …

Aynı şekilde çevirgeç’in eksiklerini konu alan “ve ama” ile başlayan çokca satır da gelebilir.
Ve ama, çevirgeçin ayar penceresi yok, ayarlaması zor.
Ve ama, çevirgeç imagemagick convert.exe’ye bağımlı.
Ve ama, çevirgeçin kontrolü konsoldan ya da “hizmetlerden” yapılmak zorunda.
gibi…

Kurulum

Çevirgeçin kurulumu oldukça kolay ama ayar yapması biraz zor. Ayar programını bir sonraki sürüm için (eğer olursa) yazmayı düşünüyorum. Şimdilik “yaml” dosyasını düzenleyerek bu işlemi yapabilirsiniz.

  • gem install cevirgec komutu ile çevirgeçi kurabiliyoruz.
  • Bu sıralar Rubyforge yansılarında sorun var. Gem paketlerini listelemede sorun oluşuyor. Bu nedenle bu adresten dosyayı bilgisayarınıza kaydettikten sonra konsolda kayıt edilen klasöre girerek yukarıdaki komutu verebilirsiniz.
  • Çevirgeçi hizmetlere kurmak için komut istemcisinde: cevirgec kurulum komutunu verebilirsiniz.
  • Kurulum işlemi bu kadar.

Çevirgeç Ayarları

Çevirgeçi kurduktan sonra ayar yapmak için sırasıyla aşağıdaki yordamları izleyebilirsiniz.

  • Ruby’nin kurulu olduğu dizine girin. (Gezginden)
  • Daha sonra \lib\ruby\gems\1.8\gems\cevirgec-0.1-mswin32\lib\cevirgec klasörüne ulaşın.
  • ayarlar.yaml dosyasını açıp düzenleme yapabilirsiniz.
  • ImageMagick convert.exe programını buradan yükleyebilirsiniz. Ayarlar.yaml dosyasında yerini yüklediğiniz klasör olarak belirtmeyi unutmayınız.

Hmm, acilen ayar programı lazım, satırları yazarken bile yoruyor insanı.

Çalıştırma silme, durdurma

komut istemcisinde:
cevirgec kurulum | baslat | durdur | sil | araver | devam | durum
kurulum: cevirgec’i kurar. baslat: çalışmaya başlatır durdur: çalışmasını durdurur
sil: servislerden çevirgeçi siler. araver: çevirgeçin çalışmasına araverir. devam: yeniden çalışmaya başlatır durum: şu an ne durumdaya cevap verir.

Son;

Program sadece win32 sistemlerde çalışıyor. Ayrıca win32utils paketinden bir kaç bağımlılık bulunuyor. Gem otomatik olarak bunlara dair “kurmak ister misiniz?” sorusu soracaktır. “y” ile devam edebilirsiniz.

muarifer * ruby, rails ve yazılım geliştirimi üzerine - October 24, 2007 07:36 AM
NetBeans 6.0 Beta 2 Yayımlandı

NetBeans’ın kararlı 6.0 sürümüne yaklaşırken 2. Beta sürümü de yayımlandı.

http://download.netbeans.org/netbeans/6.0/beta2/ adresinden yükleme dosyalarını bulabilirsiniz.

NetBeans Türkçe çeviri grubuna hâla kayıt olmadıysanız buradan ayrıntılı bilgiye ulaşabilirsiniz. Bekliyoruz herkesi.

Görüşmek üzere.

muarifer * ruby, rails ve yazılım geliştirimi üzerine - October 18, 2007 11:04 AM
JRuby ile Zemberek Kullanımı (1)

zemberek-jruby-nb.png

Zemberek ülkemizde yazılım adına yapılan en önemli çalışmalardan biridir bana göre. Eğer Pardus ya da OpenOffice kullandıysanız zemberek’in ne denli düzgün çalıştığına şahit olmuşsunuzdur.

Bu yazıda, JRuby[1] üzerinden Zemberek kütüphanelerine erişim konusuna değineceğim.
Sisteminizde JRuby’nin kurulu olduğu varsayılmıştır.
[1] JRuby %100 java ile yazılmış Ruby yorumlayıcısıdır.

Zemberek & JRuby

Öncelikle Zemberek ile çalışabilmek için Zemberek kütüphanelerine sahip olmamız gerekmektedir. Bu kütüphaneye ait dosyaları buradan bulabilir ya da zembereğin tüm modüllerini tek jar dosyası altında toplayan zemberek-tum-2.0.jar dosyasını indirebilirsiniz.

Bu dosyayı Java’nın hali hazırda bulabileceği bir yere kaydedebilir ya da oluşturacağımız dosya ile aynı yere kaydedebilirsiniz. (JRuby’ye require ile kolayca belirtmek için)

Dosyamızı kaydettikten sonra editörümüzü açıp zemberek kullanımına geçebiliriz.

zem.rb

İlk önce JRuby’ye zemberek kütüphanesini dahil etmesini söyleyelim.

require 'java'
 
# zemberek kütüphanemizi dahil edelim
require 'zemberek-tum-2.0.jar'

Zemberek kütüphanesinde kullanacağımız sınıfları projemize dahil edelim.

include_class 'net.zemberek.erisim.Zemberek'
include_class 'net.zemberek.tr.yapi.TurkiyeTurkcesi'

Zemberek için nesnemizi oluşturalım

zembo = Zemberek.new(TurkiyeTurkcesi.new)

Artık şöyle bir kullanım yapabiliriz.

# yazı belirtelim
yazi = ARGV.shift || 'meraba'
 
# belirtlen yazı için öneriler isteyelim
oneriler = zembo.oner(yazi)
 
# önerilerimizi ekrana yazdıralım
puts "#{yazi} icin size #{oneriler.length} tane onerim var:"
oneriler.each_with_index do |oneri, i|
 
puts "Oneri #{i+1}: #{oneri}"
end

Yazının devamında dosyaya ait kaynak kodları bulabilirsiniz.

Kaynak Kod: zem1.rb
require 'java'
 
# zemberek kütüphanemizi dahil edelim
require 'zemberek-tum-2.0.jar'
 
include_class 'net.zemberek.erisim.Zemberek'
include_class 'net.zemberek.tr.yapi.TurkiyeTurkcesi'
 
yazi = ARGV.shift || 'meraba'
 
# Zemberek için nesnemizi oluşturalım
zembo = Zemberek.new(TurkiyeTurkcesi.new)
 
# belirtlen yazı için öneriler isteyelim
oneriler = zembo.oner(yazi)
 
# önerilerimizi ekrana yazdıralım
puts "#{yazi} icin size #{oneriler.length} tane onerim var:"
oneriler.each_with_index do |oneri, i|
 
puts "Oneri #{i+1}: #{oneri}"
end

Yazının bir sonraki sürümünde katarlar üzerinden işlemlerin ruby sınıflarıyla nasıl yapılacağına göz atacağınız inşallah.