15 Satırda IoC Container

Bu yazımda IoC ile ilgili pek fazla detaya girmeyeceğim, bunu daha sonra telafi eder burayı da güncellerim.
Geçenlerde alternatif IoC container paketleri bulmaya çalışırken Scott Hanselman’ın yazısına denk geldim. Dikkatimi çeken altlarda listelenen Oren Eini‘nin ve Ken Egozi‘nin DIY (Do It Yourself) olanları oldu. Ben de bir deneyeyim bakalım diye düşündüm ve sonuç aşağıda;

https://gist.github.com/fatihdgn/d40fa1b6f7a3c34f8677bec9a42813fa

Daha sonra görüşmek üzere…

Swashbuckle, Web API ve Swagger (OpenAPI) Tanımı

Giriş

Hayatınızda hiç ASP.NET Web API projesi yaptınız mı? Yaptıysanız eğer en azından bir kere bu API’ı kullanacak istemci (client) için de bir kütüphane yazmışsınızdır. Sonrasında ya bunun daha iyi bir yolu olması lazım diye kendi kendinize düşünmüşsünüzdür ya da Swashbuckle’ı duymuşsunuzdur.

Swagger ve Swashbuckle

Swashbuckle’ın ne yaptığını sorarsak, kendisinin Swagger tanımı oluşturan bir kütüphane olduğunu söyleyebiliriz. Tabii öncesinde Swagger ve tanımının ne olduğunu bilmemiz gerekiyor.

Swagger, bir API’ın bütün hayat döngüsü içerisinde kullanılabilecek araçları kapsamaya çalışan bir kütüphanedir. Spesifikasyonun adı 3.0 versiyonu ile birlikte OpenAPI olarak değiştirildi ve artık ekosistemde bir standart oldu.

Swagger tanımı aslında API’ınızın içerisinde hangi uçnoktaların (endpoint) olduğunu, o endpointlerden alınabilecek cevapların neler olduğunu ve cevabın bir modeli varsa bu modelin ne olacağını belirten bir döküman. Bu döküman ve Swagger içerisinde bulunan araçlar sayesinde, API tanımına uygun bir sunucu (server) ve ya istemci oluşturulabiliyor. Aynı zamanda bu araçların içerisinde size bu API’a istek yapabilmenizi sağlayan bir kullanıcı arayüzü de var.

Swashbuckle ise sizin oluşturduğunuz ASP.NET Web API projesi içerisinde olan Controller sınıfları üzerinden bu Swagger tanımını oluşturabiliyor. Aynı zamanda API’ınızı kullanabileceğiniz Swagger UI arayüzünü de ekleyebiliyor. Böylece siz yazdığınız server tarafındaki endpointleri kullanabilecek client projesini Swagger tanımı aracılığıyla otomatik olarak oluşturabiliyorsunuz. Swagger Editor size bu konuda yardımcı olacaktır.

Kodu Görelim

Bu örnekte, herhangi bir yerden veri çekme ile uğraşmayalım diye bir kategori listesi üreteceğiz ve bu kategorilere Id özellikleri ile birlikte tekil olarak erişebileceğiz.

Öncelikle boş bir Web API projesi oluşturuyoruz.

 

Proje içerisine, NuGet içerisinden Swashbuckle’ı bulup referans ediyoruz.

Models klasörünün içerisine aşağıdaki “Category” sınıfını ekliyoruz.

https://gist.github.com/fatihdgn/0f19875969487b341a5517547b6350c0

Sonrasında ise Providers adında bir klasör oluşturuyoruz ve içerisine aşağıdaki “CategoryProvider” sınıfını ekliyoruz. Bu sınıf ile birlikte, uygulama başlatıldığında random üretilmiş beş adet kategoriye sahip olacağız.

https://gist.github.com/fatihdgn/f5e9b5b26d0363829632ff49d9a8bad6

Son adım olarak Controllers klasörünün içerisine “CategoryController” ekliyoruz.

https://gist.github.com/fatihdgn/94f8bfd157aa07193e02a95d696a4b3d

Sonuç olarak aşağıdaki ekran görüntüsüne benzer bir ekran elde etmiş olmanız gerek.

Ve web projenizi başlatın. /swagger adresine gittiğinizde Swagger UI paneli ile karşılaşacaksınız.

