Muhammed Tahiroğlu yazıyor
Yazılım ve Sanat

Visual Studio 2008'e Güçlü Dokunuşlar

Nisan 2, 2008 20:15, Muhammed

Yüklediniz, test ettiniz ve hatta kodlar yazmaya başladınız. Kiminiz altını üstüne bile çevirdiniz. Lâkin bir şeylerin eksik olduğunu hâlâ hissetmediniz mi?

Hissettiyseniz gelin buraya.

Resimde görülen fazladan menü öğeleri, PowerCommands for Visual Studio 2008 adlı bir eklentinin ürünü. VS içerisinde pek fazla efor gerektiren çoğu işi en fazla bir saniyede yaptırabiliyor.

Meselâ sevgili kardeşim, Solution Explorer'da açtığın ağacı geri nasıl toplardın? Ya da bir projeden diğerine referansları nasıl kopyalardın? Gözüne kestirdiğin proje dizininde bir konsol ekranı nasıl açardın? Proje genelinde kullanılmayan "using <Namespace>" deyimlerini toptan nasıl temizlerdin ve var olanları da sıralardın? Bir dosyanın tam fiziksel yolunu nasıl panoya alırdın?

Liste uzayıp gidiyor. Şimdi dil değil parmaklar konuşsun diyorsanız gidin indirin. Hedef gösteriyorum.


Kısım: Kod
Eylem: E-mail | Doğrudan Link | Yorum (0) | Yorum RSSRSS comment feed

Kaynağından Sofranıza MVC!

Mart 24, 2008 14:26, muhammed

Epeydir yazmıyorduk sevgili okur. Meraklanmayınız, buralardayız. Çok önemli işler çeviriyoruz içeride. Gitgide hudutları genişleyen bir iş. WCF'de son nokta.

Sivil hayatta da MVC ilgimizi çeker olmuştu. Önceki yazılardan takip etmişsinizdir.

Yeni olan haberi Scott Bey verdiler: ASP.NET MVC'nin Kaynak Kodu açıldı. Bu haber milleti pek heyecanlandırmadı. Zira vatandaş MVC'nin "Preview 2"sinden daha çok şey bekliyordu. Beklentiler boşa çıkınca herhalde heyecan söndü.

Öte yandan Microsoft, MVC'nin sadece bir kısmının kodlarını açıvermiş. İki adet assembly, "referenced assembly" lafzıyla derlenmiş olarak verilmiş. Kodu nerede diyenlere Phil Bey bu assembly'lerin .NET'e ait olduğunu ve genel kaynak kod paylaşım düzeneğiyle paylaşılacağını ifade etmiş.

Hâsılı, elimizde 2007 sonuna göre epey fazla şey var. Bu kodu indirip derleyebiliyorsunuz. Yalnız CodePlex'teki bu koda doğrudan ekleme veya düzeltme yollayamıyorsunuz. Ne yaparsanız kendinize.

Açık kod rüzgarına kaptırdık kendimizi gidiyoruz bakalım. Aman kodlar kapatılmasın.


Kısım: Kod
Eylem: E-mail | Doğrudan Link | Yorum (0) | Yorum RSSRSS comment feed

Add-In'lerin Kapınızı Çaldığı An

Şubat 3, 2008 02:07, Muhammed

İnsanoğlu, bazı şeylerin varlığını bilir, kabullenir ama o şeylerle ilgilenmez. Ne zaman ki ilgilenmek gerekti, hızlı bir biçimde öğrenme sürecine sokar kendini. Yazılım işinde de işler böyle cereyan ediyor.

En son misâl, geçen gün Visual Studio Add-In'ine ihtiyaç duymam. Proje dosyalarında, IDE düzeyinde ilişkiler tanımlamak için XML formatındaki dosyanın düzenlenmesi ve kaydedilmesi gerekiyordu. Bunu en kolay, IDE üzerinden bir add-in işlevini çalıştırarak yapabileceğim aşikardı. Aşikar olan yola yürüdük; arkamızda sessizlik.

