daron yöndem | Microsoft Regional Director | Silverlight MVP
Microsoft Regional Director | Nokia Developer Champion | Azure MVP
Bu yazıyı yazmam 15 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 1 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Yine geldik klasik 1 Nisan yenilenme dönemine :) Evet, biliyorum. Şaka gibi... Neyse :) Bu sene de mutlu haberi aldım ve hem Microsoft Most Valuable Professional programına hem de Microsoft Regional Director programına 2015 için de davet edildim. MVP'lik tarafında tahmin edebileceğiniz üzere "Microsoft Azure" ürünü ile ilgili MVP oldum.

Bu sene Azure konusunda şirkette de çok farklı şeyler yapma şansımız oldu. Aslına bakarsanız birkaç yıldır yaptığımız çalışmaların meyvelerini aldık :) Azure Search'ün global lansmanında production'da Azure Search kullanan tek firma olmanın yanı sıra bunu Türkiye'den bir geliştirme ekibi ile başarmış olmak da ayrı gurur veriyor bana. Tabi sadece Azure Search değil Azure DocumentDB tarafında da ürün grubu ile yakınen çalışma şansımız oldu. Daha önceleri InformationWeek'e verdiğim bir röportajı twitter/facebook'tan paylaşmıştım :) Azure tarafındaki çalışmalarımızı Microsoft ayrı bir başarı hikayesi olarak yayınladı. Tüm bunları yaparken biriktirdiğimiz bilgi ve birikimi de paylaşmaktan çekinmedik :) DocumentDB global lansmanından sadece birkaç gün önce Azure Meetup'da DocumentDB konuştuk. Mayıs'ta da Azure Search konuşacağız. Anlayacağınız yoğun ve hareketli bir yıl oldu ve aynı tempoda devam ediyoruz :) Azure Meetup'lar Azure konusunda en güncel ve sıcak sohbetlerin olduğu yer oldu.

Yukarıdaki görseli yenilemek artık her sene bir klasik oldu :) Ama bu sene farkındaysanız bir değişiklik var. O da "Nokia Developer Champion" programı ile ilgili. Nokia Microsoft tarafından satın alındıktan sonra programı sonlandırdı :) Yani artık "Nokia Developer Champion" diye bir program yok. Üç sene o programda bulunmak güzeldi :) Nokia'nın programı emekli olduğum ilk program oldu.

Bu vesile ile hızlıca, neler oldu, neler bitti ve neler oluyor başlığında bir özet geçmek istedim :)

Görüşmek üzere.

Bu yazıyı yazmam 4 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 1 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Fitness band ve SmartWatch döneminin tam göbeğinde Microsoft tarafından da hybrid bir cihaz duyurulmuştu. Geçen Kasım'da duyurulan cihazı maalesef yeni edinebildim :) Elime geçtiği gibi de kutusunu açarken sizler için bir video çektim. Hemen aşağıda paylaşıyorum;

Bu arada youtube kanalımda yayınladığım her videoyu bloğuma neden post etmediğime dair sorular geldi :) Tembellikten tabi ki. Şaka şaka :) açıkçası her videoyu bloga da atıp etrafına da birkaç cümle (şu an olduğu gibi) geyik sarmak pek hoşuma gitmiyor. Blogu kirletiyormuşum gibime geliyor. Ayrıca şu an için yazılım ağırlıklı bloğumun bu halinde youtube'da yayınladığım her video da anlamlı olmayacaktır. O nedenle, konunun özüne gelirsek, yayınladığım videoları takip etmek istiyorsanız birinci tavsiyem youtube kanalına subscribe olmanız. Sonraki tavsiyelerim ise twitter ve facebook'tan takip etmeniz olacak ama şunu da şimdiden söyliyim, gün gelir yayınladığım bazı videolar için ayrı twitter hesabı vs açmam da gerebilir. Yani özetle, en garantisi siz her yerden takip edin :D Youtube subscribe en iyisi ;) Youtube kanalına illa URL yazıp gideceğim ben diyenler daron.tv adresini de kullanabilirler.

Görüşmek üzere.

Bu yazıyı yazmam 9 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 1 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Bugün Yıldız Teknik Üniversitesi'ndeydim. IEEE'nin düzenlediği 10. ILTEK Günleri etkinliğinde Cloud başlıklı bir oturumda genel olarak Cloud manzarasına göz atıp Microsoft, Google, Amazon neler yapıyor kuş bakışı bir inceledik.

10. ILTEK Günleri, YTÜ, İstanbul

