November 9, 2009
@ 11:00 PM

Berlin, soğuk soğudukça da soğuyor. Pazar günü sanırım hiçbir "Berlin"li dışarı çıkmıyor! 
Pazartesi insan yüzü görebildik. Sony Center küçük, ünlü meydanlarında 5 6 kişi var.

Berlin Metrosu, Peh! karışık değil gözünüzü korkutmasınlar. Üç dakikalık arge çalışması yeterli anlamak için.

David Chappell, iyi bir konuşmacı. Azure konusunda kafamdakı "cloud" ları kaldırdı diyebilirim.

Tech-ed, Katılım oldukça fazla. İçerik konusunda daha doğrusu sunum ve kalite konusunda sıkıntı olduğu kanaatindeyim. Yemekler ve ikramlar berbat!

Anı, Visual Studio 2010 ultimate Beta 2 den bahseden konusmacı "Choose a Defaul Collections of Settings" ekranına yeni gelen "Web Development (Code Optimized) " seçeneğinden bahsederken kimlerin "Visual Basic Development Settings" kullandığını sorar. Salon yaklasık 300 400 kişiliktir. Sadece iki veya üç el kalkar. Ardından "Visual C# Development Settings" kullnanları sorar ve hemen hemen tüm eller kalkmıştır. Sonra hafif bir sessizlik sonrasında ise salon kahkahalar içinde kopmaya başlar.

ASP.NET 4.0 daki yenilikler çok da iç açıcı değil. Ama çoğu kimsenin yaralarına merhem olacabileceğini düşündürüyor.

-Html içerisinde snippet kullanımı güzel. (VS 2010 ile)
-Dinamik javascript intellisence özelliği ile javascript kodlamak çok kolaylaşıyor (VS  2010 ile)

Performans
- Session State Compression Options
- Auto Start Web Applications
- Per Application Performance Monitor
Extensibility
-
Extensible Output Cache
- Extensible HTML / URL Encoding
- Extensible Request Validations

Minimized Web.config (cidden minimize olmuş ama)

ListView, CheckBoxList, FormView , Menü gibi kontrollerde gelişmeler olmuş. ViewStateMode artık inherit değer alabiliyor. ClientIDMode sayesinde artık karman çorman kontrol isimlerinden kurtulabiliyoruz istersek.

<%:  sayesinde XSS ler önleyebiliyoruz.

Page.Keywords ve Page.Descriptions sayesinde SEO daha da etkin kullanılabilinecek.

Önümüzdeki etkinlikleri bekliyoruz.

 


 
Categories: .NET | Inceleme | Yasam

Kimi zaman uygulamalarımızda ihtiyaç gereği (örneğin plugin tabanlı bir mimari kullanılarak uygulama geliştirilirken) çalışma zamanında Reflection tekniklerini kullanarak dinamik assembly dosyalarını ilgili application domaine yükler ve kullanırız. Bu kısımda dikkat edilecek noktalardan birisi de biribirini kullanan assembly'ler varsa bağımlı olunan diğer assembly'lerin de yüklenmesini sağlamak gerekmetedir.




Kısa bir örnek üzerinden inceleyelim. Örneğimizde üç proje yer almakta.

cl1.dll : Ana uygulama tarafından kullanılacak assembly
cl2.dll : cl1.dll in bağımlı olduğu diğer dll
Diğer uygulama da test kodlarımızın yer aldığı projemiz.

cl1.dll içerisinde Class1.cs isimli kod dosyamız bulunuyor. İçeriği aşağıdaki gibidir. Tabiki cl2.dll i de referans edildiğini dikkate alıyoruz.

namespace cl1
{
    public class Class1
    {
        public int Test()
        {
            cl2.Class2 c2 = new cl2.Class2();
            return 2 * c2.Test();
        }
    }
}
cl2.dll içerisinde de Class2 isimli bir dosya bulunmakta ve içeriği de aşağıdaki gibidir.
namespace cl2
{
    public class Class2
    {
        public int  Test()
        {
            return 10;
        }
    }
}
Görüldüğü gibi Class1 sınıfının Test metodu çağrıldığında Class2 sınıfından bir nesne yaratılmakta ve onun da Test metodu çağrılmaktadır. Bu durumda eğer cl1.dll dinamik olarak yüklenir ve Test metodu kullanılmak istenirse cl2.dll in de application domaine yüklenmesi zorunluluğu ortaya çıkmaktadır. Bunun için de AppDomain sınıfının AssemblyResolve eventine kendi metodumuzu yazarak bir assembly application domaine yüklendiğinde eğer bağlı olduğu başka bir assembly var ise bu event ateşlenecek ve metodumuzda da ilgili assembly yi yükleme imkanı bulacağız. Örnek kod aşağıdaki gibidir.

  private void button1_Click(object sender, EventArgs e)
        {
            AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
            Assembly asm = Assembly.LoadFile(@"C:\temp\WindowsFormsApplication9\cl1\bin\Debug\cl1.dll");
            Type t = asm.GetType("cl1.Class1");
            object o = Activator.CreateInstance(t);
            MethodInfo mi = t.GetMethod("Test");
            int sonuc = (int)mi.Invoke(o,null);
        }

        Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            Assembly asm = Assembly.LoadFile(@"C:\temp\WindowsFormsApplication9\cl1\bin\Debug\"+args.Name.Split(',')[0]+".dll");
            return asm;
        }


 
Categories: .NET | C#

June 19, 2009
@ 05:22 PM
Gemiş zaman içinde bir blog girdisinde -ado.net takımının blog'u - artık OR/M konusunda baya yol alındığını .net ile OR/M  yapılacaksa bunun için Ado.net Entity Framework kullanılmasının tavsiye edildiğini LINQ to SQL konusunda ise duruma göre bakacaklarını müşterilerden gelen geribildirimlere göre de ilgileneceklerini içeren bir yazı okumuştuk. Maşallah iyi de etmişler yazmışlar çizmişler. Baştan söyledik, olmadı, hata ettiniz, gitmez bu böyle, düzeltin vs. diye. Yerine Ado.net Entity Framework getirdiler de biz daha "acaba mı? oldu mu ?" bir bakalım diyerek eleştirilerimize başlamadan Microsoft bize " But not Perfect" demişti bile. (Resim için Sefer Hoca'ya teşekkür ederim)



Neyse sağlık olsun dedik.Geliştirilmesi durduruldu, linq to sql öldü mü? ( google'da bir arayalım bakalım ?) diye herkes bişiler söylerken -ki herkes öldü diyor - Microsoft takımı yine sağ gösterip sol vurdu gibi geliyor bana. .NET 4.0 ile beraber oldukça fazla yenilikler ile değişerek karşımıza çıkmaya hazırlanıyor. Değişiklikleri ve iyileştirmeleri merak edenler şurdaki linkden - çok uzun olduğu için buraya kopyala yapıştır yaparak yazıyı boğmak istemedim - detayları inceleyebilirsiniz. Yani ne diyelim şimdi Linq to SQL ölmedi mi ?


 
Categories: .NET | Inceleme

Şurda duyurusunu yaptığımız etkinlik gerçekleşti. Kendi adıma oldukça zevkli ve eğlenceli geçen (umarım katlımcılar da aynı fikirdedir ;) ) güzel sorunların geldiği ASP.NET Application Life Cycle ve Page Life Cycle konulu seminerimin slayt ve örneklerini
sunum.rar (125.63 KB) linkinden indirebilirsiniz.

Birbaşka etkinlikte görüşmek üzere.

   


   
 
Categories: .NET | Asp.net | Yasam

January 21, 2009
@ 10:00 AM

 


Havuza dalmak için atlamadan önce derin bir nefes alınır ve uzun bir dalmadan sonra kafa suyun üstüne çıkarıldığında alınan o derin nefesin kıymetini dalanlardan iyi bilen olamaz. Ve ilk suyun yüzüne çıkıp arkaya bakıldığında alınan mesafenin çokluğu oldukça sevindiricidir.

Sevgili dnabahar sınıfı; umarım aldığınız mesafe sizleri beklediğiniz noktalara erişmenizi sağlamıştır. Bu dalma zamanında edinilen deneyimlerin sonraki dalmalarınızda size kolaylıklar sağlamasını dilerim.

Not : Bana henüz " hocam son ders 100 tane şey göndereceğinizi söylediniz ama hala elimizde bişi yok! " konulu mail gelmediği için tembellik yaptığımı burdan halka arz ederim:)

 

 

 


 
Categories: .NET | Yasam

January 21, 2009
@ 01:23 AM

.NET ya da başka diğer geliştirme ortamlarında kullandığımız diller gerek ihtiyaçlardan gerek diğer dillerdeki gelişmelerden etkilenerek zaman içerisinde ya radikal değişikliklere ya da geliştiricinin daha kolay bir şekilde kod yazabilmesi için eklentilerle gelişme sürecini yaşarlar. 70 lerde geliştirilen C bile zaman içerisinde gelişim gösterebilmekte ve yanılmıyorsam en son 99 standartları ile de eklentiler yapılmıştır. C# kullanarak uygulama geliştiren programcılar 8 9 yıllık süreçte c# dilinin 1.0 ,1.1, 2.0 ve 3.0 sürümlerini kullanmışlardır. Bu yazıyı okuyanlardan birisi hala 1.1 veya 1.0 ile uygulama geliştiriyorsa nedenlerini bizimle paylaşırlarsa sevinirim. Acaba neden hala 2.0 ve üstü bir sürümü ile kodlama yapmıyorlar.

Gerek eğitim ve seminerlerde gerek dost sohbetlerinde bu yeniliklerin programcı tarafından kolay bir şekilde kabullenilemediğini görmekteyim .Oysaki bu yeniliklerin bir çoğu programıcının kolay bir şekilde kodlama yapabilmesi (mesela generics) ya da dilin imkanları ile kodlama yapıldığında yaşanan sorunların (örneğin nullable tipler ) aşılması için dile kazandırılmıştır. Oysa ilk gelen cevap " ben bu yenilik olmadan da ben zaten yapabiliyordum, ne gerek var ki bu yenilikleri öğrenmek için harcadığım performansa ya da zamana" şeklindedir. Tamamen karşı olduğumu belirterek bir örnek üzerinden açıklamaya çalışacağım.

