Web Uygulamaları Geliştirebileceğiniz Diller ve Platformlar

Bu yazımızda sizlerle birlikte web uygulamaları geliştirebileceğiniz bir kaç dili, onların platformlarını ve bu platformlarda kullanabileceğiniz bir kaç örnek kütüphaneyi inceleyeceğiz.

1. .NET Dilleri (Visual Basic, C#, F#)

Visual Basic, Microsoft tarafından 1991 yılında duyurulan ve Basic dilini temel alarak geliştirilen, nesne yönelimli (OOP), olay odaklı (event-driven) bir dil.

C# ise yine Microsoft tarafından 2000 yıllarında duyurulan, çoklu yönelimli (multi-paradigm) bir programlama dilidir. Nesne yönelimli, fonksiyonel ve generic programlama yaklaşımlarına sahiptir.

F#, artık tahmin edebileceğiniz gibi Microsoft tarafından 2005 yılında 1.0 versiyonuna ulaşmış, çok yönelimli, özellikle fonksiyonel programlama yapabileceğiniz bir dil. Aynı zamanda Javascript ve GPU odaklı kod oluşturma gibi yetenekleri de var.

.NET dillerini kullanarak web uygulamaları geliştirebileceğiniz bir kaç platform mevcut. ASP.NET ailesinin yanı sıra, aynı zamanda Owin (Open Web Interface for .NET) ve Nancy gibi protokole daha yakın platformlar da bulunuyor.

1.1 ASP.NET Ailesi

Popüler olanları sayacak olursak Web Forms, MVC ve Web Api platformlarını sayabiliriz. Onun dışında yeni çıkan Web Pages ve Blazor isimli platformlar da mevcut fakat bunları başka yazılarda detaylı bir şekilde inceleyeceğiz.

1.1.1 ASP.NET Web Forms

ASP teknolojisinin .NET platformunda hayat bulduğu ilk hali diyebiliriz. ASP’de olduğu gibi <% ve %> tagleri kullanılarak sunucu taraflı kod yazabilirken, aynı zamanda .NET kütüphanesinin tamamına da erişim sağlayabiliyorsunuz.

1.1.2 ASP.NET MVC

ASP.NET platformu üzerine MVC metodolojisinin kurgulandığı bir platformdur. Aynı zamanda klasik ASP’den beri kullanılan <% ve %> tagleri yerine, kullanımı biraz daha kolay olan Razor yazım şekli ile birlikte gelmiştir.

1.1.3 ASP.NET Web Api

ASP.NET MVC platformu üzerinde yapılan bir kaç değişiklik ile birlikte, RESTful API’ler geliştirilebilen bir platformdur ve son yıllarda istemci taraflı web geliştirmenin de popülerliğinin artması ile birlikte en sık kullanılan yaklaşımdır.

1.2 Owin (Open Web Interface for .NET)

Sunucu ve uygulama arasındaki bağı kopartmaya çalışan Owin, geliştiricilerin daha çok uygulamanın kendisine odaklanmasını sağlamaya çalışmaktadır. Middleware yaklaşımını kullanır ve diğer .NET platformlarına nazaran daha esnek bir API sunar.

1.3 Nancy

Herhangi bir metodolojiyi benimsemeyen Nancy, direkt olarak browser tarafından istenen kaynağa karşılık gelecek şekilde bir yazım şekli sağlar. Böylece fazla kapsamlı olmayan ihtiyaçlara karşılık çok hafif bir platform alternatifi sunar.

 

2. PHP

1995 yılında Rasmus Lerdorf tarafından yaratılan PHP, sunucu taraflı kodlama sağlıyor. WordPress, Joomla! ve Drupal gibi sistemler bu dil kullanılarak geliştirilmiş ve çok yaygın bir kullanıma sahip. Sadece PHP dilinin kendisi kullanılarak da bir web uygulaması geliştirilebilse de farklı yaklaşımları barındıran bir çok platform ortaya çıkmış. İçlerinden Symfony, CodeIgniter, Laravel, CakePHP ve Phalcon platformlarını örnek olarak sayabiliriz.

2.1 Symfony

İçerisinde 50 adet bileşen bulunduran Symfony, bu bileşenler ile birlikte kod tekrarını azaltmayı ve genel ihtiyaçları karşılamayı amaçlıyor. Drupal, phpBB, yine aşağıda inceleyeceğimiz Laravel ve daha bir çok platform tarafından da kullanılmakta.

2.2 CodeIngiter

MVC metodolojisini benimseyen CodeIgniter, MVC’yi benimsemeseniz bile kullanabileceğiniz bir platform çünkü sizi MVC yazmaya zorlamıyor. Küçük ve performanslı web uygulamaları geliştirebilirsiniz. Artı olarak detaylı ve sade bir dökümantasyona da sahip.

2.3 Laravel

Web sanatçılarının PHP kütüphanesi mottosuyla kendini gösteriyor Laravel. İçerisinde Active Record desenini implemente eden Eloquent adında bir ORM’e ve Blade adında bir şablon motoruna sahip. Yaklaşım olarak MVC tercih edilmiş.

2.4 CakePHP

Dökümanın ilerleyen bölümlerinde inceleyeceğimiz Ruby on Rails’in konseptine uygun geliştirilen CakePHP, diğer bir çok platform gibi MVC yaklaşımını benimsiyor. Laravel’de de olduğu gibi içerisinde Active Record desenini implemente eden bir kütüphaneye sahip.

2.5 Phalcon

Büyük bir çoğunluğu C ile yazılan Phalcon, diğer platformlara göre daha performanslı ve daha az kaynak harcadığını savunuyor. Aynı şekilde C ile yazılan bir ORM’e ve MVC yaklaşımına sahip.

 

3. Python

‘Python Hakkında Ufak Bir Söyleşi’ adlı yazımda kendisine detaylı bir şekilde değindim. Okumak isterseniz buradan ulaşabilirsiniz.

Bir çok web platformu mevcut fakat bir kaç örnek olarak Django, Flask ve Pyramid’i sayabiliriz.

3.1 Django

İçerisinde varsayılan olarak şablon motoru, ORM ve kimlik doğrulama gibi özellikler ile geliyor ve Python üzerinde web programlama için kullanılan en popüler platformdur.

3.2 Flask

Aşağıda da inceleyeceğimiz ve bir Ruby platformu olan Sinatra’dan ilham alan Flask, alt tabanında Werkzeug WSGI Toolkit ve Jinja2 şablon motorunu kullanıyor. Çok hafif bir yapıya sahiptir.

3.3 Pyramid

Az uğraş gerektireceğini vaad eden Pyramid, en basitinden en kapsamlısına bütün projelerde kullanılabileceğini söylüyor. İçerisinde dosya bazlı şablon motoru, doğrulama sistemi ve test kütüphaneleri ile birlikte geliyor ve geniş konfigurasyon desteği sağlıyor.

 

4. Ruby

Yukihiro “Matz” Matsumoto tarafından Japonya’da, 1990’lı yılların ortalarında geliştirilmeye başlanmış. Çoklu yönelimli bir dil olan Ruby, nesne yönelimli ve fonksiyonel programlama yaklaşımlarına sahiptir.

Dökümanda önceden de bahsedilen, Ruby için önemli sayılabilecek iki adet platform bulunuyor ; Ruby on Rails ve Sinatra.

4.1 Ruby on Rails

Convention over Configuration yaklaşımını savunan Ruby on Rails, çok hızlı bir şekilde web üzerinde çalışabilen uygulamalar geliştirmenizi sağlıyor. Ruby üzerinde kullanılan açık ara en popüler platform.

4.2 Sinatra

Nancy ve Flask gibi, minimum efor ile web uygulaması yazmanızı sağlayan bir platform. Test kütüphaneleri ve topluluk tarafından geliştirilen eklentiler ile çok daha geniş çaplı uygulamalar da yazılabiliyor.

 

Bu yazıda, .NET dilleri, PHP, Python ve Ruby dilleri için kullanılabilecek platformları inceledik.

Bir sonraki yazıda görüşmek üzere.

Angular 6 İle Kütüphane Geliştirmek: İlk kütüphanemizi yazıyoruz!

Bu yazı ile Angular 6 ile birlikte kolaylaşan kütüphane geliştirme sürecini hep birlikte inceleyecek, “yeni bir kütüphane nasıl geliştirilir?” sorusunu yanıtlayacağız.

Gereksinimler

Eğer hali hazırda bir Angular geliştirme ortamına sahip değilseniz ihtiyacınız olan iki şey var;

Kütüphane Projesini Oluşturmak

İlk olarak yeni bir Anguılar 6 çalışma ortamı kurarak işe başlıyoruz. Bunun için aşağıdaki Angular CLI komutunu kullanacağız;

ng new peakup-lib-demo

Proje oluşturulup, npm paketleri yüklendikten sonra yeni bir Angular 6 projesine sahip oluyoruz. Şimdi ismi daha önce “angular-cli.json” olan, Angular 6 birlikte “angular.json” olarak değişen konfigürasyon dosyamızı incelediğimizde “projects” isminde bir alan olduğunu göreceğiz. Bu alanın anlamı artık aynı çalışma ortamında birden fazla proje oluşturabiliyoruz. Bu proje yeni bir uygulama olabileceği gibi, bizim bugün inceleyeceğimiz gibi bir kütüphane de olabiliyor. O zaman bir kütüphane projesi oluşturarak sürece devam edelim. Bunun için aşağıdaki komutu kullanacağız;

ng generate library peakup-lib

Bu komutun ardından root dosyamızın altında “projects” adından bir dosya oluştuğunu, ve altında da ismini “peakup-lib” olarak belirlediğimiz kütüphanemizin yer aldığını göreceğiz. Aynı zamanda angular.json dosyasını incelediğinizde “projects” altında “peakup-lib” adında yeni bir proje olduğunu göreceksiniz.

Şimdi hep birlikte oluşan projeyi inceleyelim!

İlk olarak src > lib dizininde yer alan peakup-lib.module.ts dosyasına göz atalım;

Daha önce Angular 2+ projesi geliştirdiyseniz app.module.ts dosyasından mutlaka haberdarsınızdır. Angular projeleri modüler bir yapıda geliştirildiğinden her uygulamada varsayılan olarak en az bir modül olmak zorunda. Kütüphane projeleri için de aynı durum geçerli. Fakat dikkat edilmesi gereken bir husus var; eğer daha önce birden fazla modül içeren bir proje geliştirmediyseniz kullanmaya alışık olmadığınız “exports” alanı. Bu alan ilgili modülün import edildiği projeler/modüllerin erişebileceği component’leri içermelidir. Bu şekilde export edilen component’lere, modülün import edildiği projelerden/modüllerden erişilebilmesine olmasına olanak sağlanır.

Resimde de görüldüğü üzere proje içerisinde bulunan “PeakUpLibComponent” export edildiğinden dolayı, modülün import edildiği projelerde/modüllerde erişilebilir olacak. Yani siz de kütüphaneniz içerisinde oluşturduğunuz ve dışarıdan erişilebilir olmasını istediğiniz component’leri bu alana eklemelisiniz.

Şimdi default olarak oluşan component’imize göz atalım;

PeakUpLibComponent

görüldüğü üzere yalnızca içerisinde bir html template’e sahip. Bu component kütüphanemizin çalışıp çalışmadığını anlamamıza yardımcı olacak. Daha sonra kendisine ihtiyacımız olmayacak

Şimdi kütüphanemiz için önemli olan asıl dosyaya göz atalım; public_api.ts

public_api.ts

kütüphanemizde bulunan modül, component, service, model gibi tüm proje dosyalarından hangilerinin kütüphanemizin kurulu olduğu projeden erişilebilir olduğunu tanımadığımız dosya. Yukarıda yer alan resimden de anlaşılacağı üzere, kütüphanemizde bulunan 3 dosya, kütüphanemizi kurduğumuz projede kullanılabilir olacak.

Kütüphanemizi build etme zamanı!

Kütüphanemizi yayınlamak veya test etmek için build etmemiz gerekiyor. Aşağıdaki komutla kütüphanemizi build ediyoruz:

ng build peakup-lib

Şimdi ilk oluştuduğumuz proje olan peakup-lib-demo içerisinde kütüphanemizi deneyelim. Bunun için peakup-lib-demo projesinin app.module.ts dosyasında kütüphanemizi import etmemiz gerekiyor.

Resimdeki gibi PeakUpLibModule‘ü import ediyoruz. Şimdi kütüphanemiz içerisinde yer alan PeakUpLibComponent‘i, AppComponent içerisinde kullanarak kütüphanemiz çalışıyor mu bakalım;

app.component.html

dosyamıza component’imizi yerleştirdikten sonra “ng serve” komutuyla projemizi çalıştırıyoruz.

Ve sonuç;

Görüldüğü üzere kütüphanemiz sorunsuz çalışıyor.

Bu yazımızda sizlerle birlikte Angular 6 ile birlikte kolaylaşan kütüphane oluşturma sürecini temel olarak inceledik. Bir sonraki yazımızda ise “yazdığımız bu kütüphaneleri public ve private olarak nasıl yayınlar ve kullanma sunarız?” sorusunu yanıtlayacağız!

Aklınıza takılan soruları sormaktan çekinmeyin, bir sonraki yazımızda görüşmek üzere.

.NET İçin Kuyruk Çözümleri : MSMQ

MSMQ Nedir?

MSMQ zaman bağımsız olarak birden fazla uygulama arasında offline veri alışverişini sağlayan Windows tabanlı kuyruk sistemidir. MSMQ ile birlikte uygulama veya ağ üzerinde bir sorun oluşsa dahi (çökme, hata fırlatma vb.) akış, gerçekleşen sorun giderildikten sonra veya çöken/çalışmayı durduran uygulama tekrar çalışmaya başladıktan sonra devam eder.

MSMQ ile iletilen mesajlar sistem üzerinde fiziksel bir alanda saklanmaktadır. Bu noktada yukarıda bahsetmiş olduğumuz senaryolar dahil, mesajları alması beklenen uygulama kapalı olsa dahi bu mesajlar saklanmaktadır.

Resim 1: Oluşturduğunuz Queue’ları Computer Management Ekranından Görmeniz Mümkün (compmgmt.msc)

Kuyruk Tipleri

MSMQ için iki adet kuyruk tipi mevcut;

Public Queues:

Bu tipte oluşturulmuş olan kuyruklara, yalnızca oluşturulduğu sunucu/bilgisayardaki uygulamalardan değil, aynı ağa bağlı tüm sunucu/bilgisayarlardan erişim sağlanabilmektedir. Bu sayede aynı ağda bulunan iki farklı sunucu ve bu sunucularda kurulu olan farklı uygulamalar arasında da MSMQ aracılığı ile mesaj iletimi sağlanabiliyor.

Private Queues:

Bu tipte oluşturulmuş olan kuyruklara ise yalnızca oluşturulduğu bilgisayar/uygulama üzerinden erişim sağlanabilir ve yalnızca aynı bilgisayar/sunucu üzerinde kurulu olan uygulamalar bu kuyruktan beslenebilir ve bu kuyruğu besleyebilir.

Programlanabilirlik

MSMQ alt yapısı C#, VB.NET ve .NET tabanlı diğer diller tarafından kullanılabilmektedir. System.Messaging namespace’i altından erişilebilir.

Kurulum

Eğer MSMQ sistemini bilgisayarınıza kurmak isterseniz, aşağıdaki adımları takip edebilirsiniz.

  1. Denetim Masası üzerinden “Programlar” seçimini yapın, ardından açılan ekranda “Programlar ve Özellikler” altında bulunan “Windows Özelliklerini Aç veya Kapat” seçimini yapın. Veya Windows + R tuş kombinasyonu ile “optionalfeatures” komutunu çalıştırabilirsiniz.
  2. Açılan pencerede “Microsoft Message Queue (MSMQ) Server” seçeneğini işaretleyin

Resim 2: “Windows Özelliklerini Aç veya Kapat” seçimi sonrası açılan pencereden “Microsof Message Queue (MSMQ) Server” özelliği işaretlenmeli.

Aynı kurulumu Windows Sunucu üzerinde yapmak için ise aşağıdaki adımları izlemelisiniz;

  1. Server Manager açıldıktan sonra Sağ üst tarafta bulunan Manage altından, “Add Roles and Features” seçilir.
  2. Açılan pencereden Features adımına gelindikten sonra listeden “Message Queuing” özelliği işaretlenir. Bu seçimin ardından “Install” butonu tıklanır ve özelliğin aktif edilme süreci bağlar. Bu işlemin ardından sunucunuzu yeniden başlatmanız gerekmez.

Resim 3: Features adımı altındaki listeden “Message Queuing” seçimi yapılır ve Install butonu tıklanarak kurulum süreci başlatılır.

C# Uygulamalarında MSMQ’yu Kullanmak

MSMQ’nun ne olduğundan ve nasıl kurulduğundan bahsettiğimize göre, örnek bir senaryo üzerinden bir C# uygulamasında MSMQ’nun sağladığı kuyruk alt yapısından nasıl faydalanabiliriz inceleyelim.

Senaryomuz; PeakUp’ta yeni işe başlayan personelin bilgisi sisteme girildiğinde, ilgili çalışana mail atmak olsun. Bu senaryoda ihtiyacımız olan iki uygulama var;

  1. Personel bilgilerinin girileceği uygulama
  2. Farklı uygulamalardan gelen mail gönderme taleplerini karşılayacak ve mailleri gönderecek uygulama.

İlk uygulamamızın ismi Peakup.Employee.Manager olsun. Projemizin yapısı aşağıdaki gibi;

PeakUp.Empoyee.Manager

  • Extensions
    • MessageQueueExtensions.cs (MessageQueue sınıfı için yazacağımız extension metotlar)
  • Models
    • EmployeeModel.cs (Personel sınıfı)
    • Mail.cs (Mail Sınıfı)
  • Program.cs

Önemli

MessageQueue sınıfını kullanabilmemiz için her iki projemize de System.Messaging referansını eklememiz gerekiyor.

Şimdi kodlara göz atalım:

Oluşturmak istediğimiz isimde bir Queue zaten varsa onu getirmek, yoksa tekrar oluşturmak gerekiyor. Bu işlemi daha hızlı bir şekilde gerçekleştirmek için bu Extension metodu kullanabilirsiniz.

https://gist.github.com/kivancbakdi/9ca90e66f422151ff1db65b7c13f146a

Employee ve Mail sınıflarımız;

https://gist.github.com/kivancbakdi/87f66c7e26a3e91fdea43d572d94dccd

https://gist.github.com/kivancbakdi/d20de4c25791aec483b2755987e08ac8

Yeni personel oluşturma ve bu personeli mail için kuyruğa atma işlemlerini yaptığımız program dosyamız;

https://gist.github.com/kivancbakdi/3c2af5f2b1f008c6e048474c0027f915

İkinci uygulamamızın ismi ise PeakUp.Email.Manager. Projemizin yapısı aşağıdaki gibi;

PeakUp.Email.Manager

  • Extensions
    • MessageQueueExtensions.cs (MessageQueue sınıfı için yazacağımız extension metotlar)
  • Models
    • Mail.cs (Mail Sınıfı)
  • Program.cs

Bu projemizin kodları da aşağıdaki gibi;

Oluşturmak istediğimiz isimde bir Queue zaten varsa getirmek, yoksa tekrar oluşturmamız gerekiyor. Bu işlemi daha hızlı bir şekilde gerçekleştirmek için bu Extension metodu kullanabilirsiniz.

https://gist.github.com/kivancbakdi/9ca90e66f422151ff1db65b7c13f146a

Mail sınıfımız;

https://gist.github.com/kivancbakdi/d20de4c25791aec483b2755987e08ac8

Mail kuyruğunu dinleyen ve mail sınıfını konsola yazdıran program dosyamız;

https://gist.github.com/kivancbakdi/e74526652da6f740544de516bdd1e51b

Bir C# projesinde MSMQ kullanan bu yazımızın sonuna gelmiş olduk. Bu konuyla ilgili daha fazla detaya ihtiyaç duyuyor veya örnekleri beraber incelemek istiyorsanız Live Coding Sessions‘larımızı takip etmeyi ihmal etmeyin!

Teşekkürler!

.Net Standard ile Xamarin Uygulamaları Geliştirmek

.Net Standard Nedir?

En temelde .Net Standardın çözdüğü problem; platformlar arası kod paylaşımını artırmak ve geliştirilen API’ lerin diğer platformlar tarafından da kullanılabilmesini sağlamaktır. Diğer platformlardan kasıt, Asp.Net web uygulamaları, mobil ve masaüstü uygulamalar ve hatta oyunlar.

Öyle ki tek bir base classınız olacak ve bu, tüm .Net platformlarında çalışabilir olacak. Geliştiriciler açısından, geliştirme yaparken ayrıca her platform için farklı bir senaryo düşünmek gerekmeyecek. Mevcut .Net APIlerini buradan görüntüleyebilirsiniz.

.Net Standard Platform desteği ile ilgili detaylı tablo aşağıdaki gibidir. Bu tabloya bakarak mevcut Xamarin projelerinin hangi .Net Standardına yükseltebileceğini görebilirsiniz. Mevcut Xamarin projelerini Visual Studio üzerinden .Net Standarda taşımanızı önermiyoruz. Deneyimle sabittir, bu pek çok hata ile karşılaşmanıza ve epeyce vakit kaybı yaşamanıza sebep olacaktır. Üşenmeyin yeni bir proje oluşturun 🙂

.Net Standard’ ın .Net Core’ dan farkı nedir?

.Net Core’ dan portable olma yapısı çıkarılarak, .Net Standard’ ın diğer .Net platformlarından bağımsız olarak geliştirilebilmesi amaçlanmış. Bu durum .Net core’ un kendi içinde geliştirilmesini hızlandırmış ve .Net Standard tarafında da mevcut tasarımlar üzerine oturtmak için yeni bir tasarım yapmak yerine, doğrudan ilgili katman basitçe değiştirilmiş. .Net Core’ da yeni bir API eklenmesi bunun .Net Standard tarafında da çalışacağı anlamına gelmiyor. Ancak .Net Standard ile temel amaç .Net platformları arasında bir tutarlılık oluşturmak. Bu nedenle, standart güncellendiğinde standartların bir parçası olan yeni üyeler otomatik olarak değerlendiriliyor.

.Net Standard’ ın PCL’ den Farkı Nedir, Avantajları nelerdir?

PCL’lerle, üzerinde çalışmak istediğiniz platformları seçersiniz ve size kullanabileceğiniz sonuçtaki API setini sunar. Bu sayede, birden fazla platform üzerinde çalışan ikili üretmenize yardımcı olurken, hala farklı temel sınıf kütüphaneleri hakkında düşünmeye zorlar. .Net Standard ile tek bir temel sınıf kütüphanesine sahipsiniz. İçindeki her şey tüm .NET platformlarında desteklenecektir (mevcut olanlar ve gelecekteki olanlar).

Xamarin .Net Standard ile Uyumlu mu, .Net Standard’ a geçiş Yapmalı mıyız?

Şimdiden Nuget paketlerinden en çok kullanılan API’ ların %70′ inin .Net Standard 2.0′ a geçiş yaptığı ve bazı PCL kütühanelerinin de .Net Standard ile uyumlu olduğu söyleniyor (tamamen uyumlu olmayabilir. Dipnotlar ile değineceğiz). Ancak yine de çalışmayı planladığımız .Net Standard sürümünü, gereksinimlerimize göre tercih etmekte yarar var.

.Net Standard sürümü seçilirken dikkat edilmesi gerekenler;

  • En son sürüm, daha fazla API desteği
  • En düşük sürüm, daha fazla platform desteği, gibi.

Eğer sadece Android ve iOS projeleri ile çalışacaksak .Net Standard 2.0 iyi bir seçenek olabilir. Ancak Windows Universal projeleri ile de çalışacaksak, daha düşük bir .Net Standard sürümünü tercih etmemiz platform desteği açısından daha gerçekçi bir yaklaşım olur.

Bunun ile birlikte aşağıdaki satırları projemizin csproj dosyasına ekleyerek yaygın olarak kullanılan ancak henüz .Net Standard a geçiş yapmamış kütüphaneleri kullanabiliriz.

https://gist.github.com/HilalSener/d846a7c9c18877b7b2d87513668a8e8c

Bilmekte Fayda Var!

.Net Standard doğrusal versiyonlandığı için bir kütüphane üst sürüme güncellense bile alt sürüm özelliklerini de taşımaya devam ediyor. Örneğin, projede bir tasarım kütüphanesi kullanıyoruz. Ancak kütüphane, bizim projede kullandığımız bir elemanı üst versiyonunda kaldırmış. Bu durum, problemler yaşamamıza sebep olabiliyordu.

Bazı Nuget paketlerini eklediğimiz sırada dll okuyamama hatası alabiliyoruz. Daha fazla platform uyumluluğu vaad ettiği için projeyi bir alt sürüme çeksek bile bu problem devam edebiliyor. Böyle bir durumda Visual Studio’ yu güncelleyip Xamarin’ i son sürüme çekmenizi öneririz. Bununla birlikte .Net Standardın son sürümünü kullanmanın, Android ve iOS tarafında uyumlu çalışmak ile birlikte, Universal uygulama geliştirirken bazı sorunlara sebep olabileceği söyleniyor. Henüz karşılaşmadık. Olası bir durumda yazının bu kısmı günlleniyor olacak.

Olası hataları çözümlemek için clean, build, update, restart yaptınız. Ama bir de baktınız ki intellisense gitmiş. Resharper’ ı kaldırınca sorunun düzeldiğini göreceksiniz. Visual Studio’ nun kendi intellisense’ i şu an iyi çalışır durumda.

Bazı PCL kütüphanelerinin .Net Standard ile çalıştığından bahsettik. Evet çalışabiliyor. Ama Nuget paketleri kısmını inceleyecek olursanız, uyarı verdiğini göreceksiniz. Kütüphanenin o an kullandığınız elemanı, bazı platformlarda çalışıyor olabilir. Ancak aynı kütüphanenin farklı bir elemanını kullanmak istediğinizde çalışmaması olası. Mümkün olduğunca böyle bir durumdan kaçınmak faydalı olacaktır.

Happy Coding 🙂

Microsoft Cognitive Toolkit ( CNTK ) FastRCNN-BrainScript ile Görüntü İşleme

Bu yazımızda Microsoft’un açık kaynaklı derin öğrenme kütüphanesi olan daha önceki yazılarımızda incelediğimiz Cognitive Toolkit (CNTK) ile Microsoft’un kullanıcıların daha iyi gözlemlemesi için yayınladığı örneklerden bir tanesi olan ve tanıttığımız resimdeki objeleri algılamamızı sağlayan FastRCNN algoritmasını adım adım birlikte hayata geçireceğiz.

Azure Data Science Virtual Machine

Microsoft’un bulut sistemi olan Azure platformunda bilimsel çalışmalar yapabilmek adına geliştirilmiş ve ihtiyacımız olan bir çok yapının önceden kullanıma hazır bir şekilde bulundurduğu sana makinesidir. Adımları yapılandıracak donanımlara sahip değilseniz veya bulut üzerinde çalışmak istiyorsanız. https://azure.microsoft.com/tr-tr/ adresi üzerinden Azure hesabı oluşturup, aşağıdaki ekran görüntülerini sırasıyla takip ederek bu yazıdaki demoyu hayata geçirmek için gerekli sanal makineyi oluşturabilirsiniz.

1-) Azure hesabınıza giriş yaptıktan sonra karşımıza çıkan gösterge panelinden gösterilen adımları takip ediniz.

