Sevgili Sefer Algan'ın blogunda şu yazıyı okuduğumda baya bir gülmüştüm. Sayın Gürkan Yeniçeri bizim senseyi mimlemiş. Böylece Sefer Hocam, Gürkan Bey'in blogunu eleştirmekle yükümlü hale geliyor moda kuralınca:) Kimse alınmasın güncenmesin de ben mimleyemem kimseyi. Blog'u ben yazmadım,tasarımını da ben yapmadım - ha temayı ben seçtim, eleştirilmeye açık :p -  bilindik dasBlog işte. Ha içerik bakımından eleştirilirsem zaten yorumlar kısmının kapısı herkese açık :)) Sevgili Caner'in de beni mimlediğini şurdaki yorumundan öğrendim. Eh davate icabet etmemek ayıp olur dedim :

1- Sevgili Caner'cim, Blog'un gayet güzel ve kullanışlı.  Amma velakin  nedir şu Türkçe karekter problemin. Girdilerindeki konu başlıklarında,üstteki tablarda - eğer benim browserlarımın dil probleminden kaynaklanmıyorsa - ı-i karmaşası bariz göze batıyor.
2- Sen de sonunda benim gibi birçok blog denemenden sonra bir blogda karar vermiş gibi görünüyorsun. Amma yahu o tema renklerini sen mi seçtin? nasıl renkler öyle ciyak ciyak! bağırıyorlar. Yok sen mühendis adamsın. UI, renkler, göz, ışık, gözü yormadan yazı okuma gibi konuları neden dikkate almadın ? Hele bir pembe var ki, bence bir şekilde girenin erkek olduğunu anla ve pembe temanı o kullanıcıdan bir şekilde sakla. İnsan hakkında yanlış düşüncelere varabilir.
3- Çoklu dil hizmeti vermen gayet şık olmuş. En kısa zamanda diğer dillerdeki yazılarını da artırmalısın. Sönük kalmış Türkçe yazılarının yanında.
4- Kategoriler kısmındaki .NET kategorisi dikkatimi çekti de. Yahu bir başlık altında mı toplayacaksın koskoca .Net dünyasını. Bence detaylandırmalısın.Ayrıca kategorilerdeki girdi sayıların yok. Mesela ben kaç tane .Net ile ilgili yazın var nasıl öğreneceğim ? Saydırma millete :)
5- En kısa zamanda bir takvim bekliyorum bloguna. Sormadan edemedim de o Devamı butonu ne işe yarıyor? :))))
6- İçerik bakımından da gayet güzel olduğunu düşünüyorum. Daha fazla deneyimlerini paylaşacağını biliyorum.

diye yazdım. Söyleyenin bir yüzü kara kodlamayanın bloguna TürkTelekom erişim yasağı koysun diyorum.




 
Categories: Inceleme

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 26, 2007
@ 01:17 AM

Msn'i biraz daha zevkli hale getirmek tamamen elimizdeymiş de haberim yokmuş ;) Peltek konuşmak mı yoksa karşıdaki size ne yazdı ise sizin de ona aynı cümlenin tersten yazılmışını göndererek sinir etmek mi istersiniz. ;) Ufak çaplı bir kod...

Projenize (ClassLibrary) öncelikle C:\Program Files\MSN Messenger\MessengerClient.dll 'i (Sevgili Özcan Değirmenci'nin geliştirdiği FOX Decompiler'i ile bu dll'i bir inceleyin derim) referans olarak ekliyorsunuz. Bir de geliştirdiğiniz AddIn'i Msn Messenger'e ekleyebilmek için -AddIn ekleme bölümü kapalı geliyor - Registry'deki HKEY_CURRENT_USER\Software\Microsoft\MSNMessenger Key'ine AddInFeatureEnabled isimli DWORD Value ekleyip değerini 1 yapıyoruz.

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Messenger;

public class Peltek:IMessengerAddIn
{
    MessengerClient m;
    public void Initialize(MessengerClient messenger)
    {
        m = messenger;
        m.AddInProperties.Creator = "Oğuz YAĞMUR";
        m.AddInProperties.Description = "Peltek konuştuvuv";

        messenger.OutgoingTextMessage += new EventHandler<OutgoingTextMessageEventArgs>(messenger_OutgoingTextMessage);
        messenger.IncomingTextMessage += new EventHandler<IncomingTextMessageEventArgs>(messenger_IncomingTextMessage);
    }

