ArÅŸiv

Yazar ArÅŸivi

Türk Dil Kurumu’nun Ayıklama Operasyonu !

Pazar, 02 Oca 2011 1 yorum

Anayasa ve yasalardaki pozitif ayrımcılık ile ilgili düzenlemeler Türk Dil Kurumu (TDK) yayınlarına da yansıdı. Nesillerce kullanılan, “Kadının sırtından sopayı, karnından sıpayı eksik etmeyeceksin”, “Devletin malı deniz, yemeyen domuz”, “Eksik etek”, “Kaşık düşmanı” gibi küçük düşürücü, hakaret içeren ifadeler TDK sözlüklerinden titizlikle ayıklandı. TDK’dan Sorumlu Devlet Bakanı Mehmet Aydın, “Yeni sözlüklerde, genç kuÅŸaklara aktırılmasında yarar olmayan, yasalar ve genel ahlakla çeliÅŸen sözler yer almayacak” derken, bu kapsamda TDK’nın 7 bilim adamından oluÅŸturduÄŸu komisyon Atasözleri ve Deyimler Sözlüğü’nde 20 bine yakın deyim ve atasözünü incelemeye tabii tutarak titiz bir ÅŸekilde ayıkladı.

Bir internet fenonemi olan abimiz gibi “Aralarında bir fark kaldı. O farkınan çok iyi oldu, çok da güzel oldu. Haa kurban olduÄŸum atasözleri geçmiÅŸten gelebilir, amma lakin ki…öyle deÄŸildir ! ” demek istiyorum.

Bu düzenleme sonrası insanlarımız artık bu atasözü ve deyimleri zihinlerinden de silerek bir daha hiç kullanmayacaklardır kesin. Öyle kafamızın estiği gibi, beğenmediğimiz, çağın getirdiklerine uyduramadığımız, geri kafalı, örümcek kafalı, komünist, devrimci bulduğumuz, veya fikrimizin köşeli yerlerine takılan ne kadar sözümüz, deyimimiz varsa onlar da tiz kaldırılsın sözlüklerden, ki böylece kültürümüz şenlensin, aklansın, pirüpak olsun.

Sözlük demek bilinmeyenleri izah eden demektir. Ä°lk kaynaktır, geçerli kaynaktır. Böyle bir durumda hani o kötü etkilenmesin dedikleri ileriki nesiller nereden bilecekler ki “Eksik etek” in veya “Bana dokunmayan yılan bin yaÅŸasın” ın ne demek olduÄŸunu. Bir ÅŸeyin tanımını yapmak bambaÅŸka ÅŸeydir, ki bu bir sözlüğün vasfıdır, görevidir, o ÅŸeyin iyi mi kötü olduÄŸuna karar vermek bambaÅŸka ÅŸey. Bu mantıkla ilerleyecek olursak bir dolu küfür ve argo kelimeyi de sözlüklerden kaldırırsak mesela, ileriki nesiller küfür bile etmeyeceklerdir. Ağızlarına biber sürmeye filan gerek kalmaz hem o zaman.

Vaktiyle bu topraklardaki çoÄŸu veya kimi insanların yaÅŸayışlarındaki bir varoluÅŸu ifade ediyor bu deyimler, bu sözler. O zamanlar böyle düşünenlerimiz var olduÄŸu için, vaktiyle bir anlatılmazı basit bir ÅŸekilde anlattıkları için atasözü oldular, dilimize yerleÅŸtiler. BeÄŸen beÄŸenme, sev sevme, katıl katılma. O bizim. O geçmiÅŸ bizim yahu. Ä°yisiyle kötüsüyle bizim o kültür. Öyle kırpılamaz, tıraÅŸlanamaz. Åžurasını beÄŸenmedim, burası olmamış denilerek eÄŸilip bükülemez tarih, geçmiÅŸ. “Ulen ÅŸu 93 Harbi fena bozu bizi, dağıldık resmen. Gençlerimizin zihnindeki anlı ÅŸanlı tarihe halel gelmesin, dur kaldıralım bunu tarih sayfalarından” diyemezsin. “14 yaşında Nazife hanıma da doyum olur mu ? diyen türkü varya, abi o türkü sapık resmen. Kaldırın repertualardan, çalmasın hiç kimse, neme lazım gençler kötü etkilenir filan” diyemezsin. Böyle birÅŸey olabilir mi ?

