Arşiv

‘İnternet’ Kategorisi için arşiv

ASP.NET 4.0 ile Temizlenmiş web.config Dosyası

ASP.NET 3.0 ve ASP.NET 3.5 ile web.config Dosyası

ASP.NET yıllar içerisinde gelişti, buna bağlı olarak web.config dosyasında tutulan ayarlarda da gözle görülür bir artış oldu. .Net Framework 3.5 SP1 kurulu olan bilgisayarımda yeni oluşturduğum bir Web Uygulamasının web.config dosyası aşağıdaki gibi oluyor.

< ?xml version="1.0"?>

		
			
				
					

Web uygulamasına özgü ayarlar yapılmaya başlandığında (ConnectionStrings, Authentication, AppSettings, vs) web.config dosyası da büyümeye ve karmaşıklaşmaya devam ediyor. Fakat web uygulamalarının büyük oranında bu ayarların birçoğu değiştirilmeden bırakılır.

ASP.NET 4.0 ile web.config dosyamız, ilk versiyonlarda olduğu gibi sadeleşiyor.

Visual Studio 2010‘da Empty ASP.NET Web Application şablonu ile yeni bir web projesi oluşturursanız, web.config dosyası aşağıdaki gibi oluşturuluyor;

< ?xml version="1.0"?>

		
				
		
		
			
		

İlk konfigürasyon satırı ASP.NET uygulamasının debug edilebileceğini ve Framework versiyonunun 4.0 olduğunu bildiriyor.

İkinci konfigürasyon satırı ise, web uygulamasının IIS7 üzerinde host edildiği durumlarda URL Rewrite yapabilmek için gerekli.

ASP.NET 4.0 SEO Geliştirmeleri

Search Engine Optimization (Arama Motoru Optimizasyonu), internette yayınlanan her site için çok önemlidir. Günümüzde sitelerin trafiklerinin büyük oranı arama motorlarından gelmektedir. Web sitelerinin arama sonuçlarında daha iyi yer edinmeleri alacakları trafik açısından gittikçe daha önemli hale gelmektedir.

Web sitenizin SEO-Uyumluluğunu Google Analytics ile kolaylıkla ölçebilirsiniz.

ASP.NET 4.0 SEO Geliştirmeleri

ASP.NET 4.0 SEO uyumluluğu ile ilgili olarak bir dizi yenilik-geliştirme ile birlikte geliyor. Bunlardan bazıları;

  • Yeni Page.MetaKeywords ve Page.MetaDescription özellikleri
  • ASP.NET Web Forms’ta yeni gelen URL Yönlendirme (URL Routing) desteği
  • Yeni Response.RedirectPermanent() methodu

Bu özellikleri inceleyelim;

Page.MetaKeywords and Page.MetaDescription Özellikleri

Arama motorlarının crawler dediği programcıklar, sitenizi indekslerken, <head> tagı içerisinde yeralan <meta name=”keywords”> ve <meta name=”description”> taglarını kullanarak sitenizi kategorize eder.

<head runat="server">
	<title>Örnek Sayfa</title>
	<meta name="keywords" content="aspnet, engin polat, geliştirme, framework" />
	<meta name="description" content="ASP.NET 4.0 ile yeni gelen özellikler" />
</head>

ASP.NET 4.0′dan önce, bu taglara programatik olarak erişmek mümkün değildi. ASP.NET 4.0 ile birlikte aşağıdaki kodları yazabiliyoruz;

public void Page_Load(object sender, EventArgs e)
{
	Page.Title = "Örnek Sayfa";

	Page.MetaKeywords = "aspnet, engin polat, geliştirme, framework";
	Page.MetaDescription = "ASP.NET 4.0 ile yeni gelen özellikler";
}
<%@ Page Title="Örnek Sayfa"
	Keywords = "aspnet, engin polat, geliştirme, framework"
	Description = "ASP.NET 4.0 ile yeni gelen özellikler"
	CodeBehind = "OrnekSayfa.aspx.cs"
	Inherits = "OrnekWebSitesi.OrnekSayfa" %>

Yukarıdaki kodlar sayesinde Page sınıfının Keyword ve Description özelliklerine programatik olarak erişmek mümkündür.

ASP.NET Web Formlarında URL Yönlendirme (URL Routing)

URL Yönlendirme özelliği ilk olarak ASP.NET 3.5 SP1 ile gelmişti ve ASP.NET MVC ile zaten kullanabiliyorduk. URL Yönlendirme özelliği sayesinde, web uygulamasına gelecek tüm isteklerin fiziksel dosyalara gelmesi zorunluluğu ortadan kalkıyor. Artık aşağıdakiler gibi Arama Motoru Uyumlu (SEO – Friendly) URL’ler tanımlayabiliyoruz;

