28 Aralık 2010 Salı

Heap, Clustered İndeks ve Nonclustered İndeks Data Yapıları - Bölüm 1 (Tablo ve İndeks Organizasyonu, Heap Mimarisi)

1.Tablo ve İndeks Organizasyonu
Tablo Organizasyonu
Tablolar bir veya birden fazla partition ile oluşabilir. Her partition heap veya clustered indeks yapısında veri satırlarıdan oluşur.
Partition Organizasyonu
Partition kullanıcı tanımlı veri organizasyon birimidir. Tablolar varsayılan olarak bir partitiona sahiptirler. Bir tablo ve indeks, birden fazla partition içeriyorsa, veri yatay olarak bölümlenir. Partitionlar veritabanında bir veya daha fazla filegroup içerisine konulabilirler. Veri üzerinde sorgu ve updateler gerçekleştirilirken tablo veya indeksler tek mantıksal varlıklar olarak işlem görürler.
Clustered Tablolar, Heap ve İndeksler
SQL Server tabloları partitiondaki data pageleri organize etmek için iki metot kullanır:
1.Clustered Tablo: Clustered indeks içeren tablodur.
Veri satırları (data rows) clustered indeks anahtarının sırasıyla dosyada saklanır. Clustered indeks, clustered indeks anahtar değerine dayanarak daha hızlı satır erişimi sağlayan B-tree indeks yapısında yürütülür. İndeksin her seviyesindeki pageler(leaf seviyesindeki data pageler de dahil) doubly-linked list içerisinde bağlıdırlar. Ancak bir seviyeden diğerine dolaşmak key değerlerini kullanarak gerçekleşir.
2.Heap: Clustered indeks içermeyen tablodur.
Veri satırları özel bir sıralama içinde saklanmazlar, ve data pagelerin sırasında da özel bir sıralama yoktur. Data pageler linked list içinde bağlı değillerdir. Indexed Viewler de clustered tablolarla aynı yapıda saklanırlar. Heap veya clustered tablolar birden fazla partition içerirse, her partition kendine ait satır gruplarını içeren heap veya B-tree yapısına sahip olur. Örneğin bir clustered tablo dört partition içeriyorsa, dört tane B-tree yapısı vardır.

Nonclustered İndeksler
Nonclustered indeksler bir clustered indekse benzer B-tree indeks yapısına sahiptir. Farklı olarak nonclustered indeksler veri satırlarının sıralanmasını etkilemezler. Leaf seviyesi indeks satırlarını içerir. Her indeks satırı bir değer, satır göstergesi ve varsa included(veya nonkey) kolon içerir. Gösterge anahtar değerine sahip veri satırını işaret eder.
Bir allocation unit, kendi page tipindeki veriyi yönetmek için kullanılan heap veya B-tree içinde page grubudur. Aşağıdaki tabloda, tablo ve indeksin verisini yönetmek için kullanılan allocation unit tipleri listelenmektedir:
IN_ROW_DATA Veri veya indeks satırları Large Object Data (LOB) dışında tüm veriyi kapsar.
Pageler veri veya indeks tipleridir.
LOB_DATA Large Object veri text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max) veya user defined types data tipleri içinde depolanır.
Pageler text\Image tipleridir.
ROW_OVERFLOW_DATA Variable-Length veri, 8060 byte row size ile sınırlı varchar, nvarchar, varbinary ve sql_variant veri tiplerinde depolanır.
Pageler veri tipleridir.
2.Heap Mimarisi
Heap, clustered indeks içermeyen tablodur. Heap, heapte kullanılan her partition için sys.partitions içerisinde indid = 0 olan bir satır içerir. Heap ön değer olarak bir partitiona sahiptir. Eğer birden fazla partition oluşturulursa her biri kendine özel veri yapısını içeren bir heap yapısı içerir. Örneğin bir heap dört partition ise, burada dört heap yapısı vardır.
Heap içinde veri tipine bağlı olarak her heap yapısı, partitiona özel veriyi kaydetmek ve yönetmek için bir veya daha fazla yerleşim birimine(allocation unit) sahiptir. Her heap, her partition için minimum bir IN_ROW_DATA yerleşim birimine sahiptir. Heap eğer large object (LOB) kolon içeriyorsa her partition için bir de LOB_DATA yerleşim birimini içerir. Heap eğer 8060 byte row size ile sınırlanmış variable length kolon içeriyorsa her partition için bir de ROW_OVERFLOW_DATA yerleşim birimine sahiptir.
sys.system_internals_allocation_units sistem view içinde first_iam_page kolonu, heap yapısının boş alanlarını yöneten IAM page zincirindeki ilk IAM page göstergesidir. SQL Server IAM pageleri heaplere ulaşmak için kullanır. Data page ve rowlar bunları içinde özel bir sıralamada da değildir ve birbirine bağlı değildir. IAM pagelerin içine kaydedilmiş data pageler mantıksal olarak birbirine bağlıdır.
Tablo tarama ve heap okuma, heap için tutulan pagelerin alanlarını IAM pageleri tarayarak bulur. Çünkü IAM veri dosyasında bulunduğu sıra ile aynı sırada tutan bir alanı gösterir, yani Heap dosyaları birbirleriyle aynı sırada scan işlemi yapar.
Referanslar
1. http://msdn.microsoft.com
Serap PARLAK

5 Aralık 2010 Pazar

.NET FileSystemWatcher

