Category Archives: Microsoft Türkiye

[UWP] Async Storyboard çağırmak.

Windows uygulamaları geliştirirken sayfadaki elementler üzerinde animasyon kullanmak istiyorsak Storyboardları kullanıyoruz. Genellikle geliştiriciler bu animasyonları hazırlamak için Blend kullanırlar. (Düzenlemek istediğiniz elementin bulunduğu sayfanın üzerine Solution Explorer’dan sağ tıklayarak ‘Design in Blend’ seçeneğine basarak erişebilirsiniz.)

Animasyonu oluşturup Storyboardumuzu XAML tarafında tanımladıktan sonra kod tarafında bu animasyonu belirlenen obje üzerinde oynatmak için Begin methodunu kullanıyoruz. Begin methodu senkron çalışan bir method ve Storyboard sınıfının içerisinde bu methodu asenkron hale getirecek başka bir oynatmak methodu bulunmuyor. Fakat Completed eventini ve TaskCompletionSource sınıfını kullanarak bütün Storyboardları asenkron çalıştıran bir extension method yazabiliriz.

sampleAnimation isimli bir Storyboard düşünelim. Bu animasyon başlamadan önce ekrana animasyonun çıkan diyalog kapatıldıktan sonra başlayacağını belirten bir mesaj verdirtelim. Daha sonra animasyonu oynatalım ve animasyonun bittiğine dair bir mesaj daha verdirelim.

private async void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    await (new MessageDialog("Animasyon bu diyalog kapatıldığında başlayacak.").ShowAsync());
    sampleAnimation.Begin();
    await (new MessageDialog("Animasyon bitti!").ShowAsync());
}

Peki ya bu animasyon bitmeden kodun devamına geçmesini istemiyorsak? Şu anki haliyle ilk diyalogu kapattığımız gibi animasyon başlayacak fakat Begin methodu senkron çalıştığı için kod çalıştırması devam edecek ve animasyonun bittiğini belirten ikinci bir diyalog gelecek. Animasyon 3,5 milisaniyede bitmiyorsa bu durumda çok yanlış yapıyoruz demektir 🙂 İşte o zaman bu oynatma methodunun asenkron haline ihtiyacımız oluyor. Aşağıdaki şekilde bir StoryboardHelper içerisinde BeginAsync extension methodunu yazarak bu işten kurtulabiliriz.

public static class StoryboardHelper
{
    public static Task BeginAsync(this Storyboard storyboard)
    {
        var completionSource = new TaskCompletionSource<object>();

        storyboard.Completed += (c, r) =>
        {
            completionSource.SetResult(null);
        };

        storyboard.Begin();

        return completionSource.Task;
    }
}

Daha sonra animasyonu oynattığımız yeri de aşağıdaki gibi düzenlersek amacımıza ulaşmış oluyoruz.

private async void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    await (new MessageDialog("Animasyon bu diyalog kapatıldığında başlayacak.").ShowAsync());
    await sampleAnimation.BeginAsync();
    await (new MessageDialog("Animasyon bitti!").ShowAsync());
}

Asenkron Storyboard kullanımına ihtiyacınız varsa TaskCompletionSource kullanımına ait de çok güzel bir örnek olan yukarıdaki BeginAsync methodunu kullanabilirsiniz.

0
Shares

Okunabilir XAML Yazmak

Any fool can write code that a computer can understand.  Good programmers write code that humans can understand. – Martin Fowler

Bahsettiğimiz konu kod yazmaya gelince bütün geliştiricilerin kendi standartları olabilir. Fakat yazdığımız kod ne olursa olsun biz bırakıp gittiğimizde kodumuzu okuyacak bir diğer insan bunu işkence görmeden başarabilmeli 🙂

Hangi dilde yazıyor olursak olalım eğer bir tasarım dili yazıyorsak visualization (görselleştirme) her zaman daha zor olacaktır. Çünkü yazdığımız şey aslında hayali bir çerçeve içerisinde hayali şeylerin nasıl görüneceğini belirlemek. Yazdığımız kodların bu hayali çerçeve içerisinde nasıl görüneceğini zaman içerisinde biz de kestirebiliyoruz. Fakat bu büyük bir uğraş ve zaman gerektiriyor. Yeni XAML yazmaya başlamış birinin Designer kullanmadan tasarım yapması beklenemez. Gün geçtikçe Designerdan uzaklaşıp XAML’ı kod tarafında yazmak hem geliştiricinin yazdığı kodu görselleştirmesinde hem de daha hızlı geliştirme yapmasına yardımcı olacaktır.

Daha önce de söylediğim gibi bütün geliştiricilerin kendilerine has standartları olabilir. En basitinden Camel & Pascal Case diye ayırdığımız naming conventionları örnek verebiliriz. Peki iş tamamen görsele dayalı bir dil olduğunda okunabilirliği nasıl sağlayabiliriz?

Bu yazıda kendi günlük geliştirmelerimde yaptığım XAML sayfalarında dikkat etmeye çalıştığım ve kod okunabilirliğini arttırmaya yardımcı olacak maddeleri sıraladım. Bunlar benim standartlarım olduğu için herhangi bir geçerliliği elbet yok. Fakat yazının amacı eğer okunabilirliği arttırmaksa aşağıdaki maddeler hem size hem de sizden sonraki geliştiricilere hayatı büyük bir oranda kolaylaştıracağından eminim.

Ortak özelliklere sahip elementler için Style kullanın.

Copy – paste programming günümüzde bu kadar yaygınlaşmışken sayfa veya proje içerisinde aynı özelliklere sahip elementler için kullanmanız gereken Style kodlarının da bu kadar az olması haliyle kaçınılmaz. Çoğu geliştirici için bir tane elementi tam haliyle yazıp onu kopyalayıp yapıştırarak çoğaltmak, bu elementlerin kullanabileceği ortak bir Style kodu yazmakdan daha kolay geliyor. Şimdi bunu yapmanın işinizi ne kadar kolaylaştırdığı tartışılabilir. Fakat kopyala – yapıştır yaparak çoğalttığınız elementlerin büyük çaplı projelerde başınıza dert olacağı bir kaçınılmazdır.

Style kodları kullanmak yönetmesi kolay bir tasarım kodu oluşturmaya yardımcı olur. Ayrıca her maddede olduğu gibi kod anlaşılabilirliğini had safhada tutmanızı sağlar. Resimlerle örneklemek gerekirse:

Birbirlerinden bağımsız fakat aynı özelliklere sahip TextBlocklar.

Birbirlerinden bağımsız fakat aynı özelliklere sahip TextBlocklar.

Page Resource içerisine tanımlanmış bir Style koduyla tanımlanmış TextBlocklar.

Page Resource içerisine tanımlanmış bir Style koduyla tanımlanmış TextBlocklar.

 

 

Birbirine benzer fakat çok az propertyler ile birbirinden ayrılan stil parçaları için BasedOn kullanarak ana stilden farklı stil parçaları oluşturabilirsiniz.

Sayfa içerisindeki bütün TextBlocklar aynı stile sahip olacaksa bir x:Key tanımlaması yapmanıza gerek yok. Ayrıca her zaman olduğu gibi gerektiği yerlerde comment tagleri içerisine açıklama yazmayı öncelik sıranıza almayı unutmayın.

UI Elementleri yazarken belirlediğiniz kurallara uyun.

Şimdi bu da aslında yazıda yazdığım bütün maddeler gibi size kalmış bir şey. Fakat code-readability (kod okunabilirliği) açısından en önemli unsurlardan biri. Geliştirdiğiniz projelerin her aşamasında olduğu gibi yazdığınız kodun başkası tarafından rahatça okunabilinip anlaşılabiliyor olması beklenir. İş tasarım dili olunca da backend kodu gibi şöyle bir göz gezdirilip devam edilemeyebiliyor çoğu zaman. Çünkü bir componentin tanımlanmış 10’dan fazla propertysi olabilir. Bunların hepsini bir XAML koduna bakıp akılda tutmak ya da yeri geldiğinde dönüp bulmak vakit kaybına yol açabilir. İşte bu tarz ufak gibi görünen ama aslında geliştirme zamanınızı çok daha hızlandırabilecek küçük unsurları düzeltmek için şunları yapabilirsiniz:

Inline yerine Newline kullanın

Aşağıya iki farklı resim ile çok propertyli bir UI element kodu ekliyorum, sanırım bahsettiğim şeyi anlayacaksınız.

Inline

Inline

Newline

Newline

 

 

 

 

 

 

Sonuç olarak iki resimdeki kod da aynı işi yapıyor ve aynı elementi ekrana basıyor. Fakat alt resimeki koda baktığımızda okunabilirlik diğerine göre daha çok daha fazla.

Kendi rulesetinizi oluşturun

Şimdi Ruleset dediğimiz olay aslında kod kalitesini arttırmak ve kod okunabilirliğini yüksek seviyelerde tutmak için geliştirilmiş bir dosyadan başka bir şey değil. Visual Studio içerisinde belirli rulelara (kurallara) göre kod yazmak da aslında bu bahsettiğim iki unsuru destekleyen bir unsur. Daha detaylı bilgi için şu MSDN sayfasını inceleyebilirsiniz.

Benim bahsettiğim ruleset ise tamamen sizin kendi kod standartınıza uygun bir hayali ruleset. Emin olmamakla beraber bildiğim kadarıyla şu an Rule dosyaları XAML içerisinde kullanılamıyor. Bu durumda da bize düşen kendi hayali rulesetimizi oluşturup kodu ona göre yazmak. Nasıl mı?

