<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Örün Tabanlı Coğrafi Bilgi Sistemi Uygulama Programlama Arayüzü Geliştirilmesi</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Bülent ÖZHORASAN</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Hüseyin ATEŞ</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Anahtar Kelimeler: Örün Tabanlı Coğrafi Bilgi Sistemi, JavaScript</institution>
          ,
          <addr-line>Uygulama Programlama Arayüzü</addr-line>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Havelsan A.Ş.</institution>
          ,
          <addr-line>Ankara</addr-line>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>Havelsan A.Ş.</institution>
          ,
          <addr-line>Ankara</addr-line>
        </aff>
      </contrib-group>
      <fpage>431</fpage>
      <lpage>438</lpage>
      <abstract>
        <p>Özet Örün tarayıcılarında herhangi bir kurulum gerektirmeden çalışacak Coğrafi Bilgi Sistemi uygulamalarına olan ihtiyaç artmaktadır. Bu kapsamda WebGL ve JavaScript kullanılarak geliştirilen TMAP-W (Tactical Map-Web) ürünü örün tabanlı CBS uygulamalarında CBS altyapısı olarak kullanılabilmektedir. Bu bildiride uygulama programlama arayüzünün tasarımı, gerçekleştirimi ve inşa süreci hakkında bilgi verilecektir.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1 Giriş</title>
      <p>
        2 Temel Tasarım Unsurları
