AOP – 1

21Nis11

Temelde Aspect Orinted Programming yaklaşımı farklı uygulama seviyelerinde ve/veya farklı sınıflarda ortak amaçla kullanılan loglama, exception handling, tracing gibi enterprise bir yapıda olmazsa olmaz, ancak kod blokları içinde çokça tekrarlanan ve bakımı zorlaştıran katmanların/yapıların bussiness dışına çıkarılmasını amaçlar. Bu iş geliştirilmiş bir çok framework var. En önemlileri PostSharp ve Linfu.AOP. Ancak ben biraz daha detaylı bir inceleme için, frameworklerden birini alıp, nasıl AOP yapılır yazmak yerine, kendimiz nasıl temel prensiplere bağlı bir AOP yapısı geliştirebiliriz onu anlatmaya çalışacağım.

Örneğin

public double Divide(double x, double y)
{
    try
    {
        return x / y;
    }
    catch (DivideByZeroException ex)
    {
        Logger.LogException(ex)
        throw (ex);
    }
}

gibi bir kodumuz var. Burada loglama ve exception handlingi (herzaman olduğu gibi) kodun içinde yapıyoruz.
Ancak AOP yaklaşımı ile bu işi tamamen ilgili  method içinden çıkarabiliyoruz.

ObjectProxy proxy = new ObjectProxy();
proxy.Aspects.After.Add(new LogAdvice());
proxy.Aspects.Error(new ExceptionHandlerAdvice()});
Calculator calc = proxy.Create<Calculater>();
calc.Divide();

Böylelikle bölme işlemi sadece

public double Divide(double x, double y)
{
    return x / y;
}

ile çözümlenebiliyor.

AOP yaklaşımı

  • Cross-cutting concerns (CCC): Uygulama içinde farklı yerlerde ama aynı amaçla kullanılan, loglama, exception handling gibi sınıflardır.
  • Advice : AOP yapısı içinde bir modele uygulanan CCC’lere ilişkin çözüm içeren yapıdır. Yukarıda örneklenen loglama ve exception handling gibi.
  •  Point Cut : Advice’ın uygulanacağı yerdir. Örneğin yukarıdaki yapıda, ilgili threadde methodun çalıştırılıp çıkıldığı noktada bir point-cut noktasıdır.
  • Aspect : Point Cut ve Advice’ın oluşturduğu yapıya da Aspect denir.
  • Waving: Waving ise CCC’leri varolan yapı içine derleyen işlemdir. Waving için farklı yaklaşımlar bulunuyor. Bunlar
    • Compile time weaving: Bu tip waving, .net kodunun MSIL koduna çevrilmesinden hemen önce gerçekleşir. “Aspect Compiler” kodu derler ve native compiler’a yönlendirir. Net native olarak bunu desteklemiyor.
    • Link time weaving: Burada ise, Aspect Compiler, .Net compiler’ın varolan kodu MSIL’e çevirmesinden sonra çalıştırılır.
    • Run time weaving: Burada ise, ana kod ile aop kodları beraber derlenir. Bu .Net ortamında native olarak destekleniyor.
temel kavramlarından oluşuyor. Benim uygulamaya çalıştığım yapı ise, run time waving. Ancak compile time waving ile ilgili de bir örnek ekleyeceğim.
Bu bağlamda öncelikle bu yöntemi uygulayabilmek için tüm nesneleri ContextBoundObject(MarshallByRef) objesinden türetmeliyiz. Bunu interface’ler ile yapmak da mümkün. (bkz. .Net Proxyler). Ancak ben burada daha baasit çabuk olan yöntemi tercih ettim. Nede olsa buradaki amacımız anlamak ve test yapmak.
Kaynaklar : 

Haberler

29Mar11

Merhaba,
- İş Değişikliği
- Halen çalıştığım Netcad firmasındaki Yazılım Uzmanlığı görevimden ayrılıp,
- PlusOneMinusOne firmasında Senior Software Architect olarak çalışmaya başlıyorum.
Umarım bu değişiklik hem bana, hemde yeni çalışacağım firmaya güzel şeyler katar.
- Silverlight 4.0
Netcad Silverlight 4.0 SDK
Geçtiğimiz yıl içinde yayınlanan Silverlight 3.0 tabanlı harita uygulamasının tamamını baştan yazarak
- Çok katmanlı
- Modüler
- Daha hızlı, daha güvenilir,
- Geliştirilebilir
bir yapıya döüştürdüm. Bir kaç gün içinde kurulumlar tamamlanacak ve linkleri ilgillenen arkadaşlar için buradan paylaşacağım.

Edit:

- Ayrıca .Net framework, Tasarım Kalıpları, Mimari Kalıplar ile ilgili yazılar biriktiriyordum bir süredir. Bunları buradan sizlerle paylaşmaya başlayacağım.
- İlk yazım bir AOP yapısı oluşturup, Loglama ve Exception Handling implemente etme üzerine olacak.(AOP nedir?)
Görüşmek üzere


