19 Mart 2009 Perşembe
Codec Hatası: flv::Output Media Type 0: Unknown AM_MEDIA_TYPE: ...
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 :)
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
- 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
- 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
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
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
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
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
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
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 gerekmektedirGö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