31 Mart 2009 Salı

Söyleyemediklerimi İşitin Lütfen!

Bana aldanmayın!
Yüzüm bir maskedir,
Sizi aldatmasın.
Binlerce maskem var.
Çıkarmaya korktuğum.
Ve, hiç biri ben değilim...
Olmadığımı göstermek
İkinci doğam oldu.
'kendinden emin biri' dersiniz,
sanki güllük gülistanlık
benim için herşey...
adım güven belirtir.
Ve,
Oyunumun adı
Ağırbaşlılıktır.
İçimde ve dışımda denizler sakin,
Herşeyin kumandanı ben...
Fakat, inanmayın bana,
Lütfen!..
Herşey dışta düzgün ve cilalı,
Hiç yıpranmayan, her zaman saklayan
O maske!..
Altta ne güven, ne de rahatlık...
Altta,
Karışıklık, korku ve yalnızlık içinde bocalayan
Gerçek ben!..
Ama saklarım bu gerçeği savunuculukla
Kimsenin bilmesini istemem
Zayıf taraflarımı düşündükçe,
Titrer ve sararırım...
Ve başkaları görürse iç dünyamı...
Gerçek beni ve yalnızlığımı!
İşte, maskelerimi onun için takarım...
Onun için, arkalarına saklanacak maskelerim var.
Onlar, gösterişle kullanabileceğim
Parlatılmış yüzlerim.
Bana,
'sen değerlisin' diyecek,
'maskesizken daha bir insansın'
'daha bir bendensin'
'daha yakın, daha bir dostsun'
diyecek bir bakışa
muhtacım...
benim yanıma sokulman kolay olmayacaktır!..
uyarırım seni dost!..
uzun yıllar kendini yetersiz hissetmiş ben,
sana kendini kolayca açmayacaktır...
bütün gücümle tutunacağım maskelerime
ne kadar sokulursan yakınıma
o denli şiddetli geri iteceğim seni...
kim olduğumu merak ediyor musun?
Hiç merak etme...
Ben çevrendeki
Her erkek ve kadınım...
Maske takan her insanım.

Kaynak: İnsan İnsana

Doğan Cüceloğlu

Günümüz insanlarını çok güzel anlatmış. Bayıldım bu yazıya. Sonuna kadar okumalısınız, beğeneceğinizi umuyorum.

30 Mart 2009 Pazartesi

Tu Vas Me Detruire :)

Merhaba herkese. Hemen belirteyim, başlık konuyla alakasız, sadece çalan şarkının kısa bir yeri. :) Okula ve bitirme projesine zihinsel olarak yönlenince, kayıtlarım da o doğrultuda oluyor. Yazılım ile ilgili kayıtlarım çok yakında başlıyor yine arkadaşlar. Bu açıklamadan sonra bilgisayar ağlarından güzel iki kavrama değinelim.

Expedited Forwarding ve Assumed Forwarding.

Expedited Forwarding dediğimiz kavram, differetial services diye de geçebilir, paket yoğunluğu arttığında alternatif yollar tanımlar. Şöyle anlatayım, siz kendiniz için(kendi paketleriniz için) expedited bir yol seçersiniz. Ayrı bir yoldan gidersiniz yani. V.I.P gibi düşünebilirsiniz. :) Diğer paketler ise regular line dediğimiz kalan hatları kullanırlar.

Assumed Forwarding ise, integration services diye de geçebilir, tercihi yol kavramını kaldırıyor. Sınıflara bölüyor işi. Diyelim ki 4 klasman tanımladınız(4 hat yani). Bu arada yazım sapıtabilir, Duman konserine döndü burası şu anda. :D Şarkı geçişlerim çok serttir, herkes ayak uyduramaz. :D Neyse, 4 hattı tanımladınız diyelim ki. Bunlardan geçenlere bulundukları sınıfa özel priority tag verilir. Yani önceliği belirtsin diye. 1,2,3 ve 4 numaralı hatlar olsun(en önceliklisi 1, en az önceliklisi de 4 olsun). Aslında bunları kuyruk gibi düşünmek daha güzel olacak sanırım. Evet, kuyruk diyelim. :) 1.kuyrukta paket varsa en yüksek önceliğinden dolayı hep onun paketleri gider. Ama bu, sürekli böyle mi olacak..? Yani diyorum ki, 1. kuyrukta sürekli paket olursa, 2,3 ve 4'ün paketleri ne yapacak? Tabi ki hayıııır. Siz her kuyruğa şu kadar hızda paket geçirebilirsin diye garanti verebilirsiniz. Eğer garanti verdiyseniz de, priority levelleri dinamik olarak değiştirin ki, sırayla her kuyruğun önceliği yüksek olsun. Yoksa nasıl paket gönderirler ki, önceliği düşük kalırsa. Bu birinci yaklaşımdı.
Ellerimde kan, dilimdeeeeen akaaaar.. Kime neeee, bananeeee.. Bu aşk beni yoraaaar. :D Cidden dinleyin bu albümlerini. :)

