h1

Bir Proje Geride Kaldı…

Nisan 2, 2009

 Grubumuz; Teşkilat-ı Esasiye olarak IBM Türkiye’nin düzenlemiş olduğu, Yazılım Akademisi’ni geride bıraktık… Allah’a şükürler olsun ki, bu proje süresince bizde birşeyler yapabildik ve büyük oranda tamamlamış olduğumuz projemizi dün itibari ile IBM’e gönderdik…

 ”XML Challenge” olarakda bilinen yarışmanın, Türkiyede bir benzerinin olmamasından dolayı  ayrı bir önem taşıdığını belirtmek istyiorum.

İlerleyen zamanlarda proje detayları, ortaya çıkan ürün ve öğrendiğim teknolojileri burada paylaşmayı düşünüyorum ama öncelikle genel bir tanıtım ile  başlayalım…

Ülke genelinde, suç ile mücadeleyi hızlandıracak, halkın katkısını ve olayların çözümünde etkinliğini arttıracak, online bir yapı tasarladık. “Online” diye bahsettiğim bu şey, sadece bir “web” sitesinden ibaret olmayan, mimari yapısında bile “güvenlik” kokan bir çok şeyi barındıran komple bir portal. Grup arkadaşlarımla birlikte (Remzi Arslan, Mehmet Akin, Mehmet Yavuz) ortaya çıkardığımız bu sistemin, uygulanması durumunda ülkemizdeki ihbar yönetimi konusunda ciddi ilerlemeler olacağını düşünüyoruz.

Başkanlığını yaptığım bu grubun yaklaşık 5 ay süren çalışmalarında, edindiğim tecrübelerime dair zihnimdeki bazı notları yazmak istiyorum:

Bu Grup Çalışması Sayesinde Farkına Vardığım Şeyler:

  1.  Grup çalışmasında çalışıcak kişilerin önemi… 
  2.  

  • bu madde ilk sırada yer almaya değer. Grup çalışmasında yer alacak kişiler, mümkün olduğunca ortamı bozmayacak, ortama güzellik ve değer katacak kişilerden olmalı. 
  • Grubun çalışmasında grubun konsantresini bozmamalı.  
  • Kişilik karakterleri olarak, uyuşan insanların bir arada olması gerçekten çok önemlidir. 

(Bu yönlerin hepsini barındıran grup arkadaşlarıma buradan bir kez daha teşekkür ederim.)

2.  Grubun Danışman İhtiyacı

  • Bu grup çalışmasında anladım ki, “ne yapacağını bilmek ile ne yapacağını tahmin etmek” arasında dağlar gibi fark var. Grup içerisinde veya dışarısında destek verebilecek “danışman” hükmünde birisinin olmaması demek; “çoğu zaman akıntıya karşı kürek çekmek” demektir… 

 

3. Organize çalışmanın yararları ve iş bölümü

  • ilk defa yaşamış olduğum bu proje heyecanımda, doğal olarak da ilk defa görev paylaşımı yapmış oldum:) her bir şey ile ince ince uğraşmamak bence güzel birşey…
  • grup içerisindeki insanlar birbirlerinden çok şey öğreniyorlar… Bunun en güzel tarafı çoğu zman bu durumun farkında olmadan oluyor olması:)

 

4. Sinerjinin Yakalanmasındaki Önem

  • Herhalde en zoru budur… yani sinerji..  Grup içerisinde sinerjinin yakalanması gerçekten zor birşey. ama o istenilen ortama ulaşınca, grup içi çalışmalar daha güzel, keyifli, faydalı ve verimli…

 

Yeni Öğrendiğimiz Teknolojiler:

XML teknolojileri (XML, pureXML, DTD, XML Schema, Xpath, XQuery,SQJ, XLST…)

Java Servlet, Java Server Page

GWT (Google Web Toolkit)

 

Yeni Öğrendiğimiz veya ilk defa bu projede Kullandığımız Araçlar:

IBM DB2 9.5

IBM RAD  

IBM WAS (WebSphere Application Srever)

