12 Aralık 2010 Pazar

Müzik ve İş

Bazen müzikle çalışmanın verimimi oldukça arttırdığını düşünüyorum. Özellikle ofisdeki gürültülü ortamda bir şeyler dinlemek ilginç şekilde yaptığım işe odaklanmamı kolaylaştırıyor. Hatta bazen müziksiz çalışamıyorum bile diyebilirim.

Music & Work @ themoah's posterous

The Best Sounds For Getting Work Done @LifeHacker

When Noise Helps: Stochastic Resonance and ADHD@Developing Intelligence

23 Eylül 2010 Perşembe

Hibernate Transform Alias To Bean

Hibernate'de bir tabloya yapılan sorgu sonucunu direkt olrak başka bir tabloya dönüştürme: ( Hibernate Transform Alias To Bean )


public List findTxnPerPCodes(String institutionId) {

  try {
     // Criteria oluşturuyoruz

     Criteria c = getSession().createCriteria(Txn.class));

     // Hibernate BUG: this. koymak gerekiyor. bkz:

     // http://www.weask.us/entry/hibernate-query-projections
     c.add(Restrictions.eq("this.institutionId", institutionId));

     // Projection oluşturuyoruz

     ProjectionList projList = Projections.projectionList();

     // Group by özelliklerini veriyoruz

     projList.add(Projections.groupProperty("institutionId"));
     projList.add(Projections.groupProperty("timeDaily"));
     projList.add(Projections.groupProperty("atmDim"));
     projList.add(Projections.groupProperty("currencyDim"));
     projList.add(Projections.groupProperty("pcode"));

     // setResultTransformer'in TxnPerPCode icinde objeleri set

     // edebilmesi icin alias veriyoruz
     projList.add(Projections.property("institutionId"), "institutionId");
     projList.add(Projections.property("timeDaily"), "timeDaily");
     projList.add(Projections.property("atmDim"), "atmDim");
     projList.add(Projections.property("currencyDim"), "currencyDim");
     projList.add(Projections.property("pcode"), "pcode");
     projList.add(Projections.count("id"), "txnCount");
     projList.add(Projections.sum("amount"), "txnAmount");

     // Criteria için projection set ediyoruz

     c.setProjection(projList);

     // Criteria sonucunu TxnPerPCode entity'lerine transform ediyoruz
     c.setResultTransformer(Transformers.aliasToBean(TxnPerPCode.class));

     return c.list();

  } catch (HibernateException e) {
     throw new DBInfrastructureException(e);
  }


}

20 Eylül 2010 Pazartesi

And So You Code?


UniPaaS isimli yazılımın viral reklamını yapan oldukça eğlencili bir video.

15 Temmuz 2010 Perşembe

ExtJs.Window için Sürükle Bırak (Drag'n Drop) Düzeltmesi

Bir süredir ExtJS ve diğer bazı JS kütüphanelerinden bolca kullanıldığı bir ajax ekranı ile uğraşmaktaydım. Şöyle bir problemle karşılaştım, ekranda bir çok panel açık olduğunda bir Ext.Window açtığımızda Ext.Window'u sürükle bırak yaparken aşağıdaki ekranlarla da etkileşim sürdüğü için takılmalar oluyordu.

Bu sorunu Ext.Window'u "modal pane" olarak yaparak (modal:true) çözebilirdim ama window açıkken arka plan ile etkileşimi kaybetmek de istemiyordum. Bu nedenle ben de şöyle bir çözüm düşündüm: Ext.Window sürükle bırak yapılırken arka plan modal pane haline gelsin (opacity verilen bir mask div'i sayesinde), sürükle bırak tamamlanınca da eski haline dönsün.

    ...
    <div class="ext-el-mask" id="ext-modal-mask" 
    style="display: none; width: 100%; height: 100%; z-index: 9000;"></div>
    ...
    var originalStartDrag = Ext.Window.DD.prototype.startDrag;
    var originalEndDrag = Ext.Window.DD.prototype.endDrag;
    Ext.override( Ext.Window.DD, {
        startDrag: function() {
    Ext.get('ext-modal-mask').show();
    originalStartDrag.apply(this, arguments);
        },
        endDrag: function() {
         Ext.get('ext-modal-mask').hide();
         originalEndDrag.apply(this, arguments);
        }
    } );

2 Temmuz 2010 Cuma

JSF Component Binding