2-) Sonraki adım olarak aşağıdaki ekran görüntüsü yardımıyla bir sonraki adıma geçiniz.

3-)Ardından karşımıza çıkan sayfada dikkat etmeniz gereken nokta Kullanıcı Adı ve Şifreyi bağlantı sırasında kullanacağımız için bir yere mutlaka not etmeniz.

4-) Demo için bizim kullandığımız sanal makine özellikleri aşağıda gösterildiği gibidir ihtiyacınız doğrultusunda farklı donanımlara sahip olan sanal makineleri tercih edebilirsiniz.

5-) Bu kısım sanal makinemizi ayrıntılı bir şekilde özelleştirmemiz için gerekli seçeneklerin bulunduğu yerdir. Demo özelinde böyle ayrıntılara ihtiyaç duymadığımız için tamam dedikten sonra sanal makinemizi oluşturabiliriz.

6-) Bu işlemleri tamamladıktan sonra kaynaklarım kısmında ismini verdiğimiz sanal makinemizi görebiliriz.

7-) Sanal makinemizin üzerine tıkladıktan sonra karşımıza çıkan göster panelinde önce başlat butonu ile sanal makinemizi hazırladıktan sonra, bağlan butonuna tıklayınız. Uzaktan bağlantı kurabilmek için çok hızlı bir şekilde .rdp uzantılı bir dosya indirecektir. İndirilen dosyayı çalıştırdıktan sonra sanal makinemizi oluştururken kullandığımız bilgiler ile sanal makinemize bağlanabiliriz

