Bir çok tablodan oluşan ve çoklu dil desteği olan bir veritabanında test yapmak için bile olsa veri girmek zor olabilir. Bu tür tablo primary key leri relation sağlamak için boğuşulan durumlarda temel CRUD desteğini hazır veren "scaffolder" lar hayat kurtarıcı olabiliyor.

"Scaffold", kelime itibariyle bina inşaatlarının dışına kurulan yapı iskelesi demek ("temporary framework" olarakta açıklanıyor), ama programlama dünyasına Ruby on Rails ile katılan bir terim. Programcılar için Scaffolding kısaca, veritabanı bağlantısı (sunucu adresi, veritabanı ismi, kullanıcı adı ve şifre) bilgilerinin sağlanması ile sizin adınıza basit veri girişi ve listeleme işlemleri için gerekli kodun üretilmesi anlamına geliyor.

SubSonic aslında "Zero Code DAL" sloganıyla ortaya atılmış ve LINQ'den önce NHibernate yerine geçmeye çalışan bir .NET altenatifi. NHibernate'in yerine geçmekten çok uzak olması ve bazı yaklaşım sorunları olmasına rağmen ( ki bu ileriki bir yazımın konusu olacak) sadece connection string sağlanarak çalışan ve web arayüzüne sahip AutoScaffold özelliği oldukça başarılı.

SubSonic sadece scaffolding sağlamak için tasarlanmamış, dLINQ vari sorgulama ve Active Record tasarım kalıbının bir uygulaması da SubSonic'in yetenekleri arasında.

İleri de SubSonic hakkında daha fazla yazımı okuyabileceksiniz, ancak varmak istediğim nokta farklı bir yerde duruyor, SubSonic için ısınma turları diyelim... ;)

Merhaba Işıl

May 5, 2007

Internet'e Türkçe içerikleriyle değer katan teknik insanlar arasına yeni bloguyla, eski iş (ve servis :) ) arkadaşım Işıl Orhanel'de katıldı.

Yazacağı teknik konuları ve makaleleri ilgiyle takip edeceğiz.

Mimlendim!

March 27, 2007

Yakın dostum Caner Şahan beni mimledi.

Yalnız bu klasik mim kuralları gereği kendin hakında 5 bilinmeyen değil de, seni mimleyen kişinin blogu hakkında eleştiri şeklinde oluyor. Dolayısıyla saydırmaya başlayalım. :)

Canercim yeni blogun eskisine göre daha iy ibir tasarıma sahip, sen yazdığın içindir büyük ihtimalle ama RSS readerım OMEA blogunu bildiğin gibi okumakta zorlanıyor . RSS dosyanın 300Kb den fazla olmasına rağmen yazılar gelmiyor. Bi el atman gerek bence testlerde yardımcı olabilirim :) .

Çok kötü bir şey söylemek mümkün değil, bari iyi olanlara geçelim. Çoklu dil desteğini düşünmen bence başarılı. İçeriği zamanla zenginleştireceğini düşünüyorum. Grafik tasarımda seçimin de başarılı ;).

Neyse o zaman bende ebeleyeyim henüz çok genç olan blogum hakkında yorum 5 yapacak şanslı kişiyi :

IEBlog'dan yapılan açıklamaya göre 2007'nin sonunda (Ekim/Aralık dönemi) yayınlanacak bir "kill bit" i ile MSXML4 nesnesinin Internet Explorer'da oluşturulması engellenecek.

Kullanıcıların, mevcut uygulamalarını MSXML6'ya geçirmesi önerilen yazıda, IE dışındaki uygulamaların bundan etkilenmeyeceği belirtiliyor. MSXML4'in gelecek 12 ay içinde ise Microsoft Download Center'dan kaldırılacağı da buna ek olarak belirtilen bir haber.

IEBlog'da haberin kaynağı olarak Microsoft XML Team's Blog gösteriliyor.

Evet sonunda Microsoft yıllardır şiddetini arttırarak gelişen MVC (Model-View-Controller) tabanlı web uygulaması geliştirme akımına dayanamayarak kendi ASP.NET için kendi MVC frameworkünü geliştirmeye başlıyor.

Konuyla ilgili ilk açıklama dolaylı şekilde Scott Guthrie tarafından ama kendi blogunda değil de CodeBetter bloggerı Jeffrey Palermo'dan geldi.