Örneğin XAML dosyası içerisine tanımladığımız her bir componente erişmek için bir x:Name tanımlar ve onu kullanırız. Ben şahsen bunu her zaman componentin ilk propertysi olarak hemen altına tanımlamaya özen gösteririm. Bu gerekli bir şey değil, isterseniz ortalarda bir yere ya da en görünmeyen yere yazın hiç fark etmez, sonuçta compilerdan geçtiğinde pek bir önemi kalmıyor, değil mi? 🙂 Değil abi. Özellikle designer çok exceptional caseler dışında designer kullanmayan biri olarak bu benim için önemli. Benim için aslında uymaya çalıştığım ruleset öncelik sırasına göre şöyle:

  1. x:Name her zaman en başta olmalı ki ben neyle uğraştığımı anlamak için gözümü ordan oraya çevirmeyeyim.
  2. Eğer kontrol bir Grid içerisinde ise attached propertyleri olan Row ve Column propertyleri her zaman ikinci sırada, x:Name’den sonra gelir. Bunun nedeni de Grid yapısını kullanırken elementin tam olarak nerede render edileceğini kafamda daha rahat canlandırabilmem aslında.
  3. Width ve Height propertyleri olabildiği en üst sıralara yazılır. Bunun sebebi de yine Row ve Column ile aynı aslında. Tamamen yazılan tasarım kodunu kafamda rahat canlandırabilmek.
  4. Bunlardan sonra gelen propertyler öncelik sırasına göre yazılır.

Bunlar benim uymaya çalıştığım kurallar. Siz de yukarıdakiler gibi kendi kurallarınızı oluşturup bunları projenin uygun bir yerine açıklayıcı bir şekilde yazabilirsiniz. Böylece bir dahaki sefere neyi nerde bulabileceğinizi daha kolay bir şekilde halledebilirsiniz. Aşağıda yine kıyaslama adına iki farklı resim paylaşıyorum.

Yapılması gereken.

Yapılması gereken.

Koşarak uzaklaşılması gereken.

Koşarak uzaklaşılması gereken.

 

 

 

 

 

 

 

Yukarıdaki Grid içerisinde Row setter indexi 0 olan Textblock için atama yapılması tercih sebebidir.

Bütün Resourceları tek bir yere yazmayın.

Hepimizin nimetlerini sonuna kadar kullandığı bir dosya var. App.xaml 🙂 İş resource yönetimine gelince çoğu zaman her şeyi en kolay yöntem olan App.xaml üzerine yüklüyoruz. Bu da geniş çaplı projelerde gereksiz resourceların tek bir dosyada toplanmasını beraberinde getiriyor. Bu durum her ne kadar günümüz bilgisayarlarının halledemeyeceği kadar yoğun bir iş yükü oluşturmuyor olsa da amacımız her şeyi nizami bir şekilde geliştirmek. Peki nedir bunun yolu / yordamı?

ResourceDictionary kullanın

ResourceDictionary ile farklı amaçlar için saklamak istediğiniz farklı türdeki resourceları (örneğin Converter’lar, DataTemplate’ler, Style’lar) farklı xaml dosyaları içerisine yazarak tek bir yerde toplayabilirsiniz.

Ayrıştırılmış Resource dosyaları.

Ayrıştırılmış Resource dosyaları.

 

 

 

 

 

Tek bir dosya için kullanacağınız resourceları ortak alanlara yazmaktan kaçının

Yalnızca tek bir sayfa için kullanacağınız bir DataTemplate’i App.xaml veya farklı bir Resource xaml’ı içerisinde yazmanın hiç bir anlamı yok. Eğer yazdığınız bu template yalnızca o sayfa içerisinde kullanılacaksa Page.Resources altına yazabilirsiniz. Bu ayrıca IntelliSense’in gerektiği durumlarda kod bölüğünü bulmasını da hızlandıracaktır.

Yüksek Margin ve Padding değerleri kullanmayın.

WinRT, UWP, WPF vs. konusunda yeni yeni geliştirme yapmaya başlamış bir geliştiricinin en çok düştüğü hatalardan biri Designer üzerinden ekrana sürükleyip bıraktığı kontrolün, uygulamanın çalıştığı ekran çözünürlüğü ne olursa olsun hep aynı yerde gözükeceğidir. Bu tabiki de yanlıştır, çünkü siz drag & drop yöntemiyle ekranın herhangi bir yerine bir element sürüklediğiniz zaman Designer bu elemente sizin koyduğunuz yere uygun olması için gerekli Margin değerlerini otomatik olarak atar. Görünürde bir saçmalık yoktur, çünkü zaten XAML Designer bunu sizin görmek istediğiniz şekilde ayarladı bile. Sorun bu uygulamayı farklı çözünürlüklerde çalıştırdığınız zaman ortaya çıkar.

Margin ve Padding propertyleri için okunabilirliği ele almamız yine bize visualization (canlandırma) konusunda yardımcı olabilir. Küçük değerlerle çalışmak hem bu canlandırmayı kolaylaştırdığı gibi hem de farklı çözünürlüklerde uçuk kaçık elementler görmemizi engeller. Yani aslında küçük değerlerle çalışıp istediğimiz ekran görüntüsünü yakalayabilmek bizim veya çalışma arkadaşlarımızın işini okunabilirlik konusunda kolaylaştırdığı gibi farklı ekran çözünürlüklerinde test ettiğimiz elementlerin çok farklı yerlerde konumlanmasını engeller.

 

0
Shares

“Burak Amerika’ya gitmişsin hiç söylemiyosun bro ?” – 1

Ya ben size söylemeyi unuttum ama ben Build 2016’ya gittim ta Amerigalara ya. Cidden oldu yani öyle bişey. Her seferinde desteğinden bahsettiğim Microsoft’un güzel bir jestiyle MSP’ler arasından beni seçip Build 2016’ya gönderdiler. Şaka gibi, hehe. Hadi biraz ondan bahsedeyim:

Efenim 13,14 Mart gibi bir tarihte Microsoft Türkiye’den sevindirici bir telefon aldım. Beni 30 Mart – 2 Nisan tarihleri arasında San Francisco’da yapılacak olan ve Microsoft’un her sene düzenleyip yeni teknolojilerini & ürünlerini tanıttığı ve katılımcılara deneme fırsatı verdiği bir etkinlik olan Build’a göndermeyi düşündüklerini söylediler. Önce sakince telefonu yere koyup bi ajandama baktım (:P) Sonra bu bir hata diyerekten telefonu kaptım ve “Oluuur” dedim. Ardından bir pasaport macerası başladı…

2 hafta gibi bir sürede hem pasaportumu yenilemem hem de Amerika vizesi için başvuru yapıp onay almam gerekiyordu. Vize başvurusu yapabilmem için pasaport numaramı DS 160 formuna yazıp göndermem lazımmış. O yüzden randevuyu erken tarihe alamadım. Bir an önce pasaportumu yenilemem gerekiyordu…

Yeni yeni gelişmekte olan bu e-pasaport sistemini biraz araştırdım. Istanbul’daki bütün ilçe emniyetlerdeki pasaport şubelerindeki randevular çok geç tarihe veriyordu. Ben de işimi Yalova’da halletmeye karar verdim. Sabahın köründe IDO ile Yalova’ya gidip pasaport işlemlerimi yaptım. Pazaresi günü yapmıştım, Cuma pasaport elimdeydi. Asıl sıkıntılı kısım şimdi başlıyordu: AMERIKA VIZESI!

Pasaport numaram artık olduğuna göre kısa Amerika vizesine başvurmam ve onay almam gerekiyordu. 28 Mart günü sabah 6 gibi uçağım var ve benim randevu ve onay almama sadece 10 gün kalmıştı 🙂 Istanbul’daki Amerikan Konsolosluğuna randevu almak istediğimde en yakın tarih 29’unu gösteriyordu, o nedenle Ankara konsolosluğunu denemek istedim. Ordaki tarih de 27’sini gösteriyordu. Bir mutsuzluk, bir çaresizlik ki aldı başını gidiyor o saatler…

Biraz araştırdım, yaklaşık bi 10 dakika vakit öldürdüm internette. Sonra dedim ki arkadaş başka çare yok, mission abort. Iptal yane gidemiyoruz… Sayfayı bi refresh ettim ki bir de ne göreyim, Ankara için biri sanırım iptal etmiş en yakın randevu tarihi 25 Mart! Onay alıp vizenin gelmesi falan çok kısa bir süreye tekabül edecek ama denemeye değerdi. Bu sırada bir yandan da Microsoft ile görüşmeleri sürdürüyor, “Gelicem, relax, her şey under control, sıkıntı yook” falan diyorum tabi…

Neyse efenim 24 Martı 25’e bağlayan gece Ankara’ya uçtum. Sabah konsoloslukta işlerimi hallettim. Onayı aldım. Her şey mikemmel ilerliyor derkeen pasaportumu alıp geri göndermeleri gerektiğini fark ettim. Konsolosluktaki mülakatı geçerseniz ve onay alırsanız pasaportunuzu alıp vize işlemleri için sıraya koyuyorlar. Ardından belirttiğiniz adrese postalıyorlar. O postanın gelmesi gerekiyordu ben uçana kadar…

Konsolosluğa girdiğiniz zaman size mülakatı Ingilizce mi yoksa Türkiye mi yapmak istersiniz diye soruyorlar. Ben farketmez dediğim için bana Ingilizce fiş verdiler. Şimdi orası öyle bi ortam ki insan ister istemez geriliyor. Ben Ingilizceme güveniyorum ama etrafta ‘Ben yüksek ıııh, I study master in bla bla önivörsiti’ diye konuşanları gördükçe insan geriliyor tabi haliyle. Pamuk ipliğine bağlı zaten her şey… Neyse. Yaptık tontiş bi abiyle mülakatımızı. Ayaküstü bi sohbet, bi mappet, sorma… Gülüştük, geçiştik, konuşma biterken onayı verdi dayı sağolsun. Onayı alınca dedim battı balık yan gider: “Benim 28’inde uçmam gerekiyor, ne yapman gerekiyorsa yap dayı da şu pasaport bana erken gelsin ya” diye bi acındırdım kendimi. O da “Sıkıntı olmaz kardeşim merak etme” dedi, Ingilizce ama… 😛