2. yaklaşıma da değinelim. Bu yaklaşımda da, paketleri en yüksek öncelikliye, örneğimde 1. kuyruktu, atarsınız.

Bu kısa ama yorucu konu bitti. :) Yarın sabahki derse gitmeyeceğim, hem sunumlar başladı, hem de uykum var. :) Bu arada bu yazıyı okuyorsanız, 7 Nisan'da yapacağım Kerberos Protokolü sunumuma geleceksiniz demektir. IP adresinizden tespit ederim, arkadaşlığımız biter ona göre. :) Gelen olursa yarınki Mimari dersinde görüşürüz. Hocamın kalemle gösterdiği slaytları keyifle izleyeyim. :D

Hoşça kalın..

29 Mart 2009 Pazar

Güne Dair..

Merhaba arkadaşlar. Bu yoğun pazar günü umarım sizler için de güzel geçmiştir. Havalar da düzelmeye başladı, herhalde herkes daha enerjiktir. :)

Sözde oy kullanan bazı vatandaşlarımız birbirlerine saldırmış bugün. Gizli oylamada bile birbirimize girecek bahaneler bulmuşuz demek ki.

Bu arada Duman'ın yeni albümünü edindim. Duman I ve Duman II şeklinde 20 parçalık harika bir albüm. Ama ben en çok Duman I'i beğendim. "Bu Aşk Beni Yorar", "Helal Olsun", "Hayvan" ve "Dibine Kadar" muhteşem şarkılar. Kesinlikle dinlemelisiniz diyebilirim.

Bugün NetLibrary makalemi genişletmeye başladım. Fazla ilgilenemedim çünkü hava güzel olunca işler zorlaşıyor. :)

Dün İspanya'ya yenildik bu arada. Emre Belözoğlu'na nasıl tahammül edip, Semih'i nasıl oyundan aldı Terim, anlamış değilim. Olan oldu. son anda gruptan çıkacağımıza Terim'den kurtulalım. Çünkü adamın milli duyguları, bazen eski dostlarına gösterdiği vefa yüzünden sekteye uğruyor gibime geliyor. Dikkat etmesi gerekir.

Yarın herhalde bir konu hakkında kayıt girerim. Hoşça kalın..

26 Mart 2009 Perşembe

26 Mart da Geçti..

Öylesine bir kayıt daha gireyim dedim. :) Bugünü deşifre edeceğim.:P

Bugün bitirme projemizde(GSM Tabanlı Uzaktan İzleme ve Faturalama) biraz daha yol aldık. Yükselen bir takım grafiğine sahibiz, 1 Nisanda(IBM Yarışmamızın bitiş tarihi) en azından %70'i hazır bir proje vereceğiz sanırım. Eğer her şey yolunda giderse, o zaman korkun bu gruptan çünkü muhtemelen ödülü almaya gideriz. :D Kendim dışında bu başarıyı Halim Zaim Hocam için de istiyorum çünkü sağolsun her zaman destek çıktı bize(herkese rağmen, anlayan anlar bu vurguyu :) ).

Onun dışında koşularım hızla sürüyor. :) Pazartesi akşamı 7,5 kilometre yaptım. Gerçi ayaklarımı hissetmemeye başladım son metrelerde ama alışacağımı umuyorum. :) Hedefim yaza kadar 15 kilometreyi tempolu koşabilmek. Hala tempoyu yüksek tutamıyorum maalesef.

Geçenlerde "İhaneti Gördüm" isimli Erdal Sarızeybek imzalı kitabı okudum. Hepinize tavsiye ederim. Güneydoğudaki bölücü terör ile ilgili tüm olayları çarpıcı bir dille, gayet de akıcı bir şekilde anlatmış.

Aklıma gelen bunlar şimdilik, bir şeyler hatırlarsam yeni kayıt girerim. ;)

Görüşürüz..

25 Mart 2009 Çarşamba

Perfect Hashing

Merhaba herkese. Dün dediğim gibi yine bir algoritma başlığı ile birlikteyiz. :) Bugün de perfect hashing'in nasıl olabileceğine değineceğiz.

Malumunuz, hashing işleminde her key'e karşılık bir adres hedefi vardı. Ancak farklı 2 key aynı adresi ya da başka deyişle elemanı üretirse, burada çatışma, çarpışma(collision) oluşuyordu. Collision'ı önlemek için de 3 yöntem vardı: Linkli, Linksiz, Yalancı Linkli. bunlara zaten girmiyorum şimdi, ana konuya döneyim tekrar.

Perfect Hashing'de unique adresleme var. Key sayısı ile adreslerin(yani üretilecek elemanlar) sayısı aynı olması ideal bir durum yaratmaktadır. Örnek olarak programlama dilindeki "keyword"ler verilebilir. Yani sabit ve az elemanlı olmasına özen göstermeliyiz. Aksi taktirde avantajdan ziyade dezavantajı var.

Gösterimi de şu şekilde:
p.hash(key)=(h0(key)+g[h1(key)]+g[h2(key)])