Bu mesele üzerine, VB6'dan beri ortalıkta dolaşan MZ-Tools çokça eğilmiş. Şöyle bir liste hazırlayarak add-in geliştireceklere yol göstermiş. Eyvallah.

Bunun dışında, kişisel bir not olarak belirtmek isterim ki add-in geliştirmek apayrı bir tecrübe. IDE ortamını hedef alarak duvarları kesin ve dar bir alanda top oynamak gibi aynen. Çok kullanıcı-dostu (ne demek bu?) bir nesne modeli yok henüz. Daha bunlar da .NET'imsi olacak; vakit var.

Bizim iş mi? Tamam, görüldü. Projelerin üzerinden add-in'i tetikleyerek projede istediğimiz düzenlemeyi yapıyoruz. Ama henüz sağ tuşa eklemedik, "geniş zamanlar umuyorduk".  

 

 

Tags: , , ,
Kısım: Kod
Eylem: E-mail | Doğrudan Link | Yorum (0) | Yorum RSSRSS comment feed

İlk ASP.NET MVC Kod Örnekleri

Kasım 9, 2007 05:22, Muhammed
Haftalardır ASP.NET'in MVC atağını konuşup duruyoruz. Henüz millet olarak kodlayıp denemiş değiliz. Şimdilik bakınmakla yetiniyoruz.

Bir yandan Las Vegas'tan DevConnections 2007 esintileri vuruyor yüzümüze. Üstad Metin Karabiber de, bu esintiyi "vatan borcu" hassasiyetinde ufaktan taşımış, sağolsun.

DevConnections, doğal olarak ASP.NET MVC'yi de büyük bir kitle önünde sergilemek ve ilişkiyi diri tutmak için güzel fırsat. Nitekim Microsoft ekibi fırsatı değerlendirmiş ve bir sunum yapmış. Hanselman ve Elion arkadaşların sunumunu inceleminizi salık veririm.

Sunumdan çıkan ufak notları da buraya nakşedelim. [Parantez içi sözler fakire ait]

- ASP.NET MVC, hayatımıza test-yönelimli geliştirmeyi, gevşek bağlı bileşenleri getireceğine dair söz veriyor.
- URL'ler artık /UrunDetay.aspx?UrunId=26&ShowBasket=true şeklinde saçmalamaktan kurtuluyor, REST ve SEO ile samimi hâle geliyor: /urundetay/kahve-makinesi/showbasket vs. [Aman efendim, en çok sevindiğim şeylerden birisi.]
- Üstüne basa basa denen o ki, Web Form'lar bitmiyor. Web Form yerli yerinde dururken, MVC ona alternatif olarak ikram ediliyor. Artık Web Form zorlanan bir şey değil, tercihlerden sadece biri oluyor. [Ha şöyle.]
- Artık gevşeyin diyorlar. Dependency Injection (DI) veya Inversion of Control (IOC) teknikleriyle genişleyebilen uygulamalar yazın, coşun diyorlar.
- MVC altyapısı, ASP.NET'in sınıf hiyerarşisindeki karşılığı olan System.Web'den veriliyor.
- Tüm "açık kaynak" dünyasıyla da barışık deniyor. Meselâ "model" katmanında NHibernate, "view" katmanında Brail kullanabileceğimiz söyleniyor.

Bir "kontrol" sınıfından kod örneği:

[ControllerAction]
public void ShowPost(int id) {
     Post p = PostRepository.GetPostById(id);
     if (p != null) {
         RenderView("showpost", p);
     } else {
         RenderView("nosuchpost", id);
     }
}


Rahatlıkla anlaşılacağı gibi bu metod bir URL'yi temsil ediyor.

URL'ler kontrolörlere yönlendiriliyor. Onlar da bir iş yapıp akışı bir "View"a havale ediyorlar. "Rendering" için klasik Web Form bileşenleri kullanmanın yanında NVelocity, Brail gibi başka motorlar da kullanabiliyoruz. [Evet, gevşek bağlılık sayesinde.]