Azçok haberimiz vardır c# 3.0 ile birlikte gelen Lambda ifadelerinden. Çok zor anlaşılan ve kullanılmak istenmeyen kullanma ihtiyacını bile düşünmek istemeyen (mesela bir düşünün) birçok meslektalım  olduğuna eminim ;) Oysaki uyuglama geliştirirken yerinde kullanıldığında mükemmel derecede temiz ve anlamlı kodlama yapılabiliyor.
Şimdi c# dili ile farklı yollardan çok basit bir şekilde generic List<T> nesnesinin belirtilen şekilde taşıdığı değerleri filitrelemeye çalışalım.(sıfırdan büyük olan sayıları bulsun)

Ilk akla gelen foreach ile listeyi dönerek filitrelemek olacaktır.

private static List<int> Filitrele(List<int> liste)
{
   
List<int> _temp = new List<int>();
   
foreach (int sayi in liste)
    {
        
if (sayi > 0)
             _temp.Add(sayi);
    }
   
return _temp;
}

Oysaki çok daha kısa ve anlaşılır olan .net framework'ün de nimetlerinden faydalanarak aynı işi yapabileceğimiz yöntem aşağıdaki gibi olabilir.
Bu örnekte C# 2.0'ın getirdiği anonymous metodlardan da faydalanılmıştır.

private static List<int> Filitrele(List<int> liste)
{
  
return liste.FindAll(delegate(int sayi)
   {
      
return sayi > 0;
   }
   );
}


Peki bundan daha temiz ve anlaşılır bir kod yazabilir miyiz ? Eğer lambda ifadeleri ile uğraşmış isek sorunun cevabı oldukça basittir " Tabi ki evet!"
private static List<int> Filitrele(List<int> liste)
{
   
return liste.FindAll(sayi => sayi > 0);
}

Bu örnekle anlatmak istediğim aslında kullanılan dilin yeniliklerini kullanmadan da sorunlara çözüm bulunabilineceği gibi gelen yenilikleri öğrenerek aslında daha az zaman alıcı ve temiz kodlar yazabileceğimizi, bu nedenle öncelikle gelen bu yeniliklerin ne işe yaradığını ne amaçla dile eklendiğini ve bu özellik olmadan yaşanan zorluklar ya da sorunların neler olduğunu iyice kavramak gerektiğini düşünüyorum. Yoksa kullanması zaten kolay! ;)

C# 4.0 'ın resmi olarak yayınlanmasından sonra bu konu hakkında tekrar konuşalım.


 
Categories: .NET | C# | Inceleme

Görüşmek üzere ;)


Uzun bir aradan sonra tekrar İstanbul'da güzel bir etkinlik ile karşınızdayız. Ankara ve İzmir derken biraz İstanbul'u boşladığımızı kabul ediyorum. Ama önümüzdeki dönemde bolca telafilerimiz olacak. Gelelim konumuza; INETA Professional Hit!

İki günlük bir etkinlik dizisi ile bu sefer Microsoft binasında buluşuyoruz. Fakat farklı bir şeyler var! Türkiye'de ilk defa tamamen Level 300 ve üstü oturumlardan oluşan halka açık bir aktivite yapıyoruz. Gelin bu konuyu biraz açıklığa kavuşturalım ve şu Level konusuna göz atalım.

  • Level 100: Bahsi geçen konuya giriş ve genel anlatım içerir. Katılımcıların oturumun konusu ile ilgili herhangi bir bilgi birikimine sahip olmadıkları ön görülür.
  • Level 200: Level 100 bilgisine sahip olunduğunu ve buna ek olarak anlatılacak konu ile ilgili genel bir bilgi birikiminin katılımcılarda olduğu var sayılır. Genelde bu oturumlarda anlatılan teknolojilerin detayları ve kullanım alanları ile ilgili gerçek hayat senaryoları işlenir.
  • Level 300: Anlatılacak konu ile ilgili Level 200 bilgisine sahip olunduğu düşünülür. Bu oturumlarda bahsi geçen teknolojilerin uç noktada kullanımına dair örnekler derinlemesine işlenir.
  • Level 400: Bu oturumlar uzmanından uzmanına oturumlardır. Anlatılan teknoloji ile ilgili en gelişmiş ve üst seviyeli bilginin aktarıldığı bu oturumlar ürünlerin üst sınırlarını zorlayan oturumlardır.

Gördüğünüz gibi normal şartlarda bizim INETA tarafındaki etkinliklerimiz ağırlıklı olarak Level 100 ile Level 200 arasında dolaşıyor. Genel olarak baktığımızda bu seviyenin üzerinde etkinliklerin eksikliğini sizler de değerlendirme formlarında defalarca dile getirdiniz. INETA Professional Hit tamamen uzmanlara hitap eden Level 300 ve Level 400 oturumlar içeriyor. Bu kapsamda giriş seviyesi bir beklenti ile etkinliğe gelmemekte fayda var. Giriş seviyesi için yakın zamanda bir etkinliğimiz daha olacak.

Program içeriğimiz ve oturumların seviyeleri şu şekilde;

24 Ocak

10.00-12.30 Silverlight ile Veri Uygulamaları - Daron Yöndem - Level 300
13.00-16.00 ADO.NET Data Services -
Burak Selim Şenyurt - Level 300
16.30-18.00 SharePoint üzerinde özel kolon geliştirmek -
Nezih Tınas - Level 400

25 Ocak

10.00-12.30 Derinlerde C# 3.0 - Burak Selim Şenyurt - Level 300
13.00-15.00 ASP.NET AJAX 4.0 -
Daron Yöndem - Level 300
15.30-18.00 Asp.Net Application ve Page LifeCycle -
Oğuz Yağmur - Level 300

Etkinlik Microsoft İstanbul ofisinde olacak. Adres şu şekilde; Bellevue Residence, Levent Mahallesi Aydin Sokak, No: 7 Levent

Etkinliğe katılabilmeniz için aşağıdaki adresten kayıt olmanız gerekiyor.

http://daron.yondem.com/kayit/

Çok yakında giriş seviyesi etkinliklerde de görüşmek üzere.


 
Categories: .NET | Yasam

Uzun süre .net ortamında uygulama geliştirenler gerek assembly yapısı gerek metadata yapısı gerekse de IL ile azçok ilgilenecekleri olaylarla karşılaşmışlardır. Bundan önceki bazı blog girdilerinde bu amaca yönelik çeşitli çözüm yolları ve araçlardan (Reflector, Fox , CFF Explorer gibi) bahsetmiştik. Yine benzer bir araç ile var olan exe ya da dll leri (biz kısaca kaynak kodu bizde olmayan assembly ler diyelim) açıp kendi kaynak kodlarımızı ekledikten sonra (bir nevi patched işlemi diyebiliriz) değişiklikleri assembly üzerine kaydedip kullanmaya devam edebiliriz.

Eminim herkesin anlayacağı bir örnek ile ne anlatmaya çalıştığımı kısaca özetleyeyim. Bir arkadaşımız bir uygulama yazmış, size göndermiş kullanmanız için. Ama ne hikmetse uygulama başlamadan önce şifre , serial, activation key vs ... istiyor.Siz de birazdan bahsedeceğim yol ile bu assemblyyi açıp şifre soran kod kısmını istediğiniz gibi değiştirip kaydettiğinizde artık aynı uygulamayı şifresini bilmeden de kullanabilirsiniz ;)

Örnek uygulamamızın ekran görüntüsü aşağıdaki gibidir. Program, textbox'a istenilen değeri girdikden sonra buton'a basıldığında eğer girilen değer doğru ise sihirli sayıyı göstermekte, yanlış ise hata mesajı vermektedir. Biz de şu işe bakın ki textbox'a ne yazacağımızı bilmiyoruz ;)

Koddan da görebileceğimiz gibi basit bir string karşılaştırma işlemi yapılmaktadır. O zaman bu kısmı değiştirdiğimizde sorunumuz hallolacaktır. Ha bu arada kodlar bizde değildi nasıl gördük ki kodları diyorsanız Fox Decompiler ve Reflector uygulamaları hakkında bilgi edinmeniz gerekecektir.

Şimdi kolları sıvadıktan sonra reflector uygulamamıza assembly'yi resmen bir text dosyasıymış gibi editleten bir plug-in kuracağız ve bu da Reflexil sayesinde gereçekleştirebiliriz. Reflexil'i şurdaki adresten indirdikten sonra zipli dosya içerisindeki reflexil.dll'i Reflector uygulamasına  plug'in olarak kurabiliyoruz.

Plug-ini ekledikten sonra Reflector ile uygulamamızı açıp, CheckKey() metodunu disassemble ediyoruz. Reflector'un Tools menüsünden az önce exlediğimiz Reflex'il plug-in nin çıktığı göreceğiz.Buna tıkladığımızda ise hemen alt kısımda ilgili kodun IL'ini görebiliriz.Bu kısıma sağ tıkladığınızda gelen menüden editleme, silme ve kod ekeleme işlemlerinin yapıladığı menülerden yapacağımız işleme göre hareket edebiliriz.

Aslında burda editleme işlemi için iyi bir IL bilgisi gerektiğini görmekteyiz. Ama context menüdeki "Replace all with code" menüsü tüm bu sorunları ortadan kaldırıyor. Reflector'ün ürettiği kodun sadece metodun içindeki kodu kopyaladıkdan sonra Replace all with code menüsünü tıklayalım.Aşağıdaki gibi kopyaladığımız kodu metodun içine kopyaladıkdan sonra istediğimiz değişiklik ve eklemeleri yapalım.Sol alt kısımdakı "Preview IL" butonuna tıkladıkdan sonra Sağ alt kısımdakı Ok butonu aktifleşecektir. Ok dedikten sonra Reflexil yeni kodlarimizi artık injecte etmiştir.