Sanal makinemize sorunsuz bir şekilde bağlantımızı gerçekleştirdikten sonra aşağıdaki adımları takip edebilecek duruma geldiğiniz demektir.

BAŞLANGIÇ ADIMLARI

Öncelikle ön paket yükleyicisi olan Anaconda’yı https://www.anaconda.com/download/ adresinden işletim sisteminize göre indirmemiz gerekiyor.

Kurulumumuzun ardından ekran görüntüsünün yönlendirmesi ile Anaconda Prompt’imizi açıyoruz. Konsol ekranında ilk olarak bize uygun olan ve kullanacağımız Python sürümünü
conda install python=3.5
komutu ile bilgisayarımıza indiriyoruz. 
Python 3.5 versiyonu ile bir çalışma alanı(environment) oluşturmamız gerekiyor bunun içinde
conda create -n py35 python=3.5 anaconda
komutunu kullanıyoruz. Hatırlatma olarak “py35″ çalışma alanınızın(environment) ismi istediğiniz gibi kişiselleştirebilirsiniz. Tüm bu işlemlerin ardından artık çalışma alınımız bilgisayarımızda hazır bir hale geldi, bunu aktif olarak kullanabilmek için
activate py35
komutunu kullanıyoruz.

CNTK KURULUMU

Kendi çalışma alanımızı oluşturduk. Şimdi bizim için gerekli olan kütüphaneleri çalışma alanımıza
pip install numpy scipy h5py jupyter 
easydict
komutu ile entegre etmemiz gerekiyor. Sırada asıl bizi ilgilendiren CNTK kurulumu var. Bunun için konsolumuza ilk olarak CPU 
uyumlu olan CNTK kurulumu için
pip install https://cntk.ai/PythonWheel/CPU-Only/cntk-2.4-cp35-cp35m-win_amd64.whl
komutunu yazıyoruz böylelikle çalışma alanımıza CNTK kütüphanesini entegre etmiş olduk. İndirme işleminin ardından kontrol etmek için
python -c “import cntk; print(cntk.__version__)”
komutunu konsol üzerinde kullanarak CNTK versiyonunu kontrol edebilirsiniz.

