MapReduce Nedir?

13 Eylül 2011 Salı 04:03 Gönderen Merve Yüzbaşıoğlu 1 yorum
Günümüzün en popüler arama motoru elbette Google fakat bu popülerlik Google bu performansı nasıl sağlıyor sorusunuda beraberinde getiriyor. Herkes internetteki bilgileri depolayabilir ama bunu iyi bi performansta yapabilmek, elindeki bilgisayarlara iş yükünü doğru şekilde dağıtabilmekten geçiyor. Bilgisayarlar arasındaki iş yükünü dağıtma işini Google kendi geliştirdiği MapReduce denilen bir yazılım platformu ile gerçekleştiriyor.

MapReduce; büyük veri setleri ile yapılacak işlemlerin birden fazla iş birimine dağıtılmasını sağlayan yöntemdir. Burada büyük veri setleri derken birkaç bilgisayarın bile işleyemeyeceği kadar verinin topladığı setlerden bahsediyorum. Bu setler üzerindeki işlemler serisi çeşitli birimlere dağıtılıyor ve sonra çıktıları birleştirilip sonuç üretiliyor. İki katmandan oluşuyor Map, Reduce.
Map katmanı; İsim-değer çiftlerini girdi olarak alır, yapılacak işlemi gerçekleştirir. Ürettiği sonuç listesini ise girdideki isim ile birlikte çıktı olarak verir.
Reduce katmanı: Map katmanındaki sonuç listelerini toplar ve tek sonuca indirgeme işlemini yapar. Birde fazla iş birimi map işiyle uğraşırken, bir sonraki karman sonuçları toplayıp tek sonuç haline getirir.

Bu sistemin performanslı olması dışındaki bir diğer getirisi ise iş birimlerinden herhangi biri arızalandığında diğerleri çalışmaya devam eder ve arızalanan iş birimindeki görev başka bir iş birimine devredilir. MapReduce kavramını araştırıken Hadoop ismini epeyce gördüm ve bu kavramı anlayabilmek içinde araştırılabilir.

Hadoop Nedir?

Hadoop, google dosya sistemi teknolojisi olan MapReduce algoritmasinı birçok bilgisayara dağıtarak uygulamamızı sağlayan, Java ile yazılmış Açık kaynaklı bir yazılım. Hadoop yatay olarak ölçeklenebilen bir teknoloji bu sebeple kümedeki her makina kendi verisine sahip.

Hadoop'un kullandığı MapReduce tekniğini daha iyi anlamak için karşılaştığım şu örneği verebilirim;

Elimizde büyük bir dosyanın ve bu dosyanın her satırında bir mevye ismi ve yanlarındada o meyve satın alındığında ne kadar para ödendiği yazsın. Amacımız her meyve için toplam ne kadar para harcandığını bulmak. (Aşağıda küçük bir dosyadan örnek veriyorum ama bunun tek tek bakılamayacak kadar büyük bir veri olduğunu düşünelim..)

armut 10
portakal 3
incir 9
armut 9
armut 10
incir 3
mandalina 2
incir 29

Burada Anahtar değer meyve isimleri olacak ve diyelim ki Hadoop kümemizde iki iş birimimiz var. Üstteki dosyayı Hadoop'a verdik ve Hadoop bize bu dosyayı iki birime dağıtacaktır. Anahtar değerine bakmadan dağıtacak ve diyelim ki tam ortadan ikiye bölerek dağıttı.

armut 10
portakal 3
incir 9
armut 9
___________
armut 10
incir 3
mandalina 2
incir 29

Her bölüm kendi eşleme(map) işlemini yaparken benzer anahtar değerlerini aynı toplama yazacak.
Bölüm-1: armut=19, portakal=3, incir=9
Bölüm-2: armut=10, incir=32, mandalina=2
Her bölümün kendi işlemi sona erdikten sonra ingirgeme(reduce) işlemi yapılıyor ve her bölümdeki anahtarlar birde kendi aralarında toplanıyor. Bunun sonucunda;
Armut=29, incir=41, portakal=3, mandalina=2 Bu en son sonuç oluyor.

Hadoop kullanılarak yapılmış birkaç işe bakarsak;
  • Facebook Hadoop kullanarak kullancı davranışlarının analizini yapmakta ve sosyal reklamların etkisini ölçmektedir.
  • New York Times bilgi işlem ekibi Hadoop kullanrak 150 yıllık arşivlerindeki 11 milyon makaleyi dijitalleştirmiş ve aranabilir hale getirmiş.
İşin güzel yanı çok fazla zaman alabilecek işlemlerin dağtılarak yüksek performansta, kısa sürede yapılıyor olabilmesi:)

Kaynaklar

UTF-8 (Unicode Translate Format-8)

12 Eylül 2011 Pazartesi 06:56 Gönderen Merve Yüzbaşıoğlu 1 yorum
UTF-8 nedir sorusuna cevap vermeden önce Unix tarzı sistemlerde UTF8 kullanılmasının sebebinden başlamak istiyorum. UCS(Universal Character Set) ve Unicode, karakterlere karşılık integer sayıların atandığı kod tablolarının ilkiydi. Karakter dizilerinin ve bunların integer değerlerinin, byte'larla temsil edilmesiyle ilgili birçok alternatif var ve unicode metinlerin 2 yada 4 bytelık depolanması en bilinen kodlamalardan(UCS-2 ve UCS-4). Unix altında UCS-2 (yada UCS-4) kullanımı ciddi sorunlara yol açıyor. Unix araçların çoğu ASCII dosyalarını bekler ve önemli değişiklikler yapılmaksızın karakter olarak 16 bit kelimeleri okuyamaz. Bu gibi nedenlerden dolayı UCS-2 dosya isimleri, metin dosyaları, çevre değişkenleri vb.. yerlerde uygun bir kodlama değildir.

ISO 10646-1:2000 'de tanımlanan UTF-8 kodlamasında bu problemler yoktur. Açıkcası Unix tarzı işletim sistemleri altında Unicode kullanılmasını sağlamak için kullanılmıştır.
UTF-8'in Özellikleri

  • U+0000 dan U+007F (ASCII) USC karakterleri basi olarak 0x00 dan 0x7F olarak kodlanır. Bunun anlamı ise, 7 bit ASCII karakterleri içeren string ve dosyalar ASCII ve UTF-8'in her ikisinde de aynı kodlamaya sahiptir.
  • Bigendian UCS-4 byte stringlerinin sıralaması korunur.
  • 0xFE ve 0xFF byteları UTF-8 kodlamasında asla kullanılmaz.
  • ASCII olmayan bir karakteri temsil eden çokbyte'lı bir serinin ilk byte'ı daima 0xC0-0xFD aralığındadır ve bu karakter için takip eden kaç byte'ın olduğunu gösterir. Çokbyte'lı bir serideki tüm ilave bytelar ise 0x80-0xBF aralığındadır. Bu senkronizasyon kolaylığı sağlar ve eksik byte olmasına karşın sağlam ve durum bilgisiz kodlama sağlar.
  • UTF-8 ile kodlanmış karakterler teorik olarak 6 byte uzunluğunda olabilir, ancak 16-bit BMP karakterleri sadece 3 byte uzunluğundadır.
Aşağıdaki byte dizisi bir karakteri temsil etmek için kullanılır. Kullanılan dizi, karakterin Unicode sayıına göre değişir.

U-00000000 – U-0000007F:0xxxxxxx
U-00000080 – U-000007FF:110xxxxx 10xxxxxx
U-00000800 – U-0000FFFF:1110xxxx 10xxxxxx 10xxxxxx
U-00010000 – U-001FFFFF:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 – U-03FFFFFF:111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 – U-7FFFFFFF:1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx


xxx ile yazılan kısımlar, karakter kod sayılarının ikili gösterimindeki bitlerle doldurulur. En sağdaki x bit, en az anlamlı bittir.

Örnek: Unicode karakteri U+00A9 = 1010 1001 bunu UTF-8 'e kodladığımızda;

11000010 10101001=0xC2 0xA9 olarak kodlanıyor.