Merhabalar,
Bir süredir, Mobil bir uygulama üzerinde çalışıyordum, Tüm mobil ortamlarda çalışacak ve varolan teknolojileri de kullanabilecek-sunucu,vertiabanı,configurasyon- yapıyı ancak html5/javascript/ajax üçgeninde bulabildim. Uygulama görücüye de çıktı ve güzel tepkiler aldı. Ekran görüntülerini iletiyorum.

Herkese mutlu günler

NetGis Mobile IPad


Kalite Sorumlusu bir arkadaşıma, çalıştığı fabrikadaki ürünlerin kalite standardında üretilip üretilmediğinin kontrolünü nasıl yaptıklarını sordum. Cevap bana CBS işlerinde veri kalitesinin kontrolünün nasıl zor olabileceği ve nasıl yapılabileceği ile ilgili fikirler verdi.

Fabrikada zaten makineler tarafından üretilen ürünlerin standartlarda olup olmadığının kontrolü için, ürünlerin bulunduğu farklı kolilerin içinden, raslantısal olarak belirli sayıda ürünü seçip, üretim için belirlenen standartta/doğrulukta olup olmadığına bakıyorlarmış. Bunu için de tabiiki bir kontrol prosedürleri bulunuyor ve kaç ürün hatalı kaç ürün hatasız bu şekilde bir oran bulup üretilmiş ürünler için ortaya konulmuş doğruluk kriterinie (yüzdelik hata miktarı) bakarak kontrol ediyoralar ve hata miktarı hedeften yüksekse, tüm ürünleri yeniden üretiyorlar :)

Sanırım diğer sektörlerde de aşağı yukarı kontroller bu şekilde yapılıyor. Yani bir örnek küme oluşturuluyor, bu örnek küme için kontroller gerçekleştiriliyor ve tüm diğer elemanlar da bu doğrulukta kabul ediliyor (bkz:istatistik – Normal dağılım, hata yayılımı, en olasılıklı değer, ümit değer…)

Şimdi konu CBS verisi olunca (Nokta/çoklu doğru/alan/grup obje…) kalite kontrolünü nasıl yaparız ?

Zaten verilerin en temelde yönetmeliklerle uygun üretilmeleri gerekiyor. Ancak günümüzde üretilen veri çoğunlukla arazi ölçmeleri sonucunda üretilmediğinden, örneğin mekansal doğruluk olarak kriter uydu görüntüsünün/Hava fotoğrafının/Baskı haritanın rektifikasyon doğruluğu ile korelasyonlu( bağlı ) oluyor :) peki, 1m, 60cm mekansal çözünürlüklü bir uydu görüntüsünden sayısallaştırma ile üretilen ve CBS verisi olarak kullanılan ile ilgili ne söyleyebiliriz.

Bence bunu birkaç aşamada değerlendirmek lazım.

1. Mekansal doğruluğu

2. Topolojik doğruluğu

Mekansal doğruluğun zaten uydu görüntüsü/hava fotoğrafı/baskı harita’nın rektifikasyon doğruluğu ile korelasyonlu olduğunu söyledik. Yani referans veri mekansal olarak ne kadar doğru ise, ondan üretilen veri de -genelleştirmeleri hesaba katmazsak, çalışılan ölçekte- o kadar doğrudur.Topolojik doğruluk ise zaten olması gereken bir unsur. Ancak, uygulama yazılımlarındaki esneklikler bozuk topolojili veriler üretmeye olanak verdiğinden, bu verilerden yapılacak her türlü analizin sonucunu etkilenir.

Topoloji problemini yine uygulama yazılımları ile otomatik yöntemlerle çözdüğümüzü varsayalım, yine de 2 farklı kurumun/firmanın ürettiği veri birbirinden farklı olacaktır(polygondaki nokta sayıları gibi). Öncelikle bu bir sorunmudur?Sorunsa çözümü nedir?

Eğer tüm verileri otomatik olarak oluştaracak bir sistemimiz yok ise -ki hemen hemen yok gibi-  operatörlerin aynı veriyi oluşturmasını sağlamak için kriter ne olmalı ?

En az hatayla veri üretmelerini, veri üretim kısıtlamalarını, varolan veritabanı içindeki tutarlılıklarını sağlayacak bir veri üretim mekanizmasını sağlamak. İşte en son hazırladığım ürün BelnetNC bu işe yarıyor :)


Merhaba,

Beylikdüzü kent rehberi Microsoft Silverlight.Net sitesinde showcase bölümünde.  Şimdiden 1200 (geliştirici olduklarını tahmin ediyorum) kişi bakmış ve sanırım bu iyi bişey :)

Görüşmek üzere


Silverlight

19Oca10

Merhaba,

