25 Kasım 2008 Salı

Video Lectures

Mühendislik ve bilim dünyasının YouTube'u olarak görülen Video Lectures isimli web sitesini sık kullanılanlarınıza eklemenizi tavsiye ederim. En son baktığımda sitede "Computer Science" etiketiyle 1375 video vardı. Üstelik MIT (Massachusetts Institute of Technology) de elindeki tüm görsel içeriği bu siteye bağışlamış. Aşağıdaki iki link sayesinde artık MIT'ye gitmeden de MIT'li olabiliriz demek ki :P

VideoLectures'daki MIT sayfası
MIT Open Courseware kapsamında açılan online dersler

10 Kasım 2008 Pazartesi

HTML5'deki yenilikler

HTML5 ile birlikte birçok yenilik geldiği söyleniyor.

Gerçi Internet Explorer'ın HTML5'i desteklemediği söyleniyor ama bu özellikler Internet Explorer 7'de desteklense bile bir çok kişi hala IE6 hatta IE5 kullanıyor. Bu özellikleri kullanmak için biraz daha zaman geçmesi beklemek daha iyi olur sanırım. Yine de bi incelemeye değer bence.

Aşağıdaki makalelere bir göz atabilirsiniz:

W3.org - HTML 5 differences from HTML 4 ( link1 ) ( link 2 )
IBM Developer Works - New elements in HTML 5
W3 Schools - HTML5 Reference
Alistaparat - A Preview of HTML5
Fatih Hayrioğlu - HTML5'in Yeni Elementleri

30 Ekim 2008 Perşembe

Java'da PHP kullanmak : Quercus

Quercus: Java altında PHP

Quercus isimli bir kütüphane sayesinde artık Java ile PHP'yi bir arada kullanmak artık çok kolay. Quercus ayrıca Resin'i de geliştiren Caucho tarafından GPL lisansıyla yayımlanan bir teknoloji.

Quercus aslında PHP'nin %100 Java ile tekrar yazılmış hali. Bu nedenle Quercus herhangi bir Java Application Server üzerinde rahatlıkla çalıştırılabiliyor. Quercus Resin Application Server ile birlikte geliyor ama diğer serverlar içinse kurulum bir .war dosyası ile mümkün. Kurulum için ayrıca yapmanız gereken şey config dosyasında ufak bir değişiklik.

Quercus, PHP'nin tüm özelliklerini içinde barındırmasının yanısıra PHP'de kullanılan PDF, PDO, MySQL ve JSON gibi bazı temel modül ve eklentileride içinde barındırmakta.

Quercus PHP'nin Java dilinde tekrar yazılmış hali olduğundan Java servisleri ile de birlikte çok iyi çalışabiliyor. Ufak birkaç ayarlamayla PHP içinden java servislerini çağırmanız mümkün.


İlk Deneme

Application Server olarak Resin kullandığım için Quercus zaten kurulu gelmekteydi.
Java ile geliştirdiğim Web Uygulamasında tek yapmam gereken /WEB-INF/web.xml dosyasına aşağıdaki gibi bir "servlet mapping" tanımlamam yeterli oldu.

<web-app>

<servlet-mapping>
<servlet-name>AjaxServlet</servlet-name>
<url-pattern>/AjaxServlet</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name> QuercusServlet </servlet-name>
<servlet-class>
com.caucho.quercus.servlet.QuercusServlet
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name> QuercusServlet </servlet-name>
<url-pattern> *.php </url-pattern>
</servlet-mapping>

</web-app>


Bundan sonra örnek bir hello.php dosyası yazdığımda, hello.php'nin normal bir jsp dosyası gibi yani javaya çevrilerek derlendiğini gördüm.

Ayrıntılı Bilgi İçin

http://quercus.caucho.com/
http://www.caucho.com/resin-3.0/quercus/

17 Ekim 2008 Cuma

CentOS'da Başlangıçta Çalışan Servisleri Ayarlama

( ENGLISH: Enabling and disabling services during start up in CentOs )

Geçenlerde Kullandığımız CentOs 5 Linux Server'da başlangıçta çalışan servislerden bazılarını Kapatıp , bazılarını da çalıştırmak istedik. Aşağıdaki kaynaklar bize oldukça yardımcı oldu:

http://linuxhelp.blogspot.com/2006/04/enabling-and-disabling-services-during_01.html
http://www.netadmintools.com/art94.html

Yaptıklarımızı özetlersek:

1-) Öncelikle /etc/init.d/ içine yeni bir script oluşturmamız gerekiyor. Bu dosyaya "mytomcat" diyelim. Bu scriptin içeriği şöyle olmalı.
# chkconfig: 2345 20 80
# description: Runs my tomcat server
#