FileSystemWatcher adından da anlaşılacağı üzere belirlenen bir dizini izleyen ve dosya sistemi üzerinde meydana gelen dosya olaylarını (Oluşturma, Silme, Yeniden Adlandırma ve Değiştirme) takip eden ve buna bağlı olarak olay tetikleyip işlem yapabileceğimiz çeşitli senaryolarda kullanabileceğimiz bir araç. FileSystemWatcher sınıfının belirli bir dizini, dosya tiplerini ve belirli olay durumlarına göre kullanabilmemiz için bir çok özellik ve olayları bulunmaktadır. Şimdi bunlara bir göz atalım. 
Özellikler:
Filter (string): Hangi tipteki dosyaların takip edileceğini filtrelemek için kullanılır ve varsayılan değeri “*.*” olup tüm dosya türlerini okur. Filtreleme örneği; “*.txt” değeri girildiğinde sadece metin dosyaları izlenecektir.
Path (string): İzlenecek dizin veya dosya yolunu tanımlar.
IncludeSubdirectories (bool): İzlenen dizinin alt dizinlerinin de izlenip, izlenmeyeceğini ayarlamak için kullanılır.
EnableRaisingEvents (bool): True olarak set edilmedikçe FileSystemWatcher olayları tetiklemez.
NotifyFilter (NotifyFilters): İzlenecek değişiklik türlerini tanımlamak için kullanılır.
Attributes: Dosya veya dizinin özellikleri.
CreationTime: Dosya veya dizinin oluşturulma tarihi.
DirectoryName: Dizin adı.
FileName: Dosya adı.
LastAccess : Dosya veya dizinin son açılma tarihi.
LastWrite: Dosya veya dizinin son değiştirilme tarihi.
Security: Dosya veya dizinin güvenlik ayarları.
Size: Dosya veya dizinin boyutu.

Olaylar:
Bahsettiğimiz gibi dosya olaylarını takip ederken aşağıdaki FileSystemWatcher olaylarını kullanırız.
Created ( Dosya veya Dizin Oluşturma durumunda çalışır.)
Deleted ( Silme durumunda çalışır.)
Changed (Değiştirme durumunda çalışır.)
Renamed ( Yeniden Adlandırma durumunda çalışır.)
Error (FileSystemWatcher tüm değişiklikleri yakalayamadığı durumlarda çalışır. )
Sınıfın özelliklerini ve olaylarını öğrendiğimize göre belirli bir klasörde meydana gelen değişiklikleri izleyen ufak bir servis uygulaması ile kullanımına bir göz atalım.
protected override void OnStart(string[] args)
{
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Filter = "*.*";
            watcher.IncludeSubdirectories = true;
            watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite | NotifyFilters.DirectoryName | NotifyFilters.FileName | NotifyFilters.Size;
            watcher.Path = @"C:\TestDizini";
            watcher.Created += new FileSystemEventHandler(watcher_Created);
            watcher.Deleted += new FileSystemEventHandler(watcher_Deleted);
            watcher.Renamed += new RenamedEventHandler(watcher_Renamed);
            watcher.Changed += new FileSystemEventHandler(watcher_Changed);
            watcher.EnableRaisingEvents = true;
}
static void watcher_Changed(object sender, FileSystemEventArgs e)
{
            using (StreamWriter sw = new StreamWriter(@"C:\WatcherLog.txt", true))
            {
                sw.WriteLine(DateTime.Now.ToString() + " --> " + e.Name + e.ChangeType + " isimli dosya DEĞİŞTİRİLDİ.");
            }
}
static void watcher_Renamed(object sender, RenamedEventArgs e)
{
            using (StreamWriter sw = new StreamWriter(@"C:\WatcherLog.txt", true))
            {
                sw.WriteLine(DateTime.Now.ToString() + " --> " + e.OldName + " isimli dosya " + e.Name + " olarak YENİDEN ADLANDIRILDI.");
            }
}
static void watcher_Created(object sender, FileSystemEventArgs e)
{
            using (StreamWriter sw = new StreamWriter(@"C:\WatcherLog.txt", true))
            {
                sw.WriteLine(DateTime.Now.ToString() + " --> " + e.Name + " isimli dosya OLUŞTURULDU.");
            }
}
static void watcher_Deleted(object sender, FileSystemEventArgs e)
{
            using (StreamWriter sw = new StreamWriter(@"C:\WatcherLog.txt", true))
            {
                sw.WriteLine(DateTime.Now.ToString() + " --> " + e.Name + " isimli dosya SİLİNDİ.");
            }
}
Cihan DEMİREL

23 Kasım 2010 Salı

Appcelerator IDC Mobile Developer Raporu (Google, Apple, Uygulamalar)

Google vs. Apple

Google Android ve iPhone iOS arasındaki rekabet hızla sürüyor. 14-16 Eylül 2010 tarihinde konusunda uzman toplam 2158 mobil yazılım geliştirici ile yapılan ankette sonuçlar şöyle;



- Satış ve pazarlama açısından market hakimiyetinin iPhone’da olduğuna çoğunluk hemfikir durumda. Geliştiricilere göre iPhone’da uygulama yazmak ve satmak kesinlikle daha çok para kazandırıyor.
- Son dönemde her ne kadar Apple geliştiriciler ile olan anlaşmalarını daha şeffaf hale getirse de geliştiricilerin %85’i Android’i daha açık bir platform olarak nitelendiriyor.
- Cihaz güvenliği açısından iPhone %58 ile önde.
- Yakın vade görünümünde yine Apple iPhone önde, ancak geliştiriciler uzun vadede Android’in daha çok ön planda olacağına %74 ile eminler…





Uygulamalar: Doğal mı? Web tabanlı mı?
Yine yapılan ankette her 5 geliştiriciden 4’ü, kullanıcıların zengin kullanıcı deneyimlerinden yararlanmak için web tabanlı uygulamalar yerine mobil cihazın işletim sistemini baz alan doğal uygulamaları tercih ettiğini söylüyor. Daha önceki blog yazılarımızdan Web Öldü, Yaşasın Uygulamalar’da da yine benzer bir durumu işaret etmiştik. Ankete katılan geliştiricilerin uygulama geliştirirken hangi özelliklerin daha önemli olduğuna dair yaptıkları oylama da aşağıdaki gibi;


Bazı yorumlar;

- Cihazda çalışan uygulamanın local bir veritabanına sahip olmasının (Local database) oranının %81 ile internet bağlantısı (Internet Connectivity) beklentisi oranından %72 daha yüksek olması bu cihazların birer mini-bilgisayar gibi görüldüğünü gösteriyor.
- Push notifications’ın oranının yüksek olması, gerçek zamanlı iletişimin öneminin arttığını gösteriyor.

Daha ayrıntılı bilgilere raporun orijinalinden ulaşabilirsiniz;
http://www.appcelerator.com/mobile-developer-report-September-2010/

Deniz KILINÇ

22 Kasım 2010 Pazartesi

C# ile Temel I/O İşlemleri – Dosya, Dizin

