Arşiv

Programlama kategorisi için arşiv

Euler – 7

17 Ekim 2011 Yorum yapılmamış

Euler serisinin yedinci yazısında, Project Euler’in 7. sorusunu çözeceğiz;

Orjinal Soru; By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.

What is the 10.001st prime number?

Türkçesi; İlk altı asal sayı: 2, 3, 5, 7, 11, ve 13, altıncı asal asal sayının 13 olduğunu görürüz.

10.001nci asal sayı kaçtır?

Önce siz çözmeyi deneyin, çözemezseniz Devamını oku…

Kısa Sınav – 17

10 Ekim 2011 3 yorum

Aşağıdaki kod bloğunu çalıştırdığımızda ekranda hangi sonuçlar yazar?

Console.WriteLine(26 % 4 * 3);

Console.WriteLine(4 / 3 + 2);

var fiyat = 4;
var indirim = 5;

Console.WriteLine(fiyat - indirim++);

byte rakam = 255;

Console.WriteLine(++rakam);

Windows 8 Metro Style ilk uygulamamız

07 Ekim 2011 Yorum yapılmamış

Windows 8 Programlama makalelerinde ilk uygulamamızı geliştirmeye başlıyoruz.

Windows 8 Başlangıç Ekranımızda (Start Screen) Visual Studio 2011 üzerine tıklayarak, yeni bir Visual Studio 2011 başlatıyoruz.

File / New / Project menüsünden Windows Metro Style kategorisindeki Application proje şablonunu seçiyoruz ve MetroStyleIlkUygulama ismini vererek projemizi oluşturuyoruz.

Proje oluşturulduğunda Visual Studio 2011 varsayılan olarak MainPage.xaml dosyasını açıyor. Uygulamamızın başlangıç ekranı varsayılan olarak MainPage.xaml dosyasıdır.

Grid elementi içerisine bir button, bir de label eklemek için aşağıdaki satırları yazıyoruz;

<Button Content="Mesaj Göster" FontSize="28" Width="250" Height="80" HorizontalAlignment="Center" />
<TextBlock x:Name="MessageText" FontSize="48" Foreground="White" />

WPF ve Silverlight‘ta Label nesnesi oluşturmak için TextBlock nesnesi kullanmamız gerekiyor. Bu elementler ile ekranımıza Mesaj Göster metinli bir button ve metin içermediği için ekranda gözükmeyen bir textblock nesnesi koymuş olduk.

Fakat bu kontrolleri ekranda ortalayabilmek için bir StackPanel içerisine koymamız gerekiyor;

<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
	<Button Content="Mesaj Göster" FontSize="28" Width="250" Height="80" HorizontalAlignment="Center" />
	<TextBlock x:Name="MessageText" FontSize="48" Foreground="White" />
</StackPanel>

StackPanel ve Button elemanlarına verdiğimiz Alignment özellikleri sayesinde elemanları ekranda ortalıyoruz.

Son olarak Button element’imize

Click="Button_Click"

özelliğini ekleyelim. Böylece butona tıklanma event‘i ile tetiklenen bir method‘umuz oluyor.

MainPage.xaml.cs dosyasına;

private void Button_Click(object sender, RoutedEventArgs e)
{
	MessageText.Text = "Windows 8 üzerinde çalışan\r\nilk uygulamamız!!";
}

method’unu ekliyoruz.

Son olarak F5 tuşuna basarak projeyi test amaçlı çalıştırıyoruz. Uygulama açılışında ilk önce bekleme ekranı ekrana geliyor.

Fakat çok kısa süre içerisinde ilk ekranımız açılıyor.

Butona tıkladığımızda TextBlock metin ile doluyor.

Kodların tamamı;

<UserControl x:Class="MetroStyleIlkUygulama.MainPage"
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
	xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
	mc:Ignorable="d"
	d:DesignHeight="768" d:DesignWidth="1366">

<Grid x:Name="LayoutRoot" Background="#FF0C0C0C">
	<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
		<Button Content="Mesaj Göster" FontSize="28" Width="250" Height="80" HorizontalAlignment="Center" Click="Button_Click" />
		<TextBlock x:Name="MessageText" FontSize="48" Foreground="White" />
	</StackPanel>