25’inde pasaportu verdim, 27’sinde telefonuma PTT’den bir SMS geldi ve dedi ki ” Al bu kafayı sepete ekle binbir türlü..” Yok öyle demedi. Dedi ki beyefendi postanız geldi, gidin alın şubeden. Sabahın köründe koşarak gittiğim şubeden Amerikan vizeli pasaportumu teslim aldım. Artık her şey hazırdı, sonunda 🙂

28’inin sabahı Frankfurt aktarmalı olarak San Francisco’ta gidiyordum. Sabahın köründe bindik uçağımıza paşalar gibi Frankfurt’a indik. 2 saat bekleme süresi vardı. Biraz Frankfurt Airport’ta takıldıktan sonra asıl baba uçağa binme vakti geldi. İki katlı böyle değişik bi makine koymuşlar, binin dediler bindik. Bir uçuş ki sorma. Tam 12 saat uçtum neredeyse. Dilekolay. 12 saat yav!

Iyi ki yanımdaki 2 koltuk boştu şansıma, sülalem raad bi şekilde takıldım koltuklarda 😛 Ikramlar başlayınca da bira ve şarabın dibine vurdum ayıptır söylemesi 🙂 Bütün bu macera zaten efsane bir deneyim fakat çok büyük bir makinanın içerisinde ve yerden kilometrelerce yükseklikte okyanusun üzerinden geçip camdan dışarıyı izlemek oldukça keyif vericiydi benim için. Normalde pek umrumda olmaz, “Aaa bu da başka bi dağ işte” diyip geçerdim. Bu sefer öyle olmadı.

Uçakta U.S sınırından geçerken vermeniz gereken “ben sizin ülkenize şu ürünleri sokuyorum, şu kadar litre & kiloda sokuyorum, hayır son 10 yılda adını bilmediğim bu 10. dünya ülkesine girip çıkmadım zart zurt” olarak doldurmanız gereken bir form veriyorlar size. Verdiler, doldurdum. Ama salak ben o formu kurşun kalemle doldurdum 🙂 Evet, salak.

Uçak sonunda indi. Indi ama ben saatlerdir uçarken saatin sadece 3,4 saat oynaması (bkz. nam-ı diğer jetlag) haliyle bünye tarafından pek hoş karşılanmadı. Sınırdan geçmek için sıraya girdim. Yaklaşık 1.5 saat sırada bekledim ve sıra bana geldiğinde vezneye doğru ilerledim. Cool bi dayı benden o border formunu istedi, uzattım. “Ama sen bunu kurşunla doldurmuşsun, git tükenmezle doldur geri gel” demez mi… Bakın 1.5 saat yorgun argın ayakta beklemişken konuştuğunuz ve sizi sınırdan geçirebilecek tek insanın böyle bir şey demesi insana koyar. Koydu da. Ekşimiş ve üzülmüş (yalancıktan) bir surat ifadesiyle “Ama ben sıranın en başına dönemem, çok bekledim memedali bey nolur yardımcı olun” dedim. Cool dayı da küçük bi masa gösterdi ve “Orda tükenmez kalem ve yeni form var. Git ordan doldur ve senden sonraki kişi gittiğinde tekrar gel” dedi. Ay bir sevinç, bir mutluluk…

Gittim aldım yeni bir form doldurdum ve cool dayıya verdim. Cool dayı da coolluğunu konuşturarak beni sınırdan geçirdi. Artık resmi olaraktan Amerika’daydım. San Francisco International Airport (SFO) da yorgun argın B.A.R.T diye bir şeyden haberim oldu. Otele gitmek için şehir merkezine gitmem gerekiyordu. Bunu mesela daha Amerikan-vari söylemek gerekirse “Otele gitmem için biraz kuzeye doğru yol almam gerekiyordu” diyebilirim 😛 Yok lan şaka şaka, öyle bişey yok. Daha o kadar Amerikan olmadım.

Bay Area Rapid Transit (kısacası BART) dedikleri bir metro sistemi var. Bazen yeraltından bazense yerüstünden yol alarak şehrin büyük bir kısmını dolaşıyor bu sistem. Zaten  Amerika ile ilgili biraz araştırma yaptıysanız şehiriçi ulaşımın arabanız olmadan çok zor olduğunu biliyorsunuzdur. Gerçekten de öyle, araba şart abi.

Bu metroya binip bir şekilde otelime yakın durakta indim. Internetim yok. Haritayı da indirmediğim için kullanamıyorum. Insanlara sora sora oteli buldum, yerleştim, uyuyakaldım….

Etkinlikten 1 gün önce saat 16:00 civarı oteldeydim. Yarın sabah Build 2016 başlayacaktı ve şu an hepimizin bildiği ama benim gittiğim zamanlarda kimsenin tahmin bile edemeyeceği yeniliklerden bahsedilecekti.

Ah be yine olsa da yine gitsek… Şimdi öncelikle bu macera çok büyük olduğu için parça parça paylaşmaya karar verdiğimi size üzülerek (!) söylemek istiyorum. Bütün maceramı GoPro ve telefonumun kamerasına kaydettim. Videoları birleştirip tam bir video yapma hayalım var (hala) ama video editing falan pek işim olmadığı için hiçbir zaman uğraşmadım. Artık son! 😛

Yakında tekrar görüşürüz.

 

0
Shares

Güncel Televizyon Artık Open Source !

Geçen sene ilk versionunu kodlamaya başladığım , Windows Store’da 3 binden fazla değerlendirmesi olan , 50 binden fazla indirilen ve 4.5 yıldız ortalamaya sahip olan televizyon izleme uygulamam Güncel Televizyonu Github üzerinden açık kaynak hale getirdim.Bu uygulamanın bende yeri aslında oldukça büyük.Küçük projelerin yanında bu tarz büyük bir projeye başlamamlaberaber Windows Phone ve Windows 8 üzerindeki tecrübelerimi fazlasıyla geliştirme fırsatı buldum.Şu an bu teknolojiler üzerinde bildiğim neredeyse herşeyi bu projede bulabilirsiniz.Aşağıda özene bezene yazdığım bir hikaye mevcut.Projenin her bir aşamasını , neyi nerde neye dayanarak nasıl yazdım vs. hepsini öğrenebilirsiniz 🙂

Projeye buraya tıklayarak GitHub üzerinden ulaşabilirsiniz !

Hikaye

Fikir tamamen ‘Acaba yapabilir miyim ?’ düşüncesiyle ortaya çıktı.Uzun bir yolculuk olacağını biliyordum , fakat herzamanki gibi bu korku da beni yıldırmadı 🙂 Küçük bir araştırma yaparak HLS (m3u8) , RTMP ve MMS protokolleri üzerinden streaming yapmayla ilgili bilgiler edindim.Daha sonra bu protokollerin Windows Development konusunda yapılan örneklerini araştırdım.Çoğu kanallar HLS yayını yapıyordu ve Windows’taki MediaElement kontrolü by default olarak bu desteği vermiyordu.Araştırmalarıma devam ederek Windows Phone Media Streaming Library (PhoneSM) adlı open-source kütüphaneyi buldum.Bu kütüphane sayesinde MediaElement’e HLS oynatma desteğini entegre edebiliyordum.

Web API

Yayın adresleri sürekli değişiyordu.Bir gün çalışan bir HLS yayını bir sonraki gün çalışmayabiliyordu.Bunu farkettikten sonra uygulamanın içerisinde yayın linklerini sabit olarak gömemeyeceğimi anladım.Bu sorunu çözmek için de çalışan canlı yayın linklerini uygulamaya iletebilecek bir Web API hazırladım.API, izlenilmek istenen kanalın yayın linkini kendi hafızasından uygulamaya iletiyordu ve bu linkleri değiştirmek için tek yapmam gereken sadece API projesini güncelleyip publish etmekti.Böylece her yayın linki değiştiğinde uygulamayı güncelleyip Windows Store’a update göndermek zorunda kalmayacaktım.

Basit bir web api projesi üzerinden çoktan uygulamaya bir farklılık yaratmıştım.Arkasında bir web servis çalışan tek televizyon izleme uygulaması Güncel Televizyondu.Fakat bu da yeterli değildi.Her gün bütün linkler çalışıyor mu acaba diye kontrol edemezdim.Bu soruna da bir çözüm bulmam gerekiyordu , buldum da 🙂 Çok izlenen ve resmi sitelerinde ‘Canlı İzle’ özelliği olan kanallar için Web API projesini güncelledim.API’a bu kanallardan izleme linki isteği geldiğinde API kanalın web sitesindeki ‘Canlı Izle’ sayfasına gidecek , siteyi okuyup içerisinden uygulamaya gönderilecek izleme linkini hazırlayacak ve göndericekti.Böylece az bir eforla çoğu kullanıcının izlediği popüler kanalların kontrolünü yaparak vakit kaybetmeyecektim ve uygulamadaki linkler daha uzun ömürlü ; hatta ömürsüz olacaktı 🙂

Sırf yukarıdaki özelliği API’a entegre etmem bile işimi oldukça kolaylaştırmıştı.Fakat bu da benim için yeterli değildi.Uygulamanın daha ön plana çıkabilmesi için değişik özellikler düşünmem gerekiyordu.Ben de yine hiçbir televizyon izleme uygulamasında olmayan Yayın Akışı desteğini getirdim.API , istenilen kanalın o günkü yayın akışını belli başlı web sitelerine bağlanıp hazırlayarak uygulamaya geri döndürüyordu.Ilk yazdığımda her istekte site tekrar analiz edilip öyle gönderiliyordu ve bu da ciddi bir vakit kaybıydı (4,5 saniye).Bu özelliği daha da geliştirerek her gece 2’de otomatik olarak desteklenen bütün kanalların yayın akışını hafızasında tutacak bir sistem hazırladım.Azure Websites üzerinde çalışan Web API projesi her gece Azure Webjobs’dan tetiklenen bir komutla hafızasındaki bütün kanalların yayın akışını yeniliyor ve bir sonraki güne kadar hafızasında tutuyordu.Böylece istenilen kanalın yayın akışı milisaniyeler içerisinde uygulamaya iletilebiliyordu.