Bu formüle, mesela: g[h2(key)] ifadesinde, key'i hashliyorsunuz, g tablosundaki ilgili yerde bulunan değeri alıyorsunuz.(g tablosunu oluşturmak için farklı yöntemler vardır, muhtemelen bunun hakkında yazı sonra yazarım ama, siz şimdilik size verildiğini kabul edin bu tablonun.)

En yaygın algoritmayla basit bir örnek yapacağım. Ayrıntılı bir yazıyı da yakında yazarım ama gitmem lazım şu an. O yüzden girizgah mahiyetinde olacak bu yazı.

Cichelli Algoritması, en bilinen algoritmadır bu konu için. Bir programlama dilinin(yanılmıyorsam Pascal) keywordlerinin frekanslarına göre bir tablo oluşturulmuş ve işlemler ona gre yapılmış. Mesela B=15 N=13 vs. gibi her harfe bir değer atanmış tablo tasvir ediniz.

Hazır B ve N demişken, bu harfleri örnekte kullanayım. :) Cichelli'ye göre

h0=uzunluk(key)
h1=ilk karakter(key)
h2=son karakter(key)

Örnek de şu olsun: begin.
Formül şuydu:
p.hash(key)=(h0(key)+g[h1(key)]+g[h2(key)])

p.hash(begin)=5(h0, begin'in uzunluğu,5 harfli bir kelime çünkü)+15(h1'in g tablosundaki değeri.h1 de ilk karaktere göre hesaplanıyordu, formüle bakarsanız.İlk karakter B. B=15)+13(Son karakter de n. N=13)=33


Başka bir key'den 33 değeri üretilmemeli. Başka bir deyişle b ile başlayıp, n ile biten ve 5 karakteri olan key olmamalı. Farklı durumları da başka zaman yazarım.

Görüşmek üzere..

24 Mart 2009 Salı

Alakasız Yazı

Merhaba arkadaşlar. Bugün herhangi bir bilgilendirme olmayacak yazıda, baştan diyeyim de boşa gözlerinizi yormayın. :) Uzun yolculuklarım, ikili ilişkilerim ve çevrem sayesinde bazı şeyleri fark ediyorum. Yani aslında önemsiz şeyler eminim bir çoğunuz için ama takılıyorum böyle şeylere.

İnsanların bencil olduklarını bilirdim ama size hiç saygı göstermeme derecesinde bencil olabileceklerini asla tahmin etmezdim. Maalesef kendisine sağladığınız yarar kadar varsınız. Normal, insancıl bir iletişim kurmak için sağlam insanlar gerekiyor ki pek kolay da bulamazsınız.

İnsanların hatalarını kabullenmemelerinin kronik bir hal aldığını gördüm. Her olaydan sizi sorumlu tutarlar. Asla geçmişe bakmazlar, nerede hata yaptık demezler. Onlar için sadece o an vardır ve o an onlar haklıdırlar. Sizin bağlarınızı koparmanız, terk etmeniz vs. gibi tepkileriniz onlar için saçmadır çünkü suçlu sizsinizdir.

Geçmişe dönmekten bahsetmişken, empati kurmak da önemlidir. İnsan ırkı bu vasfı da sanırım kolay kolay bulamayacak. Empati kitaptan değil hayattan kazanılır. Son moda da, Fawer'ı okuyup empati kurduğunu düşünenler. İnsanlar düşünmezler, düşünemezler, belki de düşünmek istemezler. Söyleyecekleri kelimelere, yaptıkları hareketlere dikkat etmezler. Bunların sizde yaratacağı olumsuzlukları görmezler. Sizi zor duruma düşürdüğünü ya da sizi üzdüğünü veyahut sizi uzaklaştırdığını fark edemezler. Çünkü onlar için "kendileri" vardır. Ve sorarlar, yanlış olan nedir? Tepkinin sebebi nedir.. Ama unutmayın, kendilerini soyutlayarak sorarlar bunu. Siz anlayışsız, duygusuz, tuhaf, anlamsız gelirsiniz. Ve sebep olarak bunları görürler. Bir adım ötesini yine düşünmezler.

İnsanlar, hayat ile izledikleri sanal hayatı karıştırır olmuşlar. Hem de gerçek hayatı "o" sanarak. Sevinçleri sanal, üzüntüleri sanal, aşkları sanal, mutlulukları, heyecanları sanal. Daha doğru ifade ile "basit". Önem verdikleri kriterler o kadar farklılaşmış ki. Ölüm olayı onlar için çocuk oyuncağı halini almış; edep konusu, tırnak içinde belirtmek gerekirse, "demode"; aşık olmaları anlık bir heves, sıkılınca vazgeçilen, yalnız kalınca torbadan kurayla çekilen; saygı ise çok gerilerde kalmış, neredeyse herkes düşman.