Üst menüde, API’ınızın Swagger dökümanına ulaşabileceğiniz bir adres bulunuyor. Bu döküman sayesinde uygulamanıza istek yapabileceğiniz bir istemci oluşturabilirsiniz.
Aynı zamanda aşağıda, biraz önce eklediğimiz “CategoryController” içerisindeki iki endpoint bulunuyor. Arkada oluşturduğumuz kategori listesini almak için, “/api/Category” üzerine tıklayıp, aşağıda beliren “Try it out!” butonuna tıklayın.

Bunun sonucunda, hemen aşağıda kategorilerinizin bir listesini görebilirsiniz.

Arasından herhangi birinin Id özelliğini kopyalayıp, “/api/Category/{id}” tabında aynı adımları izleyerek, spesifik bir kategoriyi getirme isteğini de yapabilirsiniz.

Bugün, Swashbuckle ve Swagger’ı tanımladık, inceledik. Umarım keyifli ve öğretici bir yazı olmuştur. Bir sonraki yazıda görüşmek üzere.

Microsoft Bot Framework Giriş Part-1

Hepinizin farkında olduğu üzere ChatBot‘lar artık tüm sosyal ağlar ve web sitelerde olmazsa olmaz hale gelmiş durumda, gerek QnA yardımcısı gerek sistem tarafından sunulan hizmetlerin erişilebilir olması adına birçok platformda karşımıza çıkıyor.

Ben de Microsoft’un Bot Oluşturmak için sunmuş olduğu Bot Framework’den bahsedeceğim.

Öncelikle belirtmeliyim ki Bot Framework henüz Preview durumda, gelen yenilikleri buradan takip edebilirsiniz.

Nedir bu Bot Framework, bana ne gibi kolaylıklar sunuyor?

Microsoft’un kolay ve hızlı şekilde bot oluşturmak, oluşturduğunuz botları test etmek ve desteklenen platformlara entegre etme kolaylığı sunduğu platformudur.

Görselde, Bot’ları entegre edebildiğimiz platformlar bulunuyor.

 

Tek tıklama ile botumuzu istediğimiz platformda çalışır hale getirebiliyoruz.

 

Bot framework’ün içinde bulunan hizmetlerden yararlanarak, akıllı, öğrenen, insan dilini algılayan, görsel ve video işleyebilen botlar oluşturabiliriz.

Botlarımızı daha akıllı hale getirebilmek için Cognitive Services den yararlanabiliriz.

Language Understanding 5 hizmet sunuyor.

  1. Language Understanding Intelligent Service (LUIS) : Bot ile konuşma esnasında anlatılmak istenilen Fiil(almak, öğrenmek, sipariş vermek, rezerve etmek vs.),  Nesne(pizza, bilet vs.)  Adet(1 adet, 2kg, 3metre vs.) parametleri  algılayıp aksiyon alabilme imkanı sunuyor senaryoları kendinize göre geliştirebilirsiniz.
  2. Text Analytics APIBir metnin yazıldığı dili, hakim olan duyguyu, en fazla geçen kelimeleri algılayabilirsiniz.
  3. Bing Spell Check APIYazım denetimi yapılmasını sağlar, Argo içerikleri marka adlarını algılayabilir.
  4. Linguistic Analysis APIDoğal dil işleme, konuşma bölümü etiketleme ve ayrıştırma özellikleri sunar.
  5. Web Language Model (WebLM) API : Konuşmadaki kelime yoğunluğunu algılama ve sıradaki kelime tahmini özellikleri sunar.

Knowledge Extraction 5 hizmet sunuyor.

  1. Entity Linking Intelligence Service : Önceki sohbetlerden çıkarım yaparak yeni sohbetlerde sonuca daha hızlı ulaşılmasını sağlar.
  2. Recommendations API : Önceki seçimlerden çıkarım yaparak yeni öneriler sunar. (Bunu isteyenler bunu da istediler gibi)
  3. Knowledge Exploration : Yazılan kelimeleri otomatik algılayarak tamamlayan veya tamamlama önerileri sunar.
  4. Academic Knowledge API : Akademik yazılar, dergiler, makaleler gibi kaynaklarda arama yapılmasını sağlar.
  5. QnA Maker : Kullanıcılarla sohbet diliyle sorularına cevap verebilen servistir, önceden tanımlanan soru cevap setlerine göre soruları algılar ve cevap verir.