Kanal sayısı arttıkça uygulamalaya iletilecek yayın linkleri artıyor ve bunların kontrolü de zorlaşıyordu.Bu linkleri bir veritabanı altyapısına bağlayarak herhangi bir link değiştiğinde Web API projesini tekrar tekrar publish etmekten kurtuldum.Artık yapacağım tek şey canlı sitesinden okunamayan kanallar için linkini veritabanına girmekti.Böylece uygulamada kullanabileceğim fully functional ve oldukça hızlı bir altyapıya sahip oldum.

Windows 8.1

Web API projesini hazırladıktan sonra uygulamayı derli toplu bir hale getirmek için çalışmalara devam ediyordum.PhoneSM’i izleme sayfasınad entegre ederek HLS yayın desteğini sağladım.Çoğu kanal kendi sitelerinde HLS yayını yapıyordu.Aslında Güncel Televizyon’un sahip olduğu bu zengin ve çalışan kanal listesinin tek sebebi HLS videoları oynatabilmesiydi.Arkasındaki API altyapısı sayesindeyse bu linkler hiçbir zaman ölmüyor , marketteki ratingleri gittikçe artıyordu.

Uygulama kullanılmaya başlandıkça yorumları okumaya devam ediyordum.Herkesin şikayetçi olduğu donma sorununa alternatif birşeyler bulmam gerekiyordu.Ülkemizdeki internet altyapısının verdiği düşüklük nedeniyle bazı kullanıcılar yayınları izlerken buffering sürecinde sıkılıyor ve kötü yorumda bulunuyorlardı.Ben de uygulamaya desteklenen kanallarda HD – Low quality özelliğini getirdim.Interent hızına güvenen kullanıcılar HD butonuna basarak en yüksek kalitede izleyebiliyorlardı.Düşük hızlı internete sahip kullanıcılar göz zevklerinden biraz fedakarlık ederek en düşük kalitede izleyebiliyorlardı 🙂 İleride bu özelliği daha da geliştirerek kullanıcılara destekleyen kanallarda seçebilecekleri bütün bandwith değerleri üzerinden izleme özelliği sundum.

Bu zamana kadar uygulamanın eksiklerini arkadaşlarımdan ve marketteki yorumlardan okuyordum.Bu takibin kontrolü biraz zordu haliyle.Kullanıcılar benimle olan iletişimlerini daha kolay yollardan iletmelilerdi.Bu nedenle bir Mobile Services projesi hazırlayarak uygulamaya iletişim formu koydum.Artık uygulamayı geliştirebilmek için daha fazla kaynağım vardı.

Uygulamaya yeni bir kanal eklendiğinde veya bazı kanalları kaldırmam gerektiğinde uygulamayı günellemem gerekiyordu.Bu başlı başına büyük bir sorundu ve çözümü çoktan düşünmüştüm aslında.Uygulamaya kanal senkronizasyon mantığını getirerek bu sorundan kurtulabilirdim.Uygulama açılırken version numarasını API’a gönderiyordu.API , version numarasını kontrol ederek o versiondan yeni bir version varmı diye kontrol ediyordu.Eğer update varsa , uygulamaya yeni kanal listesini gönderiyordu.Eğer yeni kanal listesi gelirse , uygulama bütün kanalları silip yeni kanal listesini locale kaydediyordu.Böylece bütün kanallar version numarasına göre senkron bir şekilde çalışıyordu.

Her kanalın fotoğrafı Azure Storage üzerinde açtığım bir blob üzerinde veritabanındaki kanal numarasına göre saklanıyordu.Eğer bir kanalın fotoğrafını güncellemem gerekirse sadece Storage hesabımdaki dosyanın üzerine kopyalıyordum.

Windows Phone 8.0

PhoneSM , Windows Phone 8.1 üzerinde çalışmıyordu.Ayrıca telefon uygulamasının Metro uygulamasından biraz daha yanar dönerli olması gerekiyordu , kısacası ekstra bazı componentlar kullanarak uygulamanın arayüzünü güzelleştirmem gerekiyordu.Telerik for Windows Phone kullanmaya karar verdim.API projesine çağrı yapan ve Windows 8.1 uygulamasında kullandığım bazı classları Windows Phone projesine aktararak büyük bir iş yükünün altıntan kolayca kurtuldum.Windows uygulamasındaki bütün özellikleri Windows Phone projesine aktararak Universal Project olarak markete gönderdim.

Mutluyum 😀

Sonuç

Benim için ‘Ben bunu yapabiliyorum !’ diyebildiğim bir proje oldu Güncel Televizyon.Şu an en yeni sürümü Windows Store mağzasında , telefon sürümü ise şu an için yayında değil.Vakit buldukça biraz daha geliştirip yayınlayacağım.Bunun yanında iki platformdaki appten de kaldırdığım push notification özelliği gibi özellikler de vardı , onları da vakit bulursam tekrar eklemeyi düşünüyorum.

Sayonara ! 🙂

0
Shares

MSP Meetup !

Daha önceki zamanlarda yalnızca Istanbul’da düzenlediğimiz MSP Meetup etkinliğinin ikincisini bu sefer 7 farklı şehirde düzenliyoruz.Bazı şehirler için katılmak artık çok geç olsa da Ankara ve Istanbul için hala sınırlı sayıda bilet mevcut.Buraya tıklayarak Sezgin’in hazırladığı cix meetup sitesine giderek EventBrite üzerinden ücretsiz biletlerinizi alabilirsiniz 🙂 (Gelemeyecek olanlar varsa biletleri iade etmelerini rica ediyoruz ^^)

“MSP Meetup’da nedir ?” derseniz , Microsoft Student Partners programına dahil olan öğrenciler ile dahil olmayan öğrencileri bir araya getirip sohbet ortamında kaynaşmalarını sağlayan bir buluşma etkinliğidir.Sizinle belirlediğimiz şehirlerde , belirlediğimiz mekanlarda buluşup sohbet ediyoruz , kahve içiyoruz … Bu sohbet sırasında sizler aklınıza takılan her türlü şeyi sorabilme imkanı buluyor ve Microsoft programları hakkında derin bilgilere sahip olmuş oluyorsunuz.’Benim Microsoft’la alakam yok olm , maksat sohbet mappet’ diyenleri de bekliyoruz 😛

Istanbuldaki Meetup için bu Cumartesi Microsoft Istanbul ofisinde olacağım.Gelin , konuşalım 🙂

0
Shares

[Windows Phone Development 101] – Tasarım (XAML)

Serinin ilk yazısına buraya tıklayarak ulaşabilirsiniz.

Aradan yaklaşık 2.5 ay geçmiş 🙂 Koşturmaca nedeniyle çok özen göstermek istediğim bu seriye yeterli vakti ayıramadım sanırım :/ Olsun , kaldığımız yerden devam !

Serinin ilk yazısında geliştirmelerimizi C# ve XAML kullanarak yapacağımızı ve XAML’ın ne olduğunu kabataslak anlatmıştım.Artık bir Windows Phone uygulamasında kullanacağınız bütün ekranların nasıl bir yapıyla kodlanması gerektiğine değinebiliriz.

Boş bir WP projesi açtığınız zaman MainPage isimli bir sayfa projeye otomatik olarak eklenir.Bu sayfa uygulama çalıştığı zaman ilk olarak yüklenecek sayfadır.Eğer uygulama açıldığında farklı bir sayfayı yüklemek isterseniz App.xaml.cs dosyasını açarak aşağıdaki satırı düzenleyebilirsiniz :

if (!rootFrame.Navigate(typeof(MainPage), e.Arguments))

App.xaml.cs dosyasındaki rootFrame nesnesi , uygulamanın çalışma süreci içerisinde ekranı dolduracak olan nesnedir.Ilk yazıda bahsettiğim Navigate methodu ile bu satırda yüklenecek sayfayı belirliyoruz.Dikkat ederseniz bu method geriye bir bool döndürüyor.Bunun nedeni navigasyonun başarısız olduğu senaryoları yakalayıp handle etmek.Yani ben herhangi bir nedenden dolayı istediğim sayfayı yükleyemiyorsam Exception alıp uygulamayı patlatmak yerine farklı bir alternatif sayfaya yönlendirme yapabilir veya kullanıcıya uygun hata mesajını gösterebilirim.Bu tarz senaryolara ve geri tuşunu handle etme işlemlerine bir sonraki yazılarda değineceğim.

XAML konusuyla girdik fakat bu kısma değinmeseydim olmazdı … Tasarım üzerinden devam edelim.

MainPage sayfasını düzenlemek için dosya üzerine çift tıklayarak sayfayı XAML Designer ile açın.Designerın alt barındaki >> veya << butonlarını kullanarak sayfayı ikiye bölebilir ve hem tasarım tarafını hem de tasarımın kod tarafını görebilirsiniz.Tasarım yapmak için XAML tasarım aracını kullanabileceğiniz gibi XAML kodlarını yazarak da yapabilirsiniz.Benim daha kolayıma geldiği için ben genelde designer tarafına pek bulaşmıyorum.Bu yeni başlayanlar için iyi bir yöntem olmayabilir , fakat XAML kodlarını yazmaya ve birşeyleri kafanızda hızlı bir şekilde oturtmaya başlayınca kod tarafında yazımın daha rahat olduğunu görebilirsiniz 🙂

Boş bir XAML sayfası

Boş bir XAML sayfası

Karşınızda yukarıdaki gibi bir ekran olması lazım.Sağ tarafta tasarımın kodları , sol tarafta ise bir önizlemesi.Bu ekranı görüyorsanız Visual Studio’nun sol tarafında Toolbox’ı da görüyorsunuz demektir.All XAML Controls başlığı altında bu sayfaya ekleyebileceğiniz bütün XAML kontrollerini görebilirsiniz.En çok kullanılan kontrolleri kısa açıklamalarıyla beraber sizler için yazdım.Bir kontrole tıkladıktan genelde sağ altta açılan Properties penceresinde o kontrole ait değiştirilebilir özelliklerin listesini bulabilirsiniz.Aşağıda anlattığım sık kullanılan kontrollerin temel özelliklerinden ziyade dikkat edilmesi gereken yerlerine veya ipucu olarak kullanılabilirliği olan özelliklerine değindim , buyrunuz :

