Osman KURT

Yazılım Uzmanı | MVC Eğitmeni

Seo İçin Global.asax ile Sanal yol Oluşturma

Merhaba arkadaşlar;
Bu makalemizde geliştirdiğimiz projelerimizde url adreslerimizi SEO ( search engine optimization ) Türkçe açılım olarak Arama Motoru Optimizasyonu na uyumlu hale getirmenin yollarından biri olan global.asax kaynaklı olarak nasıl yaparız bunu inceleyeceğiz.

Örneğin bir haber sitesinde yüzlerce haber databaseye kaydedilmiş olabilir ve tüm bu haberlerin detaylarının gösterimi için bizim tek bir page miz vardır ( Örnek : Haber-Detay.aspx ) . Klasik olarak bu haberleri göstermek amacıyla tarayıcıda http://domainisimi/Haber-Detay.aspx?HaberId=125 gibi bir Url gösterimi uygularız. Fakat bu durum SEO için çokta ideal bir seçenek değildir. İlgili projenin hedeflenen kelimelerde arama motorlarında üst sıralarda çıkması için arama motorlarının önem verdiği uygulamaları projelerimize yansıtmamız gerekir. Yani tarayıcının adres çubuğuna http://domainisimi/Haber-Detay.aspx?HaberId=125 gibi bir url değilde http://domainisimi/Haber/Haberin-Basligi.aspx ( burada aspx uzantı şart değildir.html veya istenilen herhangi bir kelimede getirilebilir, yada uzantı belirtilmeyebilir.Bu tamamen bizim tercihimize kalmış bir şey ) şeklinde bir url getirebiliyor olmamız lazım. Bunu sağlayabilmek içinse asp.net de birçok yolumuz var ve makalenin başındada belirttiğim gibi bunu global.asax yardımı ile nasıl yapacağımızı inceleyeceğiz.

<a href="/Haber/<%#Eval("HaberId")+"-"+ (Eval("Baslik") %>.aspx" alt=""><%#Eval("Baslik") %></a>

İlgili verileri veri tabanına bağlanarak aldığımızı varsayıyorum.Pagemizde yukarıda belirttiğimiz şekilde bir link verdiğimizde sistem şu şekilde işleyecektir:

Öncelikle projemizde bir Haber klasörü olmadığı halde "haber" kelimesi hedeflenen önemli bir kelime olduğu için her haberde ( projede yüzlerce haberin olduğu varsayılırsa bu demektirki arama motorları bu projede haber kelimesini o sayıda kayda alacak ve bu kelime bu projede yoğunluk kazanacak ) bu kelimeyi vurgulamak için sanal bir klasör oluşturduk. Haberin ID değeri ve son olaraksa eklenen haberin başlığınıda linkimize çektik.

Şimdi burada şu soru sorulabilir. İyide bizim Haber isminde bir klasörümüz ve o başlıkta bir pagemiz yokki ? Sırf biz Url'i bu şekilde yazdık diye istediğimiz olacak değilya !

Elbette sırf page bu komutu yazdık diye sistem bunu bu şekilde algılamayacak. Ama global.asax işte bu noktada imdadımıza yetişecek ve sisteme bizim olmasını istediklerimizi uygulatacak.

Yukarıdaki komutta aslında biz " eğer Haber-Detay.aspx sayfası çağrılırsa sen bunu Haber diye sanal bir klasör oluştur ve daha sonra haberin ID değerini ve başlığını ekleyerek adresi bu şekilde göster" dedik.

GLOBAL.ASAX


//Pagemizin url bilgisini Request.RawUrl ile alarak daha sonraki aşamalarda kullanabilmek adına string bir değer olarak atıyoruz.

string Yol = Request.RawUrl;

//Aldığımız string Url bilgimizin içerisinde Haber diye bir ifadenin geçip geçmediğiniz kontrol ediyoruz. IndexOf ile yapılan aramalarda sonuç bulunmaz ise geriye -1 değerinin döndürür. Dolayısı ile biz kontrolümüzü sonuç -1 den farklı ise şeklinde yapıyoruz.