Artık Microsoft tarafından yayınlanan örnekleri incelemeye başlayabiliriz. Bunun için kontrol ekranımıza
python -m cntk.sample_installer
komutunu kullanıyoruz. Bu işlem ile birlikte bilgisayarımıza CNTK-Samples-2-4 dosyasını indirmiş olduk. Başlat çubuğu CNTK-Samples-2-4 ile arama yapıp dosya konumunu istediğiniz yere taşıyabiliriz. Şuana kadar yaptığımız işlemlerin doğrulu kontrol etmek için.

CNTK-Samples-2-4 -> Tutorials -> NumpyInterop yoluna gittikten sonra python FeedForwardNet.py komutu ile python dosyamızı çalışılıyoruz.

FastRCNN Algoritmasının Çalıştırılması

Tüm kurulumları doğru bir şekilde gerçekleştirebildiysek FeedForwardNet.py dosyasını çalıştırdıktan sonra yukarıdaki gibi bir ekran görüntüsü elde etmeliyiz. Herhangi bir hata alıyorsanız önceki adımları tekrardan gözden geçiriniz.

Artık resimlerdeki objeleri algılamak için yazımızın başında bahsettiğimiz FastRCNN örneğini başlatabilmek için gerekli adımları gerçekleştirmeye hazırız. CNTK-Samples-2-4 dosyasının bulunduğu konuma içerisinde
pip install -r requirements.txt
komutu ile hangi kütüphanelere ihtiyacımız olduğunu gözlemleyebiliriz ve indirebilrisiniz.