textblock1

  • Textblock : Ekrana belirlenen font ve büyüklük ile yazı yazar.Entry , label vs. olarak diğer platformlarda alternatifleri mevcuttur.Aslında ekranda düz bir yazı göstermek istediğimiz her yerde kullanabiliriz.
    • Background propertsini yoktur.Bu nedenle arkaplan rengini değiştiremezsiniz , her zaman transparandır.

 

textbox1

  • TextBox : Bir yazı girilmesi gereken durumlarda kullanılır.Örneğin bir giriş ekranında kullanıcı adı’nın girildiği yerler birer TextBox’tır.
    • InputScope : Kullanıcı bu TextBox’a tıkladığında girebileceği değerlerin açılması gereken pencereyi belirler.Detaylar için inceleyebilirsiniz.
    • BorderBrush : Kutucuğun çevresindeki kenarların rengini belirler.
    • BorderThickness : Kutucuğun çevresindeki kenarların kalınlığını belirler.4 farklı değer alır , soldan başlamak üzere saat yönünde bütün kenarlar için farklı bir kalınlık değeri girebilirsiniz.(double türünden)
    • SelectionHighlight : Kullanıcı kutucuktaki yazıyı seçtiği zaman seçili alanın hangi renge boyanacağını belirler.

buton1

  • Button : Tıklanabilir bir düğme 🙂
    • Text propertisi yoktur , üzerindeki yazıyı Content propertysini kullanarak değiştirebilirsiniz.Bu property string değil object alır.Bu nedenle içerisinde göstermek istediğiniz yazı haricinde farklı şeyler varsa kod tarafından halledebilirsiniz.(TODO 🙂 )
    • BorderBrush ve BorderThickness propertylerini buton için de kullanabilirsiniz.

checkbox1

  • CheckBox : Bir yazının yanında seçilebilir bir kutucuk içeren kontroldür.
    • IsChecked propertysi kontroldeki kutucuğun seçili olup olmadığını kontrol eder.

 

Yukarıdaki 4 tane görsel kontrolün kısa açıklamalarını yaptıktan sonra artık görsel olmayan XAML kontrollerine geçebiliriz.XAML’da bu görsel kontrolleri ekranda bir düzen içerisinde gösterecek olan konroller de mevcuttur.Stackpanel ve Grid gibi kontrolleri ekrana koyduğunuz zaman varsayılan olarak göremezsiniz.Bunun nedeni bu kontrollerin bir görselliğe ihtiyacının olmamasından ziyade , asıl amacının içerisinde barındırdığı diğer kontrolleri nasıl göstereceğiyle ilgili olmasıdır.

Şimdi yukarıdaki yazı biraz kafa karıştırmış olabilir , şöyle düzeltelim.Stackpanel dediğimiz kontrol , içerisinde birçok görsel element alabilir.Ben ekranda bir Stackpanel koyup içerisinde yüzlerce Button veya TextBlock vs. ekleyebilirim.Stackpanelin amacı bu eklediğim kontrolleri ekrana alt alta veya yan yana göstermesidir.Aşağıdaki iki örnek resmi inceleyerek neyden bahsettiğimi anlayabilirsiniz :

stack1

Orientation = Vertical StackPanel

stack2

Orientation = Horizontal StackPanel

Dikkat ederseniz Orientation propertysine Horizontal değerini verirsem Stackpanel içerisindeki görsel elementler alt alta değil , yan yana sıralanıyor.Hem design hem kod tarafını resimlerde paylaşmayı uygun buldum , çünkü genel olarak XAML kodları nasıl yazılıyor (syntax) görmeniz açısından iyi olacağını düşünüyorum.

Stackpanelin dışında bir de Grid kontrolünü ele almak istiyordum aslında bu yazıda fakat Grid ile ilgili anlatmak istediğim bir çok şey olduğu için bu yazıda ona yer vermeyeceğim.Bir sonraki yazıyı tamamen Grid üzerine yazmak istiyorum.

Temel olarak XAML ile tasarım yapmak için aşağıdaki açıklamaları okumanızda yarar var.Bu açıklamaları birkaç paragrafla anlatmak yerine madde madde yazmanın daha uygun olacağını düşündüm :

  1. Ekrana koyduğunuz her kontrolün Margin propertysi ekranın kenarlarından kaçar pixel boşluk bırakılması gerektiğini ifade eder.Örneğin Stackpanel içerisindeki Button kontrolüne Margin=”10″ yazarsam bütün kenarlarından 10’ar pixel uzaklaşır.Aşağıda Margin’in diğer kullanım örneklerini yazdım :
    1. Margin=”10″ : Bütün kenarlardan 10 pixel uzaklaşır.
    2. Margin=”10,5″ : Sol ve sağ taraftan 10 pixel , alt ve üst taraftan 5’er pixel uzaklaşır.
    3. Margin=”10,5,5,0″ ya da Margin=”10 5 5 0″ : Ilk numara sol taraftan olmak üzere saat yönünde takip eden numaralara göre kenarlardan uzaklaşır.
  2. HorizontalAlignment ve VerticalAlignment propertylerini kullanabilirsiniz.Bu propertyler ile ekrandaki kontrolü ekranın veya dışındaki elementin (Örnek : Stackpanel) ne tarafına hizalanması gerektiğini değiştirebilirsiniz.
    1. Left : Sol hizalar
    2. Right : Sağ hizalar
    3. Center : Ortaya hizalar
    4. Stretch : Bulunduğu konumda ekranı tamamen doldurana kadar hizalama yapar.
  3. Opacity propertysi görsel elementin şeffaflığını temsil eder.Double cinsinden maksimum değeri 1.0 olmak üzere kullanılır.(Örneğin Opacity=”0.6″ yazarsam %60 şeffaflık verebiliim)
  4. Visibility propertysi elementin ekranda görünüp görünmeyeceğini temsil eder.
  5. XAML tarafında koyduğunuz elementlere C# kısmından erişmek istiyorsanız elementlere bir isim vermek zorundasınız.Bunu da x:Name özelliğini kullanarak yapabilirsiniz.Örneğin ben ekrana bir Button koydum ve buna C# kodumdan erişmek istiyorum.XAML tarafında x:Name=”buton1″ yazdığım zaman artık Visual Studio’nun Intellisense’i bu elementi C# tarafında (O sayfaya ait XAML dosyasının .CS uzantılı dosyasında) algılayabilir.
    buton3
  6. Koyduğunuz elementlere ait Eventleri Properties ekranında “Şimşek” simgesine tıklayarak görebilirsiniz.Bu eventlere ait kutucuklara çift tıkladığınız zaman gerekli EventHandler otomatik olarak C# tarafında oluşturulur.
    1. XAML tarafında Event eklemek isterseniz EventAdi=”EventHandlerIsmi” formatında yazabilirsiniz.Örneğin bir butonun Click eventi için ben handlerımı Click=”Button_Clicked” syntaxlıyla XAML tarafında yazabilirim.Zaten Properties penceresinden kutucuğa çift tıkladığınız zaman .cs dsoyasına handler eklenirken XAML dosyasına da bu satır eklenir.

      buton4

    2. Eventin adını yazdıktan sonra tırnakları koyduktan sonra Visual Studio size “<New Event Handler>” seçeneğini sunar.Buna basarsanız otomatik olarak butona ait Event Handler cs kısmında oluşturulur.
  7. XAML’da eklediğiniz kontrollerde mümkün olduğunca düşük Margin değerleri kullanmaya özen gösterin.Toolboxtan ekrana bir kontrol sürükleyip bıraktığınız zaman kod tarafna dönüp bakarsanız otomatik olarak bir Margin değeri ekendiğini görürsünüz.Windows Phone uygulamalarında yaptığınız tasarımların farklı çözünürlüklere sahip bütün cihazlarda aynı görünmesini istiyorsanız tasarımlarınızı bu koşullarda yapmak zorundasınız.Toolboxtan ekranın ortasına sürükleyip bıraktığınız bir TextBlock sizin designer önizleme ekranınızda tam ortada gözükebilir.Fakat şöyle bir olay var ki sürükleyip bırakarak eklediğiniz element varsayılan olarak bir Margin değerine sahip olduğu için çözünürlük ne olursa olsun uygulama çalışmaya başladığında o margin değerlerine sahip olacak.Bu da farklı çözünürlüklere sahip telefonlarda aslında tam ortada gözükmeyeceği anlamına geliyor.Bunun yerine koyduğunuz elementin Margin değerlerini silip HorizontalAlignment ve VerticalAlignment  propertylerini Center yapmanız isediğiniz sonucu verecektir.

7. maddeye uygun tasarımların nasıl yapılacağı aslında biraz sizin görsel parçalama yetinize bağlı.Yaptığınız bir tasarımı bir sonraki yazıda oldukça detaylı anlatacağım Grid kontrolüyle olabildiğince detaylı yaparsanız çözünürlük farketmeksizin her telefonda aynı görüntüde çalışabilir.Yukarıdaki Center’a ayarlama örneği oldukça ufak bir örnekti.Daha kompleks tasarımlara sahip mobil uygulamalarda bu bir yaklaşımda kodlama yeteneğini XAML üzerinde vakit geçirdikte çok kolay bir şekilde anlayabileceğinizi düşünüyorum.

Birden fazla nesneyi ekrana basmak için kullandığımız GridView , ListView , Listbox gibi kontrolleri de ileriki yazılarda inceleyeceğiz.Hepinize iyi çalışmalar 🙂

0
Shares

T2 Mobil Hackathon Maceramız

Bu haftasonu 28 – 29 Mart tarihleri arasında Ankara Cyberpark’ta gerçekleşen T2 Mobil Hackathon’a arkadaşlarım Nejat ve Sezgin ile ben de katıldım.Cumayı Cumartesiye bağlayan gece otobüse atladık , sabah 6:30’da Ankaradaydık 🙂

