Hayat Biz ve Elemanlar

Blog dünyasının kurallarını harfiyen bilsem de anlaşılan bunlara uymama konusunda üstüme yok. Yazım sıklığımın az olması, kaç günde bir yazdığımın (kaç ayda bir) hiç üstünde durmamam bunları yapmamam gerektiğini bilmiyor olduğumdan değil, yoğunluk ve biraz tembellikten kaynaklanıyor.

Daha dün yazmış gibi yapayım da gelişmeleri sizlere haber vereyim. Eğer gerçekleşir ise mutlu bir haber duyuracağımı sizlere bir önceki blogta bahsetmiştim. Evet gerçekleşti :) okaliptus ve ben nişanlandık yakında kısmet ise evleneceğiz. Mutluyum, mutluyuz :) İşte bu denli hareketli zamanlar geçirdim. Ayrıca araya Açık Öğretim Bütünleme Sınavı stresi , iş değiştirme alışma süreci dahil proje adına bir çok aksaklık oluşturacak konu ile uğraştım. Şöyle bir silkinip kaldığımız yerden devam etmek istiyorum fakat 1 haftadır internetimiz kesik, yetkililerden bir yanıt alabilmiş değiliz.


Şöyle bir silkinip kaldığımız yerden devam etmek istiyoruz. İnşallah yakında ellerimiz tekrar elemanlar projesi için klavyeyi tırmalayacak. Görüşmek üzere

Projeden Haberler

Merhaba Elemanlar,

Proje adına son 1,5 haftadır birşey yapmış değiliz. Benim ile ilgili olan kısımlardaki iş yapamamanın birinci nedeni hayatım ile ilgili güzel gelişmelerin eşiğinde olmam, ki gerçekleşirse buradan paylaşmak isterim. İkinci nedenim ise yüksek stress ve baskı yaşamamı sağlayan iş değiştirmek. Bu ay sonu itibari ile şu an çalıştığım iş yerimden ayrılıyorum. Böylelikle diryThink ile senkronize olma konusunda daha büyük zorluklar bizi bekliyor. dirtyThink te projedeki görevlerine 1 haftalık tatil ile araverdi. Kendisine buradan iyi tatiller diliyor, verdiğimiz siparişleri getirmesini istiyoruz :)

İçeriğin özelleştirmesi üzerinde durduğumuz projemizin bu yapıyı sağlayan kısımlarını kodladık. Büyük sorunlarla karşılaştık ancak yaptığımız testler sonucunda şu an için sağlıklı bir biçimde çalışıyor. Bu özellikleri kodlarken javascript ten büyük oranda destek aldık. Tabii günümüz web dünyasında javascript işlerimizi kolaylayan birçok kütüphane mevcut. Bizde bunun bilincinde olarak bu javascript kütüphanelerinden birini seçtik. E.Burhan 'ın (kendisinin deneyimlerinden ve aktarımlarından büyük oranda faydalanıyoruz ve tecrübelerini bizlerle paylaştığı için teşekkür ediyoruz) JQuery notları vesilesi ile küçük çaplı denemeler sonucu JQuery kullanmaya karar verdik. Bir sonraki yazımız da ise JQuery ile neler yapılabileceğini anlatabiliriz.

Bu arada yaklaşan Açık Öğretim Sınavları yüzünden görünen o ki bir müddet daha elemanlar projesinden ayrı kalacağız. Herkese sevgiler saygılar.

Captcha ile 5N 1K

Bir önceki yazımızda captcha kullanımını anlatacağımızı belirtmiştik. Hal böyle iken Captcha yı bir gazetecilik klasiği ( 5N 1K Ne? Ne Zaman? Nerede? Niye? Nasıl? Kim? ) şeklinde aktaralım dedik.

Captcha nedir?