export JRE_HOME=/usr/java/jdk1.5.0_16/jre

./var/appservers/mytomcat/bin/startup.sh
Linux'un bu oluşturduğumuz rc script dosyasını çalıştırabilmesi için bir tanımlama satırı oluşturmak gerekiyormuş. Bu satır ise yukarıda gördüğünüz "# chkconfig: 2345 20 80" satırı oluyor. Burda 2345 script'in çalıştırılacağı run-level'leri, 20 start priority'sini, 80 ise kill priority'sini tanımlıyormuş. Bu tanımlama satırlarından sonra da elbette script'in içeriğini yazıyoruz.

2-) Bundan sonra oluşturduğumuz script chkconfig'e tanıtmamız gerekiyor. Bunu da şu şekilde yapıyoruz:
chkconfig mytomcat --add

3-) Sonra yazdığımız script'i aşağıdaki şekilde enable ediyoruz:

chkconfig mytomcat on

4-) Script'in hangi levellerde çalışacağını da aşağıdaki komutla ontrol edebiliriz:

chkconfig mytomcat--list


5-) Son olarak şunu da belirteyim biz tomcat'i 80 portunda çalıştırmak istiyorduk ama bu yapmak için önce 80 portunda çalışan Apache'yi kapatmamız gerekiyordu. Normalde "chkconfig httpd off" yaptığımızda apache'nin Linux'da başlangıçta çalıştırılan servisler listesinden çıkması gerekiyordu ama nedense bu işe yaramadı. Bunun için biz de Türk Zekamızı (!) kullanarak /etc/init.d/httpd servicinin ismini değiştirdik böylece Linux bu script'i bulamadığından başlangıçta apache'yi çalıştıramadı.


16 Ekim 2008 Perşembe

Microsoft Silverlight

Genel olarak bir Java tutkunu olduğum için Microsoft tarafındaki teknolojilerle çok ilgilenme imkanım olmadı ne yazıkki ama bu hep içimde ukde olagelmiştir. Belki de bu yüzden Microsoft tarafındaki gelişmelere de pek uzak kalmamaya çalışıyorum.

Sözü kısa kesmek gerekirse, Microsoft Silverlight'ın ikinci sürümünü duyurdu. Oldukça güzel şeyler vadeden bu teknolojiyi gelin biraz daha yakından tanıyalım.

GENEL BAKIŞ

Microsoft Silverlight, web (browser) uygulamaları için animasyon, vektör ve 3D grafik ve video oynatma imkanları sağlayan, WPF tabanlı (Windows Presentation Foundation) browser eklentisidir. [1]

Adobe Flash, DHTML ve JavaFX ile rekabeti amaçlıyor. [1]

Silverlight ile oluşturulan içerik, Adobe Flash'in aksine derlenmiyor. [1]

Vektör grafik ve animasyonların işaretleme dili biçiminde kodlanmasını sağlayan görsel geliştirme dili XAML, içerdiği belgedeki Javascript değerlerine ulaşıp çalıştırabilmesi sayesinde, XAML (Okunuşu:Zamel) belgeleri DHTML/Ajax/Javascript içerikleri tarafından düzenlenip, programlanabiliyor. [1]

XAML oluşturmak için herhangi bir editör yeterli olduğu gibi, Microsoft’un bu iş için hazırladığı “Expression Blend” uygulamasıyla daha kolay çizim yapılabilir, animasyon oluşturulabilir. [1]

Olaylara biraz daha teknik bakmak gerekirse, iyi bir Silverlight uygulaması geliştirmek için temelde 2 kişiye ihtiyacınız var: Bir tasarımcı/animasyoncu ve bir yazılımcı (js/.net). Tasarımcı, Microsoft Expression Blend ile uygulamanın arayüzünü ve animasyonlarını yaratıp XAML (Extensible Application Markup Language) formatında yazılımcıyla paylaşacaktır. Yazılımcı ise uygulamanın arka tarafını tasarlayıp uygulamaya geçecektir. [2]

KAYNAKLAR

Silverlight Resmi Sitesi
Sikverlight Hakkında Türkçe Wiki Girdisi
Silverlight Hakkında İngilizce Wiki Girdisi
Silverlight Hakkında Türkçe Güzel Bir Mini Eğitim Yazısı
Javascript Geliştiricileri İçin XAML ve Microsoft Silverlight Sunumu

ÖRNEKLER ve DEMOLAR

Web Tabanlı XAML IDE : Rainbow 9

ALINTILAR