</Grid>

</UserControl>

Dosya boyutu almak için Head isteğinde bulunmak

05 Ekim 2011 Yorum yapılmamış

Uygulamalarımızda internet üzerindeki bir dosyanın boyut bilgisine ihtiyacımız olabilir.

Yapmamız gereken; dosyaya istekte bulunup Length özelliğinden dosya boyutu bilgisini almak.

var DosyaKonum = "http://www.enginpolat.com/wp-content/uploads/2011/07/FPSOrnek.rar";

WebClient wc = new WebClient();
var Dosya = wc.DownloadData(DosyaKonum);

int DosyaBoyut = Dosya.Length;

Bu yöntemin en önemli dezavantajı, dosyanın boyut bilgisini alabilmek için dosyayı gerçekten download etmemiz gerekiyor. Özellikle büyük boyutlu dosyalarda bu yöntem büyük problemlere yol açacaktır.

Aslında yapılan isteğin sonucunun Başlık (Header) bilgisinde dosya boyutu yer alıyor. Eğer Başlık‘tan (Header) boyut bilgisine ulaşabilirsek dosyayı download etmemize gerek kalmaz.

var DosyaKonum = "http://www.enginpolat.com/wp-content/uploads/2011/07/FPSOrnek.rar";

var Request = WebRequest.Create(DosyaKonum);

Request.Method = "HEAD";

var Response = Request.GetResponse();

var DosyaBoyut = Response.Headers[HttpResponseHeader.ContentLength];

Öncelikle WebRequest sınıfının static Create() method’u sayesinde, parametresinde adresi verilmiş dosyaya bir istek oluşturuyoruz.

Request değişkeninin GetResponse() method’undan sonuç bilgisini almadan önce Method özelliğine HEAD değerini atıyoruz.

Böylece istek sonucunda, dosyanın içeriğinin değil sadece başlık bilgisinin bulunmasını sağlıyoruz.

HttpResponseHeader enum’ında yeralan ContentLength değeri ile Response değişkeninin Headers özelliğinden dosyanın boyut bilgisine ulaşabiliyoruz.

Windows 8 Programlama Ortamını Hazırlayalım

05 Ekim 2011 Yorum yapılmamış

Windows 8 üzerinde geliştirme yapabilmemiz için öncelikle bilgisayarımıza Windows 8 ve Visual Studio 2011 kurmuş olmamız lazım.

Windows 8 Programlama makalemde kurulumlar ile ilgili bilgi vermiştim.

Eğer MSDN üyeliğiniz varsa, Visual Studio 2011 Ultimate Edition kurmanızı tavsiye ederim.

Kurulum penceresi sade hazırlanmış;

Kurulum tamamlandıktan sonra Visual Studio 2011‘imizi ilk defa çalıştırıyoruz;

Hemen hemen her Visual Studio sürümü ilk çalıştırıldığında bu ekrana benzer bir ekran ile karşılaşırız. Ben Visual C# Development Settings tercihini yaptım, Local Help Documentation seçeneğinden de None seçtim.

Kısa bir yapılandırmanın ardından Visual Studio 2011 Splash Screen ekrana geldi.

Başlangıç ekranımız Visual Studio 2010‘dan farklı değil, Visual Studio 2008‘den beri çok az değişiklik gösterdi.

Help / About Microsoft Visual Studio menüsünden Hakkında penceresini açtığımızda, bilgisayarımıza Visual Studio bileşenlerinin 11. versiyonlarının ve .Net 4.5 versiyonunun kurulu olduğunu görüyoruz.

File / New Project menüsünden yeni bir proje oluşturmak için New Project dialog kutusunu açtığımızda Metro Style proje şablonlarının geldiğini görüyoruz.

Bu ekranda Grid Application ve Split Application seçeneklerinden birini seçebiliriz.

Ofisten küçük bir görüntü; yeni proje şablonunu açtıktan sonra ilk dakikalar;

Windows 8 Programlama başlığını takip ederek özellikle Metro Style uygulama geliştirme konusunda daha ayrıntılı bilgiye sahip olabilirsiniz.

