Firsttie Akademi Windows Phone Uygulama Geliştirme Dersleri



Gelişmekte olan ve gelişme sürecinde bile bir çok özelliğiyle rakiplerinin önüne geçmiş Windows Phone platformunun Türkiye marketinde adı geçen bir marka olmamız adına geçtiğimiz dönem ücretsiz bir çok eğitim vermiştik. 

Microsoft Technical Evangelist Burak Bayburtlu ile yaptığımız görüşmelerde bu eğitimlerin devam etmesi ve geçmişte Firsttie Akademi olarak çevrim içi yaptığımız derslerin gelecek hafta içerisinde Firsttie Youtube kanalında yayınlanması kararlarını aldık. Yakın zamanda Windows Phone ve Windows  8 uygulama geliştirme ile ilgili küçük bir platform çalışmalarına başlayacak ve bu yolla konu hakkında istekli arkadaşlara yardımcı olacağız.


Kararı alırken biz 













Visual Studio 2015 Yenilikleri


MSDN'de belirtilen VS2015 ile birlikte gelen yeniliklerin benim için gerekli kısımlarını sizlerle paylaşmak istedim. Bu yeniliklerin bazıları ön izleme sürümünde açılmadı ancak genel olarak işte yenilikler;

Visual C++ for Cross-Platform Mobile Development


Mobil dünyanın en önemli konularından olan Cross-Platform Mobil Uygulama Geliştirme VS2015'in en ilgi çekici yanlarından olsa gerek. VS2015 ile Native Android ya da Xamarin üzerinden Cross-Platform uygulamalar geliştirilebilecek.VS'yi IDE'lerin şahı yapan özelliklerden biri olan IntelliSense, Xamarin ya da Native Android geliştirirken platforma özgü olacak şekilde kullanılabilecek. Hatta Breakpoint, Watch ile değişken takibi, Stack izleme ve adım adım kodlama özellikleri de kullanıma sunuldu. Ve tabii ki test için gerekli yapı da kurulmuş; Microsoft'un GPS/Location, Accelerometer, Screen Rotation, Zoom, SD Card ve internet erişimi özelliklerine sahip Android Emulator'ü ya da Android cihaz ile debug yapılabilecek.


Visual Studio Tools for Apache Cordova


Apache Cordova için geliştirilen VS araçları Android, iOS, Windows ve ya Windows Phone uygulamalarını Build, Debug ve test etmeyi kolaylaştıracak.

Bu kolaylıklar;

-iOS simulatörüne ya da cihaza deploy edilen uygulamalar debug edilebilecek.
-Remote iOS Build Agent için güvenlik ve konfigrasyon geliştirildi.
-Geliştirilmiş Plugin yönetimi ile custom plugin ekleme desteklenecek.
-Platform'a göre konfigrasyon ayarları geliştirilmiş config.xml'dan yapılabilecek.
-Apache Cordova 4.0.0 desteklenecek.

C# and Visual Basic


C# ile ilgili gelecek yenilikleri bir önceki yazımızda belirtmiştik ve belirtilen özelliklere ek olarak bir özellik belirtilmedi. Ancak Kod Editör'ü ve Düzenleyicisi'nde güzel gözüken yenilikler var. Bunlar;

-Önceki sürümlerde de kullandığımız CTRL + "." ile açılan düzenleme menüsü, Light Bulbs adı verilen ve çözüm önerileri sunan yapıya dönüştürüldü. Inline temporary variable ve Introduce local olacak şekilde 2 farklı refactoring menüsü olan Light Bulbs, yapılan değişikliği, sadece değişiklik yapılan kısma ya da benzer tüm alanlara uygulamayı sağlıyor.



-İsim değiştirme de geliştirildi. Artık kendine ait bir menüsü olan isim değiştirme, menüsü ile bizlere yorum satırlarında da değişikliği yapma, string'lerde de değişiklik yapma ve önizleme seçenekleri sunuyor.



-Nuget içerisinde bulunan FxCop adlı analiz eklentisi Run Time'da exception durumunda Get Live Code özelliği ile hata için çözüm önerisi ve kod parçacığını gösteriyor.
-Watch esnasında LINQ ve lambda expression'ları görebilme ve kullanabilme de yenilikler arasında. Her seferinde yanlışlıkla Watch'ta takip etmeye çalıştığım ve verdiği cevapla kendinden nefret ettiren lambda expression'lar artık çok daha sevimli.
-Breakpoint Konfigrasyon'u geliştirildi. Conditions ayarları içerisindeki Conditional Expressions, Hit Count ve Filter ile Breakpoint'e ulaşıldığında anlık bilgi verebilecek, Action içerisindeki Log a message ile de loglama yapılabilecek.





