29 Oca 2008 WAP’A GİRİŞ Kategori: Mobil Etiketler: Windows Phone 2 Yorum Merhaba arkadaşlar bu makalemizde wap sitelerinin nasıl geliştirildiğine, geliştirme için neye ihtiyaç duyduğumuza bakıp WAP Dünyasına hızlı bir adım atacağız.WAP Nedir?Wap [Wireless Application Protocol] mobil telefonlar ve wireless aygıtlar ile Internet servislerine baglanmamamızı saglayan bir standarttır. Evinizdeki bilgisayarınız da internet üzerinden yapabildiginiz her seyi Cep telefonunuz ile de yapabilmenizi saglıyor.Aslında WEB'den çok fazla bir farkı yoktur. Host edilmesi, gelistirme ortamı aynı web'de oldugu gibidir. Bazı cihazlar WML desteklerken son dönem de özellikle tüm telefonlar da XHTML hatta HTML formatlarını desteklemeye basladı.WAP - WEB Ne Fark Var?Aslında çok fazla fark yoktur. Özellikle gelisen teknoloji ile hemen hemen her cep telefonunda ve Mobile aygıtlar da Mobile browser'lar oldukça gelisti. Bu yüzden WEB'de yaptıgımız her seyi WAP'ta da yapabiliyoruz. WAP ilk zamanlarda Mobil Eglence için kullanıldıysa da simdi neredeyse tüm web sitelerinin birde wap servisi var. Bunun için en iyi örnek bankaların Internet Subelerini WAP' a tasımalarıdır... Teknik olarak farklılıklara bakacak olursak, Bazı eski telefonlarda ve aygıtlarda CSS (Sitil Dosyaları) kullanılamıyor. Ekran boyutunun küçük olması nedeniyle ne yazık ki WEB' de oldugumuz kadar özgür degiliz. Bu yüzden telefonların ve mobile aygıtların izin verdigi kadar esneyebiliyoruz. Örnek WAP Sitelerihttp://wap.garanti.com.tr > Garanti Wap Subesihttp://wap.monster.com.tr > Monster Kariyer Sirketi Wap Sitesihttp://wap.logizmo.com > Logo Melodi Eglence ServisiBenzer olarak kullanılan bir çok Web Sitesi vardır. Nasıl WAP Sitesi Gelistirebiliriz?WAP Sitemizi Host etmek için Web Sunucusu,WAP Sitemizi Görüntülemek için Internet Explorer,WAP Sitemizi Gelistirmek için Visual Studio (HTML, WML, ASP, ASPX, PHP vs. bütün programlama dilleri ile WAP sitesi gelistirebiliriz),Yazdıgımız Kodu handle etmek için .Net Framework,Test etmek için WAP emulator örnegin: http://waprunner.wap3.net/emu_wap3/p/wap3/ WAP NASIL ÇALISIR?Wap sitelerinin çalısma prensibi aynı web sitelerinde oldugu gibidir. Sayfaya bir istek geldiginde istek internet aracılıgıyla IIS'e iletilir. Talep Framework tarafından handle edildikten sonra asp.net tarafından compile edilir istegi yapan kullanıcıya geri döndürülür. Bu duruma göre HTML, WML ve XHTML olabilir..NET MOBILE .NET Mobile Microsoft .Net Framework ve ASP.NET'in için bir extension'dır. .Net Mobile mobil telefonlar ve mobil aygıtlar için uygulamalar gelistirmeyi saglayar ve sunucu bazlı çalısan form kontrollerini kullanmamızı saglar. Yukarı da belirttigim gibi farklı aygıtlar da farklı sonuçlar üretebilir(HTML, WML, CHTML, XHTML gibi...)VISUAL STUDIO ORTAMINDA WAP SITESI GELISTIRMEK Yeni bir wap sitesi gelistirmek için çok fazla bir sey yapmamıza gerek yok. Bunun için proje olarak yeni bir web sitesi olusturmamız yeterli olacaktır. Ben bos bir WEB Site Olusturuyorum. Farklı olarak Projemize Webform degil MobileWebForm ekleyecegiz. Bunun için projemize yeni bir Item ekleyelim. Gelen Ekranda gördügümüz gibi Mobile Web Formu seçtim.Evet, Formumuzu biraz inceleyelim. Ilk olarak design tarafına bakalım.Gördügümüz gibi Web Formdan biraz daha farklı bir sekilde. HTML Kısmına bakacak olursak. <%@Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><%@Register TagPrefix="mobile" Namespace="System.Web.UI.MobileControls" Assembly="System.Web.Mobile" %><htmlxmlns="http://www.w3.org/1999/xhtml" ><body><mobile:Form id="Form1" runat="server"></mobile:Form></body></html> Ilk bakısta WEB Form'dan çok fazla bir fark yok. Web Formda oldugu gibi Code behind çalısabiliyoruz. Biraz daha incelersek NameSpace ve Assembly'lerin System.Web.UI.MobileControlsve System.Web.Mobileolarak formumuza eklendigini göreceksiniz. Gördügünüz gibi WEB' de oldugu gibi WAP' dada bazı kontroller var. Bunların isimleri farklı olsa da WEB' deki kontrollerle aynı isi yapıyorlar. Tabi Visual Studio Simdilik bize WEB' deki kadar çok kontrol saglamıyor JSimdi basitçe bir örnek yapalım. Yukarıda olusturdugumuz bir projeye yeni bir mobile site ekleyelim. Toolbox'dan Mobile Web Forms Içerisinden 2 label, 1 textbox, 1 Command ekleyelim. Not: Bu kontrolleri ilerleyen makaleler de inceliyor olacagız. <%@Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><%@Register TagPrefix="mobile" Namespace="System.Web.UI.MobileControls" Assembly="System.Web.Mobile" %><html xmlns="http://www.w3.org/1999/xhtml"><body><mobile:Form ID="Form1" Runat="server"><mobile:Label ID="Label2" Runat="server" Font-Bold="True">YAS ÖLÇER</mobile:Label><mobile:TextBox ID="TextBox1" Runat="server"></mobile:TextBox><mobile:Command ID="Command1" Runat="server" OnClick="Command_Click1">Yas Kaç ?</mobile:Command><br /><mobile:Label ID="Label1" Runat="server"></mobile:Label></mobile:Form></body></html> Kod tarafında çok basit bir algoritma hazırladım. protected void Command_Click1(object sender, EventArgs e){int Yas = Convert.ToInt32(TextBox1.Text);if (Yas >= 18){Label1.Text = "Yasınız Resit";}else{Label1.Text = "Büyüde Gel";}}Simdi yazdıgımız kodu test edelim. Yukarıda örnegini verdigim emulator'den projemizi test edelim.Hayırlı ugurlu olsun J Bu makalemizin de sonuna geldik. Makalenin 2. Serisinde WAP Kontrollerini inceliyor olacagız. Sem Göksusem.goksu@yazilimgunlugu.com www.semgoksu.com | www.yazilimgunlugu.com Kaynaklarhttp://www.w3schools.comhttp://www.msdn.com
29 Oca 2008 Hata Mesajlarının Event Log’a Yazılması Kategori: .NET Framework Etiketler: C#.NET Framework 3 Yorum Merhaba arkadaşlar bu makalemiz de benim hemen hemen her proje kullandığım hata mesajlarının event loga yazdırılmasından bahsedeceğim. Bir proje de bir hata olduğun da bunun nedenini bulmak için projeyi açar debug eder uzunca bir müddet o hatayı ararız (Bu arama bazen çok kısa da sürebilir J ). Bu proje asamasında çok sorun olmasa da proje yayına girdiginde programın hata verip vermedigini ancak kullanıcıların geri bildirimleriyle anlayabiliriz. Her ne kadar testerlar projeyi çok çok iyi test etseler de zamanla beklenmedik sorunlarla karsılasabiliriz. Bu sorunlardan aklıma ilk gelen sey Data tarafında kaynaklanan sorunlar olabilecegidir. (SQL Server'in Timeout'a düsmesi vb.gibi sorunlar). Yazdıgımız programın hata verip vermedigini kullanıcıların anlayamadıgı baska sorunlar var mı? Yok mu? Gibi sorunları takip etmek için try-catch blogunda hata mesajlarını Event Log'a yazdırıp oradan takip edebiliyor olacagız. Niye Böyle bir sey Yapalım ki? Isimizi sansa ve kullanıcıya bırakmadan projemizdeki bugları bulabilecegız. (Ne demisler koyundan post userdan dost olmaz J) Bu da kötü niyetli kullanıcıların programdaki bugları degerlendirmesine engel olacaktır. Buda projemizin daha saglıklı ilerlemesini saglayacaktır. ÖRNEK: Konuyla ilgili bir örnek yapalım. Ilk olarak hata mesajını event loga nasıl yazacagız ona bakalım. Bunun için Bos bir Class açalım. HataMesajiYaz Adında Static bir metod yazacagız.Ilk olarak using System.Diagnostics; Namespaceni projemize dahil etmeliyiz. C# .NET EventLogaYaz.cs public static void HataMesajiYaz(Exception HataMesaji) { string strLogMessage = "\nMessage : " + HataMesaji.Message + "\nSource : " + HataMesaji.Source + "\nTarget Site : " + HataMesaji.TargetSite + "\nStack Trace : " + HataMesaji.StackTrace; string logName = "BenimProjem"; // EventLogda Hata Mesajının Nereye yazılacagını Belirliyoruz. BenimProjem adında bir Log adı olmadıgı için açmamız gerekiyor. Bunu da asagıda anlatacagım. if (!EventLog.SourceExists(logName)) { EventLog.CreateEventSource(logName, logName); } EventLog log = new EventLog(); log.Source = logName; //Nereye yazılacak? Event Logda BenimProjem Event log dosyasına yazılacak. strLogMessage += "\r\n\r\n--------------------------\r\n\r\n" + HataMesaji.ToString(); // Hata Mesajını alıyoruz. log.WriteEntry(strLogMessage, EventLogEntryType.Error, 65534); // Hata mesajını log dosyasına yazdırıyoruz. } Simdi aynı islemin VB.NET ile nasıl yapıldıgına bakalım. VB .NET EventLogaYaz.vb Public Shared Sub HataMesajiYaz(ByVal HataMesaji As Exception) Dim strLogMessage As String = "" & Chr(10) & "Message : " + HataMesaji.Message + "" & Chr(10) & "Source : " + HataMesaji.Source + "" & Chr(10) & "Target Site : " + HataMesaji.TargetSite + "" & Chr(10) & "Stack Trace : " + HataMesaji.StackTrace Dim logName As String = " BenimProjem " If Not EventLog.SourceExists(logName) Then EventLog.CreateEventSource(logName, logName) End If Dim log As New EventLog() log.Source = logName strLogMessage += "" & Chr(13) & "" & Chr(10) & "" & Chr(13) & "" & Chr(10) & "--------------------------" & Chr(13) & "" & Chr(10) & "" & Chr(13) & "" & Chr(10) & "" + HataMesaji.ToString() log.WriteEntry(strLogMessage, EventLogEntryType.[Error], 65534) End Sub Yukarıda da bahsettigim gibi projemiz için EventLog da yeni bir Log adı açmamız gerekiyor. Bunun için Kayıt Defterine girip yeni bir Dosya Adı açmalıyız. Bu dosya Adı da yukarıda belirttigimiz BenimProjem olacak J Kayıt Defterini açıp HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog Gelip, EventLog üzerinde sag tus diyelim. Yeni Sekmesinden Anahtarı seçelim ve BenimProjem Yazalım J Evet artık hata mesajlarımız artık loga yazılmaya hazır J Simdi bir proje de hata ve hatalar yapalım J public HaberKolleksiyonu HaberleriGetir(int KategoriID, int AktifSayfa) { try { SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@KategoriID",KategoriID), new SqlParameter("@AktifSayfa", AktifSayfa) }; Ds = SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure, "HaberleriGetir",parameters); if (Ds != null && Ds.Tables.Count > 0&& Ds.Tables[0].Rows.Count>0) { kHaberKolleksiyonu = new HaberKolleksiyonu(); for (int i = 0; i < Ds.Tables[0].Rows.Count; i++) { nHaberNesnesi = new HaberNesnesi(); Ds.Tables[0].Rows[i]["werwerwe"].ToString(); > Burada Hata yaptık J Böyle Bir field yok kHaberKolleksiyonu.Add(nHaberNesnesi); nHaberNesnesi = null; } } return kHaberKolleksiyonu; } catch (Exception HataMesaji) { LogYonetimi.HataMesajiYaz(HataMesaji); // Burada hata MesajınıEventloga yazdırıyoruz return null; } Simdi event loga gidelim. Hatayı loga yazdık bakalım hata mesajı olarak ne yazıyor. Message : Column 'werwerwe' does not belong to table Table. > Bu tabloda böyle field bulunamadı ! Geçmis olsun J Bu makalenin de sonunda geldik. Baska bir makale de görüsmek üzere. Sem Göksusem.goksu@yazilimgunlugu.com www.semgoksu.com | www.yazilimgunlugu.com Kaynaklar www.msdn.com ww.aspalliance.com
22 Oca 2008 Microsoft Virtual Earth Map - Makale 2 Kategori: Benden Etiketler: ASP.NETMicrosoft 2 Yorum Merhaba sevgili arkadaslar ilk makalemizde Virtual Earth Map'i ve kullanım alanlarını anlatıp basit bir örnek yapmıstık. Bu makale de ise Virtual Earth Map'in gelismis bazı özelliklerini inceleyecegiz.Microsoft Virtual Earth Map ile ilgili yazmıs oldugumuz 2. Makeleyi okumak için asagıdaki tıklayınız.
21 Oca 2008 Microsoft Virtual Earth Map ile Dünyayı Keşfedin – Makale 2 Kategori: ASP.NET Etiketler: ASP.NETMicrosoft 1 Yorum Merhaba sevgili arkadaşlar ilk makalemizde Virtual Earth Map’i ve kullanım alanlarını anlatıp basit bir örnek yapmıştık. Bu makale de ise Virtual Earth Map’in gelişmiş bazı özelliklerini inceleyeceğiz.Makelemizin 2. Bölümünde haritada gösterdigimiz koordinatın üzerinde o koordinatı belli edecek bir sekil kullanıcıya gösterecek ve bu koordinat hakkında kullanıcının o koordinatla ilgili önemli bilgileri görmesini saglayacak bir pencere açılmasını saglayacagız. VEShapeLayer.AddShape Metodu Virtual Earth Map'de Polygon, Polyline ve pushpin olmak üzere 3 çesit shape(sekil) vardır. Bu shape'ler yukardı da da belirttigimiz gibi haritamız üzerinde o koordinatı kullanıcıya gösterecek ve o koordinat hakkında kullanıcıya bilgi verecek. Not: Virtual Earth Map'in 5.0 versiyonu ile birlikte tüm shape nesneleri VEShape.Class altında birlesti. Haritalara Shape(Sekil) Eklemek Ilk olarak VELatLong nesesinin bir array'ı tanımlanır. Ben bu makale de konunun anlasılmasını zorlastırmamak için polygon Shape'ni kullanacagım. Polygon shape'nin kullanımında 3 koordinat tanımlamak zorundayız.var points = new Array( new VELatLong(45.01188,-111.06687, 0, VEAltitudeMode. RelativeToGround), new VELatLong(45.01534,-104.06324, 0, VEAltitudeMode. RelativeToGround), new VELatLong(41.01929,-104.06, 0, VEAltitudeMode. RelativeToGround), new VELatLong(41.003,-111.05878, 0, VEAltitudeMode. RelativeToGround)); Ikinci olarak Tipi Polygon olan bir VEShape nesnesi olusturulur. var myPolygon = new VEShape(VEShapeType.Polygon, points); Üçüncü olarak olusturdugumuz poligonu haritamıza ekleriz.var myPolygon = map.AddShape(myPolygon); Son olarak olusturdugumuz shape'de kullanıcıyı bilgilendirmek için çesitli bilgileri giriyoruz.myPolygon.SetTitle("Baslık");myPolygon.SetDescription("Koordinat ile ilgili Açıklama."); Evet basit olarak bir örnek yapalım; Ben örnegimde Fenerbahçe stadını haritamda gösterecek ve çesitli bilgilere yer verecegim. Shape.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>Shape</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> <script type="text/javascript" src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6"> </script> <script type="text/javascript"> var map = null; var gosterilecekKoordinat = new VELatLong(40.987835, 29.036629); var koordinatlar = new Array( new VELatLong(40.987835, 29.036629, 0, VEAltitudeMode. RelativeToGround), new VELatLong(40.987835, 29.036629, 0, VEAltitudeMode. RelativeToGround), new VELatLong(40.987835, 29.036629, 0, VEAltitudeMode. RelativeToGround), new VELatLong(40.987835, 29.036629, 0, VEAltitudeMode. RelativeToGround) ); function GetMap() { map = new VEMap('myMap'); map.LoadMap(gosterilecekKoordinat,16, VEMapStyle.Hybrid); var poligon = new VEShape(VEShapeType.Polyline, koordinatlar); map.AddShape(poligon); poligon.SetTitle("<center>Kadıköy - Fenerbahçe Sükrü Saraçoglu Stadı</center>"); //Shaepe için Koordinat ile ilgili baslık poligon.SetDescription("<br/><center><img src='fb.gif' align='center'><br/> Sükrü Saraçoglu Stadı <br/><br/> Burası Kadıköy burdan çıkıs yok !</center>"); //Shaepe için Koordinat ile ilgili tanıtım ve diger bilgiler } </script> </head> <body onload="GetMap();"> <div id='myMap' style="position:relative; width:640px; height:480px;"></div> </body> </html> Evet simdi örnegimizi çalıstıralım bakalım nasl bir sey olacak J Gerçekten çok güzel görünüyor J Türkiyenin ve avrupanın en güzel stadı ne de olsa J Evet arkadaslar orada ki kırmızı ataç'a benzeyen sey benim çok hosuma gitmedi, sizinde hosunuza gitmeyecegini varsayan Microsoft bunu asmak için bu iconu kendi belirleyecegimiz bir icon ile degistirmemize de imkan saglamıs. Makalemizin ikinci kısmında bu iconu kisisellestirecegiz. Bunun için aslında yukarıdaki örnekten çok farklı bir sey yapmayacagız. Sadece kullanacagımız VEShape nesnesinin SetCustomIcon ve SetIconAnchor özelligini kullanacagız. var customIcon = null; customIcon = new VEShape(VEShapeType.Polygon, koordinatlar); customIcon.SetTitle("12 Numara Hep Yanında ! "); customIcon.SetCustomIcon("<img src='fb.gif' alt=''/>"); //Kendi belirleyecegimiz Shape Iconu customIcon.SetDescription("<br/><center><img src='fb.gif' align='center'><br/> Sükrü Saraçoglu Stadı <br/><br/> Burası Kadıköy burdan çıkıs yok !</center>"); customIcon.SetIconAnchor(gosterilecekKoordinat); //Shape Iconun Gösterilecegi Koordinat map.AddShape(customIcon); Basit bir örnek daha yapalım. Ben yine Türkiye'nin ve Avrupa'nın en iyi stadının koordinatlarını alıp stadın tam üzerine FB logosu koyacagım J CustomIcon.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>Adding a Shape to a Map</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> <script type="text/javascript" src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6"> </script> <script type="text/javascript"> var map = null; var customIcon = null; var gosterilecekKoordinat = new VELatLong(40.987835, 29.036629); var koordinatlar = new Array( new VELatLong(40.987835, 29.036629, 0, VEAltitudeMode. RelativeToGround), new VELatLong(40.987835, 29.036629, 0, VEAltitudeMode. RelativeToGround), new VELatLong(40.987835, 29.036629, 0, VEAltitudeMode. RelativeToGround), new VELatLong(40.987835, 29.036629, 0, VEAltitudeMode. RelativeToGround) ); function GetMap() { map = new VEMap('myMap'); map.LoadMap(gosterilecekKoordinat,16, VEMapStyle.Hybrid); customIcon = new VEShape(VEShapeType.Polygon, koordinatlar); customIcon.SetTitle("12 Numara Hep Yanında ! "); customIcon.SetCustomIcon("<img src='fb.gif' alt=''/>"); //Custom Icon'un Dosya Yolunu Belirtiyoruz. customIcon.SetDescription("<br/><center><img src='fb.gif' align='center'><br/> Sükrü Saraçoglu Stadı <br/><br/> Burası Kadıköy burdan çıkıs yok !</center>"); customIcon.SetIconAnchor(gosterilecekKoordinat); //Custom Iconun Gösterilecegi Koordinatı Belirliyoruz. map.AddShape(customIcon); //Custom Iconu Haritamıza Ekliyoruz. } </script> </head> <body onload="GetMap();"> <div id='myMap' style="position:relative; width:640px; height:480px;"></div> </body> </html> Bakalım nasıl bir sey ortaya çıkacak J Gerçekten çok güzel duruyor her ikisi de J Hem Microsoft, hem Fenerbahçe J Hem Virtual Earth, Hem de Kadıköy Fenerbahçe Sükrü Saraçoglu Stadı J Evet Arkadaslar, bu makalemizin de sonuna geldik. Baska bir makale de görüsmek dilegiyle, herkese basarılar dilerim. Sem Göksusem.goksu@yazilimgunlugu.com www.semgoksu.com | www.yazilimgunlugu.com Kaynaklar Virtual Earth Map SDK 6.0
03 Oca 2008 Microsoft Virtual Earth Map - Makale 1 Kategori: Benden Etiketler: ASP.NETMicrosoft 0 Yorum Google Earth'u ilk kullandıgım anda Microsoft'un neden böyle bir sey yapmadıgını düsünüp durmustum. Microsoft bu düsünceme benden daha çabuk cevap verdi ve Virtual Earth Map'i duyurdu. Sanırım buna en çok ben ve benim gibi Microsoft ürünlerini kullanmayı seven yazılımcı dostlar sevinmistir. Yazılımcılar için çok güzel bir SDK'si var. Konuyla ilgili yazmıs oldugum makaleyi okumak için tıklayınız