Tags: , , , , , , , | Categories: Genel Posted by okutbay on 30.03.2010 10:55 | Yorumlar (5)

Bazen iki tarihin arasında geçen süreyi bulmanız gerekir. Bu kişinin şu anki yaşı olabileceği gibi bir işçinin o gün çalıştığı süre de olabilir. C# bize bu konuda yardımcı olmak için TimeSpan tipini sunar. Bu tipi kullanarak iki tarih arasında geçen süreyi farklı şekillerde alabiliriz. Örneğin iki tarih arasında kaç saat olduğunu bulmak istiyorsak TotalHours özelliğini kullanabiliriz. Eğer iki tarih arasında geçen sürenin sadece saat kısmı bizi ilgilendiriyorsa Hours özelliğini kullanabiliriz.

    1 DateTime myStartTime = Convert.ToDateTime("30.03.2010 08:04:00");

    2 DateTime myEndTime = Convert.ToDateTime("30.03.2010 18:02:00");

    3 TimeSpan myWorkingTime = myEndTime - myStartTime;

    4 double myWorkingHours = myWorkingTime.TotalHours;

Bu işi uygulamanız içinde birden çok kullanacaksanız bir method haline getirmek faydalı olacaktır.

    1 public static double GetWorkingHours(DateTime startTime, DateTime endTime)

    2 {

    3     TimeSpan workingTime = endTime - startTime;

    4     double workingHours = workingTime.TotalHours;

    5     return workingHours;

    6 }

 

bu yeni metodu soyle kullanirsiniz.

    1 DateTime myStartTime = Convert.ToDateTime("30.03.2010 08:04:00");

    2 DateTime myEndTime = Convert.ToDateTime("30.03.2010 18:02:00");

    3 double myWorkingHours = GetWorkingHours(myStartTime, myEndTime);

 

Not:Methodun ve kodun aynı classta olduğu varsayılmıştır...

Kolay gelsin...

1 kişi tarafından 1.0 olarak değerlendirildi

  • Currently 1/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , , , , , | Categories: Programlama, SSS (FAQ), Tip Posted by okutbay on 13.11.2009 17:32 | Yorumlar (0)

Clipboard is a windows object. If you want to use clipboard in your .NET framework console applications you must reference `System.Windows.Forms` and mark your main method with `STAThreadAttribute` attribute.

Then you can use this class's methods e.g. Clipboard.SetText("some text to store in the clipboard");

Happy coding.

1 kişi tarafından 2.0 olarak değerlendirildi

  • Currently 2/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , , | Categories: Genel Posted by okutbay on 08.10.2009 16:01 | Yorumlar (0)

According to business rule all footballer name and surname must be capitalized and not longer than 8 chars length.

Very simple to develop. We develop a wrapper method for this job. Seems working fine. Until this morning. Game masters of the http://icanfootball.com noticed that some player names violates this business rule. After my first debuging i found the problem. ToLowerInvariant method is the guilty. No, infact the developer who uses this method is guilty. Because this methods unable to convert "i" to "İ", "ı" to "I" or reverse. This chars specific to Turkish locale and this methods are invariant (means Culture Indepentend and works same as calling ToLower or ToUpper method with CultureInfo.InvariantCulture enum). 

So in my opinion this methods are useless. Please use ToLower or ToUpper method with appropriate culture info.

You can check this sample code.

 

    1 string a = "ı I ş Ş ç Ç ğ Ğ ö Ö ü Ü i İ";

    2 

    3 string b = a.ToLowerInvariant();//b = "ı i ş ş ç ç ğ ğ ö ö ü ü i İ" fails to convert

    4 string d = a.ToUpperInvariant();//c = "ı I Ş Ş Ç Ç Ğ Ğ Ö Ö Ü Ü I İ" fails to convert

    5 

    6 string culture = "tr-TR";

    7 System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo(culture);

    8 

    9 string c = a.ToLower(cultureInfo);//d = "ı ı ş ş ç ç ğ ğ ö ö ü ü i i"

   10 string e = a.ToUpper(cultureInfo);//e = "I I Ş Ş Ç Ç Ğ Ğ Ö Ö Ü Ü İ İ"

 

 

