Microsoft’un Çöpe Giden Yazılım Teknolojileri

25 Ara
  • Silverlight
  • WCF
  • WPF
  • Windows Forms
  • Web Forms

Microsoft teknolojilerinde son yıllarda önemli gelişmeler yaşanıyor. Takip etmekte zorlandığımız bu değişiklikler şüphesiz olması gereken şeylerdir. Yukarıda listelediğim teknolojiler, Microsoft’un  bir dönem parlayan yıldızlarıydı. Geçen zaman içinde yazılım dünyasında yaşanan evrim sonucu , Microsoft tarafında bir takım sorunlara çözüm bulmak ve bazı teknolojilerle rekabeti yakalayabilmek adına bir takım gelişmelere neden oldu. Yazılım dünyasındaki her yeni gelişme, karşımıza yeni bir ürün olarak çıktı. Gelişme ilerledikçe evrim, bir takım organların sonunu getirdi. Şunu da belirtmeliyim ki bu yazı Microsoft teknolojilerine karşı durmak için değil, bazı teknolojilerin zamanla yerini başka teknolojilere bıraktığını anlatmak amacıyla kaleme alınmıştır. Serbest pazar ortamında her firma ürününü ortaya koyar ve herkes istediği teknolojiyi dilediğince seçmekte özgürdür.

Silverlight

Adobe Flash, Java Flex v.b gibi client taraflı uygulamalara alternatif olarak üretilen zengin içerik ürünü Silverlight, mobil internet tarayıcılar tarafında yetersiz kalınca ve geliştiricilerin Javascript gibi tüm tarayıcılarda çalışabilen bir teknolojiyi tercih etmesiyle fişi çekilen teknolojilerden biri oldu. Ülkemizde ve diğer ülkelerde Silverlight düşkünü yazılımcılar için adeta bir hayal kırıklığı oldu. Çünkü bu gelişme birçok yatırımın güncelliğini yitirip zamanla çöpe gitmesi demekti.

WCF

Servis odaklı altyapı sistemleri için geliştirilen WCF teknolojisi SOAP ve RESTful servisler oluşturmak için bir altyapı sunmaktadır. HTTP tabanlı REST servislarinin yaygınlaşmasıyla ivme kaybeden ve durma noktasına gelen hatta bitti denilebilecek teknolojilerden birisi. WCF teknolojisi SOAP servisleri oluşturmak için ideal bir seçimdir. Ancak RESTful servisler oluşturma konusunda liderliğini WEB API teknolojisine kaptırmıştır. (Güncelleme: WCF servislerinin REST ve SOAP ayrımına vurgu yapıldı. 21.02.2015)

Windows Forms

Masaüstü programlama araçlarından Windows Forms teknolojisi ise WPF teknolojisinin gelmesiyle silikleşen teknolojiler arasında. WPF teknolojisini Windows Forms teknolojisine göre makul kılan özelliklerin başında View tarafı ile Model tarafının birbirinden ayrılmasını sağlamasıydı. Windows Froms, kod arayüzü ve grafik arayüzü ile çalışmaktadır. WPF ise kod arayüzü, grafik arayüzü ve grafik arayüzünü şekillendirebilen XAML arayüzü ile ortaya çıkmıştır. Bu durumda MVVM (Model-View-ViewModel) yazılım desenlerinin uygulanması kolaylaşmakta ve daha kolay yönetilebilir uygulamalar geliştirilebilmektedir.

WPF

Windows 8 ile birlikte bizi işletim sistemi düzeyinde şaşırtan Microsoft, XAML teknolojisini .Net framework tarafından işletim sistemi üzerine alarak bizi tekrar şaşırttı. Bu da demek oluyor ki artık masaüstünde artık WinRT teknolojisi yer alacak. Bu durumda WPF teknolojisi de yıkılmak üzere demektir.

Web Forms

Microsoft’un Web geliştirme tarafında sihirli çubuğu olan Web Forms teknolojisi de MVC uygulama mimarisine yenik düştmüştür diyebiliriz. Web Forms ile oluşturulmuş birçok popüler web sitesi bu günlerde MVC teknolojisine geçiş yapmaya başladı bile. Web Forms teknolojisinin hakkını yememek lazım ki çok sayıda popüler uygulamaya temel oluşturmuştur. Ancak MVC teknolojisinin iş birimlerinin birbirinden ayrılmasını sağlayan mimarisi ve bu sayede geliştirici hakimiyetini ön plana çıkarması ayrıca birim test yazmaya olanak  sağlaması zamanla onu popüler hale getirmiştir. Şahsen ben Web uygulamalarına direk MVC tarafından başlayanlardanım. (Güncelleme: 21.02.2015)