Tabi yakın tarihimizin yeni yeni aydınlandığı bu dönemlerde buna benzer nasıl sipariş üzerine tarihler yazıldığını da biliyoruz. Sipariş üzerine tarih yazılamacağı, türkü yakılamayacağı gibi yakışık almadığını düşündüğümüzden dolayı da de atasözlerinin, deyimlerin üzeri çizilemez, sipariş üzerine sözlük derlenemez. Sözlük varolanlar bütünüdür.

TDK’nun yapması gereken geçmiÅŸi ayıklamak deÄŸildir. Çağın getirdikleri adına birÅŸey yapılacaksa o da, teknolojinin ve internet dünyasının habire ithal ettiÄŸi ve Türkçe’nin içine yapışıp kalan tonlarca kelimenin kullanılabilir karşılıklarını düşünmek olabilir. E “bilgisayar” dan beri adam akıllı bir çeviri göremediÄŸimize, dilimize dolanmadığına göre de ; Åžefaatinizden vazgeçtik arkadaÅŸ, mezarımızdan taÅŸ çalmayın…

Hibernate @Version – OptimisticLockException

Çarşamba, 29 Ara 2010 Yorum yapılmamış

Hibernate, @Version ile işaretlenen kolon sayesinde bir oturumda açılan varlık nesnesinin, diğer bir oturumda değiştirilmesine izin vermeyerek OptimisticLockException fırlatır. Bu istisna yakalanarak ilgili işlemler yapılabilir. Değişiklik yapılmak istenen varlık nesnesinin başka bir oturumda değiştirildiği belirtilerek kullanıcı yönlendirilebilir örneğin.

@Version ile işaretlenmiş kolon Long, Integer veya TimeStamp tipinde olabilir. Hibernate bu nesne (veritabanında karşılığı olan satır) üzerinde gerçekleştirilen persist() ve sonraki her bir merge() işlemi ile beraber versiyon kolonunun değerini bir arttırır.

@Entity
public class Flight implements Serializable {

@Version
@Column(name=”OPTLOCK”)
private Integer version {

}

}

Şöyle ifade edebiliriz sanırım; Nesnenin veritabanından okudunduÄŸu zamanki versiyonuna ilkVersiyon, yapılan deÄŸiÅŸiklikler veritabanına yansıtılmadan hemen evvelki versiyona sonVersiyon dersek Hibernate API’nin deÄŸiÅŸiklikleri veritabanına yansıtan metodu olan EntityManager.flush() ilkVersiyon.equals(sonVersiyon) kontrolu yapar. Ä°ki versiyon deÄŸeri eÅŸitse deÄŸiÅŸiklikleri veritabanına yansıtır, farklıysa -ki bu ilgili satırın bir baÅŸka oturumda deÄŸiÅŸtirildiÄŸi anlamına gelir- OptimisticLockException fırlatır. Bu durumdaki nesne “stale object” tanımına girer.

BahsettiÄŸim hata;

javax.ejb.EJBException: javax.persistence.OptimisticLockException: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)

gibi bir hatadır.

Burada dikkat edilmesi gereken EntityManager sınıfının executeUpdate() metodunun bu versiyon alanının değerini arttırmadığı. Bu yüzden ilgili varlık sınıfları için böylesi bir işlem yapılmadığına dikkat etmek gerekiyor ki neden OptimisticLockException almıyoruz diye debelenmeyelim.

Ve java gurusu abilerimizden Hakan Uygun der ki, bu yöntem ilgili nesneyi barındıran her veritabanı işlemi için (yukarıdaki gibi bir versiyon numarası eşitliği gerçekleştirmek adına) bir sorgu daha çekmek demek. Dolayısıyla bu kolonu öyle ilgili ilgisiz her varlık sınıfına eklememek gerekir. Ayrıca bir çözüm değil, sadece böylesi eş zamanlı düzenleme işlemlerinde alınabilecek hataları engellemek adına uygulanabilecek bir yöntemdir.

Konuyla ilgili daha detaylı bilgi için şuraya bakılabilir.

Eclipse Debug Pratikleri

Cumartesi, 18 Ara 2010 Yorum yapılmamış

