PCWORLD Aralık Sayısındaki Yazı Dizim - Mobil Programlama

Dünyanın en çok satan bilgisayar dergisi PCWORLD'de aralık ayından itibaren mobil programlama isminde bir yazı dizisine başladım. Aralık ayından itibaren Mobil Cihazların Devrimi ve Programlama konsepti altında hazırladığım yazı dizisini okuyabilirsiniz. Gerçekten çok kaliteli olan PCWORLD dergisinde yazmak benim için oldukça keyifli. Konu Başlığım: Mobil Programlama - Windows Mobile işletim sistemleri üstünde programlamayı anlatan yeni yazı dizim.

Visual Studio 2010 Beta 2 ve Mobil Uygulama Geliştirmek

Visual Studio 2010 Beta 2 does not support Smart Device Development. Visual Studio 2010 beta 2 ile şu anda windows mobile uygulamaları içeren yazılımlar geliştirememekteyiz. Sanırım güzel süprizler product çıktığında bizi bekliyor. Windows mobile 7'nin ekran görüntüleri dolaşmaya başladı ve Visual Studio Beta 2 bundan çok daha önce sunulmuştu. Sistem alt yapısında biraz değişiklikler yapılacağı hissi vermekte.

Office Mobile 2010 Beta

Office Mobile 2010, PDC 2009 da duyuruldu. Gerçekten oldukça gelişmiş özellikleri ile beraber mobil cihazlarda da diğer bilgisayarlar gibi tüm işlemlerimizi gerçekleştirebilmekteyiz. Tek farkı daha hafif ve daha taşınabilir.   Office mobile 2010 ile beraber gelen word mobile, excel mobile gibi office uygulamasının temellerini oluşturan yazılımlar dışında sharepoint workspace mobile yazılımıda beraberinde gelmiş bulunmakta. Sharepoint 2007 ile yapılan sıçrayış sharepoint 2010’un beta sürümlerinde kendini çok daha gelişmiş ve sağlam bir yapıyla pekiştirmişti. Sharepoint’in bir uzantısının da windows mobile işletim sistemi kullanan, office mobil 2010 ile gelen yazılımda görebilmekteyiz. Excel Mobil viewer, powerpoint viewer ve diğer göstericiler daha amaca yönelik hizmet vermekte. Ekran görüntüleri: Imajlar: The official blog of the Microsoft Office product development group http://blogs.technet.com/office2010

Bifid Şifreleme (İki Boyutlu Şifreleme)