Askerden döndük iş aradık, yuvaya dönük derken, zaman geçti, ve ben tembelliğimden midir , yoksa zaten kimseler okumaz diye düşündüğümdenmidir, uzun süredir bişey yazmadım.

ÇokGis prototip olarak kaldı tabi iş yoğunluğundan, Neler yaptım, bir kaçını yazamasam bile bir sürü proje hazırladım. Asıl heyecanla yaptığım sonuncusu, bir silverlight map uygulaması. DeepZoom teknolojisini kullanıyor. DotNet 3.5 ile Silverlight 3.  şidilik aşağıdaki urlden ziyaret edilebilir. yakında bir çok belediyeye kurulacak.

(21.01.2010:Uygulama kuruldu)

http://onlineharita.pendik.bel.tr/silverdis/Page.aspx?WS=PENDIKDIS

herkese kolay gelsin.


CokGis

19Mar09

Merhabalar,

ÇokGis’e başladım evet ama olmuşken şuda buda olsun derken şöyle bir yere geldim,

1. Önce MapWindow ile FDO ile eriştiğim veriyi render ettim, ancak sonuç beni hiç mutlu etmedi,

2. GDI+ ile basit bir Canvas oluşturdum, ve veriyi render ettim ancak bu beni yine mutlu etmedi,

Ardından, bu google amcalar haritalarını böyle güzel nasıl render ediyorlar diye gezinirken, 2 renderera rastladım, bunlardan bir tanesi AGG(Anti Grain Geometry) bir diğeri ise Cairo. Bunlar windows surfacelerine 2d vector render edebilen, subpixel antialising özelliği olan kütüphaneler. Tabi bunların windows da kullanılmaları bir hayli zor. Ben şu an ikisiylede render edebiliyorum. Cairo için bir wrapper buldum Mono projesini geliştiren arkadaşlar bir çalışma yapmışlar ama bu eski bir versiyon için. Bende ondan faydalanarak, yeni eklenen fonksiyonları implemente ediyorum.

AGG’mi işte aslı onu kullanmak istiyorum, ancak şu aşamada render çok zor. Wrapper var ama kötü. DotNet protları var ama onlarda tamamlanmamış.

Bir kaç ekran görüntüsünü bir kaç gün içinde paylaşmayı umut ediyorum. Peki bu kadar vakti nereden mi buluyorum.

İş Arıyorum. :) :)

Kolay Gelsin


Merhabalar,

Uzun süredir bana bakıp duran bir API varki sormayın. Postgis, Oracle Spatial, MySQL Spatial, Ms SQL Spatial, Gdal, OGR ve daha bir çok önemli mekansal veri kaynağına erişmeyi ve farklı yapıları arasında serializasyonlara izin veren bu API hem managed hemde unmanaged desteğini sunuyor. Haftasonumu bu API’yle geçirdim.Adı FDO Ortaya herkesin kullanabileceği bir interface çıktı ve ayrıca uzun süredir hayata geçirmek istediğim “çokgis” projesinin de temeli atılmış oldu. Yazmış olduğum FDO wrapper’ını linkten indirebilirsiniz. Tabiki tamamlanmadı, ikinci aşama serializasyonlara uvdf eklemek.

Çokgis ise, benim uzun süredir hayalini kurduğum, kullanımı kolay, kodları anlaşılır ve iyi documente edilmiş bir proje ve sonunda ona da başladım. Bir hayli mesafe de katettim. Gelinen aşama dahil kısa bir süre sonra github’da paylaşacağım.

Sorularınız için yazabilirsiniz.

Görüşmek üzere.


Dönüş.

27Şub09

Merhabalar,

Askerden döndüm. Bu aralar biraz dinlenmeye ve kendime gelmeye çalışıyorum. Kendime gelir gelmez en son okuduklarımı, yazdıklarımı daha düzenli olarak yayınlama kararı almış bulunuyorum :)

Görüşmek üzere…

Featureserver'la neler yapabiliriz

Featureserver


Haberler…

06Ara08

Uzun bir aradan sonra merhaba,

Bildiğiniz üzere askerdeyim. Ancak bir şekilde bir yazılım projesine dahil oldum. Proje ile ilgili detayları gizlilik derecesinden ötürü yazamıyorum ancak projede DirectX tabanlı OpenSource bir engine, GDAL/OGR, C# 3.0 kullanıyorum.

Ayrıca bu günlerde Spatial Data Modeling, GeoStatistics ve C# 3.0 konuları ile ilgili ne bulursam okuyorum. Tavsiye edebileceğim kitaplar “Statistics and Data with R”, “Innovations In GIS” serisi, “More Effective C#: 50 Specific Ways to Improve Your C# “.

Eğer vakit bulabilirsem, daha teknik konular ile ilgili bişeyler yazmaya ve paylaşmaya çalışacağım.

Görüşmek Üzere…




Follow

Get every new post delivered to your Inbox.