http://www.orneksite.com/sayfa.aspx?id=5
yerine
http://www.orneksite.com/sayfa/hakkinda

veya

http://www.orneksite.com/urunler.aspx?kategori=yazilim
yerine
http://www.orneksite.com/urunler/yazilim

ASP.NET 4.0 URL Yönlendirme (URL Routing) ile ilgili detaylı bir yazıyı yakında yayınlayacağım.

Response.RedirectPermanent() methodu

Web uygulamalarımızda, belli durumlarda akışı başka bir sayfaya yönlendirmek sıklıkla yaptığımız birşeydir. ASP.NET ile genellikle Response.Redirect() method’unu kullanırız. Aslında Response.Redirect() method’unun yaptığı şey, browser’a HTTP 302 (Temporary Redirect – Geçici Yönlendirme) sonucu döndürmektir. Böylece browser yönlendirmek istenen sayfadan akışa devam eder.

Arama motorlarının sayfaları indexlemeye yarayan crawler uygulamaları, bir sayfadan diğerine geçici olarak yönlendirme olduğunu gördüğünde (HTTP 302 mesajı) akışa yeni sayfadan devam etmez. Bu da sitenizde bulunmasına rağmen indexlenmeyen sayfalar oluşmasına yol açar.

ASP.NET 4.0 ile birlikte Response.RedirectPermanent() method’u geliyor. Bu method çağırıldığında, browser’a HTTP 302 mesajı yerine HTTP 301 (Moved Permanently – Kalıcı Olarak Taşındı) mesajı döndürür. Crawler’lar, HTTP 301 mesajı gördüklerinde akışa yeni sayfadan devam ettikleri için, web sitesinin tamamı indexlenecektir.

Response.Redirect(“YeniSayfa.aspx”); // HTTP 302 mesajı ile YeniSayfa.aspx’ten akış devam eder. Crawler indexlemez.

Response.RedirectPermanent(“YeniSayfa.aspx”); // HTTP 301 mesajı ile YeniSayfa.aspx’ten akış devam eder. Crawler indexler.

ASP.NET MVC ile kullanılmak üzere Response.RedirectToRoutePermanent() methodu geliyor.

Response.RedirectToRoute(“Urunler-Listele”, new { kategori = “yazilim” }); // HTTP 302 mesajı döner. Crawler indexlemez.

yerine

Response.RedirectToRoutePermanent(“Urunler-Listele”, new { kategori = “yazilim” }); // HTTP 301 mesajı döner. Crawler indexler.

Sonuç olarak, ASP.NET 4.0 Arama Motoru Dostu ( SEO – Friendly ) uygulama yazmayı kolaylaştıran araçlara sahip olarak geliyor.

C# ile Image Crawler Uygulaması

Daha önce yazdığımız C# ile WebCrawler Uygulamasına ek olarak, bu sefer, sayfadaki resimleri bulup, ekranda gösteren bir uygulama yazacağız.

Uygulamamız, bir web sayfasına bağlacak, sayfadaki img taglarının src değerlerini bir diziye dolduracak ve bu diziyi ekranda gösterecek. Dizi’den bir satır seçildiğinde, ilgili resmi ekrana getirecek.

Hemen aşağıdaki ekran görüntüsünü oluşturarak uygulamayı yazmaya başlayalım;

Bir web sayfasındaki resimleri bulmak için, List<string> tipinde değer döndüren ResimleriBul() isimli fonksiyon yazacağız. Bu fonksiyon adres bilgisini parametre olarak alacak, sayfadaki her img tagının src özelliğini bir listeye ekleyecek. Geriye bu liste’yi döndürecek.

private List<string> ResimleriBul(string adres)
{
	List<string> arrReturn = new List<string>();

	WebRequest wr = WebRequest.Create(txtAdres.Text);
	WebResponse ws = wr.GetResponse();
	StreamReader sr = new StreamReader(ws.GetResponseStream(), Encoding.UTF8);
	string response = sr.ReadToEnd();
	sr.Close();
	ws.Close();

	string imageHtmlCode = "<img";
	string imageSrcCode = "src=\"";

	int index = response.IndexOf(imageHtmlCode);
	while (index != -1)
	{
		response = response.Substring(index);

		int tagSonu = response.IndexOf('>');
		int baslangic = response.IndexOf(imageSrcCode) + imageSrcCode.Length;
		int bitis = response.IndexOf('"', baslangic + 1);

		if (bitis > baslangic && baslangic < tagSonu)
			arrReturn.Add(response.Substring(baslangic, bitis - baslangic));

		if (imageHtmlCode.Length < response.Length)
			index = response.IndexOf(imageHtmlCode, imageHtmlCode.Length);
		else
			index = -1;
	}

	return arrReturn;
}