Bu makalemizde C#  dili ile temel Girdi/Çıktı (Input/Output) işlemlerini nasıl yapabileceğimizi inceleyeceğiz.  Bilgisayar ile yaptığımız her işlem aslında bir girdi/çıktı işlemidir. Klavyeden veri girişi, fare ile program açmak, ekrana veya yazıcıya belge yazdırmak, dosya kaydetmek I/O işlemlerine birer örnektir.  Bizim burada inceleyeceğimiz I/O işlemleri ise .Net  System.IO isim alanı altındaki sınıflarla yapabileceğimiz dosya, dizin okuma/yazma işlemleridir.
Directory
Directory sınıfı klasör oluşturma, silme, yeniden adlandırma ve taşıma gibi klasör işlemleri yapabilmemizi sağlayan statik metotları barındıran ve hiçbir özelliği olmayan bir sınıftır. Eğer bir klasör üzerinde sadece bir işlem yapmak istiyorsanız, instance alınmadan kullanıldığı ve aşırı yüklenmeden kaçındığı için bu sınıfı kullanmanız daha faydalı olacaktır. Şimdi ufak bir uygulama ile bu metotların kullanımına bir göz atalım.

class DirectoryTest
    {
        public static void Main()
        {
            // Gerekli dosya konumlarını tanımlıyoruz.
            string path = @"C:\Test\TestDizini";
            string target = @"C:\Test\HedefDizini";
             try
           {
                // Exist Static Metodu ile dizinin var olup olmadığının kontrolü.
                if (!Directory.Exists(path))
                {
                    // CreateDirectory metodu ile dizin oluşturma işlemi.
                    Directory.CreateDirectory(path);
                    Console.WriteLine("Oluşturulma Tarihi: " + Directory.GetCreationTime(path));
                    Console.WriteLine("Son Erişim Tarihi: " + Directory.GetLastAccessTime(path));
                    Console.WriteLine("Son Değiştirilme Tarihi: " + Directory.GetLastWriteTime(path));
                    Console.WriteLine("Bulunduğu Dizinin Adı: " + Directory.GetParent(path));
                    Console.ReadLine();
                } 
                if (Directory.Exists(target))
                {
                    // Delete metodu ile dizin silme işlemi
                    Directory.Delete(target, true);
                }
                //Move metodu ile dizini taşıma işlemi.
                Directory.Move(path, target);
                //GetDirectories ile dizindeki klasörlerin seçimi.
                string[] directories = Directory.GetDirectories(@"C:\Test\");
                foreach (string dir in directories)
                {
                    Console.WriteLine(dir);
                }
                // Yeni bir Metin Belgesi oluşturma.
                File.CreateText(target + @"\NewFile.txt");
                // GetFiles ile dizindeki dosyaların seçimi.
                Console.WriteLine("{0} dizinindeki dosya sayısı: {1}", target, Directory.GetFiles(target).Length);
                Console.ReadLine();
            }
            catch (Exception e)
            {
                Console.WriteLine("İşlem Başarısız: {0}", e.ToString());
            }
            finally { }
        }
    } 
DirectoryInfo 
DirectoryInfo, Directory sınıfına benzer metotları olan ve yine klasör işlemlerinde kullandığımız instance alınabilir bir sınıf olup bir çok özelliği vardır. Bir objeyi birden fazla kullanacağımız durumlarda, DirectoryInfo ile instance alıp çalışmamız performans açısından daha etkilidir. Uygulama içerisinde bu özellikleri kullanarak inceleyelim.
class DirectoryInfoTest
    {
        public static void Main()
        {
            // Kullanılacak dizini tanımlama.
            DirectoryInfo NewDir = new DirectoryInfo(@"C:\Test\TestDizini");
            try
            {
                // Dizinin var olup olmadığının kontrolü.
                if (NewDir.Exists)
                {
                    Console.WriteLine("Dizin Mevcut.");
                    // Dizin silme işlemi.
                    NewDir.Delete();
                    Console.WriteLine("Dizin Silindi..");
                }
                 // Yeni dizin oluşturma.
                NewDir.Create();
                Console.WriteLine("Klasör oluşturuldu.");
               
Console.WriteLine("Oluşturulma Tarihi: " + NewDir.CreationTime);
                Console.WriteLine("Bulundugu Dizinin Adı: " + NewDir.Parent);
 
               Console.WriteLine("Dizinin Adı: " + NewDir.Name);
                Console.WriteLine("Dizinin Tam Adı : " + NewDir.FullName);
                Console.WriteLine("Son Erişim Tarihi : " + NewDir.LastAccessTime);
                Console.WriteLine("Son Değiştirilme Tarihi : " + NewDir.LastWriteTime);
                Console.ReadLine(); 
                //Dizin içerisinde alt dizin oluşturma.
                DirectoryInfo SubDir = NewDir.CreateSubdirectory("AltDizin");
                //Alt Dizin içerisinde alt dizin oluşturma.
                SubDir.CreateSubdirectory("AltDizin2");
                 // GetFiles ile dizindeki dosyaların seçimi.
                Console.WriteLine("{0} dizinindeki dosya sayısı: {1}",
                NewDir.FullName, NewDir.GetFiles().Length);
                // GetDirectories ile dizindeki klasörlerin seçimi.
                Console.WriteLine("{0} dizinindeki klasör sayısı: {1}", NewDir.FullName, NewDir.GetDirectories().Length);
                Console.ReadLine();
            }
            catch (Exception e)
            {
                Console.WriteLine("İşlem Başarısız: {0}", e.ToString());
            }
            finally { }
        }
    }


File
File sınıfı ve Directory sınıfının bazı metotları aynıdır ve tek farkı klasörler yerine dosyalar üzerinde işlem yapmasıdır. Bu metotlar şunlardır: Exists(), Delete(), GetCreationTime(), GetLastAccessTime(), GetLastWriteTime(), Move(), SetCreationTime(), SetLastAccessTime(), SetLastWriteTime(). Ortak metotların yanı sıra dosyalar üzerinde farklı işlemler yapabilmesi için farklı metotları mevcuttur. Bu metotlar da FileInfo sınıfı instance metotları ile aynıdır.
FileInfo
File sınıfı gibi dosyalar üzerinde işlem yapabilen ve de benzer metotları bulunan bir sınıftır. File sınıfı ile işlem yaparken her daim dosya yolunu girmek gerekirken, FileInfo ile instance alındıktan sonra tekrar kullanımı daha efektiftir.
 class FileInfoTest
    {
        public static void Main()
        {
            FileInfo NewFile = new FileInfo(@"C:\Test\HedefDizini\NewFile.txt");
            if (NewFile.Exists) // File sınıfı:  if(File.Exists(@"C:\Test\NewFile.txt"))
            {
                // Dosya silme işlemi.
                NewFile.Delete();   // File sınıfı: File.Delete(@"C:\Test\NewFile.txt"))
            } 
            // Dosya oluşturma.
            NewFile.CreateText(); // File sınıfı: File.CreateText(@"C:\Test\NewFile.txt"))
            Console.WriteLine("Oluşturulma Tarihi: " + NewFile.CreationTime);
            Console.WriteLine("Son Erişim Tarihi : " + NewFile.LastAccessTime);
            Console.WriteLine("Son Değiştirilme Tarihi : " + NewFile.LastWriteTime);
            Console.WriteLine("Bulundugu Dizinin Adı: " + NewFile.DirectoryName);
            Console.WriteLine("Dosyanın Adı: " + NewFile.Name);
            Console.WriteLine("Dosyanın Tam Adı: " + NewFile.FullName);
            Console.WriteLine("Dosyanın Uzantısı: " + NewFile.Extension);
            // Dosya Kopyalama
            NewFile.CopyTo(@"C:\Test\");
            Console.ReadLine();
        }
    }
Buraya kadar dosyaların oluşturulması, kopyalanması ve silinmesi gibi işlemlerin File ve FileInfo sınıfları ile nasıl yapılacağınız gördük. Dosyalar ile okuma ve yazma işlemleri yapabilmek için Stream(Akım) sınıflarından yararlanacağız.
FileStream 
Okuma ve yazma işlemlerinde dosya açarken kullandığımız bir sınıftır. Bu sınıf ile Byte düzeyinde okuma ve yazma işlemleri de yapılabilir fakat bu işlemleri etkin olarak StreamReader ve StreamWriter sınıfları ile metin düzeyinde yapmamız daha efektif olacaktır. Bir FileStream nesnesi oluşturulurken FileMode, FileAccess ve FileShare enumları ile değişik yollarda yaratılabilir. Örnek:
class FileStreamTest
    {
        public static void Main()
        {
            string adres = @"C:\TestDizini\NewFile.txt";
            FileStream fs = new FileStream(adres, FileMode.OpenOrCreate);
            FileStream fs2 = new FileStream(adres, FileMode.Append, FileAccess.Write);
            FileStream fs3 = new FileStream(adres, FileMode.Truncate, FileAccess.Write, FileShare.None); 
            // FileStream akımının tamponu temizlenir
            fs.Flush();
            // FileStream tarafından kullanılan kaynaklar boşaltılır.
            fs.Close();
        }
    } 
FileMode enum
Append: Açılan dosyanın sonuna ekleme yapmak için kullanılır. Eğer dosya bulunmazsa oluşturulur.
Create: Yeni dosya oluşturmak için kullanılır. Zaten dosya varsa üzerine yazılır.
CreateNew: Yeni dosya oluşturmak için kullanılır, belirtilen dosya mevcutsa çalışma zamanı hatası verdirir.
Open:  Dosyayı açmak için kullanılır.
OpenOrCreate: Belirtilen dosya varsa açılır, yoksa yenisi oluşturulur.
Truncate: Belirtilen dosya açılır ve içi tamamen silinir.
FileAccess enum
Read: Dosya okumak için kullanılır.
ReadWrite: Dosya okunmak ve yazılmak üzere açılır.
Write: Dosya sadece yazılmak için açılır.
FileShare enum
Inheritable: Dosyanın child (yavru) işlemler tarafından türetilebilmesini sağlar.
None: Dosyanın aynı anda başka işlemler tarafından açılmasını engeller.
Read: Dosyanın aynı anda başka işlemlerce de açılabilmesini sağlar.
ReadWrite: Dosyanın aynı anda başka işlemlerce de açılıp, okunup, yazılabilmesini sağlar.
Write: Dosyaya aynı anda başka işlemlerce yazılabilmesini sağlar.
Cihan DEMİREL

21 Kasım 2010 Pazar

Veri Ambarı Depolama Türleri (MOLAP, ROLAP, HOLAP)

Veri ambarı küplerinin henüz tasarım aşamasında belirlenen MOLAP, ROLAP ve HOLAP olmak üzere 3 ayrı kullanım şekli bulunmaktadır. Bu seçeneklerin kullanımı sorgu performansı ve güncel veri gösterimi ihtiyacına göre değişmektedir. Bu 3 seçeneğin ayrıntılarını, artı ve eksilerini beraber inceleyelim;

1) Multidimensional OLAP (MOLAP)


Sorguların tamamen analiz sunucu üzerindeki veri tabanından çekilmesi durumudur. Küp çalışma süreci (Process) başlatıldığında ham verinin bulunduğu veri tabanından, istenilen tüm data, analiz sunucu üzerindeki veri tabanına aktarılır. İşlenmiş bilgi pivot tablodan çağırıldığında en süratli sonuç döndürme durumudur. Çünkü küpün çalışma süreci esnasında veri, analiz sunucu üzerine Boyutlar (Dimensions) bazında Ölçü birimlerinin (Measure Group) hesaplanarak aktarılması sağlanmıştır. Bu durumda sorgu performansı (kullanıcının bilgiye ulaşma süresi) en iyi duruma getirilmiştir. Ancak küpün çalışma süreci çok uzun sürer ve Küpün çalışma sürecinin periyodunu düşürür. Genellikle gece çalıştırılması bu sebeptendir. Aynı zamanda verinin analiz sunucu üzerine aktarımı sonucu fiziksel disk kullanımı da en üst düzeydedir.


2) Relational OLAP (ROLAP)