[1]: Azer Koçoğlu, http://docs.google.com/TeamPresent?docid=ddwks393_12dbf2zg&skipauth=true
[2]: Eren Emre, SiberKültür, http://www.siberkultur.com/?q=microsoft-silverlight

14 Ekim 2008 Salı

Dilbert'den Seçmeler

Dilbert'in Yenilen Sitesini oldukça beğendim. Boş zamanlarınızda ziyaret edebileceğiniz çok güzel bir site. Ayrıca favori Dilbert'lerinizi kaydetmeniz de mümkün. Herkese tavsiye ederim.

İşte benim hoşuma giden bazı dilbert'lerden seçmeler:

Dilbert.com



Dilbert.com



Dilbert.com

Diğer favori Dilbert'lerime buradan bakabilirsiniz.


13 Ekim 2008 Pazartesi

JQuery

Javascript kütüphaneleri bu aralar çok moda. JQuery isimli bi javascript kütüphanesi galiba prototype.js'nin pabucunu dama atmaya aday. Burdun buradan inceleyin:

http://jquery.com/

Burda da çok güzel bilgiler var:

http://www.eburhan.com/jquery-dunyasina-adim-atiyoruz/

9 Ekim 2008 Perşembe

Linux'de Faydalı Komutlar

Linux Kullanırken Elinizin altında bulunması gereken bazı komutlar:

# Dosyayı Sıkıştır (Tar formatında)
tar -czvf FILE.tar.gz DIR_OR_FILE

# Sıkıştırılmış Dosyayı Çıkart
tar -xzvf FILE.tar.gz

# Give all rights to all users
chmod 777 -R "MY FOLDER NAME"

# Search for a file or directory everywhere
find / -iname "FILE TO FIND"

# Copy an entire directory
cp -R DIR_TO_COPY/ NEW_DIR/

# Print working directory
pwd

# Dosya Sil
rm FILE_NAME

# Dizin Sil
rmdir DIRECTORY_NAME

# bir komutu başka bir kjullanıcı hesabına çalıştırma
su -c 'COMMAND' other user' # Örnek:
su -c 'pg_ctl start -D /usr/local/pgsql/data -l serverlog' postgres



6 Ekim 2008 Pazartesi

Yazılım Ölçümü (Software Metric) Nedir?

İnternette gezinirken Portakal Teknoloji'den Bora Bey'in bloguna rastladım. 'Yazılım Ölçümü'yle ile ilgili faydalı bulduğum bir makale yazmış. Kısaca bahsetmek istedim.

Yazılım ölçümü (İng. software metric) bir yazılımın yada yazılım projesinin ölçebildiğimiz herhangi bir özelliği olarak tanımlayabiliriz.

Peki insanlar ne gibi şeyleri ölçmeyi anlamlı bulmuşlar?
  • Yazılan satır sayısı
  • Kodun karmaşıklığı (İng. cyclomatic complexity)
  • Her bin satır (KLOC) başına düşen hata (bug) sayısı
  • Bir hata tespit edildiğinde onu düzeltmenin ne kadar zaman aldığı
  • Testler toplam geliştirme zamanının ne kadarını alıyor?
Böyle bir çok ölçüm üretmek mümkün.


Özetlediğim makalenin tamamını buradan okuyabilirsiniz.

Ayrıntılı Bilgi İçin: http://en.wikipedia.org/wiki/Software_metric

24 Eylül 2008 Çarşamba

Lightbox JS

LightBox JS, web sitenizde resimlerin büyük halini yeni bir sayfa açmadan layer olarak göstermenizi sağlayan bir script uygulamasıdır. gerçekte kullanımı çok kolay ve pratik bir uygulama. Aşağıdaki linklerden ayrıntılı bilgiye erişebilirsiniz:

Kaynak-1
Kaynak-2

22 Eylül 2008 Pazartesi

Java ile Browser Tipi Kontrolü

Jsp sayfalarınızda, sayfayı görüntüleyen kullanıcının browser tipini aşağıdaki şekilde kontrol edebilirsiniz:

String ua = request.getHeader( "User-Agent" );
boolean isFirefox = ( ua != null && ua.indexOf( "Firefox/" ) != -1 );
boolean isMSIE = ( ua != null && ua.indexOf( "MSIE" ) != -1 );
response.setHeader( "Vary", "User-Agent" );

Ayrıca bakınız:

request:HttpServletRequest

12 Eylül 2008 Cuma

Yeniden Kullanım: Software Reuse