Captcha (Completely Automated Public Turing test to tell Computers and Humans Apart) yani insan davranışları ile bilgisayar davranışlarının birbirinden ayırt edilmesidir. Captcha Carnegie Mellon Üniversitesi tarafından geliştirilmiş ve gelişmesine devam edilmekte olan bir projedir. İnsan, gördüğü nesneyi daha önce aynısını gördüğü yada yapısını öğrenmiş olduğu nesneye olan benzerliğini gözeterek tanımlar. Örneğin bir kurşunkalem ile dolmakalem in benzerliğini işlevselliği temel biçemi üzerinden her ikisinde birer kalem olduğunu farkına varamayacağımız bir süratle algılarız. Ancak mevcut bilgisayarlar insanların düşünme ve algılama algoritmasina (insanın algı ve düşünme üzerine olan yetisi bütün araştırma ve ar-ge lere rağmen sırlarla doludur) sahip değildir. Bilgisayarlar bir nesneyi görsel anlamda ayırt edebilmek için elde ettiği dijital görüntüyü bir takım algoritmalardan geçirmeli incelemeli ve belirli bir hata payı ile belirli bir tahmin yapabilmektedir. Captcha bu farkı kullanarak insanı ve bilgisayarı ayırt eden bir projedir.


Captcha ne zaman ortaya çıktı?

Captcha tekniğini ilk kez 1997 tarihinde Alta-Vista kullanmıştır. O tarihlerin en populer arama motorlarından birisi olan Alta-Vista internet kullanıcılarının kendi sitelerini indexleme isteğini aldığı URL ekleme formunda (bir benzerini görmek için Google Add Url sayfasına bakabilirsiniz) ki spam adresleri engellemek için captcha tekniğini kullanmıştır. Andrei Broder ' in yazdığı method basit bir görsel üreten ve bunu servisten yararlanacak olan kişiye sorması ile gerçekleşmiştir. Bu sayede Alta-Vista %95 gibi bir oran ile spam iletileri engellemeyi başarmıştır. Daha sonra Yahoo Chat sayfalarındaki spam iletileri engellemek için kullanmış ve böylece kullanım yaygınlaşmıştır. Daha fazla bilgi isterseniz bu bölüm için yararlandığım kaynağa bakabilirsiniz.

Captcha nerede kullanılır?

Aslında Captcha nın kısa bir tarihini aktarırken captcha nın daha çok internet sayfalarındaki web formlarında kullanıldığını, bu formlara gerçekleştirilen saldırıları engellemek için yapıldığını farketmişsinizdir. O yüzden bu soruyu nerede kullanılır değilde nerede kullanılmalı ve kullanılabilir şeklinde sormak daha iyi olur. Şayet web sitenizin üye kayıt formu ve ya üyelik gerektirmeyen ücretsiz / ücretli bir servisiniz var ise bu servisinizi ya da üye kayıt formunuzu dolduranın insan ya da bilgisayar olduğunu anlamak için kullanabilirsiniz. Bunun dışında servisinizi kullanan kişiyi bir kullanıcı doğrulama işleminden geçirdikten sonra gösterilecek formlarda ya da servisler de captcha kullanmak ise gereksiz bir tercih olur.

Captcha yı nasıl kullanabilirim?

Bu yazımızın çok uzun olduğunun farkındayım o yüzden burada bir tutorial (eğitsel) den ziyade internetin geniş kaynaklarına yönlendirmeyi uygun görüyorum. Bir başka yazı dizimizde Captcha kullanımını yazmayı düşünüyorum. Web sitenizi geliştirmekte olduğunuz dile göre (php,asp,.net,jsp,ruby vs) Captcha kullanımını kolaylayan bir çok kaynak vardır.

Web sitenizi

ASP ile geliştiriyorsanız Captcha ASP Script , ASP Security Image Generator den yararlanabilirsiniz.
PHP ile geliştiriyorsanız PHP Captcha Class, PHP Captcha Tutorial ve PHP Captcha dan yararlanabilirsiniz.
.NET için CaptchaImage , CaptchaControl mevcut
JAVA ve veya JSP için Capcha library si olarak SimpleCaptcha sizi gayet tatmin edecektir

Captcha yı niye kullanayım?