Tahmin ettiğimden daha eğlenceli oldu diyebilirim :) Genelde İstanbul'da şehrin karmaşası içerisinde bir şekilde bu gibi etkinliklerde heyecanı ayakta tutmak zor oluyor. IEEE ekibi ve YTÜ öğrencileri gerçekten güzel iş çıkarmışlar. Oturum boyunca dopdolu salon inanılmaz bir dikkat ile beni dinliyordu, mikrofonun arızalanması bile konsantrasyonumuzu dağıtmadı :)

Buradan her zamanki gibi bu gibi etkinliklerde emeği geçen tüm öğrenci kardeşlerime çok teşekkür ediyorum. IEEE'den daha azını beklemiyordum zaten ;)

Görüşmek üzere.

Bu yazıyı yazmam 12 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 2 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Bu kadar yıldır Anadolu'da birçok şehre, üniversiteye gittim bir türlü kısmet olmadı Sivas'a gitmek :) Bu hafta o da oldu ve Sivas Cumhuriyet Üniversitesi'nin organizasyonundaki "Yönetim İçin Bilişim" adındaki uluslararsı konferansa konuşmacı olarak katılma şansım oldu. Anlatacak o kadar çok şey var ki....

Retro bizim işimiz 😊

A photo posted by Murat Fatih Tuna (@mfttuna) on

Havaalanında beni sevgili Murat Fatih Tuna Hoca karşıladı :) Tabi yukarıdaki gözlüklerle değil :) Peki neden mi o fotoğrafı ekledim bu yazıya? Sadece gözlüğü beğendim diyelim şimdilik, tabi bir de şunu eklemeden geçmemek gerek; öğrenciler Murat Hoca gibi hocalara sahip oldukları için çok şanslılar. Sivas'ta bulunduğum sürede karşılaştığım tüm öğretim görevlisi hocalar inanılmaz içten ve bir o kadar da mesleklerine aşıktılar. Emin olun koca bir blog post yazabilirim bu konu üzerine ve kesinlikle hocalarımızın hepsi de bunu hak ediyorlar....

Övgüyü hak eden sadece hocalarımız değil tabi. Etkinliği organize eden öğrencilerden tutun tüm bölüm öğrencilerine kadar karşılaştığım herkesin heyecanı beni şaşırtmadı desem yalan olur. İnsan yaptığı işi kendi zihinsel sınırları ile tanımlar. Sivas'taki öğrencilerin geleceği inanılmaz parlak. Yeter ki bu heyecanlarını kaybetmesinler.

Sivas, Cumhuriyet Üniversitesi

Tahmin edebileceğiniz üzere ben süper zevk aldım etkinlikte konuşmaktan. Bu etkinlikte teknik olmayan bir sunum olan "Boş Durma Boşa Çalış" başlıktı bir oturumum vardı. Umarım ilk fırsatta teknik bir oturumla da Sivas'ı ziyaret etme şansım olur ;)

Etkinlikte emeği geçen tüm kardeşlerime buradan çok teşekkür ediyorum. Heyecanınızı sakın kaybetmeyin!

Görüşmek üzere.

Bu yazıyı yazmam 11 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 1 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

There we go! Another year has past and it's time to write that annual "MVP MEA Open Day" blog post to keep a historical record of what an amazing week-end it was.

MEA MVP Open Day 2015 Group Photo

This year it's the second time we are having our regional MVP Open Day and this was just another reminder on itself why we should keep doing this! It was soo much fun to meet with friends and geek out. Honestly It just refreshes my enthusiasm about everything related to Microsoft. Long story short :) if you would like to get a feel of how the week-end was for me take a look at the photos we took during the event.

I would like to repeat my thanks to our regional MVP Lead, Hande Kayadeniz and everyone involved making is happen! Keep it up! Love it!

Bu yazıyı yazmam 10 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 1 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Bugün Kültür Üniversitesi'nde ilginç bir oturumdaydım. Oturumu benim için ilginçleştiren öğrencilerin sunumu İngilizce olarak yapmamı istemeleri oldu. Tabi istek esasen hocalarından gelmiş. Aslında çok doğal bir istek, zaten tüm üniversite eğitimini İngilizce olarak alan bir gençliğin böyle bir sunumu da İngilizce almasını istemek bana çok mantıklı geliyor. Diğer yandan salonda yabancı öğrenciler de vardı :)

Kültür Üniversitesi - Cloud 101 Oturumu