Speech Recognition and Conversion 3 hizmet sunuyor.

  1. Bing Speech API : Konuşmayı metne yada metni konuşmaya çeviren servistir.
  2. Custom Recognition Intelligent Service (CRIS) : İnsan sesini yada herhangi bir kaynaktan gelen sesi tanıyarak, aksiyon alınabilen servis.
  3. Speaker Recognition API : Sadece tanıtılan sesler tanıyarak çalışan komutlar oluşturabilirsiniz.
  1.  Web Search API : Webde arama yapabilen servis, resim, video, haber aramaları yapabilir.
  2. Image Search API : Resim arama servisi, filtreler uygulayarak resim aratabilirsiniz (deniz resmi, doğa resmi vs.)
  3. Video Search API : Video arama servisi, filtreler uygulayarak videolar aratabilirsiniz (kedi videosu vs.)
  4. News Search API : Haber arama servisi, filtreler uygulayarak haberler aratabilirsiniz (dünya futbolu, güncel haberler vs.)
  5. Autosuggest API : Otomatik tamamlama servisi. Uygulamanızda kullanarak kullanıcıların aramalarını otomatik tamamlayarak kolaylaştırabilirsiniz.

Image and Video Understanding 4 hizmet sunuyor.

  1. Computer Vision API : Görselleri algılayıp içerikleri hakkında bilgi verebilir. Örn. görselde yer alan metinleri algılayabilir, nesneleri tanıyabilir.
  2. Emotion API : Görseldeki yüzleri algılayarak duygu analizi yapabilir. Örn. 4 kişi var ve mutlu, üzgün, yorgun, sıkılmış vb. bilgiler verebilir.
  3. Face API : Yüz algılama servisidir, yüzleri algılayarak doğrulama yapabilir yada benzer yüzleri gruplayabilir.
  4. Video API : Vidoları analiz edebilir, yüzleri algılayıp takip edebilir, videodaki titremeleri düzeltebilir, haraketleri algılayıp aksiyonlar alınabilir.

Bot’larımızı .Net ve NodeJS ile geliştirebiliyoruz, Microsoft’un iki platform içinde SDK’sı bulunuyor;

NodeJs için buradan, .Net için buradan ulaşabilirsiniz, ayrıca son güncellemelerin yayınladığı blog’a buradan ulaşabilirsiniz.

.NET Core, .NET Standart ve Felsefe Taşı – Part II

Previously on : .NET Core, .NET Standart ve Felsefe Taşı – Part I

“It does not do to dwell on dreams and forget to live.” ― J.K. Rowling, Harry Potter and the Sorcerer’s Stone

J.K. Rowling’in de dediği gibi, hayal dünyasının içerisinde hayat sürüp yaşamayı unutmak pek olmuyor. İşte PCL’ler hayatımıza böyle girmişti fakat, hayal dünyasının içerisinde, yani teoride mantıklı bir yaklaşım, gerçek hayata uyarlandığında pek de tutarlı olmadı, olamadı. Çok mu abarttım? Olabilir. Ama bu ortada çözülmesi gereken bir durumun olduğu gerçeğini değiştirmiyor.

Soruyu tekrar alabilir miyim?

Ha, şu soru. .NET Standart neden var? Ondan öncesinde PCL’ler neden var diye sormamız gerekiyor değil mi? Çözmeye çalıştığı problem aslında yazdığınız kodların farklı .NET proje tiplerinde kullanılabilmesini sağlamak. Peki neler bu proje tipleri ? .NET Framework, Silverlight, Windows 8 (Metro), Windows Phone, Xamarin, Mono, Universal Windows Platform (UWP), XBox 360, liste daha uzuyor.

enter image description here

Evet, tabii, güzel fikir. Bir çok ihtiyacı da karşıladı aslında, bu sebeple tamamen kötülemek doğru olmaz ama bir süre sonra bu yaklaşımın eksikliklerini görmeye başladık.

Nerede benim API’ım ?

dotnet-today

