Commons Httpclient

Jakarta tarafından geliştirilen bu proje HTTP protokolünde esnek bir erişim olanağını uygulamalarınızda kullanmanızı sağlamaktadır. Bir çok uygulama HTTP protokolü kullanarak web üzerinden bilgi alımını Httpclient projesiyle gerçekleştirmektedir. Ben de çalışmasını denemek ve kullanımının kolaylığını anlamak için örnek bir proje yaptım.
Bu projedeki amacım Google ve Altavista'daki dil çevirme yeteneklerine Httpclient ile erişerek bir metin kutusundaki metni seçilen diller arasında (Türkçe desteği yok, çünkü bu servislerin de Türkçe desteği yok) çevirmesini sağlamak. Bunu yapmamın tek amacı Httpclient'ın yeteneklerini denemekten ibaret. Bunu siz çok daha farklı işler için de kullanabilirsiniz.

Aşağıda yaptığım uygulamanın ekran görüntüsü var:

Gelelim bir HTTP servisine erişmek için ne yaptığım konusuna; Aşağıdaki sınıf sizin de işinizi görecektir. Post ile çağrılan formları program içerisinden çağırmanızı mümkün kılacaktır. Dilerseniz GET yöntemini de desteklemek için sınıfı genişletebilirsiniz. Bu sınıftaki executeMethod metodunu çalıştırdığınız zaman sayfada submit düğmesine basmanızla ilgili eylemin çalışmasıyla oluşan web sayfasının içeriği döndürülecektir. Daha sonra yapılan işlem bu web sayfasını içerisinden istediğiniz veriyi String parsing ile almaktır. Elbette bu yöntemin bir çok eksisi var ancak en kolayı budur :)

Programın kodlarına şuradan bakabilirsiniz.

Kodu incelediğiniz zaman web sayfasındaki formda girilmesi gereken verilerin parametre olarak verildiğini göreceksiniz. Elbette bu formun eylemini gerçekleştiren sunucu taraflı script değiştikçe benim de kodumu uygun şekilde değiştirmem gerekecek. :)

Kaynak: http://wiki.apache.org/jakarta-httpclient/HttpClientPowered

Minimax ve XoX Oyunu (Yabancılar Tic Tac Toe diyor)

Oyun Ağaçları: Oyun ağacı bir oyundaki (bizim şu anki hedefimiz iki kişilik mantık oyunlarıdır) hamleleri gösteren yapıdır. Başlangıç pozisyonu ağacın köküdür. Herhangi bir düğümün herhangi bir çocuğuna tek bir oyun hamlesi ile erişmek mümkündür. Aşağıdaki resimde Tic Tac Toe oyunu olarak bilinen (Benim XOX olarak bildiğim) oyunun oyun ağacı görülmektedir. Şekilden de anlaşıldığı gibi bir kökümüz ve bu düğümlerden tek hamleyle erişebildiğimiz farklı dallarımız (çocuklarımız) vardır. Minimax algoritmasında bizim temel yardımcımız bu oyun ağacı yapısıdır. O yüzden oyun ağacı kavramını iyice öğrenmemiz gereklidir.
Minimax: Altüst adı da verilen bu yöntem (minimaksta denilebiliyor) zeka (mantık) oyunlarında sıklıkla kullanılan bir yapay zeka tekniğidir. Bu yöntemin kullanılabilmesi için aşağıdaki şartların sağlanması gerekmektedir:
  • İki kişilik olmalıdır
  • Sırayla oynanmalıdır. (Bir 1. oyuncu bir 2. oyuncu şeklinde)
  • Oyun durumu ilgili bilgiyle birlikte tahta olarak temsil edilebilmelidir.
  • İki oyuncuda sonraki olası hamlelerin hepsi hakkında bilgiye sahip olmalıdır. Buna mükemmel bilgi (“perfect knowledge”) denilmektedir. Örneğin Poker bu duruma uymaz. Rakibimizin elindeki kartları bilemeyiz.
  • Oyun hamleleri rasgele olmamalıdır. (Zar oyunları dışarıda kalmaktadır)
  • Oyunlar sonlu olmalıdır. Bir şekilde bitiş durumu olmalıdır.
