Document Object Model (DOM) Nedir?

18 Kas

Document Object Model (DOM), hem HTML hem de XML için bir uygulama arabirimidir(API). DOM Türkçe’de Belge Nesne Modeli olarak adlandırılabilir.

DOM tüm sayfayı, düğüm hiyerarşisinden oluşan bir belge olarak oluşturur. Bir HTML veya XML sayfasının her bölümü bir düğümden türetilmiştir. Bu düğümlerin her biri ayrı birer nesnedir.

<html>
   <head>
      <title>E-Ticaret</title>
   </head>
   <body>
      <h1>Kategoriler</h1>
   </body>
</html>

Bu kod, DOM kullanılarak bir düğüm hiyerarşisi olarak aşağıdaki şekilde çizilebilir. Bir web sayfası yüklendiğinde, internet tarayıcısı(Chrome, IE, Mozilla, vs) sayfanın DOM modelini oluşturur.

DOM yapısı, bir belgeyi temsil eden ağaç yapısını oluşturarak, geliştiricilere belgenin yapısı üzerinde kolay bir denetim yapabilmelerini sağlar. Hangi nesnenin hangi nesneye bağlı olduğu kolay bir şekilde öğrenilebilir. Ağaçtaki düğümler DOM API sayesinde kaldırılabilir veya ağaca yeni bir düğüm eklenebilir.

DOM ve Javascript İlişkisi

DOM JavaScript’e özgü değildir ve aslında pek çok başka dilde uygulanabildiğidir. Ancak Web tarayıcıları için DOM, ECMAScript kullanılarak uygulanmıştır ve artık JavaScript dilinin büyük bir bölümünü oluşturmaktadır. Javascript DOM ile dinamik HTML oluşturmak için daha etkili işlemler yapabilmektedir.

  • Sayfadaki tüm HTML öğelerini ve HTML attribute değerlerini değiştirebilir.
  • Sayfadaki tüm CSS stillerini değiştirebilir.
  • Mevcut HTML öğelerini ve özniteliklerini kaldırabilir.
  • Yeni HTML öğeleri ve öznitelikleri ekleyebilir.
  • Sayfadaki mevcut tüm HTML olaylarına yanıt verebilir.
  • Sayfada yeni HTML elementi ekleyebilir.

DOM Neden Gerekli Hale Gelmiştir?

Web uygulamalarının yaygınlaşmaya başladığı yıllarda Internet Explorer 4.0 ve Netscape Navigator 4.0 ile birlikte, geliştiriciler ilk kez bir Web sayfasının görünümünü ve içeriğini sayfayı yeniden yüklemeden değiştirebilir hale gelmişlerdi. DHTML (Dynamic HTML) doğmuştur. Bu olay web teknolojisinde adeta yeni bir sayfa açmıştı. Fakat yeni bir sorunu da beraberinde getiriyordu. Microsoft ve Netscape gibi ticari firmalar DHTML’yi geliştirme sürecinde kendi yollarından gittiler. Böylece Web geliştiricilerinin herhangi bir Web tarayıcısı tarafından çalıştırılabilen tek bir HTML sayfası yazabildikleri dönemi sona erdirdiler. Buradaki tehlike, Microsoft ve Netscape firmalarının önüne geçilmediği taktirde Web’in iki gruba bölünecek olmasıydı.

Web’in platform bağımsız doğasını korumak için bir adım atıldı. Web standartları oluşturmakla görevli olan World Wide Web Consortium (W3C), DOM üzerinde çalışmaları başlatmıştır. DOM W3C trafından üç bölümde oluşturulmuştur.

  • DOM Core
  • DOM XML
  • DOM HML

DOM zamana bağlı olarak seviyeler halinde gelişim göstermiştir.

DOM Level 1

1998 yılında W3C tarafından tavsiye edilmiştir tek amacı belgenin yapısını oluşturmaktır. İki modülden oluşur.

  • DOM Core: Bir belgenin herhangi bir bölümüne kolayca erişmeyi ve belgede düzenleme yapmayı sağlar.
  • DOM HTML: DOM Core genişletilerek HTML’e özgü nesneler ve yöntemler eklenmiş halidir.

DOM Level 2

Bu seviyede DOM’a fare ve kullanıcı arabirimi olayları(events) ve stil sayfaları yanında yeni modüller eklendi.

  • DOM Views: Belgenin CSS Stil’den önce ve CSS Stil’den sonraki görünümlerini izlemek için arayüzleri tanımlar.
  • DOM Events: Olaylar için arayüzleri tanımlar.
  • DOM Style: CSS tabanlı stilleri yönetmek için arayüzleri tanımlar.
  • DOM Traversal and Range – bir belge ağacında gezinmek ve düzenleme yapmak için arayüzleri tanımlar.

