Konuşma Bitti

29 03 2007

Rüyamda öldüğümü görüyordum;
Daha doğrusu öldüğüm söyleniyordu.
Öldüğümü farkettiğimden sonra bir ses;
Artık konuşman bitti, şimdi nefsin konuşmaya başlayacak.
Artık ben konuşacağım dedi.

Ölmüş olma dehşetine kapılmıyordum ancak nefsimin sesini duyuyor olmak tuhaftı.





JavaDB: Halk için Database

27 03 2007

Dürüst konuşmak gerekirse veritabanı programcılığı ile uğraşmış hemen hemen herkes veritabanların taşınabilirliği sorununu yaşamıştır:

Programınız hazırdır ancak programı kullanacak olan kişiye MySQL kurdurmaya çalışmak deveye hendek atlatmaktan zor hale gelir.
Yurdum insanı bilgisayarını çökertir, veritabanı göçer gider.
Yüksek güvenlikli profesyonel bir sistem kurayım dersiniz, “abi ne gerek var yaaa” derler.

Neyse kısa bir süre önce Derby ile başlayan JavaDB serüveni ki JDK 1.6.0 sürümü ile tam kıvamına geldi neredeyse.
JDK 1.6.0′la birlikte gelen JavaDB desteğini JDK 1.6.0 kurduktan sonra Java kurulu klasörün altındaki db dizininden anlayabilirsiniz.

Bir ne Netbeans’ınıza ilgili modülü yüklediyseniz, artık ızdırapsız database uygulamaları geliştirebilirsiniz.

Netbeans’ın 5.5.1 Beta sürümlerinde her halde 6.0 için düşünülen hazır database uygulamaları şablonları veritabanı kullanımını daha da kolaylaştıracak.

Hayırlı olsun





Daha pratik kod yazımı için; Netbeans’da Interface Kullanımı

24 03 2007

Yazdığınız program içinde tüm değişkenleri bir class içine yazıp bunları program içinden çağırmak pratik bir iş olacaktır ancak bunun için her seferinde:

CagrilacakClassAdi VekilHarf=new CagrilacakClassAdi();
VekilHarf.degisken1;

şeklinde yazmak zor bir işlemdir.
Aşağıda anlatacağım metot ise başka class’da bulunan değişkeni direkt olarak kullanmamızı sağlar

Netbeans’ta project menüsü içinden ilgili projeti seçip sağ tıklayarak “New>New Interface” diyerek bir Interface dosyası içine diyoruz.

package mypack;

/**
*
* @author Suat ATAN
*/
public interface YeniInterface{

//ZAMAN BELIRTIR
int ZAMAN=0;

}

Koyu kısım dışındaki kodlar otomatik olarak oluşuyor. Bundan sonra değişkenlerimizi yazıp standart değerlerini yazıyoruz.(mesela zaman gibi)

Daha sonra bu interface’yi yine project menüsünden sağ tıklayarak compile ettikten sonra ana programımızın bulunduğu class’a gelip:

package ana;
import mypack.YeniInterface;//once degiskenlerin bulundugu class import ediliyor
/**
*
* @author Suat ATAN
*/
public class NewJFrame extends javax.swing.JFrame implements YeniInterface{
….

kodlarına yeşil kısımlarda gözüktüğü gibi önce import ile class’ı çağırıyor daha sonra implements ibaresi ile ana programa dahil ediyoruz.

Bundan böyle ana program içinden ZAMAN değişkeni direkt lokal değişkenmiş gibi tanınır.

Bu sistemin faydası çok değişkenkli programlarda değişkenleri tek yerde toplayıp organize etmektir.

Henüz denemedim ama interface içinde metotlar da kullanılabiliyor kanaatindeyim.





Java Uygulaması Üzerinden HTTP POST işlemi yapmak

21 03 2007

Diyelim ki web sayfanızı php veya başka bir dil ile hazıladırnız. yazdığınız bir Java programından tıpkı html formlarından post yapar gibi veri yollamak istiyorsunuz. Bunun için aşağıdaki kodlar tam size göre. Aşağıdaki postdata metodu DATA_1 DATA_2 VE DATA_3 şeklindeki 3 datayı ALICI_URL’ye gönderiyor.
bu metodu şöyle kullanabilirsiniz.
postdata(“http://adresim.com/konukdefteri.php”,”Suat”,”ATAN”,”VAN”);

bu metot ile
http://adresim.com/konukdefteri.php
adresine Suat,ATAN ve Van stringleri yollanır.ancak gönderilen URL’de değişkenlerin adlarının DATA_1,DATA_2 VE DATA_3 olması gerekir. bu adları kendinize göre değişebilirsiniz.
metodu boolean fırtlatacak şekilde yaptım data post edilirse true
fırlatacak.
Bu metotun çalışan bir örneğini:
http://www.myjavaserver.com/~suatatan/gundimsn/index.jnlp
adresini tıklayarak çalıştırabilirsiniz.
Bu Java ile yazılmış bir ziyaretçi defteri swing uygulaması ve bu uygulamadan yollanan mesaj
http://www.van-gurpinar.bel.tr/eklenenmesajlar.php
sayfasında yayına geçiyor.
_______
public boolean postdata(String ALICI_URL,String DATA_1,String DATA_2,String DATA_3) {

//BIR APPLIKASYON UZERINDEN DATA POST ETMEYI SAGLAR

try
{
String data = (new StringBuilder()).append(URLEncoder.encode(“DATA_1″, “iso-8859-9″)).append(“=”).append(URLEncoder.encode(DATA_1, “iso-8859-9″)).toString();
data = (new StringBuilder()).append(data).append(“&”).append(URLEncoder.encode(“DATA_2″, “iso-8859-9″)).append(“=”).append(URLEncoder.encode(DATA_2, “iso-8859-9″)).toString();
data = (new StringBuilder()).append(data).append(“&”).append(URLEncoder.encode(“DATA_3″, “iso-8859-9″)).append(“=”).append(URLEncoder.encode(DATA_3, “iso-8859-9″)).toString();

URL url = new URL(ALICI_URL);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;

while((line = rd.readLine()) != null)
{

System.out.println(“data post edildi”);
sonuc=true;
System.out.println(“———–ok————–”);

}

wr.close();
rd.close();

} catch(Exception e) {

sonuc=false;

}

return sonuc;
}

_________
Metot String cinsinden DATA_1 parametresini alıp uzak sunucuda bulunan dosyaya yine DATA_1 parametresi ile yollluyor, metot dikkatle incelendiğinde tırnak içindeki ilk DATA_1 parametresi verinin post edileceği dosyadaki DATA_1 parametresine yollanıyor.Bu adları değiştirebilirsiniz.





paint() metodu ile ilgili spotlar

21 03 2007

  1. Paint metodu bilindiği üzere Java’nın her türlü geometerik şekil, yazı ve resim gibi görselleri göstermek için kullanılan bir metot olup her nesne koordinat düzleminde yerleştirilir.
  2. Paint metodunun birebir başka bir event metodu altından çağrılması güç olduğundan çoğunlukla şartlı ifadelerle (if, switch…) olay yakalaması sağlanır.
  3. Paint metodunda koordinat düzlemi normal kordinat düzlemine göre Y ekseninde baş aşağıdır. Bu durumun yaratacğı sıkıntıları şöyle aşabilirsiniz. Çizim alanını kare varsayarak ebat adında bir değişken tanımlayın. Mesala int ebat=500 ; olsun Programın her açılışında setSize(ebat,ebat); programı her açılışta 500×500 piksel alanında açmış olursunuz. Koordinatlarınınzın 0,0 noktasının tam ortada olacağını varsayarak orijin diye bir değişken belirleyin: int orijin=(int)(ebat/2);
  4. Bundan sonra yapacağınız drawLine metotlarında drawLine(p1x,p1y,p2x,p2y) yerine drawLine(p1x,orijin-p1y,p2x,orijin-p2y) derseniz çizeceğin grafik sizin kendi yarattığınız 0,0 düzlemine göre değişecektir.
  5. Appletler içinde paint metodu kullanılca her repaint() çağrısı ekranın bir önceki halini silip yenisini yazar ancak JFrame’ler içinden repaint() işleminde önceki ekran değişmez yazı ve görseller üstüste biner. Bu durumu engellemek için ise repaint() yerine:

g.clearRect(silinecek alan x noktası,silinecek alan y noktası,silinecek alan en,silinecek alan boy);

metodunu kullanabilirsiniz böylece görsel nesneler üstüste binmez.





Netbeans’ta JSlider(Slider) Kullanımı

21 03 2007


Java programcılığı yaparken son kullanıcı için özellikle hızlı biçimde herhangi bir değer değişikliği yapmak istenildiğinde Slider’ler kullanılır. Resimde örneği görülen JSlider 0 ila 30 arasında saniyede değişecek kare hızını değiştiriyor.

Sizler de Netbeans içinde JSlider kullanarak benzer ve kullanışlı şeyler geliştirebilirsiniz.

JSlider’in Netbeansta kullanımı çok kolaydır.

Aşağıdaki yönergeleri takip ederek resimde görülen JSlider benzeri bir amaca hizmet eden bir obje yaratabilirsiniz.

  1. Öncelikle Netbeans Palette menüsünden Swing alt menüsü içerisinden (jbuton, jtextfield gibi objelerin seçildiği alan) JSlideri seçiyoruz.
  2. Bu obje seçili durumda iken properties menüsünden Max Value ve Min Value yazan yerlere Max Value(en büyük değer) olarak 30 Min Value (En küçük değer olarak) 0 yazıyoruz. Bunun anlamı JSliderimiz her sürüklendiğinde 0 ila 30 arasında değişecek.
  3. Şimdi Netbeans klasiği olarak yine Jslider objesi seçili iken sağ tıklayıp events menüsünden change alt menüsünü oradan da StateChanged tıklayıp JSlider sürüklendiğinde yapılacak işlemi tanımlamaya başlıyoruz.
  4. Aşağıdaki kod 3. maddede anlatılan ve JSliderin sürüklenmesi ile dinamik olarak değerin nasıl alınıp kullanılacağını göstermektedir: ——————-
    public void stateChanged(ChangeEvent e) {    JSlider dinamikdeger= (JSlider)e.getSource();    if (!source.getValueIsAdjusting()) {        int fps = (int)dinamikdeger.getValue();        if (fps == 0) {            if (!frozen) stopAnimation();        } else {            delay = 1000 / fps;            timer.setDelay(delay);            timer.setInitialDelay(delay * 10);            if (frozen) startAnimation();        }    }}
    
    ---------
  5. Yeşil ile yazılan kısımlara dikkat edilecek olursa öncelikle dinamikdeger adlı bir JSlider objesi yaratılıyor. Bunu her seferinde siz de yapacaksınız.
  6. Daha sonra bu deger .getValue() metodu ile alınıyor. Bu metot sonucunda ortaya çıkan Integer değer JSliderin sürüklenip bırakıldığı andaki 0 ile 30 arasındaki (tabi bizim uygulamamız içinde) değerdir.
  7. Bu değer yukarıdaki programda fps adlı değişkene yüklenip program içinde animasyon hızı olarak kullanılıyor.
  8. Max ve Min Value değerleri eksi işaretli de olabili söz gelimi -250 ila +250 arasında da JSlider yapılabilir.

İşte JSlider bu kadar basit ve kullanışlı bir objedir. Bu objeyi kullanırken oluşan problemler için mesajlarınızı bekliyoruz.






DANİMARKA ATEŞLE OYNUYOR

18 03 2007

Türkiye ve Müslüman dünyasında hala tasvip eden kaldıysa bu yazını başlığı biraz tehditkâr olarak gözükebilir. Ancak her halde bu yazı yazılırken Danimarka’nın ve beraberine tüm devletlerin iyiliğini belki de Danimarkalıların kendisinden daha çok istenildiği önceden vurgulanması gereken bir noktadır.

Tüm demokratik toplumlarda düşünce özgürlüğü kapsamında elbette “öteki” kapsamında olanları rahatsız edecek hatta rencide edecek fikirler ortaya çıkabilir. Ya da daha ciddi ve tatsız olaylar yaşanabilir. Ancak bunlar yine demokratik olan diğer toplumların sağduyusu ve karşıt olanlar içinde her iki taraftan da en sağduyulu olanların konsensüsünün gücü sayesinde bu krizler aşılır. Bu hususun bir modeline benzerine merhum Hrant DİNK cinayetinde herkes şahit olmuştur.

Bunun dışında toplumların barış içinde yaşama adına bile olsa “öteki olanları” mutlu etme gibi bir sorunları olmaması doğal kabul edilmelidir.

Bu bağlamda Fransa’nın Ermeni yasa tasarısı ne kadar siyaset kokarsa koksun artık Fransa’nın en başında iç politiği ve içinde barındırdığı Ermeni toplumuna bakışı ile yakından ilgilidir. Türkiye İsrail ile stratejik işbirliği içinde olmasına rağmen Filistin’i nasıl tabiri caizse defterden çıkaramaması bu anlamda diğer kayda değer bir örnektir. Bu tür hususların uzun zaman sonra bir şekilde aşılacağı şüphe götürmemektedir. Buna da güzel bir örnek Türkiye’nin Suriye ve İran ile son zamanlardaki yakın politikaları olarak gösterilebilir. Tüm bunlar bir arada yaşamaya mahkûm dünya toplumlarının avami tabirle gelin-kaynana ilişkisine benzer ve kesinlikle tarihi sayılmayacak günübirlik sorunlarıdır.

Danimarka’nın İslamiyet karşısındaki ilk göndermelerinin ölçüsüzlüğüne rağmen bu sorunları dahi yukarıda mezkûr geçici sıkıntılar olarak düşünmüştüm. Hatta daha ağır bir krizin bir zamanlar İsrail Askerlerince ortaya çıkarıldığı yine Hz. Muhammed’e yapılan ağır bir hakaretin de bir aşıldığını düşünerek bu tezi teyid etmiştim.

Ancak herkesin takdir edeceği üzere Danimarka’nın gerek devlet gerekse sivil toplum olarak içinde bulunduğu tutum artık demokrasilerde kendiliğinden teşekkül eden “çarpık” fikirlerin bile masumiyetinde değil artık saldırgan ve korkak bir tavır içerisindedir.

Bu durum Danimarka’nın iç huzuru açısından iç açıcı bir durum olmayacaktır. Neredeyse ayda bir illa ki İslamiyet ile ilgili bir sorun için tohum eken Danimarka artık inkar edilmez bir uluslar arası aktör olan ve adını “global terör” koyduğumuz güce karşı halkını tehlikeye atma hakkına sahip değildir.

Bu noktadan sonra Amerika’nın Irak’ta edindiği fakat inkâr ettiği tecrübeyi Danimarka’nın kendi topraklarında tatması üzücü olacaktır hem de yanlızca Danimarka için değil tüm Hıristiyan ve İslam dünyası ve de kültürü için…

Danimarka’daki bir belediyenin “içinde mescit bulunan dernekleri” dernek saymaması hususunda yaptığı uygulama da dahil olmak üzere neredeyse Danimarka ile ilgili her haber her zaman inkar ettiğim ama kabus gibi dönüp dolaşıp yine rüyalarıma giren Samuel Amca’yı (Samuel Hunthington) ve onun meşhur tezi olan “Medeniyetler Çatışmasını” hatırlatıyor.

Kabul edilecektir ki laik sıfatı ile tüm dinlere karşı mesafeli olan Türkiye bugün bu hususta kanunlardan değil de toplumun belirli kesimlerinden kaynaklanan tatbiki sorunlar dışında ve de her türlü aksaklığa karşın dünyada dinsel meseleleri en az sorun yapan ülkedir. Bu bağlamda Türkiye’nin farklı dinsel ve kültürel unsurlar için yapacağı her tür girişim Danimarka gibi ülkeler için model olarak afişe edilmeli ve dünya barışı için büyük ve fedakar bir yatırım olarak telakki edilmelidir.