Bildiğiniz gibi MVC mimarisiyle tasarlanan web uygulamaları, klasik ASP.NET deki gibi "page controller", değil de "front controller" olarak çalışıyor. Dolayısıyla klasik bir web sayfasına yapılan istekler bir sayfaya değilde, URL'deki adresin eşlendiği sınıf ve içindeki metodlara gerçekleşiyor. Bu bileşen bütün web uygulamasını kontrol eden "controller", web sayfaları sadece asıl işleri olan sunumla ilgileniyor ki bunlara da "view" deniyor. Son olarak "model" ise iş nesneleri ve veriyi simgeliyor.

Microsoft'un bu konuda girişimlerinin olması Microsoft teknolojileri ile benzeri altyapıları yıllardır zaten sağlayan açık kaynak kodlu proje geliştiricileri arasında tartışmalara sebep oldu. Bu tür MVC desteği sağlayan .NET tabanlı en gelişkin denilebilecek proje Castle ve onun MVC ayağı MonoRail'de de durum farklı değil. Jeffrey Palermo'nun postuna yapılan yorumlarda bazı duayen Castle'cıların, Sun'ın kendi community'sine verdiği desteği göstererek, Microsoft'u kendi communitysini desteklemek yerine, onlara rakip olmakla suçladığı bile görüldü. Microsoft'u savunanlar ise, pazarlama stratejisi yüzünden klasik MS müşterilerinin zaten OSS (Open Source Software)'i tercih etmediklerini ve bu saatten sonra da MS'in kalkıp "MVC istiyorsanız bakın OSS'çu arkadaşlar zaten güzel yapmış onları deneyin..." diyemeyeceğini belirtiyor.

MS MVC gelince (ki Orcas'a bile yetişmesi beklenmiyor) ortalığı karıştıracağa benziyor. Zira Castle developer mailing listelerinde yeni çıkacak Castle MVC framework'ü MonoRail 2'nin hangi özellikler taşıyacağı soruları "rakibe" bilgi sızdırmamak için cevapsız kalıyor...

Lutz Roeder's Reflector 5.0

February 23, 2007

Özellikle .NET Framework'un kapalı kaynaklarına girip içsel çalışmasını merak edenlerin vazgeçilmezi Reflector yeni sürümüyle karşınızda...

Reflector 5

(Codeplex) Reflector Add-In'leri (Şiddetle Tavsiye!)

Reflector Tanıtımı (PPT)

Konuyu paylaşan Ken Egozi ve Mitch Denny'ye teşekkür ediyorus...

We are us/ing machine?

February 20, 2007

TEZ

antiTEZ

Amazon Mechanical Turk 101

February 17, 2007

"Beta" tipi alternatif web hizmetleri verme modası sürerken Amazon'un son hizmeti gerçekten ilgi çekici. :)

Amazon Mechanical Turk, resmi tanımı ile bir çeşit yapay yapay zeka.

Bilgisayarların çözmesi gerçekten zor olan, karmaşık desenler içinden anlamlı imgeler bulmak gibi görüntü işleme görevlerini bilirsiniz. Hatta bu tür uygulamalar web'de otomatik form doldurmayı engellemek gibi gündelik yaşamda da karşımıza çıkar. İnsanlar için saniyelik, basit işler olmasına rağmen bilgisayarların oldukça zamanını alan görüntü işleme ve buna benzeyen semantik görevleri yerine getirmek için sunulabilecek en basit çözüm herhalde bilgisayarları aradan kaldırıp insanları kullanmak olurdu... Ve oldu da..

Lafı dolandırmayı (belki de daha açıklayıcı olmak adına) ne kadar çok sevsem de basitçe Amazon'un yeni hizmeti ile artık web'de form doldururken karşınıza çıkan "insan olma" testlerini yaparak para kazanabileceğinizi söylesem iyi olacak.

Sistem basitçe şöyle çalışıyor :

  1. (Her zamanki gibi ne yazık ki) Üye oluyorsunuz. (ama beleş tabii)
  2. HIT (Human Intelligence Task ;) ) kategorinizi seçiyorsunuz. (Görüntü analizi, web sitesi semantik tanımlaması gibi)
  3. HIT'inizi gerçekleştiriyorsunuz. (Resim için örneğin rastgele gelen uydudan çekilmiş deniz fotoğrafında bir tekne mevcut mu? veya "Verilen bir web sitesini en iyi tanımlamak için hangi üç tümceyi kullanırsınız?" gibi)
  4. Bu gibi her iş karşılığı $0,07 gibi bir ücret kazanıyorsunuz.