Windows 8 Programlama

05 Ekim 2011 Yorum yapılmamış

Windows 8 henüz piyasa sürülmeden (aslında Beta sürümü bile çıkmadan) hayatımıza girmeye başladı.

Windows 8 Programlama başlığı altında Windows 8 üzerinde (özellikle Metro Style) uygulama geliştirme tecrübelerimi paylaşıyor olacağım.

Bu yazıyı yazdığım gün Windows 8‘in Geliştiricilere Özel sürümleri ücretsiz olarak Microsoft‘un kendi sitesinden indirilebiliyor;

Windows Developer Preview with developer tools English, 64-bit (x64) (4.8 GB)

Windows Developer Preview English, 64-bit (x64) (3.6 GB)

Windows Developer Preview English, 32-bit (x86) (2.8 GB)

Sistem Gereksinimleri

Windows Developer Preview, Windows Vista ve Windows 7 çalıştırdığınız tüm bilgisayarlarda performans kaybı olmadan çalışacaktır;

  • 1 GHz veya daha hızlı 32-bit (x86) / 64-bit (x64) işlemci
  • 1 GB RAM (32-bit) veya 2 GB RAM (64-bit)
  • 16 GB hard disk alanı (32-bit) veya 20 GB hard disk alanı (64-bit)
  • DirectX 9 veya üstü destekli ekran kartı
  • MetroUI Style uygulamaları çalıştırabilmek için en az 1024 X 768 ekran çözünürlüğü

Ben temiz bir bilgisayara Windows Developer Preview with developer tools English, 64-bit (x64) versiyonunu kurduktan sonra MSDN üyelerine açık olan Visual Studio 2011 Ultimate Edition‘ı da kurdum.

Böylece Windows‘un üzerine kurulu gelen Visual Studio 2011 Express Edition‘da henüz oluşturamadığımız proje şablonlarını da görebilmiş oldum.

Windows 8 Programlama makalelerimde yazacağım uygulamalar için Express Edition yeterli olacak.

Generic Dictionary sınıfına karıştırıcı (shuffle) Extension Method yazalım

03 Ekim 2011 Yorum yapılmamış

Winamp MP3 oynatıcısında çalma listesini (playlist) rastgele sıra ile karıştırabiliyorsunuz. Benzer özelliği kendi projelerimizde uygulamak isteyebiliriz.

Daha önce, C# ile Dizi Karıştırma yazısında bir dizi’yi (List<T>) nasıl karıştıracağımızı incelemiştik.

Bu yazı ile Karıştırma (Shuffle) yeteneğini Generic Dictionary (Dictionary<TKey, TValue>) ekleyeceğimizi inceleyeceğiz.

İlk olarak, ExtensionManager isminde static bir sınıf oluşturalım;

public static class ExtensionManager
{
	public static Dictionary<TKey, TValue> Shuffle(this Dictionary<TKey, TValue> liste)
	{
		Random r = new Random();
		return liste.OrderBy(x => r.Next()).ToDictionary(item => item.Key, item => item.Value);
	}
}

ExtensionManager sınıfının Shuffle() isminde bir method’u var.

Bu method, Random sınıfından yeni bir instance‘ın Next() method’unu kullanarak, liste değişkeninin her bir elemanını rastgele bir değerle sıralıyor.

Böylece, Shuffle() method’u her çağırıldığında liste değişkeninin elemanlarının rastgele sıralandığını görüyoruz.

Örnek Kullanım;

Dictionary<int, string> liste = new Dictionary<int, string>();

for (int iLoop = 0; iLoop < 5; iLoop++)
{
	liste.Add(iLoop, "Eleman " + iLoop);
}
//0, Eleman 0
//1, Eleman 1
//2, Eleman 2
//3, Eleman 3
//4, Eleman 4

Dictionary<int, string> karistirilmis = liste.Shuffle();
//2, Eleman 2
//1, Eleman 1
//3, Eleman 3
//0, Eleman 0
//4, Eleman 4

C# ile Hotmail üzerinden e-posta gönderme

02 Ekim 2011 1 yorum

