Introduction to AngularJS - AngularJS ye Giriş

   Merhabalar arkadaşlar, üniversitemde son sınıfı okumak üzere ders seçimlerimi yaptığım şu dönemde AngularJS anlatıyor olacağım bir yazı dizisi yazmayı planlıyorum. Her hangi bir aksilik çıkmazsa daha detaylı anlatımlarda da bulunacağım.

   İlk önce AngularJS nedir biraz ondan bahsedeyim ve ardından giriş uygulamamızı yapalım. En basit anlmıyla MVC mimarisini kullanan bir javascript uyarlaması olarak düşünebiliriz.Bu sayede kodlarımız daha düzenli, daha anlaşılır, daha kolay yazılabilen, daha kolay bakımı yapılabilen, daha performanslı çalısan bir hale gelmiş oluyor. Ayrıca google mühendislerinide tebrik etmek gerekiyor, gayet başarılı bir iş çıkarmışlar ve doğal dile çok yakın bir programlama dili yapmayı başarmışlar.

   Öncelikle AngularJs i hızlı bir şekilde öğrenebilmek için Javascript bilginiz olsa hiç fena olmaz aslında. Ama direk Angulardan başlamakta güzel bir tercih olabilir. İlk olarak "www.plnkr.co" dan bahsederek başlayalım. Burası bize html, css, java script kodlarımızı derleyip çalıştırabileceğimiz online bir ortam sunmakta. Buradaki html sayfamız bizim dış dünyaya açılan görüntümüzü temsil edecek. Css kodları sayfamızın diyanını daha iyi yapabilmek adına html ile birlikte etkileşimli çalışacak olan kodlar. Javascript kodlarımız ise fonksiyonlarımızı yazacağımız yani client taraflı işlemlerin yapılacağı yer olacak.




   AngularJs yi kullanabilmemizin ilk koşulu angular.js kütüphanesini html sayfamıza referans olarak eklemek. Ekleme işlemi başarılı ise anında html sayfamızın içinde bir script tag' ı oluşacak ve burada angular referans edilecek. Artık angular yazmaya başlayabiliriz  :)

   Bir sonrakş yazımda MVC deseninden (pattern) daha detaylı bahsedeceğim fakat şimdi kısaca giriş yapalım.

   M: Model  >  temel olarak class larımızı temsil eder
   V: View  >  dış dünya ile iletişim kuracağımız yapı. Şu anda bizim index.html sayfamızı bir view olarak düşünebiliriz.
   C: Controller  >  modelimizdeki soyut veriyi somutlaştırarak model ile view arasında bağlantı kurduğumuz yapı.

Şimdi ekrana Hello World yazdıralım.

1) js sayfamızda controller ları içersine alan "MainModule" adında bir modül oluşturalım. Modül kavramını, namaspace kavramına benzetmek mümkün.
var module1 = angular.module("MainModule",[]);
 Köşeli parantezlerin anlamı: bir modül içerisinde bir çok controller olabilir.

2) Bu modül içinde yer alacak bir controller tanımlayalım ve bu controller içerisinde bir model tanımlayalım.
module1.controller("MainController", function($scope){

  $scope.message = "Hello World !!!";

});
$scope.xxx : $scope' dan sonra yazılan ifade bir class, bir değişken, bir object , bir attribute vb. şeyler olabilir.




   Şu anda içerisine birçok controller alabilen bir modül tanımladık. Sonra bu modül içerisine bir controller tanımlayarak yerleştirdik. Sonrada Bu controller içerisinde bir değişken tanımlayarak içerisine string bir değer atadık.

3) Sıra bu yapılan şeyleri View tarafında kullanmaya geldi.




   View' da body tagları arasına gelerek kullnacağımız namespace' in adını ng-app="xxx" diyerek veriyorun. Ve akabinden ng-controller="xxx" diyerek modüldeki hangi controller' ı kullanacağımızı belirtiyoruz. Artık bu <body> ... </body> tagları arasında belirttiğimiz controller ' ın herşeyine erişe bilme imkanına sahip oluyoruz.