Sorguların tamamıyla ilişkisel veri tabanımızdan çekilmesi durumudur. Veriler her zaman günceldir 1. örnek bir senaryoda, excel yardımı ile analiz servisine bağlanıp, filtreye ocak ayı ve bir dağıtıcı seçtiğimizde bu sorgu analiz sunucu üzerinden ham verinin bulunduğu veri tabanımıza iletilir. Bu sayede en güncel bilgiye erişiriz. Ancak sorgu performansı düşüktür. Analiz sunucu veri tabanında hiçbir bilgi tutulmaz.

3) Hybrid OLAP (HOLAP)

Holap, Rolap ve Molap yapısının en iyi yanlarını birleştirmek üzere yapılmıştır. Detay veri kaynak veri tabanında, toplamlar ise analiz sunucu üzerinde tutulur. Sunucu kaynak veri tabanındaki değişiklik bildirimlerini dinleyerek analiz sunucu üzerinde tutulan toplam bilgilerini günceller. Bu yöntem genellikle Rolap yönteminden daha iyi performans sağlar.

Bora GÜRSEL
-----------------------------------------------------
1 Kaynak data olarak gösterilen veri tabanının SSIS yardımıyla taşınmadığı durumda geçerlidir. Kaynak veri, farklı veri tabanlarından taşınıyorsa veri güncelliği taşıma işleminin frekansıyla belirlenir.