ResimleriBul butonunun Click olayında, ResimleriBul() fonksiyonunun döndürdüğü her öğe, ListBox kontrolüne dolduracak.

private void btnResimleriBul_Click(object sender, EventArgs e)
{
	lbResimListe.Items.Clear();

	foreach (string image in ResimleriBul(txtAdres.Text))
		lbResimListe.Items.Add(image);
}

Son olarak, ListBox’ın seçili elemanı her değiştiğinde, PictureBox’ta seçili resim gösterilecek.

private void lbResimListe_SelectedIndexChanged(object sender, EventArgs e)
{
	pbResim.Load(lbResimListe.SelectedItem.ToString());
}

Uygulamanın kaynak kodlarını buradan indirebilirsiniz.

C# ile Google Url Kısaltma Servisini Kullanmak

29 Aralık 2009 engin.polat 5 comments

Adres kısaltma servisleri ile uzun internet linklerini kısaltmak mümkündür. İnternette birçok adres kısaltma servisi şu anda hizmet vermektedir. Birkaç tanesine örnek olarak;

Facebook adres kısaltma servisleri listesine http://fb.me ile katıldı.

Tabii Google’da boş durmadı ve hemen kolları sıvayarak adres kısaltma servisi http://goo.gl duyurdu.

Bu yazımda, C# ile bu servisi nasıl kullanabileceğimizi anlatacağım.

Öncelikle ekranımızı aşağıdaki resimdeki gibi tasarlayalım;

Uygulamanın anahtar parçası, Kısalt butonunun Click olayında gerçekleşiyor. Google Url Shortener servisini kullanmak için http://ggl-shortener.appspot.com adresine url parametresi ile kısaltılmak istenen adres geçilmeli.

Biz bunu şöyle gerçekleştireceğiz;

WebRequest wr = WebRequest.Create(string.Format("http://ggl-shortener.appspot.com/?url={0}", txtAdres.Text));
WebResponse ws = wr.GetResponse();
StreamReader sr = new StreamReader(ws.GetResponseStream(), Encoding.UTF8);
string response = sr.ReadToEnd();
sr.Close();
ws.Close();

Dönen JSON sonucu, çok kısa ve basit olduğu için basit bir Temizle fonksiyonuna sokacağız,

private string Temizle(string Metin, string Temizlenecek)
{
string oReturn = Metin;

foreach (char c in Temizlenecek)
	oReturn = oReturn.Replace(c.ToString(), string.Empty);

return oReturn.Replace("short_url:", "").Trim();
}

Böylece, Kısalt butonunun Click olayına şu satırları da ekleyebiliriz;

lblAdres.Text = txtAdres.Text;
lblKisaAdres.Text = Temizle(response, "{ }\\,;\"");

Artık tek yapmamız gereken, uygulamayı çalıştırmak ve bir adres girip, Kısalt butonuna tıklamak;

Uygulamanın kaynak kodlarını buradan indirebilirsiniz.

Kısa Sınav – 10

ASP.Net ile web uygulaması geliştiriyorsunuz.

web.config dosyası içerisine, ConnectionString’lerinizi yazdınız.

Güvenlik endişelerinden dolayı, web.config dosyanızın ConnectionStrings alanını şifrelemek istiyorsunuz.

Konfigürasyon dosyasını şifrelemek için hangi .Net tool’unu kullanmalısınız?

  • caspol.exe
  • installutil.exe
  • aspnet_compiler.exe
  • aspnet_regiis.exe

Sorunun doğru cevabı için; Devamını Oku…

C# ile Web Sayfasından Sözlük Oluşturma

Bir web sayfasının (Bir programcının dünyası, Karalamalar, Fatih DurğutNTVMSNBC, Wikipedia gibi..) içeriğini okuduktan sonra, Html taglarından ayıklayıp bir sözlük oluşturabiliriz.

Bu yazımda, C# ve Regex kullanarak böyle bir uygulamayı nasıl yazabileceğimizi anlatacağım.

Yukarıdaki resimdeki formu oluşturduysanız, Button‘un Click olayını yazmaya başlayalım;