conda install scikit-image opencv
komutu ile örnek için gerekli görüntü işleme kütüphaneleri çalışma alanımıza entegre etmemiz gerekiyor. Sonraki adım olarak pre-trained (önceden eğitilmiş) olan AlexNet modelini adresinden indirerek ..CNTK-Samples-2-4PretrainedModels yoluna taşıyınız. Bu işlemin artından artık veri setimizi indirme zamanımız geldi. Konsol ekranımız yardımıyla ..CNTK-Samples-2-4ExamplesImageDataSetsGrocery yoluna gittikten sonra
python install_grocery.py
komutu ile veri setimizi indiriyoruz. Modelimizi eğittikten sonra artık örneğimizi çalıştırma vaktimiz geldi. ..CNTK-Samples-2-4ExamplesImageDetectionFastRCNNBrainScript yoluna giderek önce
python A1_GenerateInputROIs.py
ile test ve eğitim için modelimize girdilerimizi entegre ediyoruz hemen ardından python A2_RunWithBSModel.py ile eğitimi gerçekleştiriyoruz. Ardından
python A3_ParseAndEvaluateOutput.py
ile elde ettiğimiz sonuçları gözlemlemiyoruz.

Elde edilen resim çıktılarını gözlemlemek için
python B1_VisualizeInputROIs.py
dosyasını çalıştırabilirsiniz.