DOM Level 3

Bu seviyede, belgeleri tek tip bir şekilde yükleme ve kaydetme yöntemlerinin yanı sıra bir belgeyi doğrulama yöntemleri DOM’a eklenmiştir.

Kaynaklar
  • Professional JavaScript for Web Developers 3rd Edition, Nicholas C. Zakas
  • https://www.w3schools.com/js/js_htmldom.asp

PowerShell Robocopy ile hızlı dosya kopyalama

16 Kas

Büyük boyutlu dosyaların transferinin copy/paste yöntemi ile yapılması mümkün olmayabiliyor. Benim başıma gelen gerçek bir sorun, bir uydu fotoğrafının tile denen 256×256 pixel boyutunda parçalara ayırdığında oluşan devasa (yaklaşık 250GB) boyutlu verinin sunuculara aktarılmasıydı. Bu işlem sonucunda oluşan verinin ağdaki başka bir sunucuya taşınması öyle kopyala yapıştır gibi klasik yöntemlere olacak gibi değildi.

Windows ortamında robocopy‘nin gücü kullanılarak PowerShell veya Console üzerinden bu gibi büyük verilerin taşınması kolay bir şekilde yapılabilmektedir.

Robocopy ile dosyaların bir yerden bir yere taşınması için temel yazım biçimi şu şekildedir:

robocopy <kaynak> <hedef> [<dosya>[ ...]] [<seçenekler>]

Örneğin, “C:\tiles” dizinindeki tüm dosyalar “D:\tiles” dizinine taşımak için aşağıdaki komut kullanılır. Burada alt dizinler ve dosyalar dikkate alınmaz, ancak tüm sistem dosyaları ve gizli dosyalar taşınır.

robocopy C:\tiles D:\\tiles

Eğer, tüm alt dizinler ve dosyalar da taşınacaksa komuta aşağıdaki gibi “/S” parametresi eklenir. Ancak bu parametre boş dizinleri dikkate almaz.

robocopy C:\tiles D:\\tiles /S

Eğer boş dizinleri de taşımak isterseniz komuta “/E” parametresi eklenmelidir.

robocopy C:\tiles D:\\tiles /E

Eğer ağdaki başka bir bilgisayara taşıma işlemi yapılacaksa, ilgili bilgisayarda bir dizinin paylaşıma açılması gerekmektedir.

Robocopy için bir çok kullanışlı parametreye buradan ulaşabilirsiniz.

PowerShell ile dosyaları yeniden adlandırma

18 Eki

PowerShell Nedir?

PowerShell, Windows işletim sistemine 2006 yılında eklenen, bir komut satırı kabuğu(shell) ve kendine özgü bir betik dilinden (script language) oluşan bir yönetim aracıdır.

PowerShell ile dosyalar nasıl yeniden adlandırılır?

PowerShell aracı, grafik ara yüzü olmayan bir komut satırı aracı olması sebebiyle bütün işlemleri komutlar üzerinden yürütür.

PowerShell ile dosyaları tek tek veya toplu bir şekilde yeniden adlandırmak çok kolaydır. Dosyaları yeniden adlandırmak öncelikle komut satırından dosyaların bulunduğu dizine geçilir.

Yukarıda listelenen dosyaların hepsinin isimlerinde “foo.com” şeklinde bir web sitesine ait gereksiz bir bilgi bulunmaktadır. Bu gereksiz bilgiyi kaldırarak dosyaları temiz bir adlandırmaya kavuşturmak için aşağıdaki komutu kullanabiliriz.

dir *.txt | rename-item -newname {$_.name -replace " foo.com", ""}

Yukarıdaki komut, *.txt dosyalarını seçerek bu dosyaların adlarında bulunan foo.com metnini ve önündeki bir adet boşluk karakterini kaldırır.

Bu şekilde, dosyalarımıza temiz bir şekilde yeniden adlandırılmış olur. Dosyaların uzantılarını da benzer şekilde değiştirmek mümkündür. Doysa sayılarının çok fazla olduğu durumlarda son derece etkili bir yöntem olarak kullanılabilir.

QGIS Provider does not support Hatası

28 Haz

QGIS ile bir tabloda UPDATE veya DELETE gibi işlemler gerçekleştirilirken aşağıdaki gibi hatalar ile karşılaşılabilmektedir.

Data provider does not support deleting features. (Veri sağlayıcı objelerin silinmesini desteklemiyor)

veya

