C# Unsafe yapısı nedir? Nasıl kullanılır?

Yayınlandı: Mart 24, 2012 / C#

C# Unsafe yapısı nedir? Nasıl kullanılır?

.NET’ in altyapısında pointer kavramı sıklıkla kullanılırken pointerların  kullanımı programcılar için gizlenmiştir. Bunun nedeni pointer kullanımının programlardaki görülemeyen hatalara sıkça yol açabilmesidir. Özellikle dili yeni öğrenenler için pointer hataları içinden çıkılmaz bir hale gelebilmektedir. C#’ta göstericiler yerine referans değişkenleri mevcuttur. Referanslar heap bellek bölgesindeki nesnelerin başlangıç adresini tutar. Ancak bu adresin değerine kesinlikle ulaşamayız. Oysa C ve C++ dillerinde stack bölgesindeki değişkenlerin de adreslerine erişbilmemiz mümkündür. Üstelik değişkenlerin adreslerini örneğin 0x965474 şeklinde elde etmemiz bile mümkündür. C ve C++ programcılarına pek yabancı gelmeyecektir bunlar, ancak programlama dünyasına C# ile giren biri için göstericilere neden ihtiyaç duyabileceğimiz pek anlamlı gelmeyebilir. Şunu da söyeleyelim ki çok istisnai durumlar dışında göstericilere ihtiyacımız olmayacak, peki bu istisna durumlar nelerdir?

  • Geriye Uyumluluk(Backward Compatibility) : COM ve WinAPI’deki fonksiyonlar gibi sık sık pointer kullanan fonksiyonları C# ile programlarımızdan çağırabilmek için parametre olarak pointer alan fonksiyonlara pointer göndermemiz gerekebilir. Eğer C# ta pointer kullanımına izin verilmemiş olsaydı tür uyumsuzluğu yüzünden pointer kullanan eski COM ve DLL’lere erişebilmemiz mümkün olamazdı.
  • Performans : C ve C++ dillerinin günümüze kadar çok popüler olmasının altında yatan nedenlerden biri de belleğe direkt erişimi sağladığı içinperformansın inanılmaz derecede yükselmesidir. Bizim için performansın çok önemli olduğu yerlerde pointer kullanmamızdan daha doğal birşey olamaz.
  • Alt Seviye İşlemler : Donanım arayüzleri ile direkt bir ilişki içerisinde olacak programlarda pointerların kullanımı mecburi gibidir. Bazen de belleğe kullanıcıların direkt erişebilmesi gereken programlar olabilir. Bu durumlarda da pointerlardan faydalanabiliriz.

Bütün bunların yanında pointer kullanmanın bir çok sıkıntıyıda beraberinde getireceği kesindir. Öncelikle kullanımının zor olması ve kestirilmesi zor olan hatalara yol açabilmesi bu sıkıntıların en başında gelenidir. Zaten C#’ta pointer kullanacağımız zaman kodu unsafe(güvensiz) anahtar sözcüğü ile işaretlememiz gerekir. Aksi halde program derlenemeyecektir. Normal bir metot içinde gösterici kullanımı yasaklanmıştır.

Yasaklandığından dolayı projenizin properties bölümündeki build kısmından bu özelliğe izin vermeniz gerekmektedir.Aşağıdaki resimdeki gibi…

Şimdi de unsafe anahtar sözcüğünün kullanımına örnekler verelim.

1-) unsafe olarak işaretlenen sınıfların bütün metotlarında gösterici kullanabiliriz.

unsafe class Sınıf
{}

2-) Normal bir metot içinde herhangi bir bloğu unsafe olarak aşağıdaki gibi işaretleyip dilediğimiz gibi gösterici kullanabiliriz. unsafe bloklarının dışında ise gösterici kullanamayız.

int NormalMetot(int a, string str)
{
unsafe
{}
}

3-) Normal bir metodu unsafe olarak işaretleyip sadece o metodun içinde de gösterici kullanabiliriz.

unsafe int NormalMetot(int a, string str)
{}

4-) Bir sınıfın üye değişkenlerinden biri unsafe olarak işaretlenip gösterici olarak bildirilebilir. Ancak bir metot içerisinde yerel bir gösterici tanımlanamaz. Yerel bir gösterici tanımlamak için unsafe olarak işaretlenmiş metod yada blok kullanılır.

class Sınıf
{
unsafe char *ptr;
}

Otsu Algoritması

Yayınlandı: Mart 5, 2012 / Algoritmalar, Görüntü İşleme

