Javascript – Lazy loading

Web2.0 tarzı web applikasyonları için javascript ile geliştirme yaparken karşılaşılma ihtimali en yüksek olan sorunlardan biri javascript yüklenme süresidir. Geliştirme yaparken <javascript src=”” şeklinde js dosyasının tanımı yapıldığı zaman tarayıcı o js dosyasının indirip çalıştırıncaya kadar sayfanın akışını bekletir (her tarayıcı özellikleri farklıdır, bazı tarayıcılar js dosyalarını paralel olarak indirip çalıştırma işlemini sıra ile yapar). Bu bekleme anları uzun sürerse sayfa gösterimi gecikeceği için yazdığını web applikasyonu yavaş çalışıyor damgası yiyecektir.
Javascriptlerin bu tür sorununa çözüm için Lazy loading tekniği geliştirilmiştir. Lazy loading javascript dosyalarının yüklenmesini ileriki bir zamana atarak sayfa gösterimini hızlandırmayı amaçlar. bir javascript dosyası siz istemediğiniz sürece yüklenmez böylece daha hızlı sayfa yüklemesi ve daha kullanışlı bir applikasyon ortaya çıkar.

Örneğin aşağıdaki kod sayfa yüklendikten 100ms sonra js dosyasını yükletir ve çalıştırır


<html>
<head>
<script>
function loadAndRun(jsName){
var head = document.getElementsByTagName("head")[0];
script = document.createElement('script');
script.type = 'text/javascript';
script.src = jsName;
head.appendChild(script);
}
window.onload = function(){window.setTimeout(function(){loadAndRun("test.js");}, 500);}
</script>
</head>
<body>
</body>
</html>

Aşağıda test.js dosyasının içeriği var.


alert('i am test.js');

Yukarıdaki test kodları çalıştırıldığı zaman sayfa onload olduktan 500ms sonra test.js yüklenir ve çalıştırılır. bu özelliği kullanarak daha sonra da yüklense olur dediğiniz js dosyalarını bu şekilde yükleyebilirsiniz.
Eğer lazy load işinize yarayacak ise tavsiyem hazır fonksiyonlar ya da kütüphane kullanmanız böylece lazy load işleminden daha çok verim alırsınız.

Webmin – web tabanlı linux sistemi ayarlama

Windows dünyasından admin’ler her zaman linux’taki konsolları ve ne kadar zor iş olduğunu anlatırlar, windows’ta GUI güdümlü ayarlama sistemleri sayesinde her işlerini kolayca yaptıklarını anlatırlar 🙂 (kimse alınmasın ama öyle)
Linux adminleri konsolu sevmekle beraber gözü kara değiller ve işleri GUI güdümlü ve hızlıca halledebilmek için webmin adı verilen web tabanlı ayarlama yazılımını kullanırlar.
Webmin sayesinde linuxa sıfır kişiler bile ayarlamaları kolayca yaparlar. Linux üzerinde uzman olsanız da webmin gerçekten çok işe yarayabiliyor.

link : http://www.webmin.com/

Javascript patternleri

Ajax patternleri Javascript programlama yaparken sıkça karşılaşılan sorunlara çözüm getirmek amacı ile oluşturulmuştur ve Javascript ağırlıklı çalışacak web applikasyonlarında hayat kurtarıcı ve zamandan kazandırıcıdırlar.
Çeşitli patternler vardır bunları şu şekilde listeleyebiliriz :

  • Lazy Loading
  • Browser side cache
  • XML, JSON Message

Daha bir çok pattern vardır fakat bunlardan en önemlileri yukarıda saydıklarımdır, çünkü en sık karşılaşılan sorunlara çözümler sunmaktadır.
Bu design patternleri ile ilgili detaylı ve örnekli kodlar hazırladım ve sıra ile anlatacağım eğer en gereksiz patternleri bile bilmek isterseniz http://www.ajaxpatterns.org sitesine bakmanız öneririm.

Türkiyeden hangi ünlüye benziyorsunuz ?

Türkiyeden hangi ünlüye benziyorsunuz ? Öğrenmek istiyorsanız http://www.yuzikizim.com adresine bakabilirsiniz.
Ben denedim herhalde eşim benzerim yok iyi bir benzerlik bulamadı ama diğer sonuçları inceledim şaşırtıcı benzerlikler var mesela : http://www.yuzikizim.com/unlu-benzerim/852

En kritik 25 programlama hatası yayınlandı

İnternette sürf yaparken bir çok geliştiricinin çok işe yarayacağını ve mutlaka okunması gerektiğini düşündüğüm 25 kritik (ingilizce -top- idi) programlama hatasını anlatan yazıya denk geldim. Bu listeyi çeşitli organizasyonlar bir araya getirmişler.
Hatalar 3 grupta toplanmış

  • Güvensiz komponent etkileşimi
  • Riskli kaynak yönetimi
  • Geçirgen Güvenlik Sistemleri