Konumuza dönersek, etkinlikte ben hızlı bir girişle klasik "Cloud 101" oturumumu yaptım ve Azure, Amazon ve Google derken genel olarak Bulut Bilişim nedir ve bu firmalar ne yapmaya çalışıyor konusuna değindik. Umarım katılan herkes için faydalı bir oturum olmuştur. Organizasyonda emeği geçen tüm öğrenci kardeşlerime ve sevgili hocalarımıza teşekkür ediyorum ;)

Bu yazıyı yazmam 45 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 2 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Hiç denediniz mi bilmiyorum :) ama eğer ki bir table'dan 1000'den fazla nesneniz varsa.. ki kesinlikle olacaktır. Hatta Table Service'in en kuvvetli yönlerinden biri şu anda SQL Azure 500GB database sınırına sahipken Table Service'de 200TB'a kadar bir table'da data tutabiliyor olmamız :) neyse ne diyordum? :) Evet, denediyseniz :) select çektiğinizde göreceksiniz ki 1000 kayıttan daha fazla kayıt alamıyorsunuz. Durum çok normal çünkü bu da servisin sınırlarından biri. Eğer 1000'den fazla kayıt alacaksanız size gelen "Continuation Token"ı alıp sonra da o token ile ikinci bir REST talebi göndermeniz gerekiyor. Bu arada unutmadan Table Service'de her bir sorgunun çalışma süresinin maksimum 5 saniye olduğunu da bu vesile ile hatırlatiyim ;)

Test Ortamı

İlk olarak isterseniz bir test ortamı yaratalım. Bunun için basit bir nesne yaratıp dummy data insert edebiliriz.

[C#]

CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount;
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
CloudTable table = tableClient.GetTableReference("Urunler");
await table.CreateIfNotExistsAsync();

for (int i = 0; i < 10000; i++)
{
    CustomerEntity customer = new CustomerEntity("Örnek", i.ToString())
    {
        PhoneNumber = Guid.NewGuid().ToString(),
        PartitionKey = "Silver"
    };
    customer = await InsertOrMergeEntityAsync(table, customer);
}

Yukarıdaki kod daha önce gördüğümüz, işlediğimiz mekanizmaları kullanarak 10.000 kayıt atıyor table services'a. Sıra bu veriyi okumaya gelince yine her zamanki TableQuery yapısını kullanacağız. Var sayalım ki söz konusu table içerisindeki bir partitiondaki tüm veriyi almak istiyorsunuz. Bizim örneğimizde de zaten 10.000 satırı tek bir partitiona attığımız için işimiz kolay.

ContinuationToken Kullanımı

TableQuery<CustomerEntity> partitionScanQuery = new TableQuery<CustomerEntity>().Where
    (TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "Silver"));

TableContinuationToken token = null;
do
{
    TableQuerySegment<CustomerEntity> segment = 
        await table.ExecuteQuerySegmentedAsync(partitionScanQuery, token);
    token = segment.ContinuationToken;
    foreach (CustomerEntity entity in segment)
    {
        Console.WriteLine("Kim gelmiş?: {0},{1}\t{2}", 
                entity.PartitionKey, 
                entity.RowKey, 
                entity.PhoneNumber);
    }
}
while (token != null);

ParitionKey üzerinden sorguyu oluşturduktan sonra ExecuteQuerySegmentedAsync derken daha önce yarattığımız bir TableContinuationToken nesnesi veriyoruz. Bu token bize sorgumuzu devam ettirerek 1000 kayıttan sonraki diğer 1000'leri, yani aslında ResultSet içerisindeki diğer sayfaları almamızı sağlayacak. Aslında ilk sorgu çalıştığında bu token'ı ExecuteQuerySegmentedAsync pek bir anlamı yok çünkü zaten ilk başta token null ama sonraki sayfaları çekerken token vererek devam etmemiz gerek. O nedenle kodu baştan bu şekilde yazmak pratik ;) İlk çalışmada sihirli kısım TableQuerySegment kısmı. ExecuteQuerySegmentedAsync'den geri gelen TableQuerySegment ile beraber ContinuationToken geliyor. Biz de zaten bu arkadaşı alıp Do/While dışında tanımladığımız değişkenimize atıyoruz. Bir sonraki turda bu değişkeni ExecuteQuerySegmentedAsync'e verdiğimiz için sorgunun aynı yerden devam ederek geri kalan kayıtların gelmesini sağlamış olacağız.

Böylece büyük verileri sayfalama işini API seviyesinde de halletmiş oluyoruz.

Hepinize kolay gelsin ;)