İnternette tıpkı gerçek hayatta olduğu gibi iyi niyetli insanlar yanında kötü niyetli insanlarda var. Şayet üzerine düşerek ürettiğiniz ortaya koyduğunuz web sitenizin kötü niyetli kişiler tarafından bazı amaçlar uğruna hoş olmayan sonuçlar ile karşılaşmak istemiyor iseniz böyle bir önlemi almanızda fayda vardır.

Captcha yı kimler kullanır?

Sanırım gazeteciliğe en fazla bu kadar katlanabileceğim :) Ehil olan web sitesini en azından belirli bir aşamada korumak isteyen , eli kod yazan hemen herkes kullanabilir.

Elemanlar blog ve projenin son durumu

Öncelikle hem buraya hem de projeye bir dönem ara verdik. Bunun başlıca nedeni, diryThink ve benim çalışmakta olduğumuz şirketteki, geliştirdiğimiz projenin stresi ile üzerimize çöken rehavet oldu. Daha sonra projemizin database yapısındaki yanlışlıkları görmemiz ve düzeltmek için ciddi bir konstantrasyona ihtiyaç duymamız ama bunu bir türlü konsantre olamamamız - en başta ben - da ikincil bir neden sayılabilir. Neyse ki bu durumu şu an atlatmış gözüküyoruz.

Database yapısında köklü değişiklikler yaptık. Değişikliklerde bize önemli bilgiler sağlayan Phillip Keller'in bloguna göz atmanızı şiddetle tavsiye ederim. Etiket sistemli bir projede 3 farklı database tablo tasarımını ele almış ve performans değerlendirmesi yapmış. Biz de bu inceleme sonucunda Toxi Solution adlı 3 tablodan oluşan yapıyı kullanmaya karar verdik. Wordpress'in de kullandığını öğrenince bir hayli mutlu olduk :) ( İlk tasarladığımızda mysqlicious denen yöntemi kullanıyormuşuz ). Dezavantajı ekleme ve silme durumlarında birden fazla tabloya işlem yapmak olacak. Ama SELECT performansı en iyi olan yapıdan birisi olduğu için tercihimiz bu yönde oldu. Söz database yapısından açılmış iken database admin olarak görev yapan Barry Williams'ın web sayfasını ziyaret edebilirsiniz. Sitesinde 450 nin üzerinde database tasarımını paylaşmış ve sonuç olarak çok güzel bir içerik biriktirmiş.

Projemizin üye kayıt formunu çok önce bitirmiş olmamıza rağmen ne zamandır aklımda olan Captcha kullanımını yeni entegre ettim. Bir sonraki yazımızda Captcha dan detaylı olarak bahsedeceğiz.

Blogger da kod yazarken

Projemizin bazı kod parçalarını (code snippets) burada paylaşırken kodları renklendirmeyi düşündüm. Bu iş için piyasada güzel araçlar var. SyntaxHighlighter gayet hoş bir uygulama ancak Blogger a bir türlü entegre edemedim. Bunun üzerine araştırma yaptım ve highLighter adında başka bir uygulama buldum. Açıkçası daha efektif olduğunu düşünmeye başladım (Belki Blogger a kolayca ekleyebilmemin bunda etkisi vardır) fakat kesinlikle daha gelişmiş değil. Artık paylaşacağımız kod parçalarını renkli renkli gösterebileceğiz =)

Projenin Durumu : dirtyThink ve ben AOF seminerine katıldık gayet te kalabalıktı. Bütün haftamızı bu kongreye hazırlanarak geçirdik. Seminerin ilk günü (cumartesi saat 9:00 dan 10:20) bir hayli heyecanlıydık. Pazar günü ise (9:00 - 9:40) yorgunluğumuz başgösterdi. Evet tamam itiraf ediyoruz AOF - Açık Öğretim Fakültesi sınavlarındaydık. Hazırlanmamız gereken 4 sınav vardı ve projeyi bekletmek zorundaydık. Sınav sonrası muthiş bir Maşukiye gezisinden sonra akşam proje için e-posta gönderecek sınıfları yazdık. Çalışıyor, mutluyuz.

