Arda Çetinkaya Yazılım ve arada kendim ile ilgili karaladıklarım…

Microsoft’tan Ümit Sunar, Windows Azure ile ilgili, baştan sona güzel bir giriş webiner serisi hazırlamış. Biraz geç paylaşıyorum ama seri daha başında ve devam ediyor. Windows Azure hakkında biraz olsun bilgi sahibi olup ama nereden başlayıp nereye gitmek konusunda soru işaretleri olanlara şiddetle tavsiye ederim…Kaçırmayın…

#1 – Windows Azure Overview: Cloud?

Title: Windows Azure Overview: Cloud?
Description: “Starting is Half the Task” and this session targets to give an overview of Cloud Computing and Windows Azure in your journey.
We’ll answer frequently asked questions such as “What is Windows Azure?”, “How Cloud Computing may help you?” and share Windows Azure resources that’ll help you to accelerate your adoption to Windows Azure
– Windows Azure InfoKit (http://aka.ms/WAInfoKit )
– Windows Azure Learning Poster (http://aka.ms/LearningPoster )
– Windows Azure Training Kit (http://aka.ms/g2jucu )
LiveMeeting URL: https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032565435&Culture=en-TR&community=0
Date/Time: 9/24/2013 – 3:00pm – 4:30pm
Click here to see in your local time: http://bit.ly/18RmDHF


#2 – Windows Azure Web Sites: Create your Web Site in the Cloud in 5 min

Title: Windows Azure Web Sites: Create your Web Site in the Cloud in 5 min
Description: Windows Azure Web Sites is a simple and powerful hosting platform that helps you to easily build and deploy your web applications. You can develop using ASP.NET, PHP, Node.js and Python with your favorite frameworks (MVC 4, Django, Express), integrate with source control systems and manage with PowerShell, REST API or CLI Tools.
LiveMeeting URL: https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032565443&Culture=en-TR&community=0
Date/Time: 10/01/2013 – 3:00pm – 4:30pm
Click here to see in your local time: http://bit.ly/19wUM0o


#3 – WAMSA #1: Windows Azure Mobile Services Academy

Title: WAMSA #1: Windows Azure Mobile Services Academy
Description: Mobile Services is state of the art cloud backend for all kind of applications and you can integrate it with almost all kind of applications. This session covers the basics of Windows Azure Mobile Services, integration with Windows Store, Windows Phone 8, iOS (iPhone, iPad), Android and HTML applications, authentication and authorization with Microsoft Account, Facebook, Twitter, Google, push notifications, source control and custom API.
Extending your applications is really simple and beneficial with Windows Azure Mobile Services.
LiveMeeting URL: https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032565445&Culture=en-TR&community=0
Date/Time: 10/10/2013 – 3:00pm – 4:30pm
Click here to see in your local time: http://bit.ly/15lH5FJ

Devam…

Veritabanı uygulamaları yapan her yazılımcı, bir şekilde zamanı geldiğinde; -ki kesin gelir, veritabanı üzerinde çeşitli performans kriterlerine dikkat etmek durumda kalır. Çeşitli kontroller ile sistemin performansını ölçüp, gerekirse iyileştirmeleri bunların sonuçlarına göre yapar…

SQL Server ile uygulama geliştirirken zaman zaman kullandığım ve oldukça işime yarayan, hatta çoğu zaman hayat kurtarmaya bile destek sağlayan bir kaç SQL script’ini derledim. Benzerleri hatta daha faydalı olanlarını Google’da da çok rahat bulabilirsiniz. Burada benim işimi görenleri derleyip paylaşmak istedim, belki birilerinin daha işini görür.

En çok CPU tüketen 50 sorgu


select
 q.,
 SUBSTRING(q.text, (qs.statement_start_offset/2)+1,
 ((CASE qs.statement_end_offset
 WHEN -1 THEN DATALENGTH(q.text)
 ELSE qs.statement_end_offset
 END - qs.statement_start_offset)/2) + 1) AS statement_text,
 qs.last_execution_time,
 qs.execution_count,
 qs.total_worker_time/1000000 as total_cpu_time_sn,
 qs.total_worker_time/qs.execution_count/1000 as avg_cpu_time_ms,
 qp.query_plan,
 DB_NAME(q.dbid) as database_name,
 q.objectid,
 q.number,
 q.encrypted
from
 (select top 50
 qs.last_execution_time,
 qs.execution_count,
 qs.plan_handle,
 qs.total_worker_time,
 qs.statement_start_offset,
 qs.statement_end_offset
 from sys.dm_exec_query_stats qs
 order by qs.total_worker_time desc) qs
cross apply sys.dm_exec_sql_text(plan_handle) q
cross apply sys.dm_exec_query_plan(plan_handle) qp
order by qs.total_worker_time desc

En çok I/O yapan 50 sorgu


select
 q.,
 SUBSTRING(q.text, (qs.statement_start_offset/2)+1,
 ((CASE qs.statement_end_offset
 WHEN -1 THEN DATALENGTH(q.text)
 ELSE qs.statement_end_offset
 END - qs.statement_start_offset)/2) + 1) AS statement_text,
 qs.last_execution_time,
 qs.execution_count,
 qs.total_logical_reads as total_logical_read,
 qs.total_logical_reads/execution_count as avg_logical_read,
 qs.total_worker_time/1000000 as total_cpu_time_sn,
 qs.total_worker_time/qs.execution_count/1000 as avg_cpu_time_ms,
 qp.query_plan,
 DB_NAME(q.dbid) as database_name,
 q.objectid,
 q.number,
 q.encrypted
from
 (select top 50
 qs.last_execution_time,
 qs.execution_count,
 qs.plan_handle,
 qs.total_worker_time,
 qs.total_logical_reads,
 qs.statement_start_offset,
 qs.statement_end_offset
 from sys.dm_exec_query_stats qs
 order by qs.total_worker_time desc) qs
cross apply sys.dm_exec_sql_text(plan_handle) q
cross apply sys.dm_exec_query_plan(plan_handle) qp
order by qs.total_logical_reads desc

Index’lerin fragmentation oranları

Devam…

SQL Saturtday

5 Ekim 2013’de, İstanbul’da, Microsoft Türkiye ofisinde SQL ile ilgili oldukça geniş kapsamlı bir etkinlik var.  5 farklı paralel konu başlığı altında, SQL Server’ın çeşitli kırılımlarını bu etkinlik ile takip edebileceksiniz. Etkinliğe yurt dışından olarak gelen konuşmacılar da olacak. Dolayısıyla etkinlik dili İngilizce, bunu belirtmekte fayda var.

Etkinlik ile ilgili daha fazla bilgi ve kayıt için http://www.sqlsaturday.com/258/eventhome.aspx adresini ziyaret etmeniz yeterli olacaktır. Bir şekilde SQL Server ile çalışıyorsanız, mutlaka kaçırmamanız gereken bir etkinlik. Tavsiye ederim…

Etkinlik programı ve içeriğini aşağıdan takip edebilirsiniz.

Start Time Azure – Room: Mira BI – Room: Vega DBA – Room: Jupiter 1 DEV – Room: Jupiter 2 SQL Server 2014 – Room: Adara
08:30 AM SQLSaturday 258

Registrations

Level: Non-Technical

SQLSaturday 258

Registrations

Level: Non-Technical

SQLSaturday 258

Registrations

Level: Non-Technical

SQLSaturday 258

Registrations

Level: Non-Technical

SQLSaturday 258

Registrations

Level: Non-Technical

09:15 AM SQLSaturday 258

Opening Speech

Level: Non-Technical

SQLSaturday 258

Opening Speech

Level: Non-Technical

SQLSaturday 258

Opening Speech

Level: Non-Technical

SQLSaturday 258

Opening Speech

Level: Non-Technical

SQLSaturday 258

Opening Speech

Level: Non-Technical

09:45 AM Daniel Sol

Windows Azure for the DBA

Level: Beginner

David Peter Hansen

10 Tips and Tricks for better SSIS Performance

Level: Advanced

Işıl Efe

Performance Tuning with DMVs

Level: Intermediate

Andreas Wolter

“SQL Attack…ed” – SQL Server under attack.

Level: Advanced

Belkis Ozhorasan

Features Coming With Microsoft SQL Server 2014

Level: Beginner

11:00 AM Umit Sunar

Overview, Best Practices and Lessons Learned on SQL Server in Windows Azure Virtual Machines

Level: Intermediate

Oliver Engels Tillmann Eitelberg

Power Query: The ETL bit of Microsoft Self-Service BI

Level: Intermediate

Batuhan Yildiz

The Internals of SQL Server Wait Types

Level: Advanced

Sergey Olontsev

Query Optimizer and Statsitics

Level: Intermediate

Yigit Aktan

In-Memory OLTP Project (Hekaton) – A new Adventure

Level: Intermediate

12:00 PM SQLSaturday 258

Lunch Break

Level: Non-Technical

SQLSaturday 258

Lunch Break

Level: Non-Technical

SQLSaturday 258

Lunch Break

Level: Non-Technical

SQLSaturday 258

Lunch Break

Level: Non-Technical

SQLSaturday 258

Lunch Break

Level: Non-Technical

01:15 PM Daniel Sol

SQL Performance and Monitoring in Windows Azure at Scale

Level: Intermediate

Kagan Arca

Leveraging Hadoop Cluster from SSIS

Level: Advanced

Klaus Aschenbrenner

Fast your seatbelt – Troubleshooting the most difficult SQL Server problems

Level: Advanced

Denis Reznik

Deadlock detected! All is lost or it’s too early to sound the alarm?

Level: Intermediate

Niko Neugebauer

Clustered Columnstore – Introduction

Level: Beginner

02:30 PM Mihail Mateev

Spatial Data and Windows Azure SQL Database

Level: Intermediate

Koray Kocabas

Data Mining using SQL Server

Level: Advanced

Sibel Nal

Corrupt Database Adventures

Level: Intermediate

Turgay Sahtiyan

Top 10 Performance Tips for SQL Server Developers

Level: Intermediate

Niko Neugebauer

Deep Dive into Clustered Columnstore

Level: Advanced

03:45 PM Mihail Mateev

Power BI for Office 365 – a Complete Self-Service BI in the Cloud

Level: Intermediate

Mustafa Acungil

PMI and Agile Principals in BI Projects

Level: Non-Technical

Sergey Olontsev

Query Plan Operators Deep Dive

Level: Advanced

Tillmann Eitelberg Oliver Engels

Data Quality rulez! Integration and Performance be

Level: Advanced

Osman Cokakoglu Emrah Uslu

Business Intelligence and Data Visualization Enhancements

Level: Intermediate

05:00 PM SQLSaturday 258

Raffle

Level: Non-Technical

SQLSaturday 258

Raffle

Level: Non-Technical

SQLSaturday 258

Raffle

Level: Non-Technical

SQLSaturday 258

Raffle

Level: Non-Technical

SQLSaturday 258

Raffle

Level: Non-Technical

 

 

27 Eylül 2013’de, Agile Turkey, oldukça geniş bir içerikle, dünyada Agile yazılım metodu ile çalışan, konusunda hakim bir çok ismi güzel bir etkinlik için İstanbul’da bir araya getiriyor. Bütün gün sürecek, 8 parallel sunum ile Agile yazılım metodolijisinin dokunduğu her konu ile dolu dolu geçecek etkinlik, İstanbul’da gerçekleşecek. Konuşmacılar ve programın özetini aşağıda bulabilirsiniz. Etkinlik ne yazık ki ücretli ve ne yazık ki çabuk tükeniyor. Daha fazla ayrıntı ve bir an önce kayıt olmak için http://www.summit.agileturkey.org/ adresini ziyaret edebilirsiniz.

Agile Turkey Summit

Program

Untitled1

Process,Thread,Task,Parallel Programming falan derken, .NET Framework’ün yeni versiyonları ile sürekli bu konularda yeni özellikler geldi durdi. Bu yazıda bu özelliklerden bir tanesini, çok basit bir örnekle anlatmaya çalışacağım. Bir çoğunuz belki hali hazırda kullanıyorsunuzdur bile.

Multithread uygulama geliştirirken ya da biraz daha belirli olması adına, .NET’de Task‘lar ile uğraşırken, bazen Task’larımızı çeşitli senaryolara göre iptal edip durdurmamız gerekebilir. Bu iptal işleminden sonra, başka bir operasyonu tetikleyip akışı değiştirebilir, ya da Task’lar içerisinde dolaşacak objelerimizin durumlarını kontrol edebiliriz. Bu kadar derinlere girmeden bu iptal işini nasıl yapabiliriz buna bakıyor olacağız.

.NET 4.0 ile beraber gelen, CancellationTokenSource sınıfı, geliştirdiğimiz metodlarda iptal işlemlerini yapabilmemizi sağlayan oldukça basit bir alt yapı sunuyor.

Hepimizin zamanında oynadığı bir oyun üzerinden gidelim. Person X diye bir kişi olsun ve bu kişi 0’dan başlayıp içinden saysın, ta ki Person Y dur diyene kadar…Yani 2 tane farklı Task’ımız olacak. Bir tanesi basit bir döngü içerisinde sayıları sayma işlemini yapacak. Diğer Task’ımız da, t zamanında “DUR” diyecek. Bu senaryomuz da t zamanını da 1-5 saniye arası değişken bir zaman yapıp, biraz daha gerçekci hale getirebiliriz senaryomuzu.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace CancellationDemo
{
    class Program
    {

        static void Main(string[] args)
        {

            CancellationTokenSource cancel = new CancellationTokenSource();

            Program p = new Program();

            //Sayma işlemini gerçekleştirecek Task'ı
            //başlatıyoruz. Dikkat ederseniz Task'a
            //parametre olarak "İptal" işini kontrol
            //eden CancellationTokenSource tipinde
            //yarattığımız nesneyi veriyoruz.
            var task1 = Task.Factory.StartNew(()
                => p.CountNumbers(cancel.Token), cancel.Token);

            //t zamanında "DUR" diyecek olan diğer
            //Task'ı başlatıyoruz.1-5 saniye arasında
            //bir zamanda CountNumbers metodunun
            //durmasına sebep olacak.
            var task2 = Task.Factory.StartNew(()
                => p.Stop(cancel));

            Console.ReadLine();
        }

        protected void CountNumbers(CancellationToken cancellationToken)
        {
            int number = 0;
            for (int i = 0; i < 100000; i++)
            {
                number = i;

                //Sayıları ekrana yazdırıyoruz.
                Console.WriteLine("Person X: "+ number.ToString());
                Thread.Sleep(80);

                //CancelationTokenSource tipindeki nesnemizin
                //CancelationToken tipindeki Token özelliğininden
                //IsCancellationRequested değerine bakıyoruz.
                //Bu değer eğer CancelationTokenSource nesnemizin
                //Cancel() metodu çağırılsa, iptal işleminin
                //gerçekleşmesi gerektiğini bildirmek adına
                //true olacaktır.
                if (cancellationToken.IsCancellationRequested)
                {
                    //İptal işlemi gerçekleşti
                    //Mevcut son sayıyı ekrana yazdıralım.
                    Console.WriteLine("Current number is:" + number.ToString());
                    break;
                }
                else
                {
                    Console.Clear();
                }
            }

        }

        //Sayma işlemini İptal edeceğimiz Task'ın metodu
        protected void Stop(CancellationTokenSource tokenSource)
        {
            //t zamanda iptal işlemini gerçekleştirmek
            //için Random olarak bir saniye değeri
            //üretiyoruz.
            Random waitTime = new Random();
            int seconds = waitTime.Next(1 * 1000, 6 * 1000);

           //Ürettiğimiz saniye kadar bekliyoruz.
            System.Threading.Thread.Sleep(seconds);
            Console.WriteLine("Person Y: STOP!!!!!!");

            //CancellationTokenSource objemizin Cancel()
            //metodunu çağırarak,CancellationTokenSource
            //nesnesine sahip olan diğer Task
            //işlemlerinin iptal edilmesi için ilgili
            //bildirimi yapıyoruz.
            tokenSource.Cancel();
        }
    }
}

Uygulamamızı çalıştırdığımız zaman aşağıdaki gibi bir ekran görüntüsü ile karşılaşıyor olacağız. t zamanından dolayı da her seferinde farklı sonuç veriyor olacaktır.

CancellationTokenSource

Oldukça basit bu kullanımı geliştirip, kendi çözümleriniz için kullanmanız mümkün. Bir senaryoda benim işime oldukça yaratı. Umarım size de faydalı olur…