C# Nedir, Ne Değildir , Nasıl Çalışır ?

by eMRe 18. Aralık 2009 13:31

csharp nedir ne degildir
Tekrar merhaba, dünkü yazımda programlama dillerinin tiplerinden ve c# ın bu tipler arasında nasıl bir konumda olduğuna değindik.Şimdide C#'ın yapısından bahsedelim.

Öncelikle C# dediğimiz dil, bir .NET dil ailesine mensup dildir. Ve sadece .NET FrameWork yüklü olan bilgisayarlarda çalışır. .NET ile programlama yapabilmek için .NET'e uyarlanmış 60dan fazla dil vardır ve bunlar kullanılabilir. İşin güzel kısmı C# kodlarken dilerseniz Visual Basic ya da J# kütüphanelerini referans ederek onların methodlarını da kullanabilirsiniz.

C# ile yazılmış bir uygulamayı derlediğinizde oluşan exe bildigimiz exe'lere benzemez. Bildigimiz win32 exelerinin içinde bytecode bulunur, binary, yani makinanın anlayacağı ama insanın anlayamacağı kodlar bulunur. Ve bunlara kısaca PE yani Portable Executable derler. Çünkü çalışmak için işletim sisteminden başka hiç birşeye ihtiyac duymazlar. Ancak .NET ile oluşturduğunuz exe'ler PE olmazlar. .NET exesi diyebiliriz onlara. Bu exelerin içinde bytecode bulunmaz. Onun yerine MSIL ( MicroSoft Intercommon Language ) . Yani turkce izah edecek olursak ortak dil anlamına gelmektedir. Bu çok güzel birşeydir. Bir program yazdığımızı düşünelim. Bir button var tıklayınca ekrana merhaba yazısı geliyor. Bu programı isterseniz 10 farklı .net dilinde ayrı ayrı yazıp exelere cevirin. Bu exelerin içinde oluşan MSIL kodları tıpatıp aynı olacaktır.

 

 

İşte burda .NET FrameWork devreye giriyor. bir .net exe'sine çift tıkladığınızda .net framework devreye girer o exenin içindeki MSIL kodlarını okur ve bilgisayarın anlıyacağı hale cevirir ve program ile hardware arasında bir köprü oluşturur. Bu davranış biçimine JIT yani Just In Time compiler  denmektedir. Yani bir nevi siz her exe yi tıkladığınızda anlık olarak o ana mahsus arka planda compile (derleniyor) ediliyor ve çalıştırılıyor. Sanki yazdığınız program işletim sistemi üzerinde değil de .net framework üzerinde çalışıyormuş gibi oluyor. Dolayısı ile eğer exe nizin çalışacağı bilgisayarlarda .net framework kuruluysa acaba kullanıcının bilgisayarında hangi işletim sistemi var diye dert etmenize gerek kalmamaktadır.

 

Linux altında c# uygulamaları çalıştırmak mümkün. Ancak windowstaki kadar başarılı ve performanslı olmamaktadır. Mono adlı bir proje mevcut. Eger linux makinanıza mono kurarsanız daha sonra komut satırından "mono programınismi.exe" şeklinde komut vererek ilgili exe'yi mono üzerinden çalıştırabilirsiniz.

Aynı şekilde apache server için yazılmış lib-mono da bulunmaktadıır. Bu şekilde linux tabanlı sunucunuz uzerinde çalışan Apache altında asp.net sayfalarınıda çalıştırmanız bir yere kadar mümkün olabiliyor. Bunu şahsen denemiştim. Php ler ve aspx ler aynı klasör altında kardeş kardeş çalışıyorlardı. Çok huzurlu bir ortamdı:)

 

