TadHack Istanbul

Bertuğ ile birlikte 48 saatte geliştirdiğimiz Microsoft Azure ve Intel Edison ile çalışan bir projeyle TadHack‘e katıldık. Dünya çapında 15 şehirde eşzamanlı olarak gerçekleştirilen yarışmanın İstanbul ayağının kazananı biz olduk! 🙂

2 gün boyunca bizden hiçbir desteği esirgemeyen Intel‘den Çağdaş Yelen‘e sonsuz teşekkürler!

IMG-20150614-WA0002

Fazlasını Oku

Intel IoT Roadshow’da 3.lük!

Herkese merhaba!

Bertuğ ile geliştirdiğimiz proje Bahçeşehir Üniversitesi Robot ve Proje Günleri’nde 1.seçilmişti. Şurada bahsetmiştim: https://fatihdumanli.com/microsoft-student-partnerlardan-bir-derece-daha/

Aynı projeyle Berlin’de düzenlenen Intel IoT Roadshow hackathonuna katıldık ve orada da 130 proje arasından 3.lük elde ettik 🙂

Müthiş bir gurur, müthiş bir mutluluk bu, stay tuned 🙂

Detaylı bilgi: https://bertugberkay.wordpress.com/2015/05/06/intel-iot-roadshow-berlin-internet-of-coffee-3-lugu/

Fazlasını Oku

Bahçeşehir Robotics Hackathon’da birinci olduk!

Herkese merhabalar,

Bir diğer Microsoft Student Partner olan arkadaşım Bertuğ ile birlikte bu haftasonu Bahçeşehir Üniversitesi tarafından düzenlenen BAU Robotics hackathon’a katıldık ve geliştirdiğimiz akıllı kahve makinesi ‘Internet of Coffee‘ ile Microsoft Internet Çözümleri kategorisinde birinci olduk : )

 

Bahçeşehir Üniversitesi ve Microsoft Türkiye’ye bu güzel gün için teşekkürler : )

Fazlasını Oku

Intel Edison üzerinde Azure Service Bus Queue

Merhaba arkadaşlar,

Bir önceki yazımda Azure Service Bus’ı örnek senaryolarla birlikte elimden geldiğince açıklamaya çalışmıştım. Bu yazımda Intel Edison üzerinden Azure Service Bus Namespace’imizde bulunan bir Queue’ya nasıl veri aktarırız onu anlatmaya çalışacağım.

Bu yazının amacı gereği mesajı bir Intel Edison cihazdan göndereceğiz, bir Console Application‘dan mesajları consume edeceğiz. Yazının bu kısmından sonrasını biraz daha az detaylı anlatacağım, en sonda kaynak kodları paylaşacağım.

Intel Edison üzerinde mesaj gönderecek olan uygulamamızı yazmak için Nodejs kullanacağız. Çünkü Arduino’nun WifiClient, WebClient kütüphanelerinde SSL bağlantıları kuramıyoruz.

Message Sender’ı hazırlayalım

Eğer daha önce hiç Nodejs kullanmadıysanız, sadece beginner seviyesinde olduğumdan sizleri yanlış yönlendirmek istemiyorum. Nodejs hakkında güzel bir giriş yazısı buldum: http://blog.ilkerguller.com/2012/01/nodejs-dersleri-bolum-1-kurulum-ve-ilk.html

Öncelikle Node commant prompt’u açalım ve aşağıdakileri sırasıyla yazalım;

> cd c:\
> mkdir serviceBusMessageSender
> cd serviceBusMessageSender

> npm init

Buradan sonra name, description, version, entry point gibi bilgiler sorulacak. Bunları girdikten sonra;
> touch [entrypoint] yazmanız gerekecek. Örneğin touch index.js.

Böylelikle uygulamamızın giriş noktasını oluşturduk. Şimdi bazı paketler yüklememiz gerekecek.

Uygulamayı oluşturduğumuz dizine gittikten sonra(serviceBusMessageSender) npm’den aşağıdaki paketleri yüklememiz gerekecek.

azure

Nodejs uygulamarında azure servislerini kullanmak için ‘azure’ pakedini yüklememiz gerekiyor.

cylon
cylon-gpio
cylon-i2c
cylon-intel-iot