Data provider does not support updating features. (Veri sağlayıcı objelerin silinmesini desteklemiyor)

Bu hatanın sebebi, veri tabanında ilgili feature (tablo) üzerinde bir Primaty Key (PK) belirlenmemiş olmasıdır. Feature üzerinde bir PK tanımlandığındasorun düzelecektir.

Linux Dosya Sistemi (Filesystem)

9 Haz

Linux dosya türlerini tanıdıktan sonra anlaşılması gereken diğer konu dosya sistemidir. Linux veya Unix işletim sistemlerinde tek bir kök dizin (root directory) bulunur. Windows işletim sisteminde partition sayısına bağlı olarak C, D, E gibi birden fazla kök dizin bulunabilmektedir. Ancak Linux ve Unix işletim sisteminde tüm dosya ve dizinler tek bir kök dizin altında hiyerarşik olarak bulunurlar. Kök dizin “/” karakteri ile temsil edilmektedir. Sürücü bölümleri, kök dizinin altındaki dizinlere monte edilir.

  • /
    • /bin
    • /boot
    • /dev
    • /home
    • /lib
    • /media
    • /mnt
    • /opt
    • /proc
    • /proc
    • /root
    • /sbin
    • /srv
    • /sys
    • /tmp
    • /usr
    • /var
    • /lib64

/bin (Temel kullanıcı komutları)

Linux işletim sisteminin bir parçası olan ve tüm kullanıcılar tarafından yürütülebilir programları içerir. Cat, cp, ls, more ve tar gibi birçok Linux komutu bu dizinde bulunur.

/boot (Sabit önyükleme dosyaları)

Kernel ve bootloader dosyalarını içerir.

/dev (Aygıt dosyaları)

Aygıt dosyalarını içerir.

/etc (Konfigürasyon noktaları)

İşletim sistemine özel konfigürasyon dosyalarını içerir.

/home (Kullanıcı ana dizinleri)

Kullanıcılara ait ana dizindir. Örneğin kullanıcı adı “bayram” olan bir kullanıcı için sistemde /home/bayram şeklinde bir dizin mevcuttur.

/lib (Temel paylaşılan kütüphaneler)

32 bit sistemler için kernel modülleri ve paylaşılan program kütüphanelerini içerir.

/media (Takılıp çıkarılabilir medya)

Bilgisayara takılıp çıkarılabilir medya aygıtlarının bağlandığı alt dizinleri içerir. Örneğin, Linux sisteminize bir CD yerleştirdiğinizde, /media dizininde otomatik olarak bir dizin oluşturulur ve bu dizinin üzerinden CD’nin içeriğine erişebilirsiniz.

/mnt (Geçici bağlanma noktaları)

Boş bir dizindir. Geçici olarak monte (mount) edilen dosya sistemleri için kullanılan bir dizindir. Montaj, bir dosya sistemini sistem tarafından kullanılabilir hale getirme işlemidir. Standart bağlama noktaları /mnt/cdrom ve /mnt/floppy şeklindedir.

/opt (İsteğe bağlı paketler)

İsteğe bağlı yazılım paketleri için alt dizinler içerir. Genellikle derlediğiniz yazılımların bulunduğu yerdir. Uygulamalar /opt/bin dizininde ve /opt/lib dizinindeki kitaplıklarda bulunur.

/proc (Kernel ve işlem dosyaları)

Sistem durumu ve işlemlerin durumlarını içerir. /dev gibi sanal bir dizindir. Bilgisayarınız hakkında, CPU’nuz ve Linux sisteminizin çalıştırdığı çekirdek gibi bilgiler içerir.

/root (Kök giriş dizini)

Bu dizin, superuser olan ve administrator olarak bilinen root kullanıcısına ait ana dizindir. root kullanıcısının dosyaları /home yerine burada bulunur.

/sbin (Sistem yönetim dosyaları)

Sistem binary komutlarını içerir. Superuser kullanıcısının çalıştırabileceyi uygulamaları içerir. Bu uygulamaları sudo komutu ile kullanabilirsiniz.

/srv (Servis verisi)

Sistem tarafından sunulan hizmetler (HTTP, FTP vb.) İçin veri içerir. Linux kutunuzdan bir web sunucusu çalıştırıyorsanız, siteleriniz için HTML dosyalarınız /srv/http (veya /srv/www) içine gider. Bir FTP sunucusu çalıştırıyorsanız, dosyalarınız /srv/ftp‘ye gider.

/sys

Linux çekirdeği tarafından görüldüğü gibi, aygıtlar hakkında bilgi içeren özel bir dizin.

/tmp (Geçici dosyalar)