WebRequest wr = WebRequest.Create(txtAdres.Text);
WebResponse ws = wr.GetResponse();
StreamReader sr = new StreamReader(ws.GetResponseStream(), Encoding.UTF8);
string response = sr.ReadToEnd();
sr.Close();
ws.Close();

List<string> arrSozluk = new List<string>();
Regex r = new Regex("<(.|\n)*?>");
foreach (string satir in r.Replace(response, "").Split(" \t\r\n({[]}),.;:*-+/?<>&%'#@=\"\\_".ToCharArray(), StringSplitOptions.RemoveEmptyEntries))
	if (!arrSozluk.Contains(satir.Trim()))
		arrSozluk.Add(satir.Trim());

StringBuilder sb = new StringBuilder();
foreach (string satir in arrSozluk)
	sb.AppendLine(satir);

txtSozluk.Text = sb.ToString();

Regex nesnesi ile Html taglarını, response‘tan siliyoruz. Daha sonra, kelimeleri bölmek için Split fonksiyonunu kullanıyoruz.

Generic List sınıfından bir nesneye her bir kelimeyi ekliyoruz.

Son olarakta, Generic List içerisindeki kelimeleri TextBox aracılığı ile ekrana yazdırıyoruz.

Uygulamanın kaynak kodlarına buradan erişebilirsiniz.

C# ile WebCrawler Uygulaması

24 Aralık 2009 engin.polat 1 Yorum

Google, Bing, Yahoo gibi arama motorları, internetteki sayfaları indexlemek için web crawler denilen programcıklar kullanırlar.

Crawler’ların çalışma mantığı basittir;

  1. Web sayfasına git
  2. Sayfanın içeriğini indexle
  3. Sayfadaki her link için 1. adıma geri dön

Crawler’ın, sayfadaki linkleri bulabilmesi anahtar adımdır.

Yazacağımız uygulamada, bir web crawler gibi sayfadaki linkleri bulacağız.

Ekran görüntüsündeki formu oluşturduktan sonra, Buton‘un Click olayına ait kodu yazmaya başlayalım.

private void btnLinkleriBul_Click(object sender, EventArgs e)
{
	WebRequest wr = WebRequest.Create(txtAdres.Text);
	WebResponse ws = wr.GetResponse();
	StreamReader sr = new StreamReader(ws.GetResponseStream(), Encoding.UTF8);
	string response = sr.ReadToEnd();
	sr.Close();
	ws.Close();

	Regex r = new Regex("<a.+href=\"http.+://(.+)\">(.*)</a>");
	foreach (Match m in r.Matches(response))
	{
		string link = m.Groups[1].Value;
		if (link.IndexOf("\"") > -1)
			link = link.Substring(0, link.IndexOf("\""));
		string metin = m.Groups[2].Value;

		ListViewItem oItem = new ListViewItem(new string[] { metin, link });
		lvSonuc.Items.Add(oItem);
	}
}

Code Challenge #1 ve C# ile Google PageRank Bulma yazılarında kullandığım tekniğin aynısı ile sayfanın içeriğini string değişkene alıyoruz.

WebRequest wr = WebRequest.Create(txtAdres.Text);
WebResponse ws = wr.GetResponse();
StreamReader sr = new StreamReader(ws.GetResponseStream(), Encoding.UTF8);
string response = sr.ReadToEnd();
sr.Close();
ws.Close();

Daha sonra, Regex sınıfından yeni bir örnek oluşturup (constructer’ına verdiğimiz parametre önemli), dönen sonuç kümesinin içeriğini ListView kontrolüne dolduruyoruz.

Eğer sayfanın içeriğini tuttuğumuz değişkeni veritabanına yazsak, ve sayfada bulduğumuz her link için bu adımları tekrar yapsak, tam bir web crawler uygulaması yazmış olacaktık.

Ama bu noktadan itibaren uygulamayı geliştirmeyi size bırakıyorum (BilgeAdam’daki öğrencilerime hep dediğim gibi, “Bundan sonrası size ödev!”)

Projenin bu halini şuradan indirebilirsiniz.

C# ile Google PageRank Bulma

23 Aralık 2009 engin.polat 1 Yorum

Google‘ın PageRank uygulaması, web sitelerinin Google tarafından önemini bulmakta kullanılan bir algoritmadır.

Wikipedia’daki şu adresten, PageRank algoritması ile ilgili ayrıntılı bilgiye erişebilirsiniz.

Siz de sitenizin PageRank değerini http://www.prchecker.info adresinden bulabilirsiniz.