Birinci problem, PCL altyapısı, uygulamayı yazarken kullanabileceğiniz API’ı, desteklemeye çalıştığınız platformların kesişimine göre belirliyor. Bir platformda olan bir API diğer platformda yoksa, o kısım çıkartılıyor. Örneğin Xamarin.iOS, Xamarin.Android ve UWP için yaratayım bir PCL dediğinizde, yapacağınız dosya okuma ve yazma işlemleri artık düşündüğünüz kadar kolay olmuyor. Çünkü bir tarafta System.IO varken, diğer tarafta Windows.Storage var. Kesişimin içerisinde bu iki API da yok. Yani, var da yok. System.IO namespace olarak var ama tanıdık olduğumuz File ve Directory yok mesela. Bu sefer kulağınızı tersten tutmaya ve şuradaki gibi bir guide’ı takip etmeye başlıyorsunuz. Bu da size hayatınızı ve mesleki kararlarınızı sorgulatabiliyor. Halbuki sadece bir dosya okumak istemiştiniz. Bu tür eksiklikleri kapatmak için ortaya PCLStorage gibi paketler çıkıyor ama bu nedense yama hissiyatı yaratıyor. Her kombinasyonda eksik kalan parçalar ve o eksiklikleri kapatmaya çalışan paketler. Sonu gelmez bir döngü.

Ama Cross-Platform oluyor değil mi ?

Aslında tam değil. Yazdığınız kod her platform için ayrı ayrı derleniyor. Evet, bir PCL paketini NuGet üzerinden çekerken bütün desteklenen platformlar için derlenen dosyalar da yanında geliyor. Şimdi, bundan iki yıl sonra başka bir .NET platformu çıksa – ki bu hızda giderse hiç de düşük bir olasılık değil – bu paket o platformda çalışacak mı? Tabii ki hayır. Çünkü paketin, bu platform da eklenerek tekrar derlenmesi gerekiyor. Bu arada kaybedebileceğiniz API’ları da bir yandan düşünseniz iyi olur. Onlara da bir “yama” gerekecek.

.NET Standart

Yani bu iki büyük soru işaretine karşı çözüm olacak yapının, öncelikle stabil bir API sunması gerekiyor. Bu ise, hali hazırdaki platformların bu API’ı implemente etmesi gerektiği anlamına geliyor ki geliştirmek istediğim platformlara göre erişebildiğim API oranı azalmasın. Aynı zamanda, sonrasında geliştirilebilecek diğer platformların da aynı API’ı implemente etmesi sağlanırsa, bu yapı için derlenen paketlerin de gelecek platformda çalışması sağlanabilir.
Buradan ise yapının görevinin, bütün .NET platformları için ortak bir API sunmak ve bunun devamlılığını sağlamak olduğunu söyleyebiliriz ve iki soru işaretimiz de böylece ortadan kalkmış olur.

Sonuç olarak ortaya .NET Standart çıkıyor.

.NET Standart sayesinde artık tek bir API kullanarak, .NET Standart API’ını implemente etmiş olan bütün .NET platformlarını destekleyebiliyoruz. Yakın zamanda 2.0 versiyonu çıkan .NET Standart tarafından desteklenen API setinin içerisinde Networking, IO ve Threading gibi önemli yapı taşları mevcut.

netstandard-apis

Bir süre sonra PCL’ler yerini .NET Standart’a bırakacak. Kişisel kanaatim, .NET Standart’ın çok daha iyi bir yaklaşım olduğu yönünde. Umarım yakın zamanda bir standarta daha ihtiyaç duymayız.

“The truth.” Dumbledore sighed. “It is a beautiful and terrible thing, and should therefore be treated with great caution.” ― J.K. Rowling, Harry Potter and the Sorcerer’s Stone

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

Microsoft ile Data Science (Veri Bilimi)

Microsoft Professional Program bünyesinde takip ettiğim Data Science (Veri Bilimi) başlıklı edX kurslarına paralel olarak bu yazı dizisini kaleme alıyorum. Seri, genel olarak veri bilimine ilgi duyan; ancak daha önce bilgisi olmayanlara yönelik. Yazılarda değinilen teknolojiler içerisinde Spark, R ve Python gibi Microsoft dışı yöntemler bulunmasına rağmen, ağırlıklı olarak Microsoft teknolojileri ile data science uygulamaları anlatılmaktadır.

Bu yazı, bütün alt başlıklara ait yazıların indekslendiği bir ana giriş yazısıdır.