-CodeLens ile TFS üzerinde yapılan değişiklikler grafikleştirilebilecek.
-Kullanılan pencere yapıları "Save Window Layout" ile kaydedilebilecek ve CTRL+ALT+1 - 9 tuş kombinasyonları ile var olanlar aktifleştirilebilecek.



-Ek olarak scrolling, pinch-to-zoom gibi geliştirmeler de mevcut.

Blend


Blend hakkında "Yeniden tasarlandı" şeklinde iddialı bir cümle kullanılıyor. Yenilikler şu şekilde;



-VS'ye benzer yeni görünüm ile VS-Blend uyumu geliştirildi.
-Yeni Blend-exclusive Dark tema geliştirildi.
-XAML'cıların isyanlarını bir nebze bastırabilmek adına XAML'a IntelliSense eklendi.
-Blend ve VS arasındaki dosya aktarım kesintileri minimuma indirildi.
-Cihazlar arası senkron bir şekilde çalışan Custom Window Layout geliştirildi.
-Solution Explorer ve Source Control pencereleri geliştirildi.
-NuGet desteği eklendi.

Diğer yandan ASP.NET, Azure, TypeScript, Entity Framework, C++ ile ilgili gelen özellikleri kendileri ile aram olmadığından dolayı daha açmayacağım. VS 2015'i buradan indirebilir, yanlışım varsa düzeltebilir, öğretmek istediğiniz bir yenilik varsa iletişime geçebilirsiniz.

VS 2015'in de selamı var.

C# 6.0 Yenilikleri



C#'ın günümüzün en nitelikli ve kullanışlı dillerinden biri olduğu kesin. Bir süre önce yapılan Build'de C# 6.0'ın yeni özellikleri tanıtıldı. Ve karşınızda bu özellikler;

Null-Conditional Operator


"Null kontrolü şart" mantığıyla projerlerin vazgeçilmezi olan if(value!=null) ifadesi yerine kontrolü ve işi tek satırda bitiren null kontrollü şartlı yapı yeniliklerden biri.

Kullanım:

Eski;

if(value!=null)
item = value.Substring(0,value.Lenght-5);

Yeni;

item = value?.Substring(0,value.Lenght-5);

Auto-Property Initializers


Default değeri olması gereken bir property'nin değerini genelde constructor ya da ilk set ediliş için çağıracağımız bir method'da atardık. Ancak Auto-Property Initializer ile bu işi property tanımında

halledebiliyoruz.

Eski;

public DateTime TimeVal { get; set;}

public void SetFirst()
{
TimeVal = DateTime.Now;
...
}

Yeni;

public DateTime TimeVal { get; set;} = DateTime.Now;
public DateTime TimeValue { get;} = DateTime.UtcNow; //Asıl kullanım amacı read-only property'ler.

Primary Constructors


Constructor'da parametre olarak alınan değerlerin class içerisindeki property'e eşitlenme işi parametrelerin direk class'a verilmesi ve auto-property initializer kullanılarak eşitlenmesi ile daha basit bir

hal almış.

Eski;

public class MathPro
{
public MathPro(string name,int id)
{
this.Name = name;
this.ID = id;
...
}

public string Name {get;set;}
public int ID {get;set;}

}

Yeni;

public class MathPro(string name,int id)
{
public string Name {get;set;} = name;
public int ID {get;set;} = id;
...
}

Expression Bodied Functions and Properties


Bazı az iş yapan method'lar için statement body açmak her zaman gereksiz gelmiştir. Bu yenilik ile az iş yapıp hak etmeyen method'a küme parantezi aç kapa yok. Hatta sadece method'lar için

değil basit getter setter'ı olmayan property'ler için de geçerli.

Eski;

//MathPro class'ı için
public override string ToString()
{
return this.Name + this.ID.ToString();
}

public string NewText
{
get{return string.Format("{0} - {1}", ID.ToString(), Name);}
 }

Yeni;

public override string ToString() => this.Name + this.ID.ToString();
public string NewText=>
  string.Format("{0} - {1}", ID.ToString(), Name);

Indexed Members and Element Initializers


Belirli index ya da key'deki elemanların değerlerini atama işi için önce collection'ı tanımlar daha sonra değeri atardık. Yeni özelliklerden biri de tanımlama içinde index ya da key kullanarak değer

atanabilmesi. Ayrıca $ sembolü ilgili index ya da parametreye erişimi sağlıyor.

Eski;