JSF te ön yüzde kullandığımız nesnelerin sunucu sınıflarındaki karşılıklarını oluşturmak için binding özelliği kullanılır.
Örneğin aşağıda bir input nesnesi bulunmakta ve kayitDemo beanindeki adNesnesi ne bind edilmekte.
    <h:inputText value="#{kayitDemo.ad}" binding="#{kayitDemo.adNesnesi}"/>
    <h:commandButton action="#{kayitDemo.kaydet}" value="Kaydet" />
Bu durumda adNesnesi ne aşağıdaki gibi tüm özellikleri ile erişebiliriz.
    public class KayitDemo {
     private String ad;
     private HtmlInputText adNesnesi;
     public void kaydet() {
      System.out.println("ad = " + ad);
      adNesnesi.setMaxlength(6);
      adNesnesi.setReadonly(true);
      adNesnesi.setValue("Ahmet");
     }
     …
    }
Kullanabileceğiniz nesne tipleri listesi aşağıda bulunmaktadır.
HtmlInputHidden
HtmlInputSecret
HtmlInputText
HtmlInputTextarea
HtmlOutputFormat
HtmlSelectManyListbox
HtmlSelectManyMenu
HtmlSelectOneListbox
HtmlSelectOneMenu
HtmlSelectOneRadio
HtmlOutputLabel
HtmlOutputLink
HtmlOutputText
HtmlSelectBooleanCheckbox
HtmlSelectManyCheckbox
UIInput
UIOutput
UISelectBoolean
UISelectMany
UISelectOne


Sürekli işe yarar bir şey olduğu için elimin altında bulunmasını istedim.



27 Haziran 2010 Pazar

Java Forever





If you've been longing for a movie about the Java programming language, and not much else, JavaZone should do the trick. Starring Scala Johansson, William Windows, Eddie Larrison, Mona Lisa Harddrive, and Lenny Linux.

16 Haziran 2010 Çarşamba

BFB (The Prehistoric Time Before Firebug)

A quote from Java World Article:
Web development arguably has two distinct eras: BFB -- the (prehistoric) time before Firebug when we learned the limits of alerts -- and the modern AFB (after Firebug) when we found that we can once again spend quality time with our families. Firebug truly is Web development evolved. Developing a Web application without using Firebug is like coding Java in vi -- it can be done, but it's just not worth the pain.

Kaynak: Ajax: Tools of the trade - "A rich array of tools for the modern JavaScript developer"

30 Mart 2010 Salı

Why You Can’t Work at Work


Big Think Interview with Jason fried - Why you can't work at work?



"
The modern workplace is structured completely wrong. It’s really optimized for interruptions.

Everyone’s calling meetings all the time, everyone’s screaming people’s names across the thing, there’s phones ringing all the time. People are walking around. It’s all about interruptions.

I’m working 50-60 hours this week. It’s not that there’s 50 or 60 hours worth of work to do, it’s because you don’t work at work anymore. You go to work to get interrupted.

Like before you know it, it’s 4:00 and you’ve got nothing done today.

If someone’s calling my name, or tapping on my shoulder, or knocking on my door, I can’t ignore those things.

Managers are the biggest problem because their whole world is built around interruption. That’s what they do. Management means interrupting. Hey, what’s going on? How’s this going? Let me call a meeting because that’s what I do all day, I call meetings. And so, managers are the real problems here and that’s got to change too.  


Some more useful advices from Uncle Jason:

Real World ?
Whatever you’re doing, cut it in half





18 Şubat 2010 Perşembe

Barbie Artık Bilgisayar Mühendisi

Ve barbie sonunda doğru yolu buldu ve bilgisayar mühendisi oldu.


Peki barbie nasıl oldu da bilgisayar mühendisi oldu? Barbie resmi sitesinde Barbienin mesleğini belirlemek iin anket yapılınca, bilişim meraklıları da örgütlenip barbienin bilgisayar mühendisi olması için oy kullandılar. Yetkililer bunu farketmiş olmalı ki barbienin bu sene bilgisayar mühendisi olmasının dışında sadece kızların verdiği oyları dikkate alarak haber spikeri de olmasını uygun görmüşler.

Sonuçlar İçin

16 Şubat 2010 Salı

Configuring Database Character Encoding

Veritabanı Karakter Kodlaması Ayarı (UTF-8)
Configuring Database Character Encoding


Geçenlerde üzerinde çalıştığım bir projede web sayfasından FORM ile gönderdiğim verilerin veritabanında türkçe karakterlerinin bozuk çıktığını farkettim. Bunu çözmek için çok çeşitli yollar denedim ve sonunda aşağıda anlatacağım çözüm yolunu buldum.