Minimax yöntemi yukarıdaki şartları sağlayan oyunlar için bir arama yöntemidir. Bu arama daha önce bahsettiğimiz oyun ağacı üzerinde en uygun hamlenin bulunmasına yönelik bir aramadır.
Tic Tac Toe oyunu: Bu oyunu bildiğinizi düşünüyorum. Ama eğer bilmiyorsanız şimdi size anlatacağım.
Tic tac toe oyununda (ben bundan sonra buna XOX demek istiyorum) 3X3 bir tahtaya sahipsiniz. Ve oyunculardan ilki X, ikincisi O hamlesini oynayabilmektedir. Kağıt kalemle bile oynayabildiğimiz bu oyunda sınıfta derste sıkıldığınız zaman oynayabilirsiniz. Boş kağıt üzerinde çok büyük olmayan bir 3X3’lük matris (bunu bildiğinizi varsayıyorum) çizersiniz, bu matriste ilk başlayan oyuncu boş bir kareye X yazarak, diğer oyuncuda boş karelerden birine O yazarak hamlelerini sırasıyla oynarlar. Satırlarda, sütunlarda ve köşegenlerde aynı karakterleri (XXX veya OOO şeklinde) sağlayan ilk oyuncu oyunu kazanır. Eğer boş alan kalmazsa oyun berabere tamamlanmış olur. Bu oyunla ilgili önemli bir anekdot War Games filminde filmin sonunda (ben sadece sonunu izledim :D ) bilgisayarın nükleer saldırısını (ya da öyle bir şey) önlemek için çocuk bilgisayara karşı bu oyunu kazanmak zorunda, elbette ilk hamle bilgisayarda olunca kazanmak zor oluyor, bu nedenle oynamamayı tercih ediyor ve hatta "A strange game. The only winning move is not to play. How about a nice game of chess?" ("İlginç bir oyun. Kazanan tek hamle oynamamak. Güzel bir satranç oyununa ne dersin?") şeklinde bir cümlede filmde geçiyor. Gerçi filmin yapıldığı yılda tahminimce bilgisayarların satrançta dünya ustasını yenebileceğine bile inanılmıyordu.
Neyse konuyu fazla dağıtmayalım.(Oyunu anladığınızı umuyorum anlamadıysanız anlamış gibi davranın ya da şuradan bir deneyin.)
Minimax yöntemindeki düşünce oyun ağacında rakibin en iyi hamleleri oynayacağı (MAX) bizim ise en kötü hamleleri (MIN) oynayacağımızdır. Bu şartlarda ağaçta dallar (çocuklar) incelenerek en iyi hamle bulunmaya çalışılır. Aşağıdaki şekil incelenirse ne anlatmaya çalıştığım daha iyi anlaşılacaktır:

Şekilden de görülebildiği gibi 1. oyuncunun hamlesi sonucu kökümüz oluşmuş durumda. Bu köke bağlı çocuk düğümler yapraklar (bitiş noktası, çocuğu olmayan düğümler) elde edilene kadar oluşturulmakta ve bu düğümlerin değerleri hesaplanmaktadır. Daha sonra 1. oyuncunun hamlelerindeki değeri en küçük olanlar, ikinci oyuncunun hamlelerinde değerleri en büyük olanlar (bu değer hamlenin kalitesini belirtmektedir) seçilerek en uygun yol belirlenmektedir. Ve ikinci oyuncu için hamleyi belirlemiş oluyoruz. Bu hamlenin kazanç hamlesi olduğunu düşünüyoruz.
Yukarıdaki şekilde en altta bitiş yapraklarına kazanca göre değer verilmiştir. Altında -1, 1 ve 0 şeklinde oyun sonucu yazılan yapraklar bizim bitiş noktalarımızı temsil etmektedir. Tahta başlangıç pozisyonunda (şekildeki kök düğüm) yapılabilecek en iyi hamle olarak sıradaki oyuncunun kazanabileceği bir hamle seçilmelidir. Eğer sıradaki oyuncunun (-1 O, 1 X, 0 beraberlik) X olduğunu düşünürsek bu durumda yolu belirlemek için minimax yöntemini yukarıdaki ağaçta aşağıdaki şekilde kullanırsak aşağıdaki hesaplanmış ağacı elde ederiz:
Bu oluşan hesaplama sonucunda bizim için en iyi yolun en sağdaki yol olduğu açıkça ortaya çıkmaktadır. Bu elde ettiğimiz hamleye en iyi hamle adı verilmektedir. Ve sıradaki oyuncu için (bu durumda X) en iyi hamle sağdaki dalı takip etmesidir. Bu dalı takip ederek X oyuncusu en kötü ihtimalle bir beraberlik alacaktır.
Gerçekleştirim: Minimax algoritmasını aşağıdaki şekilde gerçekleştirdim. Burada size sadece minimax gerçekleştirimini yazdığım sınıfı göstereceğim. Tüm kodlarımı incelemek isterseni aşağıdaki kaynak kodları indirip eclipse projesi olarak açabilirsiniz.
package net.tekrei.xox;

public class YZ {

 public static Hamle getHamle(byte[] tahta, Hamle onceki) {
  // Hamleyi dugum olarak yaratalim
  Dugum root = new Dugum(tahta, onceki);
  // Karsilastiracagimiz deger
  byte max = Byte.MIN_VALUE;
  // Bulunmasini umdugumuz en iyi hamlenin dugumu
  Dugum enIyiDugum = null;
  // Tahta henuz dolmamissa
  if (!Tahta.dolu(tahta)) {
   // Kokteki her cocuk icin
   Dugum[] children = root.getCocuklar();
   // Minimax hesaplamasi yapalim
   for (int i = 0; i <>length; i++) {
    // Ilk olarak max yapmaliyiz
    // minimax bir ozyinelemeli bir metod ve bir max bir min ilk basta max olacak
    // sekilde hesaplama yapmalidir
    byte val = minimax(children[i], false);
    // Eger en son dugumun degeri elimizdekinden buyuk ise degistir
    if (val > max) {
     max = val;
     // ve en iyi dugum olarak al
     enIyiDugum = children[i];
    }
   }
   // en iyi dugumun hamlesini dondur
   return enIyiDugum.getHamle();
  } else {
   // Tahta dolmus haberimiz yok
   return null;
  }
 }