Cylon paketleri ise bir Nodejs uygulamasından Edison cihazını kontrol edebilmek için kullanıyoruz. 4’ünü birden yüklememiz gerekiyor, birbirine bağımlı paketler. (http://cylonjs.com/)

Bu paketleri de yükledikten sonra entry pointimizi(index.js, app.js veya her ne ise) not defterinde açalım.

index.js
——————–

var azure = require('azure');
var Cylon = require('cylon');

var connstring = 'Endpoint=sb://xxxxx.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xxxxx';
var serviceBusClient = azure.createServiceBusService(connstring);


var message = {
 customProperties: {
        TestProperty: new Date()
   }
   };

Cylon.robot({
  connections: {
    edison: { adaptor: "intel-iot" }
  },

  devices: {
    button: { driver: "button", pin: 2 }
  },

  work: function(my) {
    my.button.on("push", function () {
		serviceBusClient.sendQueueMessage('edisondataqueue', message, function(error){
    if(!error){
        // message sent
    }
});

 });
  }
}).start();

Yukarıda öncelikle yüklediğimiz kütüphanelerin referanslarını aldık. Ve daha sonra Service Bus Namespace’imizin connectionString’ini tanımladık. Bu key’i Azure Portal’dan Service Bus Namespace’inize girdikten sonra manage keys bölümünden edinebilirsiniz.

Ve Azure Service Bus üzerinde herhangi bir işlem yapmamıza olanak sağlayan serviceBusClient sınıfından bir nesne türettik.

Cylon paketi sayesinde edison bağlantımızı, cihazlarımızı ve cihaz üzerinde çalışacak fonksiyonelliği tanımladık. PIN 2’deki butonumuza basıldığında yapılacak olan işi tanımladığımız fonksiyonun içinde ise, henüz tanımladığımız serviceBusClient nesnesinin sendQueueMessage metodunu çağırarak Service Bus’taki Queue’muza mesajımızı gönderdik.

Şimdi uygulamamızı edison üzerine göndereceğiz.

Öncelikle edison üzerinde uygulamamız için bir klasör oluşturalım.

> ssh root@192.168.x.x
> mkdir servicebusapp

WinSCP(http://winscp.net/eng/download.php)’yi yükledikten sonra aşağıdaki kodu prompt’a yazarak uygulamamızı Intel Edison’a göndereceğiz ve çalışabilir hale gelecek.

> scp -r serviceBusMessageSender root@192.168.x.x:/home/wwwroot/servicebusapp

Bu komuttan sonra bir süre sonra uygulamamız gönderilmiş olacak.

> cd servicebusapp
> node index.js

Ve uygulamamız çalışıyor, pin 2’deki  butona bastığınızda Service Bus’a mesajın gönderildiğini göreceksiniz.

Consumer uygulamamızı hazırlayalım

  • Consumer uygulamamız C# Console Application olacak. Visual Studio’dan File -> New Project -> Console Application ile uygulamamızı oluşturalım.
  • Solution Explorer‘da projenin üzerine sağ tıklayıp Manage Nuget Packages‘e tıklayalım.
  • service bus‘ yazıp aratalım ve ilk sırada çıkan paketi yükleyelim. Şu anki sürüm: 2.6.5

Paket yüklendikten sonra app.config dosyasında Service Bus Namespace’imiz için ConnectionString’i ayarlamamız gerekiyor.

<appSettings>
<add key="Microsoft.ServiceBus.ConnectionString"
value="Endpoint=sb://xxxxxxx.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xxxxxxxx="/>
</appSettings>

 

Program.cs
——————————————–

class Program
    {
        static string _connStr = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString");
        static void Main(string[] args)
        {
            QueueClient qc = QueueClient.CreateFromConnectionString(_connStr, "edisondataqueue");

            OnMessageOptions options = new OnMessageOptions();
            options.AutoComplete = false;
            options.AutoRenewTimeout = TimeSpan.FromMinutes(1);

            qc.OnMessage((message) =>
            {
                Console.WriteLine("NEW MESSAGE");
                Console.WriteLine("MessageID: " + message.MessageId);
                Console.WriteLine(message.Properties["testproperty"]);
                Console.WriteLine();
                Console.WriteLine();

                
                message.Complete();
            });

            Console.Read();

        }
    }

Uygulamayı derleyip çalıştıralım. Edison üzerinde butona basıldığında Console Uygulamamıza mesajın geldiğini göreceğiz.

Projenin tamamı: http://1drv.ms/1OjAEn6

Bu yazıda Intel Edison üzerinden Service Bus’ta bulunan bir Queue’ya mesaj gönderdik. Faydalı olması dileğiyle.

Fazlasını Oku

Azure Service Bus Queue : Genel Bakış

Merhaba arkadaşlar,

Bu yazımda Azure Service Bus Queue ile ilgili bilgiler vermeye çalışacağım.

Brokered Messaging

Öncelikle Brokered Messaging kavramından bahsetmek isterim. Brokered Messaging altyapısında mesajlar güvenilir bir broker’da –broker’ı aracı olarak çevirebiliriz sanırım– saklanır. Broker, mesajları alacak olan consumer uygulamanın mesajları almaya hazır duruma gelinceye kadar saklar.

Bu mesajlaşma modeli sayesinde dağıtık uygulamalar birbiriyle bağlantılı olmadan çalışır, mesajlarını broker’a gönderir. Dağıtık sistemdeki cihazların birinin bakımı sırasında veya olası bir çökme durumunda bu durumdan tüm sistem etkilenmemiş olur.

Şimdi bir dağıtık uygulama örneği vermeye çalışacağım.

Uluslararası bir lojistik firması olduğumuzu düşünelim ve bize bağlı olan 1000 transport aracı var. Ve biz bu araçların konumlarını 10 saniyede bir almak istiyoruz.

Mevcut senaryoda göre 10 saniyede bir 1000 cihazdan veri alacağız. Bunları alınıp işlenmesi sunucuya çok büyük bir yük olacaktır.

Brokered Messaging modeli uygulandığında bu istekleri karşılayacak bir sunucunun bulunup bulunmaması önemli değildir, cihazların istekleri gönderdiklerinde bir yanıt almaları da şart değildir. Cihaz mesajını gönderir, ve bu mesajı birinin almadığını önemsemez. Herhangi bir yanıt da beklemez, çalışmasına devam eder.

Consumer uygulama –yani mesajları alacak olan uygulama– eğer hazır durumdaysa mesajları anlık olarak alır ve işler. Herhangi bir bakım veya bozulma durumunda ise kuyruktaki mesajlar zarar görmez, hazır olduğunda tekrar mesajları alıp işlemeye devam eder.

Azure Service Bus Queue

Service Bus’ta bulunan Queue’lar –bundan sonra kuyruk diyeceğim– biraz önce bahsettiğimiz bir brokered messaging gerçeklemesidir. Dağıtık uygulamalar tüm mesajlarını bir kuyruk yapısına gönderir. Hepimizin bildiği gibi kuyruklar FIFO – First in First out (İlk giren ilk çıkar) prensibine göre çalışır.

service-bus-queue

Yukarıdaki grafikte gördüğümüz gibi Message Sender: mesaj gönderen uygulama Azure Service Bus Namespace’imizde yer alan kuyruğa mesajları bırakır ve basitçe Message Receiver: mesajları alacak olan uygulama, consumer Queue’dan mesajları alır ve işler.

Queue’nun çalışma modeli gereği consumer uygulama mesajların gönderilme sırasına göre ilk gönderileni öncelikli olarak okur ve kuyruktan siler. (Dequeue)

Mesaj gönderen uygulama bir web sitesi, mobil uygulama veya servis olabilir. Aklınıza gelebilecek olan bütün teknolojileri kullanarak Azure Service Bus Queue’ya mesaj gönderip alabiliyoruz. Zira Azure Service Bus REST API destekliyor.

Azure Service Bus Namespace’i oluşturma

Azure Portal’ında soldaki menüden Service Bus bağlantısına tıklayın.

1

Burası Service Bus Namespace’lerimizi görebileceğimiz ve yönetebileceğimiz sayfadır. Açılan sayfadan Create New Namespace bağlantısına tıklayın.

Azure Service Bus Namespace oluşturma

Açılacak olan formda bizden

  1. Namespace ismi
  2. Bölge
  3. Tip 
  4. Tier* bilgileri isteniyor.

*Tier’ı abonelik pakedi olarak çevirebiliriz, fiyatlandırma ayrıntıları için: Azure Service Bus Fiyatlandırma

Type olarak Messaging‘i seçmemiz gerekiyor, Notification Hub’ı Push notification için kullanıyoruz. İleride bununla ilgili bir yazı yazarsam değinebilirim : ) Tier için ise Basic seçmemiz yeterli olacaktır. Formu gönderdikten yaklaşık 30 saniye sonra Service Bus Namespace’imiz kullanılabilir olacak.

Service Bus Queue Oluşturma

Service Bus Namespace’imiz oluşturulduktan sonra üzerine tıklayıp bu namespace’i yöneteceğimiz sayfaya ilerleyeceğiz.

3

Service Bus Namespace’imizi oluşturduk. Şimdi bir Queue oluşturmamız gerekiyor. Yönetim sayfasından Queues sekmesine gitmemiz gerekiyor.

4

Queues sekmesine gittiğimizde Queue’larımızı burada görüyor olacağız. Tabii ki henüz hiçbir queue oluşturmadığımız için burası boş gelecek. Yeni bir Queue oluşturmak için Create New Queue bağlantısına tıklayacağız.

5

Create New Queue bağlantısına tıkladığımızda karşımıza bir pencere açılacak ve Queue için bilgiler girmemiz istenecek.

6

  1. Queue Name
  2. Region
  3. Namespace

bilgilerini gireceğiz. Queue için bir isim seçtikten sonra Türkiyeye en yakın konum olan West Europe’u seçeceğiz. Namespace için de biraz önce oluşturduğumuz Namespace’i seçeceğiz ki zaten bunlar seçili gelecek. Ve formu gönderiyoruz. Birkaç saniye sonra Queue’muz kullanıma hazır olacak.

7

Artık mesaj göndermeye ve almaya hazırız.

Bu yazımda Azure Service Bus Queue’yu elimden geldiğince açıklamaya çalıştım. Örnek senaryolar vermeye çalıştım. Faydalı olması dileğiyle.

Şu yazımda Intel Edison üzerinden Azure Service Bus Queue’ya mesaj göndermekten ve C# Console Application’dan mesajları consume etmekten bahsettim: Intel Edison üzerinde Azure Service Bus Queue

Fazlasını Oku

Okan Üniversitesi Windows 10 Etkinliği w/ Engin Polat

Herkese merhabalar,

Dün -6 Nisan 2015 Pazartesi- Bilge Adam’dan Enterprise Software Architect ve Microsoft Windows Platform Development MVP‘si Engin Polat Okan Üniversitesi’nde technical ve non-technical katılımcılara Windows 10 ve Universal App platformunun getirdiği yenilikler hakkında bilgiler verdi.

IMG_2611

Yaklaşık 40 kişinin katıldığı ve 90 dakika süren oturumda Engin Polat Windows sürümlerinin birleşiminden, Universal App modelinden Azure’a kadar pek çok konuda katılımcıları bilgilendirdi.

Etkinliğimize katılımından dolayı kendisi adına TEMA vakfı tarafından 5 adet fidan dikildi, ilgili plaketi Engin Polat’a takdim ederken.

Etkinlik sonrası ben ve Okan Bilişim ve Sosyal Medya Kulübü‘nden birkaç  arkadaşımla sohbet eden Engin Polat, bizlere kariyerine ilk başladığı günden bugüne kadar geçen süreçten bahsetti. Girdiği sertifikasyon sınavlarından, sınavlara hazırlanma sürecinden ve MVP ünvanıyla ödüllendirildiği ilk günlerden bahsetti. Ve ilerde MVP olmayı çok isteyen biri olarak bu güzel söyleşi için teşekkür ediyorum.

Ayrıca Starbuck’taki düşünceli hareketi için Engin hocama ayrı bir teşekkür borcum var : )