Python programlama dilinde "şarkıcı" kelimesini utf-8 formatına dönüştürmek için;

>>> s="şarkıcı"
>>> u=unicode(s,"utf-8")
>>> utf8=u.encode("utf-8")
>>> utf8
'\xc5\x9fark\xc4\xb1c\xc4\xb1'

örneğin burada "ş" karakterinin utf-8 kodlaması: \xc5 \x9f şeklinde gösteriliyor.
Buradaki "şarkıcı" kelimesinin uzunluğuna baktığımızda ise

>>> s.__len__()
10

yanıtını alırız. Buradanda anlayacağımız gibi ş, ı karakterleri unicode da 2 bytelık karakter seti olarak ifade ediliyor ve ilk baktığımızda uzunluğunun 7 olduğunu düşündüğümüz kelimenin uzunluğu 10 oluyor.

Sonuç olarak UTF-8 Unicode karakterlerini 1-6 byte uzunluğunda diziler olarak kodluyor. ASCII'deki 0-127 arasındaki karakterler UTF-8 de kendi kodları ile kullanılıyor, diğerleri ise byte dizileri haline gelir. UTF kullanılarak 1 milyondan fazla karakter kodlanabiliyormuş:)

KAYNAK:



Enlightenment'dan ekran görüntüleri:)

10 Mayıs 2011 Salı 02:51 Gönderen Merve Yüzbaşıoğlu 3 yorum
Daha önce de enlightenment modülleriyle ilgili ekran görüntülerini paylaşmış hatta sizinde nasıl kullanabileceğinizi yazmıştım. O zamandan bu zamana enlightenmentın bir çok sorunu giderildi ve çok yakında çıkabilecek yeni isolarda sizde bunu görebilirsiniz. Henüz bir iso çıkmamışken süslediğim e17'den bir kaç ekran görüntüsü daha koyalım dedim. İlk açtığınızda bu şekilde bulamıcaksınız ancak kişisel Masaüstü'nüzü oluşturmak e17 araçlarıyla oldukça kolay:)








Pardus Geliştiricisi Olma Yolunda

9 Mayıs 2011 Pazartesi 13:25 Gönderen Merve Yüzbaşıoğlu 0 yorum
Henüz bir geliştirici olamasam da bu meşakatli ama zevkli yolculukta neler yaptığımdan bahsedeceğim. Projemiz başladıktan sonra, Necdet hoca: "Haydi hepiniz geliştirici başvurusu yapın ve kısa sürede burada çokça geliştirici olsun" deyince, bizde bu yolculuğa ilk adımımızı attık.

Geliştirici başvurusuyla ilgili hata kaydımı açtıktan sonra gönderilen 12 adet şirin mi şirin sorularımızı 10 gün içinde cevaplayıp gönderdim. Cevaplarımın kontrol edilmesinden sonra Junior job olarak işaretli bir hata çözerek bu yolda ilerlemem gerektiği söylendi ve ardından mentor olarak Serdar Dalgıç atandı. Bende tez zamanda hatalar arasından gözüme kestirdiğim bir paketi alıp uğraşmaya başladım. Yaklaşık 2 yıldır Necdet hocanın yanında çalıştığımdan dolayı elbette daha önceden paket yapmışlığım vardı:) Geliştirici başvurusu için yaptığım ilk paket guiqwt adındaki programdı. Bu paketin bağımlılığı olan guidata ve guidata'nın bağımlılığı olan h5py adında iki programı daha paketlemek zorunda kaldım.[1][2][3] Bu paketler review sürecindeyken ben junior job' ların arasından pepper [4] adlı programı seçtim ve bunu da paketledim. "Unused direct dependecy" ile ilgili sorunu da bugün çözdüm ve umarım kısa sürede bu pakette depoya girer. Bir hafta sonu eğlencesi olarak Pan [5] adlı programı da paketledim ve henüz Mentorumun gözden geçirmesini beklemekteyim.

Kalan işlerimde depoya girdikten sonra bakalım neler olacak:) Büyük bir hevesle "geliştirici oldun" denilmesini bekliyorum:) Geliştirici olduğum zaman tekrar yazacağım ve bu nedenle Teşekkür kısmını o güne saklamakta fayda var diye düşünüyorum:) Ayrıca taze geliştiricimiz Alper'i de tebrik ediyorum. Onun yolculuğunu merak ediyorsanız Alper'in blogunu ziyaret edebilirsiniz.

2. Geleneksel Çomü-Pardus Atölye Çalışması:)

9 Nisan 2011 Cumartesi 14:02 Gönderen Merve Yüzbaşıoğlu 0 yorum
Biraz Necdet Hocamızın dürtmesi biraz da geçtiğimiz Perşembe günü 2 günlük atölye Çalışması yapmak için Çanakkale'ye gelen Pardus ekibi(Gökmen Göksel, Onur Küçük, H.İbrahim Güngör, Mete Bilgin, Metin Akdere) ve Süpriz kişi(Burak Çalışkan) ile geçen çok verimli çalışmalarımızdan bahsetmek için bir blog yazısı şart oldu:)(Not: Bu cümlede çok uzun oldu.)

Peki Neler oldu ?

Öncelikle Gökmen Göksel, Kde bağımlılıklarından ayrılan yönetici ailesinin yamalarını gözden geçirdi ve gerekli düzenlemeleri yaptık hızlıca.

H.İbrahim Güngör ile E17 üzerine bir çalışma yapıldı. Ben yönetici ailesinden disk yöneticisi ile ilgilendiğimden bu tarafta pek yer alamadım. Oysa gönlüm hem o sevimli penguenler ile birlikteydi ;)

Onur Küçük, geriye kalan herşeye baktı denilebilir:) Hatta bize ders anlattı çok da iyi oldu(Daha uzun olmasını isterdik ama ekibin yola çıkma vakti geldiğinden kısa kesilmek zorunda kaldık.)

Mete ve Metin de Joker rolündeydiler:) Onlarla tekrar çalışma fırsatı bulmak çok güzel.

Burak Çalışkan'la elbette Gnome ile ilgili bir takım şeyler konuşuldu.(Burak gerçekten süpriz oldu.)

NOT: 3M den Meltem de gelicekti ama son anda çıkan işi nedeniyle gelemedi.(Keşke gelebilseydi.)

Tüm ekiple hem çook eğlenceli, hem çoook faydalı hem de yorucu 2 gün geçirdik. Çalışma sonrası yenilen yemekler de cabasıydı:) Ayrıca bu atölye sırasında hacker olma yolunda epey ilerleme kaydettim. Pek çok kişiyi hackledim. (Twitterdan yansımalarını görebilirsiniz) Artık Hacker şöhretim aldı başını gidiyor:P Sıradaki siz olabilirsiniz aman Dikkat!

Herşeyiyle çook güzeldi. Pardus ekibine çoooook Teşekkürler, Yine gelin:)


Not: ÇoMaK ekibindeki diğer arkadaşlarında bloglarını okumayı unutmayın:)

Pardus 2011 + Enlightenment [Dolly]

8 Mart 2011 Salı 12:30 Gönderen Merve Yüzbaşıoğlu 0 yorum
Modüller için Ekran Görüntüleri ;)

resim1: e-module-rain modülü ekran görüntüsü




resim2-3: e-module-penguins ve e-module-snow modülleri birlikte
resim4: e-module-snow modülü ekran görüntüsü

resim5: e-module-flame modülü ekran görüntüsü

ÇOMAK-Enlightenment[Dolly] Modülleri ;)

11:33 Gönderen Merve Yüzbaşıoğlu 0 yorum
Bugün çıkardığımız Pardus 2011 + Enlightenment [Dolly] alfa sürümünü biraz eğlenceli hale getirmek için sizlere birde bazı modüller paketledik:) Bu modülleri Enlightenment'ı kurduktan sonra depomuzu ekleyip , modülleri kurarak kullanabilirsiniz. Benim bu blogu yazmaktaki amacım ise bu modülleri nasıl kullanacağınız ve bu modüllerin kısaca ne olduğundan bahsetmek:)

Öncelikle depoda bulabileceğiniz modülleri sıralayalım;