if (DosyaYolu.IndexOf("/Haber/") != -1)
{

//Uzantımızı aspx olarak belirtmiştik ve buradada uzantımızı kontrol ediyoruz.
if (System.IO.Path.GetExtension(Yol) == ".aspx")

{

string[] path = System.IO.Path.GetFileName(DosyaYolu).Split('-');
//Son olarak bu durumda arka planda çağrılacak olan asıl page mizi ve detaylarının talep edileceği haberi belirtiyoruz..
Context.RewritePath( "/Haber-Detay.aspx", "", "HaberId=" + path[0], true);

}

else
{
//aksi durumda olmasını istediğimiz bir işlem varsa kodlarımızı bu kısımda belirtiyoruz

}

}

Ve uygulamanın sonunda sonuç ?


Her iki durumdada veriler pagemize istediğimiz şekilde geliyor. Tek fark url bilgisinde Sabit bir page ve artı olarakta ID değerlerinin yerine arama motorlarında çıkmayı hedeflediğimiz kelimeleri çekerek sanal sayfalar oluşturmuş oluyoruz.

Tabi bu uygulamada sistem yöneticinizin IIS üzerinden domaininize aspnet_isapi.dll desteğini vermiş olması gerekmekte. Aksi durumda bu uygulama sonuç getirmeyecektir.

Tercih tabiki size kalmış..

Bir sonraki makalede görüşmek dileğiyle;

Osman KURT

ASP.Net ve XML'e Yazma

Konumuz başlıkta yazdığı gibi Asp.Net ile Xml yazdırmak. Elbet bir kaçınız yada çoğunuz asp.net kullanmaktadır ve bu yüzden bu konu işe yarar diye düşündüm. Hele birde netteki örneklerde benim gibi sorun yaşıyorsanız çok işinize yarayabilir.
İlk olaraktan kullanacağımız kütüphaneleri ekliyoruz.

using System.Xml;
using System.Text;

Ve sonrasında depo database imizde bulunan resim tablomuzdan gerekli bilgilerimizi çekip dataXML.xml isimli xml'imize bunları yazdırıyoruz.


OleDbConnection baglan = new OleDbConnection("provider=microsoft.jet.oledb.4.0; data source=" + Server.MapPath("~/App_Data/depo.mdb"));
OleDbCommand komutt = new OleDbCommand("select * from resim", baglan);
baglan.Open();
OleDbDataReader dr = komutt.ExecuteReader();
XmlTextWriter writer = new XmlTextWriter(Server.MapPath("~/dataXML.xml"), Encoding.UTF8);
writer.WriteStartDocument();
writer.WriteStartElement("galerie");
while (dr.Read())
{
writer.WriteStartElement("img thumbEvents=\"true\" thumbnail=\"" + dr["thumbnail"].ToString() + "\" large=\"" + dr["large"].ToString() + "\" description=\"" + dr["description"].ToString() + "\"");
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Close();
baglan.Close();


Hepsi bu kadarcık.
Kodları okuyunca zaten neyin ne olduğuda çok açık, herhangi bir sorunu da konu altından benimle paylaşırsanız yardımcı olurum.
Neyse bu işlemlerden sonra dataXML.xml'in son halini görmekte hakkınız
Bende çıkan sonuç şu şekilde;


<?xml version="1.0" encoding="utf-8"?>
<galerie>
<img thumbEvents="true" thumbnail="pictures/thumbnails/21IWuqrpiG201.jpg" large="pictures/large/21IWuqrpiG201.jpg" description="Tanım Denemesi" />
<img thumbEvents="true" thumbnail="pictures/thumbnails/2On1WnAzrE702.jpg" large="pictures/large/2On1WnAzrE702.jpg" description="Tanım Denemesi" />
<img thumbEvents="true" thumbnail="pictures/thumbnails/2aYC2LIeZnP03.jpg" large="pictures/large/2aYC2LIeZnP03.jpg" description="Tanım Denemesi" />
<img thumbEvents="true" thumbnail="pictures/thumbnails/2RIeMrGuSTx04.jpg" large="pictures/large/2RIeMrGuSTx04.jpg" description="Tanım Denemesi" />
<img thumbEvents="true" thumbnail="pictures/thumbnails/2VUXUnMgIBn05.jpg" large="pictures/large/2VUXUnMgIBn05.jpg" description="Tanım Denemesi" />
<img thumbEvents="true" thumbnail="pictures/thumbnails/2Sus3UmfNg606.jpg" large="pictures/large/2Sus3UmfNg606.jpg" description="Tanım Denemesi" />
<img thumbEvents="true" thumbnail="pictures/thumbnails/2l6ZE7VOXNQ07.jpg" large="pictures/large/2l6ZE7VOXNQ07.jpg" description="Tanım Denemesi" />
<img thumbEvents="true" thumbnail="pictures/thumbnails/2bPtHCu5syf08.jpg" large="pictures/large/2bPtHCu5syf08.jpg" description="Tanım Denemesi" />
<img thumbEvents="true" thumbnail="pictures/thumbnails/2PGSJwPgaRs09.jpg" large="pictures/large/2PGSJwPgaRs09.jpg" description="Tanım Denemesi" />
<img thumbEvents="true" thumbnail="pictures/thumbnails/2siQCksaJFT10.jpg" large="pictures/large/2siQCksaJFT10.jpg" description="Tanım Denemesi" />
</galerie>

Buraya kadar eksiksiz bir şekilde yazarsanız benimle aynı sonucu alacağınızı düşünüyorum.

Görüşmek Üzere;

Osman KURT

Asp.Net ve URL İşlemleri

Arakadaşlar geçen gün çalıştığım firmada ki çok sevdiğim bir abim kendisinin yöneticisi olduğu bir web sayfasına ait tam 4000 (dort bin) adet sub domain açıcağını söyledi. E tabi sizde takdir edersiniz ki 4000 tane sub domaini açmak her babayiğidin harcı değil yani :). Sağolsun kendisi yardıma bizi layık görmüş bu konu hakkında fikir üretmiş bunların yapılabilirliğini ve yapabilirmiyim diye bana geldi. Bende düşündükleri derya deniz olan bu abimin bazı isteklerinin (baya fazla) yapılabileceğini ve yapabileceğimi söyledim. Tabi kendi işimi aksatmadan :)