Fazlasını Oku

Microsoft Student Partners ekibi Doğa Koleji Teknoloji Zirvesi’ndeydi

Geçtiğimiz cuma Microsoft’un Türkiye’deki showcase okulu Doğa Koleji’nde düzenlenen Teknoloji Zirvesi’ne Microsoft, IBM, Intel, Pearson yöneticileri ve akademisyenler katıldı.

“Microsoft Education” başlıklı bir sunum yapan Microsoft Eğitim Direktörü Mark Chaban; Doğa Koleji’nin Türkiye’de eğitim sektöründe teknoloji açısından büyük yenilikler yapan bir okul olduğunu ifade etti. Eğitim dünyasının teknolojiyi bir adım önde takip etmesi gerektiğini vurgulayan Chaban, “Doğa Koleji bu anlamda her zaman ülkesinde öncü bir kurum olarak dikkatimizi çekti. Showcase okulumuz olarak bizler de teknoloji alanındaki yenilikleri Doğalı öğrencilerle paylaşmaktan dolayı büyük mutluluk duyuyoruz. Aynı zamanda kurduğumuz işbirliği çerçevesinde artık teknoloji üreten bir nesil de yetiştirebiliyoruz.” şeklinde konuştu.
Dev zirvede sunumların ardından Tuzla Doğa Koleji’nin özel dizaynlı sınıflarında öğrenciler ve lider firmaların temsilcileriyle; e-Doğa (Learning Management System) Deneyimi, Fizik Atölyesi (Uçak, Robot, Kriminal) Deneyimi, 3D Ürün Dizayn ve Tasarım, Karbon Ayak İzi Deneyimi, Robotik, Lego Atölyesi, Bilgisayar ve Programlama Deneyimi, Galileo 3D Eğitim Deneyimi, Intel Communication Library Deneyimi, Bilim Atölyesi (Matematik ve Akıl Oyunları) Deneyimi, Microsoft Kinect Education Deneyimi gerçekleştirildi. Öğrenciler, katılımcılar ve veliler bu özel programla teknolojinin eğitimde nasıl kullanılabileceğine yönelik benzersiz bir deneyim yaşadılar.