UTF-8 Türkçe karakter problemi

Bir internet sitesinin en önemli öğesi içerik olduğuna göre, kullanıcılara sunduğumuz metinlerin doğru görüntülenmeside son derece önemli bir unsurdur. Ayrıca projemiz Türkçe olarak hazırlanıyor bu nedenle Türkçe karakterlerin sorunsuz gösterilmesi de ayrıca dikkat ettiğimiz bir durum. Çünkü ("ı, İ, ç, Ç, ğ, Ğ, ş, Ş, Ü, ü, ö, Ö") yerine kullanılan ("o,s,i,c,g") harfler bazı kelimelerde anlam karmaşasına yol açabiliyor ( öldü , oldu ). Normalde bu sorunun ortadan kalkması için çözüm basittir. html etiketlerinden biri olan <meta> karakter tanımlaması yapmak, istediğiniz karakter setini atamak yeterlidir.

<meta equiv="" type="" content="text/html; charset=utf-8">

Ancak sunucu taraflı uygulamalarda, sunucu tarafından gelen veriler için bu yeterli olmayabiliyor. Bizim projemizde de bunu yaşadık. Sayfa header bilgilerinde taşınan veriler için (form verileri vs.) atadığımız karakter seti işe yaramıyordu. Bizde Java nın JSP/Servlet in güzel imkanlarından faydalanıp bir RequestFilter yazdık.

Sistem basitçe şöyle işliyor. Bir JSP tabanlı web projesinin bir takım ayarlarını web.xml dosyasından ayarlayabilirsiniz. Bahsi geçen xml dosyasına projeniz için filtreler de ekleyebiliyorsunuz. (Birçok "java web projeleri" için hazırlanmış uygulamalar web.xml dosyasına bu tarz filtreler eklerler). Yazmış olduğumuz filtre basit olarak sunucuya gelen request i (talep) kendisinden geçiriyor ve her talep verisini sunucu tarafında atadığımız karakter setine göre filtreliyor.

Peki Filter ı nasıl projemize ekleriz?

Öncelikle yazmış olduğumuz filterin çalışması için bahsettiğimiz gibi web.xml dosyasına filter imizi tanıtmamız gerekiyor.
<filter>
<filter-name>requestEncodingFilter</filter-name>
<filter-class>org.elemanlar.filter.RequestEncodingFilter</filter-class>
<init-param>
<param-name>requestEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>

package org.elemanlar.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/*** @author bidi bidi**/

public class RequestEncodingFilter implements Filter {

private FilterConfig config;
private String encoding = "UTF-8";

public void destroy() {}

public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}

public void init(FilterConfig config) throws ServletException {
this.config = config;this.encoding = config.getInitParameter("requestEncoding");
}
}
Yaptığımız testler sonucu hiç bir karakter sekteye uğramadan gösterilmiştir. Biz de güzel Türkçemizi sorunsuzca sunabilecek olmanın mutluluğunu yaşamış olduk. Ben o kadar iyi kullanamasam da çok daha fazla hassasiyeti olanlar için ( okaliptus ) iyi bir gelişme oldu.

SEO, anlamlı url ve bizim proje

Web 2.0 kavramı çıktığından bu yana web sitelerininde yapım aşamasından sunum aşamasına birçok şey değişti. Artık günümüzün popüler arama motorlarında üst sıralarda çıkmanın önemi bir hayli artmış durumda. Çünkü bizim ile aynı içeriği veren bir çok site var ve bunların her biri bizim rakiplerimiz. Bizim izlenimlerimize göre site ziyaretçilerin %50 - %60 kadarı arama sitelerinden yaptıkları arama sonucu internet sitesine ulaşıyor. Bu da çok ciddi bir rakam olduğu için son zamanlarda neredeyse yeni bir iş kolu olan SEO (Search Engine Optimizition) diye bir kavram oluşmuş oldu. Kısaca SEO sitenizin içeriğini arama motorlarında kolayca bulunacak şekilde revize edilmesine diyebiliriz. Yada baştan SEO kurallarına göre tasarlanması.