Görüldüğü gibi uygulamaya yeni bir satır eklendi ve metod da eğer "huh!" girilirse false "huh!" dışında bir değer girildiğinde ise true değeri üretecektir :) umarim şifreyi doğru tahmin edecek kadar şanslı değilsinizdir :)

Soldaki ağaçtan assembly mizi seçtiğimizde Reflexil bize uygulamayı kaydetme imkanını verecektir.

Düzenlediğimiz exe'yi kaydedip çalıştırdiğimizda ise aşağıdaki gibi bir sonuç alabiliriz.

 

      

Umarım faydalı amaçlara hitap edecek çalışmalar için sizlere kolaylık sağlayacaktır bu yazı ;)

 Örnek uygulama :

blog_codeinjection.rar (33.98 KB)
 
Categories: .NET | C# | Inceleme

Debug işlemleri yaparken yeri geldiğinde bir o kadar yararlı ve zaman kazandırıcı özellikleri  çoğunlukla gözden kaçırıyoruz. Oysa yapmamız gereken breakpoint üzerine sağ tıklamak ve özellikleri incelemek.

Condition : Eğer belirli bir duruma göre debug işlemini gerçekleştirmek istediğinizde bu özelliği aktif hale getirebilirsiniz. Aşağıdaki kod üzerinden örnek vermek gerekirse; Do metodunda dummyValue değişkenin değeri 22 ise debug işleminin aktif hale gelmesini istersem ;

gibi bir Condition eklemem yeterli olacaktır. Eğer dummyValue 22 den farklı bir değer ise debug işlemi sırasında breakpoint yokmuş gibi işlem görecektir. BreakPoint'e bir Condition eklediğinizde breakpoint'in ikonunun değiştiğini göreceksiniz. Bu kısımda da  otomatik isim tamamlama özelliğinin aktif olması harika birşey!

Hit Count : Debug işlemi sırasında o ana kadar kaç defa breakpoint'e gelindiğini takip edebiliriz.İsterseniz de "eğer bu breakpoint'e x kadar gelindiğinde artık debug işlemi yapılmasın" da diyebilirsiniz. (Açılan dialog penceresindeki combobox'dan diğer seçenekleri inceleyiniz.)

Filter : Belirli filitreler koyarak debug işlemlemini aktif hale getirebiliriz. Aşağıdaki resimde hangi filitreleri uygulayacağımız açıklanıyor zaten. Bunlar dışında bir filitre uygulamak istediğinizde buna izin verilmediğini göreceksiniz.Örneğimizdeki filitrede eğer bu metod "debugTest" isimli Thread tarafından çağrılmışsa debug işlemi aktif hale gelecektir.

When Hit... : Debug işemi aktif hale geldiğinde isterseniz Output Window'a durum bilgilerini yazdırabilir, isterseniz de VS.NET 2005'e ait çeşitli makrolardan birini çağırabilirsiniz. Örneğimizde breakpoint'in hangi metod içinde olduğunu ve bu metodu kimin çağırdığını yazdırıyoruz. Ardından da o satırı yorum satırı haline getiren bir makroyu çalışrırıyoruz.

 

Tanımlamarımızı yapıp debug modunda uygulamamızı çalıştırdığımızda aşağıdaki gibi bir sonuç alıyoruz.

public Form1()
{
    InitializeComponent();
    CheckForIllegalCrossThreadCalls =
false;
}
private void button1_Click(object sender, EventArgs e)
{
    DoOp();
}

public void DoOp()
{
   
Thread th = new Thread(Do);
    th.Name =
"debugTest";
    th.Start();
}

int dummyValue = 22;
public
void Do()
{
   
for (int i = 0; i < 5; i++)
    {
         Text = i.ToString(); //Breakpoint konulan satır
    }
}

 


 
Categories: .NET | C# | Inceleme

November 3, 2008
@ 10:22 PM

Debug işlemleri yaparken işimize yarayacak 3 adet Attribute'ü aşağıdaki örnek üzerinden incelersek ;

DebuggerDisplay attribute'ü ilgili sınıfdan nesne örneğini incelediğimizde debug penceresinde istediğimiz şekilde görünmesini sağlayabiliriz.

DebuggerStepThrough  attribute'ü ile de F11 ile kod debug edildiğinde bu kod satırların debug işlemi sırasında dikkate alınmayacağını belirtir. Örneğin

Ogrenci o = new Ogrenci();
o.Name = "ali";
o.No = 22;

gibi bir kod satırında o.Name="ali"; satırında iken F11 'e bastığımızda Name özelliğinin set metoduna dallanacağını biliyoruz. Fakat DebuggerStepThrough attribute'ü set için uygulandığından bu dallanma gerçekleşmeyecek o.No=22 satırından itibaren debug işlemi devam ecektir. (Laf aramızda süper bir atrribute'müş kendisi yahu ;) )

DebuggerBrowsable isminden de açıkça belli olduğu üzere bu attibute'ün uygulanmış olduğu nesnenin X özelliği debug ekranında görüntülenmeyecektir.

 

[DebuggerDisplay("Ad ={Name},No = {No}")]
public class Ogrenci
{

   private string _name; 
   public string Name
   {
      [DebuggerStepThrough]
      get { return _name; }

      [DebuggerStepThrough]
      set { _name = value; }
   }

   private int _no;
   public int No
   {
      get { return _no; }
      set { _no = value; }
   }
   private int _x;
   [DebuggerBrowsable(DebuggerBrowsableState.Never)]
   public int X
   {
      get { return _x; }
      set { _x = value; }
   }
}


 
Categories: .NET | C#

October 28, 2008
@ 10:03 AM
MVP Global Summit 2008'de lanse edilen ve önemli özelliklerinden bahsedilen Dev10 yani vs.net 2010'un  CTP haberini sonunda gördük :)

Evet evet, şaka gibi ama değil, şunun şurasında 2010'a ne kadı ki :) değil mi ?

Aşağıdaki adresten indirebilir

http://www.microsoft.com/downloads/details.aspx?FamilyID=922b4655-93d0-4476-bda4-94cf5f8d4814&DisplayLang=en

şurdaki adresten de

http://msdn.microsoft.com/en-us/vs2008/products/cc948977.aspx

detaylı bilgi edinebilirsiniz.


 
Categories: .NET

Microsoft klasiği olan bir klasik olan Service Pack haberi ile yine karşınızdayız :)

Özellikle WPF ile ilgili çalışmalar yapanların şiddetle kurmalarını tavsiye ediyorum.Şurdaki linkden bu service pack ile neleri tamir ettikleri hakkında detaylı bilgi mevcut.

Burdan Vs.NET 2008 ( 831.3 MB lik iso dosyasi da şurda) ve burdan da .NET Framework 3.5 için gerekli Service Pack leri indirebilirsiniz.

Overview kısmına gözatmanızda fayda var derim. Kurulumdan önce de readme dokümanını okuyunuz. Örneğin vista kullanıcıları için

Visual Studio 2008 SP1 installation fails when the Windows Vista sidebar is on.

To resolve this issue:

1. Right-click the Sidebar icon in the notification area, at the far right of the taskbar.
2. Click "Exit".

açıklaması ile beni benden almıştır :)))))

 


 
Categories: .NET

July 30, 2008
@ 09:17 AM

Sevgili Sefer Algan ve Burak Selim Şenyurt ile kısa bir süre önce beğeni ile takip edilen  .NET Radyo'nun 3. ve 4. bölümlerini c#nedir?com da yayınlandı.

3. bölümde ORM ve LINQ konusunda merak edilen ve  sıkça hakkında soru aldığımız Object Relational Mapping kavramı ve LINQ to SQL yaklaşımı üzerinde duruldu. ORM araçlarının amaçları, kullanım alanları , avantaj ve dezavantajları üzerinde durduk.

4.bölümde ise Yeni .Net Kavramları konulu söyleşiyi gerçekleştirdik. .Net Framework 3.0, 3.5, Asp.Net 3.5, Futures, Volta, WCF, WPF, Silverlight, Astoria gibi pek çok kavram üzerinde kısaca durmaya çalıştık. Amaç Microsoft ürünleri ile uygulama geliştiren uzman ya da yeni başlayan geliştiricileri kavram kargaşısından bir nebze de olsa kurtarmayı amaçladık.

Çok kısa bir süre sonra diğer .NET Radyo'ların hazırlanmasına başlayacağımızı belirteyim.


 
Categories: .NET | Inceleme | Yasam

Kaynak kodları sizde olmayan bir dll'inizin olduğunu düşünün (.net frameworkdeki tüm dll lerin kaynak kodu yok ki zaten bizde) içinde onlarca tip ve bu tiplere ait metodlar, özellikler vs vs. Peki siz " yahu şu xxx tipinin yyy metodu private değil de public olsaydı oh ne güzel tak tak çağırır kullanırdım" diye aklınızdan geçirdiğinizde ilk yapılacak iş Reflection ile private metodu çağırmak olurdu ki, hem kullanması biraz karşık - parametrelerin uyum kontrolu, tip kontrolü, koddaki kirlilik de cabası - hem de performans sorunundan dolayı tam düşüncelerimizdeki o "sadeliği :) " gerçekleyemiyor :))  o zaman yapılacak iş dll'i açık private metodu public yapıp sonra aynı dll'i bozmadan tekrar kaydetmek... Bu işi yapan çok güzel bir aracı sizlere tanıtmak istiyorum...

Şurdaki adresten edinebileceğimiz aracı kurdukdan sonra test amaçlı bir dll projesi oluşturup public ve private üye elemanlar içeren bir tip ekleyip dll'i oluşturalım.

using System;
using System.Collections.Generic;
using System.Text;

namespace DllEditTest
{
    public class DummyObject
    {
        public string GetXml()
        {
            return "<xml>";
        }

        private void Cagiramazsinki()
        {

        }
    }

    class SecretObject
    {
        private int _price;
        public int Price
        {
            get { return _price; }
            set { _price = value; }
        }
    }
}

Örnek Dll'i test edecek bir uygulama oluşturup, kullandığımızda SecretObject isimli tipe beklediğimiz gibi erişmediğimizi görürüz.