...

Cümle MVC taraftarı, web'in doğasına aykırı buldukları Web Form'larına nicedir veryansın ediyordu. Şimdi de bu Microsoft implementasyonuna biraz mesafeli duruyorlar. Bakalım perdeler açılıp CTP vitrine konunca kodlayan parmaklar ne diyecek?

Önyargısız takip ediyoruz ey okur.

COM COM Kurşunu

Kasım 5, 2007 20:30, Muhammed

VB6 ile hâlâ uğraşanlar vardır eminim. Elin adamı "legacy" diye vasıflandırıyor bu türden uygulamaları. Bildiğiniz "Enkaz Edebiyatı". Yeni nesil teknolojilerle ne kadar hemhâl olursanız olun, günün birinde mahkum olacaksınız "legacy" ile yüzleşmeye. Legacy denen şeyin bu arada, bir zamanların göz bebeği RAD ortamı olduğuna da dikkatinizi çekerim.

VB6 ile insanoğlunun sinir hücrelerinde meydana gelen en büyük tahribat, evrensel bileşenleri kullanırken yaşanıyor: yani COM'u. Windows'un sicil defteri, bizim devletin bürokrasisini andırıyor adeta. SSK diye örnek veresi geliyor insanın ama şükür ki SSK artık eskisi gibi değil. Ama VB6 ile çalışmak hep aynı.

VB6 ile yüzleşen .NET programcısının yüzündeki ekşime ve midesindeki bulanma, Microsoft pazarlamacılarının veya kıdemli eğitimcilerinin, meşhur sertifikalı "Most-Valuable" profesyonellerinin tahmin edemeyeceği ve umursamayacağı bir hakikattir.

5 senedir var olan .NET ile yazdığınız gıcır gıcır kütüphaneleri bir gün sizden VB6 ile konuşturmanız istendiğinde tanışacağınız ilk şey ComVisibility ve ilerisi olacaktır. Evet, Bay Microsoft'un da belirttiği gibi .NET Assembly'leri geriye yönelik desteğe sahiptir, COM gibi görünebilir. Peki kim taahhüt eder, COM'un ızdırabının hafifleyeceğini!

COM geliştirirken yine acıtacaktır. .NET Assembly'lerini yırta yırta, söke söke VB6'ya ikram edecektir. Sakın ha güncellemeyin o assembly'leri... Sakın ha hata yapmayın da "fix" gerekmesin...

Madem .NET evrensel olayım diyor, burada neden evrensel bir adım atmadı?

Soru sorma değil, çözüm vakti dediğiniz vakit; bir Visual Studio ekranında ComWrapper adında bir projeye başladığınız vakittir.

ComWrapper, tüm .NET assembly'lerini Reflection ile ayağa kaldırabilen ara bileşen. Gayesi hizmetkâr bir COM olmak ve bütün COM COM kurşunlarıyla göğüs göğüse muharebe etmek.

VB6 içerisinde kullanacağınız .NET tipini, yerini belirtin, ComWrapper size nesnesini versin. Çalıştıracağınız metodu ve parametrelerini söyleyin, ComWrapper metodu işletsin, geri dönüş yapsın.

ComWrapper, hep aklımızda olan bir fikrin uygulamaya geçmiş hâli. Şu anda tıkır tıkır çalışıyor.

Velhasıl, Aşık Mahsûni'nin ruhu şâd olsun.

Resource Dosyalar İçin Public Class Generator

Ekim 18, 2007 21:37, Muhammed

Yukarıdaki başlık .NET'e yabancı olanlar için eminim bir mana ifade etmiyordur. Öyle okurlarım varsa hepsi beni affetsinler. Derinlikli mevzular oluyor bazı yazdıklarımız. Ama bu da benim hakkım değil midir? Arabanın alternatör kasnağı da benim kafamda bir şey ayaklandırmıyor.