Bizler de Microsoft Student Partners Türkiye ekibi olarak Tuzla Doğa Koleji’nde 6.sınıf öğrencilerine görsel programlama dili sayesinde kolayca oyunlar geliştirebilecekleri ‘Kodu’ oyun editörünün kullanımını anlattık.

7-12 yaş arasındaki çocukların kolay ve eğlenceli bir şekilde oyun geliştirme yapabilecekleri Kodu Game Lab‘i http://www.kodugamelab.com adresinden edinebilirsiniz.

Microsoft’un Türkiye’deki sosyal sorumluluk projelerinden biri olan, Türkiye’nin tek online uygulama geliştirme okulu olan Açık Akademi‘de varolan ve eklenmeye devam edecek olan Kodu eğitimlerini takip edebilirsiniz.

Fazlasını Oku

ASP.NET Web API : Token Based Authentication

This post is written in Turkish.

Merhaba arkadaşlar,

Şu sıralar uğraştığım bir proje gereği ASP.NET MVC, Web API üzerinde Authentication çalışmaları yapıyorum.

Bu yazıda normal şartlarda 401 [Unauthorized] döndüren bir Action’a bir Windows Phone veya Windows Store uygulamasından nasıl erişebileceğinizi, client’i nasıl yetkilendirebileceğinizi anlatmaya çalışacağım. Token based authentication‘u herhangi bir Http Client için gerçekleştirebiliyoruz.