e-module-moon - Ay saatini gösteren bir modüldür.
e-module-rain -
Masaüstünüze yağmur yağdırmak istiyorsanız aradığınız modül bu:)
e-module-snow -
Masaüstüne minik yılbaşı ağaçlarıyla birlikte kar yağdıran bir modül.
e-module-penguins -
İşte en sevilen modülümüz:) Masaüstünde gezen minik penguenlerden oluşan bir modül.
e-module-flame - Yakın zamanda bu modülde depoya girecek:) Ortaya alevli bir masaüstü çıkartmak için kullanılan modül.

http://x86-64.comu.edu.tr/dolly/ adresinden kuracağınız E17 üzerine bu modülleri yükledikten sonra;

Anamenü->Ayarlar->Modüller : Bunun sonucunda Modül Ayarları karşınıza çıkacaktır.

Modül Ayarlarından yukarıda bulunan "Look" sekmesi altında kurduğunuz modülleri görüp yükleyebilirsiniz:)

Tüm modüllerden farklı olarak e-module-moon modülünü çalıştırmak içinse biraz daha farklı bir yol izlemek gerekiyor.

Anamenü->Araçlar : Araç Yöneticisi karşınıza çıkacaktır. Burada listeden Ay modülünü seçip Araç ekle diyerek ay saatinizi masaüstüne ekleyebilirsiniz.

Not: Ayrıca biraz da eğlenmek için bir adet oyunumuz var bu sürümde (econcentration)

Depo eklemek için: E17 'de depo ekleyebilen bir kaptan bulacaksınız:)

Yeni E17 [Dolly] ve modülleriyle iyi eğlenceler :) Bir sonraki yazıda penguenler modülünü daha ayrıntılı anlatacağım. Modüllerle ilgili aklınıza takılan herşey için yorum yazmaktan çekinmeyin.

ÇoMaK Toplantısı

13 Aralık 2010 Pazartesi 00:28 Gönderen Merve Yüzbaşıoğlu 0 yorum
Haftanın ilk gününe bir blog yazısıyla başlayalım:) Tabi ki konu başlığından da anlaşıldığı üzere blog yazım bu yılki bitirme projemiz olan Çomak hakkında olacak. 9 Aralık gecesinde Necdet Hocanın eşliğinde ben dahil 11'i öğrenci ve 1'i Bilgisayar Mühendisi olmak üzere 13 kişi İstanbul'a doğru yola çıktık. Amacımız Çomak projesinin gidişatı, kullanacağı teknolojileri ve belirsiz olan bir çok şeyi belirlemekti. Bunların yanında geliştiricilerle tanışmak, çalışma ortamlarını görmek ve tabi ki Meltem - Metin - Mete üçlüsünü bir arada görmekte bu toplantının güzel yanlarından birkaçı=) Toplantıda yediğimiz kuru pastaları ve tabi yemeklerin güzelliğini burada anlatmaya kalksak baya uzun sürecektir:)

Birazda toplantıdan bahsedelim.. Toplantı temel olarak 2 kısımdan oluşmuştu.İlk olarak Erkan Tekman, Onur Küçük, Gökmen Göksel ile geliştiricilerin gözünden özgür yazılım ve bir özgür yazılım projesine destek vermek hakkında konuştuk. Konuştuk dediğime bakmayın aslında çoğumuz sustuk:) Ama Onları dinlemek ve yaptıkları işlerden bu kadar heyecanlı ve severek bahsetmeleri beni oldukça heveslendirdi doğrusu(Çok pis gaza geldim denebilir.) Muhteşem yemek arasından sonra Pardus Geliştiricilerinin çalıştığı bölümü gezdik..Nasıl çalıştıklarını gördük ve çok sevdik=) Ardından toplantı odasına dönerek, toplantımızın ikinci kısmına geçtik. Bu bölümde ilk olarak qt mi gtk mı konusu gündemdeydi ve bu konuda Gökmen Göksel'in tişörtünü gördükten sonra tüm ekip Qt olmasına ikna oldu:) Projenin gerçekleştiriminde izleyebileceğimiz adımları önümüze çıkabilecek engelleri ve projenin 2 bölüm üzerinden yürümesi gerektiği gibi konular konuşuldu. Çok faydalı ve eğlenceli bir gün geçirdiğimizi düşünerek ve herkesin aklında projeyle ilgili düşüncelerle toplantıyı sonlandırdık. Bir kez daha ofise giderek 3M ye veda ettik..

Toplantı kısmı bitmiş olabilir ancak benim İstanbul Maceram bitmedi:) Ertesi gün Özgürlük için ekibinden Gizem Belen , İrem Çobanoğlu ve Ali Işıngör ile görüşmeye gittik. Ekibimizde eksiklikler vardı ancak bir çoğumuz oradaydık ve onlarla keyifli bir röportaj yaptık her ne kadar bulunduğumuz yer biraz gürültülü olsa da:)( Ofise sığamadık çok kalabalık olmamız sebebiyle) yaklaşık 2.30 saatlik sohbetin sonucunda röportaj bitti ve tabi 42. özgürlük için podcast'inde bizi dinleyebilirsiniz.(biraz şaşkın cevaplar vermiş olabiliriz şimdiden affola...)

Son olarak tüm Pardus ekibine, rahatsız olduğu halde bizi yalnız bırakmayan Necdet Hocamıza ve tabi ki Özgürlük için ekibine sonsuz teşekkürler...



UML

8 Aralık 2010 Çarşamba 14:04 Gönderen Merve Yüzbaşıoğlu 0 yorum
TEMELLERİ
Sınıf diagramının amacı sistem içinde modellenen türleri göstermektir.UML modelleri en çok
bu tipleri içerir;
  • Sınıf
  • Arayüz
  • Veri tipi
  • Bileşen(component)
UML bu tipler için özel bir isim kullanır:"Sınıflandırıcılar(classifiers)."Genel olarak sınıflandırıcıları sınıflar gibi düşünebiliriz, Fakat teknik olarak sınıflandırıcı, yukarıdaki diğer 3 terimede referans sağlayan genel bir terimdir.
Sınıf İsmi
UML diagramları genel olarak şekil 1'deki gibi tanımlanır. 3 bölmeden oluşur ve En üstteki kutuda sınıfın ismi ,orta bölgede sınıfın nitelikleri listelenir, son bölümde ise sınıfın işlemleri listelenir. Bir sınıf diagramı oluştururken sınıf ismi oluşturmak gerekir ancak diğer iki bölüm isteğe bağlıdır.Şekil 1 de bir havaalanı uçuşları ile ilgili UML modellenmiştir.

Şekil 1

Sınıf Özellikleri Listesi

Bir sınıfın özelliklerinin listesi(ortadaki bölme), sınıfın niteliklerini ayrı ayrı satırlarda listeler. Bu listenin yazımı için ağağıdaki format kullanılır.

name : attribute type (özelliğin ismi : özelliğin tipi)
Örneğin; flightNumber : Integer

Business sınıf diagramlarında, diagramı okuyacak olana göre de değişen farklı özellik tipleri kullanılabilir(minutes, dollars, gibi). Ancak genel olarak bir programlama dilinin kabul edeceği özellik tipleri yazılması daha uygundur.

Bazen bir özellik varsayılan bir değere sahip olduğunda bunu belirtmek gerekebilir(Örneğin, bir banka hesabı uygulamasında yeni bir banka hesabının sıfır bakiye ile başlamasını istiyoruz.) UML özellikleri aşağıdaki notasyonu kullanarak özellik listesi bölümünde varsayılan değerlerini tanımlamamızı sağlar:

name : attribute type = default valueÖrneğin; balance : Dollars = 0

Özelliklerin varsayılan değerini göstermek isteğe bağlıdır; Şekil 2'de, Banka Hesabı sınıfı.


Şekil 2

Sınıf Operasyonları Listesi

En alt bölümde belirtilen sınıf metotları yine sınıf özellikleri gibi satır satır aşağıdaki gibi belirtilir;

name(parameter list) : type of value returned

Şekil 1 deki metotlarıda inceleyebilirsiniz.