1 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , , , | Categories: SSS (FAQ), Tip, Web Uygulaması Posted by okutbay on 29.09.2009 21:46 | Yorumlar (0)

You can add the <location> element with the “inheritInChildApplications” attribute to the root web.config. This attribute will prevent child applications inherit some specified configuration from the root web.config.

The attribute must be placed in the <configuration> section of the web.config. It looks like this:
<location path="." inheritInChildApplications="false">
<system.web>
 <!--
     ……
     Your settings

  -->
</system.web >
</location>

Referance:

SectionInformation.InheritInChildApplications Property

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , | Categories: SSS (FAQ), Tip, Web Uygulaması Posted by okutbay on 08.09.2009 09:27 | Yorumlar (0)

When you are using the SiteMapPath control page Urls with the querystrings, pages don't show the control. Because url can't be matched with url in your Web.Sitemap file.

To handle this situation, a little web.sitemap file trick is enough. Write the static part of your Url and define the dynamic querystring parameters at "reliantOn" attribute.

Sample Web.sitemap node definiton:

    1 <siteMapNode url="~/a.aspx?p=add" title="ABC" reliantOn="Id" />

Happy codings...

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , , , | Categories: SSS (FAQ), Web Uygulaması Posted by okutbay on 20.08.2009 11:37 | Yorumlar (0)

Sometimes you need to use Http handlers to respond to requests rather than classical asp.net pages. At that times if you want to use session objects you will see that HttpContext.Current.Session is null.

If you want to read session state from you http handler your http handler must implement System.Web.SessionState.IReadOnlySessionState interface. If you want to modify the session state you can implement System.Web.SessionState.IRequiresSessionState.

Sample:

    1 public class Login : IHttpHandler, SessionState.IRequiresSessionState

Happy coding.

3 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , , , , | Categories: Security, Web Uygulaması Posted by okutbay on 18.08.2009 13:51 | Yorumlar (0)

Web uygulamaları Internet üzerinden anonim (kimliği belirsiz) ziyaretçiler tarafından kullanılırlar. Kullanıcılar hakkında bilgi toplamak ya da sadece belirli kaynaklara erişimlerini sağlamak istiyorsak öncelikle onların kim olduğunu belirli bir kaynaktan sorgulayıp, doğru kişi olduklarını onaylamamız gerekir. Bu işleme "Kimliklendirme (Authentication)" denir.

Web uygulamalarında farklı kimliklendirme yöntemleri olsada Internet üzerinden erişilen uygulamalar için uygun olan kimliklendirme yöntemi "Forms" yöntemidir. (Bu noktadan sonra Forms Authentication olarak anılacaktır.)

Forms authentication kullanımını aktif hale getirmek için web uygulamanızın ayar dosyası Web.Config içinde <authentication mode="Forms" /> satırı yer almalıdır.

1 <configuration>
2 <system.web>
3 <authentication mode="Forms"/>
4 </system.web>
5 </configuration>

Aktif edilen Forms authentication için giriş sayfası, varsayılan sayfa, zaman aşımı, çerez adı gibi ayarlar yapılmalıdır. Bu noktada yapılabilecek ayalar bu kadar değildir. Detaylı bilgi için makalenin sonunda yer alan makaleye göz atmanızı öneririm.

1 <authentication mode="Forms">
2 <forms loginUrl="login.aspx"
3 defaultUrl="default.aspx"
4 timeout="30"
5 name=".ASPXAUTHWEBLEBICI"/>
6 </authentication>

Böylece FormsAuthenticationModule sınıfının gerektirdiği asgari ayarları yapmış oluruz. Artık kimliklendirme aşamasını takip eden "Yetkilendirme" (Authorization) aşaması için gerekli ayarları yapmaya geçebiliriz.

