Spring MVC/RESTful Api Dökümantasyonu

Son dönemde RESTful servislerin popüler olması ile birlikte birçok yer projede bu servisleri görüyor. Hem geliştirirken hemde kullanırken farklı yöntemlerle işlerimizi yürütüyoruz.

RESTful servislerin doğası gereği bir tanım belgesi mevcut değil. Bu durum başlarda pek problem gibi görülmese de proje büyüdükçe ciddi bir problem haline dönüşüyor. Servisleri kullanmak için başka taraflara verdiğimizde bir dokümantasyona ihtiyaç olmakta. Hadi diyelim ki dokumanı hazırladık, geliştirme hengamesi içerisinde dokumanın güncelliğini sağlamakta ciddi bir problem haline geliyor.

Bu durumu çözümlemek için swagger grubu bir api dokümantasyon standardı belirlemiş ve bunu yayınlamış. Oldukça kullanışlı ve anlaşılır bir içerik sunuyor.

Sizde kendi apilerinizi dokümante etmek için bu standardı kullanabilirsiniz. Bu spesifikasyonu spring mvc/RESTful projeleri için uygulayan springfox projesini projenizee dahil edebilirsiniz.

Konuyla ilgili örnek uygulamaya aşağıdaki adresten erişebilirsiniz.

https://github.com/dilaverdemirel/springfox-swagger

Hafız İsmail Biçer – Hicr Suresi 86-87

86. Şüphesiz, Rabbin hakkıyla yaratanın (ve herşeyi) bilenin ta kendisidir.
87. Andolsun, biz sana tekrarlanan yedi âyeti ve büyük Kur’an’ı verdik.

İsmail Biçer, İstanbul tilavet geleneğinin son temsilcilerinden biri olarak hem bu geleneğin etkisini bir süre daha devam etmesine olanak sağlamış hem de kendisine önemli bir isim kazandırmıştır.

Pentaho BI Server Community Edition

Merhabalar, uygulamalarınız için bir BI(business intelligence) aracına ihtiyacınız varsa Pentaho BI CE(community edition) genel olarak işinizi görecektir. Uygulama hakkında bir fikir edinmek için bu yazıya göz atabilirsiniz. Uygulamanın sunduğu özelliklerden temel olanları anlatmaya çalıştım.

Start 🙂

http://community.pentaho.com/ adresinden “Business Analytics Platform” sekmesinden BI Server aracı indirilir. Uygulamayı türkçe bir platformda çalıştırmak için “biserver-ce\tomcat\bin” dizinindeki “catalina.bat” dosyasına yurakıda biryerlere aşağıdaki satırı ekleyin

set “JAVA_OPTS=%JAVA_OPTS% -Duser.language=en -Duser.region=US”

Uygulamayı çalıştırmak için “biserver-ce\start-pentaho.bat” komutunu çalıştırın. Sonrasında uygulama açıldı ise browserdan “http://localhost:8080/” adresine girmeniz yeterli.Uygulama düzgün açıldı ise aşağıdaki ekranı göreceksiniz. 6.1 versiyonunda sorun yaşadığım için 6.0 versiyonunu kurdum. Design araçlarının versiyonu biserver versiyonuna uyumlu olmalıdır. Aksi takdirde tasarladığınız bir raporu sunucuya yükleyemeyebilirsiniz.

server-login

 

 

 

 

 

Sonrasında admin olarak login olun. “Create New > Datasource” adımlarını takip ederek bir datasource tanımlayın. Burada datasource’a verdiğiniz raporları ve OLAB cube’ü yüklerken kullanacağınız için bu önemli.

Bağlanacağınız db’nin driveri yoksa sunucuda “biserver-ce\tomcat\lib” dizinine ilgili jdbc driverinin jar’ını koymanız gerekmektedir.