{{message}} diyerek,  "message" adındaki angular modelini view a bind etmiş oluyoruz.

   AngularJS ' e giriş için güzel bir yazı olduğunu umuyorum, bu işe girmek istiyenlere yararım dokunduysa ne mutlu bana. Bir sonraki yazıda görüşmek üzere arkadaşlar :)



Facebook Authentication with Azure Mobile Services

Merhaba arkadaşlar, bu blog yazım Microsoft Yaz Okulundan sonra yazdıgım ilk teknik yazım olacak. Teknik diyorum çünkü Microsoft Yaz Okulu boyunca her gün teknik olmayan blog yazısı yazmıştım.

Windows Phone da  Web Authentication üzerine bir örnek yapmayı planlıyorum. Malum windows phone da uygulama yazan çoğu yazılımcı, uygulamasına giriş için login sayfası yapar. Burada facebook login sayfası ile ilgili bir örnek yaparak size ufakta olsa bir yol göstermeye çalışacağım.  

1) Öncelikle Visual Studio - Store App - Windows Phone yolunu izleyerek bir proje oluşturalım. Bu projemize ilk önce referansları ekleyerek işe başlayalım. Refences kısmına sağ tıklayarak Manges NuGet Packages diyoruz ve buradan "Mobile Services" aramasını yaparak Azure Mobile Sevices SDK sını projemize entegre etmiş oluyoruz.





2) App.xaml.cs kısmına aşağıdaki kodları yazıyoruz.

----------------

        public static Microsoft.WindowsAzure.MobileServices.MobileServiceClient Client = new Microsoft.WindowsAzure.MobileServices.MobileServiceClient ("https://xxxxxmobileserviceauthentication.azure-mobile.net/", "QMGpsnVKzMCcAFNJkjXdEFWYWxxxxx9");

 public static MobileServiceUser User = null;

----------------

İlk kod azure üzerindeki mobile servisimize bağlantı için gerekli olan adres ve passwork' ü içermekte. İkinci kodda ise boş bir mobile service user oluşturuyoruz.

3) MaimPage.xaml.cs kısmına geçerek aşağıdaki kodları yazıyoruz. Açılış sayfamızın OnNavigateTo(...) metodunun içine şu kodları yazarak facebook' un bizim için yapmış olduğu arayüze ulaşmış olacağız.

----------------

  protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            while (App.User == null)
            {
                try
                {
                      App.User = await  pp. Client. LoginAsync     (MobileServiceAuthenticationProvider.Facebook) ;

                }
                catch (Exception) { }
            }
            base.OnNavigatedTo(e);
        }

----------------

3) Şimdi sıra bize facebook'un sağladığı bu güzel interface servisi ile bizim Mobile Service arasında ilişki kurmamız gerekiyor. Bunun için www.developers.facebook.com adresinden temsili bir uygulama oluşturmamız gerekiyor.


 

Burada uygulamamızın hangi platform üzerinde çalıştığı bilgisini seçtikten sonra birçok şeyi başarmış oluyoruz aslında.




3) Uygulamamızı oluşturduktan sonra, bu uygulamanın ayarlarına girerek Web Service url adresimizi ve diğer gerekli bilgileri dolduruyoruz. Ardından Status and Review kısmından uygulamamızı aktif hale getiriyoruz.




4) Son olarak ise burdan alacağımız App Id ve App Secret kodlarını, Azure Mobile Services üzerindeki Identity kısmındaki uygun alana yapıştırıyoruz. Ve böylece  protocol ü aktif hale getiriyoruz.




Programı çalıştırıdığımda aşşagıdaki gibi muazzam bir facebook login interface bizi karşılıyor. Azure Mobile Services ile herşey basit herşey mantıklı :)


 

Waterfall Software Development Methodology - Waterfall Yazılım Geliştirme Metodolojisi

      Yazılım geliştirme metodolojileri, yazılım geliştime adına farklı yorumlar getirir. Şu anda anlatacağım yöntem waterfall olarak bilinen "şelale" modelidir. Waterfall modelinin ilk çıkışı 1970 lere dayanır.

      Waterfall model bize lineer bir geliştirme yöntemi sunar. Proje "faz" olarak adlandırılan adımlara bölünmüştür. Fazlar arasında dönüş yoktur. Her faz belirlenen plan dahilinde yapılır ve bir sonraki faz' a geçilir. Yani fazlar peşi sıra dizilidir. İşlem akışı şu şekildedir ;