v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} Normal 0 false 21 false false false TR X-NONE X-NONE     /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} Bifid şifreleme de, 5x5 bir matris alınır,  satır ve sütunlar numaralandırılır. Bu matris bizim rasgele oluşturacağımız matristir. 5x5 olabileceği gibi,7x7 veya 8x8 gibi orantılı büyüklüklerde matris oluşturabiliriz. Mesajı sabit sayıda harf içeren parçalara ayrılır, daha sonra her harfin altına satır ve kolon numaraları yazılır. Bu sayede matrisimizde satır ve sütun rakamlarını kullanmış oluruz. Gruplamalar matrisin satır veya sütun büyüklüğü kadardır. ve daha sonra her grup içinde kalarak sayıları sırasıyla 11555 14535 52453 33435 . . . şeklinde okuyup ikili rakamlardan oluşan 11 55 51 45 35 52 . . . şeklindeki parçalara ayrılır. Ve bu parçaların tablodaki harf karşılıkları bize gizli bir mesaj verecektir. Şifrelenmiş rakamımız bu sayede elimize geçmiş olacaktır. Bu şifreleme için kullandığım arayüz aşağıdadır. Konsol uygulaması olarak sade bir arayüz kullandım.    class Program     {         static void Main(string[] args)         {             string d;             do{             Bifid bfd = new Bifid();                         Console.WriteLine("\nBifid Şifreleme");             Console.WriteLine("Açmak için 1");             Console.WriteLine("Şifreleme için 2");             Console.WriteLine("Çıkmak için 5");             d=Console.ReadLine();             if(d=="1"){                 string msj;                 string don;                 Console.WriteLine("Decrypt yapılacak mesajı girin");                 msj = Console.ReadLine();                 don=bfd.EncryptDecrypt(msj, false);                 Console.Write(don);             }             else if(d=="2"){                 string msj;                 string don;                 Console.WriteLine("Encrypt yapılacak mesajı girin");                 msj = Console.ReadLine();                 don = bfd.EncryptDecrypt(msj, true);                 Console.WriteLine(don);             }             else if(d=="5")                 break;             else             Console.WriteLine("Lütfen seçim yağınız çıkış için 5");                        }while(d!="5");         }     } Bifid Algoritması için bifid şifreleme sınıfım; public class Bifid     {         string[,] KeyMatrix = new string[5, 5];           public Bifid()         {             BuildKeyMatrix();         }           private void BuildKeyMatrix()         {             int k = 65;             for (int i = 0; i < 5; i++)             {                 for (int j = 0; j < 5; j++)                 {                     if (k == 74) { k++; } // j’yi alma  (j ascii = 64)                     KeyMatrix[i, j] = ((char)k).ToString();                     k++;                 }             }         }           public string EncryptDecrypt(string Text, bool Encrypt)         {             int k = 0;             string CharofMessage = string.Empty;             StringBuilder sb1 = new StringBuilder();             StringBuilder sb2 = new StringBuilder();             StringBuilder sbOut = new StringBuilder();             bool HasGotChar = false;               while (k < Text.Length)             {                 CharofMessage = Text.Substring(k, 1);                 for (int i = 0; i < 5; i++)                 {                     for (int j = 0; j < 5; j++)                     {                         if (string.Compare(KeyMatrix[i, j], CharofMessage, true) == 0)                         {                             sb1.Append(i.ToString());                             if (Encrypt)                                 sb2.Append(j.ToString());                             else                                 sb1.Append(j.ToString());                             HasGotChar = true;                             break;                         }                     }                     if (HasGotChar)                     {                         HasGotChar = false;                         break;                     }                 }                 k++;             }               k = 0;               if (Encrypt)             {                 sb1.Append(sb2.ToString());                 while (k < sb1.Length)                 {                     sbOut.Append(KeyMatrix[Convert.ToInt32(sb1[k].ToString()), Convert.ToInt32(sb1[k + 1].ToString())]);                     k += 2;                 }             }             else             {                 int SplitNum = (sb1.Length) / 2;                 while (k < SplitNum)                 {                     sbOut.Append(KeyMatrix[Convert.ToInt32(sb1[k].ToString()), Convert.ToInt32(sb1[k + SplitNum].ToString())]);                     k++;                 }             }               return sbOut.ToString();         }     }   Bu sınıfta üç temel işlem gerçekleşmektedir. 5x5 boyutundaki matrisin oluşumu. Mesajın şifrelenmesi ve mesajın çözülmesi.     Kaynaklar: [1] Öğr. Gör. Erdal Güvenoğlu’ nun Bilgi Sistemleri ve Güvenliği Ders notları [2]http://programmingpraxis.com/2009/10/13/bifid-cipher/

Windows Mobile ve aygıt ismi bilmecesi

  Windows Mobile işletim sistemi kullanan mobil cihazlar oldukça revaçta. Bu cihazların profosyonel manada kullanıldığı ise bir gerçektir. Bir server ve birden fazla PDA’in bu serverla bağlantılı olduğu yazılımlar ise oldukça önemli yer tutmaktadır. Bunun ülkemizdeki en güzel örneği  kafe-restorant tarzı işletmelerin sipariş sistemi diyebilirim. Sisteme yeni bir mobil cihaz eklendiğinde veya sistemdeki konfigürasyonlar değiştirildiğinde mobil cihazların aygıt ismini değiştirmek veya bu cihazlara yeni bir aygıt ismi vermek gerekebilir. Bu bağlamda aygıt ismi mobil cihazda; HKEY_LOCAL_MACHINE\Ident\Name registry dosyasının altında tutulmaktadır. Registry’e ulaşmak için kullanacağımız isim uzayı; using Microsoft.Win32;     şeklindedir. Registry’i değiştirmek için ise aşağıdaki metodu kullanabiliriz.     private void aygitayarla(string aygitismi)     {       using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Ident", true))       {         key.SetValue("Name", aygitismi);       }     } Device ismini geri döndürmek için ise;     private string ayarial()     {       using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Ident", false))       {         return (string)key.GetValue("Name");       }     } ayarial() metodu sayesinde değişikliğimizin uygulanıp uygulanmadığını inceleyebiliyoruz. İkinci değişiklik kontrolünü ise kontrol panelden yapabiliriz bunun için doğrulama seçeneği ile mobil cihazın kontrol paneline uygulamamızdan yönlendirme yapabilmemiz mümkün bunun için; Process.Start("ctlpnl.exe", "cplmain.cpl,5,1");   kaynak: http://www.christec.co.nz/blog/

SQL Server'da kolon isimlerinde özel karakter kullanmak

Çoğunlukla kendi tablolarımızı oluştururken kağıt üstünde özel karakterler içeren isimler veririz. Sql server ise bu özel karakterlere izin vermez. Tablo isimlerini eğer standar tablo ismi gibi yazarsanız bu sorunu yaşarsınız fakat bu sorunu köşeli parantez kullanarak aşabiliyoruz. Aşağıdaki örnekte normal kullanımda alınan hata mesajıda ektedir. create table deneme(m/v varchar(3)) Msg 102, Level 15, State 1, Line 1 Incorrect syntax near '/'. Köşeli parantezlerimizi kullanıp aynı kodu yazdığımızda ise; create table deneme([m/v] varchar(3)) Command(s) completed successfully.  

Özelleştirilmiş DataBase Rolü tanımlamak ve izinleri yönetmek

Normal021falsefalsefalseTRX-NONEX-NONE/* Style Definitions */table.MsoNormalTable{mso-style-name:"Table Normal";mso-tstyle-rowband-size:0;mso-tstyle-colband-size:0;mso-style-noshow:yes;mso-style-priority:99;mso-style-qformat:yes;mso-style-parent:"";mso-padding-alt:0cm 5.4pt 0cm 5.4pt;mso-para-margin-top:0cm;mso-para-margin-right:0cm;mso-para-margin-bottom:10.0pt;mso-para-margin-left:0cm;line-height:115%;mso-pagination:widow-orphan;font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin;} Özelleştirilmiş veri tabanı rolleri sayesinde kullanıclara istediğimiz gibi özelleştirebildiğimiz rolleri atamamızı sağlar bu sayede özel bir rol tanımlayıp istediğimiz sayıda kullanıcıya bu rolleri atayabiliriz. Bunları yapmak bize hız ve veritabanımızı da daha kolay yönetmemizi sağlamaktadır. Aşağıda yeni bir rol tanımlayıp bu role kendi seçimimiz olan rolleri verip kullanıcımıza da bu rolleri atamktayız. Scriptte kullandığım sp_addrolemember prosedürü sql server'a ait bir prosedür olup bu rolleri kullanıcının rolü haline getirmemizi sağlamaktadır.   Bu adımda AdventureWorks database'i üstünde rol yaratmaktayız; USEAdventureWorks GO CREATE ROLE [TestRol_1] AUTHORIZATION[dbo] Go   Burada tanımladığımız rol'e izinlerimizi veriyoruz. USE AdventureWorks GO GRANT ALTER,EXECUTE, SELECT,INSERT,UPDATE,DELETE ON SCHEMA ::dbo TO TestRol_1 Go   USEAdventureWorks GO GRANT BACKUP DATABASE,BACKUP LOG To [TestRol_1] Go   SQL Server'ın ken içinde barındırdığı sp_addrolemember prosedürü ile rolümüze kullanıcı eklemekteyiz. USEAdventureWorks GO EXEC sp_addrolememberN'TestRol_1', N'USER_ISMI' GO   Bu adımda rolünü tanımladığımız kullanıcı için Windows Login hakkı vermekteyiz varsayılan veritabanı olaraksa AdventureWork veritabanını kullanmaktayız. USEAdventureWorks GO CREATE LOGIN [DenemeDomain\USER_ISMI] FROM WINDOWS WITH DEFAULT_DATABASE=AdventureWorks GO   Bu adımda veri tabanı için kullanıcımızı tanımlamaktayız. USEAdventureWorks GO CREATE USER [USER_ISMI] FORLOGIN [DenemeDomain\USER_ISMI] GO   Kaynak: Namwar Rizvi

Windows Mobile ile Görüntü İşleme

  Mobil cihazlar özellikle Windows Mobile kullanan cihazlar hayatımıza girdiğinden beri sıradan masaüstü ve dizüstü bilgisayarla yaptığımız işlemlerin hepsini bu cihazlarlada yapabilir seviyeye geldik. İşlemci güçleri ve depolama kapasiteleri arttığı için artık ben PDA=Desktop=Laptop denklemini her alanda söylemeye başladım. Bazı cihazlarda resimleri işlemek için gerekli olan yazılım gömülü gelmekte fakat PDA’lerin bazı versiyonlarında yok veya tam donanımlı bir image işleme yazılımı bulunmamakta. Bulunsa dahi çoğu teknoloji için durağan bir görüntü işlemek yazılım geliştirici kişi tarafından bir ihtiyaç halini almaktadır. Bu yazımda sizlere durağan görüntü olan image ler ile Windows Mobile cihazın kamerasından veya dışarıdan aldığınız görüntüyü işlemeyi göstermek istemekteyim. Burada asıl zorluk .Net Framework’ün geniş olanaklarından .Net Compact Framework’un kısıtlı olanaklarına geçiş yaptığımızdan ötürü olacaktır.   RGB mantığı ve kısmende olsa unsafe kod kullanacağımızı belirtmek isterim. Öncelikle kullanıcı arayüzümüzü oluşturalım;   Bu arayüz sayesinde kırmızı,yeşil ve mavi değerlerimizin her tonunu ve birlikte yansıyan her rengi verebilmekteyiz. Bir pixel’in Red,Green veya Blue değerinin 255 aldığını düşünürsek, toplam bir imaja verebileceğimiz renk sayısı, 255*255*255 olacaktır. Yeni Renk kısmında ise oluşan renkleri görmekteyiz. Formumuzun kodu aşağıdaki şekildedir;   using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;     public partial class renkminimize : Form     {         Image islenecek;         menu mn;         public renkminimize(Image img,menu mnu)         {             mn = mnu;             islenecek = img;             InitializeComponent();         }           private void menuItem1_Click(object sender, EventArgs e)         {             mn.Show();             this.Dispose();         }         private void deger()         {             Color newColor = Color.FromArgb(trackBar1.Value, trackBar2.Value, trackBar3.Value);             label5.BackColor = newColor;         }         private void trackBar1_ValueChanged(object sender, EventArgs e)         {             deger();         }           private void trackBar2_ValueChanged(object sender, EventArgs e)         {             deger();         }           private void trackBar3_ValueChanged(object sender, EventArgs e)         {             deger();         }           private void menuItem2_Click(object sender, EventArgs e)         {             Bitmap bmp=new Bitmap(islenecek);             bool donus = filtercore.ColorChangeMinimize(bmp, trackBar1.Value, trackBar2.Value, trackBar3.Value);             Image img= bmp;             menu mnn = new menu(img);                       mn.Dispose();             this.Dispose();             mnn.Show();         } } Trackbar’daki değerlerle Color sınıfını kullanarak yeni rengimizi herhangi bir trackbar değişiminde tutmaktayız. Bu sayede her renk Color sınıfı sayesinde elimizde olmakta. FilterCore sınıfımız ise aşağıda bu sayede yeni rengi imaja uygulayabilmekteyiz;   public class filtercore {         public static bool ColorChangeMinimize(Bitmap b, int red, int green, int blue)         {             BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb);               int stride = bmData.Stride;             System.IntPtr Scan0 = bmData.Scan0;               unsafe             {                 byte* p = (byte*)(void*)Scan0;                   int nOffset = stride - b.Width * 3;                 int Pixel;                   for (int y = 0; y < b.Height; ++y)                 {                     for (int x = 0; x < b.Width; ++x)                     {                         Pixel = p[2] + red;                         Pixel = Math.Max(Pixel, 0);                           p[2] = (byte)Math.Min(255, Pixel);                           Pixel = p[1] + green;                         Pixel = Math.Max(Pixel, 0);                           p[1] = (byte)Math.Min(255, Pixel);                           Pixel = p[0] + blue;                         Pixel = Math.Max(Pixel, 0);                           p[0] = (byte)Math.Min(255, Pixel);                           p += 3;                     }                     p += nOffset;                 }             }               b.UnlockBits(bmData);               return true;         }   } Bu sınıf sayesinde resmimizi unsafe olarak piksel piksel işleyebilmekteyiz. Her byte’ına ulaştığımız için tüm resimin kontrolü elimizde.                Ana menümüzden renkminimize sınıfına ise bir image göndererek çağırmalıyız;                   renkminimize rnkd = new renkminimize(this.pictureBox1.Image, this);                 rnkd.Show();           this.Hide();  Programımızın çalışmasını ise aşağıdaki ekran görüntülerinden görebilirsiniz. Aşağıdaki değerlerin renk sonucunu realtime renk paletinden görebilirsiniz.  Uygulaya bastıktan sonra ana menüdeki picturebox'ın içine yeni renkteki imajımız yerleşecektir.       Yeni imaj !    Kaynak: imaj işleme sınıfı, codeproject.com