Yine beklediğimiz gibi DummyObject sınfından bir nesne oluşturduğumuzda  Cagiramazsinki isimli private metodun görünmediğini görürüz.

 

Şimdi CFF Explorer uygulamasını başlatıp ilgili dll'i bu uygulama ile düzenlemek için ( File -> Open ) açalım. Aşağıdaki resimdeki gibi dll'in içerisindeki erişilebilen tipin metod bilgilerine erişelim.Dikkat ederseniz sadece erişilebilen public metodlarının listelendiğini göreceksiniz. Listeden Cagiramazsinki isimli private metodu seçtip sağ kısımda Flags satırının en sonunda "Click Here" yazan yere tıkladığınızda metodun özellikleri çıkacaktır. Bu kısımda "public" seçeneğini seçip dialog penceresini kapatıp, dll'imizi kaydediyoruz.

Tekrar dll'i test ettiğimz örnek uygulamamıza dll i eklediğimizde artık bu metodun da çağrılabildiğini göreceğiz.

 

Yine benzer şekilde TypeDef node'undan SecretObject'i seçip Flags kısmından sınıfımızı public olarak işaretleyip dll imizi kaydettikden sonra bu sınıfa da test projemizden erişilebildiğini görürüz.

Böylelikle bir dll in tüm özelliklerini değiştirirek kendimize özel hale getirip kullanabiliriz. Tabi ki iyi niyetle, tüm bu çabaların daha iyi uygulama geliştirme amaçlı olduğunu aklımızdan çıkarmadan değil mi ? :))))) Daha fazla bilgi için bu yararlı aracın sayfasından yararlanabilirsiniz.

Bir sonraki yazımda da yine iyi niyetli düşüncelerimizi gerçekleştirmek için neler yapabileceğimizi inceleyeceğiz.


 
Categories: .NET | Inceleme

Kod yazarken mouse kullanmayı sevmyenler için klavye kısa yolları önem kazanmaktadır( ayrıca kod yazmakda hız kazandırdığı da gayet açıktır) Hoşuma giden bir o kadar da az bilinen bazı kısayolları sizlerle paylaşmak istedim.

1- Kod yazarken birçok kez kopyalama işlemi yapıyoruz. Daha önce kopyalanan kodu,  2. kopyalama (ctrl + c) işleminden sonra kaybetmiyormuşuz :) yani vs arkaplanda kopyalanan kodları tutuyormuş. Ctrl + Shift + V ile bu kopyalanan kodlar arasında gezebiliyoruz.

Daha önceden kopyalanmış bir kodu yapıştırmak istediğimizde ctrl + shift +v tuş kombinasyonuna birden çok kez bastığımızda daha önceden kopyalanmış kodları da görebiliyoruz

2- Namespace'ini bilmediğimiz ya da o anda hatıryalamadığımız bir Type'in ismini doğru şekilde yazdığımızda type'in isminin hemen altında küçük kırmızı bir simge çıkararak, vs.net bize iki öneride bulunmaktadır. İster o anda direk namespace ismi ile kullanmayı, istenirse de using ifadesi ile kodun başına namespace'i eklemeyi önermekedir. Bu menüyü klavyeden elinizi kaldırmadan görebilmek için Ctrl + . tuş kombinasyonunu kullanabilirsiniz. (Teşekkürler Mustafa Güven :) )

 

3- Uzun metodlarda ya da sınıf tanımlamarında açılan ve kapanan küme parantezleri (braces) arasında dolaşmak için Ctrl + ] tuş kombinasyonunu kullanabilirsiniz.


 
Categories: .NET | Inceleme

Oluşturduğumuz assemblyleri Global Assembly Cache'e (GAC) yüklemek için gerek gacutil konsol uygulamasını gerekse de Control Panel\Administrative Tools altındaki Microsoft .NET Framework 2.0 Configuration aracını kullanarak manuel yükleme işlemini gerçekleştirebiliyoruz.

Peki bu işlemi yardımcı araçlar ile manuel olarak değil de bazı ihtiyaçlardan dolayı :) programatik olarak gerçekleştirmek isteyebilirsiniz. Reflector ile biraz .NET'i kurcaladığımda - eh! .net framework kendi içinde böyle bir desteği mutlaka sağlıyordur mantığından yola çıkarak - aşağıdaki resimden de görebileceğiniz GacUtil isimli bir sınıf ile karşılaştım.



Aşağıdaki basit bir reflection işlemi ile kendi assembly'imizi GAC'a yükleyebiliriz.

   1:  namespace BTAkademi.TestCodes
   2:  {
   3:      class Program
   4:      {
   5:          static void Main(string[] args)
   6:          {
   7:              //GAC'dan System.Web dll'i yükleniyor
   8:              Assembly asm = Assembly.Load(@"System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
   9:   
  10:              // Type bilgisi alınıyor
  11:              Type t = asm.GetType("System.Web.Configuration.GacUtil");
  12:              // Metodu invoke edebilmek için GacUtil türünden nesne oluşturuluyor
  13:              object o = Activator.CreateInstance(t);
  14:   
  15:              //Metod bilgisi alınıyor
  16:              MethodInfo mi = o.GetType().GetMethod("GacInstall");
  17:   
  18:              //metod çağrılıyor
  19:              mi.Invoke(o, new object[] { "C:\\gacTest.dll" });
  20:   
  21:          }
  22:      }
  23:  }


Not : GAC'a yüklenmek istenen assembly'nin public key token'a sahip olması gerekmektedir.

 

13/7/2008 tarihli düzenleme :

try
{
    System.EnterpriseServices.Internal.Publish gac = new System.EnterpriseServices.Internal.Publish();
    gac.GacInstall(yuklenecekassemblyadi);
}
catch (System.Security.SecurityException se)
{

}

şeklinde de yüklenebiliniyormuş :))) Eh azmetmek gibisi yok.


 
Categories: .NET | C# | Code | Inceleme

.net dünyasına ilk adım atanlardan sıkça duyduğum soruların başında "bu namespace'leri nerden bileceğim, bu class'ın var olduğunu nerden bileceğim, ya da hangi namespace içerisinde olduğunu nerden bileceğim" şeklinde sorular geliyor. Ben de "zamanla ve kullandıkça, ihtiyacınız oldukça" diye cevaplıyorum.

Şu ve şurdaki linklere dikkat edersek aslında .net framework'ün ne kadar geniş bir dünya olduğunu, hatta biraz abartırsak da "dibsiz bir kuyu" olduğunu da söyleyebilirim ;)

Gün geçmiyor ki yeni assembly'ler, yeni namespaceler ve type'larla karşılaşmayalım sayın programcılar :)


 
Categories: .NET | C# | Inceleme

16 Şubatta Çankaya üniversitesinde daha önce iki kez Istanbulda düzenlemiş olduğumuz etkinliğimizi gerçekleştirdik. Tüm katılımcılara faydalı olduğumuzu umarım. Etkinliğin düzenlenmesinde başta İlker Acar olmak üzere, diğer MSP arkadaşlara teşekkür ederiz.

Not : Berk sana ayrıca teşekkür ederim ;) o güzel kahvaltı mekanı ile bizleri buluşturduğun için :)




 
Categories: .NET | Yasam

January 30, 2008
@ 11:21 PM
Linq to Sql de veritabanı sunucusuna giden sorguları SQL Profiler ile izleriz. Fakat daha kolay bir yol var. Aşağıdaki resim gayet açıklayıcı ;)
Tek yapmamız gereken DataContext türünden nesnemizin Log özelliğine istediğimiz çıktıyı vermek olacaktır.



Eğer kodumuzu aşağıdaki gibi düzenlersek bu defa da üretilen T-SQL istediğimiz herhangi bir fiziksel dosyaya kaydedilecektir.

testDataContext db = new 
db.Log = new StreamWriter("C:\\l2s.log"); var v = from p in db.Persons where p.Surname == "asma" select p.Name; Text = v.First(); db.Log.Close();
l2s.log dosyasının içeriği aşağıdaki gibidir.

SELECT TOP (1) [t0].[Name]
FROM [dbo].[Person] AS [t0]
WHERE [t0].[Surname] = @p0
-- @p0: Input NVarChar (Size = 4; Prec = 0; Scale = 0) [asma]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8

 
Categories: .NET | C# | Code | Inceleme

C#nedir?com ekibi olarak çok güzel bir etkinliğin dah altına imzamızı atmış olduk.

Tüm arkadaşlarıma ve katılımcılara teşkkür ediyorum.

16 Şubatta Ankara'da görüşmek üzere.


  
 
Diğer tüm resimler için buyrun.

 
Categories: .NET | Internet

Ekim ayında şu adresten .net kaynak kodlarının bir kısmının ilerde geliştiriciler için açılacağını duymuştuk. Geçen zaman sonunda ScottGu şu linteki güzel haberi bizlerle paylaştı. Kendisi bile mutlu olmuş bu haberi duyurmaktan ;)

Sadece VS.NET 2008 için geçerli olan bu işlem, debug yaparken aşağıdaki .net kütüphanelerinin kodlarını göreceğiz. Ençok da System.Threading,  System.Reflection, System.Windows.Forms kısımlarını merak ediyorum!

  • .NET Base Class Libraries (including System, System.CodeDom, System.Collections, System.ComponentModel, System.Diagnostics, System.Drawing, System.Globalization, System.IO, System.Net, System.Reflection, System.Runtime, System.Security, System.Text, System.Threading, etc).
  • ASP.NET (System.Web, System.Web.Extensions)
  • Windows Forms (System.Windows.Forms)
  • Windows Presentation Foundation (System.Windows)
  • ADO.NET and XML (System.Data and System.Xml)

En kısa zamanda C#nedir?com da konu ile ilgili bir video hazırlamaya çalışacağım.


 
Categories: .NET | Inceleme

January 15, 2008
@ 08:47 PM