IBM Data Studio

IBM Rational Software Architect

IBM DB2 Developer Workbench

IBM HTTP Server 

IBM Lotus Symphony

 

 

 

Bu proje için okuğumuz kitaplar, makaleler, kaynaklar:

XML (CSS,HTML,XSL..), Korhan Geriş

XML Cep Danışmanı

J2EE : Complete Reference Author : Jim Keogh by Mc Graw Hill

DB2 9 pureXML Guide RedBooks

DB2 9: pureXML Overview and Fast Start RedBooks

pureXML Guide Updated March, 2008

XQuery Reference Updated March, 2008

Developing Java Applications  Updated March, 2008

Database Management And Design Author : Gary W. Hansen and James V. Hansen

IBM.com ve DeveloperWorks kaynakları (20 civarı makale)

 

Yazan:  Mustafa Ferhan Akman

h1

4. Kamp Dönemi (Final): 13 Mart – 1 Nisan 2009

Mart 14, 2009

2 Günlük tatilin ardından projemiz, problemlerimiz ve bizi bekleyen 18 günlük bir boğuşmaca var:)

Bu dönemde bitirmeyi planladıklarımız:

  • Web sitesi.
  • Administrator Console
  • SMS Gönderim Uygulaması (kendisine henüz bir isim vermedik)

 

Database yapımı ve sistem tasarımına oldukça fazla vakit harcadık. Bir çok şeyi kod ile halletmektense,  bunları databasede çözümlemek daha akılcı bir çözüm olduğunu düşündük. Sistemimize ekstra güvenlik mekanizmaları ile daha korunaklı hale getirmek istedik. Tüm bunların sonucunda, koddan ziyade Sistem Mimarisi ile daha çok uğraştık. Kod kısımlarını yetiştirebildiğimiz kadarını yapıp, projemizi böyle teslim edeceğiz. 

h1

XML, XML dedikleri… (XML hakkında genel bilgi)

Mart 14, 2009
IBM Yazılım Akademisi isimli yarışmaya hazırlandığımız şu günlerde DB2 9 pureXML özelliğini kullanabilmek için XML Teknolojisine iyi derece de hakim olmamız gerektiğini anladık. Şahsen bu konuda 2 kitap ile beraber çalışıyor olsamda hala tatmin olabileceğim bir bilgi seviyesine ulaşabildiğimi söyleyemem.XML içerisinde yer alan DTD ve  Schema kullanımları, bir XML dosyasının ‘Geçerli’ olup olmadığı konusunda yol gösterirken bunların yanında XML ile iligili bilmemiz gereken çok şeyin olduğunu söylemem gerekir:) Özellikle anadilimiz Türkçede çok fazla dökümanın olmaması gerçekten can sıkıcı. Her ne kadar aldığım eğitimden dolayı ingilizce dökümanlara karşı yabancılığım olmasada, yeri geldiğinde insanın kendi anadilinde de bazı bilgilere ulaşması çok gerekli bir durum…   

XML Teknolojisini Öğrenmek

XML öğrenimine, bir XML belgesini geçerli ve geçersiz yapan faktörleri öğrenerek başlayabiliriz. (Well-formed ve validate => iyi biçimli belge ve geçerli) XML’in belli bir yazım kuralları var. Bu yazım kurallarına uygun davranmamız gerekiyor (örneğin; açılan her tag <isim>, </isim> şeklinde tekrar kapatılmak zorunda) Yazım kuralı açısından kurallara uyduğumuzda o belge well-formed olmuş oluyor.  

DTD ve Schema’lar ile yeni oluşturulacak XML belgesinin, biçimini ve içeriğini önceden tanımlayabiliriz. Tanımladığımız kurallar çerçevesinden oluşan XML belgesi “geçerli” olmuş olur.