AŞTİ’de Ankara serüvenimiz başlamış oldu.Etkinliğin başlamasında daha 2.5 saat vardı ve hafif yağmurlu havada mahsur kalmıştık.Bir proje düşünmemiz de gerekiyordu.Bilkent’e giden servislerin Sıhhiye köprüsünün ordan kalktığını öğrenip köprüye doğru servise bindik.Bir çayevine oturup kahvaltı ederken proje fikirlerini tartışmaya başladık.Güzel fikirler ortaya atıldı ve en sonunda Live@’te karar kıldık 🙂

Live@

Live@ , sokak sanatçılarının 10 ile 30 saniye arasında preview ses kayıtlarını telefonunuzdan paylaşıp , diğer sanatçıları keşfetmenizi sağlayan lokasyon bazlı bir mobil platform.Live@ ile gittiğiniz herhangi bir şehirde Keşfet bölümünden hoşunuza gidebilecek sanatçıların kısa demolarını dinleyerek çaldıkları adrese yol tarifi alabiliyorsunuz.Facebook login ile çalışan uygulamada sevdiğiniz sesleri favoriye alabilir , diğer sosyal ağlarda paylaşabilir ya da diğer kullanıcıların görmesini kolaylaştırmak için likelayabilirsiniz.Fikir aşaması , tasarımı , servisi ve clientı ile bir bütün halinde tamamen hackathon süresi içerisinde (yaklaşık 27 saat) ortaya çıkmış , herşeyiyle hatasız çalışan bir platform 🙂

Live@ Logo

Cyberpark’a girdiğimizde girişte kayıtlarımızı yaptırdık.Açılış konuşmasını ve Mustafa Kasap’ın Azure’a giriş konuşmasını dinledikten sonra bir 10 dakika içerisinde planlama ve iş paylaşımı yaptık.Serviste Sezgin , tasarımda Nejat ve clientta bendeniz Burak olarak grup MSP Alpha hackathona hazırdı 🙂

Planlamadan sonra 10:30 – 12:00 arası bir brain storming yaptık.Bu süre içerisinde uygulamanın amacını , çözüm bulduğumuz sorunları , prototip için feature listi ve kullanacağımız teknolojileri tartıştık.Servis için bir ASP.NET Web API , ses dosyaları ve saklanacak diğer dosyalar için Azure Storage , source control için Visual Studio Online üzerinde TFS , client için Windows Phone 8.0 ve veritabanı için de Azure SQL kullanmaya karar verdik.Hem hakim olduğumuz teknolojiler olduğundan dolayı ürünü daha hızlı ortaya çıkartabilecektik hem de arkasında Azure desteği olması gereken bir mobil hackathon olması dolayısıyla hackathon ruhuna bu tarz bir yaklaşımın daha iyi olacağını düşündük.

Sayfa tasarımlarında nelere dikkat etmeliyiz , renk paletimiz nasıl olacak vs. gibi görsel algıları da brain storming sırasında bir gözden geçirdik.Uygulama sayfalarını Nejat aradan çıkartırken biz de Sezgin ile backendde kullanacağımız projelerin hazırlıklarını yapmaya başladık.Servis için bir Azure Mobile Services projesi oluşturabilirdik , fakat Web API ile çalışmak bizim için hız açısından daha mantıklı olduğunu düşündük.

 

Client tarafında bir Universal App yapmayı başta düşünüyorduk , fakat compatibility açısından 8.0 projesinin hem daha hızlı hem de daha çözüm odaklı olduğuna karar verdik.Bir Portable Class Library üzerinden ilerlemeyi , bunun ileriki zamanlarla diğer platformlara uygulamayı çıkarmak için daha kolay olacağını biliyorduk fakat bu hackhaton süresi içerisinde kaynaklarımızı daha fazla harcayacağından dolayı vazgeçtik.Bunun yerine Windows Phone projesi içerisinde daha modüler bir yapı izleyerek aynı code sharingi yakalamaya çalıştık , oldu da 🙂

Bu hazırlıkların ardından Sezgin ile saat 2 gibi artık backend tarafında veritabanı tasarımına başlayabilirdik.1 , 1.5 saatlik bir tasarım sürecinin ardından kodlamaya başladık.Gerek tasarım , gerek sunucu gerekse client tarafında bazı zamanlar ortak bir fikirde karar kılmakta zorlansak da sonuç olarak ortaya tamamiyle çalışan hatasız bir prototip sunabildik 🙂 Bizim için zaten hackathon mantığı da buydu.

Biz bütün bu dizayn aşamalarıyla uğraşırken organizasyonu düzenleyen T2 de bizler için süreci kolaylaştırmak için herşeyi yapıyordu 🙂 Sürekli masamıza gelen ikramlar , yemekler , çerezler , içecekler derken zaten çalışmakan kaytarmak için masa başından ayrılamıyorduk 🙂 Organizasyon tam anlamıyla en ince detayına kadar düşünülmüştü.Gece 12 – 1 gibi uygulamada artık birşeyleri gerçekten ortaya çıkartabildiğimiz fakat neticesinde de enerjimizin taban yaptığı zamanlarda gelen enerji içecekleri çok ince bir detay olmasına rağmen benim gözümden kaçmadı 🙂 Soğuk havada kocaman kazanlarda gelen sıcak çorbalar , ihtiyacınız olduğunda rahat uyuyabileceğiniz karanlık ve geniş bir oda , sırtınız yere gelmesin diye uyurken altınıza alabileceğiniz Microsoft Azure matları falan derken size düşen tek şey de fikrinizi geliştirmek oluyor 🙂 Biz kullandığımız teknolojilere hakim olduğumuzdan dolayı pek mentor arayışına girmedik , fakat bütün bu süreçte etrafta takıldığınız yerde size yardımcı olmak için çabalayan mentorlar da bulunuyor , daha ne !

Çalıştığımız masa ilk günün sonunda (gerçi sürekli çalışma içerisinde bulunduğumuz için bizim için baş – son kavramı pek olmadı) resmen çöplüğe döndü.Heryerde kağıtlara çizilmiş ekranlar , user controller , usbler , detay yazıları , çerez kırıntıları , sandviçler , kola kutuları … 🙂

Masamız ...

Hackathon bitimine doğru jüri sunumu için ufak bir slayt hazırladık.Uygulamayı son olarak birkaç kere daha test ettik , jüri sunumunda yapacağımız demoda aksilikle karşılaşmamak için … 🙂 Artık hazırdık.Jüri sunumları başladı , 3. sırada biz vardık.Jüri üyeleri arasında Mustafa Kasap hocamız da vardı 🙂

Sunumdayız :)

Sunum sırasında Bilkent Cyberpark Genel Müdürü Canan Çakmakçı bize “2015 yılında neden video upload özelliği yok ?” sorusunu yöneltti , biz de video yükleme özelliğinin uygulamanın basitliğine aykırı olduğunu ve müziğin göze değil kulağa hitap eden birşey olduğunu belirttik 🙂 Sunum sırasında belirtmedim fakat bu soru üzerine benim söylemek istediğim birkaç şey daha var açıkçası.Ben bu yaklaşımı 2 farklı şeye benzettim.Birincisi , bu proje Twitter olsaydı , bundan birkaç sene önce olsaydı ve biz de Twitterın kurucuları olsaydık , sunum sırasında bu soruyu sormak “201x yılında sınırsız yazabilme imkanım varken neden 140 karakter ?” sorunusu sormak ile aynı şey 🙂 Ikincisi ise bu yaklaşımı “2020 yılındayız , bu uygulamada neden hologramik görüntüleme desteği yok ?” ya da “Bu uygulama neden Hololenste çalışmıyor ?” yaklaşımına benzetebiliriz 🙂

“Iş modeliniz nedir ?” ya da “Gelir modeliniz nedir ?” sorularına hiç değinmek istemiyorum , çünkü zaten biz bu projeyi geliştirirken tamamen fun project kafasında çalıştık , hatta organizasyona gelirken de bir haftasonu kaçamağı kafasındaydık 🙂 Sunum sırasında bu sorulara tabiki gelir elde edebileceğimiz kaynakları sunduk ki bunun sorulacağını biliyorduk ve hazırlığımızı yapmıştık.Fakat 27 saat içerisinde geliştirilmiş bir prototipten de gelir elde etmeyi beklemek hem hackathon ruhuna aşırı aykırı bir yaklaşım , hem de pek verimli bir yaklaşım değil.Bize göre bu sorunun cevabı 27 saatlik bir hacakthonda verilmesi gereken bir cevap değil ; ürünlerin değil , fikirlerin yarıştığı ve ucunda yatırımın kesin olduğu yarışmalarda verilmesi gereken bir cevap 🙂

Tabiki bu durum yalnızca T2 hackathon jürisine özel bir durum değil , genel olarak herhangi bir hacakthonun sonunda yaşanan bir durum malesef.Biz katılımcılar olarak hackathon jürilerine “Bizim uygulamamız bu kadar para kazandıracak , bakın arkamızdaki sunumda da görüyorsunuz zaten , uygulamayı bitiremedik ama sunumdaki gibi olacak ileride …” demekten ziyade “Biz xx saat aşırı yoğun bir tempoda çalıştık , sonuç olarak bu ürünü çalıştırabilir bir hale getirdik , buyrun cihaz budur , uygulama budur , alın elinizde canlı olarak test ederek değerlendirmenizi yapın” demeyi tercih ediyoruz.Çünkü bizim için hackathon ruhu böyle birşey 🙂 Sunum odaklı bir çalışma ortamı olsaydı biz 27 saat boyunca fikrimizi uygulama haline getirmek için çalışmazdık , bunun yerine 27 saatte dünyanın en göz boyayıcı sunumunu hazırlar , jüriden gelebilecek sorulara en ödül odaklı yanıtları belirler ve ön çalışmamızı yaptıktan sonra karşılarına çıkardık 🙂 Keşke Ankarada geçirebileceğimiz birkaç saat vaktimiz daha olsaydı da blogumda yazmak zorunda kaldığım fikirlerimi canlı olarak tartışabilseydik 🙂