Ek bir not olarak SQL bildiğini varsayarak ilerliyorum; buna göre SQL konusunda eksiğin olduğunu düşünüyorsan önce bunu tamamlayıp ardından bu yazıları okumanı tavsiye ederim.

Data Science

Microsoft ile Data Science konusunu şu alt başlıklarla ele almak mümkün :

Data Science Giriş

Data Scientist rolüne sahip birinin ne iş yaptığını tanımlayarak başlıyoruz. Görsel, analitik ve istatistiksel tekniklerle veri ile nasıl çalışılır ve keşfedilir, bu konuları irdeliyoruz. Bu konuyla ilgili mevcut yazılar şunlar :

 

Veriyi Analiz Etmek ve Görselleştirmek
Excel ve Power BI ile farklı veri kaynaklarından nasıl data alınacağını ve birleştirileceğini, nasıl analiz yapılacağını, verilerin nasıl görselleştirileceğini, hazırlanan dashboard’ların iş kullanıcıları ile mobil ve web platformunda nasıl paylaşılacağını inceliyoruz.

 

İstatistik Bilimini Anlamak

Giriş seviyesinde istatistik ve olasılık öğreneceksin. Bunları veri analizi ve veri bilimi temelleri üzerine Excel kullanarak gerçekleştiriyoruz.

 

Kod ile Veriyi Keşfetmek : Veri Bilimi için R’a ve Python’a Giriş

Data Science profesyonellerinin tercihi olan istatistiksel programlama dili R dilini öğreneceksin. Söz dizimi temellerini, değişkenleri, basit işlemleri, veri yapılarının (vektörler, matrisler, veri çerçeveleri, listeler vb.) nasıl ele alınacağını keşfedeceksin.

Basit aritmetik işlemler, değişkenler ve veri yapıları olmak üzere Python’un temellerini öğreneceksin. Python fonksiyonları ile akış kontrollerini keşfedip, gerçek zamanlı veri ile kendi görsel raporlarını oluşturacaksın.

 

Temel Data Science Konseptlerini Anlamak

İstatistiksel analiz, veri temizliği ve dönüşümü, R ve Python ile verinin görselleştirilmesi ve Microsoft Azure Machine Learning dahil olmak üzere veri bilimi ile uğraşırken işine yarayacak önemli konsept ve teknikleri öğreneceksin.

 

Machine Learning’i Anlamak

Sınıflandırma, regresyon, kümeleme ve tahminleme gibi makine öğrenmesi modellerini nasıl geliştireceğini, ölçeceğini ve optimize edeceğini öğreneceksin.

 

Kod ile Veriyi İşlemek ve Modellemek : R ve Python ile Data Science için Programlama

R ile programlamayı biraz ilerletiyoruz. R veri yapılarını ve söz dizimlerini keşfederek lokal bir dosyadan ya da bulutta bir veri tabanından nasıl veri okuyup yazılacağını, veri ile nasıl çalışılacağını, nasıl özet veriler elde edileceğini ve ihtiyacına göre veriyi nasıl dönüştüreceğimizi öğreneceksin.

Verinin içinde saklı olan desenleri ortaya çıkarmak için efektif ve iyi bilinen madencilik modellerini uygulayacak şekilde Python’ı nasıl kullanacağını öğreneceksin. Veri görselleştirmesi, niteliklerin seçimi (feature selection), boyutların azaltılması, kümeleme, sınıflandırmayı keşfedeceksin.

 

Uygulamalı Makine Öğrenmesi

Metin analitiği, konumsal veri analizi, imaj işleme ve zaman serileri tahminlemesi gibi predictive (kestirimci) problemleri çözmek için makine öğrenmesini nasıl uygulayacağını öğreneceksin.

 

HDInsight içinde Spark ile Predictive (Kestirimci) Çözümler Uygulamak

Kestirimci analizler ve makine öğrenmesi çözümleri üretmek için Microsoft Azure HDInsight içinde Spark’ı nasıl kullanacağını öğreneceksin. Apache Spark ile Python, Scala, R kullanarak veriyi nasıl temizleyip dönüştüreceğini, makine öğrenmesi modellerini nasıl oluşturacağını ve gerçek zamanlı makine öğrenmesi çözümlerini nasıl hayata geçireceğini öğreneceksin.

 