Yetkilendirme için web.config dosyamızda authorization elemanını kullanarak UrlAuthorizationModule sınıfını ayarlayabiliriz.

1 <system.web>

2 <authorization>

3 <deny users="?" />

4 </authorization>

5 </system.web>

Uygulamamızın ana ayar dosyasında yapılan bu ayarla birlikte uygulamamıza gelen anonim kullanıcıların kaynaklara erişimi reddedilerek kimliklendirme ayarında belirtilen giriş sayfasına kimliklendirme işlemi için gönderilmeleri sağlanacaktır. Burada soru işareti anonim (kimliksiz) kullanıcıları temsil ederken tüm kullanıcıları temsil etmek için "*" değeri kullanılabilir. Unutulmaması gereken noktalardan biri ise ayar dosyalarının yukarıdan aşağıya doğru işlendiğidir. Örneğin deny satırı üzerine yazacağınız <allow users="*" /> ayarı tüm kullanıcların siteye erişmesi anlamına gelecektir...

Önemli Not: Authentication ayarı sadece uygulamamızın ana klasöründe bulunan web.config dosyasında yapılabilirken authorization ayarı ana klasör veya alt klasörler için oluşturulacak web.config dosyalarında bulundukları klasörü kapsayacak şekilde yapılabilir. Yani uygulamanız anonim erişime açıkken sadece belli bir klasörü yetkili erişim için ayarlayabilirsiniz.

Belirlenen giriş sayfasına gelen kullanıcılar belirlenmiş olan veri kaynağından kimliklerini onayladıktan sonra ilgili kaynağa girmeye yetkiliyseler bu kaynağa erişebilirler. Aksi halde tekrar giriş sayfasına geri gönderilirler ve kaynağa erişmeye yetkili bir kullanıcı bilgisi ise giriş yapmaları beklenir. Bizim senaryomuzda kimlik doğrulamasını geçen tüm kullanıcılar kaynaklara erişmeye yetkilidir. Farklı kişi ya da gruplar için erişim deny ya da allow elemanları users ya da roles öznitelikleri ile kullanılabilir...

Bu noktada bazı kararlar vermeniz gerekecektir. Ama hangi kararları alırsanız alın temelde yapacağınız işlemler aynıdır. Kullanıcı bilgilerini web.config de depolayabilir ya da bir veritabanı tablosu, web servis gibi bir kaynakla kontrol edebilirsiniz. Her halukarda kullanıcı adı ve şifresini kullanıcıdan girmesini isteyeceğiniz bir sayfanız olacaktır. Kullanıcı bilgileri girip, giriş butonuna tıklayacak ve siz arka tarafta hangi mekanizmayı kullanıyor olursanız olun yapacağınız işlem bu kullanıcının varolup olmadığına bakmak, şifresinin uyup uymadığını kontrol etmek, doğru ise siteye girişine izin vermek yanlış ise tekrar giriş sayfasına yönlendirmek olacaktır.

Kısıtlanmış bir kaynağa erişilmek istendiği zaman yapılan ayarlar gereği kullanıcı dönüş adresi ile birlikte login sayfasına yönlendirilecektir.

Referanslar:

Explained: Forms Authentication in ASP.NET 2.0 (patterns & practices Developer Center)

How To: Use Forms Authentication with SQL Server in ASP.NET 2.0
http://msdn.microsoft.com/en-us/library/ms998317.aspx

How To: Use Membership in ASP.NET 2.0
http://msdn.microsoft.com/en-us/library/ms998347.aspx

How To: Use Role Manager in ASP.NET 2.0
http://msdn.microsoft.com/en-us/library/ms998314.aspx

1 kişi tarafından 3.0 olarak değerlendirildi

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , | Categories: Tanıtım Posted by okutbay on 10.08.2009 11:43 | Yorumlar (0)

You can query your database with modern query language LINQ. I think SQL Server Management Studio need this functionalty built-in.

Tool is free for now.

