Mobil Programlama Kitabımız Çok Satanlar Listesinde

Kadir Çamoğlu ile beraber yazdığımız kitabımızın piyasa çıkmasından bu yana 5 gün geçti. Kitabımız hepsiburada.com sitesinin çok satanlar listesinde çıktıktan bir süre sonra 3. sıraya yerleşti. Gün geçtikçe bu sıranın yukarılara doğru tırmanacağını düşünmekteyim. Türkiye'deki mobil programlama konusunda bir eksiği kapatarak en kapsamlı kitap olma iddiası ile çıkan kitabımızın bu rakamlara ulaşması bizim açımızdan oldukça memnun edici.   Kitabın tanıtımı için TIKLAYINIZ!

Windows Phones 7 serisi ile Merhaba

Visual Studio 2010 Express for Windows Phones IDE’si ile windows phones isimli yeni teknoloji için geliştirmeye merhaba dedik. Bu yazımda bu teknolojiyi incelerken geliştirme aracını ve yeniliklerden bahsedeceğim. Öncelikle windows mobil 5.0 dan beri telefonlarımıza yeni ROM yüklemeye alışmıştık. Bu aşamadan sonra ise Windows Mobile 6.5 telefonlarımıza dahi yeni işletim sistemini ROM güncellemesi ile yükleyemeyeceğiz. Donanımsal olarak cihazların yeterli teknolojiye sahip olmamasını sayabiliriz. Bunun dışında Multitouch özellipi ve kapasitif ekran özelliklerinin gelmesi aynı zamanda cihazın kullanım özelliklerine uygun olarak 3 tuşun bulunması gerekiyor. Bu özellikler dahi bende büyük heyecan uyandırmaya yetti. Windows Phones ile tüm yazılım geliştirme altyapısı Silverlight üzerine inşa edilmiş gibi gözüküyor bunun yanında XNA önemli bir yer tutmakta. Önceki versiyonlarda XNA desteği yerine DirectX programlama ile uğraşmak zorundaydık artık işlerimiz biraz daha kolay. Yinede yeni platforma alışmak yazılım geliştiriciler açısından biraz tedirginlik yaratabilir. Klasik windows mobile programlama alışkanlıklarımızı bir kenara bırakmak zorundayız. Öncelikle bildiğim temellerden biri Bluetooth API’sinin değişiklik göstereceğiydi. Diğer API’lerle ilgili durum şu anda bilgim dahilinde değil. Visual Studio 2010 ile beraber gelen Mobil Proje tiplerini inceleyecek olursak karşımıza şu tipler çıkmakta;   İki seçeneğimizden ilki Silverlight for Windows Phone seçeneği. Burada Windows Phone Application seçeneği ile temel template’imiz karşımıza çıkmakta. Genel ve gelişmiş tüm programlarımızı bu yapı altında yapabilmekteyiz. Windows Phone List Application’da ise isminden anlaşılabileceği gibi listelerden oluşmuş uygulamalar yapabilmekteyiz. Class Library klasik alışkanlığımız olan kendi sınıflarımız için bir seçenek.   XNA Game Studio 4.0 ise Windows Phone Game, Game Livrary, Windows Game ,Xbox 360 gibi seçeneklerle beraber gelmekte. Bizim ilk uygulamamız Silverlight tabanıyla windows phone application olacak. Karşımıza çıkan standart görüntünün aksine ilk incelediğim yer toolbox kısmı oldu. İhtiyacıma uygun araçları görmek oldukça sevindiriciydi. Bunların ise görsellik olarak standart windows kontrollerinden daha fazla tatmin edici olması işin sevindirici bir boyutu. Baktığınız zaman eski nesil cihazlarda windows formları ile benzerlik üst düzeydeydi. Hatta normal debug ettiğiniz bir uygulamanın penceresini windows üzerinden bile açabilmeniz için gerekli yöntemler mevcuttu. Düşündüğüm zaman WPF’i port etmeleri çok zorlu bir iş olurdu. Görsel olarak port edilebilecek bir uygulama olması açısında Silverlight’ın doğru bir seçim olduğuda düşünülebilir. Tabiki bildiğimiz anlamıyla başlı başına bir silverlight değil. Bir browser’a ihtiyacınız yok. Donanım tabanlı bir silverlight klonu karşınızda diyebilirim. İlk işim açılan pencere ile beraber gelen gri tonlardan kurtulmak için çareler aramaktı. Baktığınız zaman ilk penceremizin gridlere ayrıldığını ve alttaki yapının contentgrid olduğunu gördüm. Rengi değiştirmek için background özelliğini kolayca buldum. Artık sıkıcı temel renklerden oluşan bir palet yoktu karşımda daha gelişmiş Red Green Blue değerlerini bile ayarlayabileceğim bir paletle karşılaştım.   Üstteki bölüm ise TitleGrid idi. Bundaki renkleride aynı metodla değiştirirken. TextBlocklarınıda ilk uygulamaya uygun bir isimle değiştirdim.   Hemen toolbox’umdan bir buton sürükledim. X ve Y koordinatından hizalama seçeneği mobil cihazda uygulama geliştirirken oldukça hoş bir özellik. Bu işlemleri yaparken Iphone’un eğlenceye yönelik piyasasınında sarsılacağı öngürüsünü oluşturmak zor değil. Profosyonel uygulamalarda ise Windows Mobile serisis zaten office uygulamaları ile tartışılmaz öncüydü.   Buton’a çift tıkladığımda klasik C# kod ekranım karşımdaydı. Kendimi tanıdık bir ekranda bulmak ise bu kadar görselliğin yanında oldukça büyük bir artı. Bu arada pencereme bir textbox’da sürükledim. Buton’un click event’ine her ilk yeni uygulamalarda olduğu gibi bir atama ile tamamladım.   NameSpace’lere bakmadan tabi olmaz. Yeni namespace’ler karşımda ve karıştırılacak çok şey olduğu gözükmekte. Debug->Start without Debugging ile emülatörümü çalıştırmak üzere heyecanla tıkladım. İlk uygulamamın ekran görüntüsü;   Gerçekten heyecan verici olduğu muhakkak. Fakat Windows mobile konusunda deneyiminiz varsa yeni platformda da zorluk çekeceğinizi zannetmiyorum. Kesinlikle eğlenceli zaman geçirerek adapte olabilirsiniz.  