Pentaho bi server’in en güzel özelliklerinden birisi plugin mantığı ile genişletilebilir olması. Uygulamayı ilk kurduğunuzda Marketplace’e erişebilimeniz için bu plugini manuel kurmanız gerekiyor. Bunun için http://www.pentaho.com/marketplace/ adresinden “Pentaho Marketplace” pluginini download edin ve sonra sunucunuzda “\biserver-ce\pentaho-solutions\system” dizini altına koyun. Sonra uygulamayı restart edin. Artık anamenüde “Marketplace” linkini görüyor olacaksınız.

marketplace

 

 

 

 

 

Report

Rapor tasarlamak için “Report Designer” sekmesinden uygun paket indirilir. Türkçe olan işletim sisteminde çalıştırmak ve memory parametreleri için report-designer.bat  dosyasına “-Duser.language=en -Xms1024m -Xmx2048m -XX:MaxPermSize=256m” eklemesini yapmanız gerekir.

start “Pentaho Report Designer” “%_PENTAHO_JAVA%” -Duser.language=en -Xms1024m -Xmx2048m -XX:MaxPermSize=256m -jar “%~dp0launcher.jar” %*

Oracle DB’ye bağlanmak için “lib\jdbc” dizinine oracle jdbc driverini eklemeniz gerekmektedir.

DB’ye bağlanmak için Report Designer arayüzünden “Data>Add Data Source>JDBC” adımlarını takip ediniz.

Datasource tanımladıktan sonra rapor tasarlarken kullanmak için sorgular tanımlamanız gerekiyor. Bu sorguları parametrik yapabiliyorsunuz. Oluşturduğunuz parametrelerin datasını yine farklı bir sorgu üzerinden alabiliyorsunuz.

datasource

report-parameter

preview

 

 

 

 

OLAP Cube

OLAP Cube tasarlamak için “Schema Workbench” sekmesinden uygun paket indirilir.

Report aracındaki gibi bu araçtada dil ve driver ayarlarını yapmanız gerekmektedir. Tasarıma başlamadan bir connection tanımı yapmanız gerekmekte. “Options>Connection” menüsünden db bağlantı parametrelerinizi tanımlayıp kaydedin. Örnek çok mantıklı değil ama mantığını anlamak için yeterli. Elimde bir ürün tablosu var bu tabloyu kullanarak bir küp oluşturacağım.

Tablo : SER_MAM_TNM

Alanlar : MAM_KOD(ürün kodu),MARKA_KOD(marka),MODEL_KOD(model),URETICI_KOD(üretici),MAM_ANAGRP(Ürün grubu)

Adımlar;

  1. Add cube
  2. Table : [name : SER_MAM_TNM]
  3. Add dimension: [name : Urunler, foreignKey:MAM_KOD, type : StandardDimension]
  4. Dimensiona hierarchy eklenir : [name : Default]
  5. Hierarchy’ye table eklenir [name : SER_MAM_TNM]
  6. Hierarchy’ye Level eklenir [Name: marka, table : SER_MAM_TNM, column: MARKA_KOD]
  7. Hierarchy’ye Level eklenir [Name: uretici table : SER_MAM_TNM, column: URETICI_KOD]
  8. Cube’e measure eklenir [name: UrunKodu, aggregator : distinct-count, column: MAM_KOD]
  9. Cube’e measure eklenir [name: AnaGrubu, aggregator : distinct-count, column: MAM_ANAGRP]

cube

 

 

 

 

 

Tasarımı tamamladıktan sonra “File > Publish” seçenekleri ile sunucuya yükleyin.

publish-cube

 

 

 

 

 

 

 

 

Sonuç;

cube-preview

 

 

 

 

 

 

Pivot tabloları daha güzel sunan “Pivot4J” pluginini marketplace’den kurabilirsiniz.

Dashboard

Pentaho biserver üzerinde gelişmiş dashboardlar tanımlayabilirsiniz. Anasayfada “Create New > CDE Dashboard” seçenekleri ile yeni bir dashboard oluşturabilirsiniz. Pentaho üzerinde CDE(community dashboard editor)  dashboard ile oluşturulan dashboardların mantığı şöyledir;

