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

Arşiv

Etiketlenen yazılar method

Asp.Net Core uygulamalarında Google reCaptcha kullanımı

17 September 2016 Yorum yapılmamış

Bu makalede Google reCaptcha servisini Asp.Net Core uygulamasında nasıl kullanacağımızı adım adım inceleyeceğiz.

Öncelikle Google reCaptcha Admin sayfasında site ismi, adresi gibi bilgileri girerek yeni bir kayıt oluşturmamız ve eğer bilgisayarınızda .Net Core yüklü değilse yüklememiz gerekiyor.

Örnek projeyi oluşturmak istediğimiz dizine Command Prompt (Windows) veya Terminal (MacOS, Linux) içerisinden gidiyoruz ve aşağıdaki kodları çalıştırıyoruz;

Proje tipi olarak Empty Web Application, proje ismi olarakta asp-net-core-google-recaptcha belirleyelim.

project.json dosyasını açarak, dependencies kısmının içerisine aşağıdaki paketleri yazalım;

Paketleri indirmek için Command Prompt içerisinde dotnet restore komutunu çalıştırmamız lazım;

Şimdi Startup.cs dosyasını açalım, Configure() ve ConfigureServices() method’larının içerisini aşağıdaki şekilde değiştirelim;

Şimdi, projenin root dizininde Controllers dizini oluşturalım, içerisine HomeController.cs dosyası ekleyelim ve aşağıdaki kodları yazalım;

Artık, projenin root dizininde Views/Home dizini oluşturup, içerisine Index.cshtml dosyası ekleyebilir, aşağıdaki kodları yazabiliriz;

Html kodları içerisindeki g-recaptcha css class‘ına sahip olan elementin data-sitekey attribute değeri Google reCaptcha Admin konsolunda oluşturduğumuz kaydın SiteKey alanında yazan değer olmalı.

Kullanıcının kendini doğruladığını sunucu üzerinde de kontrol etmemiz gerekiyor, bunun için, HomeController.cs dosyasını açalım ve aşağıdaki kodları ekleyelim;

secret parametresi için, Google reCaptcha Admin konsolunda üretilen Secret Key alanının değerini kullanmamız gerekiyor.

Command Prompt açarak dotnet run komutunu yazalım ve uygulamanın çalıştığını görelim;

Artık Microsoft Edge tarayıcısını açabilir, http://localhost:5000 adresinden sayfayı görebiliriz;

Eğer Google reCaptcha için Ben robot değilim adımını yapmazsak, “Captcha doğrulanmamış“, yanlış doğrularsak, “Captcha yanlış doğrulanmış” adımları gerçekleşecek.

Tüm adımları doğru gerçekleştirirsek, “Herşey doğru” adımına gelecek.

AçıkAkademi C# uygulaması geliştirmek istiyorum Eğitimleri 2016

26 August 2016 Yorum yapılmamış

AçıkAkademi üzerinde yayınlanan 16 video’luk C# uygulama geliştirme eğitim seti yayına alındı.
Sevgili arkadaşım Bora Kaşmer ile hazırladığımız eğitim setini sizler de C# uygulaması geliştirmek istiyorum başlıklı AçıkAkademi sayfasından izleyebilirsiniz. Eğitim konu listesi;

  • Açılış
  • C# Hakkında
  • Visual Studio
  • İlk Proje
  • Rakamsal Veri Tipleri-1
  • Rakamsal Veri Tipleri-2
  • Tarihsel Veri Tutabilen Değişkenler-1
  • Tarihsel Veri Tutabilen Değişkenler-2
  • Liste Tipinde Değişkenler
  • For Döngüsü
  • ForEach Döngüsü
  • Switch
  • Sınıflar ve Öğeler
  • Özellikler ve Enumlar
  • Metodlar
  • C# Eğitiminden En İyi Nasıl Faydalanabilirim?

AçıkAkademi için bu eğitim setini çekmemizi sağlayan sevgili arkadaşım Ümit Batu‘ya da teşekkür ederim.

Windows 10 UWP uygulamalarında OCR kullanımı

14 March 2016 1 yorum

Microsoft, Windows 10 uygulamaları içerisinden kullanabilmemiz için Optical Character Recognition (OCR) kütüphanelerini Universal Windows Platform (UWP) içerisine ekledi.

Böylece, Windows 10 yüklü olan tüm cihazlarda çalışabilen UWP uygulamaları Optical Character Recognition (OCR) yeteneklerine sahip olabiliyor.

Windows 10 Kasım 2015 güncellemesi ile birlikte OCR desteği 25 dil için hali hazırda sağlanıyor ve Türkçe dili de bunlardan biri.