Miras

Nesneye yönelik tasarımda Miras kavramı oldukça önemlidir. Bir sınıftan miras alarak onun açık olan metotlarını kullanabilirsiniz ve miras alan sınıfa bu metotlar dışında yeni metotlarda ekleyebilirsiniz.
Bir sınıf diagramında miras 'ı modellemek için, çocuk sınıftan ana sınıfa içi doldurulmamış,düz bir ok çizilir. Şekil 3 te CheckingAccount ve SavingsAccount, BankAccount sınıfından miras almıştır.


Şekil 3

Yukarıda miras alan sınıflardan ayrı ayrı iki ok çizilmiştir. Bunu bir şekilde daha ifade edebiliriz.
Şekil 4' te ağaç yapısı şeklinde miras alan sınıfları görebiliriz.


Şekil 4

Soyut sınıflar ve işlemleri

Dikkatli okuyucular Şekil 3 ve 4 te BankAccount sınıfının italic olarak yazıldığını görecektir. Bu BankAccount sınıfının soyut bir sınıf olduğunu "withdrawal" metodunun ise soyut bir metot olduğunu gösterir. Başka bir deyişle BankAccount sınıfı,"withdrawal" soyut metodunun imzasını sağlar ve BankAccount sınıfını miras alan sınıflar bu soyut metot için kendi versiyonlarını uygular.

Bununla beraber süper sınıf , soyut bir sınıf olmak zorunda değildir. Standart bir sınıfında süper sınıf olması normaldir.

Birleşmeler(Associations)

Bir sistem modellediğimizde, belirli nesnelerin diğerleriyle ilişkisi olacaktır, bu ilişkilerin açık bir şekilde ifade edilmesi için gereklidir. 5 tip birleşme vardır. Bu bölümde -tek ve iki yönlü birleşmeler - olmak üzere ikisine göz atacağız. Bu birleşmelerle ilgili olarak çok fazla ayrıntıya girilmeyecektir. Temel olarak amaçları ve şekille nasıl gösterileceğinden bahsedeceğiz.

Çift yönlü(standart) ilişki

İki sınıf arasında bir çizgi varsa buna ilişki diyoruz. İlişkiler daima çift yönlü olarak kabul edilirler; Bunun anlamı, iki sınıfın birbirlerinden haberdar olduğudur ve başka bir ilişki tipi olmadığı sürece bu şekilde kabul edilir. Flight örneğinden devam edelim, Şekil 5 Flight ve Plane sınıfları arasında standart bir ilişki tanımlamasını gösterir.


Şekil 5

İkili ilişkiler düz bir çizgi ile ifade edilir. Çizgilerin sonunda, bir rol ismi ve çoklu değerler yer alır. Burada Flight ve Plane sınıfları ilişkili ve Flight sınıfının bu ilişkiden haberi var. Bu ilişkide, Plane "assignedPlane" rolunu alır, Çünki Plane sınıfının yanında rol ismi olarak "assignedPlane" yazıyor. Plane sınıfına gelen 0..1 çoklu değerinin anlamı, Bir Flight örneği oluşturulduğunda , Ya bir Plane örneği ile ilişkilidir yada onunla ilgili hiç bir Plane örneği yoktur. Aynı zamanda Plane sınıfıda Flight ile olan ilişkisinden haberdardır. Bu ilişkide Flight sınıfı "assignedFlights" rolünü alır; Plane, ya hiçbir Flight ile ilişkili değildir(Örneğin; yeni marka bir uçak), yada uçuş sayısı sonsuza kadar olabilir(Uçak,Son 5 yıldır görevlendirilmiştir.) Çoklu değerlerle ilgili olarak aşağıdaki tabloya göz atabilirsiniz.


Tablo 1

Tek Yönlü İlişkiler

Tek yönlü ilişkilerde, sadece bir sınıf ilişkinin var olduğundan haberdardır. Şekil 6 buna örnektir.


Şekil 6

Tek yönlü ilişki olduğunu göstermek için açık bir ok kullanılır(kapalı ve içi dolu olmayan ok miras için kullanılıyordu).Bu ok bilinen sınıfa doğru düz bir çizgi olarak çizilir. Standart ilişkiler gibi tek yönlü ilişkilerde rol ismi ve çoklu değer kısmını içerir, farklı olarak burada sadece bilinen sınıf için bu değerler belirtilir. Bizim örneğimizde "OverdrawnAccountsReport" ,"BankAccount" sınıfını tanıyor ve "BankAccount" sınıfı "overdrawnAccounts" rolünü oynuyor. "BankAccount" sınıfının diğer sınıfla ilişkisi olduğundan haberi yok.[NOT: "BankAccount" sınıfının diğer sınıfı bilmiyor olması garip gelebilir. Bu nesne kalıplarını gevşetir ve sistemi değişikliklere uyumlu hale getirir.]
NOT: 3 tip ilişki daha bulunmaktadır. Bu ilişkiler; Basic aggregation,
Composition aggregation, Reflexive associations
Bu ilişkiler ile ilgili olarak daha fazla bilgi almak için Çevirinin yapıldığı kaynak bölümüne bakabilirsiniz.

Görülebilirlik(Visibility)


Tablo 2

Kaynak

www.Ibm.com

Kaynağa gitmek için Tıklayınız..

KIcon

9 Kasım 2010 Salı 06:13 Gönderen Merve Yüzbaşıoğlu 0 yorum
KIcon, QIcon sınıfından türetilmiş bir sınıftır. Yapıcıları hariç tüm metotları QIcon' dan miras alınmış. KDE simge özelliklerini sağlayan(destekleyen) QIcon sınıfının bir sarmalayıcı sınıfıdır. KIcon,Yükleme ve kaplama(grafik) performansına uygun bir KIconEngine ile Qicon oluşturmak için uygun bir sınıftır.

KIcon Constructors:

KIcon(const QString &iconName, KIconLoader *iconLoader, const QStringList &overlays) : Bir KDE stil ikonu ismini ve isteğe bağlı olarak özel bir ikon yükleyici alan yapıcıdır.
  • iconName : yüklemek için Kde ikonunun ismi
  • iconLoader : Bu ikonun yüklemesinde kullanılan yükleyici, ya da yerel ikon yükleyiciyi ön tanımlı olarak kullanabilmek için "null" olur
  • overlays : Bu ikonları uygulamak için overlays'lerin bir listesi
KIcon(const QString &iconName, KIconLoader *iconLoader) : Kolaylık sağlamak için aşırı yüklenmiş üye fonksiyondur. Yukarıdaki fonksiyonlardan tek farkı kabul ettiği parametredir.
KIcon(const QString &iconName) : Yukarıdaki yapıcı gibi aşırı yüklenmiş fonksiyonlardan biridir.
KIcon(const QIcon &copy) : Herhangi bir Qicon'u kopyalayan yapıcı
KIcon() : Boş bir ikon yapıcısı
~KIcon() : İkonu yok etmek için

Ek olarakta:

operator=(const KIcon &other)

Bu Yapıcıların kullanımını görmek için: kicon.cpp

Yönetici ailesinde KIcon kullanımı ile ilgili olarak:

  • widget = self.makeItemWidget(id_, name, description, type_, kdeui.KIcon(icon), state)
  • self.pushToggle.setIcon(kdeui.KIcon("media-playback-stop"))
  • self.labelIcon.setPixmap(kdeui.KIcon("document-encrypt").pixmap(48, 48))
  • self.labelIcon.setPixmap(kdeui.KIcon("document-decrypt").pixmap(48, 48))
  • self.pushToggle.setIcon(kdeui.KIcon("media-playback-start"))
  • self.pushEdit.setIcon(KIcon("preferences-other"))
  • self.pushDelete.setIcon(KIcon("edit-delete"))
Buradaki KIcon kullanımı nerdeyse birbiriyle aynı icon isimleri verilerek KIcon oluşturulmuş. Bunların içinde en göze çarpanı pixmap(48,48) metodu. Bu metod ise QIcon sınıfında aşırı yüklenmiş bir fonksiyondur.