Evet sonunda başardık! Görüntü işleme ile resimlerdeki objeleri CNTK derin öğrenme kütüphanesi ile algılama işlemini gerçekleştirdik. Bir sonraki yazımızda kendi veri setimizi nasıl eğitip, nasıl test edeceğimize dair örnekler üzerinde geliştirme yapacağız.

HATIRLATMA

bu aşamaya gelene kadar geride bıraktığımız aşamalara göz atmak için aşağıdaki linklere göz atabilirsiniz.

1-) Yeni Başlayanlar için Görüntü İşlemeye Giriş

2-) Görüntü İşleme için Öğrenilmesi Gereken Yapılar

3-) Görüntü İşleme için Gerekli Kurumlar ve İlk Örnek

Bir sonraki yazımızda görüşmek üzere…

 

Görüntü işleme için Öğrenilmesi Gereken Yapılar

Önceki yazımızda görüntü işleme konseptine giriş yapmıştık. Bu bölümde sizlere görüntü işleme ile ilgili bilinmesi gereken yapılar genel hatlarıyla tanıtılacaktır. Bu bilgiler ışığında ileri ki zamanlarda yapılacak olan geliştirmelerde karşı karşıya gelinebilecek sorunlar ve yapılacak araştırmalar daha efektif bir şekilde gerçekleştirilebilecektir.

1-Anaconda

Anakonda; Python, R programlama dili, veri bilimi ve bilimsel araştırmalar ile uğraşan insanlar için Anaconda kuruluşu tarafından geliştirilmiş bir ön yükleyicidir. Geliştirilen bu on yükleyici kullanıcıların işlerini büyük ölçüde kolaylaştırmaktadır. Yüklendiği zaman kendisiyle beraber veri işleme ve raporlama dahil olmak üzere bu işlemlerle ilgili 100’den fazla pakete otomatik olarak erişilebilmektedir. Aynı zamanda istenilen 600’den fazla paket conda yükleyicisi sayesinde rahatlıkla kurulabilmektedir. Daha fazla bilgi için https://www.anaconda.com/ adresine göz atabilirsiniz.

2- OpenCV

OpenCV (Open Source Computer Vision) açık kaynak kodlu görüntü işleme ve makine öğrenimi için geliştirilmiş bir yazılım kütüphanesidir. 2 ve 2.1 bir sürümleriyle Pyhton programlama dili desteği getirilmiştir. Google, Microsoft, IBM, Yahoo, Sony, Honda, Toyota gibi köklü şirketler tarafından aktif olarak kullanılmaktadır. OpenCV kütüphanesi içerisinde görüntü işlemeye ve makine öğrenmesine yönelik 2500’den fazla algoritma bulunmaktadır. Bu algoritmalar ile yüz tanıma, nesneleri ayırt etme, insan hareketlerini tespit edebilme, nesne sınıflandırma, plaka tanıma gibi bir çok işlem rahatlıkla yapılabilmektedir. Daha fazla bilgi için https://opencv.org/ adresine bakabilirsiniz. Alternatif görüntü işleme kütüphaneleri:
-OpenFrameworks
-Fiji
-Halcon
-Matlab
-Lead Tools
-Pink
-Image Magick
görüntü işleme kütüphanelerinin bazılarıdır.

3- Cognitive Toolkit

Daha önce CNTK olarak bilinen aynı zamanda Microsoft Cognitive Toolkit olarak adlandırılan, Microsoft araştırmacıları tarafından geliştirilmiş veri akış grafiklerinden faydalanarak sayısal hesaplama için kullanılan açık kaynak kodlu bir derin öğrenme kütüphanesidir. CNTK, kullanıcıların ileri beslemeli (DNN), konvolüsyonel sinir ağıları (CNN) ve tekrarlayan sinir ağları (RNN / LSTM) gibi popüler model türlerini kolaylıkla fark etmesini ve birleştirilmesine olanak sağlar. CNTK, çoklu GPU’lar ve sunucular arasında otomatik farklılaşma ve paralelleştirme ile stokastik inişini (SGD, hata geri yazılımı) ile uygular. Daha ayrıntılı bilgi için https://www.microsoft.com/en-us/cognitive-toolkit/ adresine göz atabilirsiniz. CNTK alternatif kütüphaneleri olarak:
– TensorFlow
– Theano
– Keras
– Infer.Net
– Torch
derin öğrenme kütüphanelerinden bazılarıdır.

4- Visual Studio Code

Microsoft tarafından geliştirilen Visual Studio Light olarak tanımlayabileceğimiz güçlü, kurulum kolaylığı ve işimize yarayan paketlere ulaşma rahatlığı açısından oldukça kullanışlı, JavaScript, TypeScript, Node.JS C++, C#, Java, Python, PHP, Go gibi programlama dillerini destekleyen aynı zamanda, Windows, macOS ve Linux işletim sistemlerinde kullanabileceğimiz bir geliştirme ortamıdır. Daha fazla bilgi için https://code.visualstudio.com/.Kısa bir tanıtımın ardından, genel olarak sonraki bölümlerde işleyeceğimiz konular için bilinmesi gereken genel yapılar bunlardır, belirtmeliyim ki her bir yapı kendi içerisinde çok derin incelenmesi gereken konu başları. Daha sonrasında hepsini teker teker daha ayrıntılı bir şekilde inceleyeceğiz. Bir sonraki yazımızda basit kurulum adımlarının ardından ilk örneğimizi hayata geçireceğiz.