Bağlamam gereken son konu sanırım "Turk" isminin nereden bu konuya karıştığı. Amazon buna cevabı da eksik bırakmamış. Anladığımız kadarıyla konu Avrupa tarihi ile de ilgili. 1976 yılında, Wolfgang von Kempele isimli Macar soylusu, aralarında Napolyon ve Benjamin Franklin (Amerika?) da bulunan bir çok kişiyi yenen tahtadan yapılmış bir otamat yapar. Bu dişli ve çarklar yardımıyla hareket eden manken, kaftan ve sarıkla giydirildiği için adına "Mekanik Türk" denir. Sonradan kuklanın içine saklanmış bir satranç ustası olduğu da ortaya çıkar tabi.

Bu bağlamda Amazon'un hizmetinde, kukladaki satranç ustaları kullanıcılar oluyor sanırım :).

Geçtiğimiz yıllarda (çok önce geçtik ama), Internet Explorer'ın Windows'a entegrasyonu üzerine bir çok tartışma ve davaya şahit olduk. Hatta Amerikan anti-tekel yasalarına göre Microsoft bölünecek, Windows'la ilgilenen departman ayrılacak, Office'le ilgilenen departman ayrılacak gibi söylentiler etrafta dolaşıyordu. Devam eden yıllarda bildiğim kadarıyla bu söylemler gerçekleşmedi. Hatta artık bir çok MS ürünün IE'dan fazlasıyla yararlandığını hepimiz biliyoruz.

Geçenlerde MSDN Help sisteminde bir makale okurken, gerekli araç çubuğu ikonuna tıklayarak yazı puntosunu büyülttüm. MSDN okumamı bitirdikten sonra web'de dolaşırken bir de baktım ki Internet Explorer'da puntoları büyük gösteriyor! Entegrasyon ve bileşenleri tekrar-kullanım mantığını anlayabilirim ama yapılandırma veya ayar dosyalarının uygulamaya özel olması gerekmez mi?

DataTable.Clone() Hakkında

February 15, 2007

Belki geç kalmış bir bilgi ama yakın zamanda başıma geldiği için dikkat çekmek istedim,

Diyelim ki içinde veriler bulunan bir tabloyu çoğaltmak için DataTable.Clone() + ImportRow() yapmak istiyorsunuz, böyle bir durumda bu DataTable örneğine ait DefaultView (yani varsayılan DataView) e atanmış bir filtre (DataView.RowFilter) tanımlanmışsa bu filtrenin klonlanarak oluşturulmuş yeni DataTable'da yer almayacağını unutmamalısınız...

Örneğin : DataTable dtOrijinal = new DataTable(); ... dtOrijinal.DefaultView.RowFilter = "Isim = 'Ahmet'"; Console.WriteLine("Orijinal Filtre: " + dtOrijinal.DefaultView.RowFilter); ... DataTable dtClone = dtOrijinal.Clone(); Console.WriteLine("Klonun Filtresi: " + dtClone.DefaultView.RowFilter); şeklindeki bir kod parçacığı...

Orijinal Filtre: Isim = 'Ahmet' Klonun Filtresi:
şeklinde bir çıktı oluşturur.

Kısaca belirtmek gerekirse klonlar veriyi içermediği gibi filtreleri de içermiyor!

Ek olarak filtrelenmiş bir DataTable'ın satırları içinde dolaşırken filtre dışında kalan satırlara da ulaşırsınız. Dolayısıyla filtre edilmiş bir DataTable'daki verileri bir klona aktarırken satırları değil de DefaultView satırlarını dolaşmalısınız.

Örneğin sadece filtre kuralına uyan satırları import etmek istenen bir durumda aşağıdaki kod parçası istenen sonucu üretmez: foreach (DataRow dr in dtOrijinal.Rows) { this.dtClone.ImportRow(dr); } ...ama aşağıdaki kod parçası ile sadece filtre kuralıana uyan satırlar alınabilir: foreach (DataRowView drv in this.dtOrijinal.DefaultView) { this.dtClone.ImportRow(drv.Row); }