20 Kasım 2010 Cumartesi

CMMI Nedir?

CMMI (Capability Maturity Model Integration), Yetenek Olgunluk Model Entegrasyonu anlamına gelmektedir. Firmaların yazılım geliştirme süreçlerini (Proje alma, Proje geliştirme, Yazılım planlama ve geliştirme vb.) en başından ele alır ve ne durumda olduklarını değerlendirerek, firmaların kendi iç süreçlerinde iyileştirme yapmalarını amaçlar.
CMMI, Amerikan Savunma Bakanlığı’nın 1970’li yıllarda açmış olduğu yazılım ihalelerini alan firmaların projelerini geç tamamlaması ya da tamamlayamadan işi bırakması sebebi ile uğradığı sure ve maliyet kaybını biraz olsun engelleyebilmek adına ihaleye giren firmaların değerlendirebileceği bir kriter olarak oluşturulmuştur. Carnegie Mellon Üniversitesi Yazılım Mühendisliği Enstitüsü(SEI) tarafından geliştirilen bu modelleme son olarak 1 Kasım 2010 tarihinde güncellenerek son halini almıştır. Su an ABD’de birçok büyük şirket Yazılım geliştirme ihalelerinde, ihaleye giren firmaların CMMI derecesine göre karar vermektedir.

CMMI Bileşenleri
1. CMMI-DEV: Hizmet veya ürün geliştiren firmalar için tasarlanmıştır. Müşterinin isteklerine dayalı projeler gerçekleştiren, proje bitiminde bu ürüne dayalı hizmet veren firmalar bu modelden faydalanabilirler.
2. CMMI-SVC: Tamamlanan projeler ile birlikte yürütülmesi gereken destek ve geliştirme surecinin iyileştirilmesi adına bu modellemeden faydalanılabilir.
3. CMMI-ACQ: Satın alma süreçlerinin daha iyi yönetilmesi ve iyileştirilmesi adına çok sık şekilde satın alma yapan firmalar bu modellemeden faydalanabilir.
CMMI Yararları
- Firmanızda çalışan bireylerin daha etkin çalışmaları aynı doğrultuda firmanın iş süreçlerini olumlu yönde etkileyecektir.
- Organizasyondaki üretkenliğin artması ve bunun sonucunda ortaya çıkan urunun kalitesi size de müşterilerin beklentilerini karşılamada daha fazla güven sağlayacaktır.
- Bir projenin geliştirme surecindeki riskler sayısal verilere dayandırabilir duruma geldiğinden, buna göre planlama ve analizleri yapılabilir.
Emin Buğra MERHAMETLİ

19 Kasım 2010 Cuma

Mobil Numara Taşınabilirlik Sistemi İstatistikler

Cep telefon numaranızı değiştirmeden başka bir operatöre geçebildiğiniz “Numara Taşınabilirlik Sistemi - NTS” Türkiye’de 2. yılını doldurdu. Numara taşıma işlemi, abonenin numara taşıma talebi yapmasından itibaren en fazla 6 gün içerisinde gerçekleşiyor. 9 Kasım 2008 tarihinde başlayan uygulama, istatistiklere baktığımızda yoğun ilgi görmüş durumda. Bu yılın 2. Çeyrek rakamlarına göre Türkiye’de toplam 61.5 milyon mobil abone bulunuyor. NTS kapsamında taşının toplam abone sayısı ise 22 milyon 127 bin. Yani günde ortalama 30 bin abone operatör değiştirmiş ve taşınan numara sayısı toplam abone sayısının yaklaşık %28’i.

Türkiye’de üç operatör içinde en fazla abone transferini gerçekleştiren şirket, Vodafone Türkiye olurken, en fazla kayıp yaşayan şirket ise piyasanın lideri Turkcell oldu. Vodafone Türkiye yaklaşık 7 milyon 730 bin aboneyi düşük fiyatlı tarifelerle kendisine çekti. Vodafone'un bu dönemde kaybettiği abone sayısı ise 6 milyona yaklaştı. Şirket böylece toplamda 1,7 milyon üzerinde kişiyi, şirketin aboneleri arasına kattı. Turkcell ise giden abone sayısında 9 milyon 260 binleri gördü. Gelen abone sayısında 6 milyon 580 bini yakalayan şirket son 22 ayda 2,5 milyonun üzerinde abone kaybı yaşadı. Mobil cep telefonu pazarında üçüncü operatör olan Avea ise net 1 milyon abone kazandı.
NTS sisteminin resmi devlet sitesine aşağıdaki linkten erişebilirsiniz;
http://www.nts.gov.tr/
Deniz KILINÇ

8 Kasım 2010 Pazartesi

iPhone 5 NFC (Near Field Communication)

Apple bunu hep yapıyor. Tam da iPhone 4 ile rüyalarımızı gerçekleştirdiğimizi düşünürken, iPhone 5 ile ilgili haberler/dedikodular piyasaya sızmaya başladı bile. Steve Jobs’un hem beğenilen hem de eleştirilen özelliklerinden birisi, bir ürünü piyasaya sürüp piyasada oturmasını beklemeden ve kullanıcı geri-bildirimlerini almadan bir sonraki ürüne odağını kaydırması değil mi? Belki de pazarlama taktiği kim bilir… Ne amaçla olursa olsun, adından söz ettirdiği kesin, en güzel örneklerinden birisi de bu blog yazısı :)
iPhone 5 ile gelen NFC (Near Field Communication = Yakın Alan İletişimi) teknolojisi sayesinde “olayın gidişatı” değişiyor. iPhone 5 barındırdığı NFC teknolojisi ile diğer NFC teknolojisini destekleyen cihazlarla iletişim kurabilecek.