Bu yazıyı yazmam 100 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 3 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Yavaş yavaş bir sonraki .NET sürümüne doğru yaklaştığımız bu günlerde gelin bu yazıda Visual Basic 14 ile beraber neler geliyor? Neler değişiyor bir göz atalım.

Interface IAtlar
    Sub Hop(kacDefa As Integer)
End Interface

Interface IZiplar
    Sub Hop(kacDefa As Long)
End Interface

Interface ITavsan : Inherits IAtlar, IZiplar
    Overloads Sub Hop(kacDefa As Decimal)
End Interface

İlk olarak aslında yeni bir özellik değil de bir bug-fix'den bahsetmek istiyorum. Esasen bug da değil :) Her neyse, yukarıdaki manzarayı VB 14 öncesi yaratabilmek mümkün olmazken C# ile yapılabiliyordu. Bu durumda da tabi ki bu şekilde C# ile yazılmış kodların VB ile çağrılmasında sıkıntılar oluyordu. Bu durum artık düzeldi :)

Public Class Tavsan
    Implements ITavsan
Public Sub Hop(kacDefa As Long) Implements IZiplar.Hop \#Region "Tehlikeli" Throw New NotImplementedException() End Sub
Public Sub Hop(kacDefa As Integer) Implements IAtlar.Hop Throw New NotImplementedException() \#End Region End Sub
Public Sub Hop(kacDefa As Decimal) Implements ITavsan.Hop Throw New NotImplementedException() End Sub End Class

Basit noktalardan devam ediyorum, heyecanlıları sona saklıyorum :) Artık Region'larınızı metod içinde hatta birden çok metodundan içinden dışından istediğiniz gibi kullanabilirsiniz. Kullanmasanız daha iyi olabilir, bence :D

Partial Interface ITavsan : Inherits IAtlar, IZiplar
    Overloads Sub Hop(kacDefa As Decimal)
End Interface
Partial Module ExtendMyExtensions End Module

Artık Partial Interface ve Module de var! Code-Generation her yerde :)

\#Disable Warning BC42353
Class MainWindow
    Public Function Something() As Integer
End Function End Class \#Enable Warning BC42353

VB'ye de Preprocessor olarak "Warning"leri kapatabilme özelliği geldi. Örneğin yukarıdaki metod bir return value döndürmemesine rağmen normal şartlarda verilmesi gereken hata olan 42353 artık o kod bloğu için verilmiyor. Aslına bakasanız hem bir önceki hem de bu yenilik cross-platform development desteğine yarıyor :) çaktırmayın.

If Not TypeOf sender Is Button Then

Yukarıdaki kodda yeni bir durum yok. Fakat bu gibi bir durumda IsNot kullanamamak kendimi VB yazarken en garip hissettiğim anlardan biri olmuştur yıllardır. İngilizce olarak okunması da çok acı verici bir kod zaten :) Oysa VB İngilizceye yakınlığı ile bilinir.

If TypeOf sender IsNot Button Then

Artık adam gibi, yukarıdaki gibi yazabiliyoruz :) Oh be!

Structure OrnekStruct
    Sub New()
        'Ben geldim!
    End Sub
End Structure

Struct'lara parametresiz constructor geldi! Eğer "New" diyerek structınızı yaratırsanız constructor çalışacak. İstemiyorsanız Nothing diyerek de structı alabilirsiniz. Bu durumda constructor çalışmayacak.

Dim arkadaslar = {"Örnek", 'Buraya yorum yazsak?
            "Örnek2"}

Sanırım yukarıdaki manzarayı açıklamama gerek yok. Eskiden oraya yorum yazmak mümkün değildi. Özellikle çoklu satırlı LINQ sorgularında bu durum çok işe yarayacak.

Public Function Something() As Integer
End Function
Private Sub Grid_Loaded(sender As Object, e As RoutedEventArgs) MessageBox.Show(NameOf(Something)) End Sub

NameOf yeni gelen bir operatör. Artık elle property adı yazmaya son.

Dim nasil = "sevgili;"
Dim metin = $"Merhaba {nasil} dünya!"

Tahmin edin bakalım yukarıda neler oluyor? :) Zamana ihtiyacınız olabilir, itiraf ediyorum. En güzellerini ve bir o kadar da tehlikelileri sona saklayacağımı söylemiştim sanırım. Aslında yukarıda yapılan bildiğimiz String.Format'tan farklı değil ;) Sadece yazması daha kolay.

Dim Metin = "Hoppala paşam
                malkara keşan"
MessageBox.Show(metin)