 private static byte minimax(Dugum d, boolean min) {
  // Yaprak ise degerini dondur
  if (d.yaprak()) {
   return d.getDeger();
  }

  if (min) {
   // Minimum hesaplamasi
   return min(d);
  } else {
   // Maksimum hesaplamasi
   return max(d);
  }
 }

 private static byte max(Dugum d) {
  byte sonuc = Byte.MIN_VALUE;
  Dugum[] children = d.getCocuklar();
  for (int i = 0; i <>length; i++) {
   byte val = minimax(children[i], true);
   if (val > sonuc) {
    sonuc = val;
   }
  }
  return sonuc;
 }

 private static byte min(Dugum d) {
  byte sonuc = Byte.MAX_VALUE;
  Dugum[] children = d.getCocuklar();
  for (int i = 0; i <>length; i++) {
   byte val = minimax(children[i], false);
   if (val <>
    sonuc = val;
   }
  }
  return sonuc;
 }
}

Kaynaklar (İngilizce):
http://ai-depot.com/LogicGames/MiniMax.html
http://delphiforfun.org/Programs/NIM_Minimax.htm
http://bluebones.net/tictactoe/
Artificial Intelligence A Modern Approach
http://en.wikipedia.org/wiki/WarGames
http://www.gamasutra.com/features/20000626/brockington_pfv.htm (resimleri buradan aldım)
Minimaksı anlamak için bir applet

Kaynaklar (Daha doğrusu konu ile ilgili bağlantılar) (Türkçe):
http://sozluk.sourtimes.org/show.asp?t=minimaks
http://www.fazlamesai.net/index.php?a=article&sid=1477
http://www.bilgidata.com/localhost/bilgidata/yazi.jsp@dosya=a_altust_algoritmasi.xml.html
http://www.geocities.com/akadirbali/yapayzeka/bolum3.htm#335


Not : Herhangi bir konuda takılırsanız veya kodumla ilgili hata, daha iyi çözümler bulabilirseniz bana yorum yazarak bilgi veriniz.

Not 2: Beklenmeyen kötü bir hamle oynayabiliyor. Bunun üzerinde çalışıyorum. Bu konulardaki yorumlarınıza da açığım. :)

Not 3: Sonraki aşama bu oyunu python ve glade kullanarak Ubuntu GNU/Linux GTK üzerinde çalıştırmak. Orada da arayüzü halletmiştim.

Ödüllendirme

Birkaç hafta önce üzerinde kötü bir biçimde tartıştığımız bir konu olan ödüllendirme ile ilgili, bir makalede geçen ifadeyi paylaşmak istedim.

"...İstendik davranışları sergileyen çocuklara verilen ödüller (maddi-manevi) ya da istenmeyen davranışları sonucu verilen cezalar zamanla bireyleri, eylemlerinin süreç ya da sonucundan elde edecekleri doğal hazdan uzaklaştırarak, sadece ödül beklentisi ya da ceza korkusu nedeniyle eyleme geçen bireylere dönüştürmüştür (Öngel, 2003). Bu dönüşüm de eleştirel düşünme yetisini kaybetmiş, pasif, itaatkâr birey (öğrenci) modelinin ortaya çıkmasına neden olmuştur (Şahin, 2003).

Bu tanımlarda dikkat edilmesi gereken birkaç kritik nokta bulunmaktadır. Bunlardan ilki “istendik” terimidir. İstendik anlaşıldığı üzere istemek fiilinden türetilmiş ve edilgenliği ifade eden bir terimdir. Kısaca bireyi pasif alıcı olarak gören ve birileri tarafından belirlenmiş istekleri yapmakla yükümlü kılan bir ifadedir. Elbette eğitimi politikadan, politik çıkarlardan ayırmak mümkün değildir. Bu nedenle istendik olan davranışlar devletin bekasını sağlamaya yönelik olmaktadır. Her devletin birincil amacı kendi ideolojisini korumak ve devam ettirmek, ekonomisini güçlü tutmak olduğuna göre, bunun sağlanmasında öncelikle sorgulamayan, araştırmayan, eleştirmeyen, problem çıkarmayan ve verilen işi en iyi şekilde yapan halkların bulunması gerekmektedir. Bu nedenledir ki eğitim istenenleri sorgusuz sualsiz yerine getirecek bireyler yetiştirmek zorundadır..."

Yazıyı okuduğumda iyiki tartışmışız diye düşündüm sadece.

Kaynak

Yeni bir günlük: dbadioxide

Yeni bir günlüğe başlamak, başladıktan sonra devam ettirmek zor. Ama başlayabileceğini bilerek beklemek daha zor. İlk iletide, sadece "merhaba" yazmak, varolmanın farkındalığı ve üretmeye başlamak için iyi gibi. Günlükler, en küçük haliyle, en küçük katkıyla da olsa düşünmek, üretmek ve paylaşmak için.