Ikincilik pozumuz :)

 

MSP Alpha ekibi olarak geliştirdiğimiz mobil uygulama Live@ hackathonda ikinci oldu 🙂 Sunumların ardından yapılan kokteylde diğer gruplar ile keyifli sohbetler yaptık , organizasyon ekibiyle çok güzel bağlar kurduk.Özellikle teşekkür etmek istediğim ve bizi hackathon süresince yanlız bırakmayan iki isim ; Soner Altın(a.k.a Soner Abi) ve  Mustafa Kasap , herşey için teşekkürü borç biliyoruz , katıldığım(ız) en keyifli hackathondu ! Bir dahaki sefere görüşmek üzere ! 🙂

0
Shares

Intel Edison – Ilk Bakış , Kurulum , Flashing ve WiFi Bağlantısı Kurma

Herkese merhabalar 🙂 Şubat’ın son günü Microsoft Student Partners Türkiye ekibi olarak Robert Lisesi’ndeki IoT eğitimindeydik.Canavar gibi 20 farklı lise öğrencisine Internet of Things eğitimleri verecek olan ekibimizle bugün ilk kez arkadaşlarla buluştuk.Robert Lisesi benim geçen sene de eğitim verdiğim bir okul olduğundan pek yabancılık çektiğimi söyleyemem açıkçası ^^

Eğitimlerimizi Microsoft’un desteklediği Intel Edison’lar üzerinden gerçekleştireceğiz.3’erli gruplara ayrılan öğrencilerden her gruba 1 Intel Edison verdik.Eğitmenler olarak da bizlere birer tane Edison verildi ve ben akşamına eve gelir gelmez açıp kurcalamaya başladım bile 🙂 Bu yazıda sizlere Windows bir bilgisayar üzerinde Intel Edison kurulumunu , gözlemlediğim farklı detayları ve WiFi ağına bağlanmayı anlatmayı planlıyorum.Bunu öğrenci arkadaşlara da önümüzdeki Cumartesi zaten teknik olarak eğitimde anlatacağım , fakat erken davranırsak daha faydalı olacağını düşünüyorum.

Ilk Bakış

Intel Edison

Intel Edison

Cihazla ilgili speclere bu yazıda pek değinmeyeceim.Nerden kaç volt geliyor , nereye ne gidiyor , osu var mı , şusu var mı diye merak edenler buraya tıklayarak full device spec bilgisini görebilirler 🙂

Daha önce az da olsa Intel Galileo ile uğraşmış birisi olarak söyleyebilirim ki Edison , Galileo’ya kıyasla çok daha akıllı bir board.Aslında dijital – analog kıyaslaması yapabiliriz.Şöyle ki , Edison’u daha narin , bozulmaya yatkın bir dijital olarak düşünürsek bu durumda Galileo’da daha dayanıklı ve daha dummy oluyor 🙂 Bunu neden söyledim çünkü Edison’un üzerinde bulunan microswitchi 2 usb portu bağlıyken power soketinin olduğu yere doğru çekerseniz güzelim boardu yakma şansınız var.Yapmayın , etmeyin.Üzerinde neden 2 farklı usb soketi olduğuna değinmeden önce bunu belirtmemde fayda olduğunu düşündüm.Zaten default olarak o switch aşağıya doğru çekilmiş bir şekilde geliyor.

Edison aslında bir kartvizitin dörtte biri kadar büyüklükte bir bilgisayar.Bir Arduino tabanlı bir board üzerine takılarak kullanılıyor.Yani aslında 2 parçadan oluşuyor , fakat asıl Edison olarak nitelendirebileceğimiz küçük parçanın bazı işlemleri yapabilmesi ve sensörler ile iletişim kurabilmesi için altındaki Arduino boarda ihtiyaç duyduğunu söyleyebiliriz.Küçük parçayı alttaki board üzerindeki vidalardan geçirip soketine oturttuğunuz zaman tam bir microcontroller yaratmış oluyorsunuz aslında.

WP_20150301_01_05_39_Pro

Aşağıdaki boardda ise 3 farklı USB girişi var.Bunlardan biri normal , diğer ikisi micro.2 micro ve 1 normal arasında kalan microswitch ise bunların arasındaki bağlantıyı kontrol ediyor aslında.

Yukarıdaki resimde 2 micro usb soketinin ne işe yaradıklarını görüyorsunuz.Edison üzerinde Ethernet olmadığı için (merak etmeyin , built-in WiFi bulunuyor 🙂 ) bağlantılarımızı seri port üzerinden gerçekleştireceğiz.Köşeye yakın olan micro soket bu iş için kullanılıyor.Diğer soket ise Windows’un Edison belleğine erişmesini sağlıyor ve düşük voltajda elektrik veriyor.Edisonu 2 şekilde güçlendirebilirsiniz :

1) Adaptörünü kullanarak : Servo , sensör , led vb. gibi sensörlerin tüketeceği enerjiyi karşılamak için tercih edilen voltajlama tipi.

2) USB soketi kullanarak :  Yüksek-orta voltaj gerektirmeyen işler yapmak için prize gerek kalmadan Edison’a bilgisayarınızdan elektrik verebileceğiniz voltajlama tipi.

Güç mevzusunu da anlattıktan sonra değinmek istediğim birkaç nokta daha var.Dediğim gibi Edison hassas bir board.Bu nedenle kutuyu açtığınızda size 4 adet plastik tutkaç , 4 adet vida ve 2 adet küçük civata veriliyor.2 küçük civatayı Edison’u altındaki boarda sabitlemek için kullanıyorsunuz.O küçük şeyleri elinizle çevirerek de oturtabilirsiniz , teknik malzemeye gerek bile yok.Diğer 4-er çift malzemeyi de alttaki boardun 4 köşesinde bulunan deliklere takarak boardun herhangi bir yere temas etmeden çalışmasını sağlayabilirsiniz.Boardun abuk subuk yerlerine parmak basmamaya özen göstermeniz de gerekiyor tabi 🙂

Kurulum

Hazırlık – Gereksinimler

(2 adet Micro USB kablosu ya da 1 Micro USB kablosu + Intel Edison adaptörü kurulum için gerekli.)

Kurulum aslında oldukça basit.Yani ben Galileo için uğraştığım kadar uğraşmadım en azından diyebilirim.Adım adım ilerlemeden önce indirmeniz gereken dosyaları tek bir solukta , hemen aşağıda veriyorum :

 

1) FTDI Driver

2) Windows Driver

3) Yocto Linux Complete Image

4) PuTTY

Ilk 2 dosya Windows’un Edison’u tanıması için.FTDI driverını çalıştırırken “Yönetici modunda çalıştırmayı” unutmayın ! Aksi halde zaten setup size hata verecektir.FTDI driverının kurulumu tamamlandıktan sonra sonuç ekranında 3 madde görebilirsiniz.2’si success biri fail olarak.Fail olana aldırmayın , tamamen anlamsız bir hata , çalışmamızı herhangi bir şekilde etkilemiyor.Eğer 2 tane succes görüyorsanız zaten hiç aldırmayın … 🙂 2. driverı ise next – next – next üçlemesiyle basit bir şekilde kurabilirsiniz.

Üçüncü dosya aslında küçük bir Linux dağıtımı.Yocto 🙂 Edison için özelleştirilmiş bir sürüm ki bunu zaten ayarlamaları yaparken göreceksiniz.Arşiv dosyasını indirin ve içindeki dosyaları yeni bir klasöre kopyalayın.

Son dosya PuTTY ise bir SSH clientı.Nokia N9 kullandığım zamanlarda da çok kullanıyordum fakat Lumia’ya geçtikten sonra pek ihtiyacım olmamıştı , tekrar görmek güzel 🙂 Yocto terminaline seri port üzerinden bu araç aracılığıyla bağlanacağız.

Flashlama

Dosyalarımızı indirdik , software kısmında herşeyi hazırladık.Şimdi sırada indirdiğimiz Yocto imajını Edison’a yüklemek var.Güç soketine yakın olan micro usb soketine kabloyu takın ve cihazı bilgisayarınıza bağlayın.Windows , Edison’u tanıyıp hafıza olarak Bilgisayarım’da gösterecektir.

3

Temiz flash atabilmemiz için içindeki dosyaların hepsini silmemiz gerekiyor.Windows’un Edison’a ayırdığı sürücü harfini (benim bilgisayarımda F) baz alarak aşağıda anlatacaklarımı uygulayın :(Tırnakları yazmayın , yazmanız gerekenleri kalın olarak yazdım)

  • Windows tuşu + R ile “Çalıştır” penceresini açıp “cmd.exe” yazın
  • Komut istemcisine sürücü harfi + : yazıp enterlayın.(Örnek F:)
  • Komut istemcisi Edison hafızasına geldiğinde “del *” komutunu uygulayıp onaylayın.(Y yazıp enterlayın)

1

Bu komutlar Edison hafızasını silecektir.Şimdi Yocto Linux arşivindeki dosyaları kopyalayın ve Edison’un içine yapıştırın.Flash diske dosya atar gibi … 🙂

Imajı kopyaladık fakat henüz işimiz bitmedi.Şimdi PuTTY ile seri port üzerinden terminale bağlanıp Edison’un yüklediğimiz imajları kullanması için ayar yapmasını sağlayacağız.