Yazacağımız uygulama ile, sitenizin Google PageRank değerini programatik olarak buldurabileceğiz.

Google sitelerin PageRank değerlerini, http://toolbarqueries.google.com/search adresine gönderilen sorgulara cevap olarak verebiliyor. Fakat sonuç alabilmemiz için bu adrese doğru parametreleri vermemiz gerekiyor, aksi halde HTTP403 : Forbidden hatası alıyoruz.

Parametreler:

  • features=Rank
  • client=navclient-auto
  • q=info:{adres}
  • ch={checksum}

Checksum bilgisini hesaplamak için Google’ın yayınladığı bir algoritma var. Uygulamamızda, bu algoritmayı C# ile yazacağız.

Yukarıdaki resimde görünen arayüzü hazırladıktan sonra, projemize GooglePageRank isminde static class ekliyoruz.

GooglePageRank static class’ı üç tane static method’dan oluşuyor.

private static void Mix(ref uint a, ref uint b, ref uint c)
{
	a -= b;
	a -= c;
	a ^= c >> 13;
	b -= c;
	b -= a;
	b ^= a << 8;
	c -= a;
	c -= b;
	c ^= b >> 13;
	a -= b;
	a -= c;
	a ^= c >> 12;
	b -= c;
	b -= a;
	b ^= a << 16;
	c -= a;
	c -= b;
	c ^= b >> 5;
	a -= b;
	a -= c;
	a ^= c >> 3;
	b -= c;
	b -= a;
	b ^= a << 10;
	c -= a;
	c -= b;
	c ^= b >> 15;
}
private static string GoogleChecksum(string url)
{
	uint GoogleMagic = 0xE6359A60;

	uint a, b;
	uint c = GoogleMagic;

	a = b = 0x9E3779B9;

	int k = 0;
	int length = url.Length;

	while (length >= 12)
	{
		a += (uint)(url[k + 0] + (url[k + 1] << 8) + (url[k + 2] << 16) + (url[k + 3] << 24));
		b += (uint)(url[k + 4] + (url[k + 5] << 8) + (url[k + 6] << 16) + (url[k + 7] << 24));
		c += (uint)(url[k + 8] + (url[k + 9] << 8) + (url[k + 10] << 16) + (url[k + 11] << 24));

		Mix(ref a, ref b, ref c);

		k += 12;
		length -= 12;
	}

	c += (uint)url.Length;

	switch (length)
	{
		case 11:
			c += (uint)(url[k + 10] << 24);
			goto case 10;
		case 10:
			c += (uint)(url[k + 9] << 16);
			goto case 9;
		case 9:
			c += (uint)(url[k + 8] << 8);
			goto case 8;
		case 8:
			b += (uint)(url[k + 7] << 24);
			goto case 7;
		case 7:
			b += (uint)(url[k + 6] << 16);
			goto case 6;
		case 6:
			b += (uint)(url[k + 5] << 8);
			goto case 5;
		case 5:
			b += (uint)(url[k + 4]);
			goto case 4;
		case 4:
			a += (uint)(url[k + 3] << 24);
			goto case 3;
		case 3:
			a += (uint)(url[k + 2] << 16);
			goto case 2;
		case 2:
			a += (uint)(url[k + 1] << 8);
			goto case 1;
		case 1:
			a += (uint)(url[k + 0]);
			break;
		default:
			break;
	}

	Mix(ref a, ref b, ref c);

	return string.Format("6{0}", c);
}
public static string PageRankHesapla(string adres)
{
	string checkSum = GoogleChecksum("info:" + adres);
	string url = "http://toolbarqueries.google.com/search?client=navclient-auto&ch=" + checkSum + "&features=Rank&q=info:" + adres;

	try
	{
		WebRequest request = WebRequest.Create(url);
		WebResponse response = request.GetResponse();

		StreamReader reader = new StreamReader(response.GetResponseStream());
		string data = reader.ReadToEnd();

		reader.Close();
		response.Close();

		if (data.IndexOf(':') != -1)
			data = data.Substring(data.LastIndexOf(':') + 1);

		return data;
	}
	catch (Exception)
	{
		return "-1";
	}
}

Şimdi yapmamız gereken, Butonun Click olayında, GooglePageRank static class’ının PageRankHesapla method’unu çağırmak ve dönen değeri Label’da göstermek.

Uygulamanın çalışır halini bu adresten indirebilirsiniz.

Code Challenge #1

17 Aralık 2009 engin.polat 2 comments

Dün Emre (nam-ı diğer kara) arkadaşımla internette gezerken, bir youtube video’suna denk geldik. Emre’nin bilgisayarındaki hosts dosyasında güncel youtube ip adresleri olmadığı için videoyu izleyemedik.