Günümüzde geliştiriciler, web tabanlı uygulamalara ve mobil uygulamalara destek vermek zorundalar. Bu iki farklı uygulama tipi iki farklı yetkilendirme çeşidi gerektiriyor.

  • Cookie Authentication : Web tabanlı uygulamalar için,
  • Token Based Authentication : Mobil uygulamalar, ve browser tabanlı olmayan bir çok client çeşidi için.

Bu yazının başlığından da anlayacağınız üzere, bugün Token Based Authentication’u gerçekleyeceğiz.

1) Akışı Anlamak

oauth07

  1. Kullanıcı, client uygulamasında kullanıcı adı ve şifresini girer,
  2. Client, bu bilgileri Authorization Server‘a gönderir. (Authorization Server: Basitçe bize access tokenları veren sunucu)
  3. Authorization  Server, bu bilgileri doğrulayabilirse bir access token üretir, bu token’ı client’e döndürür.
  4. Kullanıcı, korunmuş bir kaynağa(normal şartlarda 401 döndüren) erişmek için bu access token‘ı Http Request’in Authorization header’ına ekler ve isteği öyle gönderir.

2) Web API’ın hazırlanması

İlk olarak ASP.NET Web API projemizi oluşturacağız.

–Visual Studio 2013’te ASP.NET Web Application projesi oluşturmanız gerekiyor.
1

–Karşınıza çıkacak olan template’lerden Web API’ı seçerek devam edelim. Authentication bölümünde Individual User Accounts seçili olmasına dikkat edin, eğer değil ise Change Authentication butonuna bastığınız zaman açılacak olan pencereden bu ayarı yapabilirsiniz.