Otsu Thresholding Explained

Otsu’s thresholding method involves iterating through all the possible threshold values and calculating a measure of spread for the pixel levels each side of the threshold, i.e. the pixels that either fall in foreground or background. The aim is to find the threshold value where the sum of foreground and background spreads is at its minimum.

The algorithm will be demonstrated using the simple 6×6 image shown below. The histogram for the image is shown next to it. To simplify the explanation, only 6 greyscale levels are used.

A 6-level greyscale image and its histogramA 6-level greyscale image and its histogram

The calculations for finding the foreground and background variances (the measure of spread) for a single threshold are now shown. In this case the threshold value is 3.

Background levels
Otsu threshold calculation of background
Foreground levels
Otsu threshold calculation of foreground

The next step is to calculate the ‘Within-Class Variance’. This is simply the sum of the two variances multiplied by their associated weights.

Otsu threshold calculation of sum of Weighted variances

This final value is the ‘sum of weighted variances’ for the threshold value 3. This same calculation needs to be performed for all the possible threshold values 0 to 5. The table below shows the results for these calculations. The highlighted column shows the values for the threshold calculated above.

Threshold T=0 T=1 T=2 T=3 T=4 T=5
Threshold Level 0
Threshold Level 1
Threshold Level 2
Threshold Level 3
Threshold Level 4
Threshold Level 5
Weight, Background Wb = 0 Wb = 0.222 Wb = 0.4167 Wb = 0.4722 Wb = 0.6389 Wb = 0.8889
Mean, Background Mb = 0 Mb = 0 Mb = 0.4667 Mb = 0.6471 Mb = 1.2609 Mb = 2.0313
Variance, Background σ2b = 0 σ2b = 0 σ2b = 0.2489 σ2b = 0.4637 σ2b = 1.4102 σ2b = 2.5303
Weight, Foreground Wf = 1 Wf = 0.7778 Wf = 0.5833 Wf = 0.5278 Wf = 0.3611 Wf = 0.1111
Mean, Foreground Mf = 2.3611 Mf = 3.0357 Mf = 3.7143 Mf = 3.8947 Mf = 4.3077 Mf = 5.000
Variance, Foreground σ2f = 3.1196 σ2f = 1.9639 σ2f = 0.7755 σ2f = 0.5152 σ2f = 0.2130 σ2f = 0
Within Class Variance σ2W = 3.1196 σ2W = 1.5268 σ2W = 0.5561 σ2W = 0.4909 σ2W = 0.9779 σ2W = 2.2491

It can be seen that for the threshold equal to 3, as well as being used for the example, also has the lowest sum of weighted variances. Therefore, this is the final selected threshold. All pixels with a level less than 3 are background, all those with a level equal to or greater than 3 are foreground. As the images in the table show, this threshold works well.

Result of Otsu's MethodResult of Otsu’s Method

This approach for calculating Otsu’s threshold is useful for explaining the theory, but it is computationally intensive, especially if you have a full 8-bit greyscale. The next section shows a faster method of performing the calculations which is much more appropriate for implementations.


A Faster Approach

By a bit of manipulation, you can calculate what is called the between class variance, which is far quicker to calculate. Luckily, the threshold with the maximum between class variance also has the minimum within class variance. So it can also be used for finding the best threshold and therefore due to being simpler is a much better approach to use.

Simplification of Otsu's threshold calculation

The table below shows the different variances for each threshold value.

Threshold T=0 T=1 T=2 T=3 T=4 T=5
Within Class Variance σ2W = 3.1196 σ2W = 1.5268 σ2W = 0.5561 σ2W = 0.4909 σ2W = 0.9779 σ2W = 2.2491
Between Class Variance σ2B = 0 σ2B = 1.5928 σ2B = 2.5635 σ2B = 2.6287 σ2B = 2.1417 σ2B = 0.8705

Android Emulator Kurulumu ve Gerekli Java Ayarlarıyla Eclipse Tanıtma

Merhaba, bu yazımda Google Android’in gerekli plug-inlerini Eclipse üzerine kuracağız ve böylelikle Eclipse ile Android entegrasyonunu sağlamış olacağız.
(NOT: Ben anlatımımı Linux üzerinden yaptım fakat tüm adımlar windows işletim sisteminde de aynıdır.)

1.Adım:

Bilgisayarınızda, Java Development Kit var mı? yoksa,http://www.oracle.com/technetwork/java/javase/downloads/index.html adresinden işletim sistemimize uygun olarak bu eksikliğimizi giderelim.