Uygulama Minimize Edildiğinde Nasıl Kapatırım?

  Windows Mobile işletim sistemi kullanan cihazlardaki en popüler sorudur. Çünkü uygulama minimize edilse dahi sistem kaynakkklarını kullanmaya devam etmektedir. Arka planda çalışan programı şahsım adına unuttuğum dahi olabilmekte. Sistem kaynaklarını kullanması bir kenara bu işlem yüzünden pilimin kullanım süreside düşmekte. En azından kendi uygulamlarınızda bu işlemi uygulayarak kullanıcıları büyük bir dertten kurtarabilirsiniz. Bunun için biraz alt seviyeli programlamaya inmemiz ve pencere mesajlaşma fonksiyonlaraına ve parametrelerin göz atmamız gerekmekte. Program minimize butonuna basıldığında SIZE_MINIMIZED sabiti ile WM_SIZE mesajını almaktadır bu da wParam içinde gelmektedir. Bizim yapmamız gereken ise bu mesaj geldiğinde PostMessage(WM_CLOSE) metodunu tetiklemektir. Bunun için aşağıdaki kod parçası işinizi görecektir. Zamanında biraz Windows API’lerle uğraşmış yazılım geliştiriciler için oldukça aşina geleceğini tahmin etmekteyim. Uygulama kodları Native düzeydedir.   LRESULT CCloseOnMinFrame::OnSize(UINT /*uMsg*/,                                  WPARAM wParam,                                  LPARAM /*lParam*/,                                  BOOL& bHandled){    if(wParam == SIZE_MINIMIZED)    {        PostMessage(WM_CLOSE);        bHandled = TRUE;        return 0;    }    // Not handled here    bHandled = FALSE;    return 1;}   Kaynak: MVP João Paulo Figueira

Windwos Mobile 7 Tanıtılıyor!

Artık IE 7, Silverlight uygulaması ve daha fazlası Windows Mobile 7 üstünde. 15 Ağustosta yapılan Barcelo’daki Dünya Mobil kongresinde Windows Mobile 7 tanıtılıyor.Windows Mobile 7 prototipler sanal klavye ve yeni giriş metodları ile birlikte geliyor. Artık kalemlere zorunluluk kalkacak. Yeni video çözümleyiciside windows mobile ile gelecek özellikler arasında. Diğerleri ise şöyle sıralanabilir; Windows Mobile 7 için Internet Explorer Mobil 7   Qualcomm DirectShow tabanı bileşenler. Openmac ve Directshow temeli için geliştirme çözümleride içermekte Cihazların 1GHz seviyesinde işlemci barındırması bekleniyor. Bende heyecanla bekliyorum.   WİNDOWS MOBILE 7 TODAY Ekrenının ilk görüntüsü:

Mobil Cihaz ve Depolama kartında Kullanılabilir Hafıza Miktarı

  Mobil cihazımızdaki depolama kartı ve cihazın dahili hafızasındaki kullanılabilir bellek miktarını öğreneceğiz. Bunun için DLL Import yöntemi ile bir dll'i import edip bu değerleri elde etmek için bir fonksiyon kullanacağız. Import edeceğimiz DLL'in ismi "coredll.dll" kullanacağımız metod ise GetDiskFreeSpaceEx metodu olacak. Bu sayede cihazın toplam bellek miktarına ve kullanılabilir bellek miktarına erişebileceğiz. Bazen yaptığım uygulamaları tek başına ele aldığınızı tahmin etmekteyim en azından deneyimli olmayan yazılım geliştiriciler bu programın bana salt olarak ne avantajı olabilir diye düşünmekte. Onun için bazı yazılarımda ufkunuzu genişletecek bir iki ipucu vererek konuya daha değerli olduğunu bilerek bakmanızı istemekteyim. Bir cihazdaki kullanılabilir belleğin ne durumda olduğunu belirlemek o an için yazdığınız mobil uygulamanın belleği en performanslı ve optimum kullanımı sağlamanıza yarayacaktır. Kullanıcıya uygulamanın yarısında bellek yetersiz mesajı vermeniz belleği verimli şekilde kullanamadığınızın göstergesidir. Eski C/C++ geliştiricileri belleğin ne kadar önemli olduğunu bilmektedirler. Büyük uygulamalarda göreceli olarak az bellek içeren mobil cihazlarda da bu durum geçerlidir. Bu DLL'i projemizde kullanmak için aşağıdaki namespace'i projemize eklememiz gerekmektedir; using System.Runtime.InteropServices; Bu işlemi yapmak içinde Nesne Yönelimli Programlamanın bize vermiş olduğu en büyük avantajlardan biri olan bir sınıf oluşturmamız gerekecek. Aşağıdaki sınıf bu kontrolü yapmanız için gereklidir; publicclassMemStatus { [DllImport("coredll.dll")] publicstaticexternbool GetDiskFreeSpaceEx( string lpDirectoryName, outulong lpFreeBytesAvailableToCaller, outulong lpTotalNumberOfBytes, outulong lpTotalNumberOfFreeBytes); publicconststring STORAGE_INTERNAL = "\\"; publicconststring STORAGE_FLASH_CARD = "\\storage card\\";public MemStatus() { } publicstaticbool GetStorageInfo( string storagePath, outulong totalBytes,outulong availBytes) { ulong freeBytesAvail; ulong totalBytesAvail; ulong freeBytesTotal; bool result = GetDiskFreeSpaceEx (storagePath, out freeBytesAvail, out totalBytesAvail, out freeBytesTotal); if (result == true) { totalBytes = totalBytesAvail; availBytes = freeBytesAvail; } else { totalBytes = ulong.MaxValue;availBytes = ulong.MaxValue; } return result; } } Sınıfımızı oluşturduktan sonra aşağıdakine benzer bir kullanıcı arayüzü tanımlayalım; Yazdığımız sınıfı formumuzun içinde kullanmak içinde aşağıdaki kodu kullanalım; publicpartialclassForm1 : Form { public Form1() { InitializeComponent(); } privatevoid menuItem1_Click(object sender, EventArgs e) { ulong totalBytes; ulong availBytes; if (MemStatus.GetStorageInfo( MemStatus.STORAGE_INTERNAL, out totalBytes,out availBytes)) { textBox1.Text = totalBytes.ToString(); textBox2.Text = availBytes.ToString(); } else { textBox1.Text = "?";textBox2.Text = "?"; } } } Butona bastığımızda ise çıktımız aşağıdaki gibi olacaktır; Bu sayede dahili belleği görebildik Storage Kartın Path yolu ve mobil cihazın dahili belleğine nasıl bakacağımız koddaki gibi pathlerde gösterilmiştir. Yazan: Volkan Atasever Kaynaklar: http://www.dotnetfordevices.com

Mobil İçin Evrensel Download Aracı

  Bu araç sayesinde windows mobile ile birlikte gelen internet explorer tarzı tarayıcılar üzerinden download yapabilme işlemini evrensel bir hale getirmiş bulunmaktayız. Bu uygulama sayesinde yolu verilen uygulama mobile cihaza indirilmektedir. Mobile cihaz için hazırlanan bir cab dosyası ise direkt çalıştıralabilir şekilde indirebilirsiniz. Mobile için bazı uygulamalar ise active sync bağlantısını veya vista üzerinde windows mobile device center’a ihtiyaç duyacaktır.   Uygulamamızın tasarımı yukarıdaki şekilde olsun. Download butonuna bastığımızda uygulamayı mobil cihazımıza indirsin. Kodlamaya geçerken temel değişkenlerimizi ve isim uzaylarımızı ekleyelim. Bir windows uygulaması açtığımızda standart gelen namespace’lere ilave olarak; using System.Net; using System.IO; isim uzaylarınıda eklememiz gerekmektedir. Bu isim uzaylarındaki sınıflar download işlemini yapmamız için yeterli düzeydedir. Sabit olarak;              const string _downloadUrl = @"http://download.microsoft.com/download/6/c/0/6c03246d-e97f-460f-893e-785c1dda82b1/mnyppc06.exe";         const string _localFileName = @"\Program Files\mnyppc06.exe";                const int _downloadBlockSize = 4096; kullanacağız. downloadUrl, bizim uygulamayı indirceğimiz url. localFileName hedey klasör ve isim. Block size olara 4096 değerini veriyoruz. Menüdeki download isimli butonumuzun click event’ine ise aşağıdaki kodu yazalım; HttpWebRequest httpRequest = null; HttpWebResponse httpResponse = null; Stream responseStream = null; FileStream localFileStream = null; try            {     httpRequest = (HttpWebRequest)WebRequest.Create(_downloadUrl);     httpRequest.Method = "GET";     httpResponse = (HttpWebResponse)httpRequest.GetResponse();     responseStream = httpResponse.GetResponseStream();     localFileStream = new FileStream(_localFileName, FileMode.Create);     Byte[] buffer = new Byte[_downloadBlockSize];     int bytesRead = responseStream.Read(buffer, 0, _downloadBlockSize);     while (bytesRead > 0)     {          localFileStream.Write(buffer, 0, bytesRead);          bytesRead = responseStream.Read(buffer, 0, _downloadBlockSize);     }         MessageBox.Show("Success!!", "Download Complete"); }            catch (Exception ex) {         MessageBox.Show(ex.Message, "Download Failed"); } finally  {       if (httpResponse != null)            httpResponse.Close();        if (responseStream != null)            responseStream.Close();        if (localFileStream != null)            localFileStream.Close(); } Yukarıdaki kodda gördüğünüz standart windows veya konsol uygulamaları denemelerimde kullandığım HttpWebRequest gibi sınıflardır. Bu sayede tarayıcıya bağlı kalmaktan kurtulmuş ve windows mobile için evrensel bir dosya indirme aracı yapmış oluyoruz. Bu uygulamayı kendiniz daha fazla geliştirebilirsiniz. Örneğin bir url kutusu koyabilirsiniz. Emülatörle denemelerinizi yaparken bilgisayar ile internet bağlantısı yapmayı unutmayın.  Kaynak: MSDN

High Capacity Color Barcode (Microsoft Tag) - 2

  Teknik ve Uygulaması Bu api Microsoft tarafından Microsoft Tag Beta Public API ismi altında yayımlanmakta ve herkese açık bir web servis olarak sunulmaktadır. Beta versiyonuna başvurduğunuz size Public API’yi kullanmanız için bir anahtar verilmektedir. Bu anahtarla; https://ws.tag.microsoft.com/MIBPService.wsdl adresinden bu api’yi kullanabilmektesiniz. Hesabınıza 500 tane kategori açma ve 5000’e kadar tag oluşturma ve silme izni verilmektedir. Bu tag’in web servisini nasıl projeme tanıtabilirim?a-) Visual Studio projesi yaratın b-) Project explorer menüsünden service reference’a sağ tıklayıp add service reference seçeneğini seçin. c-) Adres olarak: https://ws.tag.microsoft.com/MIBPService.wsdlgirin d-) İsim uzaylarınızı kontrol edin ve aynı isim uzayında birleştirin. Nasıl Tag Yaratabilirim ? Bunun için KEY’inizi almış olmanız gerekmektedir.     private void CreateTag()    {            try        {             MIBPContractClient OMIBPClient = new MIBPContractClient();          UserCredential oCredential = new UserCredential();        oCredential.AccessToken = "Erişim anahtarınızı giriniz";       URITag uriTag = new URITag();       uriTag.MedFiUrl = http://www.birurlgir.com;       uriTag.UTCStartDate = new DateTime(yyyy, mm, dd);       uriTag.UTCEndDate = new DateTime(yyyy, mm, dd);       OMIBPClient.CreateTag(oCredential, "Kategori", uriTag);      }      catch      {             throw;      }    }  Nasıl Tag Editleyebilirim ?   private void UpdateTag()     {         try         {             MIBPContractClient OMIBPClient = new MIBPContractClient();             UserCredential oCredential = new UserCredential();               oCredential.AccessToken = "Erişim anahtarınızı giriniz";                     vTag.Title = "Yeni tag ismi";               OMIBPClient.UpdateTag(oCredential, "Kategori ismi", "oluşturulan tagın ismi", vTag);         }         catch         {             throw;         }     }  Tagi nasıl aktif hale getirebilir veya durdurabilirim ? private void ActivateTag()     {         try         {             MIBPContractClient OMIBPClient = new MIBPContractClient();             UserCredential oCredential = new UserCredential();               oCredential.AccessToken = "Erişim anahtarınızı giriniz";                     OMIBPClient.ActivateTag(oCredential, "Kategori ismi", "Tag ismi");         }         catch         {             throw;         }     }         private void PauseTag()     {         try         {             MIBPContractClient OMIBPClient = new MIBPContractClient();             UserCredential oCredential = new UserCredential();               oCredential.AccessToken = "Erişim anahtarınızı giriniz";                     OMIBPClient.PauseTag(oCredential, "Kategori ismi", "Tag ismi");         }         catch         {             throw;         }     } Nasıl Kategori tanımalayabilirim ?     private void CreateCategory()     {         try         {             Category oCat = new Category();             MIBPContractClient OMIBPClient = new MIBPContractClient();             UserCredential oCredential = new UserCredential();               oCredential.AccessToken = "Erişim anahtarınızı giriniz";             oCat.Name = "Kategori ismi";             oCat.UTCEndDate = new DateTime(yyyy, mm, dd);             oCat.UTCStartDate = new DateTime(yyyy, mm, dd);               OMIBPClient.CreateCategory(oCredential, oCat);         }         catch         {             throw;         }     }        Kategoriyi nasıl düzenleyebilirim ?     private void UpdateCategory()     {         try         {             Category oCat = new Category();             MIBPContractClient OMIBPClient = new MIBPContractClient();             UserCredential oCredential = new UserCredential();               oCredential.AccessToken = "Erişim anahtarınızı giriniz";             oCat.Name = "Yeni kategor ismi";             oCat.UTCEndDate = new DateTime(yyyy, mm, dd);             oCat.UTCStartDate = new DateTime(yyyy, mm, dd);               OMIBPClient.UpdateCategory(oCredential, "kategori ismi", oCat);         }         catch         {             throw;         }     } Kategoriyi nasıl aktif hale getirir veya durdurabilirim ?     private void ActivateCategory()     {         try         {             Category oCat = new Category();             MIBPContractClient OMIBPClient = new MIBPContractClient();             UserCredential oCredential = new UserCredential();               oCredential.AccessToken = "Erişim anahtarınızı giriniz";             OMIBPClient.ActivateCategory(oCredential, "kategori ismi");         }         catch         {             throw;         }     }           private void PauseCategory()     {         try         {             Category oCat = new Category();             MIBPContractClient OMIBPClient = new MIBPContractClient();             UserCredential oCredential = new UserCredential();               oCredential.AccessToken = "Erişim anahtarınızı giriniz";             OMIBPClient.PauseCategory(oCredential, "kategori ismi");         }         catch         {             throw;         }     }       Nasıl Barkod yaratabilirim ? private void CreateBarcode()     {         try         {             MIBPContractClient OMIBPClient = new MIBPContractClient();             UserCredential oCredential = new UserCredential();               oCredential.AccessToken = "erişim anahtarınızı giriniz";             byte[] oBarcode = OMIBPClient.GetBarcode(oCredential, "kategori ismi", "Tag ismi",                                                      ImageTypes.tiff, Size,                                                      DecorationType.HCCBRP_DECORATION_NONE,                                                      Is Black or White);        }         catch         {             throw;         }     }  Microsoft Tag’in beta sürümünde şu anda bu özellikler kullanılabilmektedir. Sonuç Bu makalede özellikle yüksek kapasiteli renkli barkod uygulamasının Microsoft firmasının Microsoft Tag ticari ismi ile piyasaya sunduğu bir teknolojiyi inceledik. Uygulamanın hali hazırda piyasada kullanım alanlarını incelerken kullanılabilecek olası sahalarada örnek verdik.  Görmüş olduğunuz gibi kullanım alanlarının sınırının oldukça geniş olan bu teknoloji avantajlar getirdiği gibi dezavanatajları da yapısı ile birlikte getirmektedir. Biz yazılım mühendisleri veya yazılım uzmanları açısından en can sıkıcı nokta bu uygulamanın beta aşamasında dahi belli bir Tag ve kategori oluşturma sınırı ile sunulması oldu. Teknolojinin web servis kullanılarak dağıtılması HardCore yazılımcılar açısından bir dezavantaj. Uygulumalarında yüksek seviye kontrol edilebilirlik arayanlar 3. Parti yazılımları genellik bir library veya DLL alarak kullanmaya alışmıştı. En azından bir müddet sıkıntı yaratsada Bulut Teknolojilerinin biz yazılım geliştiricilere yansıması da bu olsa gerek. Yazan: Volkan Atasever  Kaynaklar: Microsoft Research                     Microsoft Tag Developer Portal                 

High Capacity Color Barcode (Microsoft Tag) - 1

Bu makalemde Yüksek Kapasiteli Renkli Barkod (High Capacity Barcode Teknolojisi) bahsederken aynı zamanda kullanım alanına gerçek yaşamdan örnek verip günlük hayatımızda veya  toplumun belli bir kesmi tarafından ne kadar yoğun olarak kullanılabileceğini inceleyeceğiz. Önce geçmiş Barkod teknolojisi ve yeni bir teknoloji olan Hisgh Capacity Color Barcode teknolojisini inceleyeceğiz. 1940'ların sonunda bir lisansüstü öğrencisi olan ABD'li Bernard Silver, öğrenim gördüğü Drexel Teknoloji Enstitüsü'ne gelen bir market zinciri sahibinin kasada tüm ürün bilgilerini otomatik kaydedecek bir sistem geliştirilmesini istediğini, ama enstitünün konuyla ilgilenmediğini gördü. Bu fikir Silver'in ilgisini çekti ve doktora öğrencisi olan arkadaşı ABD'li Norman Woodland'a bundan söz etti. Konu üzerinde birlikte çalışmaya başladılar. İlk barkod uygulamasını yaza Bernard ve arkadaşı bu sayede bu teknolojilerle tanışmamızı sağladı. Fakat 1940’larda keşfedilen bu teknoloji zamanla geliştirildi fakat günümüz dünyasında her alanda kullanılabilecek ve daha fazla veri saklayabilecek 2 boyutlu analog medyalara ihtiyaç duyuldu.  Yeni teknolojinin ismi ise High Capacity Color Barcode olarak duymaya başladık.   High Capacity Color Barcode(Yüksek Kapasiteli Renkli Barkod) Teknolojisi High Capacity Color Barcode teknolojisi, Microsoft Research tarafından geliştirilmiş olup dijital verileri analog medyalar üstünde saklamamıza olanak sağlamaktadır. Bu teknolojisi sayesinde görüntü alabilen herhangi bir cihaz sayesinde bu görüntüyü dijital ortama aktarıp veriyi çekebilmemize olanak sağlamaktadır.Microsoft’a göre klasik barkod uygulamalarının yerini almaktansa daha büyük verileri saklamak amaıcyla kullanılacak bir teknoloji. Bu uygulamayı kullanmak için ise günümüzde en uygun cihaz PDA diye tabir ettiğimiz Windows Mobile kullanan smartphone veya profosyonel avuçiçi bilgisayarlardır. Her hücre birden fazla renk ile ifade edildiği için daha fazla sayıda bilgi saklamaya elverişli hale gelmiştir. Daha fazla bilgi saklarken yapısı gereği çok küçük bir alanı kaplayabilmektedir.   Solda; 8 renk barkod 84 RAW byte saklayabilmektedir. Sağda; 4 renk barkod 58 RAW byte saklayabilmektedir. En solda siyah beyaz matris 1byte yani 8 bit saklayabilmektedir ve 8 sembol kullanıyor. 4 renk barkod 1 byte saklayabiliyor ve 4 sembol kullanıyor. En sağdaki ise 8 renkli barkod 1byte saklıyor ve 2.66 sembol kullanmakta.   Oluşturulan Tag’ler herhangi bir mürekkep püskürtmeli veya lazer yazıcıyla basılabilmekte olup 600dpi çözünürlüklü herhangi kartvizit tarayıcısıyla okunabilmektedir. Bu teknolojinin temeli ise renkli üçgenlerden oluşuyor diyebilmekteyiz. Yukarıdaki görüntü herhangi bir 320x240 çözünürlüklü bir webcam ile okunabilmektedir. HCCB ile kimlik numarası, e-mail adresi ve internet site adresini saklayabilmektedir.   Microsoft Tag’ları herhangi bir platform veya işletim isteminde çalışmaktadır. Buradaki asıl amaç Mobil cihazlardaki kullanım alanın arttırılması ve mobilize yaşama geçişte önemli bir adım olarak görülmektedir.Yukarıda resimde 70 piksellik bir görüntüde dahi barkod okunabilmektedir.    UYGULAMA ALANLARI Ülkemizde bu uygulamanın öncülerinden biride Hürriyet Gazetesidir. Haberlerinin yanında vermiş olduğu yüksek kapasiteli tag’lerle insanlara aynı anda haberin video’sunuda izleme olanağı sunmaktadır. Kullanım alanları ise çok geniş olduğu için bunlara değinip incelemek istemekteyim. Yukarıdada bahsettiğim gibi Tag’leri kullanabilmek için herhangi bir kamerası olan ve yeterli güçte realtime görüntü yakalayabilen her cihaz bu tagleri hareketli ortamda dahi yakalayabilmektedir. Bu makalenin ikinci serisinde teknik alan ve kullanımlar irdelenecektir. Yazan: Volkan Atasever Kaynaklar: Microsoft Research                     Microsoft Tag Developer Portal                     WikiPedia