2

OK’e bastığımız zaman projemiz oluşturulacak.

Projemiz oluştuğu zaman App_Start\Startup.Auth.cs dosyasına göz atalım. ConfigureAuth() metodunun içindeki OAuthOptions özelliğinin oluşturulduğu kısma bakalım,

OAuthOptions = new OAuthAuthorizationServerOptions
{
     TokenEndpointPath = new PathString("/Token"),
     Provider = new ApplicationOAuthProvider(PublicClientId),
     AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
     AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
     AllowInsecureHttp = true
};

Burada Authorization Server’ın token yapılandırmasını yapıyoruz. İlk satırda bir access token almak isteyen istemcinin nereye istek göndereceği belirtiliyor. Mevcut senaryoda çağrının http://localhost:53214/Token yapılması gerekiyor.

İkinci satırda ise Authorization Server’ın hangi sağlayıcıyı kullanacağı bildiriliyor. AuthorizeEndpointPath ise token’ın Facebook, Twitter gibi sosyal ağlar aracılığıyla alınmak istendiğinde çağrının yapılması gereken adresi bildiriyor.

AccessTokenExpireTimeSpan ise aslında en önemli kısım, buradan alınacak token’ın geçerlilik süresini bildiriyoruz. Mevcut şartlarda istemci, aldığı token’ı 14 gün boyunca kullanır. 14.günün sonunda yine 401[Unauthorized] hatası alır.

3) Web API testi

Şimdi de Web API’ı test edeceğiz. Ctrl + F5 yaparak projeyi çalıştıralım, ve çalıştıktan sonra Fiddler’i kullanarak ana dizine bir istek gönderelim.

Fiddler en çok kullanılan Web Debug araçlarından biridir: http://www.telerik.com/fiddler

Telerik Fiddler açıldıktan sonra Composer sekmesinden localhostta çalışan Web API projesinin ana dizinine bir GET isteği gönderelim.

3

Sol tarafta bütün ağ trafiğini görebileceğiniz bir bölüm mevcut, isteği gönderdik ve gördüğünüz gibi 200(OK) döndü. Bu isteği yaptığımız yer HomeController‘ın Index Action’u idi.

Şimdi Index Action’unu [Authorize] özniteliği ile işaretleyeceğiz ve buraya erişmek isteyen istemciler, yetkilendirilmeden erişemeyecekler.

[Authorize]
public ActionResult Index()
{
    ViewBag.Title = "Home Page";
    return View();
}

Projeyi build edip biraz önce yaptığımız isteği tekrarlarsak 200(OK) yerine 401(Unauthorized) döndüğünü göreceğiz.

3

Artık buraya erişim için yetkilendirme gerekiyor. Biz de bu yetkilendirmeyi bir önceki bölümde bahsettiğimiz “/token” adresine birtakım parametrelerle çağrı yaparak sağlayacağız.

Tabii ki hepsinden önce, yetkilendirmek için veritabanına bir kullanıcı kaydetmemiz gerekiyor.

Fiddler’den “/api/account/register” konumuna bir POST çağrı yapacağız.

Çağrımızın gövdesinde; E-mail, parola ve tekrar parola göndermemiz gerekiyor. Bu register modeli, Models\AccountBindingModel.cs dosyasında tanımlı. Dilerseniz kayıt için gerekli alanları değiştirebilirsiniz.

Göndermemiz gereken HTTP Request’i şu şekilde;

POST http://localhost:26296/api/account/register HTTP/1.1
Content-Type: application/json

{"email":"fatihdumanli@live.com","password":"Sifre.1234","confirmPassword":"Sifre.1234"}

Bu request 200(OK) döndürdükten sonra, artık Web API’mızın bir kullanıcısı var. Şimdi bu kullanıcıyı Home/Index’e erişmesi için yetkilendireceğiz.

4) Kullanıcıyı Yetkilendirme