Microsoft gelişime, yeniliğe önem veren bir şirket. Ancak insanların yıllarca üzerinde çalışıp yatırım yaptığı teknolojilerin birden yok olması geliştiricileri ve şirket yöneticilerini sıkıntıya sokabiliyor. Bu durumda şu soru akıllara geliyor. Bu teknoloji de son bulursa ne yapacağız? Gelişim oldukça bir şeylerin sonu gelecek elbette.

Çöpe giden teknolojiler sadece Microsoft tarafıyla sınırlı değildir. Open source tarafında da çok fazla proje çöpe gitmiştir. Örneğin java tarafında da MVC yaygınlaşınca Serve taraflı bileşen teknolojiler pek tercih edilmez hale gelmiştir.

Bu durumda öngörülü olmak önem arz etmektedir. Spesifik teknolojiler yerine platform bağımsız teknolojilere eğilim göstermek her zaman faydalı olacaktır. Hangi programlama dili olursa olsun, yapılan iş genele hitap edecek şekilde tasarlanmalıdır. Bu sayede genişletilebilirlik(extensibility) ilkesi ile hareket etmiş oluruz ve hiç bir teknolojiye sıkı sıkıya bağımlı kalmayız.

Esri Silverlight Api Özellikleri – Davranışlar ve Eylemler

29 Oca

Behaviors & Actions

Behaviors & Actions konusu altında işlenen API özellikleri harita(Map control) nesnesinin davranışlarını ve eylemlerini kapsamaktadır. Bu yazıdaki örnek uygulamalar, versiyon 3.0 üzerinde yapılmıştır.

Constraint Extent Behavior

ConstraintExtentBehavior adındaki davranış belirleyicisi, haritanın belli bir koordinat sınırının dışına çıkmasını engelleyici özelliğe sahiptir. Bu davranış bir harita nesnesine uygulandığında, düzlem üzerindeki harita, belirlenen sınırların dışına kaydırılamaz.

Örnek uygulama.

Kullanımı:

constraintExtentBehavior

Örnek uygulamada harita sınırları Map kontrolüne eklenen ConstraintExtentBehavior davranışının ConstraintExtent ayarı “-15000000,2000000,-7000000,8000000” değerleri ile sınırlandırılmıştır. Bu sınırlandırma ile harita artık bu sınırların dışına kaydırılamamaktadır.

Maintain Extent Behavior

MaintainExtentBehavior davranış belirleyicisi, haritanın (Map control) yeniden boyutlandırılması (resize) sırasında mevcut Extent’i korur.

Örnek uygulama.

Kullanımı:

maintainExtentBehavior

Örnek uygulamayı incelerken internet tarayıcınızı (browser) büyütüp küçülttüğünüzde harita sınırlarının korunduğunu görebilirsiniz.

Show Coordinates Behavior

ShowCoordinatesBehavior davranış belirleyici tip, mouse imlecinin gezindiği koordinatları gösteren bir davranışa sahiptir.

Örnek uygulama.

Kullanımı:

ShowCoordinatesBehavior

Örnek uygulamayı incelediğinizde mouse imleci harita üzerinde gezindikçe, imlecin bulunduğu koordinatlar, imlecin yanında gözükecektir.

Eylemler (Actions)

Esri Silverlight API içerisinde tanımlanmış olan eylemler (Actions) sayesinde çizim, mekansal sorgu, ölçümler gibi birçok işlemlerin sonucunu harita üzerine yansıtabilmektedir. Eylemler sayesinde grafiksel bir katmana çizim yapma mümkündür. Ayrıca katmanlar üzerinde de eylemler tanımlamak mümkündür. Aşağıda bir örnek uygulama linki verilmiştir.

Örnek Uygulama.

Kullanımı:

GraphicsAction

Bu örnek uygulamada kırmızı çizme eylemi bir butona atanmıştır. Butona tıklandığında harita üzerine mouse yardımıyla kırmızı çizgiler çizilebiliyoruz. GraphicsLayer üzerinde çizim işlemi gerçekleşmektedir.