Yeniden kullanım tüm mühendislik dallarında kendine önemli yerler edinmiştir. Bu sayede daha kısa zamanda daha çok üretim yapıp, daha verimli çalışabilmek mümkün olmaktadır. Yazılımın yeniden kullanılabilirliği, YK (Software Reuse), varolan yazılım varlıklarının - kod, gereksinimler, tasarımlar, test durumları vs. - yeni yazılımların üretilmesinde kullanılması olarak tanımlanmaktadır. YK, bir çok faydayı da beraberinde getirmektedir. Bunlar şu şeklide sıralanabilir:

  • Artan güvenilirlik: Sürekli test edilen bileşenlerin kullanılması sayesinde yazılımlar hatalardan arınmaktadır.
  • Düşük süreç riski: Bilindik bileşenler tekrar kullanıldıkları için, projeler zamanında teslim edilebilmektedir.
  • Kaynakların verimli kullanılması: Yeniden kullanılan yazılım varlıkları olduğunda, insanları yeniden kullanma oranı düşmektedir. Bu sayede yetişmiş insan gücü daha verimli ve yaratıcı bir şekilde kullanılabilmektedir.

Yazılım mühendisliğindeki tüm güncel yaklaşımlar, YK’nın artırılmasını hedeflemektedir. Yeniden kullanım tarihine baktığımızda, ilk olarak fonksiyonlar bazında yeniden kullanım göze çarpmaktadır. Bu YK’nın en basit tekniğidir. Bu tip YK’da mühendislerin bilgisine bağımlılık fazla olduğundan çok verimlilik sağlanamamaktadır. Bir sonraki YK aşaması kütüphanelerdir. Kütüphaneler, kullanıcılarına bir tür arayüz sunabilmektedirler ve bu sayede YK’da kolaylık sağlarlar. Ancak kütüphanelerin yapılandırılabilirlikleri düşüktür ve kütüphane kullanarak geliştirilen uygulamalar, bu kütüphanelere çok bağımlı kalmaktadırlar. İskeletle (Çatı, Framework), YK konusunda bir adım öndedirler. İskeletlerde, kütüphanelerdekinin aksine kontrolün terse dönmesi kavramı mevcuttur. Kütüphaneler kullanılırken, yazılımcı hakimiyeti elinde tutmaktadır. İskeletlerde ise durum farklıdır. İskeleti kullanan, ondan bir istekte bulunur ve iskelet kendi içinde çesitli mekanizmaları - olaylar (events) - tetikleyerek bu istekleri gerçekleştirir.

Yukarıda bahsettiğimiz üç tip YK da esasen kodun yeniden kullanımıdır. Bu kod nesne yönelimli (object oriented), bileşen yönelimli (component oriented) veya sadece yordamsal (procedural) olabilmektedir. Burada, tahmin edilebileceği gibi yordamsal kod çok alt seviye ve YK adına kullanışsız kalmaktadır. Nesne yönelimli YK, devrim niteliği taşımaktadır. Miras (inheritance) sayesinde çok yoğun YK sağlanabilmektedir.

Şekilde görülen miras ilişkisinde Sınıf2 Sınıf1’in özelliklerine sahip olmaktadır. Bu sayede Sınıf1’in tüm özellikleri Sınıf2 için kullanılabilir olacaktır. Ancak bu yaklaşımın da hataya ve YK’nın esnekliğine zarar verecek gelişmelere açıklığı vardır. Sınıf1’de yapılan bir değişiklik Sınıf2’ye doğrudan yansıyacağından istenmeyen sonuçlara sebep olabilir. Nesne tabanlı iskeletlerde (Object oriented framework) bu sıkıntıya sıkça rastlanmaktadır ve bu sorun kırılgan miras yapılı sınıf problemi olarak bilinmektedir (Fragile base class problem). İskeletlerin değişen versiyonları ile birlikte iskelete bağımlı uygulamaların çalışmasında ciddi sorunlar olabilmektedir. Nesneye yönelim paradigmasından sonra bileşen yönelimli yaklaşımların literatürde yer edinmesi ile bileşen tabanlı iskeletler ortaya çıkmaya başlamıştır. Bileşen teknolojisi YK için büyük öneme sahiptir. Bileşenler tanımlı arayüzleri, ki bu arayüzler sadece bileşenlerin sağladığı veya sunduğu servisleri tanımlamakla kalmayıp; performans, zamanlama, servis kalitesi (Quality of Service, QoS) gibi farklı gerekleri barındırabilme özelliğine sahiplerdir.

Buradaki en önemli nokta, yeniden kullanım için miras değil bileşim (composition) kullanılmasıdır. Bilindiği üzere miras, derleme zamanında sabitlenmektedir. Ancak bileşim, çalışma zamanında da değiştirilebilir. Bu sayede bileşen tabanlı iskeletler nesne tabanlı iskeletlere göre çok büyük esneklik kazanabilmektedir.