Görüntü işleme için Gerekli Kurulumlar ve İlk Örnek

Kurulum Adımları

Önceki yazımızda görüntü işleme için gerekli yapıları genel olarak inceledikten sonra;
1- İlk olarak Python programlama dilini belirttiğim adresten 2.7 sürümünü indirin ve kurulumunu tamamlayınız. https://www.python.org/downloads/#pubkeys
2- Sonra Visual Studio Code’u belirttiğim adresten size uygun olan işletim sistemine göre indirme işlemini yapıp, kurulumu tamamlayınız.
https://code.visualstudio.com/Download.
3- Ardından aşağıda bulunan ekran görüntüsündeki adımları uygulayarak Python programlama dilini kullanmak için gerekli eklentiyi entegre ediniz.

3- Bu adımdan sonra sol üst köşede bulunan file sekmesinden File > New File adamalarıyla yeni bir dosya oluşturunuz.
4- Ardından kodlarımızı geliştirmeye başlamadan önce Visual Studio Code’un Python dosyasını tanıyabilmesi için oluşturduğumuz dosyayı CTRL+ SHIFT+S (Farklı Kaydet) kısa yolu yardımıyla uzantısını .py olarak değiştirmelisiniz.
5- Bu işlemin ardından aşağıdaki fotoğrafı indirip .py uzantılı dosyanızla aynı klasöre taşıyışınız.



5- Artık kullanacağımız kütüphaneleri Visual Studio Code terminali vasıtasıyla indirmeye başlayabiliriz.
6- Python programlama dilinin bilimsel hesaplamaların temel kütüphanesi olan NumPy‘yi indirmek için terminale “pip install numpy” komutunu yazarak ulaşabilirsiniz.

7- Ardından görseller üzerinde gerekli manipüle işlemlerini yapabilmemiz için gerekli olan OpenCV kütüphanesini indirmek için terminale “pip install opencv-python” komutunu yazarak ulaşabilirsiniz.

Tebrikler eğer bu adıma kadar sorunsuz gelmeyi başardıysanız artık Python programlama dili ile geliştirmeye başlayabiliriz.

import numpy  
import cv2    

fotograf = cv2.imread('peakup.jpg')fotografGri = cv2.cvtColor(fotograf, cv2.COLOR_BGR2GRAY)
cv2.imwrite("peakupGri.jpg",fotografGri)


ret,fotografBW = cv2.threshold(fotografGri,110,240,cv2.THRESH_BINARY) 
cv2.imshow('Binary Fotograf', fotografBW)

cv2.imshow('Orijinal Fotograf', fotograf)
cv2.imshow('Gri tonlarina cevrilmis fotograf', fotografGri)
cv2.imwrite("peakup01.jpg",fotografBW)cv2.waitKey(0) 
cv2.destroyAllWindows()

kodların ayrıntılı açıklamalarına https://goo.gl/KUpwYk adresinden ulaşabilirsiniz.

ekteki kodu yazıp kaydettikten sonra Terminal tarafından dosyamızın bulunduğu ilgili dizine gidip “python demo.py” komutu ile kodlarımızı çalıştırabiliriz.

ve yazdığımız kod çıktımız aşağıdaki gibi gözükecektir. Aynı zamanda ilgili dizinde manipüle ettiğimiz fotoğrafların ayrı ayrı çıktılarını görebilirsiniz.

Bir sonraki yazımızda Python programlama dili ile daha kompleks görüntü işleme örneklerine değineceğiz. Sıradaki yazımızda görüşmek üzere…

Yeni Başlayanlar İçin Görüntü işleme’ye Giriş

Görüntü İşlemeye Giriş

Günümüzde teknoloji önüne geçilemez bir hızla gelişirken insan hayatına her gün birbirinden farklı buluş, yöntem ve teknikler girmektedir. Bundan birkaç sene öncesine kadar sadece bilim kurgu filmlerinde yer alan teknolojinin şu an insan hayatında yadsınamaz bir noktaya geldiği çok net bir şekilde görülmektedir. Blockchain, chatbotlar, sürücüsüz araçlar, nano teknoloji endüstrisi, sanal gerçeklik ve nesnelerin interneti gibi bir çok kavramı insan hayatına giren önemli noktalar arasında sıralamak mümkündür. Bu önemli noktalardan bir tanesi de Bilgisayar Bilimlerinde popüler araştırma alanları içerisinde yer alan ve günden güne artı gösteren görüntü işleme tekniğidir. Gelecek yıllarda hayatımızın daha derinlerinde yer edinecek görüntü işleme tekniğini ana hatlarıyla ele alalım.

Image Proccesing, görüntü işleme ile ilgili düzensiz çizgilerin ahenkle dansından ortaya çıkan insan yüzü
Çizgilerin birleşerek oluşturduğu insan silueti

Peki Görüntü İşleme Nedir?

Görüntü işleme: Dijital ortama aktarılmış görseller üzerinden ilgili ihtiyaca göre faydalı bilgiler elde etmek için farklı tekniklerle özdeşleştirebilen bir yöntemdir. Görüntü işleme yöntemi, kaydedilmiş olan belirli görüntülerin işlenip mevcut resim ve grafiklerin değiştirilerek yabancılaştırılması veya iyileştirilmesi için kullanılmaktadır. Örneklendirecek olursak, fotoğraf veya belgelerin taranıp dijital ortama aktarılırken yaşanan kalite düşüşlerini görmek mümkündür. İşte bu kalite düşüşleri sırasında görüntü işleme yöntemi devreye girmektedir. Düşen görüntü kalitesini ve görselde yaşanan bozulmaları en aza indirmek için görüntü işleme yöntemine başvurmaktayız. Başka bir örnek ise Google Earth üzerinden erişebildiğimiz haritalardır. Uydudan alınan görüntüler görüntü işleme teknikleri ile iyileştirilmektedir. Böylelikle insanlara daha kaliteli görseller sunulmaktadır. Bu ve daha bir çok farklı yerlerde kullanılabilen görüntü işleme hızla gelişen teknolojiler arasında yer almaktadır.
Aynı zamanda mühendislik ve bilgisayar bilimleri gibi disiplinlerin temel araştırma alanlarından biridir.

PeakUp Bilişim Teknolojileri logosu
PeakUp şirketinin logusu
PeakUp şirketi logosunun gri hali
PeakUp şirketi logosunun gri hali
PeakUp logosunun konturlenmiş hali
PeakUp logosunun konturlenmiş hali