Özetleyecek olursak, .net dillerini kıyaslanamaz. Yok VB.NET daha guclu, yok J# daha guclu yok C# hepsini döver. gibi laflar çok anlamsız, çünkü sonuçta derlendiklerinde hepsi aynı MSIL kodları kullanılarak hazırlanılıyor. Diagrama da bakarsanız daha rahat anlarsınız, hangi dilde yazarsanız yazın, öyle yada böyle hepsi MSIL koduna dönüşüp ordan JIT'e geçiyor ve ordan da makina diline dönüşüyor. Her birinin syntax ı ve grameri farklı, Siz hangisinde kendinizi rahat hissediyorsanız onda geliştirin derim kendinizi. Ben neden c# ı tercih ettim ? Çünkü .net'in resmi dili olduğu için, populer olduğu için, kaynak sıkıntısı çekmediğim için, ismi havalı olduğu için :)

Etiketler: , , , , , , , ,

Bilgisayar | Programlama

C# İle Zip dosyası nasıl oluşturulur ?

by eMRe 14. Aralık 2009 13:44

Merhabalar, zamanında sizlere söz verdiğim üzere artık c# üzerine de birşeyler yazmaya başlıyorum. Ancak amacım kimseye sıfırdan C# öğretmek değildir. Hali hazırda az çok C# bilgisi olan, .NET nedir ne değildir bilen kişilerdir hedef kitlem. Eğer siz de az çok C# biliyorsanız. Yazacaklarımı anlamanız çok çok rahat olacaktır sizin için. Yorumlarınızla sorular sorabilirsiniz. Elimden geldiğince yardımcı olmaya çalışırım.

Bu ilk yazımda her zaman karşınıza çıkmayacak olan bir senaryodan bahsedeceğim. Günü gelir ilerde bir projenizde bazı dosyaları zipleyip istemciye öyle vermeniz icab edebilir. Ya da yazacağınız kod belli aralıklarla bir takım dosyaları zipleyip yedekliyor ya da arşivliyor olabilir. İşte bu gibi durumlarda bu makale sizin hayatınızı kurtarabilir.

Benim bu zipleme olayına ihtiyaç duyduğum senaryo şu şekildeydi : Elimizde büyük bir domain database'i mevcuttu. Her bir domain adı belli kategorilere mensuptu. Benden istenen şey yazılacak bir kod ile database den bu domainleri okuyacağım, her kategori için bir klasör oluşturacağım ve bu klasör altında bir text dosyası içerisine o kategoriye mensup domainler yazdırılacak, ve sonra butun bunların hepsi tek bir zip dosyasında istemciye verilecek. Dolayısı ile istemci bu zip dosyasını açtığında karşısına her kategori için oluşturulmuş klasörleri görecek ve istediğinin içine girip , içindeki txt dosyasına tıklayarak o kategoriye bağlı olan domainleri görebilecek.

 

C# ile zip dosyası oluşturmak gerçekten çok kolay. Bunun için birkaç yöntem mevcut. Eğer Vs.Net programınızda J# programlama dil desteği ve onun kütüphaneleri kuruluysa. J# kütüphanelerini C# kodu içerisinde kullanarak zip dosyası elde etmeniz mümkün. Ancak benim bilgisayarımda J# yüklü olmadığı için bu fanteziye hiç girişmedim.

Yapmamız gereken http://www.codeplex.com/DotNetZip adresinden DotNetZip adlı dll dosyasını çekmektir. Bu dosyayı yuklediğinizde içinde Ionic.Utils.Zip.dll diye bir dosya göreceksiniz. Bu dosyayı projemizin referanslarına ekliyoruz.

Tabi ekledikten sonra namespace'lerimize de "using Ionic.Utils.Zip;" bloğunu eklemeyi unutmuyoruz.

 

Bu kütüphane içerisinde kullanacağımız sınıfın ismi "ZipFile". Öncelikle bir adet ZipFile nesnesi örnekliyoruz :

ZipFile zip = new ZipFile();

Daha sonra "zip" nesnemizin içine dosyalarımızı atıyoruz. Bunun için AddFile() methodunu kullanıyoruz. Bu methodun iki kullanımı mevcut