Dictionary<string, string> ExDictionary = new Dictionary<string, string>();

List<double> ExList = new List<double>()
  {
0,0,0,0,0,20,0,0,0,0,40
  };

public void SetFirst()
{
ExDictionary.Add("En","400px");
}

public void EditData(string newData)
{
    ExDictionary["En"]= newData;
    ExList[10] = ( ExList[10] *2 / 5);
}

Yeni;

Dictionary<string, string> ExDictionary = new Dictionary<string, string>()
  {
    ["En"] = "400px"],
    ["Boy"] = "800px"]
  };

List<double> ExList = new List<double>()
  {
    [5] = 20,
    [10] = 40
  };

public void EditData(string newData)
{
    ExDictionary.$En= newData;
    ExList.$10 = ( ExList.$10 *2 / 5);
}


Static Using Statements


Bu özellik biraz ilginç olmuş, kafa karıştıracak gibi. Using define kısmında belirtilen bir class'ın static method'unu kullanırken class ismi yazmaya gerek kalmayacak.

Eski;

using System.Windows.Media;

public class ExMedia
{
public ExMedia()
{
Color.FromArgb(10,20,30,40);
...
}
}

Yeni;

using System.Windows.Media.Color;

public class ExMedia
{
public ExMedia()
{
FromArgb(10,20,30,40);
...
}
}

Declaration Expressions


Bu özellik "Kullanımından önce değişkeni tanımla" ile doğan gereksiz bir satır kodu öldürüyor. Özellikle try metodları içinde kullanılan out değişkenler için nimet.

Eski;

//WP Navigasyon Parametresi Alımı
protected override void OnNavigatedTo(NavigationEventArgs e)
{
double vol = 0;
this.NavigationContext.QueryString.TryGetValue("vol", out vol);
}

Yeni;

protected override void OnNavigatedTo(NavigationEventArgs e)
{
this.NavigationContext.QueryString.TryGetValue("vol", out double vol);
}

Exception-Handling Improvements


Try-Catch yapısında await method kullanılamamasına herhalde bir tek ben gıcık olmuyorumdur. Buna framework geliştiricilerinden bir abimiz de gıcık olmuş ki kullanıma olanak sağlamış. Ayrıca

exception handling'e filtreleme de eklenmiş.

Yeni;

public void DoSmhtng()
{
 try
{
string text = string.Empty;
                using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    using (IsolatedStorageFileStream stream = file.OpenFile("mediastate.txt", FileMode.Open, FileAccess.Read))
                    {
                        using (StreamReader reader = new StreamReader(stream))
                        {
                            text = reader.ReadToEnd();
                            reader.Close();
                        }
                        stream.Close();
                    }
                }
}
catch(IsolatedStorageException ex) if (!string.IsNullOrEmpty(ex.HelpLink))
{
await Log(ex.HelpLink);
}

Additional Numeric Literal Formats


Bu özellik sayesinde decimal, hex ve binary verilerde görülen yazım tipi etkinleştirildi.

Yeni;

int number = 2_147_483_647;


C# 6.0 ile gelen ya da gelebilecek olan bazı özellikleri MSDN'den ve Filip abimizin anlatımından derleyerek sizlere anlatmak istedim. Umarım yanlış anladığım ya da anlattığım bir kısım yoktur, varsa da bana da öğretiniz.

İyi C#'lar.

Windows 10 Sunumu Çıkarımları

40 dakikalık Windows 10 Present First Chapter’ından Joe Belfiore’un ultra akıcı İngilizce’sinden “Only Basic Experience” olarak kısıtladığı sunumdan çıkarımlarım aşağıdadır;



Ortak Yapı

-Tek işletim sistemi,
-Tek UI, küçük adaptasyonlarla,
-Tek yazılım projesi, Universal App,
-Tek store

-Ortak yapı zaten Windows 8 çıktığından beri ana konuydu ancak sadece konuşuluyordu.
-2015 yılında tam olarak Universal App mantığına geçiş yapılacağından bahsedildi. İşletim sistemi her çeşit cihaz için birbirine çok yakın UI içerdiği için code behind’dan ziyade ön yüz geliştirmesi de ortak olacağından tam olarak Universal App mantığı uygulanabilecek.
-Hali hazırda da store’da uygulama altında Universal App olduğu belirtilmeye başlanmıştı. Satın alınan ürün Universal App ise hem telefon hem tablet hem PC’ye yüklenebiliyordu. Windows 10 ile birlikte store tam olarak ortaklaşacak, tek bir yerden yönetilebilecek.

Cloud Yapısı