YK’da kod seviyesinden daha yukarıda kavramsal seviyede YK bulunmaktadır. Bu tip YK 1994 yılında GoF (Gang of Four) olarak adlandırılan dört mühendisin yazdığı klasik bir yapıtla dünyaya tanıtılmıştır. Yazılım tasarım kalıpları olarak adlandırılan bu YK yönetimi, bir problem hakkındaki soyut çözüm bilgisini yeniden kullanmayı hedeflemektedir. Tasarım kalıpları tasarımlarda tekrar kullanılabilecek kod bilgisi içermemektedir; ancak tasarımların daha temiz, daha yeniden kullanılabilir olmasını sağlayacak bilgi içeriği barındırmaktadırlar. Tasarım kalıplarının bir üst seviyesinde ise mimari tasarım kalıpları bulunmaktadır ve bunlar büyük sistemlerin genel hatlarını belirleyen kalıplardır. Örneğin alışıldığı üzere iletişim altyapılarını destekleyen yazılımların katmanlı mimariye, derleyici tarzı yazılımların ise borular ve filtreler (pipes and filters) mimarisine sahip olması beklenir.

2000’li yıllardan sonra YK adına en farklı fikir, yazılım ürün hatları kavramı ile gelmiştir. Bu yaklaşım ile yazılımda sadece kod veya mimarinin yeniden kullanılması değil; bunlarla birlikte, gereksinimlerin, bileşenlerin, özelliklerin, test durumlarının da yeniden kullanılması ve yazılım geliştirme süreçlerinin bu yaklaşıma göre modifiye edilmesi öğütlenmektedir. Ürün hattı kavramında esas olan, ortak özellikleri fark edilebilen bir ürün ailesi seçmek ve bu ailenin ortak ve değişken özelliklerini modellemektir. Bu sayede ürün geliştirenlerin önünde ortak referans bir mimari ve bu mimaride değişiklik yaparak yeni ürünler ortaya çıkartma potansiyeline sahip bir değişkenlik modeli bulunmaktadır. Bunun mümkün olabilmesi için bu ailenin hangi alana yayılacağı belirlenmelidir. Alan kapsamının belirlenmesi ürün hattının başarılı sonuç vermesi açısından kritik öneme sahiptir. İnsanların git gite kişiye özel olmalarını bekledikleri, yoğun ürün talepleri her geçen gün artmaktadır. Bu istekleri zamanında ve az maliyetli olarak karşılamak ancak tüm yazılım varlıklarının yeniden kullanabilirliğini savunan yazılım ürün hattı yaklaşımları ile mümkün olabilecektir.

Yazan: Barış Can Kaşıkçı (E-Bergi ODTÜ)



26 Ağustos 2008 Salı

Filtering JavaScript to Prevent Cross-Site Scripting

Yaptığım bir sitenin cross-site-scripting (XSS) saldırılarına açık olduğunu farkettim. XSS açığında, eğer saldırgan HTML kodlarının arasına istemci tabanlı kod gömerse, kullanıcının tarayıcısında istediği istemci tabanlı kodu çalıştırabiliyor.

Mesela aşağıdaki şekildeki request'e göre işlem yapan bir site düşünelim:
http://www.benimsitem.com/haber.html?id=156
Açık bulunanan site name değişkenini okuyup hiçbir filtreleme yapmadan sayfaya yazdırıyorsa, o zaman bu değerde istenilen kod çalıştırılabilir.
http://www.benimsitem.com/haber.html?id=<script>alert(document.cookie)</script>
Genelde cross site scripting açıkları, saldırganın sistemi deneme-yanılma yaparak bulması ile ortaya çıkıyor. Açığın bulunması ile saldırgan, başka bir domainden, açığın bulunduğu domain ve sayfanın bilgilerini, session bilgilerini ve diğer obje değerlerini çalmasına olanak sağlar. (1)