Eclipse’in bir kaç debug görünümü özelliÄŸinden bahsedeyim.

Drop to frame drop_to_frame

Bu sayede herhangi bir debug işlemi sırasında en baştaki breakpoint noktasında dönebiliyorsunuz. Tabi bu arada çalışan kodun meydan getirdiği değişiklikleri geri alma gibi bir özellik söz konusu değil.

Watchpoint

Herhangi bir genel değişkenin (global variable) olduğu satıra çift tıklayarak eklenebilir. Böylece değişken her değişikliğe uğradığında debug görünümüne dönüş yapılabilir.

Add java exception breakpoint addJavaException

Bu özellik ile de kodun çalışması sırasında meydana gelebilecek herhangi bir istisna yakalanıp, bu istisna durumunun incelenebilmesini saÄŸlanıyor. Burada eklenecek istisna Java’da bütün istisnaların türediÄŸi sınıf olan “Exception” seçilirse mesela bütün istisna durumlarında Eclipse debug görünümüne dönebiliyor, veya özel bir “Exception” (OptimisticLockException, SQLGrammarException vs.) türü belirterek onu yakalayabiliyoruz. Bu daha çok yakalanmayan veya yakalama gereÄŸi duyulmayan “NullPointerException”, “IndexOutOfBoundsException” gibi istisna durumlarında faydalı olur gibi geliyor.

Skip all breakpointsskipAllBreakPoints

Pratikte çok işe yarayan, çoğu Eclipse kullanıcısının biliyor olması gereken bir özellik. Bu sayede tek tek breakpoint leri devre dışı bırakmak yerine, bütün breakpoint leri devre dışı bırakarak kodun normal çalışmasını takip edebiliyoruz.

Enable when – Hit count

Son olarak, pratikte çok ihtiyaç olmazmış gibi gözükse de, bir breakpoint in ne zaman aktif olacağını o breakpoint in özellikler kısmından “Enable when” kısmına yazacağımız kod ile belirleyebiliyoruz. Şöyle bir durumda iÅŸe yaramışlığına ÅŸahidim; Diyelim ki 200 elamana sahip bir listede for döngüsü ile iÅŸlem yapıyoruz. Hatanın da 50 ila 60. elamanlar arasında bir yerlerde olduÄŸunu biliyoruz.

for(int i = 0; i < list.size(); i++){
...
}

Böyle bir durumda “Enable When” kısmına i >= 50; yazarak ilgili breakpoint in 50.adımla beraber aktif olmasını saÄŸlamış, biraz zaman biraz sabır kazanmış oluyoruz.

Yine ilgili breakpoint in özellikler kısmından kaç kereden sonra pasif olacağını da “Hit count” ile belirleyebiliyoruz.

Java – Object – Clone() Metodu

PerÅŸembe, 25 Kas 2010 5 yorum

Java’da bütün sınıfların türediÄŸi Object sınıfının bir metodu olan clone() ile bir nesnenin kopyasını almak mümkün. Fakat pratikte bir takım sıkıntılar ile karşılaşılabiliyor. Bunun sebebi clone() metodunun primitive olmayan tipler için, nesnenin kopyasını almak yerine bu nesnenin referansını kopyalıyor olması. Buna “Shadow Copy” deniyor. Bu gibi durumlarda clone() metodunu ezip, nasıl bir kopyalama yapacağını belirlememiz gerekiyor. Sınıf tipi (Class Type) alanları da “gerçekten” kopyaladığımız bu tür kopyalamaya da “Deep Copy” deniyor.

Tabi kopyasını almak istediÄŸimiz sınıfın “Cloneable” arayüzünü gerçeklemesi gerekiyor. Bu ÅŸekilde sınıf tanımında “implements Cloneable” ÅŸeklinde bir belirtim yapmazsak “CloneNotSupportedException” fırlatılıyor. Daha sonra bir “Deep Copy” gerekiyor ise, ki gerçekte muhtemelen gerekiyordur, clone() metodunu eziyoruz (override). Bu gibi “Deep Copy” yapmak istediÄŸimiz durumlarda yapabileceÄŸimiz iki ÅŸey var. Birincisi gerçek kopyasını almak istediÄŸimiz sınıfın sınıf tipindeki alanlarini da “Cloneable” yapıp bahsi geçen clone() metodunda bu clone() metotlarını çağırıp, bu sınıf tipindeki alanlara atamak.