Microsoft R Server ile Büyük Veriyi Analiz Etmek

En güçlü programlama dillerinden biri olan R kullanarak Microsoft R Server ile büyük veri setlerinin nasıl analiz edileceğini öğreneceksin.

PeakUp Blog içinde yer alan bütün Data Science kategorisindeki yazılara ulaşmak için bu linki kullanabilirsin.

Data Scientist (Veri Bilimci) Olmanın Keyifli Yanları Neler?

Data Scientist olma yoluna girmeden önce bu mesleğin keyifli yanlarına göz atalım. Microsoft Corp’da çalışan gerçek profesyonellerin görüşlerinden derlediğim bu liste sana ilham verecek :

 

Problem çözmenin verdiği haz
İş kullanıcılarından çok sayıda kompleks problem gelir. Bir şeyler tahmin etmenizi isterler, ellerindeki verilerin, işlerini nasıl geliştireceğini anlamak isterler.

 

Mevcut verinin iş süreçlerine gerçekten değer katmak için, nasıl oyunun içerisine sokulacağını çözmeye çalışmak
Veriyle oynamak, veriyi farklı formatlara sokmak her an seni şaşırtabilir.

 

Data Scientist olmanın en keyifli yanlarından biri de meydan okumaktır.
Verilerin hikayesini araştırırken, neredeyse araştırmacı gazeteci olmakla eşdeğer bir hissiyat oluşur. Yeni bir veri seti ile uğraşırken, bir sonraki adımda ne keşfedeceğini hiçbir zaman bilemezsin.

 

Ürünle ilgili yeni bir bilgi elde etmek için gerekli soruları çözmek ve puzzle’ın parçalarını birleştirerek ilerlemek.
Bazen hiç bitmeyecek bir puzzle’ı tamamlamaya çalıştığını düşünürsün. Görünürde anlamsız olan terabyte’larca veri üzerinde çalışırsın; ama daha derinlere indikçe verinin içinde çözüm için çok önemli etkiye sahip bazı desenler ve anlamlar bulursun. Eğer veriyi dikkatlice dinlersen veri konuşur, sana hikayeler anlatır.

 

Farklı geçmişe sahip insanlarla birlikte çalışmak.
Bir veri bilimci kimya, biyoloji, psikoloji,  ekonomi ya da finans geçmişine sahip olabilir. Bu kadar çeşitliliğe sahip farklı insanlarla, farklı sektörlere yönelik farklı problemleri çözmek için farklı fikirleri bir araya getirmek çok zevklidir.

 

Veri bilimci olmak için ekstra heyecanlı bir dönemden geçiyoruz.
Dünyada şimdiye kadar biriken bütün verilerin toplamı, artık her birkaç yılda 2 katına çıkıyor. Bu, altına girdiğin işin zorluğunu gösterirken; sonuç gördüğünde alacağın keyfi garanti ediyor.

Microsoft Professional Program bünyesinde takip ettiğim Data Science (Veri Bilimi) başlıklı edX kurslarına paralel olarak bu yazı dizisini kaleme alıyorum. Seri, genel olarak veri bilimine ilgi duyan; ancak daha önce bilgisi olmayanlara yönelik. Yazılarda değinilen teknolojiler içerisinde Spark, R ve Python gibi Microsoft dışı yöntemler bulunmasına rağmen, ağırlıklı olarak Microsoft teknolojileri ile data science uygulamaları anlatılmaktadır.

Diğer makaleleri bulabileceğin serinin indekslendiği giriş yazısına erişmek için bu linki kullanabilirsin.

.NET Core, .NET Standart ve Felsefe Taşı – Part I

Merak etmeyin, bu yazının ne Harry Potter, ne de maddeyi altına dönüştürme ile bir ilgisi yok. Bu yazı dizisinde daha çok, .NET Core ve .NET Standart’ın kendilerini, ortaya çıkmalarındaki nedenleri, ekosistemde yapacakları değişiklikleri ve bizim bu değişikliklere nasıl ayak uydurmamız gerektiği ile ilgili konuşacağız.

Giriş