Uygulamalar geçici dosyaları /tmp dizininde depolar. Bu dosyalar genellikle sisteminiz her yeniden başlatıldığında silinir ve tmpwatch gibi yardımcı programlar tarafından herhangi bir zamanda silinebilir.

/usr (Kullanıcı dosyaları ve salt okunur Veriler)

Sistem tarafından kullanılan uygulamaların ve dosyaların aksine, kullanıcılar tarafından kullanılan uygulamaları ve dosyaları içerir. Örneğin, temel olmayan uygulamalar /bin dizini yerine /usr/bin dizininde bulunur ve temel olmayan sistem yönetim ikili dosyaları /sbin dizini yerine /usr/sbin dizininde bulunur.

/var (Değişken veri dosyaları)

Zaman, sayı ve boyut olarak zamanla değişme eğilimi olan log, mail dizinleri, yazdırma kuyruğu biriktirme gibi çeşitli sistem dosyalarını içerir.

/lib64

64 bit sistemler için kernel modülleri ve paylaşılan program kütüphanelerini içerir.

Linux Dosya Türleri

8 Haz

Linux ve Unix öğrenirken bilinmesi gereken önemli konulardan biri dosya sistemidir.

Anlamamız gereken ilk şey, Linux ve Unix’in genel olarak, donanım birimleri de dahil her şeye bir dosya olarak davranacak şekilde tasarlanmış olmasıdır. Linux işletim sistemi çalışırken, gerekli olan dosyayı açar okur veya yazar ardından da kapatır. Her şeye dosya olarak bakıldığından dolayı dosya sistemine ait standartlar oluşturulmuştur.

Regular (Normal)

Normal dosyalar genel olarak html, text, word veya çalıştırılabilir dosyalardır.

Directory (Dizin)

Linux işletim sisteminde dizin, diğer dosya türlerini tutmak veya işaret etmek için özel olarak tasarlanmış bir dosya türüdür.

Link (Bağlantı)

Linux / UNIX sistemlerinde iki tür link (bağlantı) vardır.

  • Soft/Symbolic Link: Bir dosya veya dizinin dolaylı bir göstergesidir. Sabit bağlantının aksine, sembolik bağlantı farklı bir dosya sistemindeki veya bölümdeki bir dosyayı veya dizini işaret edebilir. Windows işletim sistemindeki bir kısayol gibidir.
  • Hard Link: Sabit bir bağlantıyı mevcut bir dosya için ek bir ad olarak düşünebilirsiniz. Sabit bağlantılar iki veya daha fazla dosya adını aynı inode ile ilişkilendirir. Çok fazla tercih edilmez.

Special (Aygıtlara özel)

  • Character File: Tek karakterlik girişi kabul edereler. Klavye Giriş/Çıkış işlemleri, yazıcı, teyp sürücüsü veya terminal gibi gerçek bir fiziksel aygıtı temsil etmek için kullanılır.
  • Block File: Sabit disk gibi depolama aygıtlarını gösterir.
  • Pipe File: Uygulamalar arasında bilgi göndermeye izin verir. Bir uygulama, başka bir uygulamaya bilgi gönderecekse pipe file kullanır.
  • Socket File: Pipe file gibi çalışır. Ancak bilgi alışverişinin ağ ortamında yapıldığında devreye girer.

Temel Linux Bileşenleri

7 Haz

Linux işletim sistemin nasıl çalıştığını anlamak için, Linux temel bileşenlerini bilmek gerekmektedir.

Kernel (Çekirdek)

Bir işletim sisteminin çekirdeği ve en temel birimidir. Her işletim sisteminde sadece bir tane Kernel bulunur. Ağırlıklı olarak C programlama dili ile geliştirilmiş programlardan meydana gelmiştir. Kernel, bilgisayar donanımı ile doğrudan iletişim kurar. Kernel’in işletim sistemindeki bazı temel görevleri:

  • Kullanıcının yetkili bir kullanıcı olup olmadığını kontrol etmek.
  • Çalıştırılan programları izlemek ve her programa belirli bir zaman ayırmak..
  • Sistemdeki dosyalar için depolama alanı atamak.
  • Shell programlarını çalıştırmak.
  • Bilgisayarlar ve terminaller arasında bilgi aktarımı yapmak.

Shell (Kabuk)

Linux işletim sistemi, komutları klavyeden bilgisayara aktarmak için shell bileşenini kullanır. Shell de C programlama dili ile yazılmış bir programdır. Kullanıcı programları ve kernel arasında tercüman görevi görür. Kullanıcı komutlarını eyleme dönüştürür. Shell, komutları alan ve uygun programı yürüten ya da çekirdeğin anladığı yönergelere çeviren bir programdır.

