Api | Engin Polat\'ın Windows 8 , Windows Phone 8 ve C# içerikli programcılık sitesi

Arşiv

Etiketlenen yazılar api

HTML5 video element ile cihazın Camera görüntüsünü göstermek

20 April 2016 1 yorum

HTML5 ile birlikte gelen video element içerisinde navigator.getUserMedia API method’u sayesinde Javascript aracılığı ile cihazın Camera görüntüsünü gösterebiliyoruz.

Bu makale ile adım adım ilerleyerek, cihazın Camera gösüntüsünü video element içerisinde gösteren bir sayfa oluşturacağız, hemen yeni bir html dosyası oluşturalım ve içine aşağıdaki kodları yazalım;

Sayfaya bir video element ekleyeceğiz, Javascript aracılığı ile cihazın Camera görüntüsünü alacak, video element içerisinde göstereceğiz. Bunun için aşağıdaki kodları <body></body> element içerisine ekleyelim;

Böylece, sayfa açıldığında navigator nesnesinin getUserMedia method’unu kullanarak cihazın Camera görüntüsüne ulaşmayı deniyoruz.

Not : Eğer audio filtresine false değeri yerine true değeri verirsek sesleri de almaya başlarız.

Eğer camera‘ya başarılı bir şekilde erişebilirsek, window.URL.createObjectURL() methodu ile Camera‘nın görüntüsünü istediğimiz video element içerisinde oynatmaya başlayabiliyoruz.

Sayfa ilk açıldığında kullanıcıdan Camera‘ya erişmek için izin istenir.

Gerekli izin verildikten sonra Camera görüntüsü, ilgili video element içerisinde oynatılmaya başlanır.

Eğer Camera görüntüsünü durdurmak istiyorsak, stream‘in stop() methodunu çağırmamız yeterli.

Ayrıca, CSS3 stillerini kullanarak Camera görüntüsü üzerine efekt‘ler de uygulayabiliriz. Bakınız, HTML5 video element CSS3 ile efekt uygulamak

Eğer Camera görüntüsünün çözünürlüğünü değiştirmek istersek, navigator.getUserMedia() methodunun ilk parametresinde basitçe video: true yazmak yerine, istediğimiz çözünürlüğü aşağıdaki gibi belirtiyoruz;

Windows Phone için Bing arama uygulaması

02 August 2013 1 yorum

Windows Phone uygulamamıza internetten arama özelliği eklememiz gerektiği durumda, Bing arama motorunun API desteği olduğu için bunu yapabilmemiz çok zor olmayacaktır.

Windows Azure Markeplace üzerinden erişebileceğiniz Bing Search API – Web Results Only API sayfasından Bing Web Search API kullanım bilgilerine erişebiliriz, gerekli yetkiyi alabiliriz.

İlk olarak Sign In linkine tıklayarak oturum açalım ve aylık 5000 aramayı ücretsiz yapabilmemize olanak sağlayacak Sign Up butonuna tıklayarak gerekli yetkiyi alalım.

Sign Up butonuna tıkladığınızda ekrana sözleşme şartlarını kabul etmenizi sağlayacak bir ekran gelecek. Basitçe ileri-ileri diyerek geçebileceğiniz ekranlardan sonra aylık 5000 aramayı ücretsiz yapabileceğiniz yetkiyi almış olacaksınız.

Gelelim Windows Phone 8 projemize;

MainPage.xaml dosyasını açarak tasarımı aşağıdaki gibi olacak şekilde değiştirelim;

<phone:PhoneApplicationPage
	x:Class="BingSearchSample.MainPage"
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
	xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
	xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
	xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
	mc:Ignorable="d"
	FontFamily="{StaticResource PhoneFontFamilyNormal}"
	FontSize="{StaticResource PhoneFontSizeNormal}"
	Foreground="{StaticResource PhoneForegroundBrush}"
	SupportedOrientations="Portrait" Orientation="Portrait"
	shell:SystemTray.IsVisible="True">

	<StackPanel>
		<StackPanel Orientation="Horizontal" Margin="10,0,0,0">
			<Image Source="/Assets/bing-logo.png" Width="120" Height="45" />
			<TextBox Name="SearchKey" Width="350" InputScope="Search" KeyUp="SearchKey_OnKeyUp" />
		</StackPanel>

		<phone:LongListSelector Name="SearchResultList" Height="655" SelectionChanged="SearchResultList_OnSelectionChanged">
			<phone:LongListSelector.ItemTemplate>
				<DataTemplate>
					<StackPanel Margin="0,0,0,30">
						<TextBlock Text="{Binding Title}" Style="{StaticResource PhoneTextTitle2Style}" />
						<TextBlock Text="{Binding Description}" Style="{StaticResource PhoneTextSmallStyle}" TextWrapping="Wrap" />
						<TextBlock Text="{Binding DisplayUrl}" Style="{StaticResource PhoneTextAccentStyle}" />
					</StackPanel>
				</DataTemplate>
			</phone:LongListSelector.ItemTemplate>
		</phone:LongListSelector>
	</StackPanel>

	<phone:PhoneApplicationPage.ApplicationBar>
		<shell:ApplicationBar>
			<shell:ApplicationBarIconButton IconUri="/Assets/feature.search.png" Text="ara" Click="SearchButton_OnClick"></shell:ApplicationBarIconButton>
		</shell:ApplicationBar>
	</phone:PhoneApplicationPage.ApplicationBar>