3 adet bölümden oluşur :

  1. Datasource bölümü; Burada grafiklerde ve diğer componentlerde kullanmak için farklı tiplerde queryler oluşturmanız gerekiyor
  2. Components bölümü: Burada dashboarda eklemek istediğiniz grafik,harita.rapor vb. componentleri tanımlamanız gerekiyor. Burada tanımlama yaparken datasource bölümünde tanımladığınız query’leri kullanıyorsunuz.
  3. Layout bölümü; Burada ise dashboardınızın nasıl görünmesi gerektiğini belirliyorsunuz. Yerleşimde kullanmak için ihtiyaçları karşılayacak nitelikte yeterli seçenek mevcut. Burada oluşturduğunuz alanlara verdiğiniz isimleri components bölümünde tanımladığınız componentlerin “HtmlObject” kısmına yazdığınızda hangi componentin layoutda nerede görüneceğini belirtiyorsunuz.

dashboard-1

 

 

 

 

Basit bir dashboard oluşturup bir grafik ekleyelim;

Önce datasource bölümünde bir query tanımlayalım. Sol taraftaki sekmelerden “SQL Queries” kısmından “sql over sqljndi” linkine tıklayarak bir query oluşturun. Sonra sağ tarafta name kısmına anlamlı bir isim verin. JNDI özelliğini ilk aşamada tanımladığımız datasource’nin ismini yazın. İlk harfini yazdığınızda ya da aşağı ok tuşuna bastığınızda sistemde tanımlı datasource’lar listelenir. Query kısmına kendinize uygun bir aşağıdakine benze bir sorgu olusturun;

select hizmet_tipi_ad hizmet_tipi,bolge_adi bolge,adet from BI_BOLGE_VW where yil = ${yil} [Bu sorgu bölge bazında yapılan hizmetleri hizmet tipine göre adetlerini vermekte]

Bu sorgu yil parametresine göre çalışmakta. Dashboarda bir yıl parametresi ekleyip o parametrenin değerine göre grafiği filtreleyeceğiz.

Parameters kısmına “Name:yil, value : yil, type : string” şeklinde parametre tanımlayın. Bu şekilde query’imizi tanımlamış olduk.

Sonra components bölümüne geçiyoruz.

Burada sağ tarafta “Generic” sekmesinden “Simple Parameter” seçeneğini seçerek bir parametre oluşturuyoruz. [Name: yil, property value : 2012]

simple-parameter

 

 

 

Sonra yılların olduğu bir combobox oluşturmamız gerekiyor. Bunun için sağ bölümden “Select” sekmesinden “Select Component” seçerek ekleyin.  [Name: YilSecim, parameter : yil, Listeners : yil, values : 2011,2012…2016 ]

select-component

 

 

 

Sağ tarafta “Charts” sekmesinden “CCC Bar Chart” seçeneğini seçerek bir bar chart oluşturuyoruz. [name : bolgeBazliHizmet, Listeners : yil, parameters : (yil,yil), datasource : (datasource bölümünde tanımladığımız query adı, crosstabMode : False)]

bar-chart

 

 

 

Sonra layout bölümüne geçiyoruz, burada dashboard yerleşimini oluşturacağız.  İlk aşamada hazır templatelerden birini seçerek devam ediyoruz. Üst kısımda 2. buton olan “Apply Template” seçeneği ile uygun bir template seçin. Ben iki sütunlu olanı seçtim.

layout

 

 

 

Sonrasında üstten “spacer” satırından sonra bir satır daha ekledim ve adına “Kriterler” dedim. İçerisine bir column ekleyerek adına “YilKriteri” dedim. Bu bilgiyi şimdi gidip components bölümünde tanımladığımız “YilSecim” componentinin “HtmlObject” kısmına yazmamız gerekiyor. Böylece yil comboboxı yerleşimde bu kısımda görünecek.