Requirements, Design, Implementation, Verification, Maintenance.
Şekilde' de incelenecek olursa üstten alta doğru bir akış söz konusudur.



Waterfall model denilince başlıca şu özellikeler önplana çıkar:
  • Waterfall' da bir sonraki faza geçebilmek için, öncesindeki fazlar tamamlanmış olmalı.
  • Her faz'ın sonunda, o faz'ı ile ilgili döküman hazırlanır. Bu sebepten dolayı waterfall model döküman bazlıdır.
  • Proje ile ilğili istekler ilk baştan belirtilmelidir. Sonradan projeye müşteri çerçevesinde eklemeler yapılamaz.
Waterfall modeli, yeni düzene ayak uyduramamıştır. Bu modelde başlıca şu problemler önplana çıkar:
  •  Özellikle müşteri ile kullanıcı arasındaki gereksinim alışverişinin projenin başlangıcından sonra mümkün olmaması.
  • Gerçek projelerde fazlar arası geriye dönmelerin olduğu gerçeğini waterfall' ın kabullenmemesi.


What is CISC and RISC ? - CISC ve RISC nedir ?


     Anlatılanların dahada iyi anlaşılması adına her terime kısaca deyinmeye çalışacagım. İlk olarak Bilgisayar Bilimleri Terminolojisine ait olan bu ifadelerin açılımları neler onlara bakalım.
  •  CISC (Complex Instruction Set Computer). Direk anlaşılabildiği gibi karmaşık komut kümeleri içeren bilgisayarlardır. İntel ve AMD örnek olarak verile bilir. 1970 li yıllar da geliştirilmişitir.
  •  RISC (Reduced Instruction Set Computer). Karmaşık olmayan, indirgenmiş komut kümelerine sahip olan bilgisayarlar. Sun Sparc, Power PC..
     Komut kümesi ne demektir. Bir makinayı programlıyacak programcının, programlama esnasında kullanabileceği en temel komutları ifade eder. RISC, CISC ayrımına gidilmesindeki başlıca etken bu komut setlerinin karmaşıklıklarının artmasıdır. General purpose registers,Opcode' un nasıl tanımlandığı, akış kontrol ifadeleri, farklılaşan komutlar (instructions) sebebiyle komut kümesi (intruction set, komut set' i) etkilenmektedir.

CISC Mimarisi

     CISC modelinde komutlar karmaşıktır. Bu karmaşıklıgın temel sebebi geriye uyumluluk olmasıdır. Örneğin Intel' in ilk işlkemcilerinden buyana değimden gelen komutlar hala bulunmaktadır. Yeni nesillerinde ise çeşitli eklemeler yapılarak daha karmaşık işlemlerin yapılması sağlanır. Bu karmaşıklıktan ötürü CISC modelinde komutlar interpreter(ROM' da bulunur) ile daha küçük kod parçacıklarına (Mikrokod) dönüştürlür. İşlemcide bu mikrokodlar çalıştırılır.


RISC Mimarisi

      RISC mimarisinin doğmasındaki en büyük etken CISC mimarisindeki karmaşıklıktır. Bir CISC komutu 5 RISC komutuna denk gelmektedir. RISC ile şu avantajlar öne çıkar ;
  • Bütün komutlar tek bir Clock Cycle da çalıştırılır
  • İnterpreter kullanılmadan (yani mikro kod olmadan) bütün komutlar donanım üzerinde direk çalıştırılır.
  • Memory erişimi sadece iki komut ile yapılabilir "STORE" ve "LOAD". 
  • Komut Seti küçültülmüştür.

CISC vs RISC

     Hangisi daha iyi diye bir kanıya  tam olarak varılamaz. Ama günümüzde Hybrid mimariler ( CISC + RISC ) oldukça verimli çalışmaktadır. Genel anlamda CISC ve RISC arasındaki farkları şöyle sıralayabiliriz;