API Version 3.0 içerisindeki eylemler şunlardır: ClearGraphicsAction, MeasureAction, PanToAction, RedlineAction, SpatialQueryAction, ToggleLayerAction, UpdateFeatureLayerAction, ZoomToAction, ZoomToFullExtenAction, ZoomToLayerAction şeklindedir. Api versiyonuna göre yeni eylemler eklenmiş olabilir.

Grafiksel Eylemler (Graphics Actions)

  • RedLineAction: Harita üzerine çizgi çizme eylemini gerçekleştirir.
  • SpatialQueryAction: Mekansal sorguların sonucunu yapıp grafik katmanına çizdirir.
  • ClearGraphicsAction: Bu eylem ile harita üzerinde belirlenen grafik katmanını temizlenir.

Katmansal Eylemler (Layer Actions)

  • ToggleLayerAction: Belirlenen bir katmanın görünebilirliğini değiştirir.
  • UpdateFeatureLayerAction: Belirlenen FeatureLayer katmanını günceller.
  • ZoomToLayerAction: Belirlenen bir katmana yakınlaştırır.

Araçlar (Utility Action)

  • MeasureAction: Harita üzerinde ölçüm işlemlerini yapmak için bu araç kullanılır. Uzunluk, alan, dairesel yarıçap gibi ölçümler yapmak mümkündür.

Navigasyonel Eylemler (NavigationActions)

  • PanToAction: Haritada belirlenen bir geometrinin olduğu yere haritayı hizalar.
  • ZoomToAction: Haritada belirlenen bir geometriye veya koordinatı yakınlaştırır.
  • ZoomToFullExtent: Haritanın tamamının görüntüsünü verir.

Proje – İKABİS (İçmesuyu Kananizasyon ve Altyapı Bilgi Sistemi)

13 Kas

Kocaeli Büyükşehir Belediyesi İSU Genel Müdürlüğünde hazırlanan İKABİS (v.1.0) projesi İSU bünyesinde yayına açılmıştır.

Projenin amacı, imalatı tamamlanan altyapıların Coğrafi Bilgi Sistemi(CBS) standartlarına getirilmiş sayısal bilgilerinin WEB ortamından yayına sunulmasıdır.

Yayına açılan altyapı bilgileri, koordinatlı uydu fotoğrafı üzerinde görüntülenebilmektedir. Bu sayede hangi altyapı bilgisinin nerede olduğu kolayca bulunabilmektedir.

Yayına açılan altyapı bilgileri şu şeklidedir.

  • İçmesuyu hatları
  • Kanalizasyon hatları
  • Yağmursuyu hatları
  • Su depoları
  • Arıtma tesisleri
  • Terfi merkezleri
  • Abone noktaları
  • Dere Islahları
  • Vanalar
  • Yangın muslukları
  • Diğer donatı bilgileri

Ben bu projenin veritabanı standartlarının geliştirilmesi ve WEB yazılımının hazırlanmasından sorumluydum. Harita mühendisi arkadaşlarım Azize KOÇ, Yusuf Ziya DEMİRCİ ve Abdullah Talha DERİCİ de harita verilerinin hazrılanması, altyapıların sayısallaştırılması, CBS’ye hazır halegetirilmesi ve ArcGIS server’da yayına açılması sürecinde  görev almışlardır. 6 ay gibi bir sürenin sonunda projeyi başrıyla hayata geçirmiş bulunuyoruz.

Projeyle ilgili bazı ekran görüntüleri şu şeklidedir.

İKABİS – Altyapı görüntüsü
İKABİS – Depo sorgu görüntüsü

Projenin altyapısın oluşturan teknolojiler ise şu şeklide:

  • CAD Programları (Altyapıların çizimi)
  • ArcGIS (CAD verilerinin CBS formatına dönüştürülmesi)
  • ArcGIS Server (Map service yayını)
  • Oracle database (ArcSDE)
  • Esri Silverlight API (Web Yazılımı)

Uygulamanın sonucunda bir WEB yazılımı ortaya çıkmıştır. Bu WEB yazılımının arkasında iyi bir ekip çalışması olduğu görünmektedir. Harita çalışmasından sistem mimarisine, veritabanından yazılım geliştirmeye kadar değişik süreçler iç içedir.

Bir başka yazıda tekrar görüşmek dileğiyle.

Prism ile Silverlight MVVM ve Modüler Programlamaya Giriş