Değerli Arkadaşlar, biliyorsunuz bu ay sonunda Visual Studio.NET 2008 ve SQL Server 2008 in lansmanı yapılacak. SQL Server 2008 ile güzel bir yeniliği sizlerle paylaşmak istiyoruz. Veri tabanında BLOB (Binary Large Object) nesnelerini özellikle veritabanında dosya tutmak istediğimizde kullanıyoruz.  Özellikle iş akışı ve döküman yönetimi sistemlerinde veritabanında dosya tutmaya başladığımızda veritabanı gün geçtikçe dosya sistemi gibi büyümeye başlıyor, ve yedekleme işlemi işkenceye dönmeye başlıyordur. SQL Server 2008 dosya sistemi ve ilişkisel veritabanı sistemini kullanarak hibrid bir model sunuyor bizlere. Yani 2008 den itibaren artık BLOB işlemleri veritabanında bir kolon şeklinde tanımalanabilecek ancak istersek dosya içeriğini file system'de tutabileceğiz. Böylece ilişkisel veri modelinden vazgecmeden geniş binary içerkli dosyaları fiziksel olarak diskte saklayabileceğiz.  Veritabanı ise fiziksel dosya sistemine bir nevi referans gibi çalışacak. Bu işlem tamamen opsiyonel olacağı için eski mantıklada çalışmak mümkün olabilecek.


 
Categories: .NET | Code

November 14, 2007
@ 01:22 AM

Düşündüğümden daha çok kişi çalışıyormuş. Özellikle ilk sıradaki  sağdan ikinci hanımefendinin ne iş yaptığını merak ediyorum ;)

Kaynak : http://blogs.msdn.com/charlie/archive/2007/11/12/visual-c-team-picture-fall-2007.aspx

CSharpTeam.jpg (2,19 MB) (Resmin büyük hali)
 
Categories: .NET | C#

November 6, 2007
@ 04:31 PM

Şu linkteki habere göre Visual studio 2008 ve .NET 3.5 bu ay içinde release olacakmış. Haydi hayırlısı diyelim.

Şurdaki linkten de .NET 3.5 'un namespace posterini (pdf) indirebilirsiniz. Posterin önizlemesi için şu linke bakabilirsiniz.


 
Categories: .NET

Şu sıralar Visual Studio 2008 ile birlikte gelecek olan, debug işlemleri sırasında framework'ün kodlarını da debug edebileceğimiz haberi herkesi heycanlandırıyor. E güzel gelişme tabiki.

Peki bu yenilik gelmeden önce napıyorduk ? Ya da debug işlemlerine açılması planlanan DLL'ler dışında bir Dll'i debug etmek istersen ne yapabiliriz? Diğer bir amaç ise projemizde kullandığımız 3. parti Dll'leri - kodları bizde olmayan- debug etmemiz olabilir.

Bildiğiniz üzere nerdeye dünyanın ençok kullanılan decompiler aracı olan Reflector AddIn altyapısı sayesinde birçok geliştirici eklemeler yapabiliyor bu uygulamaya. Bunların arasında en güzellerinden bir tanesi de Deblector. Kısa deblector sayesinde reflector'ü kullanarak bir uygulamayı debug edebiliyoruz.

İlgili linklerden Reflector ve Deblector uygulamarını indirdikten sonra reflector uygulamasının View->Add Ins.. menüsünden ilgili plugin'i eklememiz gerekiyor.

Şimdi küçük bir uygulamayı debug etmeye çalışalım. Örnek olması açısında aşağıdaki basit kod üzerinden açıklamay yapmaya çalışacağım

        private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection("data source=.;database=Northwind;user id=sa;pwd=1");
            SqlCommand cmd = new SqlCommand("select * from Categories",con);
            DataTable dt = new DataTable();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dt);
            MessageBox.Show(dt.Rows[0][1].ToString());

        }

Amacımız Debug işlemi sırasında SqlDataAdapter nesnesinin varsayılan yapıcı metodunu (Default Constructor) incelemek (Bunu Visual Studio kullanarak yapabilmemiz imkansız). Reflector uygulaması açıp Tools menüsünden Deblector'ü aktif hale getirdiğimizde sağ tarafda yeni bir bölüm, toolbar da debug işleminde kullanacağımız butonları görebiliriz.

Şimdi File->Open menüsünden debug etmek istediğimiz uygulamayı seçip işlemlerimize başlayabiliriz.

Sol tarafdaki Tree'den reflector_text.exe yi seçip F7 ile uygulamayı - ya da toolbardan ilgili butona tıklayarak - debug işlemini başlattımızda (aynı zamanda reflector_test.exe nin çalıştırıldığına da dikkat edelim)yukardaki gibi bir ekran ile karşılaşıyoruz. Sarı ile işaretlenmiş IL kısmı o anda hangi satırı debug ettiğimizi göstermekte, istenirse yukardaki kısımdan ilgili kod bloğunun C#  karşılığını da görebilmekteyiz. Alltaki siyah - Shell - kısımda ise o anda hangi satırın debug edildiğini görebilmekteyiz. Visual Studio'dan alışık olduğumuz  F10 ile satır satır ilerleyebilir, F11 ile de o anda debug edilen metodun içerisine girerek işlemlerimize devam edebiliriz.

Sol Tree'den button1_click metodunu seçip breakpoint - toolbardaki kırmızı ikon - koyarak debug işlemini başlatalım.

Çalışan uygulamamızda button1 e tıkladığımızda breakpoint koyduğumuz yerde bizden komut beklemeye hazır durumda olduğunu göreceksiniz.Artık F10 ya da F11 ile kodları debug etmeye başlayabiliriz.

 


 
Categories: .NET | Inceleme

Uygulamamızda debug yaparken nesnelerimizi daha anlaşılır şekilde görmek için çeşitli Visualizerları kullanırız. Örneğin bir DataTable ya da DataSet'in içeriğini debug işlemi sırasında Visualizer yardımı ile çok daha anlaşılır bir şekilde inceleyip, doğru datalarla çalışıp çalışmadığımıza karar verebiliriz. Yeri geldiğinde XML dosyalarımızın içeriğini de daha anlaşılır şekilde görüntülemek için XML Visualizer'den faydalanırız.

Visual Studio 2005, belirli tipler için visualizerlardan yararlanabilmemizi sağlıyor. Ama bu harika IDE istenildiğinde kendi nesnelerimizi de debug işlemi sırasında özel geliştirdiğimiz bir visualizer ile gösterebilme imkanı da sağlıyor. Senaryomuz şöyle;

Uygulamamız içinde Person isimli bir türümüz var. Debug işlemi sırasında kendi geliştirdiğim Visualizer ile (aşağıdaki resimde görüldüğü üzere) bu nesneyi görüntülemek istiyorum.

Bunun için yapmamız gereken projemize yeni bir Debugger Visualizer Item'ı eklemek olacaktır. Örnek projemiz ,geliştirğimiz Visualizer'i test edecek bir Windows uygulaması (PersonVisualizerTest), Person ve türeyen nesnelerimizi barındıran bir dll (EntityObjects), ve daha sonra da kullanmak amaçlı geliştireceğimiz içerisinde kendi visualizer'imizin bulunduğu bir başka dll (PersonVisualizerLib) projesinden oluşacak.

Person nesnemiz aşağıdaki gibidir. Dikkat edecek olursanız Serializable Attribute'ü uygulanmıştır nesnemize.Yani nesnemizin geliştirdiğimiz visualizer tarafından görüntülenebilmesi için nesne serileştirilebilir olmalı.

   [Serializable()]
    public class Person
    {
        Bitmap _picture;
        public Bitmap Picture
        {
            get { return _picture; }
            set { _picture = value; }
        }

        private int _no;
        public int No
        {
            get { return _no; }
            set { _no = value; }
        }

        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

    }
 

Gelelim visualizer'imizin geliştirilmesine. DLL Projemize (PersonVisualizerLib) sağtıklayıp Add->New Item... menüsünden "Debugger Visualizer"'i şeçip tamam diyoruz.Personel nesnemizin içinde olduğu dll i projemize ekledikten sonra Visualizer'imizin kodunu aşağıdaki gibi tasarlıyoruz.

[assembly: DebuggerVisualizer(typeof(PersonVisualizerLib.PersonVisualizer),
Target = typeof(EntityObjects.Person),
 Description = "Personel Debug Ekaranı ile Göster")]

namespace PersonVisualizerLib
{
  
    public class PersonVisualizer : DialogDebuggerVisualizer
    {
        protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
        {
           
            Person person = (Person)objectProvider.GetObject();
            using (PersonForm displayForm = new PersonForm())
            {
                displayForm.person = person;
                windowService.ShowDialog(displayForm);
            }
        }
    }
}

assembly attribute'ü ile visualizer'in tip bilgisi, hangi türden nesnelerin visualizer'da görüntüleneceği, ve debug esnasında visualizer'imizin görüntülenecek adını belirtiyoruz. Show metodunun içerisinde de debug esnasında görütülenmesini istediğimiz nesneyi alıp person türüne dönüştürdükten sonra Form'a bu nesneyi görüntülemesi için veriyorum

PersonForm, nesnemin görsel olarak gösteriminde kullanacağım form nesnem. Form'un üzerinde, person nesnesini gösterecek  PropertyGrid , person nesnesinin resmini gösterecek Picturebox , person nesnesinin Name ve No  özelliklerini gösterecek iki adet Label controlü içermekte.Form'un kodu da aşağıdaki gibidir.

        public Person person;
        public PersonForm()
        {
            InitializeComponent();
        }

        private void PersonForm_Load(object sender, EventArgs e)
        {
            label1.Text = person.Name;
            label2.Text = person.No.ToString();
            pictureBox1.Image = person.Picture;

            propertyGrid1.SelectedObject = person;
        }

Tüm bu hazırlıklardan sonra visualizer'i test edeceğim projeme Person nesnesinin içinde olduğu Dll'i ekliyorum. Visualizer'imizin VS.NET 2005 tarafından işlem görebilmesi için oluşan PersonVisualizerLib.dll 'ini C:\Documents and Settings\{user_name}\My Documents\Visual Studio 2005\Visualizers dizinine kopyalıyoruz. Artık kendi geliştirdiğimiz tüm uygulamalarda bu visualizer'i kullanabiliriz. Ama makina düzeyinde tüm kullanıcıların'da bu visualizer'den yararlanmasını istiyorsak ilgili dll'i C:\Program Files\Microsoft Visual Studio 8\Common7\Packages\Debugger\Visualizers dizinine kopyalamanız yeterli olacaktır.