Shell kullanıcılarla etkileşime girerken, kernel makinenin donanımıyla etkileşime girer.

Örneğin shell, klavyeden girdiğimiz “ls” komutunu kernel tarafından anlaşılabilecek bir formata dönüştürür.

Linux’ta varsayılan shell bash’tir.

User Programs (Kullanıcı Programları)

Linux işletim sisteminde bir takım araçlar vardır. Bu araçlar, işletim sisteminin kullanımını kolaylaştırmak amacıyla üçüncü şahıslar veya firmalar tarafından yazılmış kullanıcı programlarıdır. Bu araçlar, programlama, iş uygulamaları ve Office, vi gibi kelime işleme uygulamaları şeklinde gruplandırılabilir.

Devrim Uzay Araçları

6 Haz

SpaceX firması, Crew Dragon isimli insanlı uzay aracını uzaya gönderiyordu. Bu olay ile birlikte tarihte ilk kez, özel bir şirket uzaya insan göndermiş oluyordu. Uçuş günü etrafta ne görkemli bir kalabalık, ne de kurdele kesim töreni vardı. Bu sadeliğin sebebi, bir anlayış farklılığı mıdır yoksa yaşanacak bir olumsuz durum karşısında karizmayı çizdirmemek midir bilmiyoruz. Ama başarı ortada.

Bu olay hiç şüphesiz, yeni bir çağın başlangıcıydı. Uzay çağı. Uzaya yolculukların başlayabileceği sinyali veriliyordu. ABD başkanı da bu daha başlangıç diyordu. Artık uzaya yolculuklar başlayacağına göre, uzay araçları yeniden kullanılabilir bir yapıya kavuşmuş oluyordu.

Uzayda dolaşımı sağlayan kapsül (Crew Dragon):

Kapsülü uzaya fırlatma roketi (Falcon 9):

Kısaca, uzay mühendisliğinde yeni bir çığır açılıyordu.

SpaceX adında özel bir şirkete ait bu başarı, ABD devletinin Obama döneminde uzay yatırımlarını azaltarak, NASA’nın gücünü sektörlere dağıtmasıyla başladı. 2002 yılında kurulan bir şirket, 18 yılda adeta bir devrim yaptı. Dünyada bir çok yerde silah sanayisinin devletler elinden çıkmasından sonra uzay sanayisinin de özel sektöre geçişini bizlere göstermiş oldu.

Bu devrim ile birlikte, uzay turizminin kapıları açılacak ve olayın ticari tarafı gelişmeye başlayacak. Gezegenler arası dolaşım ve uzayda yaşam başlayacak. Uzayda keşfedilen yeni madenlerle birlikte yeni teknolojik gelişmeler yaşanacak.

Yazımı bitirirken, uzay teknolojilerinde ülke olarak bizlerin de başarılı olacağı yıllar diliyorum. Bu başarının, gündemimizi, anlayışımızı ve bakış açımızı değiştirmekle mümkün olacağına inanıyorum.

Tekrar görüşmek dileğiyle.

PostGIS GeoJSON Query

29 May

PostGIS ile SQL sorguları kullanarak GeoJSON sonuçları üretmek mümkündür. Bu işlem için gerekli olan PostgreSQL fonksiyonları:

  • jsonb_build_object()
  • jsonb_agg()
  • jsonb_build_object()
  • ST_AsGeoJSON()
  • to_jsonb

SQL sorgusu:

SELECT jsonb_build_object(
    'type',     'FeatureCollection',
    'features', jsonb_agg(features.feature)
)
FROM (
    SELECT jsonb_build_object(
      'type',       'Feature',
      'id',         gis_id,
      'geometry',   ST_AsGeoJSON(shape)::jsonb,
      'properties', to_jsonb(inputs) - 'shape' - 'gdb_geomattr_data'
      ) AS feature
    FROM (
          SELECT 
               * 
          FROM 
              sde.icmesuyu_hatlari 
          WHERE 
              objectid=121710
    ) inputs
) features;

Sorgu sonucu:

{
  "type": "FeatureCollection",
  "features": [
    {
      "id": "a71bca31-22d1-11e8-8590-0050568bf4f1",
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [
          458791.489,
          4520951.706,
          0
        ]
      },
      "properties": {
        "layer": "N_VANA_SİSTEM",
        "cbs_id": "811bca31-22d1-11e8-8590-0050568bf4f1",
        "aciklama": "AKTİF",
        "objectid": 121710,
        "zemin_kot": 43.57
      }
    }
  ]
}