Sonra kriterlerden sonraki “Body” kısmındaki ilk columna (yani Panel_1)’in name bilgisini components bölümünde tanımladığımız bar chartın “HtmlObject” kısmına yazıyoruz.

Böylece dashboardımızı tamamlamış oluyoruz.

dashboard-preview

 

 

 

 

Not : 

Tanımladığınız dashboardı fakrlı bir web uygulamasında iframe içerisinde göstermek için aşağıdaki değişikliği yapmanız gerekmekte;

“biserver-ce\pentaho-solutions\system\security.properties” dosyasındaki aşağıdaki parametreyi true yapmanız gerekiyor.

requestParameterAuthenticationEnabled=true

Anasayfadan “Browse Files” seçeneği ile dashboardınızı kaydettiğiniz dizinden bulun ve seçip sağ taraftan “Open in a new window” seçeneği ile açın. Açılan pencereden adresi kopyalayın. Adresin sonuna aşağıdaki parametreler ile user ve password bilgisini ekleyin.

http://:8080/pentaho/api/repos/%3Apublic%3ASteel%20Wheels%3ADashboards%3ADilaver.wcdf/generatedContent?userid=admin&password=password

Bu şekilde farklı bir web uygulamasında dashboardınızı görüntüleyebilirsiniz.

Harita

pentaho üzerinden birkaç harita görselleştirme componenti var. Bunun yanında IvyDasboard componentleri içerisinde de bir map componenti var. Burada bunlardan Custom>NewMapComponent ve IvyVectorMap componentlerini anlatacağım.

IvyDC – Ivy Dashboard Components kurmak için marketplace’e gidin ve plugini bulup yükleyin. Sonrasında uygulamayı restart edin. Artık dashboard editor ekranında components bölümünde görüyor olacaksınız.

ivy-dashboard-components

IvyVectorMap türkiye haritası ;

https://github.com/cbilgili/jVectorMap-Turkey adresinden jquery-jvectormap-data-turkey-tr-en.js dosyasını indirin. Sunucunuzda “biserver-ce\pentaho-solutions\system\IvyDC\resources\components\jQVectorMapsComponent” dizinine gidin. İndirdiğiniz dosyası bu dizine yapıştırın. “component.xml” dosyasını açıp “<Dependencies>” kısmına indirdiğiniz dosyayı ekleyin. “<CustomProperties>”  altındaki “<Values>” kısmına “<Value display=’Turkey’>turkey_1_mill_en</Value>” eklemesini yapın. Böylece haritalarda türkiye haritası da çıkmış olacak. Bu compoenetdeki haritalar http://jvectormap.com/maps/world/world/ adresindeki haritalardır.

IvyVectorMap’i dashboarda eklemeden bir datasource eklemeniz gerekiyor. Veri yapısı ise “select city,Measure from temp_tr_map_ivy_view” bu sorgunun sonucu olan aşağıdaki gibi data seti olmalı.

ivy-map-data

Bu data setinde 53: Konya, 7: Ankara, 63 : Ordu, 40 : İstanbul şeklinde. Maalesef harita plaka koduna göre ayarlanmamış.

Sonra components bölümüne geçerek sol taraftaki sekmelerden “Ivy IS” bölümünden “SVG Vector Map” linkine tıklayarak componenti ekleyin. Ve ayarlarında datasource kısmına tanımladığımız datasource adını girin.

ivy-map-properties

Sonrasında layout bölümünde uygun bir alan oluşturarak haritayı buraya yerleştirin yani JQVectorMapComponentinin HtmlObjet kısmına layout bölümünde oluşturduğunuz alanın adını yazın ve önizleme yapın.

ivy-map-preview

NewMapComponent Kullanımı

Bu componeti kullanmak içinde öncelikle bir datasource tanımlamak gerekiyor. Datasource “select Latitude,Longitude,city name ,MEASURE total from temp_map_view” querynin sonucu olan datayı içermelidir.

new-map-component-data