İnsanlar doyumsuzlaşmış. Her zaman daha da fazlasını arar olmuşlar. Her şeye sahip olmak isteyen, her şeyden daha da iyisini isteyen ve çok çabuk sıkılan yaratıklar olmuşlar. Bu kadar tüketici olduklarını düşünmemiştim. Kendimi hayata yeni merhaba demiş gibi hissediyorum. Neden böyle bu insanlar anlamaya çalışmaktayım hala. Belki karakterleri böyledir, belki görsel medyadan etkileniyorlardır kim bilir. Ama insan olma vasıflarını gün be gün kaybettikleri aşikar.

Nerede yetişti bunca insan.. Daha doğru soru: nasıl yetiştirildi bunca insan. Daha çok yazacağım şey vardı aslında ama başka zaman yazarım onları da, canım istemiyor şu an. Belki de doğru olan onlardır; tuhaf, salak, anlamsız olan benimdir. Umarım öyledir, aksi takdirde insan ırkının geri dönüşü olmayan bir yolda olduğunu görmek daha da üzer beni.

Akşam akşam gözleriniz yormamışsınızdır umarım, canım sıkkındı öylesine yazdım. :) Yarın belki algoritmalarla dönüş yaparız. :)

Hoşça kalın..

23 Mart 2009 Pazartesi

Fairness - Optimality

Merhaba tekrar. Bugün kısa bir konuya değineceğim. Konumuzun ne olduğu başlıkta yazmakta. Fairness'ın ne olduğunu zaten İngilizce anlamından ya da Özhan Canaydın'ın "feer piley"inden anlamışsınızdır. :) Optimality'yi anlatıp kısa bir örneklemesini yapacağım.

Optimality, ağda en kısa yola öncelik vermektir. Bu yüzden fairness ile olan çatışmalarını anlatacağım.

A B
| |
X-----------------------------------X'
| |
A' B'

Diyelim ki böyle bir ağımız mevcut. Eğer otpimality kuralını işletirsek, A noktasından A' noktasına; B noktasından B' noktasına iletim olur. Ancak X noktasından X' noktasına iletim çok sonra olabilir. Yol çok uzun aralarında çünkü. İşte, fairness kuralını ihlal etmiş oluruz bu şekilde yaparsak. Bu yüzden Sink Tree yöntemini kullanabilirsiniz.

X
|
\
|A'
|B'
\
X'

şeklinde bir ağaç oluşturursunuz ve paketi önce X' noktasına gönderirsiniz. Böylece "fair" bir hareket yapmış olursunuz. :)

Bu konu da bu kadar, görüşürüz..

19 Mart 2009 Perşembe

Codec Hatası: flv::Output Media Type 0: Unknown AM_MEDIA_TYPE: ...

Merhaba herkese. Başlıkta yazdığım şekilde devam eden bir hata mesajı aldım bir flv dosyasını açarken. Hatayı okumama gafletinde bulundum önce. Bir dosya daha indirdim, o da öyle çıkınca okudum artık yazan hatayı. :) Bir codec sorunundan bahsetmiş. K-Lite Codec ile çoğu şey açılıyordu ama bunu açmadı. VLC de çözemedi sorunumu. Amaaaaa. :)

flv::Output Media Type 0: Unknown AM_MEDIA_TYPE:

gibi bir hata ile karşılaşırsanız sorununuzu Wimpy Flv oynatıcısı ile çözebilirsiniz. Hiç bir sorumluluk kabul etmediğimi peşinen söyleyeyim ama. :) Ne olur ne olmaz, insan yapımı en nihayetinde. İndirmek için burayı tıklayın. Çok basit bir şekilde aktifleştiriyorsunuz. İçinde pdf olarak anlatmış. Yapamayan olursa ister e-posta atsın, isterse de buraya yazsın yarımcı olurum.

Görüşmek üzere..

18 Mart 2009 Çarşamba

Circuit Switching-Packet Switching ve Salladıklarım :)

Durmak yok, bilgisayar ağlarına devam.