Daha önce C# ile GMail üzerinden e-posta gönderme yazısında yazdığımız e-posta gönderme uygulamasını bu sefer Hotmail üzerinden e-posta gönderecek şekilde yazacağız.

Windows uygulamalarınız üzerinden e-posta gönderebilmek güzel bir özellik.

Uygulama içerisinden e-posta gönderme konusunda ilk akla gelen sorulardan bir tanesi, “Hotmail üzerinden e-posta gönderebilir miyim?” oluyor.

Bu yazımda, Hotmail üzerinden e-posta gönderebileceğimiz bir uygulama geliştireceğim.

Öncelikle kodumuzun using kısmına System.Net ve System.Net.Mail namespace’ini eklememiz gerekiyor.

.Net Framework, System.Net.Mail namespace‘i içerisinde çeşitli class‘lar aracılığı ile uygulamanız içerisinden kolaylıkla e-posta gönderilmesini mümkün kılıyor.

using System.Net.Mail;
using System.Net;

İlk yapmamız gereken, SmtpClient sınıfından bir örnek oluşturmak ve bazı özelliklerini ayarlamak.

SmtpClient sc = new SmtpClient();
sc.Port = 587;
sc.Host = "smtp.live.com";
sc.EnableSsl = true;

Port özelliği ile, Smtp sunucusuna erişeceğimiz port numarasını belirliyoruz

Host özelliği ile, Hotmail Smtp sunucusunun adresini belirliyoruz

EnableSsl özelliği ile, Hotmail Smtp sunucusuna bağlanacağımız protokolu belirliyoruz. Eğer true değer atarsak https, eğer false değer atarsak http protokolü kullanılır.

Hotmail e-posta adresimizi ve şifremizi, Credentials özelliğine NetworkCredential sınıfından bir örnek ile atamamız gerekiyor.

sc.Credentials = new NetworkCredential("eposta@hotmail.com", "hotmail_sifre");

SmtpClient örneği üzerinden gönderilecek posta, MailMessage tipinde olmalıdır. Bir sonraki adımda MailMessage sınıfından bir örnek oluşturuyoruz.

MailMessage mail = new MailMessage();

mail.From = new MailAddress("eposta@hotmail.com", "Ekranda Görünecek İsim");

mail.To.Add("alici1@mail.com");
mail.To.Add("alici2@mail.com");

mail.CC.Add("alici3@mail.com");
mail.CC.Add("alici4@mail.com");

mail.Subject = "E-Posta Konusu";
mail.IsBodyHtml = true;
mail.Body = "E-Posta İçeriği";

mail.Attachments.Add(new Attachment(@"C:\Rapor.xlsx"));
mail.Attachments.Add(new Attachment(@"C:\Sonuc.pptx"));

Son olarak, SmtpClient sınıfının Send() method’unu kullanarak, oluşturduğumuz MailMessage örneğini gönderiyoruz.

sc.Send(mail);

Kodların toparlanmış hali;

using System;
using System.Net.Mail;
using System.Net;

class Program
{
	static void Main(string[] args)
	{
		SmtpClient sc = new SmtpClient();
		sc.Port = 587;
		sc.Host = "smtp.live.com";
		sc.EnableSsl = true;
		sc.Timeout = 50000;

		sc.Credentials = new NetworkCredential("eposta@hotmail.com", "hotmail_sifre");

		MailMessage mail = new MailMessage();

		mail.From = new MailAddress("eposta@hotmail.com", "Ekranda Görünecek İsim");

		mail.To.Add("alici1@mail.com");
		mail.To.Add("alici2@mail.com");

		mail.CC.Add("alici3@mail.com");
		mail.CC.Add("alici4@mail.com");

		mail.Subject = "E-Posta Konusu";
		mail.IsBodyHtml = true;
		mail.Body = "E-Posta İçeriği";

		mail.Attachments.Add(new Attachment(@"C:\Rapor.xlsx"));
		mail.Attachments.Add(new Attachment(@"C:\Sonuc.pptx"));

		sc.Send(mail);
	}
}

2011 Build Konferansı İkinci Gün Raporu

17 Eylül 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…

2011 Build Konferansı Birinci Gün Raporu

17 Eylül 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…