QPixmap QIcon::pixmap ( int w, int h, Mode mode = Normal, State state = Off ) const


QSize(w, h) 'ın pixmap'ini geridöndürür. pixmap, beklediğimizden küçük olabilir ama daha büyük olmaz.

Not: QSize(w,h) fonksiyonu yükseklik ve genişliğin verilmesiyle bir boyut yapıcıdır.

Sonuç olarak KIcon'un kullandığı tüm metodlar için QIconu gönül rahatlığı ile kullanabiliriz.

Kaynaklar:

KApplication

8 Kasım 2010 Pazartesi 12:25 Gönderen Merve Yüzbaşıoğlu 0 yorum

KApplication, şekilde de görüldüğü üzere QApplication ve KInstance' dan miras alınarak oluşturulmuş bir sınıftır.

Tüm KDE uygululamaları için, bilgi sağlar ve kontrol eder.Bu sınıfın bir nesnesi sadece bir uygulamada örnek olabilir. Bu örneğe daima 'kapp' yerel değişkeni üzerinden erişilebilir.

Bu sınıf tüm KDE uygulamaları için servisleri takip edebilmeyi sağlar.
  • Olay kuyruğunu kontrol eder(bknz:QApplication)
  • Hızlandırıcılar,ortak menü girişleri, bir KConfig nesnesi gibi KDE kaynaklarıyla uygulama sağlar.oturum yönetimi olayları,yardım vb..
  • Zombi çocukları('Zombie Children' tam olarak ne demek istediğini anlamadığım için olduğu gibi çevirdim.) önlemek amacıyla SIGCHLD sinyali için bir sinyal işleyicisi yüklenir. Eğer bu sinyali kendimiz yakalamak istersek yada hiç yakalamak istemezsen, Kapplication yapıcısını çalıştırdıktan sonra yeni bir sinyal işleyicisi(ya da SIG_IGN) düzenleyebiliriz
  • installSigpipeHandler() kullanılarak SIGPIPE sinyali için boş bir sinyal işleyici yükler.Eğer Bu sinyali kendimiz yakalamak istersek, Kapplication yapıcısını çalıştırdıktan sonra yeni bir sinyal işleyicisi düzenleyebiliriz.
  • Yeni servisler çalıştırılabilir.
Başlatılmış bir service durumu, servisin masaüstündeki 'X-DCOP-Servistipi' girişine bağlı olur:

üç ihtimal var:
  • X-DCOP-ServiceType=None (default), Daima yeni bir servis baştır,dcop ile servis kayıtlarına kadar beklemez.
  • X-DCOP-ServiceType=Multi , Daima yeni bir servis başlatır, dcop ile servis kayıtlı olana kadar bekler.
  • X-DCOP-ServiceType=Unique , Eğer başlatılmamış ise sadece servisi başlatır, dcop ile servis kayıtlı olana kadar bekler.

KApplication, miras aldığı sınıfların metotlarını kullandığı kadar kendi metotlarınada sahip(bknz:KApplication). Anca manager ailesinde benim görebildiğim kadarıyla miras aldığı QApplication sınıfındada bulunan bir metot kullanıyor.

Manager' lardaki kullanım olarak:

app=KApplication()
...
app.exec_()

Burada sonuç itibariyle bakılması gereken yer app.exec_() bu metod ile, fare'nin hareket olayları, yeniden boyutlandırma, düğmeye basma olayları gibi bütün olayları kabul eder. Bu döngü son pencere kapatıldığında biter.
QApplication ve KApplication sınıfları içinde manager'daki exec_() metodu exec() olarak bulunuyor.
Peki neden farklı yazılmış?

Bunun sebebi exec'in zaten bir python keyword'ü olması. Bu nedenle exec yerine exec_ kullanılmış.

Bu durumda KApplication yerine QApplication kullanabiliriz diye düşünüyorum.

Kaynaklar

Veee Bitirme Projesi

26 Eylül 2010 Pazar 12:18 Gönderen Merve Yüzbaşıoğlu 0 yorum
İşte beklenen yıl ve işte beklenen proje=) Bu yıl malum son senem ve okulu bitirebilmek adına vermem gereken bir bitirme projem var. Geçen senede okulun bilgi işleminde birlikte çalıştığımız kadim ve değerli dostum Aydan ile bitirme projesi yapabiliceğimi düşünmüştüm ve onada bunu teklif ettim. Aydanında kabul etmesiyle tabikide projemizi 1 yıl boyunca yanında çalıştığımız Necdet Hocamızla yapmak istedik ve bunun üzerine okulun başlamasıyla bilgi işleme gitmemiz bir oldu=)

Bizim ne yapabileceğimizle ilgili pek bir fikrimiz yoktu ama elbette Necdet hoca'nın vardı. işte beklenen an.. Proje nedir?

Bu yıl bitirme projesi olarak ekibe sonradanda eklenen kalabalık bir ekip ile Gnome'u Pardusa geçirioruz. Bu kadar Gnome sever varken Pardusta gnome hiç mi çalışmıyor diye sorduğunuzu duyar gibiyim ve cevabım elbette var. Ancak pardusta gnome kullananların işi pekte kolay değil bizim asıl projemizde bunu kolaylaştırmak işte.. KDE de bulunan kaptan, service manager, network manager gibi araçlar QT ile yazıldığından gnome da kullanılamıyor. Bunun sebebi ise Gnome'un GTK yı desteklemesi. Bizde Pardus-gnome severlerin işini kolaylaştırmak ve elbette güzel bir şeyler yapmış olmak adına bitirme projesi olarak QT ile yazılmış olan servis araçlarını GTK ya çevirerek gnome'un bu halinin pardus depolarına girmesini sağlamak. Necdet Hoca zaten Pardus ile görüşmelere başlamıştı bu konuda ve bu projede ilerleme kaydetmemiz üzerine okulumuzda bu konu üzerine Pardus ile yeni bir anlaşma imzalayacak. Çok heycanlı ve güzel bir işe adım atmanın sarhoşluğu ile çalışmalara hazırlık başladı. İlk iş olarak tüm araçların kodlarının okunup anlaşılması ve anlaşılabilmesi için de Qt yi temel olarak öğrenmekle başladık.

Proje ile ilgili gelişmeleri vakit buldukça ve Hocamız bizi bu konuda yazmamız gerektiği ile ilgili uyardıkça yazacağım ve tabi Projedeki diğer arkadaşlarımın yazılarını ve benim proje ile ilgili yazılarımı okumak için:

http://kdetognome.blogspot.com/

bu bloğu takip edebilirsiniz.

Proje Ekibi

Danışmanımız: Necdet Yücel

Aydan Taşdemir
Ben=)
Gökhan Akgün
Özge Barbaros
Mustafa Sertaç Türkel
Tayfur Yılmaz
Mehmet Zahit Şamat

Yine, yeni, yeniden....

24 Eylül 2010 Cuma 01:35 Gönderen Merve Yüzbaşıoğlu 0 yorum
Bir dönemin daha ilk haftasını geride bıraktık. Yeni derslerimizi rezil bir şekilde seçme çabalarımız sonlanıyor. Hala kaydımı tamamlayamamış olsam da bugün kaydımı yapabileceğimi umuyorum.

Yine bilgi işlemde ve bu kez farklı bir işle uğraşmaya başlamadan blog içinde biraz zaman ayırmak gerektiğini düşündüm=) Ancak çok uzun sürmeyecek.. Şimdilik bu kadar gençler yaptığım işlerle ilgili fırsat buldukça yazmaya devam edeceğim çok umutlu olmasam da belkide farklı bir blogtan da bitirme projemizle ilgili bilgileri yazabiliriz henüz pek bir şey kesinleşmedi açıkçası ama bu yıl bomba gibi bir yıl olacağa benziyor. Görüşmek dileğiyle:P

Google Maps Javascript API V3 Services

11 Temmuz 2010 Pazar 22:22 Gönderen Merve Yüzbaşıoğlu 1 yorum
GEOCODING

google.maps.Geocoder