zip.AddFile("C:\\Belgelerim\\deneme.doc"); // Bu şekilde kullanıldığı zaman C:\\Belgelerim\\deneme.doc konumundaki dosyayı direkt zip dosyasının içine atar.

zip.Addfile("C:\\Belgelerim\\deneme.doc","Kitaplar"); // Bu şekilde kullandığımız zaman ise oluşacak zip dosyasının içinde "Kitaplar" diye bir klasör oluşur. Ve deneme.doc onun için konulur.

Ekleyeceklerimizi ekledikten sonra zip dosyamızı oluşturmak için Save(); methodunu çağırmamız yeterli.

zip.Save("C:\\yedeklerim\\isim.zip"); // C: nin altındaki yedeklerim adlı klasörün altında isim.zip adında bir zip dosyası olarak kayıt gerçekleşiyor. Ve işimiz bitiyor.

Şayet bir web sitesi için bunu düşünüyorsanız. ve kullanıcılara bir takım şeyleri zipli olarak download etmelerini istiyorsanız. Save() methoduna webden ulaşılabilir bir path veriniz. Ve zip dosyasını onun  altında oluşturunuz. Arkasından da dosyanın bulundugu klasöre Response.Redirect(); ile yönlendirme yapmanız yeterlidir.

Saygılar

Etiketler: , , , , , , , , , , , ,

Programlama

Bu günlerde çok yoğunum...

by eMRe 17. Kasım 2009 01:30

Merhaba değerli okurlar, son 2 gündür çalışmakta olduğum şirkette üstlenmiş olduğum bir C# (C-Sharp) projesinin teslim tarihi bir hayli yaklaştığından dolayı, geceli gündüzlü evde-işte onunla uğraşmak zorunda kalıyorum. O yüzden bugünlerde bloguma pek fazla birşeyler yazamıyorum. Affınıza sığınıyorum :) Önümüzdeki cuma gününe kadar da sanırım bu yoğunlukta devam etmek zorunda kalacak.

Vakit buldukça yine birşeyler paylaşmaya çalışacağım, hatta proje tamamlandığı zaman nispeten biraz daha fazla vaktim olacağından biraz da teknik bilgiler paylaşmaya başlayabilirim. Ne dersiniz C# programlama dili ile ilgili bazı teknik bilgiler paylaşsam mı ? Ne nasıl yapılır ? şeklinde çözüm odaklı basit bilgiler..

Etiketler: , , , , , , , ,

Genel

Validation of Viewstate MAC failed

by eMRe 11. Ocak 2009 08:14

Yeniden merhabalar, işte meşhur hata " validation of viewstate MAC failed " belgeci.com'a üye olmaya çalışırken çoğunuzun aldığı hata buydu. Ne mutlu ki artık almıyorsunuz. Ne hikmetse bu hatayı FireFox kullandığınız zaman kesinlikle almıyorsunuz. Ancak Internet Explore ve türevlerini kullandığınız zaman nedense üye olmaya çalışırken ya da belge yollarken ya da bu işi genellersek veri tabanına birşeyler yazdrıamaya çalışırken alıyordunuz. Bu sorunun asp.net 2.0 'dan kaynaklanan büyük bir bug olduğunu söyledi bana araştırmalarım. Bazı yabancı forumlarda bu durumun daha çok, asp.net sitelerinde çok hızlı sayfadan sayfaya geçmeye çalışırken karşılaşılan bir problem olduğunu söylemişler, ama çözüm üreten pek yok açıkçası. Bende çözümü bulana kadar deyim yerindeyse akla karayı seçtim.

 

Ancak web.config dosyanızda systemweb boğumunun altına ekleyeceğiniz şu satır , siz de benim gibi Insert işlemleri yaparken hata alıyorsanız hayatınızı kurtaracaktır.

<pages validateRequest="false" enableEventValidation="false" viewStateEncryptionMode ="Never" >