[java]
@Override
public Object clone() {
Employee e = null;
try {
e = (Employee) super.clone();
Department d = e.getDepartment().clone();
e.setDepartment(d);
} catch (CloneNotSupportedException cnsex) {
//TODO:catch this
}
return e;
}[/java]

İkincisi ise clone() metodunda gerçek nesneler oluşturarak bunları kopyalanmak istenen nesnenin sınıf tipindeki alanlara atamak.

[java]@Override
public Object clone() {
Employee e = null;
try {
e = (Employee) super.clone();
e.setSalary(BigDecimal.ZERO);
} catch (CloneNotSupportedException cnsex) {
//TODO:catch this
}
return e;
}
[/java]

Önemli bir diğer ilke de kopyalama sonucu oluşan kopya nesne ile kopyalanan asıl nesne için kopyaNesne != asılNesne ifadesinin, kopya işlemi sonrası ilk aşamada kopyaNesne.equals(asılNesne) ifadesinin ve kopyaNesne.getClass() != asılNesne.getClass() ifadesinin her zaman doğru değer döndürmesi gerektiğidir. Son olarak kopyalanmak istenen sınıfın List veya Set gibi Collection sınıfından türeyen alanları mevcutsa ve bunları da gerçekten kopyalamak istiyorsak, bu listelerin her bir elemanını tek tek kopyalamamız gerektiğini unutmamak gerekiyor.

Bu kadar yazdık ettik ama yine de Java gurusu abilerimiz nesne kopyalama işlemleri için clone() metoduna çok güvenmeyip ve bağlı kalmayıp bunun yerine istediğimiz şekilde kopyalamayı gerçekleştiren yapılandırıcı metotlar yazmamızı salık veriyorlar bize.

Güncelleme : Örnek koda ve kod yorumlarına şuradan bakılabilir. Umarım daha açıklayıcı olmuştur.

Ayrıca konu ile ilgili faydalı olduğunu düşündüğüm şuraya da bakmakta fayda var.

Kategoriler:Java Etiketler:, , ,

Stone (Åžantaj)

Pazar, 24 Eki 2010 1 yorum
stone(ÅŸantaj)

Ejder Kapanı‘ndan beri bir filmi bu kadar eleÅŸtiresim, yerden yere vurasım gelmemiÅŸti. Ahan da yazıyorum.

Robert De Niro ve Edward Norton’u duyunca balıklama gittim filme. Bu müthiÅŸ ikiliden kötü iÅŸ çıkmazdı hani. ArkadaÅŸlar saÄŸolsun, iyi iÅŸ çıkarıp beni yanılttılar. Ne olduÄŸuna, ne anlatmak istediÄŸine hatta birÅŸeyler anlatmak istediÄŸine dahi karar verememiÅŸ bir film. Yaslanmış iki oyuncunun ismine, ordan alır yürürüz, çorbamıza bakarız modunda karşılıklı oyunculuk gösterisinden öte birÅŸey yok. Hesapta alt metin saÄŸlam, çok böyle evrensel, varlıkla, inançla ilgili sorunlardan filan bahsediyoruz ama öyle bir ifadesi, kararı, senaryosu da yok filmin. Yok hayır madem böyle duraÄŸan bir dram çekmeye karar verdin, o filmin içine serpiÅŸtirdiÄŸin gerilim öğeleri de nesi ki. De Niro’nun karısı nasıl silik bir karakterdir, neden vardır, neye tekabül eder ki. Filmin ilk sahnesinde yapılan artislik film içerisinde biryere oturmayacak, bir mana iÅŸaret etmeyecekse neden vardır ki.

Hani tıpkı Nuri Bilge Ceylan türü yönetmenlerin sinemayı derhal terkedip kendilerini fotoğrafa vermeleri gerektiği gibi bu filmin yönetmeni de başka işlerle uğraşmalı. Durağan bir tempo böyle işlenmez. Durağanlığı başka başka şekillerle, farklı öğeler ve senaryolarla işleyebilir, hatta büyük beğeniler de kazanabilirsiniz yönetmenlik yeteneğiniz kadarınca. Fakat hareketli kareler olarak sinemada bunu böyle halledemezsiniz. Daha zekice, anlamlı işler yapmalısınız.