Bu kavram ile beraber birtakım yöntemler ortaya çıkmış oldu. Bazı yöntemler arama motorları kriterlerine kurallarına uygun, bazıları değil, bazıları ise taraflarca etik olup olmadığı hala tartışılan yöntemler. Fakat tartışmasız ve arama motorlarının çok sevdiği bir yöntem var ki o da "anlamlı url" dir.

Nedir Anlamlı Url?


İnternet sitemizdeki her bir sayfamız ve ya içeriği sunduğumuz alt sayfalarımıza linkler veririz, geçişler sağlarız. Bu sayfaların isimleri içeriği kısaca özetler nitelikte olması arama motorlarında o sayfanın daha rahat arşivlenmesini sağlar. Böylelikle o sayfamızın içeriği arama sayfalarında üst sıralarda çıkma şansını yakalamış olur. Anlamlı Url hakkında bu yazıyı okumanızı tavsiye ederiz. Biz okuduk oradan biliyoruz =)

Örnek
http://elemanlar.blogspot.com/?yil=2005&ay=05&konuID=4668

http://elemanlar.blogspot.com/2007/05/projeyi-takip-edebilmek.html

bu iki bağlantının aynı içeriği sunan iki farklı site olduğunuzu farzedersek ikinci link arama motorlarında daha anlaşılır ve tercih edilir olacaktır. Bunun yanında bir internet kullanıcısı arama motoruna "proje takip", "projeyi takip etmek" vb bir kelime parçacığı yazdığında, arama motoru yüksek ihtimal ile ikinci sitenin içeriğini gösterecektir.

Anlamlı Url nasil yapabilirim?


ASP için bir kaç alternatif var sanırım (IIS Mod Rewrite(ücretli), isapi rewrite) Birde Metin Aksu'nun olaya farklı bir yöntemi var inceleyebilirsiniz.
PHP için bu iş daha kolay sunucu üzerinde .htaccess dosyası oluşturup burada pattern (desenler) belirleyerek anlamlı url oluşturabilirsiniz.
JSP sayfaları için ise urlRewriteFilter var. Ve biz projemizde bunu kullanıyoruz. Temel olarak bir xml dosyasında url desenlerini oluşturuyorsunuz. urlRewriteFilter sunucuya gelen tüm istekleri kendi filtresinden geçiriyor ve xml e kaydedilmiş desenlere uyup uymadığına bakıyor. Uyan bir desen yok ise 4 0 4 hata sayfasını basıyor.

Projeyi Takip Edebilmek

Bizim ya da başka bir yerde başka kişiler tarafından geliştirilen projelerin ortak sorunudur, projenin ne durumda aşamada olduğunu takip edebilmek. Bu bir proje için hayati derecede önemli bir takip sürecidir ve en temel seviyede de olsa üzerine düşülmesi gereken bir konudur. Piyasada bir çok proje takip programı var. Bunların populerliği bizce işlevselliği ile doğru orantılı.

Biz projemizi basecamp üzerinden takip ediyoruz. Birbirimize to-do listler hazırlıyor, milestone (kilometre taşları) belirliyor, bir konu üzerinde teknik anlamda tartışmalar gerçekleştiriyoruz.

Basecamp 1 projeye kadar kısıtlı özellikleri ile ücretsiz hizmet veriyor. Kısıtlamalara ya da bir hesap üzerinden ikinci bir projeyi takip etmek istediğinizde ise ücret bekliyor sizden. Bizce parayı hakeden bir sistem ama tek projemiz var yeterli =)

Ücretsiz ve adını duyurmuş PHP tabanlı bir diğer proje takip sistemi ise activeCollab. Söylenenlere göre epey başarılı imiş fakat deneme fırsatım olmadı malesef. Fakat sitesinden incelediğim kadarı ile gayet iddialı ve sağlam durduğunu söyleyebilirim.


