11.12.04

Before Sunset


Daha önce bahsettiğim bu filmi izleme şansını sonunda buldum. Film hakkında yorum yapmak için bir kez daha izlemek istiyorum. Ama izleyeceklere iki uyarım var. Birincisi: Film 80 dakikadan daha kısa sürüyor. İkincisi: Eğer altyazı ile izliyorsanız, mutlaka kaliteli bir altyazı bulmalısınız. Hatta İngilizce bir altyazı ile izleyin.

10.12.04

İçiçe synchronized

Eğer içiçe synchronized bloğu yazarsak mutlaka dikkat etmemiz gereken bir şey var: Blokların sırası. Bir örnek vermek gerekirse:
Thread A
synchronized(a) {
synchronized(b) {
...
}
}
Thread B
synchronized (b) {
synchronized (a) {
...
}
}
Bu örnek hatalı ve kolayca görülebileceği gibi deadlock'a neden olur. Ama sırasına dikkat ettiğiniz durumlarda bile sorun yaşama olasılığınız var. O yüzden, içiçe synchronized kullanmaktan kaçınmak gerekiyor.

8.12.04

Throttling

İki haftadır Hakan Güler'in "throttling" olarak anlattığı yapıyı kullanarak bir test uygulaması yazıyorum. Bu yapı senkronizasyonun gerekli olduğu yerlerde oldukça basit ve yeterli bir mekanizma kurmanıza izin veriyor.

Bir benzetme yapmak gerekirse: Bir posta işletmesinde mektupları gidecekleri şehire göre ayıran bir memur düşünelim. Gelen mektuplar bu postacıya direkt verilmemeli bir kutuya atılmalıdır. Memur bu kutudan bir mektup alarak, ilgili şehrin kutusuna yerleştirir. Eğer bu işi yapan birden fazla memur olursa, her memurun kendisine ait bir kutusu olmalıdır. Her memur sadece tek bir kutudan sorumlu olduğu için, hata yapma ve diğer memurlarla çakışma olasılığı ortadan kalkar.

Bunu gerçekleştirmek için, öncelikle bir kuyruk değişkeni tanımlayıp, ana döngünüzün (posta memuru) işlemesini istediğiniz her türlü mesajı bu kuyruğa (kutuya) atmanız gerekiyor. Döngü her seferinde bu kuyruktaki ilk mesajı alıp, işleyip ve bir sonraki mesaja geçmeli. Örnek bir kod vermek gerekirse:

public void run() {
while (null != (message = getMessage())) {
// do actions
}
}

public void putMessage(Object message) {
synchronized (messageQueue) {
if (null != message) {
messageQueue.addLast(message);
}
messageQueue.notify();
}
}

public Object getMessage() {
synchronized (messageQueue) {
while (0 == messageQueue.size()) {
try {
messageQueue.wait();
} catch (Exception e) {}
}
return messageQueue.removeFirst();
}
}

Bu yöntemin hızlı çalışması için döngünün hızlı çalışması gerekir. Yani döngü içerisinde dosyaya yazma gibi işlemler yapılırsa bu yöntemin hızlı çalışmasına engel olacaktır.

7.12.04

Before Sunrise


Dün akşam CNBC-e kanalında Before Sunrise adlı Ethan Hawke ve Julie Delpy'in başrollerinde olduğu bir film izledim. Film, 1995 yapımı ve Viyana yolu üzerinde yol alan bir trende tanışan Amerikalı bir erkek ile Fransız bir kadının, bir gece süren aşk hikayesi.

Film güzel ve etkileyici idi. Patlayan bombalar, çeşitli efektler olmadan; çoğunlukla diyaloglara dayanarak ilerleyen bir senaryosu vardı. Filmin en etkilendiğim sahnelerinden biri, plak dinleme odasında yanyana oturarak Kath Bloom adlı şarkıcının Come Here adlı şarkısını dinledikleri sahneydi.

Filmin Before Sunset adında aynı oyuncularla çekilmiş bir devam filmi bulunuyor. Bu devam filmi 9 yıl aradan sonra yani 2004 yılında çekilmiş. Yakın bir zamanda onu da izlemeyi umuyorum.