Geocoding, haritadaki pozisyonda yada markerların yerlerinde kullanabileceğin coğrafi koordinatlar("enlem 37.423021 ve boylam -122.083739" gibi) içindeki adres dönüştürme sürecidir.( "1600 Amphitheatre Parkway, Mountain View, CA" gibi).

Google Maps API,kullanıcının girdiği dinamik geocoding adresleri için bir geocoder sınıfı sağlar.Bunun yerine static geocoding isterseniz,adresleri bilin ve geocoding web service dökümanına bakın.

GEOCODING İSTEKLERİ

Google Maps API,harici bir sunucuya çağrı yapması gerekene kadar,geocoding servisine erişim asenkrondur.Bu nedenle,isteklerin tamamlanması üzerinde çalışmak için geri çağrı metoduna geçmek gerekir.Bu geri çağrı metodu sonuçları işler.Bu geocoder'ın birden fazla sonuç döndürdüğünü unutmayın!!!

Google.maps.Geocoder nesnesi yoluyla kodunuz içinden Google Maps API geocoding servisine erişebilirsiniz. Geocoder.geocode () metodu,yanıt aldıktan sonra geri çağırma metodunu çalıştırmak için ve girdi koşullarını tam anlamıyla içeren bir GeocodeRequest nesnesine geçen bir geocoding servis isteğini başlatır.

GeocodeRequest tam anlamıyla aşağıdaki alanları içerir;

Bu alanlar aşağıda açıklanmıştır;

address (gerekli) — geocode için istediğiniz adres.*
latLng (gerekli*) — İnsanların okuyabileceği adreslere en yakın hale getirebilmek için kullanılır.
bounds (isteğe bağlı) — LatLngBounds ,geocode sonuçlarının daha belirgin bir şekilde olmasını sağlar.
language (isteğe bağlı) — geri döndürülen sonucun dili.
region (isteğe bağlı) — IANA language region subtag gibi özel bölge kodları.Çoğu durumda,bu etiketler bilinen ccTLD iki-karakterli değerler

*NOT:Arama için ya address'e yada latLng ye geçebilirsiniz.(Eğer latLng'ye geçilirse,geocoder,ters geocode olarak bilinen şekilde gerçekleşir.Daha fazla bilgi için Reverse Geocoding 'e bakın)
bounds ve region, geocoderdan gelen sonucu tam olarak kısıtlamayacak sadece etkileyecektir.

GEOCODING YANITLARI

Geocoding servisi,geocoding sonuçlarının alımı üzerinden çalışmak için bir geri çağrım metodu gerektirir.Bu geri çağrım, sonuçları ve o anki durumu tutmak için iki parametre vermelidir. Geocoder birden fazla sonuç geri döndürdüğünden,GeocoderResults nesnesi bir dizidir.

Geocoding Sonuçları

GeocoderResults nesnesi tek bir geocoding sonucu gibi temsil edilir ve aşağıdaki gibidir.

Bu alanların açıklaması şöyledir;

types[] ,geri dönen sonucun tipini gösteren bir dizidir.Bu dizi, geri dönen sonuçta bir veya daha fazla belirlenmiş taglar kümesi içerir.Örneğin; "Chicago" nun coğrafik kodu, "Chicago" nun bir şehir olduğunu gösteren "locality"(mekan,yer) ve üstelik onun siyasi varlığını gösteren bir "political" geri döndürür.
formatted_address, bu yerin okunabilir adresini içeren bir string'dir.Genellikle bu adresler şehirden şehire değişen "posta adres"lerine eşdeğerdir.(Büyük Britanya gibi bazı ülkelerin, gerçek posta adreslerini lisans kısıtlamaları nedeniyle dağıtım izni vermediğini unutmayın).Bu adres genellikle bir yada daha fazla adres bileşenlerinden oluşur.Örneğin "111 8th Avenue, New York, NY" adresi ;"111 8th Avenue"(sokak adresi),"New York"(şehir) ve"NY" (ABD devlet) için ayrı bir adres bileşenleri içerir.Bu adres bileşenleri aşağıda belirtilmiştir(adres bileşenleri tipleri hakkında daha fazla bilgi için "types" a bakın)

address_component[],yukarıda açıklandığı gibi ayrı adres bileşenlerini içeren bir dizidir.
geometry,aşağıdaki bilgileri içerir.
location,coğrafi kodlanmış enlem, boylam değerini içerir.Bu yeri string formatında değil latLng nesnesi gibi geri döndürdüğünü unutmayın.
location_type,belirtilen yer hakkında ek veri depolar.Aşağıdaki değerler şu anda desteklenmektedir:
google.maps.GeocoderLocationType.ROOFTOP,geri dönen sonucun kesin bir coğrafi kod yansıttığını gösterir.
google.maps.GeocoderLocationType.RANGE_INTERPOLATED, geri dönen sonucun iki hassas nokta arasındaki yaklaşık interpolasyonunu yansıttığını gösterir.Çatı coğrafi kodları sokak adresleri için kullanılmadığından genellikle aralıklı sonuçlar geri döndürür.
google.maps.GeocoderLocationType.GEOMETRIC_CENTER, geri dönen sonucun polygon yada polyline gibi, bir sonucun geometrik merkezi olduğunu gösterir.
google.maps.GeocoderLocationType.APPROXIMATE, geri döndürülen sonucu yaklaşık olarak gösterir
viewport,geri döndürülen sonuç için tavsiye edilen viewport'u depolar.
bounds (isteğe bağlı olarak geridöner),geri dönen sonucu tamamen içeren LatLngBounds u tutar.Bu bounds'ların tavsiye edilen viewportla eşleşmeyebileceğini unutmayın.(Örneğin; San Fransisco,teknik olarak şehrin bir parçası olan Farallon adalarını içerir fakat viewportta geri dönmemiş olabilir.)


Adres Bileşen Türler

Types[], geri dönen sonuç içinde adres tipini gösteren dizidir.Bu tür ayrıca address_components[] diziler içinde belirli bir adres bileşeninin tipini göstermek için geri döndürülerbilir.Geocoder içindeki adresler çoklu tiplere sahip olabilir;tipler,"tags" olarak kabul edilmiş olabilir.Örneğin birçok şehir, "political" ve "locality" tipi ile taglenmiştir.

Aşağıdaki tipler HTTP geocoder tarafından geri döndürülür ve desteklenir:

street_address,kesin bir sokak adresi belirtir.
route, isimlendirilmiş bir route içerir.("US 101" gibi)
intersection,önemli bir kesişim gösterir,genellikle de iki önemli yolun..
political,siyasi bir özelliği gösterir.Genellikle bu tip bazı sivil idarelerin bir polygonunu gösterir.
country,ulusal siyasi varlığı gösterir ve geocoder tarafından geri döndürülen en üstün düzendir.
administrative_area_level_1,aşağıda ülke düzeyinde birinci dereceden sivil bir varlık gösterir.Amerika Birleşik Devleti içerisinde bu idari seviyeler eyaletlerdir.Bütün ülkeler bu idari düzeyde sergilenmemektedir.
administrative_area_level_2, aşağıda ülke düzeyinde ikinci dereceden sivil bir varlık gösterir.Amerika Birleşik Devleti içerisinde bu idari seviyeler ilçelerdir.Bütün ülkeler bu idari düzeyde sergilenmemektedir.
administrative_area_level_3,aşağıda ülke düzeyinde üçüncü dereceden sivil bir varlık gösterir.Bu tür küçük bir sivil bölünme gösterir.Bütün ülkeler bu idari düzeyde sergilenmemektedir.
colloquial_area, varlık için yaygın olarak kullanılan alternatif bir isim gösterir.
locality,bir anonim şehir yada kasabanın siyasi varlığını gösterir.
sublocality,locality(yerleşimin) altında birinci dereceden sivil bir varlık gösterir.
neighborhood, isimlendirilmiş bir mahalle gösterir.
premise, isimlendirilmiş yerleri gösterir,genellikle bir bina yada ortak olarak isimlendirilmiş binalar topluluğudur
subpremise,location altında birinci düzeyde bir varlık gösterir,genellikle ortak adlandırılmış binalar topluluğunun içindeki tekil bir binadır.
postal_code ,ülkenin içinden posta adreslerinde kullanılan posta kodunu gösterir.
natural_feature ,önemli doğal bir özelliği gösterir.
airport,bir havaalanını gösterir.
park, isimlendirilmiş bir parkı gösterir.