Sonrasında components bölümüne geçin ve sol tarafta “Custom” sekmesinden “NewMapComponent” linkine tıklayın. Ve parametreleri aşağıdaki gibi belirleyin. Önemli kısım datasourceu yazmayı atlamayın.

new-map-component-props

Sonrasında componenti layout üzerinde uygun bir yere yerleştirin ve önizleme yapın.

new-map-component-preview

Sonuç olarak haritanız bu şekilde görünecektir.

 

Google VR Cardboard

webrazzi_vr_cardboard_770_s2Virtual Reality(sanal gerçeklik) son dönemde çok konuşulur oldu. Sebebi ise bence teknoloji olarak son kullanıcının erişebileceği düzeye gelmesidir. Hem teknoloji olarak hem de maddi olarak.

Peki nedir bu sanal gerçeklik derseniz; fiziksel olarak tecrübe edemeyeceğimiz şeyleri sanal olarak bize yaşatmaya odaklanmış bir konu. Düşünün arabayı servise götürüyorsunuz servis danışmanı araca baktığında kaputun altında hangi parçalar olduğunu hatta hangi parçanın arızalı olduğunu görüyor ve size durumu anlatıyor. Bunu fiziksel olarak yaşamak imkansız. Ya da marsı çok merak ediyorsunuz, uzaya giden astronotları vb. ama bunu ömrünüzde tecrübe etmeniz büyük ihtimalle imkansız. İşte tam da bu gibi konularda sanal gerçeklik bize bu tecrübeleri sanal da olsa yaşatıyor. Gözünüze bir gözlük takıyorsunuz ve marsın dağlarında,tepelerinde geziyorsunuz 🙂 Ne hoş değil mi?

Bunu yıllarca araştırdılar konuştular ve artık teknoloji bunu yaşamamıza imkan sağladı. Google bir karton , 2 lens ve bir mıknatıstan oluşan bir tasarım yaptı ve adına da VR Cardboard dedi.  Düşününce teknoloji diyoruz, yıllardır uğraşıldı diyoruz teknoloji bunun neresinde bir karton ve 2 lens ile bu nasıl oluyor diyebilirsiniz. Bu, işin birinci parçası. Diğer parçası ise gyro(jiroskop) sensörü olan akıllı telefonunuzun olması. Böyle bir telefona sahipseniz android için youtube size vr videoları oynatabiliyor. Artık VR Cardboard’ın önüne cihazınızı koyup pariste eyfel kulesinin dibinde dolaşabilirsiniz 🙂

VR Cardboard’ı internette araştırarak kendiniz de yapabilirsiniz. Eğer yapılmışını alayım derseniz birçok yerde 20-30 TL ye satılıyor.

Bende internetten vr cardboard alarak bunu denedim. Kendi telefonum Samsung Galaxy S3. S3’ün NFC adaptörü şarj soketinin yanında olduğu için deneyemedim. Ama iphone 5s cihazda çalıtırabildik. Store’dan Google’ın Cardboard uygulamasını indirip deneyime başladık. Bunun yanında birkaç farklı uygulamayı da deneme fırsatım oldu. Fakat görünüyor ki VR’a uygun pek uygulama yok. Yine de bu tecrübeyi yaşamak, VR’ın ne olduğunu anlamak için denenebilir. Cardboard için beklentiniz çok yüksek olmasın derim 🙂 Ama youtube’daki vr videoları izlemek güzel oluyor.

Google VR’ı herkesin kolayca tecrübe edebileceği noktaya getirdi. Google’ın yanında birçok firma bu VR gözlükleri üretmeye başladı, hatta facebook bile bu işe girdi. Sony gibi oyun konsolu üreticileri de tabiki oyun sektörü için bunun kullanmak için uğraşıyorlar. Oyunseverler VR gözlükleri kesinlikle çok sevecek 🙂 Nindento firmasının başlattığı fiziksel olarak oyun oynama akımı artık bu gözlüklerle çok daha muhteşem tecrübeler sunan bir hale geliyor. Savaş oyununu monitörden değilde atlayıp zıplayarak oynadığınızı düşünün hatta arkadaşlarınızla bir araya gelip farklı karakterlere sahip bir takım oluşturarak düşmana karşı savaşıyorsunuz harika olur bence 🙂