bu ayarları kullanmanın bazı güvenlik açığı problemleri yaratabileceğini düşünenler var, ancak varsa da var diyorum. Hiç çalışmamasından sa birkaç açıkla çalışsın daha iyidir derim Laughing

 

Umarım sizin de hayatınızı kurtarır.

 

 

Etiketler: , , , , , , , ,

Cenk Özdemir'e bir teşekkür...

by eMRe 18. Aralık 2008 05:40

Yeni nesil belgeci.com sitesi altında BlogEngine.NET ile yaratılan bu ilk blogun, ilk yazısına Cenk Özdemir'e kocaman bir teşekkür ile başlamak istiyorum.

Gelelim teşekkürün sebebine ; belki sizler, son kullanıcılar olarak belgeci.com'da yapılan değişikliğin sadace tasarım ve arayüz olduğunu zannediyor olabilirsiniz. Buna hak veriyorum. Arka planda olan değişiklikleri görmenizi de zaten kimse sizden beklemiyor. Amaç daima siz kullanıcılara daha iyi hizmet vermek. Ben yine de biraz bahsetmek istiyorum. Belgeci.com bundan 4 sene önce Oktay Doğangün arkadaşımın da büyük katkılarıyla ASP diliyle kodlanmıştı. Ve yıllarca da bu şekilde devam etti. 4 Sene içerisinde sitemizin gözle görünen kısmı, yani tasarımı birçok defa benim tarafımdan değiştirildi. Ve malesef o yıllar boyunca sitemize yeni işlevsellikler katamadık, katmadık belki de katmaya üşendik. Çünkü o zamanda programlamaya bakış açımız ve yaklaşımımız gerçekten çok amatörceydi. Site tamamlandığı zaman herşey tıkırında işliyordu ama madalyonun öteki yüzüne baktığınızda karman çorman bir kod yığını goruyordunuz. Bu arap saçının içine dalıp yeni işlevsellikler eklemeyi ne Oktay'ın ne de benim gözüm yedi Smile.

Daha sonra bir IT mezunu olarak, çağa ayak uydurabilmek adına C# öğrenme kararı aldım. Hiç bilmediğim bir konuyu evde oturup öğrenmek gerçekten hiç benim tarzım değil. Bir şekilde birşeylerin beni zorlaması belki de motive etmesi gerekiyor. Bu vesileyle bir bilişim akademisine kayıt olarak c# kursu almaya karar verdim. Burda sizi motive eden iki unsur söz konusu. Bir, Cenk Özdemir, iki kursa vermiş olduğunuz paranın boşa gitme korkusu Tongue out . Kursun ismini burada açıklamak istemiyorum. Çünkü bir şirket olarak kendilerinden pek memnun değilim. Reklamlarını yapmak istemiyorum. Orası ile ilgili reklamı yapılacak bir object varsa, o da Cenk Özdemir'dir. 

 

Evet bana C#'ı öğreten, .NET Framework'ü ile tanıştıran kişidir kendisi. Hergün sınıfta sorduğum 132155653214 adet sorumu hiç bıkmadan içtenlikle cevaplayarak C#'ı iyi bir şekilde öğrenmemi sağladığı için kendisine teşekkürü bir borç biliyorum. O olmasaydı belki C#'ı hiç sevemiycektim ve öğrenemiycektim ve dolaylı olarak belki belgeci.com bugün aldığı şekli hiç alamıycaktı. Yeni nesil belgeci.com'u bir Cenk Özdemir öğrencisi olarak hocasına yakışır bir şekilde, mümkün olduğunca button-oriented olmayacak bir yaklaşımla kodladığıma inanıyorum. Umarım kendisi de bu yazıyı okuduktan sonra belgeci.com'a girer ve aynı fikirlere sahip olur. Kendisine burdan saygılarımı iletiyor ve yazımı noktalıyorum.

Etiketler: , , , , , , ,

Genel

Son Yorumlar

Comment RSS