Ayrıca,adres bileşenleri aşağıdaki tiplerde de görülebilir;

post_box ,belirli bir posta kutusunu gösterir.
street_number ,kesin olan sokak numarasını gösterir.
floor, bir bina adresinin zeminini gösterir.
room, bir bina adresinin odasını gösterir.

Durum Kodları

Status(durum) kodları aşağıdaki değerlerden birini geri döndürebilir;

google.maps.GeocoderStatus.OK ,geocode'un(coğrafi kod) başarılı olduğunu gösterir.
google.maps.GeocoderStatus.ZERO_RESULTS geocode'un başarılı olduğunu fakat sonuç geri döndürmediğini gösterir.Eğerki geocode var olmayan bir adresi yada uzak bir yerde latLng gösteriyorsa bu durum oluşabilir.
google.maps.GeocoderStatus.OVER_QUERY_LIMIT ,kotanızın bittiğini gösterir.
google.maps.GeocoderStatus.REQUEST_DENIED ,bazı sebeplerle isteğinizin reddedildiğini gösterir.
google.maps.GeocoderStatus.INVALID_REQUEST ,genellikle sorgunun(adres ve latLng) kaybolduğunu gösterir.

Bu örnekte,enlem ve boylamın geri döndürüldüğü bir marker'ın yerini ve adresini coğragi kodladık.işleyicinin anonim bir fonsiyon gibi aktardığını unutmayın!!


Örneği görüntüle..

TERS GEOCODING(Adres Arama)

Geocoding terimi genel olarak,harita üzerindeki bir yerin okunabilir bir adrese çevrilmesi anlamına gelir.Tersini alma işlemi,okunabilir bir adrese haritada yer tahsis etme,geocoding'in tersi olarak bilinir.

Geocoder,direkt olarak geocoding'in tersini destekler.Metinsel bir adresin tedarik edilmesi yerine, latLng parametresinde virgülle ayrılmış enlem/boylam çifti olarak tedarik edilir.

Aşağıdaki örnek bir enlem boylam değerini coğrafi kodlar ve biçimlendirilmiş bir adres ile bilgi penceresine verdiği o yeri haritaya odaklar.(merkezler)İlkinden daha az belirli olan ikinci sonucu geri döndürürüz.


Önceki örnekte ikinci sonucu gösterdiğimizi unutmayın!!!!(results[1] tarafından seçilen).geocoder'ın tersi genellikle birden daha fazla sonuç geri döndürür.geocodding
"addresses" sadece porsta adresleri değildir,fakat bir yeri coğrafi olarak isimlendirmenin başka yolu yoktur.Örneğin; chicago şehrindeki bir nokta coğrafi kodlandığında, coğrafi kodlanmış nokta bir sokak adresi,şehir adresi(chicago), onun eyaleti(Illinois) yada bir ülke(Amerika Birleşik Devletleri) gibi işaretlenmiş olabilir.Tamamıda geocoder için "addresses"'dır.Ters geocoder bu sonuçların tamamını geri döndürür.

Ters geocoder siyasi varlıklar, sokak adresleri ve posta kodları ile eşleşir.

Bir önceki sorguda geri döndürülen adreslerin tamamının listesi aşağıda gösterilmiştir;


Adresler en az eşleşme için en iyi sırada geri döndürülmüştür.Bu durumda olduğu için daha kesin adres, en önemli sonuçtur.En belirli sokak adreslerinden mahalleler,şehirler,ilçeler,eyaletler vb. kadar az belirli siyasi varlıklara kadar farklı adres tipi geri döndürdüğümüzü unutmayın..Eğer daha genel bir adres eşleşmesi istiyorsak, results[].type alanlarını incelemek isteyebilirsiniz.

Not:Ters coğrafi kodlama kesin bir bilim değildir.Geocoder,belirli bir tolerans ile en yakın adreslenebilir yeri bulmaya kalkışacaktır.

Örneği görüntüle..

VIEWPORT KUTUPLANMASI

Ayrıca belirli bir viewport içerisindeki tercih edilen sonucu Geocoding servisine talimat verebilirsiniz.(sınırlayıcı bir kutu gibi ifade edilmiş)Bu viewportun sınırlarını tanımlamak için GeocodeRequest nesnesinin bounds parametresiyle ayarlamalar yapabilirsiniz.

Örneğin,"Winnetka" için olan bir geocode genellikle Chicago'nun kenar mahallesi olarak geri döndürülür.


Bununla birlikte,bu yerde "Winnetka"adındaki mahalleyi geri döndüren geocode'daki Los Angeles'ın San Fernando vadisi için tanımlanan sınırlayıcı kutuyu bounds parametresi belirler:


BÖLGE KODU KUTUPLANMASI

Ayrıca belirli bir bölgeyi kullanan region parametresine sonuçları geri döndürebilmek için Geocoding servisi ayarlayabilirsiniz.Bu parametre,IANA language region subtag gibi belirli bir bölge kodu alır.Çoğu durumda,bunlar örneğin "co.uk" daki "uk" gibi bilinen ccTLD(üst-düzey alan) iki-karakterli değerler için doğrudan haritaya etiketler.Bazı durumlarda,bölge etiketi
bazı ccTLD değerlerinden farklı ISO-3166-1 kodlarını destekler.(örneğin;"Great Britain" için "GB")
Geocoding isteklerine, ana Google Maps uygulamalarındaki önerilen coğrafi kod her alan için gönderilmiş olabilir.
Örneğin;"Toldeo" için coğrafi kod, Geocoding Hizmet için varsayılan etki alanının ABD'ye ayarlandığı gibi bir sonuç geri döndürür:


'es'(ispanya) olarak ayarlanmış bölge alanı ile "Toldeo" için geocode İspanyol şehrini geri döndürecektir.



Çevirmen Notu:Bu yazının devamı en kısa sürede çevirilip yayınlanacaktır.Services kısımlarından önceki bölüm için "http://dogankadriye89.blogspot.com/" ve "http://blog.alihalukseven.com/" bloglarına göz atabilirsiniz.. Çeviri hatalarım olmuştur bunlar için herkesten özür diliyorum ve orjinal metin'e ulaşmak için: "http://code.google.com/intl/tr-TR/apis/maps/documentation/javascript/services.html" adresini kullanabilirsiniz..

ve dönem biter...

2 Haziran 2010 Çarşamba 05:16 Gönderen Merve Yüzbaşıoğlu 0 yorum
Bir dönem daha bitti ve bir sınav dönemini daha sağ salim denebilecek şekilde atlattım.Yorucu ve faydalı bir dönemin ardından 05.06.2010 Cumartesi harika bir pikniğe katılıyorum=)Bölüm hocalarımızında katılacağı piknik için Ayazma'ya gidiyoruz.Bu piknik dönemin yorgunluğunu çıkarmak için iyide bir fırsat olacak.

Dönem bitti ama ne yazık ki bana tatil yok..Bu yaz 2 staj yapmak gibi bir zorunluluğum var tabi bunda biraz benimde eşekliğim söz konusu=)
Yorucu ve faydalı bir yaz geçiririm diye umuyorum.Sınavları biten bitmeyen herkese İyi Tatiller diyorum=)

Benim yerime de tatil yapar mısınız?

Tatil