Acı bir kahkaha filmin sonunda. Hadi ordan diyorum…

Kategoriler:Sinema Etiketler:,

Kısaca HTML 5

Pazar, 10 Eki 2010 Yorum yapılmamış

AÅŸağıdaki resim HTML5’in ne olduÄŸu, ne gibi yenilikler getirdiÄŸi ve Adobe Flash’a nasıl bir etki yapacağına dair güzel bir özetleme içeriyor. Ayrıca Firefox, Opera, Explorer, Safari ve Chrome’un an itibariyle hangi HTML5 standartlarını destekliyor olduÄŸunu ve sonraki sürümlerinde de hangilerini destekliyor olacağını sade bir ÅŸekilde görebiliyoruz.

Tabi bu arada HTML5’in geliÅŸtirme sürecinin devam ettiÄŸini ve ÅŸuradaki baÄŸlantıda da izah edildiÄŸi üzere bu uzun sürecin 2022 yılında tamamlayacağını da unutmamak gerek.

html5

Kategoriler:Web Etiketler:, ,

Inception (Başlangıç)

Pazar, 03 Eki 2010 1 yorum
inception

Sonunda gösterimden kalkmadan izleyebildim.

Nasıl olabilip de izleyen hemen herkesin bir filmi bu kadar beÄŸenebilmesine çok ÅŸaşırmıştım gösterime yeni girdiÄŸi zamanlar. YersizmiÅŸ. Ki böyle herkesin beÄŸenip de henüz izlememiÅŸ olanlar için beklentinin yükseldiÄŸi, ama o yükselen beklentilerin de ötesinde bir film bulduÄŸum ilk filmdir. “Efsane” olarak tanımlanan filmlere yeni bir tane daha eklenmiÅŸtir zannımca.

Bir kere filmin bu kadar tutulmasında hemen herkesin ilgisini çeken rüya ve gerçeklik arasındaki iliÅŸkiye saÄŸlam bir sorgu getiriyor olmasının önemli payı var. Sonra, ÅŸimdiden “unutulmazlar” kategorisine dahil edilebilmesinin yanında, duyduÄŸunuzda siz afallatacak o kadar çok repliÄŸi var ki filmin, arada kendinizi bir sahne geriden geliyormuÅŸ gibi hissediyorsunuz. Kimi sahnelerinde “elin oÄŸlu çekiyor” derken, bir baÅŸka parlak fikir daha beliriveriyor. Öyle tatlı bir ÅŸapÅŸallık, sersemleten bir ilgi ve ÅŸaşırtan, hayranlık uyandıran bir kurgu derken bir bakıyorsunuz bitivermiÅŸ film.

Malum artık sinema salonları dönerli, çıkarlı yürüyen merdivenlerle dolu alışveriÅŸ merkezlerimizin en üst katlarına yerleÅŸmiÅŸ durumda. Film bitip de en alt kata inene kadar bayağı bir bocaladım. SaÄŸ, sol, aÅŸağı, yukarı derken iÅŸ “noluyoruz lan” a kadar geldi : ). Gerçeklik algılarım bir süre sekteye uÄŸradı. Ve uzun süredir bir filmi izlerken bu kadar yorulduÄŸumu hissettim. Tabi bu yorgunluk öyle sıkılmaktan, bayılmaktan filan deÄŸil. Yaklaşık 2,5 saatlik bir süre boyunca ilgimi tek an dahi kaybettirmeden ve bu sürükleyicliÄŸi kuru kalabalık aksiyonlarla veya ucuz gerilimlerle saÄŸlamaktan ziyade, felsefi temelleri olan içi dolu dolu bir senaryo, ve üzerinde çok çalışıldığı belli sahnelerle destekleyen saÄŸlam bir yapım olmuÅŸ. Imdb’de de bu kadar kısa zamanda bu kadar çok oy alıp, bu kadar yüksek bir ortalama yakalayabilen ilk film olsa gerek.

Vay efendim şurası olmamış, yok kurgunun şuraları buraları havada kalmış gibi geyiklere hiç girmeyeceğim. Olmuş, hem de süper olmuş.

Kategoriler:Sinema Etiketler:,