Aklımıza, youtube domainine ait ip adreslerini otomatik olarak bulacak ve hosts dosyasını güncelleyecek bir uygulama yazmak geldi. Öğle yemeğine çıkmamıza 15 dakika olduğu için, bunu bir yarışa dönüştürmeye karar verdik.

İşte Yarışmanın Kuralları;

  • youtube.com, www.youtube.com, img.youtube.com alan adlarının ve v{1-24}.lscache{1-8}.c.youtube.com formatındaki alan adlarının ip adresleri otomatik olarak çözümlenecek
  • Domain adından IP adresini çözen bir servis kullanılacak (Ben böyle bir web service bulamadım, o yüzden http://www.hcidata.info/host2ip.cgi adresindeki formu kullandık)
  • Sonuç bilgisi C:\Windows\System32\drivers\etc\ altındaki hosts dosyasına otomatik olarak yazılacak
  • Uygulamayı yazma – test etme ve çalıştırma sonucunda, ilk kimin uygulaması hosts dosyasını güncellerse kazanmış olacak

YoutubeHostDuzenleyici_2

Sizinde 15 dakikanız var, code challenge‘ımıza katılmak ister misiniz?

Benim çözümümü görmek için  Devamını Oku…

Silverlight 4 TextTrimming özelliği

Silverlight 3 ve öncesi versiyonlarda, yazı alanına sığmayan metinleri, üç nokta ekleyerek trim etmek için, kendi kontrolümüzü yazmamız gerekiyordu.

Mesela, elimizde şöyle uzun bir yazı olsun;

Silverlight helps you create rich web applications that run on Mac OS, Windows, and Linux. Welcome to a new level of engaging, rich, safe, secure, and scalable cross-platform experience.

Bu yazıyı, 250px’lik bir metin alanında göstermemiz lazım, ama sığmayan kısımları yanyana üç nokta ile göstermemiz gerekiyor.

Silverlight helps you create rich web applications …

Silverlight 4 versiyonundan önce, bu isteğimizi yerine getirmek için, kendi TextBlock kontrolümüzü yazmamız gerekirdi.

Silverlight 4 versiyonla birlikte ise, TextBlock kontrolünün TextTrimming=”WordEllipsis” özelliğini kullanabiliyoruz.

Örnek kod:

<TextBlock FontSize="16" TextTrimming="WordEllipsis" Width="250"
Text="Silverlight helps you create rich web applications that run on Mac OS, Windows, and Linux. Welcome to a new level of engaging, rich, safe, secure, and scalable cross-platform experience." />

PDC 2009′da Silverlight 4 Beta yayınlandı

18 Kasım 2009 tarihinde, Microsoft PDC’09 (Microsoft Proffessional Developers Conference 2009) konferansında konuşmacı Scott Gutherie, Silverlight 4 Beta’nın yayınlandığını duyurdu.

Resmi sitesi silverlight.net‘te yer alan şu sayfadan ayrıntılı bilgiye ulaşabilirsiniz.

Channel9′da yeralan video‘dan yenilik olarak nelerin geleceğini izleyebilirsiniz.

Yeniliklerden kısaca bahsetmek gerekirse;

  • Yazdırma ile ilgili yenilikler
  • Zengin Metin Alanı kontrolünün eklenmesi
  • Datagrid üzerinde kolonlara otomatik genişlik verilebilmesi ve Kopyalama desteği
  • Fare tekerlerine gelen destek
  • Sağ tuş desteği
  • Windows’un panosuna erişim imkanı
  • Browser içerisindeki silverlight nesnesinin sürükle-bırak tekniğinde bırakma noktası olarak belirlenebilmesi
  • Webcamerası ve Mikrofon desteği
  • PNG dosya türünün tüm formatlarına tam destek
  • Out-Of-Browser moduna daha çok destek
  • WebBrowser kontrolü
  • İstemci bilgisayarın dosya sistemine erişim yeteneği
  • Google Chrome desteği
  • Multi-touch desteği

Listenin tamamına ve açıklamalarına buradan ulaşabilirsiniz.

Silverlight ekibi 4. versiyonun betasını yayınlarken, Expression Blend ekibi de boş durmamış ve Silverlight 4 çıktı üretebilen Expression Blend versiyonunun beta’sını yayınlamış.

Microsoft Download’da yer alan şu sayfadan Expression Blend Preview for .Net 4 versiyonunu indirebilirsiniz.

jQuery için SlideShow eklentisi : CrossSlide

jQuery ile uygulama geliştirirken en büyük avantajımız, web’de çok fazla plugin bulabilmemizdir.

Bir arkadaşımın sorusu üzerine, slide-show yaptırabileceği jQuery plugin’i aramaya başladım.

Karşılaştığım birkaç plugin’den en çok hoşuma giden, CrossSlide oldu.

Örnek kullanımını görmek için demo sayfasına bakabilirsiniz.

Sıkıştırılmamış hali 11Kb olan plugin’i şuradan indirebilirsiniz. (Nedense plugin’in minify versiyonu bulunmuyor.)

Minify halini arayan geliştiriciler için, plugin’i http://jscompress.com adresinden minify ettirdim. Minify edilmiş halini (6.46Kb) buradan download edebilirsiniz.

Minify edilmiş halini değil, packed halini download etmek istiyorsanız, aynı siteden packed (4.59Kb) ettirdim. Onu da buradan download edebilirsiniz.

jQuery için web’de bulabileceğiniz diğer slide-show eklentileri;

CSS tekniği ile uyarı / bilgi mesaj alanı

Yazdığımız web uygulamalarında, uyarı / bilgilendirme mesajı vermeye her zaman ihtiyaç duyarız.

Gelelim, CSS tekniklerini kullanarak, bu mesaj kutularını nasıl yapabileceğimize.

Öncelikle style’larımızı yazdığımız css dosyasına, şu satırları ekleyelim;

.alert
{
  background: #fff6bf url(exclamation.png) 15px 50% no-repeat;
  text-align: left;
  padding: 5px 20px 5px 45px;
  border-top: 2px solid #ffd324;
  border-bottom: 2px solid #ffd324;
}
.info
{
  background: #f8fafc url(information.png) 15px 50% no-repeat;
  text-align: left;
  padding: 5px 20px 5px 45px;
  border-top: 2px solid #b5d4fe;
  border-bottom: 2px solid #b5d4fe;
}

Şimdi tek yapmamız gereken, paragraf tagları arasına mesajımızı yazmak ve paragraf tagına ilgili class’ı atamak.

Örnek;

<p class="alert">Uyarı mesajı buraya gelecek.</p>

<p class="info">Bilgilendirme mesajı buraya gelecek.
Birden fazla satır olabilir.</p>

İşte sonuç;

CSS_Mesaj_Kutulari

Demo sayfasını görmek ve kodları indirmek için tıklayın.

Şu adreste, bu tekniğin uygulandığı, download edilebilir kodları bulabilirsiniz.

Yazının orjinaline ise şu kaynaktan ulaşabilirsiniz.

CSS ile resim önyükleme (image preloading) tekniği

İstediğiniz resimleri, aşağıdaki css tekniği ile önyükleyebilirsiniz.

#preloadedImages
{
  width: 0px;
  height: 0px;
  display: inline;
  background-image: url(path/imageA.png);
  background-image: url(path/imageB.png);
  background-image: url(path/imageC.png);
  background-image: url(path/imageD.png);
  background-image: url(path/imageE.png);
  background-image: url();
}

Ajax “Yükleniyor” simgesi bulabileceğiniz güzel bir kaynak

Yazdığınız uygulamalarda, yükleniyor simgesine ihtiyacınız olursa, kesinlikle şu siteye bir göz atmanızı tavsiye ederim: ajaxload.info

“Generator” kısmında yer alan seçenekleri, isteğinize / ihtiyacınıza göre belirledikten sonra, “Generate It!” butonuna tıklıyorsunuz.

“Preview” kısmında, yükleniyor simgeniz hareketli olarak beliriyor.

Eğer seçmiş olduğunuz ayarlar sonucu oluşan simge hoşunuza gittiyse, “Download It!” butonuna tıklayarak hareketli gif formatında download edebilirsiniz.

Asp.Net MVC 2 Beta yayınlandı!

17 Kasım 2009 tarihinde, Microsoft PDC’09 (Microsoft Proffessional Developers Conference 2009) konferansında konuşmacı Bob Muglia, ASP.NET MVC 2 Beta’nın yayınlandığını duyurdu.

Microsoft sitesinden ücretsiz olarak download edebilirsiniz.

MVC (Model – View – Controller) hakkında daha fazla yardım almak için; ASP.NET MVC sayfasını ziyaret edebilirsiniz.

MVC 2 Beta versiyonu, Visual Studio 2008 SP1 için toollar içeriyor, fakat Visual Studio 2010 için güncellenmiş tool’ları içermiyor, çünkü MVC 2 release versiyonu zaten VS2010 ile birlikte dağıtılacak.

Şu anda VS2010 Beta 2′de yer alan component’lar ile MVC 2 Beta’da yer alan component’lar uyumsuz oldukları için, VS2010 bu beta versiyonda desteklenmiyor.

ASP.NET MVC 2 Beta’da gelen yeni özelliklerden bazıları;

  • Render Action
  • AsyncController
  • Expression tabanlı Helper class’lar (TextBoxFor, TextAreaFor, vs..)
  • İstemci tarafında onay/kontrol mekanizmalarında yapılan geliştirmeler
  • Boş proje şablonu

Yayınlanmış beta versiyonla ilgili daha ayrıntılı bilgi için şuradaki dökümana bakabilirsiniz.

Aynı konuşmanın devamında Bob Muglia, bundan sonraki işlerinin, yılsonu gelmeden RC (Release Candidate) çıkartmak olduğunu söylüyor.

Asp.net’te web.config ile globalization

Web uygulamalarında, geliştirme yaptığınız bilgisayarınızda türkçe karakterleri düzgün görüyorsanız, fakat uygulamayı sunucuya publish ettiğinizde türkçe karakterlerde bozulma oluşuyorsa (özellikle ğ,ü,ö,ı,ş karakterlerinde); sorun büyük ihtimalle sunucunun dil ayarlarından kaynaklanıyordur.

Sunucunun dil ayarları ile uğraşmak yerine, web.config dosyasında yapacağınız küçük bir değişiklik ile, bu sorunun üstesinden gelebilirsiniz.

Yapılması gereken, System.Web node’ u içerisine;

<globalization fileEncoding="iso-8859-9" responseEncoding="iso-8859-9" />

tagını eklemek.

Yeni bir seri : Kısa Sınav

Özellikle uygulama geliştiriciler için, kısa sınav formatında paylaşımlarım olacak.

Categories: C#, Programlama, SQL, VB.NET, WMI, İnternet Tags: ,

Google, HTTP protokolüne alternatif olarak SPDY üzerinde çalışıyor

Google, “Let’s make the web faster” vizyonu çerçevesinde pazara sürekli yeni ürünler/teknolojiler çıkartmaya devam ediyor.

Şuradan tamamını okuyabileceğiniz döküman ile HTTP protokolüne alternatif geliştirdiğini de öğrenmiş olduk.

Yeni protokole SPDY (SPeeDY şeklinde telaffuz ediliyor) ismini vermişler ve SSL üstünde çalışmasını sağlamışlar.

SPDY protokolünün tanımını yaptıkları dokümanda, HTTP’nin şu limitlerinden bahsediyorlar;

Bağlantı başına tek istek : HTTP, aynı anda tek kaynak talep edebilir, getirebilir. HTTP protokolü aynı anda tek istekte bulunabiliyor ve bu istekleri FIFO (First In, First Out) mantığı ile kuyruğa alıp işliyor.

Browser’lar bu problemi çözebilmek için, aynı anda 2 bağlantı açıyorlardı, 2008 yılından beri hemen hemen tüm browserlar, aynı anda bağlantı sayısını 6′ya çıkarttılar.

Sadece istemci istekte bulunabilir : HTTP protokolünde, sunucudan isteği sadece istemci yapabilir. Hatta sunucu, istemci’nin bir kaynağa ihtiyacı olduğunu bilse bile, istemci adına bu kaynağa erişip, sonucu istemciye döndüremez.

Request ve Response Header’larının sıkıştırılamaması : Günümüzde request header’larının boyutu, 200 bayt ile 2 kilobayt arasında değişiyor. Uygulamanızda cookie vs. kullanıyorsanız, boyut ortalama 700-800 bayt oluyor. Her isteğin (request) ve cevabın (response) headerında yer alan bilginin sıkıştırılmadan taşınması, önemli gecikmelere yol açmaktadır.

Gereksiz header bilgileri : Header’da hiç değişmeyecek bilgilerin (User-Agent, Host, Accept, … gibi) tekrar tekrar gönderilmesi gereksizdir. HTTP protokolü, bu bilgileri her isteğin ve cevabın headerına ekliyor.

Veri sıkıştırmasının varsayılan olmaması : HTTP protokolünde veri, varsayılan olarak sıkıştırılmamış formattadır. SPDY protokolünde Google, varsayılan olarak verinin tamamının sıkıştırılmış formatta olmasını sağlıyor. Devamını Oku…

Categories: İnternet Tags: , , , ,