Web Sayfasındaki formlardan database'e veri kaydederken sık sık encoding problemleriyle karşılaşılır. Bu sorunları aşmak için database tarafındaki iki yerde "character-encoding" ayarlarının yapılması gerekir.

1-) Örneğin verileri UTF-8 encodinginde tutmak istiyorsak öncelikle veritabanını UTF-8 encodingi ile oluşturmalı ve tablo ve alanlarda da aynı encodinge sadık kalmalıyız.

CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin;

NOT: Bunun dışında veritabanının encodingini de UTF-8 yapmalı (default-character-set=utf8) ve tabloları ve onların karakter tutan alanlarını da UTF-8 encodingine ayarlamalısınız. (ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;)


2-) İkincisi veritabanına bağlanırken de encodingi belirtmemiz gerekmekte. Örneğin veritabanı bağlantısını (connection string) aşağıdaki gibi tanımlamalıyız:

jdbc:mysql://hostname:port/database?autoReconnect=true&useUnicode=true&characterEncoding=utf8

NOT: XML dosyasında bağlantı tümcesi tutulacaksa "&" karakterini "&" olarak yazmaya dikkat etmeliyiz.

3-) Ayrıca TOMCAT'in server.xml dosyasından URI encoding ayarı da yapmanız gerekli:


<Connector port="8080" URIEncoding="UTF-8"/>










12 Şubat 2010 Cuma

Hibernate Distinct Query With Join

Aşağıdaki gibi iki tablonun birleştirildiği (join) bir distinct sorgu düşünelim. Ayrıca sorgu bir sütuna göre de filtrelensin:

SELECT DISTINCT ud.birthDate FROM user u, userDetail ud WHERE u.id=ud.userId AND u.membershipType=?


Bunun hibernatedeki karşılığını veren fonksiyon aşağıdaki gibi olmalı:


public List<Date> findDistinctBirthDates(String membershipType) {
        try {
            Session session = getSession();
            Criteria userCriteria = session.createCriteria(User.class);
            Criteria userDetailCriteria =
                        userCriteria .createCriteria("userDetail","ud");
            userDetailCriteria.setProjection(
                        Projections.distinct(
                                    Projections.property("ud.birthDate")
                        )
            );
            userCriteria.add(Restrictions.eq("membershipType",membershipType));
            return userCriteria.list();
        } catch (HibernateException e) {
            throw new DBInfrastructureException(e);
        }
}


5 Şubat 2010 Cuma

SVN ve Proje Yönetim Sistemi

Projelerinizi web üzerinden yönetmek mi istiyorsunuz? Bunun için de açık kaynak bir yönetim sistemi mi arıyorsunuz?

Öyleyse size Proje Yönetim Sistemi (Issue Tracking) ve SVN yönetim sistemi olarak kullanabileceğiniz UNFUDDLE isimli ücretsiz aracı şiddetle tavsiye ederim.



Ücretsiz planında 200MB alan ve iki kullanıcıya izin veriliyor. Bazı özellikleri paralı olsa da genel olarak kişisel projeniz için kullanacaksanız ihtiyaçlarınızı fazlasıyla karşılayacaktır.


http://unfuddle.com/


12 Ocak 2010 Salı

En iyi 20 Programcı Mazareti



The Top 20 replies by programmers when their programs do not work:
  1. That’s weird…
  2. It’s never done that before.
  3. It worked yesterday.
  4. How is that possible?
  5. It must be a hardware problem.
  6. What did you type in wrong to get it to crash?
  7. There is something funky in your data.
  8. I haven’t touched that module in weeks!
  9. You must have the wrong version.
  10. It’s just some unlucky coincidence.
  11. I can’t test everything!
  12. THIS can’t be the source of THAT.
  13. It works, but it hasn’t been tested.
  14. Somebody must have changed my code.
  15. Did you check for a virus on your system?
  16. Even though it doesn’t work, how does it feel?
  17. You can’t use that version on your system.
  18. Why do you want to do it that way?
  19. Where were you when the program blew up?
  20. It works on my machine.”


Kaynak: http://www.thatwasfunny.com/top-20-programmers-excuses

6 Ocak 2010 Çarşamba

Oracle PL/SQL Free Unused Memory

Oracle'ın XML kütüphanesindeki bir memory leak problemi bizi uzun süredir uğraştırıyordu. Başta hatanın yazdığımız koddan kaynaklandığını düşünmüştük, ancak anladık ki bu Oracle'ın bir bug'ıymış:

Miracle Benelux isimli blog'da bu problem için dbms_session.free_unused_user_memory() metodunun kullanılmasını tavsiye edilmiş. Bu da bizim problemimize 100% bir çözüm sağladı.