2.Adım

Android ortamındaki geliştirmelerimizi Eclipse ortamında yapacağımız için, elimizde Eclipse olması gerekiyor. Eğer yoksa, http://www.eclipse.org/downloads/ adresinden yine sistemimiz için uygun olanını indirelim.

3.Adım

intro_and_1

Şimdi, Android Software Development Kit’i indirelim. http://developer.android.com/sdkadresine gidelim ve yine işletim sistemimize uygun olanı seçip indirelim.

4.Adım 

Yukarıdaki 3 adımı doğru bir şekilde geçtiyseniz, şimdi sıra Eclipse üzerinde çalışmaya geldi.
Eclipse’i açalım. Window > Android AVD and SDK Manager
Available Packages sekmesini seçelim

Add Site… dendikten sonra aşağıdaki resimdeki gibi https://dl-ssl.google.com/android/eclipse adresi ekleyelim..

intro_and_2

Siteyi ekledikten sonra, yanında çıkan kutucuğu işaretleyip, sayanın sağ üst köşesinde yer alanInstall… butonuna tıklayarak, kuralım.
Software Update işlemi işlemi bittikten sonra büyük ihtimalle sizin onayınızla birlikte Eclipse kendisini yeniden başlatmak isteyecektir.

5.Adım
Şimdi sıra geldi, Eclipse ile Android SDK’sını birbiri ile tanıştırmaya. Bunun için 3.Adımda indirdiğimiz Android SDK’yı zip dosyasının içerisinden çıkaralım. Daha sonra Window > Preferences…diyerek, sol menüde Android‘i seçtikten sonra SDK’nın olduğu klasörü seçiyoruz.

intro_and_3

OK butonunu seçtikten sonra 1-2 dk konfigrasyon ayarları sürebilir.

Google Android programlama yeni başlayacaklar için çok ideal bir kitap. Herhangi bir bilgi derinliğinden ziyade, konsepti anlatmak için yazılmış olan kitabın bana oldukça faydası olduğunu düşünüyorum. Kitap ücretsizdir, yukarıda verdiğim adresten kitabın PDF dosyasını bilgisayarınıza indirebilirsiniz.

anddev sitesinden kitabı indirebilirsiniz (kitap ücretsizdir)

Ön Bellek(Cache Memory)

Yayınlandı: Şubat 5, 2012 / Yazılar

                                         Ön Bellek(Cache Memory)

  Günümüz bilgisayarlarda hızı belirleyen en öneli faktörlerden biriside ön bellek kullanımıdır.Günümüzde veri okuması,yazması ve işlenmesi yapılan çoğu bilgisayarlarda bulunur.Çalışma şekli ise işlenecek olan bilgiyi alınmak istendiğinde ilk olarak buraya uğranmasıdır.Burda yoksa o zaman ana belleğe gider.Ön belleğin kullanım amacı işlenecek olan bilgiyi işlemeden önce buraya getirilerek,bilgilerin işlenmeye hazır hale getirilmesidir.Genelde mikro işlemcilerde kulanılır.(Hızıda belirler.)

  Normalde bilgilerin hepsi Ana bellek(RAM)’te bulunur.İşlemci,verileri işlemek için yol(bus) sistemleriyle RAM’e gidecek ,alacak ve işleyecektir.Ne RAM’in nede yolların hızı CPU’ya yetişemez.İşte bu yavaşlığı önlemek için Cache Bellek kullanılır.Ön bellek işlemcinin yakınındadır ve işlemciyle aynı hızda veye yarı hızında çalışır.

   İşlemci işleyeceği bilgiyi önce ön bellekte arar yoksa RAM’e gider.İşlenecek bilgiler ise işlenmeden önce ön belleğe gelir.İki seviye ön bellek bulunmaktadır.

àL1 ,işlemciye en yakın olan ve işlenmesi en muhtemel verilerin bulunduğu ebatta en küçük bellektir.Hızı işlemciyle aynıdır ve ilk bakılan yerde burasıdır.

àL2  ön bellekler ise işlemciye daha uzak ve ebatça daha büyük bellektir.İşlemcinin yarı ve 1/3 hızında çalışır.

ICMP nedir?

Yayınlandı: Şubat 5, 2012 / Yazılar
Etiketler:, , , ,

ICMP nedir?