Kullanıcıyı yetkilendirmek için, korumalı içeriğimize HTTP çağrısı yaparken Request Header’ına Authorization isminde bir alanı dahil etmemiz gerekecek. Bu bölüme girmeden önce Bearer Token ne demek ondan kısaca bahsetmek istiyorum. OAuth, yani bizim bu yazıda yetkilendirme işlemi için kullandığımız açık standardın, 2.0 sürümüyle birlikte kullandığı bir token çeşididir. (http://tools.ietf.org/html/rfc6750).

Öncelikle biraz önce kaydettiğimiz kullanıcı için bir token almamız gerekiyor. Daha önce üzerinde durduğum gibi “/token” dizinine bir POST çağrısı yapmamız gerekiyor.

POST http://localhost:26296/Token HTTP/1.1
Content-Type: application/x-www-form-urlencoded

grant_type=password&username=fatihdumanli@live.com&password=Sifre.1234

4

Yukarıda gördüğünüz gibi request başarıyla sonuçlandı. Şimdi response’ın üzerine çift tıklayalım bakalım sunucu bize neler döndürmüş.

 

5

Yukarıda gördüğünüz üzere JSON formatında bir Token objesi döndü. 2 hafta geçerlilik süresi olan, fatihdumanli@live.com e-maili ile sistemde kayıtlı olan kullanıcıya ait bir token nesnesi.

Şimdi burada access token’ı kopyalayalım. Tekrar Fiddler’in Composer sekmesine giderek korumalı kaynağa (Home/Index)’e bu access token’ı kullanarak bir çağrı gerçekleştirelim.

 

6

Daha önce 401 döndüren kaynağa access token’ımızla birlikte Authorization header’ını ekledikten sonra 200 dönmeye başladı.

Normalde Windows Phone clientinde Token Based Authentication’u nasıl implement edeceğimizi de bu yazıda uzun uzun anlatmayı planlıyordum fakat bu yazı çok uzadı : )

Bunun yerine Windows Phone projesinin GitHub linkini paylaşıyorum.
GitHub: https://github.com/fatihdumanli/WindowsPhone_TokenBasedAuth

Bu yazıda ASP.NET Web API üzerinden browser tabanlı olmayan herhangi bir istemcinin korumalı bir kaynağa erişmesine olanak tanıyan Token Based Authentication ı açıklamaya çalıştım. Faydalı olması dileğiyle.

Fazlasını Oku

Hour Of Code haftası sonunda

Herkese merhabalar,

8-14 Aralık haftası bu sene tüm dünyada ‘kodlama saati haftası’ olarak kabul gördü. Dünya çapında milyonlarca ilkokul öğrencisi bu haftada hayatlarında ilk defa kod yazdılar.

Türkiye’de binlerce öğrenci bu hafta düzenlenen etkinlikler sayesinde ilk defa kod yazdılar, oyun geliştirdiler.

Bütün hafta boyunca hemen hemen tüm MSP arkadaşlarımız çeşitli okullarda etkinlikler düzenlediler, daha okuma yazmayı yeni öğrenen çocukların birşeyler ürettiğini görüp bu mutluluğu onlarla paylaştılar. Ben bu yazıda kendi anılarımı paylaşmak istiyorum.

10-11 Aralık tarihlerinde Tuzla Doğa Koleji, Kurtköy Doğa Koleji ve Okan Koleji okullarında ben ve birkaç MSP arkadaşım eğitimler verdik.

Eğitimlere başlamadan önce çocukları böyle bir etkinliğin nasıl etkileyeceği konusunda gerçekten meraklıydım.

Eğitimlere başlamadan önce ‘Kimler bilgisayar mühendisi olmak istiyor?’ diye sordum, ve eğitim sonunda da bu soruyu yönelttim. Ve eğitim sonunda kalkan ellerin sayısının, eğitimin başında kalkan ellerin sayısından fazla olması beni yaptığım işe çok daha iyi teşvik etti.

Ve 13 Aralık Cumartesi günü büyük etkinlik Microsoft İstanbul ofisinde gerçekleşti. 3 ayrı gruba bölünmüş yaklaşık 200 öğrencinin ilk kodlarını yazıp ilk oyunlarını geliştirmesine tanıklık ettik.

İstanbul Ofisi’ndeki son grubu eğitime alırken Microsoft Türkiye Pazarlama Müdürü sayın Behice Funda Hanım’ın bizleri basına sunarken “Bu gördüğünüz arkadaşlarınız teknolojiyi tüketmek yerine üretmeyi tercih ettiler.” sözüne de ayrıca değinmek istiyorum.

 Günün bütün yorgunluğunu üzerimden alarak beni çok daha iyi motive etti. Bu sözü de unutulmayanlarıma ekledim. Bu sarfedilen güzel söz için de kendisine ayrıca teşekkür ediyorum.