24 Eyl

Bir önceki yazımızda Silverlight MVVM yazılım tasarımı konusuna giriş yapmıştık ve anlaşılabilir olması açısından giriş seviyede bir örnek uygulama yaparak konuyu pekiştirmeye çalışmıştık. Bu yazımızda da Prism kütüphanelerini kullanarak modüler yapıda basit bir uygulama geliştirmeye çalışacağız. Bir önceki örnek MVVM uygulamızda Product model üzerinden View ve ViewModel yapılarını oluşturmuştuk. Bu yazıdaki uygulamada ise Product model ve View tarafını ayrı bir silverlight projesinde barındırıp ana silverlight projesi üzerine modül şeklinde ekleyeceğiz.

Bir önceki örnek uygulamadaki Model, View ve ViewModel yapılarını ProductModule adında ayrı bir silverlight uygulamasına çektik. Solution içerisindeki BasicModularity bizim ana silverlight uygulamamız. Yani ProductModule uygulaması, BasicModularity uygulaması üzerinde çalışacak ve BasicModularity.Web tarafından web yayınına sunulacak.

ProductModule uygulamasının bir modül olarak kabul edilebilmesi için IModule interface tipini implemente eden bir sınıfa sahip olması gerekmektedir. IModule interface tipi ise Microsoft.Practices.Prism.Modularity altında bulunmaktadır. ProductModule projesini modül halie getiren ise ProductModul sınıfıdır. Bu sınıfın içeriği aşağıdaki gibidir.


public class ProductModul : IModule
{
     private readonly IRegionManager manager;

     public ProductModul(IRegionManager manager)
     {
         this.manager = manager;
     }

     public void Initialize()
     {
         manager.RegisterViewWithRegion("ProductSaveRegion", typeof(Views.ProductView));
     }

}

IModule interface içerisinde Initialize adında bir metod bulunmaktadır. Bu metod modülün başlatılmasını sağlamaktadır. IRegionManager interface tipi ise modülün ana uygulamada hangi bölgeye yerleşeceğini belirleyen bir tiptir. Biz bu uygulamada modüldeki ProductView görüntüsünün ProductSaveRegion adındaki bir bölgede tutulmasını istedik. Biraz sonra bu bölgeyi ana uygulamada bir ItemControl belirleyeceğiz.

BasicModularity uygulaması yani ana uygulamamız tarafında modülleri barındıracak şekilde bir takım hazırlıklar yapmamız gerekmektedir.

Öncelikle Shell.xaml user kontrolü ekleyerek modülündeki ProductView için bir bölge(region) oluşturmalıyız.

ProductModule içerisinde işaret edilen bölgeyi oluturduk.

Artık modüllerin ana çatı tarafından tanınması ve yüklenmesi için gerekli olan başlangıç mekanizmasını oluşturmanın vakti geldi. Bu mekanizmanın ana sınıfı UnityBootstrapper denen tiptir. Bu tipten türeterek oluşturduğumuz sınıfımızın adı MainBootstrapper. Sınıfımızın içeriği aşağıdaki gibidir.


public class MainBootstrapper:UnityBootstrapper
{
    protected override DependencyObject CreateShell()
    {
        return Container.Resolve<Shell>();
    }

    protected override void InitializeShell()
    {
        Shell shell =new Shell();
        Application.Current.RootVisual = shell;
    }

    protected override IModuleCatalog CreateModuleCatalog()
    {
        ModuleCatalog catalog = new ModuleCatalog();
        catalog.AddModule(typeof(ProductModule.ProductModul));
        return catalog;
    }

}

CreateShell metodu ana yapı olan Shell tipinden bir nesneye işaret etmektedir.

InitializeShell ise Application.Current.RootVisual UIElementine Shell nesnesini göstermektedir.

CreateModuleCatalog ise yüklenecek olan modllüeri göstermektedir.

App.xaml.cs içerisindeki Application_Startup metodunda ise MainBootstrapper başlatılmaktadır.


private void Application_Startup(object sender, StartupEventArgs e)
{

    MainBootstrapper boot=new MainBootstrapper();
    boot.Run();

}

Uygulamamız artık çalıştırılmaya hazır.

Bu yazımızda Pism ile ilgili detaylı bilgiler vermedim. Daha sonraki yazılarda kısmetse Prism nedir ne değildir şeklinde bir yazı hazırlayabilirim.