Budur! :) Artık çoklu satırlı metinleri içeri almak için XML-Literals kullanmaya gerek yok.

Public ReadOnly Property Adi As String = ""

Artık Read-Only Auto Property sahibi olabilirsiniz.

Dim adi = BirUrun?.Adi

İşte geldik en bomba hareketlerden birine. Yeni bir operatör daha karşınızda. Yukarıdaki kod aslında aşağıdaki işi yapıyor.

If BirUrun IsNot Nothing Then
    adi = BirUrun.Adi
End If

Olay bu kadar basit olsa aslında :)

Visual Basic kullanan şurada bir elin parmakları kadar kalmış olsak da Rosyln ve Language Parity idealizmi çerçevesinde bu yeniliklere sahip olabilmek güzel ;)

Görüşmek üzere.

[Dikkat: Bu yazının içeriğinde bahsedilen konular 23 Şubat tarihinde yayınlanmış olan Visual Studio 2015 CTP 6 kullanılarak düzenlenmiştir.]

Bu yazıyı yazmam 16 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 1 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Her ay gerçekleştirdiğimiz Istanbul Azure Meetup'ın bu ayki konusu NOSQL'di :) Şirkette çalışmalarımızı takiben yaklaşık 1.5 yıldır DocumentDB ile uğraşıyoruz. Public Preview çıkmadan 8-9 ay öncesinden bahsediyorum :) Ürün grubu kodu yazarken oradaydık desem abartmış olmayabilirim :) Şaka bir yana tüm bu yakın çalışmanın sonucunda hem biraz deneyimlerimizi ekip olarak aktarabilelim hem de Azure tarafında NOSQL manzarasına genel bir bakış atalım istedim. O nedenle bu ayın konusu NOSQL oldu :)

Microsoft Student Partner Kick-Off Toplantısı

XOMNI'deki ekipten sevgili İlkay İlknur DocumentDB (Document-Store) konusunu anlatırken ben de çoğunuzun az-çok aşikar olduğunu tahmin ettiğim Azure Table Services (Key-Value Store)'ı anlattım. Sonrasında da topluca biraz sohbet ettik, RavenDB, Mongo, DynamoDB vs :)

Ben kullandığım sunumu speakerdeck hesabımdan paylaştım. Önümüzdeki aylarda yapacağımız buluşmalardan haberdar olmak için meetup.com'daki sayfamıza kaydolmayı unutmayın ;)

Görüşmek üzere.

Bu yazıyı yazmam 12 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 1 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Dün Türkiye'deki MSP (Microsoft Student Partner) programının açılış etkinliğindeydim :) Etkinlikte biraz kişisel gelişim, kariyer ve biraz da Azure konuştuk gençlerle. Ülkedeki Azure konusundaki eksiklere artık şaşırmıyorum. Alıştım :) ama emin olun Cloud'un ne olduğunu bilmeyen veya bilerek saptıran kurumlara karşı bilinçli bir gençlik geliyor :) Birkaç üniversite oturumu ile bu kadar optimist olmam garip gelebilir ama optimizm iyidir ;)

Microsoft Student Partner Kick-Off Toplantısı

Gün boyunca diğer gördüğüm bir sorun ise aslında ilk defa tanışmadığım ve mentorluk yaptığım gençlerde de gördüğüm bir "çok şey öğrenmeliyim" sendromu :) Bu konuda uzun uzun konuşabilirim fakat özünde beni "Uykudan Önce Bir Doz" gibi başka kitaplar yazmaya da itiyor diyebilirim. Nasıl ki bundan bir süre önce "Hangi programlama dilini öğrenmeli?" sorusuna biraz garip bir cevap verdiysem aslında gençlerin kendi içlerinde sordukları çoğu sorunun yanlış cevapları aradığını düşünüyorum. Yavaş yavaş bu konunun bir "nesil" farkı yansıması olduğunu da düşünmeye başlıyorum. Anlayacağınız bu konuda bir şeyler paylaşabilmek için biraz daha düşünmem ve hazırlanmam gerekiyor :)

MSP açılış etkinliğinde beni misafir eden, Microsoft'tan sevgili Mustafa Kasap'a buradan teşekkür ediyorum. Benim için çok eğlenceli bir kaç saat oldu. Umarım gençler için de faydalı olmuştur ;)

Görüşmek üzere.

Twitter
RSS
Youtube
RSS Blog Search
Arşiv'de tüm yazıların listesi var. Yine de blog'da arama yapmak istersen tıkla!
Instagram Instagram