Neyse işe ilk olarak bir kolay portal oluşturarak başladım. Sonra bu sub domainlerin google da ilk sıraları zorlaması için portal içine dinamik bir met tag yönetimi yaptım. Bu dinamik meta tag yönetiminin kodlarınıda başka bir yazıda paylaşıcam elbet sizinle. Daha sonra anasayfa kısmında başka bir arkadaşımında yardımıyla asıl web sayfasının veritabanına bağlanarak ordan random bir şekilde 20 adet ürün çektim. Asıl önemli kısım bunları yaparken en kolay en basit ve en kısa zaman da yapmaktı bunun içinde oluşturduğumuz portalın image dosyalarından tutun da css dosyasına kadar olan bütün dosyalarını ana dizinde tuttuk yani açtığımız bütün sub domainler aynı yerden image dosyalarını ve css doayalarını çekiyor. Buda bize çok fazla zaman kazandırdı. Bu olayı yaparken yazılımcı olduğum için bişeyler ürettiğim için gerçekten mutl oldum. Yazılımın tadına vardım. Normalde yaptıığım şey çok küçük bişey ama ortaya bişey koymak gerçekten küçükte olsa bir yazılımcıyı mutlu edebiliyormuş.

Gelelim asıl konuya benim takıldığım bir nokta url yönetimiydi.O da nasıl bişey, açtığımız her subdomainin ismi yaptığımız sitelerde bize lazım olacaktı, metatag'larda kullanmak için. İnternette baya bişey araştırdım. Sonunda buldum. Meğer neler varmış ya :). Şimdi bu bulduğum kod parçacıklarından bazılarını sinle paylaşmak istedim. Çünkü benim dışında sizinde işinize yarayacağına inanıyorum.

Bu işlemlerden bazıları;
 
//root dizini verir.
Response.Write("root dizin : " + HttpContext.Current.Request.Url.Host.ToString());
//sonraki dizinler
Response.Write("sonraki dizin : " + HttpContext.Current.Request.Url.AbsolutePath.ToString());
//Full adres satırı
Response.Write("Full adres : " + HttpContext.Current.Request.Url.AbsoluteUri.ToString());
//Portlu Full adres satırı
Response.Write("Portlu Full adres : " + HttpContext.Current.Request.Url.OriginalString.ToString());
//Portu
Response.Write("Portu : " + HttpContext.Current.Request.Url.Port.ToString());
//Query
Response.Write("Query :" + HttpContext.Current.Request.Url.Query.ToString());
//http
Response.Write("http : " + HttpContext.Current.Request.Url.Scheme.ToString());
QueryString almak için aynı zamanda Request.QueryString["id"] şeklinde bir kullanımda gerçekleştirebiliriz.