Tekrar görüşmek ümidiyle.

Örnek Uygulama Kodlarına Buradan Erişebilirsiniz.

Kaynakhttp://compositewpf.codeplex.com/

Silverlight MVVM Giriş ve Prism DelegateCommand

21 Eyl

Web projelerini ASP.NET MVC ile geliştirenlerden olduğum için Silverlight tarafında da kendi çabalarımla model view tarzı çalışmalarla uğraşmaktaydım. Silverlight tarafında da katmanları birbirinden izole eden böyle bir yapı var mı diye araştırırken MVVM(Model View and ViewModel) yazılım tasarımıyla karşılaştım.

Yazılım tasarımları yeni başlayanlar için pek bir şey ifade etmeyebilir. Fakat uzman yazılımcılığa adım attıktan sonra, geleneksel yöntemlerle işlerin çorbaya dönüştüğü ve içinden çıkılamaz bir hale geldiğini görenler çıkış noktası aramaya başlarlar. Böylece ilk başlarda saçma gelen yöntemler artık yazılımcı için tam anlamıyla can simidi olur. Bu yazımızda da Silverlight MVVM yazılım tasarımını, giriş seviyesindeki bir örnekle incelemeye çalışacağız.

MVVM yazılım tasarımındaki temel amaçlar:

  • Yazılımda esnekliğin sağlanması(Loosely Coupled),
  • Genişletilebilir bir yazılım oluşturulabilmesi(Open Closed),
  • Test edilebilir yazılımın oluşturulabilmesi,
  • Kod tekrarlarının önune geçilmesi (Clean Code) şeklinde sıralanabilir.