Üstelik uygulamanın kullanılabilirliğini arttıracak bu yapıyı kodlamanız son derece kolay.

Kamerayı açarak resim çeken ve çektiği resimdeki yazıları algılayan örnek bir projeyi birlikte yapalım;

Öncelikle MainPage.xaml dosyasını açalım ve resim çekme ve resim içerisindeki yazıları bulma işini başlatacak olan Button nesnesini sayfaya ekleyelim;

<Page
	x:Class="OCROrnek.MainPage"
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:local="using:OCROrnek">

	<Grid Margin="20">
		<Button Content="Tara" Click="Button_Click" />
	</Grid>

</Page>

MainPage.xaml.cs dosyası içerisinde Button_Click() methodunu oluşturalım ve OCR kütüphanelerini kullanmaya başlayalım;

private async void Button_Click(object sender, RoutedEventArgs e)
{
	var ui = new CameraCaptureUI();
	var file = await ui.CaptureFileAsync(CameraCaptureUIMode.Photo);

	var stream = await file.OpenAsync(FileAccessMode.Read);
	var decoder = await BitmapDecoder.CreateAsync(stream);

	var bitmap = await decoder.GetSoftwareBitmapAsync();

	var engine = OcrEngine.TryCreateFromUserProfileLanguages();
	var result = await engine.RecognizeAsync(bitmap);

	string extracted = result.Text;
}

Yukarıdaki method içerisinde öncelikle CameraCaptureUI sınıfını ve CaptureFileAsync() methodunu kullanarak uygulamamızın kamera aracılığıyla resim çekmesini sağladık. Bunun için CaptureFileAsync() method‘una CameraCaptureUIMode enum‘ından Photo değerini verdik.

Çekilen resmi OpenAsync() methodu ile açıp BitmapDecoder sınıfının CreateAsync() methoduna parametre olarak verdik. Böylece çekilen resmin hafıza içerisinde tutulduğu yere erişim sağlamış olduk.

GetSoftwareBitmapAsync() methodunu kullanarak SoftwareBitmap sınıfından bir değişken oluşturmuş, resmi bu değişken içerisinde saklamış olduk.

Artık OcrEngine sınıfının TryCreateFromUserProfileLanguages() methodu aracılığıyla kullanıcının cihazı kullandığı dilde OCR yapabileceği değişkeni oluşturabilir, RecognizeAsync() methodu ile karakter tanıma işini yaptırabiliriz.

Son olarak, OcrResult tipindeki değişkenin Text özelliği ile taranan resmin içerisindeki yazıları string tipinde elde edebiliriz.

Ben aşağıdaki görseli kullanarak bir tarama yaptırdım ve sonucu aşağıya yazdım;

Bir mum diğerini tutuşturmakla, kendinden bir şey kaybetmez. Mevlana Celaleddin-i Rumi

Windows 10 UWP Uygulamalarında InkCanvas ile imza almak

10 February 2016 2 yorum

Geçen hafta email ile aldığım bir soruyu cevaplamak üzere bu makaleyi yazıyorum.

Windows 10 UWP uygulamalarında eğer kullanıcının imzasını ekran üzerinde almak isterseniz InkCanvas sınıfını kullanabilirsiniz.

Hemen Visual Studio açıp yeni bir proje oluşturarak nasıl yapabileceğimizi inceleyelim;

Öncelikle MainPage.xaml dosyasını açalım ve içerisini aşağıdaki gibi değiştirerek, ekran tasarımımızı yapalım;

<Page
	x:Class="InkCanvasOrnek.MainPage"
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:local="using:InkCanvasOrnek">

	<Grid Background="#f1c40f" Padding="20">
		<Grid.RowDefinitions>
			<RowDefinition Height="Auto" />
			<RowDefinition Height="Auto" />
			<RowDefinition Height="Auto" />
			<RowDefinition Height="*" />
			<RowDefinition Height="Auto" />
		</Grid.RowDefinitions>

		<TextBox Header="Adınız" Grid.Row="0" />
		<TextBox Header="Soyadınız" Grid.Row="1" />
		<TextBlock Text="İmzanız" Margin="0, 4, 0, 8 " Grid.Row="2" />
		<InkCanvas x:Name="ink" Grid.Row="3" />
		<Button HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Kaydet" Padding="10" Grid.Row="4" />
	</Grid>

</Page>

Eğer uygulamamızı Windows 10 Mobile Emulator‘ünde açacak olursak aşağıdaki gibi gözükmeli;