Neyse sevgili okur. Hala niyetliysen Resource denen kavramın dertlerine ortak olmaya, devam et okumağa.

.NET Framework Resource türü dosyalara "strongly-typed" biçimde erişebilmemiz için sınıf kodunu üreten bir araç sunuyor. Bu konsol aracı ön tanımlı olarak Visual Studio bünyesine dahil edili durumda. Bir resource dosya eklediğinizde onu temsil eden sınıf kodu da üretilip .resx'in peşine takılıyor. Yalnız kadı kızında olabilecek kusurlardan birisi de bu araçta var. Bu aracın ürettiği sınıf kodu "internal" erişim seviyesine sahip. Siz el ile "public" yapayım, dış dünyadan da rahatlıkla kullanayım deseniz de nafile. Tekrar "internal" ile eziyor erişimi. Hani beklediğimiz nedir, bunu bize seçtirmesi. Ama yok işte.

Bu sıkıntıyı yaşayan her bünye internete olta atar. Code Project'ten bir zat, hayrına bu kod jeneratörünün gelişmişini yazmış. Ve kullandıktan sonra farkettiğimiz bir güzellik de bu jeneratörün içinde placeholder karakteri "{0}" geçen string ifadeler için "degiskenAdiFormat()" metodları üretmesi. Normalde string.Format deyip içine o değişkeni verirdik ya! Sevineceksiniz, emin olun. 

Bu tip kod geliştirenler Code Project'ten çıkmıyor sadece. Bizim de Gökhan Altınören'imiz "public" kod üretme derdimize yine aynı usülle çare bulmuş.

Bir ara da resource refactoring'ten bahsetmiştim. Onunla birleşince güzel bir bahis olur bu. Hoşçakal kardeşim deniz.

ASP.NET'in Geleceği

Ekim 9, 2007 11:24, Muhammed

Bir yerlerde ALT.NET konferansı düzenlendi. Guru'lar ASP.NET'in geleceğini konuştu.  

Ve yumurta: Microsoft, resmi ASP.NET'in demode olması ve işlevsizleşmesi tehlikesini gördü ve MVC (Model View Controller) yolundaki adımını attığını söyledi

Yukarıdaki görüntü konferanstan. ALT.NET'ten. 
MVC sene sonuna seçkin marketlerde.

.NET'in Kaynak Kodu Açılıyormuş

Ekim 3, 2007 23:00, Muhammed

Bugüne kadar .NET geliştiricileri, framework'ün çalışma mantığını anlamak için Reflector gibi ters-mühendislik araçlarını kullanıyordu. Sırf bu yolla Binding mekanizmasını çözmüş ve kendin özel binding mekanizmasını yazmış bir adam tanıyorum yakınlarımda.

Neyse. İyi haber şu ki .NET 3.5 ile framework'un çok kullanılan kütüphanelerinin kaynak kodları "debug" edilebilir hâlde verilecekmiş. Dağıtım lisansı ise Microsoft Refence License (MS-RL).

Böylece F11 der demez, .NET kütüphanelerinin arasında debug gezintisi yapabileceğiz. Bu müjdeyi bildiren Scott'a teşekkür ederiz.

Var Olan Tipleri Zenginleştirmek ya da Extension Metodlar

Ekim 2, 2007 23:57, Muhammed

Başlığımız seçenekli başlık. Okuyucu hangisine yakın ise öyle kabul ede.

Bahsedeceğimiz konu .NET 3.5 ile ilgili. Şimdi bir kısım okuyucunun, "Biz daha 2.0'a terfi edemedik, sen 3.5'tan haber getiriyorsun" sitemleri ulaşacaktır bize. Sakin olunuz efendim, arada bu kadar telaş edecek 1.5 sürüm yok. Bilmelisiniz ki Microsoft, 3.0 sürümünde "framework"te değişikliğe gitmedi. 2'nin üzerine yeni sistemler (foundation) bina etti.