Yo can download from this link: http://www.linqpad.net/

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , | Categories: Programlama, Web Uygulaması Posted by okutbay on 06.02.2009 12:22 | Yorumlar (0)

Milliyet gazetesi Internet yazılım hizmetlerinde çalışmaya başladığımda arabam.com web sitesinin mevcut veritabanı ve sınıf kütüphanesi kullanılarak yeniden yazılamsı isteniyordu... .NET 1.1 de geliştirilmiş olan mevcut uygulamayı yeni teknolojilerle yazalım istedik... Visual Studio 2008 + .Net Framework 3.5 + MVC Framework Preview ile geliştirme yapma kararı alındı... Özellikle preview durumda olan bir framework kullanmak oldukça çılgın bir yaklaşımdı...MVC seçmemizin en büyük nedeni asp.net form ve viewstate kullanmıyor olmasıdı. Bu bir nevi ASP yıllarına geriş dönüştü bizim için. Ama bir farkla. .NET frameworkün gücü sonuna kadar bizimleydi.

Sitenin geliştirilmesi sırasında MVC framework tam 4 yeni preview daha yaptı :) Geçtiğimiz günlerde ise Release Candidate olan 1.0 versiyonunu kullanımıza sundu...

İlk görüşte aşk var ise MVC 1.0 bunu başarıyor... Geçmiş releaselerde bulunan eksiklikler yazılımcının hayatını kolaylaştıracak özelliklerle giderilerek çok daha rahat kullanılabilir hale gelmiş...

Release edilmesini sabırsızlıkla beklyorum... Sonrasında vakit bulursam konu ile ilgili yazılar yazmayı planlıyorum...

Sizler de bu arada resmi siteden gelişmeleri takip edebilirsiniz...