Peki bu açığı nasıl kapatabiliriz? Web Programlama yapan biri olarak kullanıcıdan gelen hiçbir girdiye güvenmemelisiniz ve gelen her request'i server tarafında filtrelemelisiniz. Eğer request'ten gelen parametrede özel karakterler varsa ( SCRIPT tag'i gibi ), bunları reddetmeli veya özel bir metodla bu özel karakterleri değiştirmelisiniz. Mesela ben bunun için şöyle bir java metodu yazdım:



public static String filterForSpecialCharacters( String inputStr ){

String outputStr = inputStr + "";

outputStr = outputStr.replace ( "'", " " );
outputStr = outputStr.replace ( "\"", " " );
outputStr = outputStr.replace ( "%", " " );
outputStr = outputStr.replace ( ";", " " );
outputStr = outputStr.replace ( "(", " " );
outputStr = outputStr.replace ( ")", " " );
outputStr = outputStr.replace ( "&", " " );
outputStr = outputStr.replace ( "+", " " );
outputStr = outputStr.replace ( "<", " " );
outputStr = outputStr.replace ( ">", " " );

return outputStr;

}

Gördüğünüz gibi, kullanıcıdan gelen input'u kullanmadan önce bu metoda gönderirseniz. Özel karakterler filtrelenerek, size güven içinde kullanabileceğiniz değişkeni geri döndürür.

Bu XSS açığı için PHP, ASP gibi dillerde kullanılabilecek belirli kütüphaneler var ama java'da ne yazık ki böyle standart bir kütüphane yok. Ancak aşağıdaki adreste XSS ataklarına karşı yazılmış bir kütüphane Java class'ı var: BAKINIZ




Cross-site scripting hakkında ayrıntılı bilgi edinmek isteyenlere aşağıdaki bilgileri derledim. Umarım faydalı olur.

1- Introduction

Cross-Site Scripting is one of the main problems of any Web-based service. Since Web browsers support the execution of commands embedded in Web pages to enable dynamic Web pages attackers can make use of this feature to enforce the execution of malicious code in a user’s Web browser. JavaScript is the most commonly used command language in this context. If misused, stealing of authentication information may be possible thus allowing attackers to act under a stolen identity. The attack is based on the possibility to insert malicious JavaScript code into pages shown to other users. Therefore filtering malicious JavaScript code is necessary for any Web application. This paper describes the overall problem and elaborates on the possibilities to filter JavaScript in Web applications. Also a filtering architecture is presented that allows Web application developers to filter JavaScript depending on the application need to reduce the danger of successful Cross-Site Scripting attacks. (1)

2 - Avoiding an Attack

2.1 - Filtering

The basis of this approach is never trust user input and always filter metacharacters ("special" characters) that are defined in the HTML specification. Each input field, including link parameters will be validated for script tags. When found and dependent on the context, the input will be rejected and thus prevent the malicious HTML from being presented to the user. (3)

2.2-) Encoding

Cross-site scripting attacks can be avoided when a Web server adequately ensures that generated pages are properly encoded to prevent unintended execution of scripts. Each character in the ISO-8859-1 specification can be encoded using its numeric entry value. Server side encoding is a process where all dynamic content will go through an encoding function where scripting tags will be replaced with codes in the chosen character set. Generally speaking, encoding is recommended because it does not require you to make a decision about what characters could legitimately be entered and need to be passed through. Unfortunately, encoding all untrusted data can be resource intensive and may have a performance impact on some Web servers.


For More Information:

http://www.ibm.com/developerworks/tivoli/library/s-csscript/
http://www.developer.com/java/article.php/883381






Citation
-----------
(1) http://tr.wikipedia.org/wiki/Cross_site_scripting
(2) Filtering JavaScript to Prevent Cross-Site Scripting - Created by:
EUROSEC GmbH Chiffriertechnik & Sicherheit
(3) http://www.ibm.com/developerworks/tivoli/library/s-csscript/




14 Ağustos 2008 Perşembe

Find and Replace Command in Linux

Linux'de dosyalar içinde toplu "find and replace" işlemi yapmak için oldukça kullanışlı bir komut:


You can do a find and replace on files from the Linux shell using the find and sed commands. The first example below shows doing a find and replace only in the current directory while the second example below shows doing a find and replace recursing into subdirectories…

  1. Replace “www.trendics.com” with “tools.trendics.com” in all html files in the current directory…
  2. find . -maxdepth 1 -name "*.html" -type f -exec sed -i 's/www.trendics.com/tools.trendics.com/' {} \;

  3. Replace “www.trendics.com” with “tools.trendics.com” in all text files and all subdirectories…
  4. find . -name "*.txt" -type f -exec sed -i 's/www.trendics.com/tools.trendics.com/' {} \;

Here is how this works…

  • The dot after the find command specifies to start in the current directory
  • The -maxdepth 1 specifies to only include the current directory
  • The -name "*.txt" switch specifies to only find txt files
  • The -type f specifies to only match files
  • The -exec xyz {} \; specifies to execute xyz for each file where xyz is a sed command specifying to substitute “tools.trendics.com” for “www.trendics.com”

Kaynak: Trendics Blog


23 Temmuz 2008 Çarşamba

Browser'da Rss Subscription Butonu Gösterme