Dokunmatik ekran ve Mouse ile InkCanvas‘ın kullanılabilmesi için MainPage.xaml.cs dosyasında bulunan constructor‘da InkPresenter property‘sinde yeralan InputDeviceTypes özelliğine CoreInputDeviceTypes enum’ında bulunan Mouse ve Touch değerlerini aşağıdaki şekilde eklememiz gerekli;

ink.InkPresenter.InputDeviceTypes = CoreInputDeviceTypes.Mouse | CoreInputDeviceTypes.Touch;

Böylece uygulamada imza atmak için bir boşluk oluşturmuş olduk;

Eğer istersek, InkCanvas sınıfının InkPresenter property’sinde yeralan UpdateDefaultDrawingAttributes() methoduna yeni bir InkDrawingAttributes sınıfından değişken tanımlayabilir ve InkCanvas üzerine yapılan çizimlerin kalemini değiştirebiliriz;

var attr = new InkDrawingAttributes();
attr.Color = Colors.Red;
attr.PenTip = PenTipShape.Circle;
attr.Size = new Size(3, 18);
ink.InkPresenter.UpdateDefaultDrawingAttributes(attr);

Not : Taklit etmeye çalıştığım Picasso‘nun çok bilinen imzası aşağıdaki gibidir, ne dersiniz, benzetebilmiş miyim?

EntityFramework Expression kullanarak esnek veritabanı sorguları

04 February 2016 1 yorum

Veritabanında gerçekleşecek sorguları yazdığımız Veritabanı Erişim Katmanı‘nda (Data Access Layer, DAL) genelde bir tablodaki kayıtları liste olarak veya aranılan kritere göre filtreleyerek döndüren methodlarımız olur.

Projenin geliştirilme süresince gelişen ihtiyaçlara göre bu methodlara çeşitli kriterlere göre filtreleme yapan yeni methodlar eklenir ve bir süre sonra işin içinden çıkılmaz bir hale gelebilir.

Expression‘ları kullanarak bu methodları azaltabiliriz.

Hemen Visual Studio‘yu açalım ve yeni bir Console Application projesi oluşturalım;

Projeye Nuget Package Manager‘ı kullanarak EntityFramework paketini ekleyelim;

Projeye TestDatabaseDataContext isminde yeni bir class ekleyelim ve içerisine aşağıdaki property tanımlamasını ekleyelim;

public class TestDatabaseDataContext : DbContext
{
	public DbSet<Country> Countries { get; set; }
}

Projeye Country isminde yeni bir class daha ekleyelim ve içerisine aşağıdaki property tanımlamalarını yapalım;

public class Country
{
	public int Id { get; set; }

	public string Name { get; set; }

	public decimal Area { get; set; }
}

Tekrar Program.cs dosyasını açalım ve içerisinde aşağıdaki iki method’u yazalım;

public static IEnumerable<Country> GetCountryList()
{
	using (var context = new TestDatabaseDataContext())
	{
		var ulkeler = (from country in context.Countries select country);

		foreach (var item in ulkeler)
		{
			yield return item;
		}
	}
}

public static Country GetCountry(int id)
{
	using (var context = new TestDatabaseDataContext())
	{
		return (from country in context.Countries select country).FirstOrDefault(e => e.Id == id);
	}
}

Böylece ülkelerin listesini ve aldığı id parametresine göre tek bir ülke’yi geri döndüren iki method‘umuz olacak. Fakat zamanla gelişen yeni talepler ile bu method’lara, isme göre ülke listesini döndüren method, belli bir yüzölçümünden büyük ülkelerin listesini döndüren method, vs eklenecektir.

Expression sınıfını kullanarak bu methodları tekilleştirebiliriz. Hemen aşağıdaki method’u ekleyelim;

public static IEnumerable<Country> GetCountryList(Expression<Func<Country, bool>> expression)
{
	using (var context = new TestDatabaseDataContext())
	{
		var ulkeler = (from country in context.Countries select country).Where(expression);

		foreach (var item in ulkeler)
		{
			yield return item;
		}
	}
}

İstediğimiz yerde artık bu methodu aşağıdaki şekillerde kullanabiliriz;

var ulkeler1 = GetCountryList(u => u.Name.Contains("rika"));
// Amerika, Afrika, Kosta Rika, ...

var ulkeler2 = GetCountryList(u => u.Area > 100);

var ulkeler3 = GetCountryList(u => u.Id < 10);

Böylece tek bir method’a nasıl bir sonuç listesi istediğimizi tarif ediyoruz ve o bize o sonucu döndürüyor.