Bildiğiniz gibi uç sistemler(host-end system), ADSL gibi "access network"lerden geçerek "network core"a bağlanır. İşte benim de değineceğim şey de network core içinde olan biten bir şey. Circuit Switching ile Packet Switching'e değinip, farklarından bahsedeceğim. Hemen belirtelim bazen Message(Session) Switching diye bir kavram da olabiliyormuş. Bu bilgiyi de hocamızdan aldık. :)


  • Circuit Switching: Link bandwidth'nin ve circuit kapasitesinin önemli olduğu bu yöntemde bir "call setup" şarttır. Yani alıcı ile gönderici arasında bir hat var. Elinizdeki kaynakları rezerve ediyorsunuz. Bir kere rezerve ederseniz o circuit hep size aittir. Bunun biraz değişik hali de Virtual Circuit Switching olarak geçiyor. Virtual'de de arada call setup var ama sadece veri gönderdiğinizde circuit size ait olur. Bir şey göndermezseniz circuit herkese aittir.

  • Packet Switching:
    C B
    \ /
    ()----()----()
    / \
    A D

    Yukarıda klavyemden çıkan başyapıt ile anlatacağım bu konuyu. Hem A hem de C aynı anda paketlerini gönderirse kaynaklar paylaşılır.(Paket nedir vs girmiyorum, konum değil, biliyorsunuz farz ettim). Bunda call setup yok. Dolayısıyla arada hat yok. Buna mukabil paketin gitme garantisi yok. :) Bunda Network best-effort denilen hareketini çekiyor. :) Nedir bu best effort peki, cevabını alt paragrafa saklayayım.

    Best-Effort, network'ün paketi göndermek için kendini paralamasıdır. :) Ama yukarıda da yazdığım gibi garanti vermez her şeye rağmen. İyi niyet gibi düşünebilirsiniz. Her zaman iyi niyet yetmez ama konuyu saptırmaya başladım, neyse. :D

    Circuit switchinge göre daha performanslı bir yöntemdir. Ancak bunda "packet contention problem" var. Call setup olmadığından rezerve yapmıyor kaynakları. Kaynaklar da rezervasyon olmayınca nereden bilsin ki kullanılacağını, değil mi ama. :) Trafik için uygun olmayabilirler. Tüm bunlardan mütevellit "delay" ve "loss" kavramları karşımıza çıkar. Contention problemde "congestion" vardır aslında. Bunu engellemezsek delay ya da loss olur, mesela buffer şişer ve gelen paketleri alamayabilir.

    Packet Switching'de son bir kavrama değineyim: Store and Forward.
    Adından da belli zaten. Önce paketi tutuyor(store). Çünkü gelen paketin ne yaptığını bilmiyoruz. Sadece 1 ve 0'lar mevcut. Source ve destination'a bakıp hangi router'a gittiğine bakarız. Daha sonra da göndeririz bunu(forward).



Paketin header bilgisi vs girmiyorum arkadaşlar. Onu da başka gün yazarım belki. Ben yavaş yavaş makinemi kapatacağım, Avrupa Yakası başlar birazdan. :) Google'ın bu güzel hizmetinden çıkarken, bu siteyi takip eden herkese armağan ediyorum çalan şarkıyı.

Et si tu n'existais pas
Je crois que je l'aurais trouvé
Le secret de la vie, le pourquoi
Simplement pour te créer
Et pour te regarder..

Bu güzel dörtlük, bu yazıları okuyanlara gelsin. ;) Sanat budur yaa. Bizimkiler Allah'ın topitoplarını "star" diye önümüze sürüyor..

Görüşürüz..

Flow Control - Congestion Control, Biraz da Otokontrol

Merhaba. Sonunda yarın sabah erken kalkmayacağım, o yüzden bir iki kayıt gireyim dedim.(ne alakaysa) :P Bugün de network'ten gidelim. Flow Control(Akış kontrolü) ve Congestion Control(Yığılma Kontrolü) kavramlarına değinelim.


  • Flow Control: 2 uç nokta arasındaki paket iletim hızlarının ayarlanmasıdır. Gönderen ile alanın hızları aşağı yukarı aynı olmalıdır.

  • Congestion Control: Network hep aynı hızda iletimi sağlamayabilir. (Mesela router arızalanbilir) Ağımız kendini yenilemeye çalışır. Paketi gönderen network hakkında bilgi sahibi değildir, alan ise durumun farkındadır çünkü paketleri alış hızı yavaşladı(belki de alamadı). Bu fark edilir edilmez, paketlerin iletimi azaltılır ki network kendini yenilesin.



Kısa bir konu oldu ama neyse. :) Bu arada vicdanımı rahatlatacak bir açıklama yapayım. Türkçe'ye bu kadar önem verip de bazı kavramları neden İngilizce kullandığımı açıklayayım. Tamamen teknik terimler olduğundan ve çoğu yerde böyle öğretildiklerinden, anlaşılmasını kolaylaştırdığı için bu şekilde yazıyorum. Üniversitede "flip-flop" diye öğrendiğim şeyi, kitabın biri yaz-boz diye çevirince uzun süre ne demek istediğini anlayamamıştım. :) Tamamen bundan, yoksa tüm terimlerin Türkçe kullanılma zorunluluğu projemi hala hayata geçirme ümidim sürüyor. :)

16 Mart 2009 Pazartesi

Virtual Circuit vs Datagram Subnets