Son öğrendiğim şeye göre XQuery’i iyi bilebilmem için önce XPath’ı iyi biliyor olmam gerekiyormuş. Zaten XQuery 1.0 XPath 2.0′ın bir uzantısı olduğundan Xpath için yazılan tüm sorgulamalar XQueryde de otomatik olarak geçerli oluyor.. XQuery bize birçok avantaj sağlıyor.. Normal SQL ile XML verisini update etmek istediğimizde elimizde olan tek şans; SQL sorgusu ile XML kolonun tamamını çekip, parse ettikten sonra gerekli update işlemini binbir zorlukla yapıp; tekrar veritabanımıza insert etmemiz gerekir. Ki bu oldukça büyük bir zahmet demektir. Fakat IBM DB2 9.5 ile gelen Update özelliği ile XQuery’sini yazdığımız XML verisini, herhangi bir parse (ayrıştırma) işlemine tabii tutmadan istediğimiz node’una ulaşıp, istediğimiz işlemi gerçekleştirebiliyoruz. 

CSS / XSLT  Kullanımı

Düşünsenize bir veri tabanınından çekip, XML verisi olarak ekrana döndüreceğimiz verilerimizi <person><name> Ferhan Akman </name></person> olarak döndürdüğümüzü? Web sitemize giren kişiler ekranda buna benzer kodları gördüğünde sizce bunu anlayacaklar mıdır? 

XML belgerlirini son kullanıcılara göstermeden önce belli bir formata sokup, okunulurluğunu arttırmak için belgenin sadece istediğimiz kısımlarını ekrana yazdırmamız gerekir. Bu iş için bir kaç farklı yöntemimiz var. Mesela bu konuda rahatlıkla CSS’i  kullanabiliriz. CSS sayesinde bilgilerimizin istediğimiz yerlerini tablolar,  belirgin bazı yerlerini ekrana kalın yazılar halinde çıkartabiliriz. CSS çok kullanılan stilleme yöntemlerinden bir tanesidir.

Bunun dışında bir de XSLT (Extensible Style Language Transform) vardır. En büyük avantajı yazacağımız kodun yine XML tipinden oluşuyor olmasıdır. Ayrıca CSS içeriside script kullanılamıyor olması ve loop’lara (döngü) yer verilemiyor olması gibi CSS’in bazı eksikliklerini gideriyor. 

Şimdilik sadece giriş olarak nitelendirilebilecek bu yazımı bitiriyorum fakat ilerleyen zamanlarda, XML Teknolojisine daha derinden inceleyen yazılarımla beraber olacağız

Şimdilik hoşcakalın.

Mustafa Ferhan Akman

h1

3. Kamp dönemi bitti

Mart 10, 2009

Bugün Erdem arkadaşımızın camımıza gelip, “hadi gözünüz aydın proje ertelenmiş” demesi ile ister istemez herkeste bir gevşeme oldu:) Hepimizin yeteri kadar yorulduğuna hükmetmemizin ardından 2 günlük mola vermeye karar verdik. 2 gün sonra 4. kamp dönemi ile projemizi nihayete erdirmeyi istiyoruz.

 

3. Kamp döneminde gelinen nokta:

  • JSP ile web sitesinin kodlanmasına başlandı. Ve yaklaşık 15 form bitti.
  • Sitenin görsel dizaynı yapıldı. CSS yerleşimleri üzerinde uğraşıldı.
  • Bölüm Başkanımız Erbuğ Çelebi ve danışmanımız Baturman Şen’in tavsiyeleri ile “Administrator Console”‘un yapılması planlandı.
  • pureXML ile ilk denemelere başlandı.
h1

3. Kamp Dönemine Girdik

Şubat 25, 2009