Nerelerde kullanabiliriz;
  • Mobil ticaret (POS, mobil erişim noktaları veya akıllı ürünler üzerinden)
  • Elektronik cüzdan ve mobil ödeme sistemleri
  • Elektronik biletler (ulaşım kartları, uçak, otobüs, konser ve maç biletleri)
  • Elektronik tanıma (güvenli erişim/geçiş sistemleri, personel takip sistemleri)
  • Elektronik anahtarlar (araba, ev, işyeri, otel odaları, garaj kapıları vb)
  • Elektronik reklam, içerik, bilgilendirme (akıllı posterler, afişler, bilboardlar, dergi/gazete reklamları, vb.)
Aklımıza gelen olası problemler;
  • Tüm risk tek merkezde toplandığı için bu cihazlara gözümüz gibi bakmamız gerekiyor. Aman deyin sıkı tutun.
  • Şarj bitmesi problemi devam ediyor. Yedek pil kullanamıyoruz.
Nokia’nın da NFC çip seti içeren ama teknolojinin aktif olmadığı cihazları piyasaya sürdüğü ve ileride aktive edeceği yönünde hazırlıkları olduğu biliniyor. Ayrıca bu teknoloji artık SIM kartlara da konulmaya başlanmış. Hadi hayırlısı :)
Deniz KILINÇ

3 Kasım 2010 Çarşamba

Google Maps Street View

Google tarafından geliştirilen Street view, internet üzerinden sokak sokak gezerek, kullanıcılara "gerçekten oradaymış hissi" vermeyi planlayan bir uygulamadır. Bu uygulama 360°'lik fotoğrafların XML ile flash'a yüklenmesiyle oluşmaktadır. Bu fotoğraflar otomobil ve bisikletlerle koşullara göre kar motosikletleriyle durmaksızın çekim yapan yüzlerce Google çalışanı ile çekilmektedir.
1 
2
Mesela bu uygulama ile köprülerin üzerinden etrafı seyretmek, hatta binaların süslemelerini incelemek mümkün. Uygulama sayesinde internet üzerinden örneğin tatile çıkmadan önce gideceğiniz bölge hakkında fikir sahibi olabiliyor ya da satın alacağınız evin çok işlek bir cadde üzerinde mi olduğunu harita üzerinden takip edebiliyorsunuz.

3 
Fakat bu güzel bilgilerin yanında özel yaşamın ihlali iddialarına yol açan Street View yazılımı, birçok ülkede tepkiyle karşılanmıştır. Google’ın birkaç ay önce yaptığı açıklamada, bu uygulama ile sadece kablosuz ağ bağlantılarının yerlerini ve isimleri topladığını söylemişti. Fakat artan baskılar ve davalar sonucunda, Google, kablosuz ağ bilgileri haricinde e-postaları, internet adreslerini ve şifreleri de yanlışlıkla J topladığını kabul etti. Bu bilgilerin parça parça toplandığını ve en kısa zamanda silineceğini bildirdi. Bir yazılım mühendisinin geliştirdiği kodların bu amaçla yazılmadığını ama bu sonucu doğurduğunu belirtti. Şirket yetkilisi bu bilgilerin kazayla toplandığını bunun için özür dilediklerini belirtti. Google'a açılan en ilginç davalardan birisi, sigara içtiği ailesi tarafından Street View'da görülen bir çocuğun açmış olduğu tazminat davası.
Yasin ÖZCAN

1 Kasım 2010 Pazartesi

5651 Sayılı Yasa (Internet Ortamında Yapılan Yayınların Düzenlenmesi ve Bu Yayınlar Yoluyla İşlenen Suçlarla Mücadele Edilmesi)

Çıkış amacı nedir?
5651 Yasasının çıkarılmasındaki nedenleri internet servis sağlayıcılar (Örn: TTNET, Borusan, Superonline vb.) ile internet için ücretli ya da ücretsiz tüm erişim ve yer sağlayıcıların (Örn: internet kafeler, otel, hastane vb. internet erişimini paylaştıran tüm resmi ve özel kurumlar) arasında bulunan yasal zorunluluk, sorumluluk ve hükümleri kanunen belirlemektir. Buradaki asıl amaç ise internet üzerinden meydana gelebilecek, herhangi suç unsuru içerebilecek bir olaya müdahaleye ilişkin esas ve usulleri düzenlemektir.

Yasanın yaptırımları ve kapsadığı alan nedir?

5651 sayılı kanun maddesi kapsamında belirlenen gereklerin yerine getirilmesi kesinlikle zorunlu olarak tanımlanmıştır. Aksi halde ilgili kanun maddesi içerisinde belirlenen uyarı, para cezası, hapis, kapatma ve yayından kaldırma gibi yaptırımlar, ilgili internet sağlayıcı ve yer sağlayıcı kuruma uygulanacaktır.
Burada sistem yöneticilerine düşen görev, kanunda belirtilen kayıt dosyalarını saklayarak, gerektiği zaman yetkililere bu kayıtları sunabilecek bir yapı oluşturmaktır. Olası bir yaptırımından ve de prestij kaybından kaçınmak adına en kısa sürede ilgili tedbirlerin alınması gerekmektedir.

Yasanın genel yükümlülükleri nelerdir?
  1. Kullanıcıların yasal içerikte olmayan WEB sayfalarına erişimlerinin engellenmesi
  2. Erişim log ve kayıtlarının tutulması (Zaman ve Tarih Mührü ile)
  3. Networklerine bağlı kullanıcıların iç IP loglarının tutulması
  4. Eğer bir Web sayfası mevcut ise ve bu Web sayfasını kendi sunucularında barındırıyor ise dışarıdan gelen erişim log ve kayıtlarının tutulması