Projenin durumu Çok az, biraz değişiklik ile var olan modüllerde iyileştirme yaptım. dirtyThink bütün hafta sonu yattı, yok piknik dedi, yok stress atalım dedi yine kaçamak yaptı ama benden ilerde kendi işlerinde o yüzden susuyorum.

Proje Araç Gereçleri

Projeyi geliştirmekte kullandığımız faydalandığımız araçlar oluyor. Bunların başında geliştirme ortamı olarak Eclipse SDK 3.2 (aşığıyız) tercih ettik. Uygulamamız bir web projesi olduğu için web server a ihtiyacımız vardı. Bu alandaki tercihimizi de Tomcat5.5 ten yana kullandık. Yola çıktığımızda JDK 1.5.x son versiyonu vardı. (JDK 6.0 çıktı.) 1.4 e göre bizi sevindiren çok özelliği var. dirtyThink (yazılımcı) dünkü "Projedeki Teknolojileri Seçerken" başlığında database i belirtmediğimi söyledi kendisine selam ediyorum. mySQL 4.1 (5.0 ı da var) kullanıyoruz.

Genelde projemizi yanyana oturarak geliştirsekte bazı zamanlar uzaktan çalışma durumlarımız oluyor. Birbirimizin hangi proje dosyalarına etkidiğimizden haberdar olması için bir versiyonlama programına ihtiyacımız olduğuna karar vermiştik. CVSnt - SVN önümüzdeki alternatiflerimizdi ve biz CVS i seçtik (kendisini çok severiz).

Birde Apache Struts 1.3 kullanıyoruz. Web projeleri için java tabanlı çok güzel bir framework.

Proje için neredeyse 1 haftadır iki satır kod yazamamış durumdayız :(. Hepimizin ayrı bir işi var ve mesai sonrasi bu işe zaman ayırmaya çalışıyoruz.

Projedeki Teknolojileri Seçerken

Projede kullanmakta olduğumuz teknolojiler, bildiklerimiz arasında en uygun olduğunu düşündüklerimizdir. Bu teknolojilerle ilgili gelişmeleri çeşitli blog yazarlarından takip etmekteyiz. Böylece hem güncel bilgiye ulaşabiliyoruz hem de bildiklerimizi güncel tutabiliyoruz.

Projenin arayüzünü geçerli html ve geçerli css ile kodluyoruz. Bu teknolojileri kullanırken bize ışık tutan blog yazarları (Hasan Yalçın, Fatih Hayrioğlu aklımıza ilk gelenler)

Server taraflı dil için asp, php, jsp ya da yeni trend olan ruby vardı. Bunlar arasında en deneyimli olduklarımız asp ve jsp/servlet'ti. Böylesine bir proje için nesne tabanlı programlamanın daha uygun olduğunu düşündüğümüz için jsp/servlet i seçtik. (Microsoft asp den desteğini zaten çekmişti)

Arayüzdeki bazı etkileşimler için Ajax ı da unutmuyoruz.

Merhaba dünya

Projemizin gelişimini bir blog üzerinden anlatma fikrini, kendi aramızda büyük heyecan ile karşıladık. Henüz gelişme aşamasında iken internete sunacağımız projenin, yine interneti kullananlar tarafından şekillendirilmesi oldukça güzel olacaktır diye düşündük.

Projemiz bitene kadar burada neler paylaşacağımızdan kısaca bahsetmek istiyorum.

  • Projemizi yaparken faydalandığımız kaynaklar, ( Bu, bazen bir makale olur bazen bir teknoloji.)
  • Projemizde olmasını istediği(m/n)iz özellikler,
  • Zaman içerisinde projeye eklediğimiz - çıkardığımız özelliklerin tanıtımı.
Aktaracağımız konuların zaman sıralamasını projenin bitiş tarihine göre düzenlemeye çalışacağız. Yani halihazırda olmayan bir özellikten ya da olsa da diğer modüllere ihtiyaç duyabilecek bir özellikten bahsetmek istemiyoruz =)