pengeunpedi pengeunpedi pengeunpedi
  penguenyuvasi   pengulog   arşiv   bulut   rss

uzun bir bekleyişten sonra

Sunday, September 14, 2008 10:07:21 AM tarihinde Fırat KÜÇÜK tarafından gönderildi.

Yaklaşık 1 senedir bu günlüğüme yazı yazmıyordum. 2009 yılının yaklaşması itibari ile penguenyuvasi.org için tamamen yerli üretim bir blog çalışması içerisine girdim. Sözü fazla uzatmadan kısmet bugüneymiş diyorum. :)

Penguenyuvası'nda neler yapıldı ve neler yeni?

Öncelikle tüm görsel öğeler inkscape ve gimp kullanılarak tek tek el ile hazırlandı. Tabi yuvarlak hatlı penguenler oldu biraz ama neyse :)

Kodlama kısmını başta PHP ve codeigniter kullanarak gerçekleştirdim. (PHP ile proje yapacaklara tavsiyem codeigniter veya symfony'i mutlaka denemeleri.) Ama sonra beni tanıyanlar bilirler 2 hafta önce canım sıkıldı ve kalan kısmını PHP ile devam etmek yerine tamamen Java'da yazmanın daha mantıklı olacağını düşündüm her nasılsa???

Kodlama esnasında kullandığım teknolojiler şunlar:

  1. Düzenleyici ve IDE olarak: netbeans 6.1, vim, gedit
  2. Veritabanı: MySQL (5.0.51a-3ubuntu5.1)
  3. Sunucu: Ubuntu 7.10 üzerinde Apache 2.2.4-3ubuntu0.1 ve Apache Tomcat 6.0.18
  4. Programlama dili: Java
  5. Alt teknolojiler: Java Bean, Filter, Servlet, Jspx, Jspf, Tag handler, Tagx, TLD'ler

Kodlama esnasında kendime bir projenin Java'dan PHP'e dönüştürülmesinin çoka akıllı bir davranış olmadığı konusunda bir çok telkinde bulundum, hatta zaman zaman kendime küfrettim. PHP'de tek metod ile yapacağınız bir şey için Java'da 3-4 satır kod yazmanız kaçınılmaz. Fakat Java teknolojilerinde daha çok detaya inmek mümkün. Sunucu ile ilişkileriniz daha sıkı.

Sıkı ilişki kelimesini açarsak web sunucu ve web sunucu üzerinde çalışan uygulamalar, aynı dilde yazıldığından bu bir avantaj. Bir kaç örnek verelim Servlet dediğimiz web uygulamacığı çalışmadan önce veya çalıştıktan sonra gelen ve gönderilen parametreleri bir süzgeçten (javax.servlet.Filter) geçirebiliyorsunuz. Bu da sizin PHP'de yalnızca Apache'ye modül yazarak gerçekleştirebileceğiniz işleri yapmanıza imkan tanıyor.

<filter>
  <filter-name>Suzgec</filter-name>
  <filter-class>org.pengulab.penguenyuvasi.filters.PenguFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>Suzgec</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

Url örüntülerini (url-pattern) kolayca yönlendirebilmemiz (servlet-mapping) de bir avantaj. Örneğin tüm .pengu uzantılı dosyalara Pengu servlet'inin cevap vermesini sağlıyabiliriz. Böylelikle kendi şablon dilimizi hatta web üzerinde çalışan betik programlama dilimizi yapmamızı sağlar. (Javy webde böyle çalışıyor şuanda)

<servlet>
  <servlet-name>Pengu</servlet-name>
  <servlet-class>org.pengulab.penguenyuvasi.handlers.PenguHandler</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>Pengu</servlet-name>
  <url-pattern>/*.pengu</url-pattern>
</servlet-mapping>

Bunu Apache'de yapmak için bir Tutucu (Handler) yazmamız lazım. Bu Handler'ı .htaccess dosyasında veya genel yapılandırma dosyasında tanımlarız. Apache'nin bütünleşik veya modüllerinde gelen tutucularına ilaveten Java'da olduğu gibi bir tutucu yapmak için Action komutunu kullanıyoruz. (wepy'de bu şekilde çalışıyordu.)

Action add-footer /cgi-bin/footer.pl
AddHandler add-footer .html

Tekrar kullanılabilir öğeler (reusable components) yapma konusunda ise Java oldukça yetenekli tag, tagx dosyaları ile tld kütüphaneleri ile kendi özelleştirilmiş xml etiketlerinizi oluşturabiliyorsunuz. Hatta javanın ifade dili (EL - Expression Language) için işlevlerde yazabiliyorsunuz bu sayede.

penguenyuvasi.org'da neler yeni sorusunun cevabına gelirsek uzun bir zamandır viki imlası ile günlük girdisi yazma hayalim vardı. Bu hayali yeni sürüm ile gerçekleştirdim. Pegi adını verdiğim viki imlası ayrıştırıcısını kullanarak daha kolay ve anlaşılır gönderiler yazmak mümkün. Bir de şirin mi şirin etiket bulutumuz var. Bu da web 2.0'ın nimetlerinden. Gerçi yeni trend bildiğiniz gibi RIA (Rich Internet Applications) yani janjanlı flex, ajax, silverlight sayfaları. Bu uygulamalar internetin yakın gelecekteki hali hakkında ipuçları veriyor. Sanırım HTML artık flash veya applet gibi öğeleri içene gömmekte kullandığımı 4 - 5 satırlık bir geleceğe doğru gidiyor.

Karşılaşılan zorluklar

Java denilince akla yerel problemi geliyor. Oldukça sık karşılaştığım canım Türkçeme yapılan eziyetler'den kurtulamadım bir türlü. Forward ve include'a ait parametrelerde kullandığınız Türkçe karakterler bozuk gönderilmekte. Bu nedenle:

request.setCharacterEncoding("UTF-8");

ifadesi ise bu durumun çaresi fakat her betiğe tek tek yazmak zor olacağı için filter çözümü daha uygun gibi:

import java.io.*;
import javax.servlet.*;

public class EncodingFilter implements Filter {

  private String encoding;

  public void destroy() {
  }

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    request.setCharacterEncoding((encoding == null || encoding.isEmpty()) ? "UTF-8" : encoding);
    chain.doFilter(request, response);
  }

  public void init(FilterConfig config) throws ServletException {
    encoding = config.getInitParameter("encoding");
  }
}

web.xml dosyasınada şu şekilde girdide bulunabiliriz.

<filter>
  <filter-name>EncodingFilter</filter-name>
  <filter-class>org.pengulab.penguenyuvasi.filters.EncodingFilter</filter-class>
  <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>EncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

Bunun daha kısa bir yolu varsa önerileri bekliyorum. Diğer bir yerel problemi ise veritabanına yaptığımız sorgularda baş gösteriyor. Bunu düzeltmemiz için JDBC bağlantı dizgesinin sonuna ek iki adet parametre eklememiz gerekli:

jdbc:mysql://localhost:3306/veritabani?characterEncoding=utf8&useUnicode=true
atölye, haber, inceleme, java, php, sorun çözümükaynak | yorumlar [0]
 
ilişkili gönderiler:

delicious | digg | reddit | magnoliacom | furl | google | yahoo






pengulog

her hakkı erkektir © 2008 e-posta