Yeni bir günlük daha oluştu:
http://dbadioxide.blogspot.com/

İngilizce olacak sanırım ama, güzel yazıları biz çalar tercüme ederiz artık :).

/sos parametresi ve S.O.S kısaltması

/sos parametresini kullanarak, açılış bile yapamayacak kadar göçmüş olan bir Windows XP işletim sisteminin, arka planda aldığı hataları göstererek açılmasını sağlayabiliyormuşuz. boot.ini dosyasında bu parametreyi vermek yeterliymiş. Dün öğrendiğim bu yöntem (gerçi çoğu Linux işletim sistemi zaten bu şeklide açılır) SOS'nin ne anlama geldiğini merak ettirdi; yine google...

İmdat çağrısı S.O.S 'in anlamı nedir? Çok kişi "Save our Ship" gemimizi kurtar; "Save our Soul" ruhumuzu kurtar; "Stop Other Signals" diğer sinyalleri sözcüklerinin kısaltılmışı sanır. Oysa hiçbiri değildir. Tamamen telgraf zamanından kalma mors alfabesiyle ilgilidir. İmdat çağrısının çok kolay akılda tutulabilmesi için 1908 de üç çizgi, üç nokta, üç çizgi olan S.O.S seçildi.
Kaynak: http://www.bildirgec.org/etiket/k%C4%B1saltma

Pinhani

Son iki haftadır, neredeyse hergün dinlediğimiz bu yeni grubu, adını ilk duyduğumuz hafta içerisinde canlı dinleme şansını yakaladık. Başarılı sözler ve müziğin yanında mütevazilikleri şaşırtıcıydı. 40 kişinin tıkıldığı, kasvetli bir bar ortamıydı gerçi ama az kişi olmasını tercih ederim zaten.