26 Nisan 2010 Pazartesi 11:43 Gönderen Merve Yüzbaşıoğlu 0 yorum
Vizelerin bitmesinin ve 3 saatlik bir otobüs yolculuğundan sonra kısacık tatilim başladı.Aslında eve gitmeyi hiç düşünmesemde uzun zamandır görmediğim küçük teyzeminde gelmesi sebebiyle tatilime başladım.Oldukça yorucu bir o kadarda eğlenceli geçen tatilimde sınıf arkadaşım Büşra'da bana eşlik etti.Havalarında sıcak olması sebebiyle gezmeye fırsatımız oldu=).
İLK GÜN
Tatildeki ilk durağımız Ayvalıktaki Şeytan Sofrası oldu harika manzarası ile insanı etkileyen bu yer misafirlerimizide oldukça etkiledi.Şeytan sofrasında ayağa benzeyen büyük bir şekil var.Buda şeytanın ayağı olduğu kanısına varılarak bu tepeye şeytan sofrası adı verilmiş.Bu hikaye saçma olsa da kafanızı ne yöne çevirseniz gördüğünüz o muhteşem manzarası her şeye değer.Ayrıca birde peçetelerden oluşan bir dilek ağacı var.=)
Şeytan sofrasından sonraki durak Ayvalık merkezde küçük bir gezi ve mideyi doldurmakla geçti.Buradan benim çok sevdiğim Cunda adasına geçtik.Harika manzaraları,temiz havası ve eski taş evleriyle her zaman çok sevdiğim yerlerden biri olmuştur.Öncelikle Cunda'nın en yüksek yerinde bulunan değirmenine(aynı zamanda kütüphane,aynı zamanda kilise..) gittik.Burası eskiden Agios Yannis Kilisesi'imiş.Şimdilerde ise Sevim ve Necdet H. Kent Kitaplığı haline getirilmiş.Harika manzarası ile görülmeye değer yerlerden biridir.Buradan Cunda'nın eski evlerinin süslediği daracık sokaklarından geçerek çarşısına ve balık restaurantlarının bulunduğu sahil kısmına geçtik.Deniz kenarındaki dinlendirici yürüyüşümüzden ve çokta sağlam olmayan bir iskeledeki fotoğraf çekme merakımızın ardından Cunda'ya da veda ettik ve ertesi güne hazırlanmak,dinlenmek için evimize döndük.Cunda dan bir kare..
İKİNCİ GÜN
Dinlenerek geçirdiğimiz bir geceden sonra ikinci güne balkonda yapılmış harika bir kahvaltı ile başladık.Herkes sıradaki durağı merakla bekliyordu.Hazırlıklar yapıldı ve yolculuk başladı.İstikamet Bergama idi.Bergama'ya gitmek için önümüzde iki şeçenek vardı.Zeytin ve çam fıstığı ağaçlarının bulunduğu Bergama ya 55km bir yol ve bir de izmir yolu üzerinden gidilecek 70 km civarındaki monoton bir yol.Tabikide ormanlık yolu tercih ettik ve yolculuğumuza başladık.İnanılmaz güzellikteki bu yol üzerinde çok sayıda köy vardı.Köyler oldukça bakımlı ve temizdi.Köylü civardaki ağaçlara da oldukça iyi bakmıştı.Yol üzerindeki bir kaç çeşmede durarak ve annemin harika esprilerine ve konuşmasına gülerek geçirdiğimiz yolculuğumuz Bergama'ya varmamızla maalesef sona ermişti.İlk olarak yüksek bir dağa kurulmuş olan Akropol'de gezimize başladık.


"Pergamon kentinin Akropol'ü ("kentin yukarı bölümü"), Bakırçayı'nın suladığı ovaya egemen bir tepenin üzerinde yer alır. Büyük bir kale görünümündeki Akropol’ün ana kapısına varmadan solda Heroon'un kalıntıları vardır. Heroon, Eski Yunan'da bir kahraman ya da yarı tanrı adına yapılmış ve çevresi sütunlu bir galeriyle çevrili kutsal yerlerin adıydı. Heroon’da, dinsel törenin yapıldığı oda (kült odası) geniş bir ön galerinin arkasındaydı. Heroon’un kuzeyinde Helenistik dönemden kalma bir dizi dükkândan oluşan uzun bir yapı bulunuyordu.

Kentin koruyucusu sayılan akıl ve savaş tanrıçası Athena adına yapılan Athena Tapınağı, Akropol'ün en önemli mekânıydı. Tiyatro terasının üzerinde bulunan bu tapınak, Dor düzeninde yapılmıştı. Kazılarda Athena Tapınağı’nın birçok parçası Berlin'e götürülerek aslına uygun biçimde orada yeniden kurulmuştur. Pergamon'da ise yalnızca temelleri kalmıştır.

Athena Tapınağı'nın kuzeyinde dört salonlu bir kütüphane vardı. Burası Helenistik dönemin en büyük kitaplıklarından biriydi. Kütüphanede "Pergamon derisi" olarak adlandırılan parşömen üstüne yazılmış 200 bin kitap bulunduğu bilinmektedir. Romalı asker ve devlet adamı Marcus Antonius, İ.Ö. 41'de kitapların tümünü Mısır Kraliçesi Kleopatra'ya armağan etmiştir.

Athena Tapınağı’nın güneyindeki bir terasta Zeus Sunağı yer alıyordu. Zeus Sunağı da Berlin'e götürülmüş ve onarılarak oradaki Pergamon Müzesi'ne (Pergamon Museum) koyulmuştur. Helenistik dönemi mimarisinin en güzel örneği olan sunağın Pergamon’da yalnızca temelleri kalmıştır. Zeus Sunağı'nın güneyinde Yukarı Agora bulunur. Agora, güney ve kuzeydoğudan Dor düzeninde sütunlu galerilerle çevriliydi. Agora'da toplanan halk, siyaset ve ticaretle ilgili konuları yönetimle görüşüp konuşuyordu. Agora’nın kuzeybatısında Agora Tapınağı bulunuyordu. Akropol'ün en yüksek yerinde Pergamon krallarının sarayları yükseliyordu. Günümüze bu sarayların yalnızca zemini ve temelleri ulaşmıştır. Sade görünümlü bu yapılarda odalar sütunlu bir avlu çevresine sıralanıyordu.

Athena Tapınağı'nın batısındaki dik yamaçta, yaklaşık 10 bin kişilik bir tiyatro yer alır. Helenistik dönemde yapılan tiyatronun uçuruma bakan ön tarafı setlerle sağlamlaştırılmıştı. Tiyatronun ahşap bir sahnesi vardı ve bu sahne sökülüp takılabilecek biçimde yapılmıştı. Akropol’ün bir başka tapınağı olan Dionysos Tapınağı, tiyatro terasının kuzeyindeydi. 25 basamakla çıkılan bir podyum üzerinde bulunan tapınağın yalnız ön yüzünde sütunlar vardı."

Buradaki Antik gezimizden sonra epey yorulduk.Koca bir şehri gezdik nede olsa:)Buradan sonra dinlenmek için küçük bir ara verdik ve ardından bergama'nın merkezindeki küçük bir müzeyi gezdik.Burada da antik kalıntılar,heykeller,mezar taşları ve mezarlar vardı.Ardından Kızıl avlu adını verdikleri.eskiden şehrin girişinin buradan olduğunu tahmin ettiğimiz bölgeye gezmeye koyulduk.Burası şehre gelen ziyaretçilerin alındığı kısım imiş.Oldukçada büyüktü.

Burayı da gezdikten sonra bacaklarımızda derman kalmamıştı.Ama son yer olan Aslepion'a doğru yol aldık.Bir yandan uyku,bir yandan yorgunluk ve diğer yandan kollarımdaki güneşten dolayı oluşan kızarıklar nedeniyle Asklepion'u gezemedim.Sadece girişine kadar gidebildim ama burasıda oldukça büyükmüş ve burada antik tiyatro ve uyku odaları denilen yer altında bazı odalar bulunuyormuş.Göremediğim için sonradan oldukça pişman oldum açıkcası.




















Aslepion'a geldiğimizde artık derman kalmayınca bulduğumuz ilk yere oturduk=)Diğer resimde de Asklepion'nun girişi..

Son olarak Bergama dönüşünde uyuklayarak geçirdiğimiz kısa yolculukla Dikili'ye vardık.Burada deniz kenarında güneşin batışıyla süslenmiş çay sefasından sonra sonunda eve dönüş başladı.

Tatil artık sona ermek üzereydi,çok yoğun ve zaman zamanda yorucuydu ama her şeye rağmen güzeldi.

Artık proje,ödev ve ders zamanı=)