Internet Explorer 7, Firefox, Safari gibi browserlarda, adres çubuğu yanında artık otomatik olarak "RSS subscription" butonu gösterilmekte.



Eğer siz de sitenizden RSS yayını yapıyorsanız ve bu özelliği etkinleştirmek istiyorsanız, aşağıdaki META-TAG kodunu HTML'inize gömebilirsiniz.

<link rel="alternate" type="application/rss+xml" title="Haberler (RSS)" href="http://www.sankigazete.com/rss/haberler.jsp" >

Peki RSS dosyası nasıl oluşturacağız diyorsanız, şuradaki bilgileri inceleyin: Using RSS

Ancak burada dosya formatı için .rss uzantısı kullanmanız söylense de siz .xml kullanın, .rss uzantılı dosyayı test ettiğimde browserım tanımadı. (hatta .jsp kullanın o da işe yarıyor)

1 Temmuz 2008 Salı

Java toUpperCase toLowerCase

String.toLowerCase ve String.toUpperCase metotlarını direkt kullanmak bazı problemler yaratabiliyor. Mesela i harfi, sistemdeki ön seçili dile bağlı olarak büyük harfe İ veya I olarak çevrilebiliyor. Bunu çözmek için bu metodlara Locale'i argüman olarak vermek gerekiyor.


// Sistemdeki default seçili dil ne ise ona göre büyük harfe çevrilir.
"illaki".toUpperCase();

// İngilizceye göre büyük harfe çevrilir, bu durumda i->I çevrimi yapılacaktır
"illaki".toUpperCase( Locale.ENGLISH );

// Türkçeye göre çeviri yapılır, bu durumda i->İ çevrimi yapılır.
"illaki".toUpperCase( new Locale("tr","TR") );


Sistemdeki seçili dili değiştirmek için ise aşağıdaki kod satırı kullanılabilir:

Locale.setDefault(new Locale("tr","TR"));


Java Doc'ta toUppercase methodu için şöyle bir açıklama yazılmış:


Converts all of the characters in this String to upper case using the rules of the default locale. This method is equivalent to toUpperCase(Locale.getDefault()).

Note: This method is locale sensitive, and may produce unexpected results if used for strings that are intended to be interpreted locale independently. Examples are programming language identifiers, protocol keys, and HTML tags. For instance, "title".toUpperCase() in a Turkish locale returns "T?TLE", where '?' is the LATIN CAPITAL LETTER I WITH DOT ABOVE character. To obtain correct results for locale insensitive strings, use toUpperCase(Locale.ENGLISH).

6 Haziran 2008 Cuma

Css Numaraları

1. Resimlerin belirli bir genişliği-yüksekliği geçmesini engellemek ( Maksimum değer vermek ) :

/* Internet Explorer */
width: expression(this.width > 100 || this.width <50 ? 100: this.width);
height: expression(this.height > 100 || this.height <50 ? 100: this.height);
/* Firefox */
max-width:100px;
max-height:100px;

Aslında Internet Explorer için aşağıdaki gibi de bir ifade yazılabilir ama bu bazen problem yaratıyor ve imajın boyutlarını ufacık görebiliyorsunuz. Sanıyorum Imaj width ve height değerleri bazı durumlarda yanlış okunuyor. Bunun için bu değerlerin küçük olup olmadığını da kontrol etmeniz gerekir.

/* Internet Explorer */
width:expression(Math.min(this.width, 100)+'px');
height:expression(Math.min(this.height, 100)+'px');

2. Resimlere çerçeve oluşturma :
border:6px solid #F1EFE9;

27 Nisan 2008 Pazar

Modern Çağın Büyücüleri

Şu an Google Irlanda'da çalışan hocam Yaşar Safkan'ın bilişimcileri modern çağın büyücüleri olarak tanımlayan güzel bir yazısı:

Yazılımcılar. Sistem yöneticileri. Ayrıca bilgisayarın tuşlarına iyi basan bir takım başka arkadaşlar.

Bunlar modern çağın büyücüleri. İçinden "yahu amma salladın, bu adamların yaptığı gayet gerçek ve bilimsel, büyüyle hokkabazlıkla işleri olmaz" diye geçirenler varsa, haklılar elbet. Ama anlatmaya çalıştığım o değil.

Büyücü dediğiniz adam, herkesin bilmediği şeyleri bilir. Anlaşılmaz dev kitapları vardır. Garip lisanlarda, acayip şeyler konuşur. Bu anlaşılmaz lafları kullanıp "büyü"ler yapar, böylece normal insanların yapmak isteyip de yapamadığı, bazen aklına bile getiremediği şeyleri yapar. Kendisinden duruma göre az ya da çok korkulur; itiraf edilmese de böyledir.