Bugün (25 Şubat) itibariyle 3. kamp dönemimize girmiş bulunuyoruz. Okulumuza geldik, yurtlarda bizim grubumuzdan başka sadece güvenlik görevlileri var:(

Bu kamp dönemi yaklaşık 20 gün sürecek. Yani projenin son teslim tarihi olan 15 Mart tarihinde projemizi teslim etmeyi planlıyoruz.

Bu süreçte yapmayı planladıklarımız:

  • pureXML ile database’imizin yeniden düzenlenmesi
  • db test
  • pureXML teknolojisini ve inceliklerini öğrenmek
  • JSP ile web sitesinin geliştirilmesi ve tamamlanması
  • Yukardaki maddelerin bitmesi durumunda, daha önce tasarladığımız gelişmiş özelliklerin sisteme entegrasyonuna başlanması.

 

Şubat ayında Kıbrısta dışarıdaki havanın güzelliğini ve okulun ıssızlığını anlatan bir fotoğrafla yazıma son veriyorum:

kamp3

h1

RAD 7 ile AJAX geliştirmek

Şubat 20, 2009

Tatil sürecinde hem XML teknolojilerine göz atıyorum hemde ASAYİŞ 1.0′ı geliştirmekte kullanacağımız diğer teknolojileri takip etmeye çalışıyorum. İnternetten bulunabilecek az sayıdaki Türkçe döküman sayısı, Beni döküman yazmaya itiyor. Bu yüzden de bu blog üzerinden, hem bulduğum kaliteli dökümanları paylaşacağım hemde Teşkilat-ı Esasiye olarak hazırlayacağımız “yeni” dökümanları Türk yazılımcıları ile paylaşacağız.

şimdi A. Agopyanın kendi blogundan bulduğum bir AJAX dökümanını sunuyorum ama ileride kendi dökümanlarımızı daha çok göreceksiniz.

 

AJAX teknolojisi ve Web 2.0 felsefesi günümüz uygulamalarını ciddi şekilde yönlendirmeye başladılar. Öyle ki artık neredeyse AJAX kullanmayan web uygulamaları “demode” olarak görülmeye, sürekli postback yapan sayfalar “acemi işi” olarak nitelendirilmeye başlandı.

Birçok ürün ve geliştirme ortamı yavaş yavaş piyasada var olan veya kendi ürettikleri AJAX framework’leri bünyelerine katmaya, onlarla entegre olarak çalışmaya başladılar.

Bunlardan bir tanesi de daha önce blog sayfalarımdan duyurduğum Rationalyazılım geliştirme araçları v7 ailesi.

Bu makalede, IBM’den Yury Kats‘in, Rational ailesinden olan Rational Application Developer ile bu ortamla bütünleşik gelen AJAX geliştirme özelliklerini kullanarak hazırladığı bir örneği göstereceğim.

JSF sayfalarınızı AJAX-enabled hale getirmek aslında sadece 4 adımda gerçekleşir :

1. Sayfanın neresinde AJAX güncellemeleri kullanacağınıza karar verin

RAD 7.0 ile gelen paneller, diyaloglar ve menüler : < h:panelGroup > , < h:panelGrid > , < hx:panelMenu > , < hx:panelDialog>

2. Hangi tip AJAX isteği kullanacağınıza karar verin

Aynı sayfa için GET : < hx:ajaxRefreshRequest >
Aynı sayfa için POST : < hx:ajaxSubmitRequest >
Farklı bir sayfa için GET : < hx:ajaxExternalRequest>

3. AJAX isteğiyle sunucuya gönderilecek parametreleri ayarlayın

GET için sayfa içerisindeki giriş alanları (input), POST için tüm form…

4. AJAX isteğini tetikleyecek olan event’i seçin

Button için onclick, giriş alanları için onblur, kontrol nesneleri için onchangegibi…

Şimdi bu adımları bir Hello World örneğinde görelim. Bu örnekte bir giriş alanına bir metin yazdıktan sonra alan dışına çıkıp, çıktı alanımıza (output) bu metni yazdıracağız. Tabi tüm bunlar sayfayı sunucuya tekrar göndermeden AJAX ile gerçekleşecek.

Öncelikle yeni bir Web Project yaratalım :

* Menüden File > New > Project > Dynamic Web Project‘i seçelim. New Project diyaloğu açılacaktır.

* Bir proje adı girelim : HelloWorld.

* Hazır konfigürasyonlardan Faces Project‘i seçelim.

* Paketleme için EAR seçeneklerinde “Select Add project to an EAR” kutusunu işaretleyelim.

* ve Finish…

Şimdi yeni bir Web sayfası yaratalım :

Project Explorer ekranından proje ismine sağ tuşla tıklayalım.

* Açılan menüden New > Web Page‘i seçelim.

* Açılan diyalogda yeni sayfamızın adını girelim : hello

* ve yine Finish…

Böylece artık bir projemiz ve üzerine eklemeler yapacağımız bir sayfamız var.

Enhanced Faces Components araçlarından bir Input nesnesini sayfaya sürükleyip bırakalım.

* Aynı şekilde bir Panel Group nesnesini Input nesnesinin hemen altına yerleştirelim. (Group Box Type olarak Group seçelim)

* Şimdi de bu Panel Group içerisine bir Output nesnesi yerleştirelim.

Sonunda sıra geldi yarattığımız panel’e AJAX desteği eklemeye. Bu panel içerisinde AJAX kullanabilmek için paneli AJAX-enabled hale getirip, kullanacağımız parametreleri ayarlamamız gerekiyor.

outputText nesnesini seçip Properties ekranına gelelim.

* Bu ekranda h:panelGroup tag’ini seçelim.

* Ajax sekmesi içerisindeki “Allow Ajax updates” kutucuğunu işaretleyelim.

* Ajax istek tipi olarak da “Refresh”‘i seçelim.

Biz burada Refresh isteği kullanacağız. Alternatif olarak Submit’i seçmiş olsaydık tüm form gönderilecekti.

Şimdi panel için kullanacağımız parametreleri ayarlayalım :

Click to edit Ajax request properties butonuna tıklayalım.

* Properties bölümünde hx:ajaxRefreshRequest tag’ini seçelim : 

   - Add Parameter butonuna tıklayarak browser’dan göndereceğimiz parametreleri ekleyelim.

   – Değeri alacağımız giriş alanını seçelim : text1

Girdi değerlerini ve panel özelliklerini ayarladıktan sonra sıra geldi çıktı ayarlarını yapmaya.

outputText nesnesini seçelim.

* Value alanının yanındaki butona tıklayalım. Açılan diyalogda sağ üstteki New Data Object butonuna tıklayalım ve Scripting Variables > Param Scope Variable türünü seçelim. Parameter name olarak text1 gireceğiz. Böylecetext1 değeri parametreler arasına eklendi.

* Son olarak Value alanına “Hello, #{param.text1}” yazalım. Böylece çıktı alanımız artık neyi göstereceğinin farkında.

 

Buraya kadar yaptıklarımızla başta bahsettiğim 4 adımdan 3′ünü tamamladık. Sıra geldi son adıma. Bu adımda AJAX isteğini tetikleyecek event’i ayarlayacağız.

inputText nesnesini seçelim.

Quick Edit sekmesine geçelim.

   Buradan:

   - onblur olayını sol taraftaki olaylar listesinden seçelim.

   - Use predefined behavior kutucuğuna tıklayalım.

   - Invoke Ajax behavior on the specified tag action’unu seçelim.

   – Hedef (target) olarak da group1 nesnesini seçelim.

Artık sıra geldi sayfamızı çalıştırmaya. Sayfayı kaydedip sunucu üzerinde çalıştıralım. Kutucuğumuzun içerisine “world” yazalım. Tab tuşuyla kutu dışına çıktığımızda veya fare ile kutu dışına tıkladığımızda AJAX isteği gönderilecek ve sayfa yeniden yüklenmeden “Hello, world” mesajımızı alacağız.

Böylece RAD içerisindeki hazır component’leri kullanarak bir kaç adımda hiç javascript yazmadan AJAX destekli basit bir sayfa oluşturmuş olduk.

orjinal kaynak: tıklayın

h1

RAD 7, Bölgesel Dil Ayarlaması

Şubat 7, 2009

RAD 7′yi sorunsuz kurdunuz ama program açılımında hata mesajı alıyor ve programı açamıyorsanız, bunun sebebi Türkçe işletim sistemi kullanıyor olmanız ve karakter seti ayarlamasının yapılması gerektiğindendir.

Denetim Masası > Bölgesel Dil Ayarları > İngilizce 

seçildikten sonra bilgisayarınızı yeniden başlattıktan sonra sorun çözülecektir.

 

Yazan: Mustafa Ferhan Akman

h1

2. Kamp Döneminin Ardından

Şubat 7, 2009

malesef 2.Kamp dönemi hedeflediğimiz noktalara ulaşabildiğimiz bir dönem olmadı.Bu süreçte, kendimize takvim hazırlarken daha realistic olmayı öğrendik.  

2. kamp döneminde yaptıklarımız:

 

  • Eclipse ile WAS’ı senkronize ettik ama Eclipse yerine RAD 7 ’nin bize sağlamış olduğu güzel özelliklerinin farkına varmamızın ardından RAD 7 (rational application developer) kullanmaya karar verdik. 
  • Database’imizi kağıt üzerinden hazırladık ve bilgisayar ortamına aktardıktan sonra Test senaryoları yazarak, ihtiyacımızı karşılayıp karşılamadığına baktık.
  • ASAYİŞ 1.0 database sistemini DB2 9 üzerinde çalıştırmaya karar verdik ve çalıştırdık. 
  • AJAX kullanımı için GWT’nin öğrenilmesine karar verdik.
  • Danışman hocamızın ısrarı ile JSP ile web sitemizi geliştirmeye karar verdik.

2. kamp döneminin ardından yapmaya karar verdiklerimiz:

 

  • Tatil süresince, servlet ve JSP konuları öğrenilecek.
  • XML teknolojileri öğrenilecek.
  • DB2 pureXML özelliği araştırılacak.
  • CSS öğrenilecek.

2.Kamp döneminden bir fotoğrafıda konuya ekleyerek artık tatile çıkıyoruz:)