http://www.asp.net/mvc/

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , , | Posted by okutbay on 13.10.2008 16:20 | Yorumlar (0)
C# dili 3.0 ile lambda fonsiyonları, LINQ, ve 3.5 versiyonuyla beraber anonim tipler gibi yeniliklerin yanında uzatım metodlarını da duyurdu. Bu yazımızda dilimiz döndüğünce bu metodları sizlere anlatmaya çalışacağım.. Adından da anlaşılacağı üzerine bu metolar mevcut tiplere (sınıflara) ilave olarak onların işlevlerini uzatan, genişleten metodlar diyebiliriz. Eğer siz bir sınıf geliştirmiş ve bunu bileşen olarak internet üzerinden insaların indirip uygulamalarında kullanmasını istiyorsanız bu bileşenin yanında dokümantasyonun da vermeniz gerekir. Böylece bileşeni kullanmak isteyen kişiler dokümantasyondan faydalanarak sınıfınızı kullanmaya başlayabilirler... Peki bu uzatım metodları olayın neresinde? Henüz bir yerinde değil aslında... Bu yöntemle yazmış olduğunuz bileşen içindeki metodların diğer .NET tiplerinin bir uzantısı olarak görünmesini sağlayabiliyorsunuz. Yani mevcut tiplerin özelliklerini genişletebiliyorsunuz... İçinizden "Ne var bunda. Zaten o tipleri miras yoluylaya alıp mevcut metodları geliştiremiyor muyuz?" diye sorduğunuzu duyar gibiyim... Evet izin verilmiş taban sınıftaki metodları ezerek (override) kendi işlevselliğinizi geliştirebilirsiniz tabi ki. Ama bizim bahsettiğimiz. Mevcut bir tipi miras yoluyla yeni bir tipe alarak onun üstüne ilaveler yapmak değil... Tekrar ediyorum: Amacımız mevcut tiplere ilave metodlar yazmak... Örneğin kişi string tipinde bir değişken tanımlandığında değişken adından sonra nokta diyerek nesnenin üyelerine baktığında orada sizin ilave etmiş olduğunuz metodu görebilecek ve kullanabilecektir... Bu yöntemin bir diğer faydası da sizin bileşeninizi kullanan kişilerin yeni bir tipi ve özelliklerini öğrenmeye, onun kopyalarını oluşturmaya gerek duymadan mevcut tipleri ile yeni metodlarınızı kullanmaya başlayacak olmalarıdır... Çok laf ettik değil mi? Az laf çok iş diyelim... Olayı netleştirmek için bir örnek üzerinde açıklayalım... Diyelim ki bir proje üzerinde çalışıyoruz... Bu projede girilen metinler içindeki boşlukların yerine "-" koymamız gereksin. Normal şartlarda ya yeni bir class içine ya mevcut classlar içine istenen işi yapan bir metod ilave ederiz.
public class StringMetodlarim { public static string MyFilter(string TextToFilter) { return TextToFilter.Replace(" ", "-"); } }
Yazılan bu metodu uygulamamızda (Bu örneğimiz için bir console uygulaması olsun) kullanmak için şuna benzer satırlar yazabiliriz:
class Program { static void Main(string[] args) { string myString = "Ozan Kutlu BAYRAM"; Console.WriteLine(StringMetodlarim.MyFilter(myString)); } }
Uygulamayı çalıştırdığımızda ekran üzerinde şöyle bir çıktı görünür: Ozan-Kutlu-BAYRAM Press any key to continue . . . Not: Yazılan yeni sınıfın Program sınıfı ile aynı isim alanında (namespace) olduğunu unutmayın. Farklı bir isim alanı içinde bu sınıfı tanımladınız ise sınıfı, Program sınıfından kullanabilmek için tanımladığınız isim alanını using direktifi ile tanıtın ya da açık yazım ile sınıfı kullanın (isimalani.sinifismi şeklinde) Şimdiye kadar yaptıklarımızı eskiden beri yaptığımız şeylerle aynıydı... Peki ya ben tanımladığım string değişkeni yazdığımın sınıfın metoduna parametre olarak geçirmek yerine "myString.MyFilter()" diyebilsem iyi olmaz mı? Evet diyorsanız işte uzatım metodlarının oyuna girdiği yer tam da burası... Yazdığını MyFilter metodunu string tipine ilave olarak eklemek için onu uzatım metodu olarak tanımlamamız gerekecek... Bu metoduda ayrı bir sınıf içinde yazalım...
public static class MyExtensions { public static string MyFilter(this string TextToFilter) { return TextToFilter.Replace(" ","-"); } }
bu metoda baktığımızda diğer metoddan tek farkının parametresinden önce aldığı this kelimesinin olduğunu farketmişsinizdir... İşte bu metodu uzatım metodu yapan sadece bu tek kelime... İşin geri kalanını bizim için C# derleyicisi hallediyor. Artık uygulamamız içinde ne zaman bir string tipinde değişken yaratsak yanında nokta ile başladığımızda bu uzatım metodunun da listelendiğini görebiliriz... Bu metodu mevcut örneğimizde kullanmak için tek yapmamız gereken:
class Program { static void Main(string[] args) { string myString = "Ozan Kutlu BAYRAM"; Console.WriteLine(myString.MyFilter()); } }
Klavyeleriniz şen ola... Tüm Uygulama
    1 using System;
    2 using System.Collections.Generic;
    3 using System.Text;
    4 
    5 namespace ExtensionMethods
    6 {
    7     class Program
    8     {
    9         static void Main(string[] args)
   10         {
   11             string myString = "Ozan Kutlu BAYRAM";
   12             Console.WriteLine(StringMetodlarim.MyFilter(myString));
   13             Console.WriteLine(myString.MyFilter());
   14         }
   15     }
   16 
   17     public static class MyExtensions
   18     {
   19         public static string MyFilter(this string TextToFilter)
   20         {
   21             return TextToFilter.Replace(" ", "-");
   22         }
   23     }
   24 
   25     public class StringMetodlarim
   26     {
   27         public static string MyFilter(string TextToFilter)
   28         {
   29             return TextToFilter.Replace(" ", "-");
   30         }
   31     }
   32 }

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5