Bugünlerde gidebildikleri heryere gidiyorlar, sitelerinden nerede olacaklarını takip edebilirsiniz; gidebilirseniz kaçırmayın derim. Sitelerinden (http://www.pinhani.com/ ) birkaç şarkılarını indirip dinleme olanağı da var. Yeni çıkan ve bence "dandik" likten öteye geçemeyen gruplara bakınca, başarılı olmaları gerek diye düşünüyorum. Ama nedense genelde benim beğendiğimle "halkımız" ve onun "halkımızın seçimi" birbirinin tam tersi çıkar.!?

Bu arada "Pinhan", Farşçada "gizem" anlamına geliyormuş, "Pinhani" de "gizemliler" oluyormuş.

Sanal Dünyada Telepati

Aynen (elimden geldiğince) çeviriyorum:
"Manchester üniversitesindeki deli bilimciler yine yaptılar, mürekkep püskürtmeli yazıcı ile kemik tamiri, velociraptor saldırılarını benzeştirme (simülasyon)'den sonra şimdi de telepatinin gerçekliğini test ediyorlar, ancak sanal dünyada"

Sanal gerçeklik konusuyla akademik olarak uğraşan biri olarak ilgimi çekti. Somut olarak var olmadığınız bir ortamda somut olarak ispatlanmamış bir konuyu ispatlamak nasıl mümkün olacaktır? Bana bu konu aşırı derecede metafizik ve felsefi bir konu hissi veriyor :S Bakalım başarabilecekler mi...(Haber'in ingilizcesi: http://www.engadget.com/2006/07/19/researchers-test-telepathy-in-virtual-world/)

Yasal Film İndirme

Çıkan bir habere göre artık film kopyalamak yasal oluyormuş. Bu haberden anladığım kadarıyla (en az 9 dolara satın alarak) indirdiğimiz filmi "yasal" olarak kopyalayabilip dağıtabileceğiz (Haberden anladığım bu :) kimse beni suçlamasın). Siteyi inceleyince DVD'ye yazabileceğimiz filmlerin "Burn-to-DVD" tipindekiler olduğu yazılıyor. Sanırım onlar biraz daha pahalı olacak :S Sitede bedava filmlerde var. Ancak filmlerin içeriklerini bilmiyorum. Siteyi de unutmadan yazayım, haberde gözünüze çarpacaktır ama ne olur ne olmaz ben gene de yazayım (gene mi yine mi? :S): http://www.cinemanow.com Tam incelemedim ama Türkçe desteği eksik olabilir :S

Meebo

Elinizde internet olan bir bilgisayar var ancak ne msn ne de diğer anlık iletişim programlarını indirip kurmanız mümkün değil. O zaman bu ağlara (AIM, ICQ, Yahoo! Messenger, Jabber veya GTalk, MSN) bağlanmak için gereken http://www.meebo.com/index-tr.html adresine girmeniz. Web üzerinden AJAX sayesinde başarılmış olan bu uygulama işinize çok yarayacaktır.

Nerd ve Geek arasındaki 10 Fark

Bunu yazmadan önce Nerd ve Geek terimlerinin Türkçe'sini ve anlamlarını vermem gerekiyor. Hemen sözlükte aratalım:
Nerd:İnek Öğrenci
Geek: Garabet (!!!!????!!!)
İngilizce anlamlarını incelersek bunlardan daha geniş anlamlara sahip olduklarını görüyoruz. Her ikisi de günümüzde bilgisayar başından ayrılmayan, "Bir dolap köşesiyle iyi bir bilgisayar verilip onu biraz makarnayla beslenince kusursuz bir mutluluğa eren" (Bkz:Linus Torvalds- Yalnızca eğlenmek için sf. 96), asosyal (evet bu çok önemli düşünün ki bazen iküç gün boyunca evden sadece evde bir şey kalmaması durumunda ayrılmak zorunda kalıyorsunuz, gerçi artık internetiniz varsa internet üzerinden market alışverişi bile yapabiliyorsunuz :D ) kişiliklere verilen isim. Peki bu konuyu ben niye irdeliyorum? Kendimi bazen bir "geek" gibi gördüğüm oluyor onun ötesinde günümüzde metroseksüellerden sonra nerdoseksüel (böyle bir şeydi sanırım) erkeklerin ilgi çekmeye başladığını bir magazin programında (evet benim de magazin programı izlediğim oluyor) görünce ya dedim iyi de bizim gibi hayatını "geek"liğe (özür dilerim ama garabet kelimesini kullanmayacağım) adamış insanların sahte "geek"ler yüzünden (sırf kız tavlamak için geek'lik yapanlar- ki asosyal kişilik durumunda kızları tavlamaya çalışmak bir çelişki yaratacak gibi geliyor bana) morali bozulacak ve kendi kişiliklerini kaybedecekler diye düşündüm. Neyse fazla içimi dökmeye devam etmeden size bulduğum geek ve nerd farklarını yazayım:
10- GEEK'ler terbiyesiz şakalara kırmızı bir yüzle kıs kıs gülerken, NERD'ler saatlerce sürecek kontrolsüz gülme krizine yakalanırlar.
9-GEEK'ler en büyük boy cimnastik dolabına sığarken, NERD'ler tüm cimnastik dolaplarına sığarlar.
8-GEEK'ler bowling ayakkabılarını normal ayakkabıları olarak giyerken, NERD'ler ekose desenli şortlarıyla beraber bowling ayakkabısını giyerler.
7-GEEK'lerin bazen şansı yardım eder ve barda telefon numaralarını birine verebilirler, ancak NERD'ler barda sadece URL'lerini verebilirler
6-GEEK'ler SAT'te süper bir skor yaparken, NERD'ler SAT'ı yazanlardır.
5-GEEK'ler kahramanları olarak "Urkel"'i görürken, NERD'ler "Nerdin intikamı" filmlerinin tümünü ilham almak için izlerler.
4-GEEK'ler DWEEBS ile sosyalleşirken, NERD'ler DORKS ile sosyalleşir.
3-GEEK'ler gülerken horuldarken, NERD'ler horuldamaya ek olarak genizden hırıltıda çıkarabilirler (Nickelodeon'da yayınlanan Welcome Back Kotter serisinde Horshack incelenebilir)
2-GEEK'ler lazer silahlarını (Phaser) bayıltmaya ayarlarken, NERD'ler Klingonların ne zaman ortaya çıkacaklarını bilemediklerinden Öldürmeye ayarlarlar
1-GEEK'ler Top 10 listesini okurlar, NERD'ler Top 10 listesini yazarlar :D

GEEK örneği:

NERD örneği:


Kaynak: http://thefunnybone.com/topsubmissions/submit891059295.shtml

Savaş ışıkları...

Bu sabah saat 5'te sanki çok önemli birşey olmuşçasına, kardeşimle aynı anda uyandık. Hava rüzgarlı ve serindi. Bugünlerde çok fazla savaşı düşündüğümden mi bilmiyorum, bir an kendimi savaşın içinde hissettim. Su içmeye gittim ve mutfağın penceresinden bir süre dışarıyı izledim. Her taraf karanlık, sokaklarda kimseler yok. Tam karşımda çok parlak bir nesne vardı. Yıldızlardan biriydi herhalde ama hiç bu kadar parlağını görmemiştim. Uyku buhranlığı olabilir diye kardeşimi çağırıp teyid de ettirdim. Çok parlak bir nesne vardı orada, ışıklarını saçıp duruyordu.

İçimde garip bir duygu, savaşı yaşar gibi oldum. Belki de Lübnan'nın yaşadığı savaştı bu ve savaşın ışıklarıydı karşımda parıldayıp duran.

Kumanifest

Kumanifest konusunda gelişmeleri http://www.blogcu.com/kodveus/kumanifest adresine yazıyoruz. Haberiniz olsun.
Umarım kısa bir süre sonra kumanifest varlığını özgür yazılım camiasına bağışlayacağız.

KPI nedir?

Bugünlerde işyerinde çok duyduğum bu terim, sürekli istatistiksel raporlar hazırlamama neden oluyor. Ne bu KPI diye bir bakayım bari dedim. "Key Performance Indicators" şeklinde bir açılıma sahip olan KPI kavramı hakkında şöyle birşeyler toparladım:

1) "Anahtar performans göstergeleri" denen bu yaygın kullanılan mali hesaplamalar, karları geliştirebileceğiniz ve artırabileceğiniz alanları bulmanıza yardımcı olabilir veya ciddi bir sorunla karşılaşmanızdan önce, olası sorunlar konusunda sizi uyarabilir. kaynak

2) Kritik Performans Göstergeleri
Kritik Başarı Göstergeleri (KPI), organizasyonların hedefleri doğrultusunda ilerleme ve iyileştirme aşamalarını tanımlayıp ölçülmesine yardım eden araçlardır.Topluluk performans iyileştirilecekse, öncelikle ölçülmelidir mantığı ile yola çıkar. Kişilerin operasyonlarını daha iyi yönetmeleri ve performanslarını artırmalarını sağlamak için yerinde ve doğru geri bildirimlerin sistematik verilmesi kaçınılmazdır bilinciyle hareket eder. kaynak

Sadece KPI ların izlenebilmesi için hazırlanmış yazılımlar da bulunabiliyor. Bu konu ile ilgili biraz daha detaylı bilgi için şu sayfaya bakabilirsiniz: http://management.about.com/cs/generalmanagement/a/keyperfindic.htm

Yazılım ile donanıma zarar verebilir miyiz?

Bu konu ile kesin kanıt bulamamakla birlikte bir kaç yorum toparladım.

1) Çernobil virusu bazı anakartlarda (biosuna bağlı olarak) bios üzerinde değişiklikler yaparak anakartlar üzerindeki epromlardan birinin her iki bacağına ters voltaj gönderilmesine ve epromun yanmasına sebep oluyordu.
Pulathan Senyücel