Osman KURT
Yazılım Uzmanı

Girişimcilik Kursu

Evet arkadaşlar yaklaşık 10 gün önce başladığım kurs hakkında sizlere bilgi vermek için bu makaleyi paylaşıyorum. MG Danışmanlık adlı bir firmadan aldığım 60 saatlik bir kurs bu, bu kurs da girişimciliğe dair herşeyi bulabiliyorsunuz.Pazar araştırmasından tutun da finansmana, iş planı hazırlamasından tutun da ofisinizi açtığınız ana kadar sizlere bilgiler veriliyor. Bu bilgilerin yanısıra kursta devletin yeni girişimcilere verdiği desteklerden de bahsediliyor. Eğer sizinde aklınızda kendi işinizin patronu olmak varsa bunun için benimle iritibata geçebilir. Her türlü gerekli bilgiyi sağlayacağımdan kuşkunuz olmasın. Özellikle kuracağınız işletme bilişim üzerineyse inanın çok daha fazla yardımcı olabilirim.

Saygılarımla;
Osman KURT 

Nano Teknoloji Semineri

Arkadaşlar bu yazımda sizlere geçen pazartesi günü katıldığım bir seminerden aldığım notları aktaracağım.

Geçen gün bir arkadaşımın tavsiyesi üzerine katıldığım genç girişimciler kulübünün düzenlediği Mehmet ÖZKAN'ın hazırlayıp sunduğu nano teknolojiler seminer'indeydim. Bu seminer söylediğim gibi nona teknolojiler üzerineydi. İlk olarak nano kelimesinin ne demek olduğundan başlanılan seminer bu teknolojinin dünyada ve Türkiye de hangi aşamalarda olduğunu yapılan yatırımları, araştırmaları ve bu teknoloji sayesinde insan oğlunun neler yapabileceğinin güzel bir kanıtı oldu bence. Bu konu beni gerçekten çok etkiledi. Çünkü verilen örnekleri duyduğunuz da sizlerinde şaşırmaması için hiçbir neden yok.

Mesela Amerikan film endüstri'sinin kalbi olan Holl ywood da bugüne kadar çekilen 30-40 bin civarı bir film serisinin tek bir cd halinde elinizin altında bulunma fikri sizce nasıl bir düşünce? inanılmaz dimi! ilk başta bende öyle düşündüm ama değil arkadaşlar nano teknoloji sayesinde bu artık mümkün olacak. Başka bir örnekse siz yürüdüğünüz yerde ayakkabınızın kendi kendini sürekli olarak yenilemesi ve hiç bir şekilde deforme olmaması. Bunlar örneklerden bir kaçı, en önemlisi ise ülkemizde Karadeniz bölgesinde dolup taşan kara kömürden elmas yapılması. Yanlış duymadınız kömürün yapısında bulunan moleküllerin dizilişinde ve yoğunluğunda yapılan değişikliklerin ardından bildiğimiz kömürden artık elmas üretilecek arkadaşlar.

Gelelim bilişim sektörüne;

1980 li yıllardan bu yana gelişmekte olan bilişim sektörü artık bildiğiniz üzere sınır tanımıyor ve her geçen gün daha da ileriye gidiyor. Gelişen nano teknoloji sayesinde artık öyle görünüyor ki üzerinize giydiğiniz ceketinizde bile mikro pc'ler olacak ve bunlar alışılagelmiş bir olay gibi karşılanılacak. Eminim ki ben gibi bir çok bilişimci arkadaşım da şimdiden o günlerin hayallerini kurmaya ve çalışmalar yapmaya başlamıştır bile :) 

Bir sonraki yazımda buluşmak dileğiyle:

Saygılar;

Osman KURT

 

 

ASP.Net de Veri Kaydı

Evet arkadaşlar bu yazımızda asp.net de veri kaydı yapmayı öğreneceğiz.