Görüntü İşleme Nelerde Kullanılır?

Bu işlemlerin nasıl ilerlediğine değinmeden önce görüntü işlemenin genel olarak nerelerde ve nasıl kullanıldığına, göz atalım:

– Yüz tanıma ve güvenlik sistemleri.
– Demografik bilgi analizi.
– Trafik, astronomi, radar ve fotoğraf endüstrisi uygulamaları.
– Uygu görüntülerinden yararlanılarak nüfus yoğunluğunun tespit edilmesi.
– Radyoloji alanı (Tomografi, Ultrason vb.).
– Askeri Endüstri alanında hem su altındaki görüntülerin hem uydu görüntülerinin anlamlandırılması.
– Tıp alanı, çeşitli organ yapılarının ayırt edilmesinde
Daha fazla uygulama alanına bakmak için http://cvisioncentral.com/projects adresine göz atabilirsiniz.

Sokaktaki insanların görüntü işleme tekniği ile ekranda belirtilmesi
Görüntü işlemenin uygulandığı örnek bir görsel

Görüntü İşleme Adımları Nelerdir?

Görüntü işleme ile ilgili ana hatları öğrendikten sonra işlemlerin nasıl gerçekleştiğini anlamak gerekmektedir. Görüntü işleme temel olarak üç adımda incelenmektedir. – Gerekli araçlar ile imajı aktarılması
– Görüntünün analiz edilerek istenilen doğrultuda işlenmesi
– Analiz edilip işlenen veri raporu ve çıktısının, sonucunun alınması
Görüntü işleme adımlarının yanında görüntü işleme için iki tür yöntem kullanılmaktadır. Bunlardan ilki analog görüntü işleme diğeri dijital görüntü işleme yöntemidir. Dijital ve analog görüntü işleme için verinin geçmesi gereken birtakım temel aşamalar vardır. Bu aşamalar arasında:
– Ön işleme
– Geliştirme ve görüntüleme
– Bilgi çıkarımı
yer almaktadır. Bu asmaların ardından ilgili veriden ihtiyaca göre sonuçlar elde edilebilmektedir.

Görüntü işlemenin ayrıntılı bir şekilde gösterildiği şema
Görüntü İşleme İş Akış Şeması

Bir sonraki yazımızda Python ile görüntü işleme yapabilmek adına gerekli kurulumların yapılmasına değineceğiz. Sonraki yazımızda görüşmek üzere…

 

Microsoft Dynamics CRM nedir ve firmanıza hangi yararları sağlar.

Merhaba ben Mert Turan, Microsoft Dynamics CRM ile ilgili merak ettiğiniz konuları bu makale ve serilerinde devamlı olarak paylaşıyor olacağım. Konularımız içerisinde hem teorik hem de pratik bilgilerin paylaşıldığı bir yazı dizisine başlıyoruz.

 

Microsoft Dynamics CRM kısaca bir firmanın özellikle satış kanalının bir standart üzerine oturtulmasını ve satış kalitesini arttırmayı hedefleyen bir yönetim yazılımıdır. Büyümekte olan firmaların daha çok ihtiyaç hissedip kullanmaya başladığı ama bence firmanın büyüme belirtileri başlarken hatta daha öncesinde geçilmesi yaralı olan bir yönetim sistemidir. Eğer sizde kendi firmanızda böyle bir sistem kurmayı düşünüyorsanız ve firmanız büyüme yolunda emin adımlar atıyorsa bu yazı dizisini takip ederek Microsoft Dynamics CRM hakkın da daha fazla bilgi edinmiş olursunuz.

Microsoft Dynamics CRM firmamıza hangi yararları sağlayacak neden zaman kaybetmeden aksiyon almalıyız.

Öncelikle şirket kültürü, firma içerisinde belli bir sistemin kemikleşmeden geçilmesi gerekmektedir örneğin Excel ile satış datalarının yöneticilere ulaştırılması raporların Excel üzerinden işler hale gelmesi gibi genel olarak kemikleşmeler sadece CRM özelinde değil tüm yeni sistem geçişlerinde, projelerin başarılı yapılandırılması yapılması halinde bile geçiş sürecini zorlayan bir etkendir. Hayatımızın her anında kendimize standartlar belirliyoruz bunu firmamız için neden yapmayalım, müşterilerimize neden her kullanıcının kendi istekleri üzerine hazırladıkları teklif yerine kurumsal bir teklif vermeyelim ve bu teklifleri zamanında geri dönüş yapıldı mı? yapılmadı mı? Süreçlerin işleyiş sürelerini hesaplamayalım, neden firma içerisinde kullanılan diğer sistemleri tek bir yerden müşteri odaklı olarak tüm tabloyu görmeyelim gibi binlerce sorunun cevabı Microsoft Dynamics CRM.

Microsoft Dynamics CRM müşteri ilişkileri yönetimi ile anılsa da firmanızın iç işleyişlerini CRM üzerinden takip edebilirsiniz, yani geliştirilmeye açık bir platform ve güçlü bir alt yapısının olduğu söylememiz doğru olur,

CRM ile ERP arasındaki fark nedir dersek

Bunu bir örneklendirme ile anlatmak istiyorum bir kutunun üzerinde Satışlar yazdığını düşünün ve bir diğerinde Finans. Bu kutuların firmanızın departman adları ile devam ettiğini düşünün. Burada yer alan kutuların aslında aynı olduğunu ama içeriklerinin farklı olduğunu görüyoruz, Bu kutulardan Finans, İK gibi birkaç kutunun yan yana gelmesi ile ERP, Satış odaklı olan kutuların bir araya gelmesi ise CRM’i oluşturuyor. Bu anlatım, genel bir fikir oluşturması açısından yararlı oldu ama tabi detaya inildiğinde kullanıcı sayısı esneklik gibi kavramlar sorgulandığı zaman ayrımları görebiliriz. Microsoft Dynamics CRM için İK kutusunu ekleyemez miyiz? Tabi ki ekleriz ama burada dikkat edilmesi gereken noktaların başında firma büyüklüğü, son kullanıcı ile sistem arası giriş çıkış yoğunluğu göz önüne alınmalıdır ama küçük, orta ve ortadan büyük firmaların ihtiyaçları dahilindeki modülleri ekleyerek maliyet açısından bir miktar daha tasarruf etmiş olurlar.

Genel bir bakış açısı yakaladık diye varsayıyorum ve bundan sonraki yazılarımda hem kullanım açısından yararlı bilgileri hem de geliştiricileri mutlu edecek paylaşımlarda bulunmayı teyit ediyorum bir sonraki yazıya kadar sağlıcakla kalın.

Post Müziği Dean Martin – Mambo Italiano