Başta sevgili Mustafa Kasap hocamız olmak üzere, bu eğitimlerde emeği geçen tüm MSP arkadaşlarımı ve Microsoft Türkiye ailesini böylesine anlamlı bir eğitime isimlerini yazdırdıkları için kendi adıma tebrik ediyorum.

Etkinliğin fotoğraflarına https://www.facebook.com/media/set/?set=a.10152960927741214.1073741835.73057566213&type=1
adresinden erişebilirsiniz.

Son olarak favori öğrencim olan Okan Koleji’nden sevgili Yasemin’in videosunu buraya ekleyerek yazımı noktalıyorum. Kendisi tatlılık abidesinin olmasının yanı sıra zehir gibi :))

Eğer siz de programlama dünyasına hızlı bir başlangıç yapmak istiyorsanız http://touchdevelop.com adresini ziyaret edin.

Fazlasını Oku

MVVM #1 : Giriş

MVVM’den uzun zamandır bahsetmek istiyordum. Bugün MVVM’i şöyle bir inceleyeceğim.

Yeni
bir projeye başlamak biz yazılımcılar için oldukça heyecan vericidir.
UML’ler tasarlanır, kafada projenin konsepti oturur ve yazmaya büyük bir
şevkle başlarız. Ama maalesef bu projenin alacağı güncellemeleri
düşünmeden kodlamaya başlarız. Daha önceki tecrübelerimden yola çıkarak
şunu çok net söyleyebilirim ki bir projeyi güncellemek, geliştirmek veya
scale etmek bizler için gerçekten en zahmetli kısım, pazartesi sabahı
uyanmak kadar eziyetli. 🙂

MVVM NEDİR?
MVVM,
uygulama geliştirirken uygulamamızdaki modüller için iyi bir izolasyon
sağlamamıza yarayan bir geliştirme yaklaşımıdır. Web tarafındaki
MVC(Model-View-Controller) yaklaşımıyla bire bir aynı olmasa da, odak
noktası Silverlight ve WPF olan bir MVC diyebiliriz de…
NEDEN MVVM?
MVVM
deseni ile geliştirilen uygulamalarda parçalar birbiriyle olabildiğince
az ilişkilidir, bir modülde yapılan bir değişiklik diğerini minimum
seviyede etkiler. Bu izolasyona Separation of Concerns diyoruz.

MVVM
yaklaşımı ile
geliştirilen uygulamalarda tasarımcı tasarımını yapar, kodcu kodunu
yazar ve bu iki katmanda gerçekleşen ve gerçekleşecek olan değişiklikler
birbirinden mümkün
olan en az seviyede etkilenir. Yazının başında bahsettiğim projelerin
güncelleme ve ölçeklendirme zahmeti MVVM sayesinde kısmen ortadan
kalkıyor. Bu sebeple günümüzde MVVM yaklaşımı son derece önemli, ve
şahsi fikrim büyük çaplı projelerde bir should değil must.

Peki nedir bu Model, View ve ViewModel?

Model: Model, uygulamamızda kullanacağımız verilerdir. Verilerimiz için yazdığımız her sınıf birer model’dır.

View: View, uygulamanın arayüzüdür. Uygulamadaki her bir sayfa, her bir User Control birer View’dır.

View Model: Ve veri ile arayüzü bağlayan yapı View Model. ViewModel, View‘ın DataContext’idir.

View’ın
DataContext’i ViewModel’lar olduğundan MVVM’de herşey Binding üzerinden
yürüyor. Ayrıca View ile ViewModel arasındaki akışı sağlarken Command
ve Behavior yapılarından da faydalanıyoruz. Bu yapılar MVVM deseni ile
geliştirilen uygulamalar için olmazsa olmaz.

SONUÇ
MVVM’in kazanımlarını listeleyecek olursak;

  • Kolay ölçeklenebilen projeler
  • Tasarım ve kod tarafının birbirinden ayrılması
  • Daha düzenli ve daha okunabilir bir kod

Önümüzdeki günlerde Command ve
Behavior yapılarını ele alan bir yazı yazmayı düşünüyorum ve MVVM ile
geliştirilmiş bir örnek uygulama paylaşacağım.

Bu yazıda bir geliştirme yaklaşımı olan MVVM’i incelemeye çalıştım, faydalı olması dileğiyle.

Fazlasını Oku