4. sınıfın ilk döneminde Yazılım Mühendisliği Laboratuvarı dersi kapsamında geliştirdiğimiz projede elde ettiğimiz primefaces deneyimini kullanarak, Eren Tunçer ile ders kapsamında başlangıç seviyesinde bir primefaces (2.1) dökümanı hazırlamıştık. Döküman şu başlıklardan oluşuyor:
- JSF Nedir?
- Neden JSF?
- JSF ve MVC Mimarisi
- Eclipse’te JSF projesi oluşturma
- PrimeFaces
- PrimeFaces bileşenleri üzerine örnekler
Buraya tıklayarak dökümanı indirebilirsiniz.
Üretkenliğinizi artırmak için programlarda kısayolları ne kadar etkin kullandığınız önemli bir etken. Ben de geliştirme zamanımın büyük bir kısmını Eclipse üzerinde geçirdiğim için bazı şeyleri konsantrasyonu kaybetmeden hızlı bir şekilde yapmak için Eclipse kısayollarını etkin bir şekilde kullanmaya çalışıyorum. Bu arada geçen yaz yazdığım Eclipse kısayolları yazımı da günceledim. Kısa zaman önce MouseFeed adında bir Eclipse eklentisi buldum. Kendisi Eclipse’i kullanırken size yaptığınız şeyin kısayol tuşunu gösteriyor. Örneğin siz bir metodun ya da niteliğin adını değiştirmek için Rename ekranını açtığınızda eklenti sizin için “Alt + Shift + R” yi ekranda pörtletiyor. Kısayol dağarcığını genişletmek için bence birebir
Eklenti sayfasına gitmek için buraya, kurulum adımları için buraya tıklayın.
İnsanın open for extension olması lazım, evet ama closed for modification, insanda olmasa daha iyi olacak bişey. En azından çok katı bir şekilde olmasa. Testler çakılacak korkusundan mı acaba bu kadar çok iç direnç. Bir sonraki cümlede yazacağım şeyi önceki cümlenin noktasına gelmeden de unuttum, saatten herhalde; ki aslında nokta değil soru işareti koymak lazım oraya, cevaptanda mı ümidi kestim bilmiyorum ki. 3 ay sonra bişeyler yazayım dedim, onda da 2 dakkada “yoksa biz hayal miyiz”e bağladım. Neyse, mezuniyet hakkında geniş bi yazı yazıcam, hele şu finaller de bi geçsin.
Alakasız dipnot: Dayanamadım, mavi temaya geri döndüm. Renkli renkli böyle daha güzel.
Birkaç gündür aralıksız dinliyorum, Zakkum yine harika bir şarkı yapmış.
Acayip bir dil in, Türkçe yine out. Dependency Injection’ı herkes kafasına göre Türkçeye çevirmiş ama bence en güzel ve geçerlisi şu abimin dediği “bağımlılık zerketme”.
Efenim JSF bize bean’lerimiz içerisinde validator metodlar tanımlama imkanı sunuyor olsa da, duruma özel validator’ları yeniden kullanılabilirlik açısından ayrı sınıflar halinde yazmak bence daha makul. Örneğin bir üye kayıt formunda kullanıcının girdiği eposta adresinin başka birisi tarafından kullanılıyor olup olmadığının kontrolünü formun arkasındaki bean üzerinden ya da ayrı bir (custom) validator üzerinden yapabiliriz. Bu kontrol bize yalnızca üye kayıt esnasında gerekiyorsa bean içinde tanımlamak uygun olabilir, bean ayrıca JSF tarafından yönetildiğinden, asıl sorguyu yapacağımız sınıfı JSF bize inject edecektir ve doğrudan sorgumuzu yapıp işi halledebiliriz. Ama örneğin başka bir kaç noktada daha verilen bir eposta adresinin veritabanında kayıtlı olup olmadığının kontrolü gerekebilir. Bu durumda, işlemi bir (custom) validator sınıfa koymak kod tekrarı yapmamak ve bu sınıfı gerektiği noktalarda kullanabilmek açısından gayet mantıklı.
read more…
Öncelikle başlıkta bir kısmına şahit olduğunuz ve birazdan fazlasına maruz kalacağınız kötü Türkçe için sizden özür diliyorum.
Bir projede, log tutmak için SLF4J, Dependency Injection için de Spring kullanıyorken, bean’lerin SLF4J logger’larına statik olarak bağımlı olması yerine logger’ların bean’lere Spring ile enjekte etmenin daha güzel, aradaki bağımlılığı azaltıcı yönde bir yaklaşım olacağını düşündüm (enjekte edilecek loggerların SLF4J logger’ı olması gerekmiyor). Bunu nasıl yaparım diye düşünürken Spring’in tam da düşündüğüm gibi bir güzellik sağladığını, insanların da benden çok çok evvel o güzellikten bir çözüm elde ettiğini araştırırken buldum.
İnsan bazen “ulan yoksa cenabet miyim” diye soruyor kendine. Neden mi?
JSF’te h:dataTable içerisinde h:commandLink ile request scope tanımlı bir bean’in action method’una gitmeye çalışıyorsanız zooort diye cortluyorsunuz (uykusuzsanız ve yorgunsanız o zortlama daha da bir hardcore oluyor). Türkçemi yiyim. Niye zortingen olduğumuzu anlatmaya hiç girişmeyeceğim, merak eden Google’a şöyle bir göz atsın. h:dataTable idleri bozuyormuş h:commandLink id’sini kaybediyormuş falan filan bu saatte bu yorgunlukla Vallahi almıyor kafam. Nette bazı amcalar çözüm sunmuşlar, mesela bean’i session scope’a at falan demişler -ki denedim olmadı- ama bean’ı session’a atmak bazen kötü bir seçim olabilir. Neyse ne, ben çözüme geliyorum hemen.
read more…
Bir siparişi 13 gün boyunca “ürününüz paketlenip kargoya teslim ediyor” durumunda bırakmayı başarabilip, sipariş iptali talebine de talebin ardından 5 gün sonra tekrar yazılan zehir zemberek mesajla yanıt dönen hepsiburada’ya sonsuz teşekkürlerimi iletiyorum. İnternetten alışveriş yaptığım iki siteden biriydi kendileri. Bir çuval incir böyle bok edilir. Hell yeah hepsiburada hepsiburada hepsiburada.com!
Uzun bir (tatil) ara(sın)dan sonra merhaba!
Mevzuya iş parçacıkları (=thread) nedir, neden kullanılır diye başlamak istemiyorum ama kısa bir önbilgiyle giriş yapmaya da üşenmeyelim şimdi.
İş parçacığını şu adreste amcam gayet güzel örneklendirmiş. Ben de o örneği kullanayım:
Windows Explorer’ı düşünelim. Windows Explorer’ı açıp dizinler arasında gezinmeye başlayalım. O esnada biraz zaman alacak bir kopyalama işlemi başlatalım. Kopyalama işlemi başlarken küçük bir pencere açılıyor ve kopyalama işlemi orada sürüyor, ama o esnada hala Windows Explorer’ı başka işler için kullanabiliyoruz: farklı dizinlere geçiş yapabiliyoruz, yeni işlemler tetikleyebiliyoruz. Yani aynı anda, tek bir Windows Explorer programı üzerinde, birden fazla işlem yapabiliyoruz. İşte bu gibi şeyleri iş parçacıkları ile yapıyoruz. Windows Explorer tek iş parçacığı üzerinden çalıştırılsaydı başlattığımız kopyalama işlemi sonlanana kadar program arayüzü bize yanıt vermeyecekti. Basitçe düşünürsek bile en az 2 iş parçacığı var diyebiliriz. Birinci iş parçacığı kullanıcı arayüzünü işletiyor: klavye ve fareyi dinleyip gerekli işlemleri tetikliyor, ikinci iş parçacığı da çeşitli işleri yapıyor: örneğin bizim kopyalama işimizi.
Bu örnek iş parçacıklarının kullanım nedenlerinden sadece biri. Bu örnekte lullanıcı arayüzünün hızlı tepki vermesi için (=responsive olması için) programın gerçekleştirdiği asıl işleri başka bir iş parçacığına taşıyoruz. Aynı zamanda arka planda bazı işler gerçekleştirmek için de iş parçacıklarını kullanabiliyoruz. Örneğin zaman açısından çok kritik olmayan fakat yapılması gereken işleri başka bir iş parçacığına devrederek o iş parçacığının belirli aralıklarla işletilip verilen işlerin yapılmasını sağlayabiliyoruz. Giriş/çıkış (IO) ve ağ işlemleri gibi ne kadar süreceğini kestiremediğimiz işleri de başka iş parçacıklarına yükleyerek işlemci zamanının daha verimli kullanılmasını sağlayabiliyoruz. Örneğin programımızın diskten bir veri okurken veya ağ üzerinden veri çekerken yapması gereken başka işler de varsa programı g/ç veya ağ işlemleri için bekleterek işlemciyi verimsiz kullanmak pek iyi bir çözüm olmuyor.