Internet Kontrol Mesaj İletişim KuralıICMP(Internet Control Message Protocol), hata mesajları ve TCP/IP yazılımının bir takım kendi mesaj trafiği amaçları için kullanılır. Kontrol amaçlı bir protokoldür. Genel olarak sistemler arası kontrol mesajları IP yerine ICMP üzerinden aktarılır. ICMP, IP ile aynı düzeyde olmasına karşın aslında kendisi de IP’yi kullanır. ICMP TCP/IP’ nin işlemesine yardımcı olan bir protokoldür. Her hostta mutlaka ICMP protokolü çalışır. Hata durumunda host tarafından geri bilgilendirmeyi sağlar.

ICMP ağ hakkında bazı bilgileri toplamak amacı ile de kullanılır. IP hata-raporlama veya hata-düzeltme mekanizmalarına sahip değildir. ICMP yapı olarak UDP ‘ye benzer bir protokoldür. ICMP de mesajlarını sadece bir datagram içine koyar. Bununla beraber UDP’ye göre daha basit bir yapıdadır. Başlık bilgisinde port numarası bulundurmaz. Bütün ICMP mesajları ağ yazılımının kendisince yorumlanır, ICMP mesajının nereye gideceği ile ilgili bir port numarasına gerek yoktur.

ICMP paketleri ortamda bir geri besleme sağlarlar. Bu yolla ciddi sorunları, haberleşen birimlere bildirerek bir hata bildirim mekanizması oluştururlar. ICMP mesajı, IP paketinin veri bölümünde taşınır. Bu yüzden ICMP paketlerinin dağıtım güvenilirliği, IP paketlerinin dağıtım güvenilirliği ile sınırlı kalmaktadır. Buradan ICMP paketlerinin güvenilir iletilemeyeceği ve hedefe vardığının garanti edilemeyeceği sonuçları çıkarılabilir.
ICMP kullanan komutlara örnek olarak ping ve traceroute verilebilir.

ICMP Paketinin Yapısı Ve Formatı

ICMP mesajları IP datagramının kullanıcı verisi alanında taşınır. IP başlığındaki protokol alanı 1’e set edilerek ICMP’nin kullanıldığı gösterilir. Tüm ICMP mesajları üç alandan oluşur

IP Başlığı

Tip(8)
Kod(8)
Toplamsal-Hata(16)
Parametreler(eğer parametreler yoksa kullanılmaz)
Bilgi(Değişken)
n=( alandaki bitlerin sayisi )
  1. Tip alanı: mesajın tipini tanımlar
  2. Kod alanı: hata veya durum bilgisi tipini tanımlar.
  3. Toplamsal-hata (checksum) alanı: ICMP mesajının 16-bit lik 1’e tümleyenini hesaplar.
  4. Parametreler:parametlerin daha uzun halinin belirlenmesinde kullanılır.
  5. Bilgi:Mesajla ilgili bilgidir

ICMP Neden Kullanılır

ICMP şu amaçlarla kullanılır.

  • TTL süresi dolduğu zaman paketin sahibine bildirim yapmak
  • Herhangi bir durumda yok edilen paket hakkında geribildirim sağlamak
  • Parçalanmasın komutu verilmiş paket parçalandığında geribildirim sağlamak
  • Hata oluşumlarında geribildirim sağlamak
  • Paket başka bir yoldan gideceği zaman geribildirim sağlamak

ICMP Hata ve Durum Raporlama Prosedürleri

ICMP tarafından rapor edilen hata ve durum raporlama servisleri aşağıda listelenmiştir.

Tip Kodu Değeri

ICMP Mesajın Tipi

0 Eko yanıt-ping yanıtı(Echo Reply)
3 Hedefe Erişilemedi(Destnation Not Reachable)
4 Kaynak Kapatmak(Source Quench)
5 Yeniden Yönlendirme(Redirection Required)
8 Eko yanıt-ping isteği(Echo Request)
9 Yönlendirici tanıtımı
10 Yönlendirici istemi
11 Zaman aşımı–traceroute kullanır(Time to Live Exceeded)
12 Parametre Problemi(Parameter Problem)
13 Timestamp İstemi(Timestamp Request)
14 Timestamp Yanıtı(Timestamp Reply)
15 Bilgi İstemi(Information Request)
16 Bilgi Yanıtı(Information Reply)
17 Addres Maskesi istemi(Address Mask Request)
18 Addres Maskesi yanıtı(Address Mask Reply)

ICMP mesaj tipleri ile internet uzerinde kontrol amaçlı bir çok program yazılması olasıdır. Örneğin timestap mesajları kullanılarak internet üzerindeki gecikmeler ölçülebilir.