2) Ref : http://www.justlinux.com/forum/showthread.php?t=143547
http://www.microsoft.com/athome/security/quiz/virusbasics1.mspx

A virus can damage which of the following?
Correct! D. All of the aboveAlthough it is exceedingly rare for a virus to have the ability to damage your computer's disk drive, monitor, or any other type of hardware, it can happen. More commonly, viruses target your software, the programs on your computer, and the data associated with them. Learn more about what viruses can and cannot do.


3) http://yardim.sdu.edu.tr/virusler.php
Programlarınıza bu kadar hasar veren virüsler donanıma zarar verebilir mi? Bu soruya yanıt olarak "Hayır, virüsler donanıma direkt olarak zarar vermeleri söz konusu değildir" diyebiliriz. Ancak, sabit diske mütemadiyen erişilmesi ya da ekran kartının desteklenmeyen bir konfigürasyon ile yeniden ayarlanması gibi eylemlerin gürasyon ile yeniden ayarlanması gibi eylemlerin yürütülmesine yol açan bir virüs kodu sistem üzerinde beklenmedik ve normal olmayan bir gerginliğe yol açabilir. Bu konfigürasyon değişikliklerini son zamanlarda BIOS üzerinde de başarıldığı görülmektedir. Gerçekte, donanımların virüsler yüzünden hasar görmesinin çok zor olduğu söylenebilir.

Sonuçta, görüldüğü gibi kesin birşey yok. Gerçek bir örnek bulabilirsem buraya ekleyeceğim.

Muson düğünü

Musonda düğün nasıl olur demeyin bu filmi izleyin. Film Hindistan'daki yaşam hakkında ipuçları içerdiği gibi yaşanan kültürel bozulmayı da gösteriyor. Geleneklere bağlı kalmaya çalışanlarla yurtdışında yaşayanları karşılaştıran ve bunu düğün ana konusuyla anlatan film hoşuma gitti. Film çarpıcı bir etkiye de sahip. İzlemenizi tavsiye ederim.

http://www.beyazperde.com/film/1092
http://www.imdb.com/title/tt0265343/

Jar İçerisindeki kaynaklara erişme

Sık sık karşılaştığım (ve karşılaşanlarla karşılaştığım) bir sorun jar dosyası şeklinde sunulan bir uygulamada normalde paketler arasındaki bir pakette yer alan resim dosyalarına bu dosyalar jar içerisinde olmasına rağmen erişememe problemidir (Uzun cümlelerden kaçınmam lazım).
Bu sorunla bir kaç kere karşılaştıktan sonra çözümü bulup sürekli uygulamaya başladım. Ve bugün bir arkadaşımın sorusu üzerine bunu günlüğü de yazayım dedim.
Zaten bu yöntemleri kullanmadan önce resim vb. kaynakları ayrı dizinler şeklinde jarın yanında verme gibi bir alışkanlığınız da varsa (benim vardı :) ) bu yöntem sayesinde ondan da kurtulacaksınız.

Gelelim yapmamız gerekene;
Şimdi Deneme diye bir JFrame sınıfınız var ve bu sınıf içerisinde JLabel nesnenizde bir ImageIcon kullanıyorsunuz. Bu resmi net/tekrei/deneme/resim paketi (dizini) altında saklıyorsunuz. Peki jar olarak yayacağınız bu programda bu resme sorunsuz nasıl erişeceğiz? Normal yolları denemeyin olmayacaktır, olursa normal yollardan yapın. Aşağıda normal diye kastettiğim yolu görebilirsiniz:

package net.tekrei.deneme;

import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
public class Deneme extends JFrame {

 public Deneme() {
  super();
  initialize();
  this.setVisible(true);
 }

 private void initialize() {
  this.setSize(300, 200);
  this.getContentPane().add(getLblDeneme());
 }

 private JLabel getLblDeneme() {
  JLabel lblDeneme = new JLabel();
  lblDeneme.setIcon(getImageIcon());
  return lblDeneme;
 }

 private ImageIcon getImageIcon() {
  return new ImageIcon("net/tekrei/deneme/resim/icon.gif");
 }

 public static void main(String args[]){
  new Deneme();
 }
}

Aşağıda bu işin çözümü için yaptığım örnek kodu görebilirsiniz:

package net.tekrei.deneme;

import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import java.net.URL;

public class Deneme extends JFrame {

 public Deneme() {
  super();
  initialize();
  this.setVisible(true);
 }

 private void initialize() {
  this.setSize(300, 200);
  this.getContentPane().add(getLblDeneme());
 }

 private JLabel getLblDeneme() {
  JLabel lblDeneme = new JLabel();
  lblDeneme.setIcon(getImageIcon());
  return lblDeneme;
 }

 private ImageIcon getImageIcon() {
  return new ImageIcon(getURL("net/tekrei/deneme/resim/icon.gif"));
 }

 private URL getURL(String location) {
  return Thread.currentThread().getContextClassLoader().getResource(location);
 }

 public static void main(String args[]){
  new Deneme();
 }
}

Bu kodları yazıp programı jar yaptıktan sonra çalıştırırsak (resim paketini de eklemeyi unutmayın) problemsiz çalışacaktır.

Not: ImageIcon ile ilgili bir çok farklı yöntem için : http://leepoint.net/notes-java/GUI-lowlevel/graphics/45imageicon.html

Türkiyedeki kamp alanları haritası

Türkiyedeki kamp alanlarını gösteren haritaları internette ararken, Turizm ve Kültür Bakanlığı'nın böyle birşeyi zaten hazırlamış olduğunu ve yıllardır da varolduğunu, üstelik ücretsiz edinebildiğimizi öğrendim. Hemen bir tane edinmek için Konak Pierre ile Pasaport iskelesi arasındaki Turizm ve Kültür Müdürlüğüne gittik ve İngilizce de olsa "Camping in Turkey" haritamızı aldık.

2005 basımı olan bu harita üzerinde, kamp alanlarının bölgesel dağılımı, telefon numaraları ve adreslerini bulabiliyorsunuz. İşinize yarayacaktır.

Kod ve Us Projeleri

Geliştirdiğimiz, geliştirmeye çalıştığımız projelerimiz için bilgilendirme sayfasını (günlüğünü) açtık, bilginize.

Tıkalı Banyoda Dehşet

Başınıza gelmediyse bile gelecektir, hele ki Türkiye gibi "müteahit" (her nasıl yazılıyorsa) cennetinde. Lavabonuz, banyonuz, tuvaletiniz tıkanacaktır. Peki ne yapacaksınız? Şu ticari ürünleri kullanıp açabilirseniz ne mutlu size. Ancak biz 1 haftalık bir eziyet çektik. Market raflarında gördüğümüz her türlü ürünü denedik fayda etmedi. Kırdırmaya karar verdik, ama şansımızdan kırdırmaya gerek kalmadı. Sülfürik asit denedik, olmadı, tazyikli su denedik olmadı en sonunda gelen tesisatçı tıkanıklığın temel çıkışı olan su giderini yerinden söküp elini sokup temizledi.
Siz siz olun saçlara falan dikkat edin. Ve hatta en iyisi saçlarınızı kazıtın. Diyelim olan oldu, tıkanıklık ciddi o zaman kırdırmadan önce sülfürik asit deneyin. Tıpta okuyan arkadaşımın deyimiyle saçı mide asidi bile eritemiyor, bu deneyde sülfürik asidin de eritemediğini gördük. Artık ticari ürünler ve sülfürik asit işe yaramıyorsa bir tesisatçı çağırın.

Bilgisayar ve insan beyni

Kuşkusuz ki çağımızın en büyük gelişmelerinden biri olan bilgisayarın bireysel yaşantıdan tutun da tüm bilimsel gelişmeleri etkilediği, yaşama ve insana yepyeni bakış açıları, yeni ufukları açtığı somut olarak kendini hissettirmektedir. Daha çok bilgiyi depolayıp ihtiyaç halinde hızı bir şekilde geri getirme işleviyle sağladığı kolaylığın yanında böyle bir yeteneğin hangi bilgi birikimi hangi anlayışca geliştirdiği soruları tekrar onu geliştiren insan beyninin yetenekleri üzerine dikkatimizi çekmektedir.