Merhaba herkese tekrar. Network'te karşınıza çıkabilecek iki terim arasındaki farktan bahsedeceğim.

  • Virtual Circuit için arada, bir setup gereklidir(required); Datagram Subnet içinse setup yoktur.

  • Virtual Circuitte her paketin bir VCID'si vardır(Virtual Circuit IDentifier). Bunun üzerinden iletim yapılır. Datagram Subnet'te ise iletim için tüm yol bilgisi bilinmelidir. Gidip gelirken yolu bulabilmek için kaynak ve hedef adresler bilinmek zorundadır.

  • Virtual Circuit için state bilgisi gerekir çünkü Virtual connection açılınca iletim hep aynı yoldan yapılır(bağlantı kapanıncaya kadar). Datagram Subnet'te her paket birbirinden bağımsızdır. Bundan dolayı stateless'tır.

  • Ağ yolunda herhangi bir router çalışmazsa, Virtual Circuit'te bağlantı düşer. Nedenini tahmin etmişsinizdir herhalde, çünkü tek yoldan gidilip gelindiğini söylemiştik. Yol tek olduğundan, yolda bir sorun çıktı mı olay biter. İşleme yeniden başlarsınız. Datagram Subnet'te ise belirli bir yol yoktu hatırlarsanız. Eğer çalışmayan router içinde herhangi bir paket yoksa bağlantı bundan etkilenmez. Ancak içinde paket varsa o paket kaybolur.


Sonra görüşürüz..

12 Mart 2009 Perşembe

Self-Organizing Sequential Search

Merhaba tekrar.
Bugün makinem ile ilişiğimi erken keseceğim. :) Çıkmadan bir konuda yazayım dedim.

Self-Organizing Sequential Search. Nedir bu uzunca isimli yöntem? Bu yöntem, Sequential File Organization Methods(Sıralı verilere erişim yöntemleri) başlığı altında incelenen bir konudur. Cache belleklerde sık kullanılan bir yöntemdir. Amaç, verilerin sıralı yapısını tekrar organize ederek, sonraki erişimlerde daha iyi performans elde etmektir. Bu konu altında 3 algoritma mevcuttur.

1. Move-To-Front Algoritması
2. Transpose Algoritması
3. Count Algoritması

Şimdi kısaca bunlara değinelim.

Move-to-Front Algoritması: Herhangi bir dizi elimizde olsun. Örneğin alfabeyi düşünelim.

a b c d e f g h

c harfini aradığımızı varsayalım. 3 adımda(a-b-c) c harfine ulaşırız. Ulaştıktan sonra c harfini öne alırız.

c a b d e f g h

şeklini alır dizimiz. Yani herhangi bir erişimde, eriştiğiniz elemanı en öne alıyorsunuz. Bu işlemler bir süre sonra stabil olurlar ve sık kullanılanlar önde kalır. Sık kullanılmayanlar da cache'den atılır.

Transpose Algoritması: Herhangi bir kayda erişince, o kaydı bulunduğu noktanın 1 adım önüne alır.

a b c d e f g h

c harfini arayalım tekrar. c harfine erişince dizimizin yeni hali:

a c b d e f g h

Şimdi de f harfini arayalım mesela. f harfini de, e'nin önüne alacağız bu durumda.

a c b d f e g h

şeklinde bir dizi elde ederiz. Bu algoritma direkt en öne almıyor diğeri gibi. Belki o eleman sık kullanılmıyordur diye düşünüp, bir adım öne çekiyor sadece. Uygulanması daha kolaydır move to front algoritmasına göre.

Count Algoritması: Uygulanması en zor olanı. Her elemanla birlikte, o elemana kaç kez erişildiğinin sayısını da tutar. En çok erişileni en öne alır.

a b c d e f g h --dizimiz
0 0 0 0 0 0 0 0 --erişim sayıları

Diyelim ki c harfine eriştik. c'nin erişim miktarı 1 arttı.

c a b d e f g h
1 0 0 0 0 0 0 0

Şimdi de a harfine erişelim.

a c b d e f g h --a ya da c önde kalabilir, fark etmez.
1 1 0 0 0 0 0 0

Tekrar c'ye eriştik diyelim.

c a b d e f g h
2 1 0 0 0 0 0 0

şeklinde oluşur dizimiz. Ancak unutmadan belirteyim, bunu böyle her erişimde güncellemeyiz. Timer mantığında çalışır. Belli bir zaman aralığında yapar bu sıralamayı. Örneğin 3 dakikada bir güncelleme yapar ve erişim sayılarına göre diziyi sıralar. Aksi takdirde çok yer değişiminden mütevellit performans kaybı yaşanırdı.

Bu konu bitti, görüşürüz sonra. :)

ASP.NET MVC eBook Tutorial

Merhaba herkese. 2 gün önce Scott Guthrie, kendi sitesinden, Wrox için yazdıkları kitaptan bir bölümü pdf formatında paylaşıma açtı. Kitap için buraya tıklayın.
Yaklaşık 14 MB'lık, kendi yazdığı bölüme ulaşmak için de buraya tıklayın.

Görüşmek üzere..

5 Mart 2009 Perşembe

Türkçe'ye İhanet Edenlere İthafen