</phone:PhoneApplicationPage>

Bir StackPanel içerisine Bing logosu ve arama kelimesinin girileceği TextBox nesnesini ekliyoruz;

<StackPanel Orientation="Horizontal" Margin="10,0,0,0">
	<Image Source="/Assets/bing-logo.png" Width="120" Height="45" />
	<TextBox Name="SearchKey" Width="350" InputScope="Search" KeyUp="SearchKey_OnKeyUp" />
</StackPanel>

SearchKey isimli TextBox nesnesinin InputScope özelliğine Search değerini veriyoruz, böylece TextBox‘a giriş yaparken klavye’de arama butonu gözüküyor olacak;

Sayfaya ApplicationBar, içerisine de ApplicationBarIconButton ekliyoruz, icon olarak feature.search.png dosyasını kullanacağız.

SDK ile birlikte bilgisayarınıza yüklenen örnek icon‘lara aşağıdaki yol ile ulaşabilirsiniz;

C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Icons

Arama kutusuna kelime girerken arama butonuna basıldığında veya ApplicationBar‘daki arama butonuna basınca Bing üzerinde arama yapacağız, TextBox‘ın KeyUp event’ini ve ApplicationBarIconButton‘ın Click event’ini yakalıyoruz;

private void SearchKey_OnKeyUp(object sender, KeyEventArgs e)
{
	if (e.Key == Key.Enter)
	{
		SearchBing();
	}
}

private void SearchButton_OnClick(object sender, EventArgs e)
{
	SearchBing();
}

Asıl arama olayının döneceği SearchBing() method’unu yazmadan önce projemizde yapmamız gereken düzenlemeler var.

Projenin References‘ına sağ tuşla tıklayıp Nuget Package Manager penceresini açalım ve Microsoft.Data.Services.Client paketini aratalım, OData Client for Windows Phone Apps paketini projeye ekleyelim;

Bing Search API – Web Results Only sayfasından bulabileceğiniz .NET C# Class Library class dosyasını indirip projeye ekliyoruz.

Gelelim SearchBing() method’una;

private void SearchBing()
{
	SystemTray.SetProgressIndicator(this, new ProgressIndicator
	{
		IsVisible = true,
		IsIndeterminate = true,
		Text = "Bing üzerinden arama yapılıyor..."
	});

	var searchUri = new Uri("https://user:[AccountKey]@api.datamarket.azure.com/bing/search");

	var container = new BingSearchContainer(searchUri);
	var query = container.Web(SearchKey.Text, null, null, null, null, null, null, null);

	query.BeginExecute(ar =>
	{
		var state = ar.AsyncState as DataServiceQuery<WebResult>;

		if (state != null)
		{
			var result = state.EndExecute(ar);

			if (result != null)
			{
				Dispatcher.BeginInvoke(() =>
				{
					SearchResultList.ItemsSource = result.ToList();

					SystemTray.SetProgressIndicator(this, null);
				});
			}
		}
	}, query);
}

İlk olarak SystemTray sınıfının static SetProgressIndicator method’unu çağırıyoruz, böylece arama başladığında ekranın üstünde ilerleme çubuğu belirecek;

Bing Search API – Web Results Only sayfasından elde edeceğiniz AccountKey ile Bing Search Uri oluşturuyoruz.

BingSearchContainer sınıfından yeni bir instance oluşturup, Web() method’unu çağırıyoruz, parametre olarak arama kelimemizi veriyoruz.

BeginExecute() method’u ile aramayı başlatıyoruz, gerekli kontrolleri yaptıktan sonra arama sonuç listesini Dispatcher.BeginInvoke içerisinde ekrandaki LongListSelector nesnesine bağlıyoruz.

Son olarak, LongListSelector içerisinde listelenen öğelerden birine tıklandığında ilgili adrese gitmesi için SelectionChanged event’ini yakalıyoruz;

var item = SearchResultList.SelectedItem as WebResult;

if (item != null)
{
	var webBrowserTask = new WebBrowserTask { Uri = new Uri(item.Url, UriKind.Absolute) };
	webBrowserTask.Show();
}

Windows Phone 8 ile telefonun koordinatlarını bulma

16 July 2013 2 yorum

Windows Phone 8 SDK ile birlikte coğrafi konum API güncellendi, yeni API ile birlikte Geolocator sınıfı kullanımımıza açılmış oldu.

Windows Phone 7.5 SDK‘da yer alan GeoCoordinateWatcher sınıfı halen kullanımda, fakat özellikle Windows Phone 8 destekleyecek uygulamaların yeni Geolocator sınıfını kullanması tavsiye ediliyor.

Geolocator sınıfını kullanarak cihazın yerini bulmamız ve takip edebilmemiz mümkün.