İlk olarak Default.aspx sayfamıza 1 adet textbox ve 1 adet buton ekliyoruz. Sayfamıza eklediğimiz bu textbox dan veri tabanımıza isim kaydı yapacağız. Sayfamıza textbox ve butonumuzu ekledikten sonra veri kaydı yapacağımız database'imizi tasarlıyoruz.

Veri tabanımızı alt kısımda bulunan resim gibi tasarlıyoruz ve veri tabanı adı olarak ta db.mdb ismini veriyoruz. 

Şimdi ise işin kod kısmını yazalım; Default.aspx sayfamıza eklediğimiz butonun üzerine gelerek çift tıklıyoruz ve kod bloğunu açıyoruz.

 

OleDbConnection cnn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\db.mdb;Mode=ReadWrite;Persist Security Info=False");      

OleDbCommand cmd = new OleDbCommand("insert into isim (ad) values ('" + TextBox1.Text + "') ", cnn);

cnn.Open();

cmd.ExecuteNonQuery();

cnn.Close();

Bu kodu sayfamıza direk kopyaladığımız da yada yazdığımızda çalışmayacak ve hata verecektir. Bu hatayı engellemek ve kodlarımızın çalışmasını sağlamak için kod bloğumuzun en üst kısmında bulunan kütüphane kısımlarına;

Using System.Data.OleDb;

Kodunu ekliyoruz. Bu kodu ekledikten sonra sayfamız sorunsuz bir şekilde çalışacaktır

Saygılarımla;

Osman KURT

 

 

 

Windows Azure Nedir?

 

Professional Developers Conference 2008’de duyurulan Windows Azure aslen bir cloud computing servisidir. Windows Azure’yi daha net açıklamak istersek öncelikle kısaca cloud computing kavramına, ne gibi yenilikler getirdiğine ve yararlarına değinmemiz gerektiğine inanıyorum.

Cloud Computing nedir?

Cloud Computing, uygulamalarımızı sistem üzerinde herhangi bir kuruluma gerek duyulmaksızın web ortamı üzerinden çalıştırılabilmesi ve kullanılabilmesine olanak sağlayan bir teknoloji olarak karşımıza çıkarmakla birlikte bilişim sözlüğüne bazı yeni kavramlar kazandırıyor. Bu yeni kavramlara kısaca değinecek olursak.

Software as a Service : 

Uygulamaların servis olarak internet tarafında çalıştırılmasına imkan sağlar.

Platform as a Service :

Platformların servis olarak internet tarafında çalıştırılabilmesine imkan sağlar.

Infrastructure as a Service :

Altyapının servis olarak internet ortamında çalıştırılabilmesine imkan sağlar.

Security as a Service :

Güvenlik çözümlerinin internet ortamında servis olarak çalıştırılabilmesine imkan sağlar.

Storage as a Service :

Verilerin internet ortamında depolanmasına imkan sağlar.

Gibi bizlere yeni kavramlar sunuyor. İlerleyen zamanlarda daha fazla kavramlar katılacağına inandığım Cloud Computing’in bizlere avantajları peki nelerdir.

Cloud Computing’in avantajları nelerdir?


 

Cloud Computing kavramı mekân bağımsız ortamlarda çalışarak verilere her türlü ortamdan her an erişe bilebilmesi ve üzerlerinde çalışabilmesi imkânını bizlere sunuyor. Düşünüldüğünde dizüstü bilgisayarlarımızı veyahut taşınabilir disklerimizi bağlı kalmadan her türlü ortamda dosyalarımıza erişerek çalışabilme olanağı ve dosyalama maliyetlerinin düşmesi en önemli iki avantaj olarak karşımıza çıkıyor. Ayrıca hizmetlerin bir servis olarak sunulması yazılım korsancılığı ile savaşta önemli bir avantaj olarak geliştirilen yazılımcıların en doğru şekilde en doğru kitlelere güven içinde sağlanmasını sağlıyor.