MVVM sayesinde Silverlight framework elementlerin(xaml tarfının) ve CLR (C#, VB gibi) kodlama tarafının birbirinden yalıtımı da sağlanabilir. Xaml ve Kod tarafında event paslaşmalarını Command Binding mekanizmalarıyla ortadan kaldırmak MVVM tasarımında işleri daha da kolaylaştırmaktadır.

Microsoft Pattern & Practices ürünlerinden olan Prism kütüphanesi sayesinde Desktop uygulamaları ve Silverlight uygulamalarında modülerliği ve yazılımda esnekliği sağlayan bir takım özellikler mevcuttur. Bu yazımızdaki örnek uygulamada command binding diye adlandırılan yapıdan bahsedeceğiz.

ViewModel içerisine tanımlanan bir ICommand nesnesi aracılığı ile View tarafından commanding işlemi gereçekleştirilebilmektedir. Tekrardan view tarafında tanımlanan button v.s gibi bileşenlerin event’lerini yakalayıp, iş operasyonlarını gerçekleştiren süreçleri view tarafına sokmamış oluruz. Yani kısaca herkes kendi yoluna gider.

Şimdi giriş seviyesinde bir örnek uygulama yaparak konuyu incelemeye başlayabiliriz. Örneğimize başlamadan önce Microsoft Pattern & Practices sitesinden Prism kütüphanelerini indirip bunlardan Microsoft.Practices.Prism referans olarak projemize eklemek gerekmektedir.

Örnek Uygulama

Örnek senayyomuz, bir Product tipinin arayüz ayrımının yapılması şeklinde olacaktır.

Model olarak Product adında basit bir temel tip belirliyoruz.


public class Product
{
    public string Name { get; set; }
    public decimal Price { get; set; }
    public override string ToString()
    {
         return string.Format("Name: {0}, Price: {1}", Name, Price);
    }

}

Bu tipimizi görünüm arayüzünde (xaml tarfına) temsil edecek bir tip oluşturmamız gerekiyor. Bu tip aslında bizim ViewModel dediğimiz yapıyı oluşturacak olan tiptir.


public class ProductViewModel
{
    private readonly Product product;
    public ICommand SaveCommand { get; set; }
    public Product Product { get { return product; } }

    public ProductViewModel()
    {
        product = new Product {Name = "Notebook", Price = 1500};
        SaveCommand = new DelegateCommand<object>(OnSave);
    }

    private void OnSave(object obj)
    {
        MessageBox.Show(product.ToString());
    }

}

Yukarıda görüldüğü gibi ViewModel tipimizin adı ProductViewModel şeklindedir. Bu tip, içerisinde Product tipini barındırıyor ve kaydetme işlemini tetikleyecek olan ICommand tipinde bir nesne barındırıyor. Constructor içerisinde ürün bilgileri ve Command işlemini yapacak olan nesnenin oluşturulma işlemi gerçekleştiriliyor. DelegateCommad tipi, Microsoft.Practices.Prism.Commands

İçerisinde bulunmaktadır. Bizim senaryomuzda herhangi bir kayıt söz konusu olmadığından kaydetme işlemini MessageBox mesajı ile geçiştiriyoruz.

View tarafında da kayıt bilgilerinin alındığı bir form tasarımı oluşturacağız. Ayrıca View tarafında DataContext olarak az önce oluşturduğumuz ViewModel tipini göstereceğiz. View kontrolümüz ProductView.xaml şeklindedir ve içeriği aşağıdaki gibidir. Cs kod tarafında hiç bir işlem yapılmamıştır.

Hazırlık aşaması tamam olduğuna göre artık oluşturduğumuz View, Mainpage.xaml içerisine yerleştirilebilir.

Burada dikkat etmemiz gereken noktalardan biri, button click event’ine hiç kod yazılmaması. Bunun yerinde Command mekanizmasının kullanılmasıdır. Command binding, MVVM tasarım desenini kullanmayı kolaylaştıran yöntemlerden biridir. Eğer button click event kullanılsaydı View tarafında View tarafında yapılmaması gereken bir işlem yapılmış olacaktı.

Sonuç olarak Solution penceremiz şu şekildedir. Klasörleri kendim oluşturdum, yani visual studio tarafından hazır olarak sunulan bir MVVM projesi yok.

Tekrar görüşmek ümidiyle.

Örnek Uygulama Kodlarına Buradan Erişebilirsiniz.

Silverlight Commanding Kavramı

20 Eyl

Silverlight tarafında çalışma zamanında(runtime) yapılmasına gerek duyulan implementasyonlar yüzünden MVVM gibi yazılım tasarımlar gün yüzüne çıkmıştır. Bu tarz kod yazım tasarımları, ürünlere bağlı değildir aslında. Ancak ürün sahipleri, yeni sürümlerini çıkarırken, geliştiricilere yardımcı olabilmek ve güncelliği korumak adına bir dizi eklemeler yapabilmektedirler. Silverlight tarafında  Silverlight 4 ile birlikte gelen Commanding yapısı da bize kolaylık sağlayacak özelliklerden biridir.

Commading yapısının bize sağlayacağı kolaylıkların başında, event ve eventhandler mekanizmalarıyla uğraşmadan kod akışını düzenlemek geliyor. Yani normal kodlama yaparken alışkanlıklarımızdan biri şudur: arayüz(xaml) tarafındaki bir bileşende gerçekleşecek olan bir olay aynı xaml dosyasına bağlı *.cs kod dosyasında yaparız. Commanding yapısında ise gerçekleşen olayı ayrı bir sınıf aracılığıyla yaparız. Diğer bir husus ise modüler programlama yaparken sağlayacağı kolaylıktır ki bizi en çok rahatlatacak olan özelliklerinden biri de budur. Bir modül oluşturduğunuzu düşünün(ayrı bir silverlight dll). Bu modül üzerinde görsellikle diğer katmanlar rahatlıkla ayrılabilir.

En basit şekliyle event yakalama işlemini gösteren bir uygulamayla işe başlayalım.

Örnek Uygulama

Bu örneğimizde bir butona tıkladığımızda verilen mesajı hem cs kodundaki event ile hem de command mekanizmasıyla gerçekleştireceğiz.


private void button1_Click(object sender, RoutedEventArgs e)
{
      MessageBox.Show("Mainpage.cs tarafındaki event");
}

Yukarıdaki kod ile alışılagelmiş ve en basit haliyle butona tıklayıp sonuç alma işlemini gerçekleştirmiş olduk. Bu işlemi bir de comman binding yardımıyla ile yapalım.

public class MessageCommand:ICommand
{
     public bool CanExecute(object parameter)
     {
        return true;
     }
     public void Execute(object parameter)
     {
         MessageBox.Show("MessageCommand tarafından gelen event.");
     }

     public event EventHandler CanExecuteChanged;
}

Öncelikle ICommand arayüzünü uygulayan MessageCommand bir sınıf oluşturduk. Bu sınıf, ICommand ile gelen CanExecute, Execute, CanexecuteChanged üyelerini de barındırıyor.

Belirtmekte fayda var. ICommand arayüzünün profili de şu şeklidedir.

public interface ICommand
{
       event EventHandler CanExecuteChanged;
       bool CanExecute(object parameter);
       void Execute(object parameter);

}

Şimdi xaml tarafında MessageCommand tipine butonu bağlayabiliriz.

Bu uygulama, command binding işleminin nasıl yapıldığını en düşük seviyede anlatan bir uygulamadır. İleri seviyedeki uygulamalar ise MVVM(Model View and ViewModel) tasarım deseni uygulandığı örneklerde gösterilmektedir. önümüzdeki yazılarda bu konuya değinmeye çalışacağız.

Tekrar görüşmek ümidiyle.

Coğrafi Bilgi Sistemleri (CBS) Nedir ?

30 Tem

Coğrafi Bilgi Sistemleri (CBS), teknolojinin birçok dalının bir araya gelerek coğrafi veri üreten kurum ve kuruluşlara, veri üzerinde tasarım ve analiz imkanı sağlayan bir yapıdır. Verinin şekillendirilip anlamlı hale gelmesiyle kurum ve kuruluşlar, coğrafi verilerle de artık stratejik planlarını rahatça yapabilecek hale gelmektedirler.

Kullanım alanları

Ülkemizde CBS işlerinin devlet eliyle Ulusal Coğrafi Bilgi Sisteminin oluşuturlması, kontrolü ve yürütülmesi amacıyla 2011 yılında Coğrafi Bilgi Sistemleri Genel Müdürlüğü kurulmuştur. Bu da devlet olarak işin önemini benimsediğimizi ortaya çıkarmıştır.

İşin idari boyutundan ziyade, teknik boyutu hakkında konuşmaya devam edelim.

CBS, teknik olarak birden fazla alana yayılmış şeklidedir.

  • Haritacılık. (CAD, ArcGIS, ArcMAP,diğer yazılımlar)
  • Sistem (Harita yayınlarının sunumu, Sunucuların optimizasyonu)
  • Veritabanı (Oracle, MsSQL,…)
  • Yazılım (Silverlight, Java Flex, Javascript)

Yani tek başına CBS diye birşey yoktur. CBS uygulamalarının hayat bulabilmesi için sağlam bir ekibin oluşturulması şarttır.

CBS uygulamalarını şu şeklide sıralayabiliriz: Kent Bilgi Sistemi, Orman Bilgi Sistemi, Karayolları Bilgi Sistemi, Arazi Bilgi Sistemi, Tapu ve Kadastro Bilgi Sistemi, Lojistik Bilgi Sistemi, İç Güvenlik Bilgi Sistemi, Araç İzleme Bilgi Sistemi, Trafik Bilgi Sistemi, Kampüs Bilgi Sistemi, Deprem Bilgi Sistemi, Harita Bilgi Sistemi, vb. şekilde adlandırılırlar.

CBS uygulamalarının kullanım alanlarını da şu şekilde sıralayabiliriz: kaynak yönetimi, varlık yönetimi,alt yapılar (doğalgaz, elektrik, su), kentsel planlama, madencilik, askeri alanlar, trafik ve karayolları, ticaret… şeklinde sıralayabiliriz.

CBS, metinsel veriler yerine coğrafi verilerler çalışan bir sistemdir. Örneğin deprem inceleme merkezleri ölçekler vasıtasıyla deprem olan yerlerin koordinatlarını alarak, şu saatte şu koordinatta deprem olmuştur, şeklinde bir liste tutarlar. Bu, kağıt üzerinde metinsel bir veridir. CBS sayesinde bu koordinatlı metinsel veriler, harita üzerinde de görünür hale gelektedir. Aynı şekilde doğalgaz, su hatları, yollar gibi stratejik önemdeki veriler de tek noktadan yönetilebilir hale gelmektedir. Örneğin bir caddedeki doğalgaz kesintisinden etkilenecek vatandaşların listesi alınıp, bu kişilere otomatik mail göndererek veya otomatik arama yaparak and kayıtlarıyla bilgiler vermek mümkündür.

Yani CBS, gelişen dünyanın olmazsa olmazı haline gelmiştir.

Web Chart Aracı Visifire

13 Tem

Verilerin grafiksel gösterimi konusunda piyasada birçok araç mevcuttur. İşte bunlarda bir tanesi de Visfire Chart. Buradan aracı inceleyebilmek mümkün. Web ortamında online demolar sayesinde canlı görüntüleri izleyebiliyorsunuz.

Desteklenen platformlar :

  • Silverlight
  • SharePoint
  • WPF
  • Windows Phone

Özellikle silverlight ortamında çalışan chart tool bulmak biraz zordur. Bu açıdan visifire aracı ilgimi çekmiştir.

Esri Silverlight Api Query SpatialReference Problemi

11 May

Esri silverlight API kullananların yaşadıkları sorunlar dizisinden birisiyle daha karşı karşıya kalabilirsiniz. Bu sorun, harita üzerindeki bir yere sorgu yapmak istediğinizde karşımıza çıkıyor. Daha açık bir ifadeyle bir Query sonucunda sorgulanan bir yere harita züerinde çizim yapmak istediğimizde karşı karşıya kalabilmekteyiz. Örneğin bir şehir seçildiğinde o şehri harita üzerinde maviye boyamak istediğimizde sonuç alamayabiliriz.

Ben bu sorunu Esri Silverlight V2.4 dll ve Arcgis 10 Service yayınlarında yaşadım. Sorunun kaynağında yatan ise Query yapılan Layer ile Map Layer arasındaki SpatialReference farkıydı.

Sorgu:


private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
      QueryTask queryTask = new QueryTask("http://domain/ArcGIS/rest/services/sehirler/MapServer/0");

      queryTask.ExecuteCompleted += QueryTask_ExecuteCompleted;

      ESRI.ArcGIS.Client.Tasks.Query query = new ESRI.ArcGIS.Client.Tasks.Query();
      query.Where = "ILADI=" + "'Sample'";
      query.ReturnGeometry = true;
      query.OutFields.Add("*");
      queryTask.ExecuteAsync(query);

}