Merhaba arkadaşlar.
Bu saatlerde webloga uğramamın sebebi artık Türkçe özürlülerinden bıkmış olmam. Projem ve derslerimle ilgili bir kaç makale okudum. Okumaz olaydım, Türkçe'den soğudum. Hatalı yazılan "da-de" ekleri, bitişik yazılan "mı-mıdır" gibi ekler, anlatım bozuklukları, ne...ne... olumsuzluğunun yanlış yazılması, "herkes" kelimesinin yanlış yazılması, direkt yerine "direk" yazılması, "yanlış-yalnız" ayrımının yapılamaması vs vs.
Herkes hata yapar ama doğruyu gösteren biri olursa da düzeltmeleri gerekir. Yazıları yazanlara bakıyorsunuz, profesörler ya da önemli markalardan insanlar ama iki satır yazı yazmaktan acizler. Beceremiyorsanız yazmayın, yeter artık yaa. Sizin gibi Türkçe özürlüleri yüzünden ben de doğruları karıştıracağım yakında. Gidin de Türkçe bir iki kitap okuyun. Yabancı hayranı zavallılar sizi.

4 Mart 2009 Çarşamba

Robustness-Reliability-Security

Merhaba herkese. Ayrımını öğrendiğim bu üçlü hakkında bildiklerimi yazayım dedim. Yazılımda karıştırılan 3 kavram oluyor kendileri.

Robustness: Doğru verilerle doğru sonuç üretilmeli. Yanlış verilerle de yanlış sonuçlar üretmeli. Yani kendi içinde tutarlı olmalı, düzgün çalışmalıdır.

Reliability: 2 ölçütü vardır. Yazılımın (sisteminizin) hangi sıklıkla çöktüğü ve bir kez çökerse ne kadar sürede ayağa kalktığı. Orijinal ifadeleriyle: MinTimeToFailure ve MinTimeToRecover. Örneğin yıllarca çökmeyecek ama çöktüğünde de çöpe atılacak sistemin reliability'si düşüktür.

Security: Dışarıdan gelen saldırılara karşı güvenlik (içeriden değil yani).

Siz bu satırları okurken ben Avrupa Yakası'nı izliyor olacağım :P

Görüşmek üzere..

3 Mart 2009 Salı

Atilla İlhan - Belma Sebil

Merhaba herkese. Yazmaya halim yok, güzel bir şiiri paylaşayım dedim, Atilla İlhan'ın sesinden dinlerseniz daha da çok seveceksinizdir.

Seni ben Kallavi Sokağı'nda gördüm
Sen beni görmedin görmedin
Kapıları çaldım adını sordum
Söylemediler öğrenemedim
Seni ben Kallavi Sokağı'nda gördüm
Bir daha görmedim bilmedim
Belma Sebil adını yakıştırdım
Aklıma geldikçe her sefer
Gözlerinin mavisini bitirdim
Saçlarının siyahına başladım

Kallavi Sokağı'nda güvercinler
Benim karanlık İstanbul'um
Bir esnaf kahvesine oturdum
Belma Sebil ya geçti ya geçer
Rüzgarını içime doldururum
Kallavi Sokağı'nda güvercinler
Bunca yıl sönmemiş umudum
Nisan değilse mayıs
Perşembe değilse pazar
Ben Belma Sebil'i bulurum

1 Mart 2009 Pazar

Ağ Yapılandırması:NetLibraries ve Protocols

Merhaba arkadaşlar. Bir başka makale ile daha birlikteyiz. Öncelikle bu makaleyi hazırlarken danıştığım konularda yardımlarını esirgemeyen Rob Vieira'ya teşekkürü bir borç bilirim.

Bu makalemizde Sql Server Configuration Manager içerisinde yer alan Sql Server Network Configuration sekmesini inceleyeceğiz. Genelde bir bağlantı sorunu olduğunda akla 2 şey gelmektedir: client'ın ağ yapılandırması veya client'ın ve server'ın ağ yapılandırmalarının uyumsuzluğu.

İsterseniz daha yakından inceleyelim bu konuyu. Sql Server'ın kullandığı bir yapıya bakalım: NetLibraries (ya da kısaca NetLibs). Peki nedir bu NetLibs..? NetLibs, Sql Server için uygun network protokolünü implemente eden DLL'lerdir. Birazdan inceleyeceğimiz protokoller için NetLibs'ler mevcuttur. NetLibs dediğimiz kavram, Sql Server ile sisteminizdeki diğer nesneler arasında soyut bir katmandır aslında. Burada NetLibs'e bir virgül koyup protokollere geçeceğim arkadaşlara. Tekrar bu noktaya geri geleceğiz.

Protokoller:

Protokol dediğimiz şey, iletişimin kurallarını belirleyen yapılardır. 2 farklı bilgisayar aynı ya da uyumlu protokol kullanarak iletişim kurabilirler. Örnek vermek gerekirse, bir Japon ile yazıştığınızı düşünün. Eğer o Türkçe bilmiyorsa, siz de Japonca bilmiyorsanız anlaşamazsınız değil mi. Eğer ortak bilinen bir dil varsa, örneğin İngilizce, bu şekilde iletişim kurabilirsiniz. İngilizce de protokol olmuş oluyor bir nevi. Sql Database Engine'e bağlanmak için en azından bir protokolü aktif tutmanız gerekmektedir