kamp2

h1

Proje İsmimiz: ASAYİŞ 1.0

Şubat 5, 2009

Teşkilat-ı Esasiye Proje Ekibi olarak bugün aldığımız grup kararı ile, IBM Yazılım Akademisi 2009′da yarışacak olan projemize ASAYİŞ 1.0 ismini verdik.

h1

WAS ile Eclipse Senkronizasyonu

Şubat 5, 2009

Günlerdir uğraşıyoruz… Eclipse Ganymede ile WebSphere Application Server 7′yi senkronize etmek için. Bu konuda IBM developerWorks sitesinde ve internette bulduğumuz resmen tüm makaleleri okuduk:) Hatttauygulamadığımız yöntem kalmadı diyebilirim…

Ve 3. günün sonunda anladık ki, bu sorun kullanılan işletim sisteminin Türkçe olmasından kaynaklanıyormuş.. Sistemimize format atıp, İngilizce Windows kurdup IBM’in web sitesindeki dökümanları takip ederek, önerilen yöntemi uyguladığımızda Eclipse ile WAS 7′yi birbirine rahatlıkla tanıtabilirsiniz. 

WAS’ı eclipse tanıtırken sizlere pratik yoldan göstermeye çalışayım.

Eclipse açıldığında şu adımlar izlenir;
File > New > Server 

adapter2

Bu ekran karşımızdayken, Downlad additional server adapters diyeceğiz ve karşımıza çıkan alttaki ekrandan adapterımızı seçip yüklenmesini bekledikten sonra Server’ımız artık kullanıma hazır demektir!

adapter 

 

Evet, gerçekten basit adımlar. Fakatletim sisteminizin ingilizce olması gerektiğini bilmiyorsanız sizde bizim gibi boşu boşuna 3 gününüzü bu uğurda harcayabilirsiniz… Şahsen ben bu basit işlemleri yapabildikten ve server’ı çalıştırdıktan sonra o kadar çok sevindim ki  sabaha karşı 04:45 civarında alltaki şu fotoğrafı çektirdim :)

(Aslında buraya o çektirdiğim fotoğrafı eklemiştim fakat yorgunluktan dolayı o kadar kötü gözüküyorum ki, geri kaldırmaya karar verdim)

 

Yazan: Mustafa Ferhan Akman