Map SpatialReference
Query SpatialReference

iki şekilde görüldüğü üzere sorgu yapılan Layer ve Map Layer arasında SpatialReference Farkı var. Bu farkı gidermek için sorguda kiük bir değişiklik yaparak SpatialReference farklılığını gideriyoruz.

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{

       QueryTask queryTask = new QueryTask("http://domain/ArcGIS/rest/services/sehirler/MapServer/0");

       queryTask.ExecuteCompleted += QueryTask_ExecuteCompleted;

       ESRI.ArcGIS.Client.Tasks.Query query = new ESRI.ArcGIS.Client.Tasks.Query();
       query.Where = "ILADI=" + "'Sample'";
       query.ReturnGeometry = true;
       query.OutFields.Add("*");
       query.OutSpatialReference = MyMap.SpatialReference;
       queryTask.ExecuteAsync(query);

}

Bu işlemin ardından iki Spatial referans eşitlenir ve sorun ortadan kalkar. Map üzerindeki GraphicsLayer zerinde yapılmak istenen çizim işlemi de gerçekleşir.

GraphicsLayer

Eğer SpatialReference eşitlemesi yapılmasaydı, koordnat sistemi farkları yüzünden bu çizim işlemi başarısız olacaktı.

Silverlight Invalid Charecter Encoding Sorunu

25 Nis

Silverlight ortamında bazı proje şablonlarını kullanırken dile özgü karakterlerin kullanılması sonucu hatalarla karşılaşabilmekteyiz. Bu hatalardan biri de benim başıma geldi. Esri Silverlight API kullanırken hazır şablonlardan birini seçip edit etmeye başladığımda design sayfasında bir hata oluştu. Hatanın sebebi Türkçe karakterler kullanmam idi. Oluşan hata şu şekildeydi.

Error  1   Cannot resolve reference assemblies. Please check the reference assemblies. Invalid character in the given encoding. Line 116, position 53.  

Proje template oluşturulurken muhtemelen global ayarlar seçilsin şeklinde ayarlanmış olmalı ki ayarlarda Türkçe encoding seçiliydi.

Bu ayarı UTF-8 yapmalıydım. Bu işlem için aşağıdaki yolu izledim. File -> Advenced Save Options…

Encoding seçeneklerinden de Unicode(UTF-8 with signature) – Codepage-65001 seçeneğini seçip OK tuşuyla devam ettim.

Ardından projeyi bir kez derlediğimde sorun ortadan kalktı. İşte mutlu son.

Tekrar görüşmek dileğiyle.