Gördüğünüz üzere 4 adet protokol mevcut. Bunlar:


    1.Shared Memory
    2.Named Pipes
    3.TCP/IP
    4.VIA



Sadece Shared Memory varsayılan olarak aktiftir. Daha önceki versiyonlarda varsayılan olarak TCP/IP de aktifti. Ancak bu güvenlik açığı yaratmakta olduğundan bundan vazgeçildi. Akla gelebilecek yegane soru da:"Neden hepsini aktifleştirmiyoruz" olacaktır. İlk nedenini az önce söyledik. Bir diğer nedeni de, bunun iletişimde yavaşlama yaratmasıdır.


Şimdi bunları yakından inceleyelim.




Named Pipes:

TCP/IP olmadığında ya da TCP/IP altındaki server'ları isimlendirmeye izin veren DNS olmadığı durumlarda kullanışlı olabilir (ancak isim yerine IP ile bağlandığınızda böle bir sorun da kalmaz). Named Pipes kullanımı azalmaktadır. Local ağlarda kullanılır daha çok. Bir process'in çıktısı ikinci bir process'in girdisi şeklindedir iletişim. İkinci process local(aynı makine) de olabilir, uzakta da olabilir(remote).






TCP/IP:

En çok kullanılan protokoldür. Sql Server'a uzaktan bağlanırken kullanabilirsiniz. Çünkü IP kullanan tek protokoldür. Ağ trafiği yönlendiren ve gelişmiş güvenlik özelliklerinin bir standartını bulundurur.






Shared Memory:

En basit ve ayar gerektirmeyen protokoldür çünkü client ile Server aynı makinededir. Varsayılan olarak aktiftir. Client, server'ın veriyi sakladığı bellek dosyasına direkt erişir (çünkü aynı makinede). Dolayısıyla bu yöntem oldukça hızlıdır. Daha ziyade diğer protokollerde problem yaşadığında kullanılır. Microsoft bu konuda bir de uyarı yapıyor: Microsoft Data Access Components (MDAC) 2.8 ve öncesini kullananların bu protokolü kullanamayacağını, kullanmaya kalkışsa bile Named Pİpes protokolüne yönlendirilecekleri belirtiliyor.






VIA:

Virtual Interface Adapter. Özel uygulamaları değişkenlik gösterir. İki sistem arasındaki bağlantıya özel bir ağ ara yüzüdür ancak çok yüksek performans gösterir. Bunun sebebi de, özel olarak o bağlantı için tasarlamış donanımdır.




Protokoller bu şekilde arkadaşlar. Şimdi ara verdiğimiz konuya geri gidelim: NetLibs.Sql Server'daki NetLibs'ler:


    1.Shared Memory
    2.Named Pipes
    3.TCP/IP
    4.VIA




Gördüğünüz gibi bu protokollerin aynı zamanda NetLibs'leri var. NetLibs, client uygulaması ile ağ protokolü arasında bir yalıtkan gibidir. Pek tabidir ki server tarafında da aynı mekanizma mevcuttur.




Hem client hem de server'da birbirleriyle uyumlu NetLibsler seçilmelidir. Eğer uyumsuz olursa Specified Sql Server Not Found hatasını alırsınız.




NetLibs kavramının iyice oturması için şöyle anlatayım: Eğer network TCP/IP protokolünü kullanıyorsa, Sql Server da TCP/IP NetLib'ini kullanır ki TCP/IP ile nasıl konuşacağını, iletişim kuracağını bilebilsin.




Kullanılan sürücü türünden (Sql Native Client, ODBC, OLEDB) bağımsız olarak, her zaman NetLib ile konuşan bir sürücü olacaktır. İstemci uygulaması sürücü ile konuşur. Sürücü de istemci tarafındaki NetLib'i çağırır. NetLib de uygun ağ protokolü ile(hangisi kullanılıyorsa), veriyi server tarafındaki NetLib'e iletir. Server tarafındaki NetLib de istekleri server'a aktarır. Server da buna cevap verir. Bu cevap da aynı yoldan geri döner.




NetLiblerle ilgili son bir konu daha var arkadaşlar. Sql Server'ı başlattığınızda karşınıza bir ekran çıkıyor bildiğiniz gibi. Orada Server Name alanı var. Eğer orada localhost anlamına gelen bir değer girerseniz(. ya da 127.0.0.1 gibi), Sql Server, client ile aynı bilgisayarda olduğundan, bağlantı için seçilen NetLibs ne olursa olsun, Shared Memory NetLibs kullanılacaktır. Eğer bu alana gerçek server adını girerseniz, server ile iletişiminiz aynı makina üzerinde olduğuna bakılmaksızın TCP/IP NetLibs'ini kullanacaktır.




Bir makalemizin daha sonuna geldik. Tekrar görüşene dek hoşça kalın..




Gürkan Alkan
İstanbul Üniversitesi Bilgisayar Mühendisliği




Kaynaklar: Robert Vieira - Professional SQL Server 2005 Programming
http://msdn.microsoft.com/en-us/library/ms187892.aspx