Bilgisayar insan beyninin basit bir kopyası mıdır ? şeklindeki özetsel bu sorunun içinde özellikle kopyalama ile teknik araç ve gereçler arasındaki sıkı ilişkinin sırrını verir. İkinci önemli nokta bilimsel anlayışın temel zorunlu anlayışı olan aynı koşulların aynı ortamlarda aynı sonuçları gerçekleştireceği gerçekliği: bizi beynin bilgiyi depolayıp istendiğinde geri çağırmasındaki dinamiklerin bir makinada sağlanması durumunda aynı sonuçların vereceğii bilgisine pekiştirir.

Burada bahsettiğimiz beynin basit bir kopyasının yani sadece depola git ara bul getir fonksiyonunun hayata geçirilmesidir. Aksi halde bilgisayar bir balığın beynindeki bağımsız karar verme yeteneğine bile sahip değildir.


Fakat bu dev gelişmenin anlamlı sonucu insansı düşünme biçiminin analizini bu makinaya bakarak anlamasıdır.Yani if kodlu komutların insanların kendilerinde de var olduklarını hissetmesi len kodlu sayma yeteneğinin kendisinde bulunduğunu vb bir çok bilgisayardaki kodların insanın düşünme süreçlerinde yakalayabilmesi ve yaşamdaki insanın kendini nasıl programladığının bilincine varmasına kadar uzar gider.

İnsanın kendi geliştirdiği araç ile kendisini anlamasının bizi vardıracağı sonuç kuşkusuz ki bunun gibi insan çabasının gerçek amacının kendisini anlaması olmaktadır. O halde insan ürettiğinde kendisini bulabilirse tekrar kendine dönebilirse (basit bir ifadeyle davranışlarının düşüncelerinin sonuçların gözlemleyebilirse) anlamlı bir iş yapmış olduğuna inanabilir ancak bununda zorunlu koşulu kendi dışımızdakileri anlamaktan geçtiğidir. Ne dersin insanın mutluluğu kendi dışındaki gerçekliği anlamasından mı kaynaklanıyor.

Yazan : Ali Ekber YILMAZ

Hibernate nedir?

Hibernate (1):Kış uykusu demek, bilgisayarı hibernate ettiğiniz zaman güç düğmesiyle kaldığınız yerden devam edecek şekilde tekrar açabilirsiniz.

Hibernate (2): Java için geliştirilmiş olan (NHibernate adında bir de .NET versiyonu vardır) nesne/ilişki eşleme işini yapan, ücretsiz, özgür (LGPL lisansına sahip) bir yazılımdır. Nesne tabanlı alan modelini geleneksel ilişkisel veritabanına çevirmeye yaramaktadır.
Hibernate verilerin saklanması, güncellenmesi, silinmesi, vb. işleri nesne tabanlı modele göre kolaylaştırmak için kullanılmaktadır. Kalıcı sınıfları oluşturup (basit veri sınıfları) bu sınıfları XML kullanılarak eşlenmiş veritabanı tablolarına ve sahalarına kaydetmek için kullanılır.


Benim bu açıklamaları yazmamın tek amacı google aramaları sonucu (hibernate nedir araması yapanlar) bu siteye gelenlere (henüz biz hibernate ile ilgili güzel bir belge hazırlayamadık (hazırlamayı da düşünmüyoruz hibernate'i çok hantal buluyoruz :P ) diye) bilgilendirme ve yönlendirme sağlamak.

Aşağıdaki siteler size Hibernate framework'u hakkında gerekli bilgilendirmeyi daha iyi yapacaktır:
http://files.getdropbox.com/u/1570604/skfiles/kurumsaljava8.pdf

SQL Server 2000 kurulumda hata

Yeni, HP makinalardan birine SQL Server 2000 kurmaya çalışırken, kurulumu engelleyen şöyle bir uyarı ile karşılaştım:

"A previous program installation created pending file operations on the installation machine. You must restart the computer before running setup. "

MS nin
şu sorun sayfasında açıklanıyordu çözümü. Bilgisayarın işletim sistemi kayıtlarının tutulduğu yerde bir anahtarmış bu hatanın nedeni, adı da "PendingFileRenameOperations". Çözdüm sonunda bu yöntemle :)

MDB Tools

Linux kullanıyorsunuz ve Microsoft Access veritabanına işiniz düştü. Birisi size mdb uzantılı Microsoft Access veritabanı verdi. Ne yaparsınız? İlk başta Open Office Database'i denedim. Ama bağlantı hatası vererek bir türlü dosya içeriğini görüntüleyemedim. Daha sonra Windows'a geçeyim açayım diye düşünürken, lan kesin birileri bunu okuyacak projeyi yapmıştır. Bir araştırayım dedim. (Jakarta POI projesi nasıl Excel, Word falan okumaya yarıyorsa ) Ve araştırmalarım başarıyla sonuçlandı. Ubuntu'nun Synaptic paket yöneticisinde mdb diye aratınca mdbtools programıyla karşılaştım. İkiletmeden kurdum ve mdb dosyasını güzel bir şekilde açtım. Şu fedakar programcılar da olmazsa halimiz nicedir diye de serzenişte bulunmayı aksatmadım.