Tekrar Windows Azure’ye dönecek olursak yukarıda da bahsettiğim üzere Windows Azure bir Cloud Computing servisi. Windows Azure’nin çok gelişmiş bir servis olması ve geliştiricilere Net Framework, Sharepoint, SQL Server ve Windows Live servislerini Microsoft sunucu buluntu üzerinde barındırma imkânı sağlaması ayrıca Microsoft’un birçok ürününün Azure üzerinde çevrimiçi servis olarak sunulabilmesi Windows Azure’nin Anything as a Service mantığıyla bir Cloud OS işletimi sistemi olarak adlandırmamızı sağlıyor.


 

Ayrıca Visual Studio gibi geliştirme ortamlarında Windows Azure SDK sayesinde Windows Azure uygulamaları geliştirilebilmesi ve geliştirilen uygulamaların Microsoft sunucu bulutu üzerinde barındırılabilmesi ve diğer geliştirici ve kullanıcılarla paylaşılabilmesi tamamıyla internet’i bir bilgisayar’a dönüştürme fırsatını bizlere sağlıyor. Visual Studio 2010’da bu sdk’nın ilgili pack içinde dahili geleceğini düşünüyorum.

Windows Azure üzerinde uygulama geliştirmeye başlarken?

Windows Azure şu an bir ön inceleme sürümü olarak sunulduğu için sadece belli kitlelere Microsoft Connect üzerinden başvuru şartıyla Azure Service Platform davet kodu ile kabul yapılıyor. Davet kodunuzu almak için Microsoft Connect üzerinden ilgili formu doldurarak başvuru yapmanız gerekiyor. İlgili davet kodunuz başvurunuzun değerlendirilmesi sonucunda başvurunuz uygun bulunduğunda tarafınıza 15 gün gibi kısa bir süre içinde tarafınıza iletilerek Azure Service Platform erişiminiz hizmete açılıyor.

Şu an için Azure üzerinde uygulama gelişebilmeye imkan sağlayan Windows Azure SDK 
1.0.1.0 release olmuş durumda

Windows Azure SDK’nın kurulması ve uygulama geliştirilmesine başlanabilmesi için aşağıdaki gerekli yazılımların sisteminizde sağlanmış olması gerekiyor

o Windows Vista SP1

o .NET Framework 3.5 SP1

o IIS 7.0 (with ASP.NET and WCF HTTP Activation)

o Microsoft SQL Server Express 2005 or Microsoft SQL Server Express 2008

o Windows PowerShell (optional)

Yukarıdaki gereksinimlerde görüleceği üzere Windows Azure SDK şu an sadece Windows Vista SP1 ve Windows Server 2008 üzerinde geliştirmelere imkân sağlıyor.

Windows Azure ile ilgili detaylı bilgiyi ve Windows Azure SDK’yı aşağıdaki kaynaklardan bulabilirsiniz;

1. http://www.microsoft.com/azure/default.mspx

2. http://msdn.microsoft.com/en-us/azure/cc994380.aspx

3. https://connect.microsoft.com/site/sitehome.aspx?SiteID=681


Bu Makalemin sizlere faydalı olması dileğiyle,

Saygılar;

Osman KURT

 

Sonunda Be Blog!

Evet arkadaşlar başlıktan da anlaşıldığı üzere sonunda blog sayfamı açmış bulunmaktayım. Mesleğimiz gereği sizinde tahmin ettiğiniz gibi her bilişimci'nin bir blog yada web sayfası olması şart gibi bişey oldu olmayana yan gözle bakıyorlar artık. Bizde geri kalmadık blog sayfamızı açtık:)

Burası işin latifesiydi, blog sayfamı hem kendimi ifade etmek hemde edindiğim bilgileri, tecrübeleri diğer bilişimci arkadaşlarımla ve bu sektöre ilgi duyan herkesle paylaşmak istediğim için açtım. Bu konuda çok değerli öğütlerini benimle paylaştığı için ve blog sayfamı açmam konusunda beni yönlendirdiği için sayın Resul ÇAVUŞOĞLU hocama çok teşekkür ederim. Geçte olsa onu dinledim ve blog sayfamı açtım :)

Dediğim gibi blog sayfamda gerek teknoloji gerek bilişim gerekse de günlük hayata dair çoğu bilgiye ulaşmanızı sağlayacağım, benimle irtibata geçerek sizde bilgilerinizi benimle paylaşabilirsiniz. Makale dolu günlerde buluşmak dileğiyle.

Saygılar;

Osman KURT