Artık debug esnasında oluşturğumuz visualizer ile Person nesnemizi tasarladığımız şekilde görebilmek mümkün olacaktır.

Tabiki bu örnek dışında, örneğin geliştirdiğiniz bir asp.net uygulamasında ürün sepeti'nizi bir grid içinde görüntülemekten tutun, bir stream nesnesini istediğiniz formatta görüntülemeye kadar birçok özel visualizer geliştirerek debug işlemlerini hem kolaylaştırıp hem de daha zevkli hale getirmek mümkün :=)

PersonVisualizerTest.rar (43,77 KB) (Bahsi geçen örnek uygulama ektedir.)
 
Categories: .NET | C# | Inceleme

Kimi projelerde sürekli aynı pencere yapılarına sahip ekranlar ile karşılaşırız. Ya da kendi oluşturduğumuz bir ürünümüz vardır Visual Studio 2005 için, kullanıcı File->New Project dediğinde bizim ürünümüze ait standart bir projenin seçilip (ilgili dll'ler ve resource dosyaları eklenmiş) hızlı bir şekilde projeyi oluşturması imkanını kullanıcıya vermek isteyebilirz.

Örneğin ASP.NET Ajax Extention'u kurduğumuzda artık File->New WebSite dediğimizde açılan dialog penceresinde "Ajax Enabled Website" isimli bir proje şablonu karşımıza çıkar ve seçip projeyi oluşturduğumuzda artık tek yapmamız gereken kodumuzu yazmaktır. İlgili Dll'ler, tüm ayarları yapılmış web.config dosyası hazır haldedir.

Benze bir uygulamayı geliştirmek VS.NET 2005 de oldukça kolaydır. Örneğimizde ben "MyModule" isimli örnek bir windows projesi hazırladım.Menüleri, ToolStrip'i, DataGridView ve StatusStrip'den oluşan standart basit bir windows formu. Örnek olması açısından da StatusStrip deki linke tıkladığımızda ilgili linke yönleniyor (amaç hazır kodların bulunması.) Diğer bir detay da projemizde kendi oluşturduğumuz bir dll'inde ekli olması.

Amacımız artık File->New Project işlemi yapıldığında Project Template ekranında hazırlamış olduğumuz örnek projenin bir şablonunun çıkması vr Kullanıcı bu şablonu seçip projeyi oluşturduğunda bizim hazırladığımız projenin aynısının oluşturulmasının sağlanması. Bunun için yapmamız gereken File menüsünden Export Template... menüsüne tıklamak.

İlk olarak "Project Template" seçeneğini işaretleyip Next ile devam ediyoruz.

Template icon kısmından project Templates ekranında görünmesini istediğimiz resmi, eğer beğenmediyse Template name kısmından ismi değiştirebilir, Template description kısmında ise templatimizi kullanacak kişiye gerekli açıklama bilgisini verebilirsiniz.  "Automatically import ..." seçeneğinin aktif olması gerekli dizinlere oluşturulacak proje şablonunuzun ( kendisi bir zip dosyası olmaktadır ) otomatik olarak kaydedilmesini, "Display an explorer ..." seçeneğinin aktif olması da işlem bittikden sonra ilgili klasörün açılmasını sağlayacaktır. Finish diyerek işlemimizi bitiriyoruz. Bu işlemleden sonra C:\Documents and Settings\{kullanıcı}\My Documents\Visual Studio 2005\My Exported Templates dizinine ve C:\Documents and Settings\{kullanıcı}\My Documents\Visual Studio 2005\Templates\ProjectTemplates dizinlerine MyModule.zip isimli dosyayı kopyalayacaktır.

Artık Vs.NET'te Project Templates Dialog penceresinde "My Templates" kısmında MyModule isimli bir proje şablonun oluştuğunu göreceksiniz.

 Seçip projeyi oluşturduğumuzda ise hazırlamış olduğumuz şablonun birebir aynısını karşımızda göreceğiz.

 

MyModule.rar (36,44 KB) (Anlatımda kullanılan örnek proje ektedir.)
 
Categories: .NET | Inceleme

Debug işlemleri yaparken sıklıkla karşılşatığımızın durumların başında nesnemiz başka bir nesneyi içeriyorsa bu nesneyi ancak hiyeraşik bir biçimde inceleme şansına sahip oluyoruz. Aşağıdaki resimde daha net birşekilde ne demek istediğim belli oluyor.

Görüldüğü gibi Report nesnemiz içerde List<int> türünden Results özelliğine (property) sahip. Bu özelliğin hangi değerlerini tuttuğunu görmek için + ile detayına inip bakmamız gerekiyor. Bu özellik baska bir nesneyi temsil ediyor, ve o nesne de içerisinde iç içe (nested ) başka değerleri tutuyor olabilir. Bu durumda + lar ile detaylara inip boğulabilirsiniz ;-) Ama çoğumuz bu iç içe nesnelerin aslında sadece işimize yarayacak kısmını debug işlemi sırasında görmek isteyebilir, hatta bu kısımları özelleştirerek istediğimiz gibi bir görüntü sağlayabiliriz. Aşağıdaki resim ile bir önceki resimi kıyaslayarak debug işlemi sırasındaki görüntüleri karşılaştırabilirsiniz.

Bu görüntünün sağlabilmesi için yapmamız gereken Report nesnemizin debug işlemi sırasında görünmesini isteyeceğimiz şekilde bir proxy class'ını hazırlamak.

[DebuggerTypeProxy(typeof(ReportDebuggerProxy))]
    public class Report
    {
        private DateTime _date;
        public DateTime ReportDate
        {
            get { return _date; }
            set { _date = value; }
        }

        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        private List<int> _results = new List<int>();
        public List<int> Results
        {
            get { return _results; }
            set { _results = value; }
        }

        private int _dummy;
        public int Dummy
        {
            get { return _dummy; }
            set { _dummy = value; }
        }

    }

Report nesnemize DebuggerTypeProxy attribute'nün uygulandığı dikkatinizi çekmiştir. Bu atrribute sayesinde Report nesensi debug işlemi sırasında sanki Report türünden bir nesne değil de ReportDebuggerProxy nesnesinin bir görüntüsüymüş gibi karşımıza çıkacaktır. Şimdi proxy görevini görecek sınıfımızı yazalım.

public class ReportDebuggerProxy
    {
        Report _report;
        public ReportDebuggerProxy(Report report)
        {
            _report = report;
        }

        public string ReportDate
        {
            get { return _report.ReportDate.ToLongDateString();}
        }
        public string Name
        {
            get { return "Raport Name : " + _report.Name; }
        }

        public string Results
        {
            get
            {
                StringBuilder sb = new StringBuilder();
                foreach (int result in _report.Results)
                {
                    sb.Append("(");
                    sb.Append(result.ToString());
                    sb.Append(") ");
                }
                return sb.ToString();
            }
        }
    }

Görüldüğü gibi debug sırasında görmek istediğimiz özellikleri belirtiyoruz. Proxy sınıfında dikkat ederseniz Report sınıfındaki Dummy özelliğine yer verilmemiş ve diğer özellikler ise görülmek istendiği şekilde özelleştirilmiş.

 


 
Categories: .NET | C# | Inceleme

September 11, 2007
@ 01:10 AM

Tools->Options dan çıkan pencerede Environment->Start Up'ı şeçiyoruz,bu kısımdaki At startup seçeneklerinden show empty environment i seçerek açılışta VS.NET 2005'i yavaşlatan Start Up Page'i kaldırabiliyoruz.

Diğer tercihimiz de açılışta karşımıza çıkan splash screen'i kaldırmak. Bunun için de VS.NET 2005 için masa üstünüzde bir kısayol oluşturun.Sağ tıklayıp properties dediğimizde açılan pencereden Shortcut Tab'ını seçip, Target kısmındaki bölüme /nosplash parametresini ekleyerek biraz olsun VS.NET 2005'in açılışını hızlandırabiliriz.


 
Categories: .NET | Inceleme

September 3, 2007
@ 10:06 PM
Ctrl+F ile VS.NET 2005'de gelişmiş şekilde arama işlemleri yapabiliyoruz. Bir başka arama şekli de şöyle (Incremental Search demiş MS)

Ctrl + I tuş kombinasyonunu uyguluyoruz açık bir kod penceresinde. Ikon değiştikten sonra (dürbün ve aşağı ok şeklinde bir ikon beriliyor) sonra aramak istediğimiz kelimeyi yazıyoruz. O ana kadar yazdığımız kelime ile eşleşen bir kelime bulunduğunda şeçili hale getiriliyor.( Firefox kullananlar için yabancı gelmeyecektir bu arama şekli ;) ) Tekrar Ctrl + I ya bastığımızda bir sonraki eşleşen bulunur. ESC ile aramdan çıkılır, Ctrl + Shift + I ile de bir önceki bulunana gidilir.




Ha unutmadan editörde belirli bir alanı seçmek istiyorsanız da Alt tuşuna basarak seçim işlemini gerçekleştirin.



 
Categories: .NET | Inceleme

September 2, 2007
@ 11:10 PM

GAC (Global Assembly Cache) tüm uygulamaların ortak kullandığı (shared assembly) assembly'lerin tutulduğu özel bir dizindir. Genellikle C:\windows\assembly dizinidir (%windir%\assembly). Bu dizine girip baktığımızda alışık olmadığımız bir yapı ile karşılaşacağız. E özel dedik ya ;)

E peki bu dizini normal dizin gibi görme şansımız yok mu? Var! şöyle ki;

1- Başlat -> Çalıştır -> regedit -> Enter
2- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion bölümüne geliyoruz.
3- Bu kısma "Binary Value" ekleyip ismini DisableCacheViewer verip, değerini de 1 olarak ayarlıyoruz.