Telefonun yerini bir defa bulmamız gerekiyorsa basitçe GetGeopositionAsync() methodunu çağırmamız yeterli.

Geolocator sınıfı ayrıca, PositionChanged event‘i sayesinde konumu takip edebilmemize de olanak sağlıyor.

Uygulama içerisinde konum bilgisini okuyabilmek için WMAppManifest.xml dosyasında Capabilities tabında yer alan ID_CAP_LOCATION kutucuğunu işaretlemiş olmamız gerekiyor.

Geolocator sınıfı Windows.Devices.Geolocation namaspace’i içerisinde tanımlıdır, kullanabilmek için öncelikle ilgili sınıfın using alanına eklememiz gerekiyor;

using Windows.Devices.Geolocation;

Ayrıca GetGeopositionAsync() method’u asenkron bir method olduğu için başına await anahtar kelimesini eklemeliyiz ve ilgili method’u async anahtar kelimesi ile işaretlemeliyiz;

private async void GetLocation()
{
	Geolocator locator = new Geolocator();
	Geoposition position = await locator.GetGeopositionAsync();
	Geocoordinate coordinate = position.Coordinate;
	lblLatitude.Text = "Lat : " + coordinate.Latitude;
	lblLongitude.Text = "Long: " + coordinate.Longitude;
}

Sonuçta aşağıdaki ekranı görmemiz lazım;

XNA Tarihçe

20 January 2012 Yorum yapılmamış

XNA tarihçesine baktığımızda, ilk filizlerin 1995 yılında atıldığını görüyoruz.

Windows 95 çıkana kadar, oyunların direk donanıma erişmesi gerekirdi (Örneğin joystick, grafik kartı veya ses kartına)

Bu yüzden oyun geliştirici firmalar, oyunların içerisine her ses kartı ailesinin, her grafik kartı ailesinin komut setlerini gömerlerdi.

Oyunu başlattığımızda genellikle ilk önce bilgisayarımızda bulunan ses kartını ve grafik kartını seçerdik, böylece oyun hangi komut setini kullanacağını bilirdi.

Windows 95 ile birlikte Microsoft, (o zamanki adıyla) Windows Game SDK ismini verdiği bir kütüphane geliştirdi.

Bu kütüphane sayesinde oyunlar direk donanıma erişmek yerine, ara bir katmana erişecekler, böylece donanım’a özel komut setlerini bilmelerine gerek kalmayacaktı.

Windows Game SDK, tanıtılmasından kısa bir süre sonra DirectX 1.0 adı ile yayınlandı.

DirectDraw, DirectInput ve DirectSound katmanlarını içeriyordu. X karakteri, Direct öneki ile başlayan tüm isimleri kısaltmak için seçilmişti.

DirectX öncesinde çeşitli donanımlar ile konuşmanın standart olmaması oyun geliştirmenin en zor yanlarından biriydi. Genellikle geliştirilen oyunlar birden fazla donanım ailesi ile çalışabilecek şekilde yazılırdı, bu da geliştirme süresini ve kodların karmaşıklığını arttırırdı.

DirectX ile birlikte yazılımın donanım ile konuşacağı standart bir dil oluşturulmuş oldu.

Böylelikle oyunlar aslında donanım ile değil, DirectX katmanı ile konuşuyorlar, donanım ile konuşmak ise DirectX‘in görevi oluyor.

1.0 versiyonunda sonra DirectX yıllar içerisinde oldukça yol aldı. 11.0 versiyonu Windows7 ile birlikte duyuruldu. (DirectX9 ile arasındaki tek fark Direct3D katmanının 11.0 versiyona yükseltilmesi)

DirectX, 7.0 versiyonundan itibaren C harici dilleri desteklemeye başladı. İlk başlarda sadece Visual Basic desteklenirken, DirectX 9.0 ile birlikte .Net desteği geldi.

Ayrıca DirectX 8.0, Programlanabilir Shader desteğine sahip ilk sürüm haline getirildi.

DirectX’e .Net desteği gelmesi ile birlikte (Managed DirectX) oyun geliştiriciler tarafında büyük etki yarattı. 2006 yılında XNA adı altında toplanana kadar çok fazla oyun geliştirici tarafından kullanıldı.

XNA 4.0 versiyonu ile birlikte hem Windows, hem Xbox 360, hem de Windows Phone 7 platformlarına oyun geliştirilebiliyor.

2011 Build Konferansı Birinci Gün Raporu

17 September 2011 Yorum yapılmamış

Blog’umun 200. yazısını beni kırmayarak sevgili Daron Yöndem yazdı. Aslında tek bir yazı yazacaktı, fakat Microsoft‘un Build Konferans‘ına katıldığı için bir yazı serisine dönüştü. Hergün izlenimlerini sizlerle paylaşıyor olacağım. Yazıların orjinallerini Daron Yöndem‘in kendi blog’undan da takip edebilirsiniz. Ayrıca twitter‘dan da takip etmenizi öneririm; @daronyondem

Söz Daron’da… Devamını oku…