    void messenger_IncomingTextMessage(object sender, IncomingTextMessageEventArgs e)
    {

        //if (m.AddInProperties.Status == UserStatus.Busy)

        char [] ch = e.TextMessage.ToCharArray();
        Array.Reverse(ch);
        string ters = new string(ch);
        //m.SendTextMessage("Sevgili " + e.UserFrom.FriendlyName + " şu anda meşgulüm. Lütfen daha sonra konuşalım ;",e.UserFrom);
        m.SendTextMessage(ters,e.UserFrom);

    }

    void messenger_OutgoingTextMessage(object sender, OutgoingTextMessageEventArgs e)
    {
        //e.Cancel = true;
        string text = e.TextMessage;
        string yeni = "";
        foreach (string kelime in text.Split(new char[] { ' ' }))
        {
            yeni += kelime.Replace("r", "v").Replace("s", "ss") + " ";
        } 
        m.SendTextMessage(yeni, e.UserTo);
    }
}

Bu arada neden namespace'i yok bu projenin derseniz - ki namespace'siz olur mu? hani nerde global::Peltek demeyin sakın.Demek istediğim açık seçik ortada :) -  Msn'e eklemeye çalıştığımda AddIn'i Class ismi ile dosya isminin (Peltek.dll) aynı olmadığını - Sanırım Reflection kullanıo :p - söyleyip kızıyordu. Ben de Msn'in Reflection kullandığını düşünüp - ki başka ne düşündüğümü sormayın -  namespace i kaldırdığımda başarılı bir şekilde eklediğini gördüm :)
Size çalışırsa ne diyeyim ben beceriksizmişim ;)


 
Categories: Code

March 22, 2007
@ 04:27 PM
Yeni günlükten merhaba. En kısa zamanda içeriği yükleyeceğim.
Bu mecaramın da kısa bir öyüküsünü dasBlog'u beğenenler ve kullanmak isteyenler için yazacağım.


 
Categories: 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

Sevgili dostum Sefer Algan, Amerika dönüşü getirdiği hediyeler ile resmen beni mest etmiş bulunuyor. Kendisine burdan bir kez daha teşekkür ediyorum. Tam da mouse'umun ömrü tükenmişken hediyeler içinde ferrari görünümlü mouse'yi görünce gözlerim fal taşı gibi açıldı. Efendim bu mouse cidden harika birşey. Laptopumda Bluetooth özelliğinin olmaması - Cep telefonu ile Laptop arasında resim vs. alıp verme için - biraz sıkıntıya sokuyordu. Ama bu mouse'u demek için takıp sürücülerini kurduğumda Bluetooth iconu belirince şaşırdım kaldım. Meğersem kendisi aynı zamanda bir Bluetooth aygıtı imiş. En güzel özelliklerinden birisi de derslerde ve seminerlerde işimi kolaylaştıracak olan sunumları yönetebilme özelliği. Powerpoint'i altta tuşları ile çok rahat (ileri, geri, ekran karatması, tam ekran özelliği, kırmızı lazeri) yönetebiliyor olmam. Ve o kadar güzel tasarlanmışki tuşlar ve tekerlek elimin altında resmen kayıyıor :) Diğer USB üzerinden çalışan mouse'lara göre çok rahat kullanımı var ve çok az hareket ile ekranda fır fır dolaşabiliyorum - ilk başlarda ekrandaki cursor'ü kontrol etmek için baya zorlandım -



Detaylı incelemeyi burdan yapabilirsiniz.


 
Categories: Inceleme

ASP.NET Uygulamalarında Javascript kullanan web geliştiricileri için  bu linkte javascript kodlarının VS.NET 2005 ile nasıl debug edileceği gayet güzel açıklanmış.


 
Categories: Asp.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

Windows servisi geliştirirken eğer sevisinizle beraber herhangi bir Form uygulaması da varsa ve servisinizin çalışma esnasında bu formun da görünmesini istiyorsanız sevisin özelliklerinden  " Allow service to interact with desktop " seçeneğini aktif yapmalısınız.



Tabi bunu kullanıcının değil de servis uygulamanızın yapması gerekiyor :) Fakat .net bunu yapabilecek bir imkan "henüz" sunmuyor. Bu durumda registry den sevisinizle ilgili Type değerinin 8. bitini 1 haline getirmeniz gerekiyor. Bunun içinde yapmanız gereken Type değerini 256 ile bitsel veya işlemine sokmaktır ki örnek kod aşağıda.

RegistryKey rootKey = Registry.LocalMachine;

RegistryKey subKey = rootKey.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\XXX\",true);
if (subKey != null)
{
    int typeVal = (int)subKey.GetValue("Type") | 256;
    subKey.SetValue("Type", typeVal);
}


 


 
Categories: Code