Nedir Docker?

dockerKısaca ifade etmek gerekirse sanallaştırma konusunda en temelde olan kaynak kullanımına optimizasyon sağlayan bir araç olarak nitelenebilir. Bunu nasıl yapıyor derseniz; VMWare,VirtualBox vb. gibi araçların çalışma mantığı şöyledir; fiziksel host makinenin kaynaklarını belirtilen ölçülerde kullanarak bir işletim sistemi çalıştırır. İşletim sisteminin de bir yazılım olduğundan belirli ölçülerde memory,cpu vb. kaynağına ihtiyaç duymaktadır. Bu da host makinenin kaynaklarını daha fazla tüketmeye sebep olmakta.

Docker ise şunu diyor; madem amaç ayrıştırılmış kaynaklar üzerinde bir/birkaç uygulamayı yalıtılmış olarak çalışırtırmak ise, bunu ayrıca bir işletim sistemi olmadan da yapabiliriz. Ve dedikleri gibi de yapıyorlar. Docker ile host makine üzerinde uygulamalar birbirlerinden yalıtılmış şekilde çalışabiliyor hale geliyor. Bu sayede uygulamaları yalıtmak, farklı adresler,portlar vermek için ekstra bir işletim sistemi çalıştırmaya gerek kalmıyor. Ve böylece işletim sistemi çalıştırmak için gerekli olan kaynağı amacınıza yönelik kullanabilir hale geliyorsunuz. Aslında buraya kadar olan kısmı daha öncede farklı araçlar ile yapılabiliyordu. Bildiğim Solaris üzerindeki Zone’lar bunu sağlıyordu. Docker’in farkı ise buradan sonra başlıyor. Bu aşamaya kadar yaptığı, bu tarz özellikleri kolay kullanılabilir hale getirmesi.

Docker aslında bir uygulama sanallaştırma aracıdır dersem yanlış olmaz sanırım. Unix/linux sistemler için tasarlanmış, fakat windows üzerinde de kullanabiliyorsunuz. Docker daha önce bu tarz işler için geliştirilen uygulamalar bir araya getirilerek oluşturulmuştur.

Tek yaptığı bu değil tabiki. Başka neler yapabiliyor; sanallaştırmak istediğiniz uygulamalar için configürasyonlar oluşturuyorsunuz(uygulamayı şuradan yükle, bu parametreleri kopyala, şu port ile çalıştır vb.). Bu konfigürasyon dosyalarının build edilmiş haline image deniyor. Image’lar üzerinde değişiklik yapıp değişiklikleri yönetebiliyorsunuz. Bu source versioning aracı olan git’e benziyor. Sonra bu image’ları dockerhub denilen bir repositorye yükleyip herkesin erişip kullanabileceği hale getirebiliyorsunuz. İsterseniz ücretli bir hesap ile dockerhub üzerinde private repolar oluşturabilirsiniz. Oluşturulan bu imajlar her sistemde çalışabilir nitelikte oluyor, bu paket eksik bunun versiyonu farklı gibi sorunları bertaraf ediyor. Geliştirme ortamında çalışan uygulamanın test ve production ortamında da çalışacağını garanti ediyor.

Sonrasında oluşturulan bu imajları container denilen, uygulamaları yalıtabilen sanal ortamlar üzerinde çalıştırıyor. Dockerhub’a yüklediğiniz imajı çalıştırmak için yapmanız gereken docker ortamına pull etmek ve çalıştırmaktır.

Docker için edindiğim izlenimleri yalın bir şekilde paylaşmak istedim 😉 Teknik olarak bu anlattıklarımın nasıl yapıldığına dair ayrıntıları paylaşmaya çalışacağım.