İlgili logların tutulması için günümüzde kullanılabilecek çeşitli firmaların halihazırda bulunan yazılım&donanım çözümleri bulunmaktadır. Bunlar ağa bağlanarak, gerek paket yakalama yöntemiyle, gerek log sunucu desteğiyle, gerek SNMP protokolünü kullanarak, gerekse ilgili kayıtların tutulduğu sunuculardaki klasörlere erişerek bahsi geçen dosyaları kendi üzerine kopyalar ve bunları dijital olarak imzalar. Kayıtların dijital olarak imzalanması verinin bütünlüğü üzerinde herhangi bir değişiklik ve oynama yapılmadığını kanıtladığı için zorunlu bir işlem olarak belirtilmiştir. Daha sonra sistem yöneticisi bu dosyaları kanunen 6 ay ila 2 yıl arasında saklamak zorundadır.
İlgili kanuna http://www.tbmm.gov.tr/kanunlar/k5651.html linkinden ulaşabilirsiniz.

Bora ENGİN

24 Ekim 2010 Pazar

Windows Phone 7 Genel Bakış

Şu an itibariyle Apple iOS başta olmak üzere Google Android, Blackberry gibi birçok mobil platform bulunmakta ve Microsoft’da bu mobil dünyada kendisine yer bulmak için mücadele ediyor . Windows mobile işletim sistemleri ilk başlarda popüler olmasına rağmen daha sonra yeterli gelişimi gösteremediğinden diğer yeni platformlar karşısında yeterince güncel kalamadı. Microsoft, Windows Phone 7 ile bu eksikliğini gidermek istiyor.
Windows phone 7 tamamen yeni bir platform olarak oluşturuldu ve şuan itibariyle windows mobile 6.x versiyonu ile çalışan telefonlar windows phone 7 ye upgrade edilemeyecek. İlk başta Microsoft, Windows Phone 7 yi, orijinal adı “Photon” olan windows mobile platformu üzerinde upgrade yaparak geliştirmeyi planlıyordu ancak daha sonra bundan vazgeçip tamamen yeni bir mobil işletim sistemi yaratmaya karar verdi. Bunun üzerine geliştirilmelere başlandı. Windows Phone 7 2009 yılında piyasaya çıkartılmak isteniyordu ancak birkaç kez ertelenmek zorunda kaldı. En sonunda 11 ekim 2010 tarihinde kullanıcılara, Microsoft CEO’su Steve Ballmer tarafında tanıtıldı.