Yakın zamanda .NET Core 2.0 ve ASP.NET Core 2.0 duyuruldu. Bir çok değişiklik ve güzel haber var fakat boşverin, şimdi oradan kopup, biraz daha geriye, bütün bunların başladığı zamana gidelim. Fazla değil Kasım 2014’te Microsoft, .NET Core’u (CoreFX) Open Source yaptı. Tabii kimse .NET Core’un ne olduğunu bilmiyordu. Blog yazısında, aslında bu teknolojinin içeride ASP.NET 5 (vNext) ve .NET Native’de -ki başlı başına ayrı bir konu- hali hazırda kullandıklarını, gelecekte .NET platformunun temel taşının bu yapı olacağını söylediler. Open Source olmasındaki sebep ise, .NET’in arkasında daha güçlü bir ekosistem oluşturmak ve cross-platform bir hale getirmek için hazırlıklara başlamaktı.

.NET Core’un arkasındaki ana sebep ise, .NET Framework yaklaşımının pek de doğru olmaması ve bunu değiştirmeye yönelik çalışmalar yaparken de aynı zamanda zaten olması gereken cross-platform desteğini de göz önünde bulundurmaktı. İki amaç da zamana göre daha fazla önem kazanabilir.

.NET Core’un alt yapısını anlatmadan önce size .NET Framework yaklaşımını ve yanında getirdiği problemleri biraz daha açmam gerek.

Bir Sorunun Tanımı

Yukarıdaki ekranı hatırladınız değil mi? Hiç görmediyseniz eğer ne mutlu size, bugünün şanslı 10.000 kişisinden birisiniz. Özetlemek gerekirse, yüklediğiniz bir uygulama, çalışmak için .NET Framework’ü gerektiriyor ve önce onu yüklemeniz gerek. Bunun sadece Windows içerisinde karşılaşılan bir durum olduğunu söylemiyorum, keza diğer sistemlerde yüklediğiniz paketler, başka paketleri gereksinim olarak isteyebiliyor, fakat buradaki ana sorun teknik değil. Ana sorun, yukarıdaki problemin son kullanıcı tarafından çözülmesinin beklenmesi. Aynı zamanda bu paket öyle elzem ki, bütün .NET uygulamaları* kullanıyor ve versiyonları var. Uygulama hangi versiyonu kullanıyorsa ona göre yüklenmesi gerek. Yukarıdaki “Yes” butonuna basınca sizi o paketin indirme sayfasına yönlendiriyor, siz de inen paketi kuruyorsunuz. Tabii paket kullandığınız işletim sistemi tarafından destekleniyorsa. Örneğin Windows 7 kullandığınızı varsayarsak ve açmaya çalıştığınız uygulama .NET Framework 4.6 kullanıyorsa eğer, SP1 yükseltmesini önceden yapmış olmanız gerek. Yapmamışsanız uygulama çalışmıyor. Yani bir uygulamayı kullanmak için önce sistem güncellemesi, sonra paket kurulumu ve en sonunda kullanmak istediğiniz uygulamanın kurulumunu yapmanız gerekebilir. Bu arada bütün bunları teknik bilgisi fazla olmayan birinin yapmaya çalıştını düşünürseniz, durum pek iç açıcı değil.

Diğer bir sorun, bu kütüphanenin içerisinde herşeyin olması. Siz bir uygulama yazarken sadece küçük bir kısmını bile kullansanız, bu o uygulamanın .NET Framework kullandığı gerçeğini değiştirmiyor. .NET Framework 4.6’nın kurulum paketi 62.4 MB. Kurulum sonrası boyutu 100 MB’ı aşıyor. Amacı iki sayı toplamak olan bir konsol uygulamasının çalışması için de bu kütüphanenin kurulması gerek.

Ha bu arada yukarıdaki bu iki uygulama da diğer işletim sistemlerinde çalışmıyor.

Sanırım yavaş yavaş problemin kaynağının ne olduğunu ve nasıl çözülebileceğini düşünmeye başlamışsınızdır. Öyle bir şey olmalı ki, uygulama herhangi bir dış kaynağa gereksinim duymamalı, yani kullandığı paketleri yanında götürmeli.

* = Bütün .NET Framework uygulamaları yani WinForm, WPF, ASP.NET gibi.

Bir Efsanenin Doğuşu