"Orcas" kod adıyla haber edilen yeni geliştirme ortamı .NET'in 3.5 sürümünü de gün yüzüne çıkartacak. Ancak iddia edilen o ki, artık Visual Studio her framework sürümüne hitaben program derleyebilecek. Manası: "Orcas"ı açıp 1.1 için uygulama geliştirebilmek.

.NET 3.5 ile, framework üzerine güncellemeler yapılmış. Bunladan birisi de hayli kullanışlı olacak olan "Extension Metod"lar.

Daha evvelden bir tipe ek özellikler kazandırmak için, ondan yeni bir tip türetme (Inheritance) yolunu izlerdik. Son derece dar bir yoldu bu. Meselâ, System.Object tipine bir metod eklemeyi hayal edin. Her şey System.Object'ten türediği için ortalıkta dolaşan tüm tiplerde de bu metodun geçerli olduğunu da hayal edin. Mümkün olabilir miydi?

Şimdi bu mümkün.

Bu yeni sürümde istediğiniz bir tipe, sistem tiplerine dahi, ilave metodlar ekleyebilirsiniz. Mesela ScottGu kardeşimizden aldığımız kod örneğinde, kendisi string tipine -çok ihtiyaç duyduğundan olacak- e-posta adres testi eklemiş:

public static class ScottGuExtensions
{
    public static bool IsValidEmailAddress(this string s)
    {
        Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
        return regex.IsMatch(s);
    }
}

Bu metodun string tipine katışması sıradan bir .NET 3.5 mucizesi. Bu kodu derleyip bir assembly halinde dağıttığınızda, kullanan kişilerin string tipleri de bu güzide ilavelerle şenlenecek demektir.

Yani müşterileriniz,

string mailAddress = "kandırıkçımailadresi";

if( mailAddress.IsValidEmailAddress() )
{
 ...
}

gibi kodlar yazabilecek.

Ne kadar hoş.

Türetimden (inheritance) daha yaygın bir sonuç elde ediyorsunuz. Üstelik anlaması ve uygulaması çok daha kolay.

"Extension Metod" tekniği bir çok senaryoda işe yarayabilir. Zaten öncelikle .NET 3.5, kendi bünyesinde fazlasıyla kullanıyordur. Bizim aklımıza ilk gelen yer Utility kütüphaneleri. Artık bu kütüphaneler "extension" hâlinde yazılırsa, bir anda elimizdeki tüm tipler zenginleşecek demektir. Gözünü dolar bürümüş bileşen şirketleri şimdiden paralı "extension"lar yazıyorlarsa hiç şaşırmayız.

DevExpress'in Visual Inheritance Çözümü

Eylül 19, 2007 15:02, Muhammed

DevExpress'in Windows kontrollerini Visual Studio 2005 düzleminde kullananlar, bir süre sonra "visual inheritance" sıkıntıları yaşamaya başlıyorlar. Temel form sınıflarımız olsun şeklindeki masum düşünceler, temel sınıftan sunulan bir DevExpress araç çubuğu oluşturmaya uzanıyor.

"Visual Inheritance" için yeni formu temel sınıftan türetmek yetmiyor. Üzerine eklemeler yapılacak (genişletilecek) kontrolleri "protected" olarak işaretlemek gerekiyor. Mâlum tüm kontroller "private" erişim düzeyinde ekleniyorlar.

Programcı, temel sınıftaki DevExpress'in araç çubuğunu "protected" olarak işaretlemesine rağmen türettiği formlarda bu çubuğa yeni kontrol ekleyemiyor. Eklese bile ekranın kapatılıp açılmasıyla yok eklenen şey yok oluyor.

İşte bu ağız tadı bozan durum için neyse ki DevExpress bir çözüm bulmuş.

Henüz doğruluğundan emin olamadıkları bir registry müdahalesi. Denedik, çalışıyor.

Aynı sıkıntıyı yaşamış ademoğullarının pür dikkatlerine...

 
EOS 40D
Site Meter