Kullanıcı Gözüyle
Windows Phone 7 özelleştirilebilir bekleme ekranına sahip. Aşağıda da görülebilen bekleme ekranında kullanıcı kendi isteği doğrultusunda özelleştirmeler yapabiliyor.
1
Kullanıcılar fotoğraf, elektronik posta, sosyal ağ profilleri, Facebook'ta yer alan çoklu ortam içerikleri gibi akla gelebilecek birçok veriyi özgürce bekleme ekranına taşıyabiliyor (Facebook'ta yer alan profil resimleri bile dahil)
Bu özelliğin yanı sıra Xbox, Zune, Office, Bing gibi birçok servis Windows Phone 7 ye entegre edilmiş durumda. Ajanda, outlook ve internet explorer ara yüzleri kullanıcılar için kolaylık sağlayacak şekilde tasarlanmış. Windows Phone Hub adı verilen alanlar Windows Phone 7′yi Zune ile benzer kılıyor. People Hub, Pictures Hub, Music + Video Hub, Games Hub, Office Hub ve Marketplace olarak 6 farklı Hub üzerinden cihazlar kontrol edilebiliyor ve direk olarak Windows Live ve Xbox Live hesaplarına erişilebiliyor.
Windows Phone 7 ekranda 3 yön tuşu içeriyor. Bu tuşlar, aşağıdaki resimde de görüleceği üzere, o an kullanılan programı sonlandıran “Back” tuşu, ana ekrana yönlendiren “Start” ve “Search” tuşu.
2
Windows Phone 7 Android’in ve Apple iphone’un sonradan desteklediği çoklu işlem (multitasking) desteğine sahip, ancak işletim sisteminde kopyala-yapıştır özelliğini şimdilik bulunmuyor. Microsoft, bu eksikliğini 2011 başında giderileceğini açıkladı.
Windows Phone 7’nin çalışması için gerekli minimum özellikler ise;
Capacitive Touch: 4 or more contact points
Sensors: A-GPS, Accelerometer, Compass, Light, Proximity
Camera: 5 megapixels or more, Camera with a flash and dedicated camera button
Multimedia: Common detailed specs, Codec acceleration
Memory: 256 MB, 8 GB Flash or more
GPU: DirectX 9 acceleration
Processor: ARMv7 Cortex/Scorpion or better
2 screen sizes: 480×800 WVGA, 480×320 HVGA
Keyboard: Optional
Hardware Buttons: Must be fixed on the face
Programcı Gözüyle
Windows Phone 7 üzerinde programlama yapabilmek için gerekli araçlar (Windows Phone 7 Emulatorü, Windows Phone için Visual Studio 2010 , .Net Framework 4, Silverlight ve XNA Game Studio 4.0 ), microsoftun sitesinden ( http://create.msdn.com/en-us/home/getting_started ) ücretsiz olarak indirilebilir.
Windows Phone 7 üzerinde çalışacak programları .Net ortamında yazmak mümkün ancak şuan yazılım dili olarak sadece C# desteklenmekte . Windows Phone 7 üzerinde çalışacak programlar XNA framework ya da popüler olan Silverlight platfromlarında geliştirilebilir. XNA genelde 3 boyutlu, yüksek performans gerektiren oyunlarda daha uygun iken, silverlight 2 boyutlu grafik uygulamalarında daha uygun olmakta.
Sonuç olarak, Microsoft Windows Phone 7 ürününe çok büyük yatırım yapmış durumda ve ürününe çok güveniyor. Piyasadaki durumunu hep birlikte zamanla göreceğiz.
Kaynaklar :
Savaş DUMAN

21 Ekim 2010 Perşembe

VMMap Nedir?

VMMap, işletim sisteminde çalışan programların sanal ve fiziksel belleği kullanım miktarlarını rakam ve grafiklerle gösteren, ufak kullanışlı bir araçtır. Bu aracı kullanarak hedef uygulamanın grafiksel gösterimiyle beraber kullanılan kaynakların özet veya detay bellek maliyetlerini analiz etmek mümkündür. Programın yenileme ve filtreleme özellikleri bulunmakta olup, yineleme özelliğinin ötesinde iki anlık görüntü alarak, bellekteki kullanım durumlarını karşılaştırabiliriz.
VMMap’i ilk çalıştırdığımızda karşımıza sistemde çalışır durumda olan uygulamaların listesi çıkmaktadır.  Bu listede exe isimleri PID numaraları ve hangi kullanıcı ile oturum açtıkları gibi bilgileri görebiliriz.
1
İzlenecek uygulama seçimi (örneğin bir sqlsrv.exe) yapıldıktan sonra programın ana ekranı ile karşımıza gelmektedir. Program 3 bölümden oluşuyor.

1. Bölüm
2
İlk bölümde 3 toplam bilgisini görüyoruz.
  • Commit Summary Graph: Uygulama için ayırılan toplam bellek alanı ve bellek tiplerine göre oranlarının bulunduğu grafiktir.
  • Private: Diğer uygulamalarla paylaşılamayan ve uygulamanın özelindeki datalar ve bellek tiplerine göre oranlarının bulunduğu grafiktir.
  • Working Set: Uygulamanın fiziksel bellekteki toplam kapladığı alan ve bellek tiplerine göre oranlarının bulunduğu grafiktir.
2. Bölüm
3
İkinci bölümde, Committed, private ve Working set değerlerinin bellek tiplerine göre kırılım toplamları listelenmektedir. Ayrıca working set değerinin özel, paylaşılabilir ve paylaşılan olmak üzere bellek tiplerine göre değerlerini görebiliriz. Bu bölümde seçilen uygulamanın kitaplık dosyalarının kullanım boyutları (DLL,OCX), Heap ve Stack bellek boyutları ve uygulama özelindeki paylaşılamayan verilerin toplam bilgileri görülebilir.
3. Bölüm
4
Üçüncü bölüm ise tüm verilerin ayrıntılarının, bellek adresleri detayında listelendiği bölümdür. Bir önceki bölüm kullanılarak detay bilgi gruplanabilir. Options menüsünde Show Changes (Ctrl+D) seçili duruma getirilirse uygulama son iki tazelendiği (F5) süreler arasındaki değişiklikleri verir.
Bora GÜRSEL

20 Ekim 2010 Çarşamba

BLADE SUNUCULAR ve BLADE SİSTEMLER

Bir blade sunucu, fiziksel alan ve enerji kullanımını en aza indirmek için optimize edilmiş, modüler bir tasarıma sahip, sade bir sunucudur. Standart bir rack-mount (raf) sunucu bir elektrik ve ağ kablosu ile çalışabilirken, blade sunucuların pek çok bileşeni yerden ve güç tüketiminden tasarruf edebilmek için çıkarılmıştır. Birçok blade sunucuyu içinde barındıran blade şasisi ise, içindeki sunuculara enerji, ağ bağlantısı, soğutma ve yönetim hizmetlerini sağlar. Bir şasi ve blade sunuculardan oluşan bütüne blade sistemi denir.
Standart rack sunucularda 1U bir sunucunun kaplayacağı minimum yüksekliği (4.45cm) ifade eder. Kullandığımız standart kabinlerin yüksekliği ise 42U’dur, yani en çok 42 sunucu barındırabilir. Halbuki blade sunucular kullanılarak bir kabinet içerisinde 128 sunucuya çıkmak mümkündür.

BLADE KASA (ŞASİ)
Blade şasisi temel fonksiyonların dışındaki hizmetleri bütün blade sunuculara ortak olarak sunar. Blade olmayan sistemlerde bu hizmetler kapasitenin çok altında kullanıldığından hem büyük bir kapasite atıl olarak durur, hem de gereksiz yere maliyet ve ısı oluşturur. Bu hizmetleri tek noktadan sağlamak etkin kullanım sağlarken, işletme ve sahip olma maliyetlerini de düşürür.
  • Enerji: Bugün giriş seviyesi sunucuların bile çoğunda kesintisizlik için iki güç kaynağı bulunmaktadır. Atıl olan güç kaynağı hem elektrik harcar hem de ortam ısısının artmasına sebep olur.
  • Soğutma: Bilgisayarların çalışması sırasında elektronik ve mekanik bileşenler ısı üretir. Sistemin stabil çalışması için bu ısı fanlar vasıtasıyla dışarı atılmalıdır. Blade sistemler, ortak güç kullanımı dolayısı ile eşit sayıdaki sucuya kıyasla daha az ısı üretir ve dolayısı ile daha az soğutmaya ihtiyaç duyar.
  • Ağ: Günümüz bilgisayarları giderek daha hızlı, entegre ağ bileşenleri ile gelmekte ancak bu bant genişliği etkin şekilde kullanılmayıp çoğunlukla atıl kalmaktadır. Ayrıca karmaşık bir kablolama gerektirmektedir. Blade şasi ile pek çok sunucunun ağ ihtiyacı konsolide edilerek, gerektiğinde tek bir ağ kablosu üzerinden sağlanabilmektedir.
BLADE SİSTEM KULLANMANIN AVANTAJLARI
Blade sunucular, yer ve enerjiden tasarruf sağlamalarının yanı sıra; anında fonksiyon değiştirme, kapasiteyi isteğe göre ayarlama, sanallaştırmaya uygunluk gibi özellikleri sayesinde işletmelere çevik ve esnek bir BT altyapısı sunarlar. Sistem çalışır durumdayken bile blade sunucuların şasiye takılıp çıkarılabilmesi özelliği sayesinde, herhangi bir arıza halinde sistem sağlam kasalarla çalışmaya devam ederken arızalı sunucunun değişimi yapılabilir. Blade sistemlerin avantajlarını şöyle sıralayabiliriz:
  • Hızlı kurulum,
  • Operasyonel sunucu maliyetlerinin düşürülmesi,
  • Klasik sunuculara oranla daha az yer kaplaması,
  • Sanallaştırmaya ve konsolidasyona entegrasyon kolaylığı,
  • Esneklik sağlayarak kablo karmaşıklığına son verilmesi,
  • Düşük enerji tüketimi,
  • Kesintisiz iş sürekliliği,
Necmettin TÜRER