.NET Core işte bu fikrin hayata geçmiş hali. Tabi şu “kullandığı paketleri yanında götürmesi” kısmı için .NET Framework parçalara ayrıldı ve çoğu paket NuGet üzerinden referans edilebilir hale getirildi. En temel parçalar (CLR ve içerisindeki GC ve JIT) ise cross-platform çalışması için baştan yazıldı ve .NET Core CLR oluştu. Tabii hepsinin cross-platform çalışması için değiştirilen bir çok yaklaşım da oldu.

Peki Web?

ASP.NET 5 (vNext) yani ASP.NET Core ise, .NET Core’un üzerine ASP.NET mimarisinin bindirilmesi ile oluşmuş bir platform. Ocak 2016’ta ASP.NET 5 adı ASP.NET Core olarak değiştirildi çünkü ASP.NET  5 sanki ASP.NET 4.5’in bir üst versiyonu gibi anlaşılıyordu. Halbuki ASP.NET 5,  yapısal anlamda ASP.NET 4.5’i andırmıyordu bile ve bu insanlarda kafa karışıklığı yaratabilirdi. Bu sebeple isim değişikliğine gidildi.

Soru İşaretleri

Peki .NET Standart bunun neresinde. Bugün itibarıyla üç tane .NET platformu var; .NET Framework, .NET Core ve Xamarin. Her birisinin amacı ve kullandıkları altyapılar farklı. Tabii bu kullanılan dil aynı olsa bile oluşan paket uyuşmazlığı, yazılan kodların platformlar arası kullanılmasını engelliyor. Zaten her biri programlayan kişiye farklı API’lar sunuyor. Yani her türlü yazılan kod belirli bir platforma özel olmuş oluyor. Bu sorunu çözmek için üretilen PCL ise sorunu daha da büyük bir hale getiriyor.

Part II’de ise .NET Standart’ın ne olduğunu ve yukarıdaki probleme nasıl bir çözüm getirdiğini göreceğiz.

.NET Core, .NET Standart ve Felsefe Taşı – Part II

Microsoft Açık Akademi Yaz Okulu 2017 Sunumumuz

10 Ağustos 2017 tarihinde Microsoft Türkiye ofisinde gerçekleştirdiğimiz sunumda Emrah Uslu ve Fatih Doğan, Azure PaaS eğitimi verdi. Sunumlarına aşağıdaki linkten ulaşabilirsiniz.

Emrah Uslu’nun Azure PaaS sunumu : Emrah Uslu – Microsoft aayazokulu 2017 – Azure PAAS
Emrah Uslu’nun demosu yaptığı MSDN makalesi : https://docs.microsoft.com/en-us/azure/azure-functions/functions-twitter-email
Fatih Doğan’ın Azure IoT sunumu : Fatih Dogan – Microsoft aayazokkulu – Azure IoT
Fatih Doğan’ın demoda kullandığı Simulated Device linki : https://github.com/fatihdgn/IoTHubSimulatedDevice

 

IoT Maker 2017

11 Eylül’de başlamak üzere PeakUp olarak 1 ay sürecek bir IoT Maker programı düzenliyoruz.

Başvurular arasından 12 kişi seçiyoruz. Bu 12 kişiyi 3’erli 4 gruba ayırıp 4 proje vereceğiz. İhtiyaç duyacağınız donanımları sağlayacağız. 1 ay boyunca ofisimizde ağırlayacağız. Program boyunca yazılım ekibimiz ile mentörlük yapacağız; haftada bir seminerler vereceğiz. Yetiştirilmek üzere yeni mezun arkadaşları alarak IoT ekosistemine katkı sağlamayı hedefliyoruz. Programın sonunda başarılı maker’ları IoT Developer olarak ekibe katacağız.

Fikirlerin var, hayata geçirsen müthiş olur diye hissediyorsun; ama fikirlerini masaya yatırıp uygulamak veya yeni fikirler bulmak için aradığın yeri bulmakta zorlanıyor musun? İşte doğru zaman doğru yer. Bunun için bir IoT Maker Programı düzenledik. 1 ay boyunca ofisimizde gerçekleştirilecek proje geliştirme serüveninde katılımcılar mentörler tarafından takip edilip, proje dönemi içerisinde gösterdikleri başarıya göre PeakUp bünyesinde çalışma fırsatı yakalayacaklardır. Detaylar ve başvuru için sayfamıza bekliyoruz : https://www.peakup.org//initiative/iot