İşlem bitti, artık ilgili dizine gidip baktığınızda bildik bir dizin ile karşılacaksınız.Ha bu işlemi neden mi yaptık? Belki bir dll çok hoşumuza gitti, decompile edip inceleyeceğiz, olmadı alıp bunu direk projeme eklicem (xcopy)...Olamaz mı ?


 
Categories: .NET

September 2, 2007
@ 10:52 PM

Çok uzatmadan konuya direk gireyim. Kendi nesnemize ait bir dizimizi debug yaparken aşağıdaki gibi görürüz.

Yine Namespace.NesneIsmi yapısı karşımızda.Hmm diyor nesnemize ait class bildiriminde ToString metodunu override ediyoruz.

public override string ToString()
{
   return Name;
}

Bundan sonra yeniden duruma baktığımızda aşağıdaki gibi daha anlaşılır bir görüntü ile karşılaşıyoruz.


 
Categories: .NET

August 22, 2007
@ 08:52 AM

Sevgili mesai arkadaşım Alper ASMA, 27 Ağustos Pazartesi günü 14:30 - 16:00 saatleri arasında BT Akademi'de ücretsiz WCF semineri verecek. Hem konunun önemli olması hem de bu kadar deneyimli birisinin semineri veriyor olması, seminerin kaçırılmasını olanaksız kılıyor.


 
Categories: .NET | Inceleme

C# kodlarını VB.NET'e, VB.NET kodlarını da C#'a çeviren sayfa için linki ziyaret ediniz ;)

Please visit the following link to convert the C# codes to VB.Net and VB.Net codes to C# ;)

 


 
Categories: .NET | C#

Bitmiyor...Bitmiyor... gelişmeler bitmiyor. İşte bitanesi daha. Web uygulamaları geliştirenler için istemciler ile data arasında URI tabanlı iletişim kuran kütüphane.

Efendim hadise şuymuş ; Silverlight ( güzel bir açıklama için bu linke bir gözatın), Flash gibi araçlar ile istemci tarafında etkili arayüzler sağlayabiliyormuşuz.Ama bu arayüzler ile datalara erişlemiyormuşuz. Ajax gibi teknolojiler ile erişiyormuşuz da işte render idi şuydu buydu tam istediğimiz olmuyormuş. Napacakmışız özel URI'ler ile data tarafına istekde bulunarak XML dosyaları şeklinde dataları alıp client tarafında işleri halledecekmişiz. Misal;

http://myserver/data.svc/Customers dediğimiz de Northwind deki Customers dataları gelecekmiş.. Yok ben where ile şart koşmak istiyorum derseniz http://myserver/data.svc/Customers[ALFKI] diyecekmişiz. Olmadı kardeşim Orders ile de bir ilişki kurmak lazım diyorsanız http://myserver/data.svc/Customers[ALFKI]/Orders buyrun :) Yetmedi mi ? http://myserver/data.svc/Customers[ALFKI]/Orders[Active eq true] işte bi tane daha... Hoppala nerde bunun order by'ı diyenler için http://myserver/data.svc/Customers[ALFKI]/Orders[Active eq true]?$orderby=OrderDate işte bir imkan daha... Bunların yanında da sayfalama yapmak isteyenler için bedava olarak şu şekilde bir URI mevcut : http://myserver/data.svc/Customers?$skip=30&$take=10 

http://myserver/data.svc/Customers[ALFKI] gibi  sorgu sonucunda da aşağıdaki gibi XML sonucları elde ediliyor.

<DataService xml:base="http://myserver/data.svc">

 <Customers>

  <Customer uri="Customers[ALFKI]">

   <CustomerID>ALFKI</CustomerID>

   <CompanyName>Alfreds Futterkiste</CompanyName>

   <ContactName>Maria Anders</ContactName>

   <ContactTitle>Sales Representative</ContactTitle>

   <Address>Obere Str. 57</Address>

   <City>Berlin</City>

   <Region />

   <PostalCode>12209</PostalCode>

   <Country>Germany</Country>

   <Phone>030-0074321</Phone>

   <Fax>030-0076545</Fax>

   <Orders href="Customers[ALFKI]/Orders" />

  </Customer>

 </Customers>
</DataService>

Henüz CTP aşamasında olan bu proje hakkında detaylı bilgiyi burdaki linkten edinebilirsiniz.

 


 
Categories: .NET | Asp.net | Inceleme

April 29, 2007
@ 10:34 PM

Efendim 3.0'ın ne olduğunu anlayamadan,anlatamadan, kullandıramadan 3.5 beta1 hizmete girmiş (Yanında Orcas Beta1 i almayanı dövüyorlarmış biline). Deneyelim görelim ;) Umarım 3.0 isimlendirme faciasından sonra toparlamışlardır ortalığı. E be Vista alacağın olsun.


 
Categories: .NET

BT Akademi'nin değerli eğitmenlerinden Özcan Değirmenci'nin BT Akademi'de verdiği WinForm 2.0 Akademideki örnekleri incelerken  bol bol  StructLayout  attribute'leri ile  karşılaşıyorum . Malum  Windows API seviyesinde kod  yazmayan  geliştiricilerin pek ihtiyaç duymadığı hatta birçoğunun haberi dahi olmadığı ama kontrol geliştiren, ciddi manada detaylı windows uygulamaları geliştirenlerin - örneğin .NET Framework'ün desteklemediği sistem fonksiyonlarının kullanıldığı - sıklıkla kullandığı bu attrribute sayesinde class'ların yada structların - kısaca Type'ların - memory'de istenilen şekilde yerleşmesini sağlayabiliyoruz.

Herhangi bir Type bildirimi yapıldığında CLR performans sağlanması adına bu Type'ın üye elemanlarının memory'deki yerleşim düzenini kendisi ayarlamaktadır. Bu şekilde hem daha az memory kullanımı optimize ediyor hem de ilgili Type'ın üye elemanlarına erişim hızının artırılmasını sağlıyor. Fakat bazı Windows API fonksiyonları bizden parametre olarak özel bir şekilde memory'de  dizilmiş struct isteyebiliyor. Bu durumda memory'deki dizilimini CLR'nin değil de bizim yapmamız gerekiyor. İşte burda StructLayout attribute'ü tüm ihtiyacımızı karşılıyor. LayoutKind numaralandırıcısını (Enumeration) kullanarak dizilimi kendimiz beliryebiliyoruz.

Not : Struct tanımladığınızda otomatik olarak bu özellik Sequential'dir. Ama bu attribute'ü bir class için kullanmak isterseniz mutlaka LayoutKind.Sequential numaralandırıcısını kullanmalısınız.

Auto : CLR'nin yaptığı gibi
Sequential : Sıralı bir şekilde aynen bildirimdeki sıraya göre
Explicit : Biz nasıl istiyorsak öyle.

[StructLayout(LayoutKind.Sequential)]
public struct Coord
{
     int x;
     int y;
}

gibi..Eğer bu dizilimin bizim isteğimize göre olmasını istersek de LayoutKind.Explicit numaralandırıcısını aşağıdaki gibi kullanmalıyız.

[StructLayout(LayoutKind.Explicit)]
struct Coord
{
     [FieldOffset(0)]
     public int x;
     [FieldOffset(4)]
     public int y;
}

Üye elemanlarına FieldOffset attribute'ünün uygulandığını görüyoruz. Bu sayede memory'de hangi elemanın hangi offsetten -kaçıncı byte'dan - itibaren yerleşeceğine karar  verebiliyoruz. Yukardaki örnekte yapımızın 0. byte'ından itibaren x'in yerleşeceğini, 4.byte'dan itibaren de - sizeof(int) de kullanabilirsiniz. int'in büyüklüğü kadar memoryde ilerlemek için - y'nin yerleştirileceğini belirtebiliyoruz. Bu özellik sayesinde aslında çok az memory kullanarak struct yapımızın içinde çok sayıda üye eleman tanımlayabiliriz. Yapmamız gereken tekşey tüm üye elemanlarımızın 0. offsetten itibaren memory'ye yerleşmelerini sağlamak.

[StructLayout(LayoutKind.Explicit)]
struct Coord
{
    [FieldOffset(0)]
    public int x;
    [FieldOffset(0)]
    public int y;
    [FieldOffset(0)]
    public long z;
}

---- x
---- y
---- ---- z
Bu sayede 8 byte'lık bir alanda 2 int bir de long türünden değişken saklayabiliyoruz ;) C 'deki union yapısına baya bir benzedi değil mi? Ha dersiniz ki ben gittim z ye 12 değerini atadım sonra gittim x'e 22 değerini atadım z'nin değeri şimdi ne oldu ? Bilmem ne oldu ? :) Aşağıdaki kodu biraz kurcalamakda fayda var.

public class Test
{
     static void Main(string[] args)
     {
         Coord c = new Coord();
         c.z = 2000000000;
         c.x = 20;
         Console.WriteLine(c.z);
     }
}

[StructLayout(LayoutKind.Explicit)]
struct Coord
{
     [FieldOffset(0)]
     public int x;
     [FieldOffset(0)]
     public int y;
     [FieldOffset(0)]
     public long z;
}



 
Categories: .NET | C# | Code | Inceleme

March 21, 2007
@ 06:48 PM

Microsoft'un bu platformu sayesinde küçük aygıtlar çok kolay bir biçimde programlanabilicek. Küçük aygıtlardan kasıt ARM-7 ARM-9 mikroişlemcilerine sahip aygıtlar. Minimum 256KB lık bir RAM ve 512KB'lik Flash/ROM  gerekiyor uygulamarın çalışması için. .net uygulamalarımızın çalışabilmesi için bir işletim sistemi gerekiyorken, bu platform işletim sistemine gerek kalmadan C# kodlarımızın çalışmasına olanak sağlıyor. İşin güzel tarafı yönetilebilir kod ( managed code) ile çok kolay birşekilde bu küçük işlemciler programlanabilcek. Şu anda sadece C# ile uygulama geliştirilebiliyor. Sanırım kısa zamanda içinde  - en azından C++ .NET- diğer diller için de  destek çıkacağını düşünüyorum. SDK'yi kurduğunuzda VS.NET 2005 le birlikte entegre olup, bir güzel aşina olduğumuz ortam ile uygulama geliştirilebiliyor. Beraberinde gelen emülatör ile de yazdığınız uygulamaları test edebiliyorsunuz.  Sanırım şurdaki video az çok durumu açıklıyan nitelikde.