2. USB kablosunu da alttaki sokete takın ve bilgisayarınıza bağlayın.Bu işlemi yaptığınızda artık Edison ile Windows arasında bir haberleşme yapabilecek duruma geliyoruz.Bunun için bizim Edison’un bağlandığı seri portun numarasına ihtiyacımız var. (Örnek COM#)

Aygıt Yöneticisi (Device Manager)’ı çalıştırın.Ports altında artık gördüğünüz gibi bir USB Serial Port (COM#) var.Buradaki # bir sayı ve her bilgisayarda değiştiğinden dolayı # ile gösteriyorum.Ben daha önce Intel Galileo da bağladığım için bu kısımda benim bilgisayarımda onları da görebiliyoruz.ports

Edison’un bağlandığı COM numarasını bir yere not edin ve PuTTY’yi çalıştırın.PuTTY açıldığında sol taraftan Category olarak Session’ı seçin (zaten varsayılan olarak o açılıyor).Connection Type bölümünden “Serial” ı seçin ve aşağıdaki ayarlamaları yapın :

Serial line : Not aldığınız COM numarası (Örnek : COM8)

Speed : 115200

115200 , Edison’un baud rate’i.Baud rate nedir / ne değildir merak edenler araştırabilir 🙂 Bu sayı her zaman 115200 olmak zorunda , yoksa Edison ile haberleşme yapamayız.

Bu ayarları PuTTY üzerinden yaptıktan sonra en aşağıdaki “Open” butonuna basın ve bağlantıyı başlatın.

Yukarıdaki gibi bir ekranla karşılaşmanız gerekiyor.2 kere ENTERa basın.Login ekranı gelecek.Kullanıcı adı olarak “root” yazın ve root olarak giriş yapın.

Yukarıdaki ekrana gelebildiyseniz mükemmel gidiyorsunuz demektir.Fakat işimiz hala bitmedi.Flashlama işlemini tamamlamak için son bir adım daha gerekiyor.Root olarak girişimizi yaptıktan sonra aşağıdaki komutu yazarak flashlama işlemini başlatıyoruz :

reboot ota

Bu komuta enter dedikten sonra PuTTY ekranı bir sürü yazıyla dolacak , panik yapmadan bekleyiniz 🙂 Flashlama tamamlandığında ekranda “Mounting /home” veya “Mounting /boot” tarzı yazılar görebiliyorsanız işlem başarılı olmuş demektir.Fakat “Mounting /factory” gördüyseniz , malesef flashlamayı baştan tekrarlamak zorundasınız :/

Sanırım Intel Yocto’nun son imaj sürümünde karşılama mesajını kaldırmış , ben başarılı bir flashlama yaptığımda hoşgeldiniz tarzı bir mesaj almadım.Ilk flashladığımda Yocto Linux arşivini direkt olarak arşivden Edison sürücüsüne kopyalamıştım , bu nedendendir ki zannediyorum flashlama tamamlanamadı.Çünkü flashlama işlemi sırasında dosyalar üzerinde hash kontrolü yapılıyor ve sanırım bu tarz bir arşivden extract etme olayı bunlara zarar verdi.Fakat bir klasöre çıkartıp oradan kopyalayınca sorunsuzca flashlayabildim.Eğer flashlamanın sonunda Yocto /factory modunda mount ediliyorsa bilin ki bir problem oluştu.Komut istemcisi ekranındaki adımlardan itibaren adımları tekrarlayarak devam edin 🙂

Yocto başarıyla boot edildi.

Yocto başarıyla boot edildi.

Kullanıcı Bilgileri ve WiFi Ayarları

Daha önce Linux kullananlar bilir , bir süper kullanıcı şart 🙂 Edisondaki süper kullanıcımız bizim için “root”.E süper kullanıcıyı da şifresiz kullanmak olmaz.Daha önceden de belirttiğim gibi Intel bu Linux dağıtımını biraz özelleştirmiş ve içerisine Edisonun kurulumunu kolaylaştıracak bazı komutlar eklemiş.Bir kurulum sihirbazı hazırlamış aslında diyebiliriz.Root girişimizi yaptıktan sonra aşağıdaki komutu çalıştırın :

configure_edison –setup

(iki tane – işareti ile)

Eğer bu komutu enterladığınızda kurulum sihirbazı açılmıyorsa malesef Linux tam olarak yüklenememiş demektir.Reboot komutunu kullanarak Edisonu baştan başlatıp tekrar deneyebilirsiniz.Eğer başarısız olursanız tekrardan flashlayıp kurulumu tekrarlayabilirsiniz.

Sihirbaz geldiğinde ilk olarak size bir süper kullanıcı şifresi sorulacak.Ikinci kez girmenizi isteyerek size onaylatacak.

2

Ardından bu Edison’a özel bir isim vermenizi isteyecek.Geçmek için boş bırakabilirsiniz , fakat isim vermek istiyorsanız en az 5 karakter olmalı 🙂 Girdiğiniz ismi size onaylatıp devam edecek.

3

Ismi onayladıktan sonra size WiFi ayarlamayı isteyip istemediğinizi soracak – ne güzel değil mi 🙂

4

Y ile onaylayın.Edison 10-15 saniye etraftaki WiFi ağlarını taradıktan sonra size aşağıdaki gibi bir ekran sunacak :

5

0 : Taramayı baştan yapar.Eksik sonuç gördüğünüze inanıyorsanız taramayı tekrarlayabilirsiniz.

1: WiFi kurulumunu iptal eder.

2: Gizli SSID ağı varsa el ile girmenize izin verir.

Bunlardan sonraki rakamlar etrafınızdaki WiFi ağları.Benim evimdeki ağ ismi “Homie” , bu nedenle 4’e basarak devam ettim.Onayladıktan sonra ağ için gerekli şifre bilgisini girmem gerekiyor.Burda bir önemli nokta var , wireless şifreniz 8 ile 63 karakter arasında olması gerekiyor.Bazı güvenlik protokolleri 8’den düşük karakterlere de izin veriyor , böyle bir ağ varsa malesef Edison ile bağlanamıyorsunuz.O nedenle modem ana sayfanızdan wireless security bölümünden ağ şifrenizi değiştirmeniz gerekebilir.

7

Eğer WiFi ağına bağlantınız başarılıysa yukarıdaki gibi bir ekran göreceksiniz.Edison artık sizin kablosuz ağınıza bağlı 🙂 Tarayıcınızdan açık mavi ekranlı adreslere giderek Edisonun içeriğini görüntüleyebilirsiniz :

8

Tebrikler ! 🙂 Artık istediğiniz zaman PuTTY üzerinden Edison’a bağlanıp kurulum sihirbazında belirlediğiniz root şifresi ile oturum açarak Edison üzerinde geliştirme yapabilirsiniz.Hatta kısa bir örneğini aşağıdaki komutları sırayla PuTTY üzerinden Edison’a göndererek yapabilirsiniz 🙂

node

console.log(‘Merhaba Dünya !’);

Mutlu pazarlar , hack hep sizinle olsun ! 🙂

 

 

0
Shares

MSP Kickoff ’15 ardından

Her güzel şeyin olduğu gibi MSP Kickoff’un da bir sonu var , bunu birkaç gün önce 3. kez anladım 🙂

Kickoff süresince ING Bank Trungers programında olan öğrenciler bizlerleydi.Önümüzdeki 1.5 ay süresince onların fikirlerini MSP’ler olarak hayata geçirmeye çalışacağız.

Halihazırda yürüttüğümüz bir IoT programımız var ve bu hafta Robert Lisesi’nde IoT eğitimlerine de başlıyoruz.Temel C/C++ derslerinden sonra REST API ve Intel Edison ile haberleşme dersini de ben veriyor olacağım.

12 Mart tarihinde büyük ihtimal Elazığ’da olacağım.Kayseri – Eskişehir – Elazığ arasında paylaşılan şehirlerden birine eğitmen olarak gideceğim.Birçok farklı şehirde aynı anda düzenleyeceğimiz bir etkinliğimiz var 🙂

Şu aralar eğitimler için Microsoft’un IoT programından gönderdiği Intel Galileo üzerinde Mono ile C# çalıştırmaya çalışıyorum.Güzel sonuçlar , büyük projeler çıkartırsam bu adresten haberdar olabilirsiniz 🙂

Şu an yaklaşık 7 farklı proje üzerinde çalıştığımdan dolayı Mart ayının sonuna kadar göndereceğiniz maillere geç dönüş yapabilirim , affola 🙁

 

0
Shares

Microsoft Student Partner – Yeni Yeni Dönem :)

Bu tarz bir yazıyı daha kaç kere yazarım bilemiyorum (umarım bu son yazışım olmaz :P).Yine geldik yılın MSP Kickoff zamanlarına 🙂

MSP başvuruları 2 gün önce sonuçlandı ve yeni Microsoft Student Partner’lar belli oldu.Bu dönem de codenightlarda , etinliklerde vs. beni göreceksiniz , çünkü tekrar seçildim 🙂

Bir önceki döneme ait yazdığım yazıya buraya tıklayarak , ondan önceki dönem için yazdığım yazıya ise buraya tıklayarak ulaşabilirsiniz.

Programa yeni kabul edilen arkadaşların her ikisini de okuması tavsiyemdir 🙂 Bu dönem de çok bomba fikirlerimizle yazılım dünyasını sallamaya geliyoruz 😛 Şaka şaka , yine Galileo üstünde iki led yakıp sıcaklığı Azure’a yollayacağız … 😛

Gerçek şaka bir yana , cidden çok iyi fikirlerimiz var.Bu dönem daha çok development ağırlıklı fikirler düşünüyorum , yani bu benim şahsi görüşüm tabi ki programda benden başka yaklaşık 40,45 MSP daha var 🙂 Windows 10 ile beraber Universal Applere olan ilginin artacağını öngörerek Universal App eğitimleri düzenlemeyi düşünüyorum.Bunların bazılarını (hatta aksilik olmazsa haftaya Perşembe ilk eğitimini) Açık Akademi Sanal Sınıf’tan takip edebileceksiniz.

Onun dışında blogum üzerinden yürüttüğüm “Windows Phone Development 101” isimli bir seri var , onu da devam ettireceğim.Bu dönem açıkçası bol bol kod yazıp proje geliştireceğiz gibime geliyor.Yaptığımız bütün etkinlikleri Microsoft Türkiye Blogu‘ndan ve MS Kampüs Facebook sayfasından takip edebilirsiniz.

Yeni gelen arkadaşları kutluyorum , yepyeni bir 6 ay bizi bekliyor ! 🙂

0
Shares