-Extra güvenli arttırılmış cloud yapısı

-Sanırım çok sevinmişler iCloud’un hack’lenmesine. Sunum ile alakası olmamasına rağmen bunu araya sıkıştırdılar. Artık rahat rahat çıplak fotoğraf çekilip cloud’a yükleyebiliriz.

Continuum UI-UX

-Start Menu geri dönüşü,
-Task View,
-Geliştirilmiş App-Switching,
-Metro UI uygulamaların masaüstünde açılması,
-Multiple Desktop ve geliştirilmiş Snapped View,
-Tablet ve Mouse-Keyboard modu,
-Metro UI tasarım değişikliği,

-Continuum adı verilen yeni tasarımın en büyük amacı eski WinXP-Win7 kullanıcıları ile Win8 kullanıcılarına ortak kullanabilecekleri yapı sunabilmek. Bunun en büyük örneği Start Menu’ye dönüş. Start Menu’nün sol kısmı eski Start Menü dizaynı (Yukarıdan aşağıya inen uygulamalar ve kısayollar), sağ tarafı ise Metro dizaynı. Sol ve sağ kısımları arası uygulama geçişleri yapılabiliyor, menü enine ve boyuna genişletilebiliyor (Manuel), Tile’lar küçük, orta, büyük moda alınabiliyor. Ayrıca eski Start Menu search özelliği ile Metro UI search özelliği harmanlanmış ve Start Menu’den erişilir hale gelmiş.
-Charms Bar’da değişiklik yapılmamış, sağdan çekiliyor ve aynı özelliklere sahip. Ancak soldan çekilen, açık uygulamaları gösteren menüde değişiklik yapılmış ve Metro UI tarzı açık uygulamaları göstermek yerine, App-Switching açılıyor.
-Yeni App-Switching eski Alt-Tab app switching ile Win7’de başlayan, görev çubuğunda uygulama üstüne gelindiğinde orada uygulamanın anlık küçük görüntüsünü gösterme, özelliğinin harmanlanması ile oluşturulmuş gibi. Daha büyük kutucuklar içeren yeni App-Switching yapısına Task View demişler ve sanırım ana amacı Multiple Desktop kullanımı. Bu arada tablet kullanıcıları için Alt-Tab yerine Task-View button eklenmiş ve tablette de kullanıma sunulmuş.
-Metro UI uygulamalar masaüstü uygulaması gibi artık masaüstünde açılacaklar, boyutlandırıldığında arka plan masaüstü olacak. Hatta üst bara sahip olacak ve büyüt, küçült, kapat butonları ile yönetilebilecekler.
-Multiple Desktop yapısı Windows 8 Snapped View’ın geliştirilmiş versiyonu olarak gözüküyor. Metro UI uygulamaların Snapped View’a geçişleri kolaylaştırılmış. Snapped View’a geçen uygulama ekranın yarısına otururken diğer açık uygulamalar masaüstü görünümünün üzerinde Task View halinde gözüküyor ve herhangi birine tıklanması ile tıklanan pencere ekranın boş olan diğer yarısına oturuyor. Diğer yandan da ekranın yarısına oturan uygulamalar tek tık ile yarı boyuta düşebiliyor ve açılan her boşlukta diğer açık olan uygulamalar Task-View halinde gözüküyor ve boşlukta kolayca açılabiliyor. Örnekte ekran 4’e bölünmüş ve aktif bir şekilde kullanılabiliyordu. Ancak bu bölme işlemi Windows 8’deki gibi manuel boyutlandırmaya uygun mu bilemiyorum.
-Tablet ve Mouse-Keyboard kullanıcıları için farklı kullanım modları geliştirmişler ve modlar arası değişimi klavye takılması ya da çıkarılması ile sistem kendi yapıyor. Bu modlar arası 30 saniyelik bir video gösterildi ve görebildiğim en önemli fark tablet modunda Task Bar’a Back butonu eklenmesiydi. Bu da gerçekten tek UI’a geçişe ispat niteliğinde ve hatta Task Bar’a 2 modda da eklenen search butonu da buna ek olmuş.
-Metro UI’da yapılan değişiklik de Windows 7 + Windows 8 yazım kuralına tam olarak uymuş. Sol taraf Windows 7 Start Menu tarzı, ekranın ortasının biraz solundan başlayarak sağa doğru yayılan diğer kısmı Metru UI tarzı ve Tile’lar içeriyor.

Sunum kısa sürdü ve “preview.windows.com” adresinden Insider programı çerçevesinde 1-2 güne sunulacağı düşünülen Windows 10 Preview sürümü indirilebilecek.