Aşağıda bu 25 kritik hata yer almakta

  • Hatalı girdi kontrolü (kullanıcının sağladığı bilgiyi kontrol etmeden sisteme almak)
  • Çıktıların hatalı şekilde encode ya da decode edilmesi
  • SQL injection (sql querylerinizin değiştirilmeye müsait bırakılması)
  • Cross-Site Scripting (Web sitenizdeki hatalı şekilde komponent (genelde js-ajax) kullanımı nedeni ile saldırganın başka sitelerle kontakt kurabilmesi)
  • OS Command Injection
  • Şifre gibi kritik bilgilerin saf şekilde gönderilmesi
  • Cross-Site Request Forgery
  • Race Condition (çevirmeden buraya aldım, genelde threadli sistemlerde gerçekleşir.)
  • Hata mesajlarının direkt gösterilmesi (hata mesajlarını yakalamadan direkt gösterince sistemle ilgili bir çok bilgiyi de gösterebiliyor)
  • Program hafızası sınırları dışına taşırmaya müsait şekilde kodlama yapma (buffer overflow açıkları)
  • Kritik verilerin dışarıdan kontrol edilebilmesi
  • Dosya yolu ve isimlerinin dışarıdan kontrol edilebilmesi
  • Güvensiz arama yolu (programın baktığı klasör yollarının güvenilir olmaması)
  • Sistem içinde dışarıdan kod eklenmesine izin veren sistemler
  • Sisteme dışarıdan alınan kodun içeriğine bakılmadan çalıştırılması
  • Hatalı şekilde yapılan kaynak kapatılma ve bırakılma işlemleri (out of memory sebeplerinden biridir bu)
  • Hatalı başlatma
  • Hatalı hesaplama
  • Otorizasyon hataları (dosyalara veya sistem içinde verilen erişim düzeylerindeki hatalar)
  • Riskli şifreleme algoritmaları kullanılması (Kolay çözülen şifreleme algoritmaları kullanılması)
  • Kod içine gömülmüş şifreler
  • Kritik kaynaklar için yanlış izin ayarları
  • Güvenilir olmayan rastgele sayıların kullanılması (tam rastgele olmayan fonksiyonların kullanılması)
  • Gereksiz izin düzeyi ile çalıştırma yapmak (programların olması gerektiğinden daha yüksek izinler ile çalışması)
  • Sunucu taraflı güvenlik kontrollerinin istemci tarafında yapılması

Bu hataların bir çoğuna aşinasınızdır mutlaka ve bunları zaten biliyorum diyorsunuzdur ama büyük ihtimalle ve farkında olmadan bu hataları tekrarlıyorsunuzdur.
Kendi tecrübelerime göre sunucularda yapılan en sık hata gereksiz izin düzeyleri ile çalıştırma ve dosyaların erişim izinlerini düzgün ayarlamamaktır çünkü binlerce dosyanın olduğu bir sistemde bu işler sıkıcı hale geldiği ve genelde bu işleri insan yaptığı için bir noktada ayarlar eksik kalmaktadır.
Programlarınızın güvenli olmasını istiyorsanız bu hataları iyi incelemelisiniz.

link : http://www.artima.com/forums/flat.jsp?forum=270&thread=247176

Javascript kütüphaneleri, hangisini seçmek lazım ?

Javascript ile uğraşmaya yeni başlayanlar temel javascript özelliklerini öğrendikten sonra ileri seviye işler için bir kütüphane kullanmaya başlar. Kütüphane seçimi elinizdeki projenin geliştirilmesi sırasında önem kazanmaktadır çünkü elinizdeki kodlar kullandığınız kütüphaneye uygun olacaktır ve başka bir kütüphane ile birlikte büyük ihtimalle kullanamayacaksınız.
Bu noktada popüler kütüphaneleri ve avantaj dezavantajlarını bilmek çok önemlidir. Son zamanlarda en popüler olan javascript kütüphanelerden 2si prototype ve jQuery’dir.

Genel
Prototype, bu kütüphane benim ana kütüphanem, dolayısı ile eksikliği ve fazlalığı nedir iyi bilmekteyim. Prototype 120kb’lik js dosyası ile bir javascript programcısının ihtiyaç duyacağı, duymayacağı her türlü fonksiyonu implemente etmiştir. Prototype kullanırken fark edeceğiniz şey neredeyse her işlem için bir kod var, tabi bu ana js boyutunu çok arttırmış. Prototype kütüphanesinin en güzel özelliği nesneye yönelik programlama açısından daha kolay olması.
jQuery, bu kütüphane şu anda internetin en popüler kütüphanesi çünkü az önce prototype için özellikle bahsettiğim ana js’si büyüklüğü burada bir sorun değil çünkü jQuery ana js’si 30kb. jQuery pluginli yapısı ile ihtiyaç duyulan özelliklere sahip oluyor bu da js boyutu açısından büyük fayda, ayrıca 3.parti eklemeleri de çok kolaylaştırıyor.

Destek – Topluluk
Prototype ile jQuery kütüphanelerini destek açısından karşılaştırmak istersek jQuery önde gibi görünüyor. 2 kütüphanenin de dökümantasyonu çok kaliteli ama forum adeti vs açısından jQuery önde gibi görünüyor. javascript konusunda uzmanlaşan kişiler için forum adedi vs çok önemli olmuyor ama başlangıç ve orta seviye geliştiriciler için önemli.