Yazılımcılar da böyle değil mi? Dev kitaplarımız var... Bizden başkası anlamaz. İş veya sosyal bir toplantıda, iki yazılımcı muhabbete başlarsa, diğerleri hemen muhabbetten kopar. Klavyelerimizin tuşlarına basarak, büyücü, pardon, yazılımcı olmayanların yapmak isteyip de yapamadıkları şeyleri yaparız. Bazen akıllarına gelmeyen şeyleri de. Tek harfinin yanlış söylenmesi felakete yol açan efsanevi büyüler gibi, bizim yazılımların da tek harfinin yanlış olması felaketlere yol açar...

Büyücüyüz yani.

Tabii, işin bir de içyüzü var. O da efsanenin büyücülerine benziyor. Yazılımcı, sistem yöneticisi falan olabilmek için, şöyle yerden başlasa adam boyunu geçecek kadar kitap okumuş olmak gerekiyor. Okumak da yetmiyor. Deneyim gerekiyor. Pek çok büyünün elde patlamış olması gerekiyor. Daha fenası, gün geçtikçe işler kolaylaşmıyor, zorlaşıyor. Bugün itibarıyla bilinmesi gereken teknoloji miktarı, on yıl öncesine göre kat kat daha fazla.

İş zor iş. Yanlış yapıldığından falan da değil. Tanım gereği zor iş. Bunu söyleyen ben değilim. (Yani ben de söylüyorum da, tek söyleyen ben değilim.) Bu işi 30 yıl, 40 yıl yapmış, halen yapan büyücü abiler. Elbette, herkes kendi işini zor sayar. Ama bu işin zor olduğunun matematiksel delilleri var!

Yazılımcıları yönetmek de zordur. Entreesan insanlardır bunlar. Pek çok insanın aksine, tipik bir yazılımcı, işten, hatta çok işten kaçmaz. Fakat, yaptığı işe inanması gerekir. Kaliteli bir şeyler üretebildiği zaman mutlu olur. Başını sallayıp maaşını almaktan hoşlanmaz, doğru yerde, doğru sebeplerden çalıştığını bilmek, gittikçe daha iyi bir "büyücü" olduğunu hissetmek çoğu zaman maaştan daha büyük ağırlık taşır. Yine para için değil! İyi büyücü olmak için.


31 Mart 2008 Pazartesi

Google Web Toolkit (GWT)

Sonunda ben de GWT ile tanıştım. Bir süredir Prabhakar Chaganti'nin Google Web Toolkit isimli kitabını okuyordum ve sonunda kitabı bitirebildim. Kitap okunması kolay ve zevkli, büyük bölümü de örneklerden oluştuğu için hemen pratik yapabiliyorsunuz.

GWT kısacası kolay bir şekilde AJAX uygulaması geliştirmeye yarayan bir araç. Siz web arayüzünüzü, tamamen Java (aslında Javanın bir alt kümesi) ile GWT kütüphanesini de kullanarak yazıyorsunuz (sanki swing vs. ile java masaüstü uygulaması yazar gibi) ve GWT onu javascript koduna çeviriyor. Böylece javascript'in dertleri ile uğraşmıyorsunuz.

Başlarda insana biraz alışılmadık gelebiliyor ama işin özünü kavrarsanız GWT çok işe yarayacağa benziyor. Özellikle daha önceden Java ile masaüstü uygulaması geliştirdiyseniz çok kolay adapte olabilirsiniz.

Benim dikkatimi çeken bazı güzel özellikleri şunlar:
  • Tamamen Java kodu yazıyorsunuz, haliyle de kolayca debug yapabiliyorsunuz.
  • Başkalarının yazdığı kodları .jar dosyası olarak kütüphanenize ekleyip kullanabiliyorsunuz. (Mesela başkasının hazırladığı bir takvim, ya da hava durumu öğesi)
  • Oluşturduğunuz arayüz elementlerine (Button,Label vs.) style atayabiliyor ve css dosyasında görünüşlerini değiştirebiliyorsunuz.
  • JavaScript Native Interface (JSNI) sayesinde diğer javascript kütüphanelerine erişip sağlayabiliyorsunuz.

Bazı faydalı siteler:

Bazı faydalı makaleler:
Bazı Güzel Eklentiler:

Not: Şu ana kadar bir proje üzerinde denemedim, sadece kitabı okuyarak teorik bilgi edindim ve mevcut örnekleri inceledim. Kendim üç beş ufak deneme yaptım. Bir proje üzerinde çalıştıktan sonra daha ayrıntılı bilgiler verebilirim.