2.1 JavaScript Dilinin Seçimi
Örün tabanlı bir uygulamada Java kodları applet kullanılarak örün tarayıcısı içinden
kullanılabilmektedir. Ancak bunun için istemciye JRE (Java Runtime Environment)
kurulması ve tarayıcıda Java’nın etkinleştirilmesi gerekmektedir. Bu durumda
tarayıcıda güvenlik açıkları oluşmaktadır[
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Ayrıca Appletlerin sertifikalarının
zamanını doldurması gibi sorunlar da oluşabilmekte sertifikaların yenilenmesi gibi
işlemler de kullanıcının yazılımın kullanılabilirliğine olan algısını olumsuz yönde
değiştirebilmektedir. Bu olumsuz yönlerinden dolayı gerçeklemede TMAP-J ve Java
programlama dili kullanılmamıştır.
      </p>
      <p>
        JavaScript, dinamik ve prototip tabanlı bir betik dilidir. JavaScript fonksiyonları bir
değişken olarak kullanabilmeye olanak sağlamaktadır. JavaScript EcmaScript ile
standartlaştırılmıştır[
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] ve örün tarayıcılarının tümü tarafından desteklenmektedir. Bu
özellik yüzünden JavaScript örün tabanlı bir CBS çözümünün tüm tarayıcılarla
uyumlu olması için tek çözüm olarak ortaya çıkmaktadır. Yukarıda açıklanan
nedenlerden dolayı JavaScript geliştirme dili olarak seçilmiştir.
      </p>
      <sec id="sec-1-1">
        <title>2.2 WebGL ve Cesium</title>
        <p>
          WebGL platformlar arası, lisans gerektirmeyen alt seviyede 3B (üç boyutlu) ve 2B
(iki boyutlu) grafik UPA dür. OpenGL, ES 2.0 standardı üzerine tanımlanmıştır.
WebGL, örün uygulamalarına tarayıcıya eklenti kurmadan 3B özelliği
kazandırılmasına olanak sağlar[
          <xref ref-type="bibr" rid="ref3">3</xref>
          ]. WebGL’ i örün tarayıcıların en yeni sürümleri
desteklemektedir ve kullanımı gittikçe yaygınlaşmaktadır.
        </p>
        <p>WebGL ’in grafik işlemciyi yoğun olarak kullanmasından dolayı, WebGL
uygulamalarının yüksek başarımlı çalışması için donanım hızlandırması
gerekmektedir. Bu nedenle paylaşımlı değil ayrı grafik kartı kullanımı daha uygun
olmaktadır.</p>
        <p>
          Yukarıda bahsedilen avantajlarına rağmen, WebGL ile geliştirme maliyetli ve
karmaşıktır. Assembly dili ile masaüstü yazılım geliştirme ile karşılaştırılabilir. Bu
nedenle WebGL üzerine CBS ile ilgili özellikleri gerçekleyen bir kütüphane arayışı
oluşmuş ve bu arayışın sonunda Cesium[
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] ortaya çıkmıştır.
        </p>
        <p>Cesium, 2B ve 3B haritalar yaratmak için JavaScript ve WebGL tabanlı, örün
tarayıcısında bir eklenti gerektirmeyen bir kütüphanedir. Açık kaynaklı ve Apache 2.0
lisansına sahip olduğu için kullanılması ücretsizdir.</p>
        <p>
          Cesium, Patrick Cozzi liderliğinde bir ekip tarafından geliştirilmektedir. Patrick
Cozzi’nin bilgisayar grafik ve Grafik İşleme Birimi (GPU) programlanması ve 3B
Küresel Görselleştirme hakkında çalışmaları vardır[
          <xref ref-type="bibr" rid="ref5">5</xref>
          ].
        </p>
      </sec>
      <sec id="sec-1-2">
        <title>2.3 TMAP-J UPA Benzetimi</title>
        <p>
          TMAP-J, Java dilinde OpenGL kullanılarak geliştirilmiş bir CBS altyapısıdır.
Havelsan ’da çeşitli projeler tarafından kullanılmaktadır. TMAP-W ’in tasarım
aşamasında TMAP-J ’in UPA seçilerek JavaScript’e taşınmasına karar verilmiştir. Bu
sayede TMAP-J ve Java kullanarak masaüstü uygulama geliştiren geliştiricilerin örün
uygulaması geliştirirken tanıdık oldukları UPA kullanmaları sağlanmış ve TMAP-J ve
TMAP-W ‘in aynı arayüzü değişik dillerde gerçekleyen ürünler olmaları sağlanmıştır.
Sonuç olarak geliştiriciler yeni bir UPA öğrenmek zorunda kalmadan Java ve
JavaScript ’de CBS uygulamaları geliştirebileceklerdir.
JavaScript ’in tip denetlemesi yapmaması ve nesneye yönelik programlama ile ilgili
sınıf, miras alma gibi özelliklerin henüz bulunmaması JavaScript geliştirmesi için bazı
araçlar ve yaklaşımlar kullanılarak nesneye yönelik programlamayı destekleyen
dillere (Örneğin Java, C#) yakınsatılması ihtiyacını doğurmaktadır. Bu yaklaşıma
kısaca ehlileştirilmiş JavaScript denmektedir [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ].
        </p>
      </sec>
      <sec id="sec-1-3">
        <title>3.1 JavaScript ile Nesneye Yönelik Programlama</title>
        <p>TMAP-W, EcmaScript standardının Haziran 2011’de yayınlanan 5.1 sürümü ile
uyumlu geliştirilmiştir. 2015’in ortasında yayınlanması planlanan sürüm 6, sınıfları ve
modülleri destekleyecektir. JavaScript dilinin desteklediği EcmaScript standardının
güncel sürümü olan 5.1, nesneye yönelik programlama özelliklerini
barındırmamaktadır.</p>
        <p>Nesneye yönelik programlama özelliklerinin JavaScript ’de kullanılması için açık
kaynak Google Closure kütüphanesi kullanılmıştır.</p>
        <p>
          Error! Reference source not found.’de örnek sınıf olarak çember nesnesi IShape
arayüzünden goog.inherits komutu ile türemektedir. Closure ile çoklu miras alma da
goog.mixin ile mümkün olmaktadır[
          <xref ref-type="bibr" rid="ref7">7</xref>
          ].
        </p>
        <p>Şekil 1 Çember Sınıfının Tanımlanması</p>
      </sec>
      <sec id="sec-1-4">
        <title>3.2 Gömülü Örnekler Yaklaşımı</title>
        <p>TMAP-W içinde her özelliğin nasıl kullanılacağına dair çalışan bir kod örneğinin
bulunduğu Gömülü Örnekler uygulaması bulunmaktadır. Bu sayfaya TMAP-W
geliştiricileri tarafından ekleme ve düzeltmeler yapılmakta, aynı sayfa test grubu
tarafından da geçerleme ve doğrulama faaliyetlerinde araç olarak kullanılmaktadır.
Aynı zamanda ürünü kullanan geliştiriciler tarafından da referans olarak
kullanılmaktadır. Alınan her sürümde gömülü örnekler sayfasına yeni örnekler
eklenebilmekte, var olan örnekler test grubu ve müşterilerden gelen geri beslemelere
göre genişletilmektedir. Error! Reference source not found.’de bir TMAP-W
sürümünün gömülü örnekler sayfası görülmektedir.</p>
        <p>Şekil 2 TMAP-W Gömülü Örnekler Sayfası</p>
      </sec>
      <sec id="sec-1-5">
        <title>3.3 JavaScript Birim Testleri</title>
        <p>
          TMAP-W içerisinde hesaplamaya dayalı jeodezik metotlar bulunmaktadır. Bu
metotların birim testi için bir çerçeveye ihtiyaç duyulmuştur. Bunun için JUnit
benzeri bir yapıya sahip QUnit[
          <xref ref-type="bibr" rid="ref8">8</xref>
          ] seçilmiştir. TMAP-W projesi içinde 300den fazla
birim testi her sürüm alımı öncesi çalıştırılmakta ve başarıyla geçtikleri teyit
edildikten sonra sürüm çıkarılmaktadır. Error! Reference source not found.’de
TMAP-W birim testleri sayfası bulunmaktadır. Sayfada her test grubundaki parantez
içindeki değerler sırasıyla hata alan test sayısını, geçen test sayısını ve toplam test
sayısını belirtmektedir.
Şekil 3 TMAP-W QUnit Birim Testleri
        </p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>4 İnşa Yaklaşımı</title>
      <p>TMAP-W geliştirimi 2 haftalık yinelemelerde geliştirilecek ihtiyaçların planlanması
ve hataların çözülmesi şeklinde olmaktadır. Her 2 haftalık yineleme sonunda bir
sürüm alınmaktadır. Geliştirme Planı’nda belirlenen sıklıklarda, resmi sürüm alınan
ara sürümler arasından seçilip test grubu tarafından geçerleme ve doğrulaması
yapılmaktadır.
Şekil 4 İnşa Günlüğü Detayı – JSLint Uyarıları
Geliştirici İlgili İş Öğesi ile
ilişkilendirdiği Kodu İade</p>
      <p>Eder</p>
      <p>TFS İnşaDenetleyicisi
TMAP-W İnşasını Tetikler</p>
      <p>TFS İnşaAjanı Uzak Sanal
Makineye SSH ilebağlanıp kod
ve betikleri TFS ’dan indiren
betiği çalıştırır</p>
      <p>güUnçzlüaağklıüşSıraS,nSikHnaolşpiaMleyüaaTrklaFüiSnnneılirendrşeia,Gianrjşuaanntına oİbnldışruaağnkuımneaBtiakklşeaastrlöeılrınüminr,ıeiBnkaşoaşpaüyrrıasülıaznnlmeırrıi
Şekil 5 TMAP-W İnşa Süreci</p>
      <sec id="sec-2-1">
        <title>4.1 JavaScript Projelerinde İnşa</title>
        <p>
          JavaScript projelerinde inşa aracı olarak açık kaynak Grunt[
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] aracının kullanımı
yaygındır. TMAP-W projesinde de Grunt aracı kullanılarak kodların birleştirilmesi,
hata kontrolü ve dokümantasyon üretimi yapılmaktadır. Error! Reference source not
found.’de TFS inşa günlüğüne JsLint[10] uyarıları tümleştirilmiş olarak gösterilmiştir.
JsLint aracı hem TGO (Tümleşik Geliştirme Ortamı) içinde hem de inşa sürecinde
kod denetleyici olarak kullanılmaktadır.
        </p>
      </sec>
      <sec id="sec-2-2">
        <title>4.2 JavaScript İnşalarının Team</title>
      </sec>
      <sec id="sec-2-3">
        <title>Tümleştirilmesi</title>
      </sec>
      <sec id="sec-2-4">
        <title>Foundation Server (TFS) İnşa Birimi ile</title>
        <p>Havelsan ’da Uygulama Yaşam Döngüsü Yönetimi aracı olarak Microsoft Team
Foundation Server sürüm 12 (TFS)[11] kullanılmaktadır. Bu aracın sürekli tümleştirme
ve inşa özellikleri de mevcuttur.</p>
        <p>TFS ’in JavaScript projelerinin inşası ile ilgili hazır bir çözümü bulunmamaktadır.
Ancak esnek bir özelleştirme altyapısı mevcuttur.</p>
        <p>Grunt inşa aracı, SSH hizmeti etkinleştirilmiş bir sanal makinede çalışmaktadır. Sanal
makinede JavaScript inşasını başlatacak betik dosyaları bulunmaktadır. TFS İnşa
Ajanı SSH vasıtasıyla uzaktan bu betik dosyalarını çalıştırmakta, inşa kayıt dosyası ve
inşa ürünleri de TFS inşa rehberlerine kopyalanmaktadır. Ayrıca betik dosyasının hata
döndürüp döndürmediğine göre inşanın başarılı olduğu veya hatalı olduğu TFS
tarafında kurulmaktadır. Şekil 5’de inşa süreci görülebilir.</p>
      </sec>
      <sec id="sec-2-5">
        <title>4.3 JsDoc ile Projenin Dokümantasyonunun Üretilmesi</title>
        <p>JsDoc[12], JavaScript projelerinin dokümantasyonunun otomatik olarak üretilmesi için
yaygın olarak kullanılan bir araçtır. Hazırlanan UPA ’nün dokümantasyonun
üretilmesi için JsDoc kullanılmıştır. İnşa sürecine tümleştirilen JsDoc üretimi
sayesinde, her inşa sonrası dokümantasyon yeniden üretilmekte ve böylece kod ve
dokümantasyonun tutarlı kalması sağlanmaktadır.</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>5 Sonuç</title>
      <p>Örün Tabanlı Coğrafi Bilgi Sistemi Uygulama Programlama Arayüzü Geliştirilmesi
kapsamında internet tarayıcılarında bir eklenti kurulumu gerektirmeden çalışan
TMAP-W ürününün geliştirilmesi hakkında tasarım kararları, ehlileştirilmiş
JavaScript yaklaşımı ve inşa yaklaşımı ile ilgili deneyimler aktarılmıştır.
TMAP-W ürününe yeni özellikler eklenmeye devam edilmekte ve Havelsan içinde
projelerin altyapı olarak kullanması da yönetim tarafından teşvik edilmektedir.
Kaynaklar</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>Java</given-names>
            <surname>Runtime Environment Perpetual</surname>
          </string-name>
          Vulnerability Machine http://www.fsecure.com/weblog/archives/00002285.html.
          <source>Görüntülenme Tarihi 17 Nisan</source>
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>ECMAScript</given-names>
            <surname>Language Specification</surname>
          </string-name>
          ,
          <source>Edition 5.1 Haziran</source>
          <year>2011</year>
          . http://www.ecmainternational.org/publications/files/ECMA-ST/Ecma-262.pdf.
          <source>Görüntülenme Tarihi 1 Nisan 2015</source>
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3. WebGL,
          <source>OpenGL ES 2</source>
          .
          <article-title>0 for the Web</article-title>
          . https://khronos.org/webgl.
          <source>Görüntülenme Tarihi 1 Nisan 2015</source>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Cesium WebGL Virtual Globe</surname>
            and
            <given-names>Map</given-names>
          </string-name>
          <string-name>
            <surname>Engine</surname>
          </string-name>
          . http://cesiumjs.org.
          <source>Görüntülenme Tarihi 1 Nisan 2015</source>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Cozzi</surname>
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ring</surname>
            <given-names>K.</given-names>
          </string-name>
          (
          <year>2011</year>
          ),
          <article-title>3D Engine Design for Virtual Globes, 1st Edition</article-title>
          . CRC Press, Boca Raton.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Wei</surname>
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ryder</surname>
            <given-names>G. B.</given-names>
          </string-name>
          (
          <year>2014</year>
          )
          <article-title>Taming the Dynamic behaviour of JavaScript</article-title>
          ,
          <source>SPLASH'14 Proceedings of the 2014 ACM SIGPLAN conference on Systems, Programming, and Applications: Software for Humanity.</source>
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Bolin</surname>
            <given-names>M.</given-names>
          </string-name>
          (
          <year>2010</year>
          ),
          <source>Closure The Definitive Guide, 1st Edition. O'Reilly</source>
          , Beijing.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8. QUnit https://qunitjs.com.
          <source>Görüntülenme Tarihi 17 Nisan</source>
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9. Grunt http://www.gruntjs.com.
          <source>Görüntülenme Tarihi 17 Nisan</source>
          <year>2015</year>
          10.JSLint http://www.jslint.com.
          <source>Görüntülenme Tarihi 17 Nisan</source>
          <year>2015</year>
          11.Team Foundation Server http://www.visualstudio.com/tr-tr/products/tfs-overviewvs.
          <source>aspx 12</source>
          .JSDoc https://github.com/jsdoc3/jsdoc.
          <source>Görüntülenme Tarihi 17 Nisan</source>
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>