Efekt desteği
Efekt desteği konusunda 2 kütüphanenin de sorunu yok fakat yine jQuery pluginli yapısı sayesinde daha düşük dosya boyutları sağlıyor.
Prototype’ın efekt kütüphanesi scriptaculous ve onun boyutu da bi prototype kadar var.

Sonuç, düşüncelerim
Ben prototype kütüphanesi konusunda uzmanlaştım ve bana göre prototype kütüphanesinin en büyük eksisi boyutu 120kb çok büyük, aktif olarak kullanacaksanız tavsiyem javascript ufaltıcılardan geçirin, en az 20kb lik gereksiz boşluk var çünkü. Ben ayrıca gereksiz fonksiyonları (bana göre gereksiz olan) çıkartıp boyutu 50kb’ye düşürdüm bunula birlikte 50kb’lik dosyaya packer adı verilen sıkıştırma tekniğini uyguladım ve sonuç olarak 30kb lik dosya boyutu elde ettim. 120kb’ye göre muhteşem bir boyut ama tabi ki bazı fonksiyonlar vs eksik.
jQuery ise boyut ve yapısı açısından bakınca neden bu kadar popüler olduğunu kanıtlıyor.
Son olarak şunu tavsiye ediyorum her 2 kütüphaneye de bakın ve onlarla aynı işi yapacak kodları yazmayı deneyin, mesela bir dialog kutusu oluşturacak kodları yazmayı deneyin hangisi daha çok hoşunuza giderse onunla gidin ve arkanıza bakmayın 🙂 (arkanıza bakmayın ama sağınızı solunuzu iyi gözleyin gelişmeleri takip etmek önemlidir.)

Erdoğan: Ben YouTube’a giriyorum, siz de girin

Yorumsuz : http://www.ntvmsnbc.com/news/466693.asp

İleri düzey CSS anlatım sitesi

CSS uzmanlık alanım olmasa da web teknolojileri ile uğraştığım için (bilişim dünyasındaki çoğu kişi de uğraşıyordur mutlaka) CSS bilgimi geliştirmek için sürekli döküman okuyorum, denemeler yapıyorum.
Bir kaç CSS anlatım sitesi gezdikten sonra bu linkteki siteye rastgeldim : http://www.w3.org/2005/Talks/11-steven-css-advanced/. Gerçekten çok güzel bir anlatım yapmış, akıcı ve neredeyse her detay var.
Eğer CSS ile uğraşıyorsanız bu siteye bir göz atmanızı tavsiye ederim.

Java DB Connection kapatma

Java ile çalışırken veritabanı işlemlerinden sonra connection, statement ve resultset kapatma işi bir derttir. Bu kapatma işlemleri mutlaka son açılan önce kapatılır sırasında yapılmalıdır ve her kapatma işlemi için try catch ya da 3 kapatma işlemini de kapsayan try cath gereklidir. Bu tür sıkıcı işlemler için yardımcı sınıflar önerilir ve ben de önerileri dinleyerek kendime yardımcı bir sınıf yaptım : ConnCloser.


import java.sql.*;
public class ConnCloser{
public void close(Connection con, Statement stat, ResultSet rs){
try{
if(rs != null){
rs.close();
}
}catch(Exception e){
//buraya loglama kodu
}
try{
if(stat != null){
stat.close();
}
}catch(Exception e){
//buraya loglama kodu
}
try{
if(con != null){
con.close();
}
}catch(Exception e){
//buraya loglama kodu
}
}
}

bu sınıfı kullanarak bağlantıları kapatma işi sıkıntı olmaktan çıkar çünkü bu kodlar hem sırayı hem de exception oluşursa yakalamayı destekliyor.
Kullanımı şu şekildedir :
try{
Connection con;
CallableStatement cStmt;
ResultSet rs;

//buraya islemler yapılır
//
}catch(Exception e){
}finally{
ConnCloser.close(con, cStmt, rs);
}

Resim – Dosya Upload Appleti

Web sitenizde resim ya da dosya upload etmeyi kolaylaştıracak bir applete ihtiyacınız var ise pegaa.com için yazdığım applet tam size göre.
5 Kasım itibari ile %90’ı bitti şu anda aktif olarak kullanılır vaziyette fakat dökümantasyonu ve bir demo sayfası olmadığı için pratik olarak kullanmak zor, parametre adlarını vs yi bilmeden kullanmanız için kodlara detaylıca göz atmanız lazım 🙂
adres : http://code.google.com/p/javauploader/

Kendime bir roadmap hazırladım ve Kasım sonuna kadar eksik dökümantasyonu, demo sayfasını ve kodlardaki iyileştirmeleri gerçekleştireceğim, bir aksilik olmazsa tabi :).

Gelişmeler oldukça buraya da alacağım.

Kodu alıp incelemek, kendinize göre çevirmekte özgürsünüz 😉