SDK yi kurup örnek kodları incelediğimde hiç de yabancılık çekmeden kendim de birkaç eklenti yapabildim. İncelediğim örnekler içinde, Formlar, Thread, Socket uygulamarı içeren örneklerdi ki, C# ile uygulama geliştiren bir kişi bu kodları çok rahat yazabilir. - Biraz buton ve PIN olayları kafa karıştırabilir - XML desteğinin olması ve Resource dosyalarını rahatlıkla kullanabilmek sanırım mikroişlemci programlamayı Microsoft'un ne kadar üst seviyeye çektiğini göstermek için yeterli :) Tabi bellek miktarı çok kısıtlı oldugu için çok kolay bir şekilde bellek azlığından dolayı exception almak içten bile değil:)))


Daha fazla bilgi için şu ve şu ve şu linklere, tartışma grubu için şu linke, konu ile alakalı channel9 daki şu video yararlı olacaktır. Kısa zamanda kahve makinalarında C# kodlarının çalışmasını görmek mümkün olacak sanırm. Bu platformun hangi şirketler tarafından desteklendiğini şu linkten inceleyebilirsiniz.



 
Categories: .NET

March 6, 2007
@ 01:09 PM

Hazırladığınız projelerde dökümantasyon kullanıyorsanız mutlaka bir şekilde NDoc tan haberiniz vardır. Fakat VS.NET 2005 de bunu kullanamıyorduk ancak VS.NET 2003 ile hazırladığımız assembly'ler için kullanabiliyoruz. Bu arada diğer başarılı şekilde döküman üretebilen doxygen'i alternatif olarak kullanıyorduk (Graphviz ile birlikte kullandığınızda kaynak kodlarınızın UML diagramlarını da üretebiliyor ). Taki birisi çıkıp NDoc'un VS.NET 2005'i için güncellemesini yapana kadar. Şu anda beta olan NDoc05, çeşitli denemelerimde hatalarla uğraştırmasına rağmen sonuçta başarılı bir şekilde dökümantasyon üretebildğini gösterdi.



Bu arada tavsiyem direk NDocGui.exe yi değil de kaynak kodunu indirip ..\NDoc2005\src\Gui\bin\Debug altındaki NDocGui.exe'yi çalıştırmanız. Ancak bu dizindeki NDocGui.exe ile başarılı şekilde döküman üretebiliyor. Umarım proje geliştirilmeye devam ederek büyük bir açığı kapatır.


 


 
Categories: .NET

February 14, 2007
@ 12:46 AM

Visual Studio 2005'in hızlı kod yazma adına en güzel özelliklerinden birisi de Snippet'lar. Herzaman yazdığınız onlarca satır kodları birkaç tuş ile kaynak kodunuza ekleyebilirsiniz. Örneğin;kolay bir şekilde for döngüsünü yazmak için VS.NET 2005 editöründe for yazıp TAB'a basmanız, ya da if - else yapısı için if yazıp TAB'a basmanız yeterli.


Benzer birçok snippet hazır olarak C:\Program Files\Microsoft Visual Studio 8\VC#\Snippets\1033\Visual C# dizininde mevcut. Burdan hazırda bulunan snippet'ları inceleyerek kendinize özel snippet'lar oluşturup, oluşturduğunuz  *.snippet uzantili dosyayı ilgili dizine koyduktan sonra VS.NET 2005 editöründe kendinizin hazırlamış olduğunuz dosyanın (örneğin sqlconn.snippet) ismini (sqlconn) yazarak TAB'a basmanız yeterli olacaktır.


Bu sitede kullanıma hazır birçok snippet bulunmakta. İncelemekte fayda var.


 
Categories: .NET

VS.NET'te Start Page'i bilmeyen yoktur sanırım. Recent Projects kısmında enson oluşturduğumuz projelerimizin kısa yolları yer alır. Bu projeleri dosya sisteminden silmemize rağmen öyle bir proje olmamasına karşın Recent Projects kısmında hala görünür - ne vardı kontrol etseydi VS.NET - Neyse ki bir proje ismini regedit.exe yi kullanarak registry de aradığımda  - bir ihtimal  - HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\ProjectMRUList  yolunda Recent Projects de listelediği projeleri sakladığını gördüm. Bu kayıtları registryden silindiğinde temiz bir Recent Projects ile karşılacaksınız.


 


 
Categories: .NET

Bu güzelim editörü daha da güzelleştiren klavye kısa yollarının - mesela bir kod bloğunu seçtikten sonra Ctrl+K+C - neler olduğunu merak ediyorsanız şu dosyayı (pdf) indirip inceleyebilirsiniz. Hatta poster yapıp duvarınıza asabilirsiniz.



 
Categories: .NET

November 28, 2006
@ 12:00 AM

Web alanında Flash'ın üstünlüğü tartışılmaz bir gerçek. Buna karşın uzun süre sessiz kalan Microsoft - java'ya karşı sessiliğini nasıl bozduğunu gördük - şimdi de Flash'a (Adobe) karşı sessizliğini bozmaya hazırlanıyor. SWF2XAML ile SWF uzantılı dosyaları XAML ye dönüştürerek Windows uygulamalarına istediğiniz gibi görsellik kazandırabileceğiz. (Kullanabilmek için .net Framework 3.0)


Konu hakkındaki videoyu bu linkden izleyebilirsiniz.


Bir de bu video var.



 
Categories: .NET

November 8, 2006
@ 12:00 AM

Sonunda. Detaylı bilgi için şu linkten yararlanıyoruz.


ASP.NET AJAX 1.0 Beta 2 çıktı.


Enterprise Library v3 de yolda.


Yelkenler yine fora!


 
Categories: .NET

Uygulamamızın adı mylittleadmin, C# ile geliştirilmiş yanında da CSS2, Javascript, XmlHttp kullanılmış. .NET 1.1 ve 2.0 üzerinde çalışabiliyor.


Şu adresten uygulamayı deneyebilir beğenilirse ücretli olan yazılımın siteye üye olunarak light bir versiyonu indirilip kullanılabilir. İndirdikten sonra IIS'e dosyaları attıp konfigürasyon dosyasından gerekli ayarları yaptıkdan sonra kolay bir şekilde kullanıma hazır hala geliyor.



 
Categories: .NET

Geçenlerde sınıfta öğrencilerle "Acaba .NET kodlarını Java'ya çevirilebilir mi?" tartışması yapıyorduk. Kısmen mümkün olabileceği kararına varmıştık. Yaptığım araştırmada şurdaki sitede  bu konu ile ilgili bir çözümün olduğunu belirten bir ürün ile karşılaştım. Temel olarak MSIL'in byte koda çevrilmesine dayanan bir çözüm. İncelemeye değer.



 
Categories: .NET

September 20, 2006
@ 12:00 AM

Popüler python dilinin .NET için uyarlanmış hali olan IronPython 1.0 duyruldu. Bir de F# var ki tam bir karma python, matlab,C#,oCaml,Scheme gibi dillerin özelliklerini barındırdığını söylüyorlar.


 
Categories: .NET

VS'yu kurdunuz. Yanlışlıkla projeleri VB.NET'te - yanlış anlaşılmasın C# programcıları için söylüyorum ;) - açma seçeneğini seçtiniz diyelim.Her proje açışınızda gidip C# sekmesini seçmeniz gerecekecek. Peki çözüm ?
Yani proje oluşturduğuzda varsayılan dil olarak C#'ın olmasını istiyorsanız aşağıdaki adımları uygulamanız yeterli.



How do I change the default language in Visual Studio 2005?


Use the Import and Export Setting Wizard:


1. Choose Tools -> Import and Export Settings...


2. Select Reset All Settings and click Next


3. Select whether you would like to save the current settings and click Next


4. Select the settings you want to use and click Finish


Atagün Sarıbayraktar'a teşekkür ederim.


 


 
 
Categories: .NET

August 23, 2006
@ 12:00 AM
Birçoğumuzun database uygulaması geliştirirken kullandığı çeşitli teknikler var. Bunlardan birisi de katmanlı mimari. .NET ile katmalı mimari tekniğini kullanarak uygulama geliştirenler için çok güzel bir makale ile karşılaştım. Okumanızı şiddetle tavisye ederim. Hele de yeni başlayanlar mutlaka okumalı. Pdf ini de buradan indirebilirsiniz.
 
Categories: .NET

Microsoft'tan güzel bir çalışma. Visual Studio .NET 2005 in programcılara sağladığı birçok kolaylık anlatılmaya çalışılmış.


gayet eğlenceli 16 kısa video mutlaka izlenmeli.Özellikle 12. ve 346. videolar takdire şayan :) VB.NET çiler içinde de 232. ve 212. videoları tavsiye ediyorum.


Nedense birçok videoda kendimi görür gibi oldum. Hayır olsun! 


 
Categories: .NET

August 16, 2006
@ 12:00 AM
1.0, 1.1,  2.0 derken 3.0 Temmuz CTP si de geldi.
 
Categories: .NET

August 13, 2006
@ 12:00 AM
Malum .NET Radyo'nun ilk konusuydu web mi windows mu diye. Msdn de gezinirken konu ile alakalı güzel bir kaynağa rastladım. 8 ayrı dalda kıyaslamada bulunmuş.
 
Categories: .NET

August 9, 2006
@ 12:00 AM

WinFS ha çıktı ha çıkacak yok vazgeçildi yok yok eklenecek derken sonuna Beta 2 den vazgeçilmiş. Yoksa WinFS hatamıydı, hayalmiydi, yoksa projenin yönetimi mi başarısızdı?  WinFS öldü mü? Buyrun okuyunuz WinFS Team'in konu ile ilgili açıklamasını.


 
Categories: .NET