10 Haziran 2014 Salı

MVC Title ve Meta description Türkçe Karakter Sorununun çözümünün çeşitleri :)

Yaşasınn uzun süre sonra bloguma yazasımı getirecek birşey oldu. :) Çok büyük birşey değil ama bana unuttuğum "o hissi" yaşattı.

Nopcommerce diye ücretsiz bir e-ticaret paketi üzerinde oyalanıyorum şu sıra. Program MVC kullanılarak yazılmış ve gayet kapsamlı. Neyse bunu kullanırken elbette mono laneti peşimi bırakmadı, pek pek çok gıcık sorunla karşılaştım, çözüme bir şekilde ulaştım. Çoğunu not ettim, kimisi de aklımda. Bunu da yayınlayayım bari.

(Burada bir karikatür vardı ama telif yerim diye kaldırdım. Herkese dava açıyorlarmış karikatür paylaşılıyor diye. Karikatürün doğasına hiç uymuyor bence bu tavır :-/ Bir şey olacağı yok ama insan yontuyor işte)

....

Asıl sorun ve çözüme geçmeden bu e-ticaret mevzusunun kodlamayla hiç alakasının olmadığını kaydetmek isterim. SEO dan anlamam, detayları sevmem. Programı çalışır hale getirip yayınladıktan sonra bir hevesim kaçtı ki sormayın. Neyse ki abim varmış, bana SEO konusunda yardım etti (yardımdan çok el koydu demek daha doğru .p ) ve motivasyon sağladı. :) Teşekkür ederim canım abim.

Sıkıntım başlıktan da anlaşılacağı üzere sayfa kaynağını görüntüle dediğimizde sayfa Title ının ve Descriptionlarında türkçe karakterlerin bozuk çıkması. Pek çok çözüm yolu denedim.

Mesela;
  • <title>sayfamın başlığı</title> 'nı
<title>@Html.Raw(sayfamın başlığı)</title>

şeklinde güncelledim başlığı, ancak işe yaramadı.


  • Ardından sayfamın head kısmına
    <meta http-equiv=Content-type content=text/html; charset=UTF-8 />
    <meta http-equiv=Content-type content=text/html; charset=windows-1254 />
    <meta http-equiv=Content-type content=text/html; charset=iso-8859-9 />

taglarını ekledim. Herkeslerde olmuş ama bende olur mu hiç,, yine olmadı :)

  • Sonra web.config'ime system.web 'in altına 
<globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" culture="tr-TR" uiCulture="tr-TR" />

ekledim. Bu da yaygın bir çözümmüş ama yine olmadı. Hiç olur mu bende Allah aşkına güldürmeyin beni :)


  • Daha birçok burada yayınlamak istemeyeceğim saçma denemem oldu, araştırdım çokca. Sonunda hadi bunu da deneyeyim bakayım diye web.config 'e 
<httpRuntime encoderType="System.Web.Security.AntiXss.AntiXssEncoder,
                             System.Web, Version=4.0.0.0, Culture=neutral,
                             PublicKeyToken=b03f5f7f11d50a3a"/> 

ayarını nakşettim. Ümitsiz bir şekilde sayfa kaynağını görüntüle dediğimde ise sorunumun çözüldüğünü mutluluk içinde gördüm.

Çözümü şurada buldum;
http://stackoverflow.com/questions/14580876/disable-encoding-of-unicode-characters-in-asp-net-mvc3

En çok şu linkte çözüm için ümitlendim;
http://www.bayramucuncu.com/asp-net-mvc-meta-description-turkce-karakter-sorunu/

İnşallah başka şeyler de olur bloguma yazasımı getiren.
---------------------------------------

Önemli Not: Ben bu türkçe karakter sorunu diye tanımladığım şeyin SEO için olumsuz olacağını düşündüğümden düzeltmeye çalışmıştım. Meğer alakası yokmuş. :) Sonuç olarak o kadar emeğim boşa gitti :D Mono lanetiiiii....
Eğer siz de bu yüzden düzeltmek istiyorsanız şu linke göz atın;

http://social.msdn.microsoft.com/Forums/tr-TR/7b0c0a2d-8386-412d-b258-c2b68edd7132/aspnet-mvc-projemde-trke-karakter-sorunu?forum=aspnettr

Kolay gelsin :)

15 Şubat 2014 Cumartesi

MVC Model CheckBoxFor RequiredField ValidationAttribute


MVC'yle ilk tanıştığımda enn çok hoşuma giden yanı sanırım modelleri tanımlarken kullandığımız özelliklerdir. :) zorunlu alan mı, sayı alanı mı, e-mail alanı mı orada toptan tanımlayıp, hata mesajlarını belirleyip alanlarını şip şak kullanabiliyorsun. Hoş yani.. :)

Bir gün yine bu hoşlukları yaşarken true false değerini required yapmam gerekti. Yine her zaman yaptığım gibi Required field yazdım bool alanın üzerinee.. CheckBoxFor olarak kullanmaya kalktım. :) Sonrasında çalışmadı ve tabii hemen ulu googleun başına geçtim =) Bir de ne göreyim bunun için kendi validation Attributeumuzu yazmamız gerekiyormuş :) Bunu nereden mi uydurdum? İşte de buradan;

http://stackoverflow.com/questions/4730183/mvc-model-require-true

Bu da ValidationAttribute'dan türeyen metodum;

public class IsValidAttribute : ValidationAttribute
{
        #region Overrides of ValidationAttribute

    public override bool IsValid(object value)
    {
        if (value == nullreturn false;
        if (value.GetType() != typeof(bool)) throw new InvalidOperationException("Can only be used on boolean properties.");

        return (bool)value == true;
    }

        #endregion

}

Bu da kullanımım.. Aynı diğerleri gibi..;

        [IsValid(ErrorMessage = "Hizmet Kullanım Şartları'nı kabul etmelisiniz.")]
public bool TermsAndConditions { getset; }

------------

Aşkolsun size cinlerim. Canım sıkıldı diye geldim iki hoş laf edip eğlemediniz gönlümü.. :)

Motivasyonumu nasıl geri kazanacağım, o azme nasıl geri döneceğim bilmiyorum. Umarım ileride şu adam gibi olmam;

(Burada bir karikatür vardı ama telif yerim diye kaldırdım. Herkese dava açıyorlarmış karikatür paylaşılıyor diye. Karikatürün doğasına hiç uymuyor bence bu tavır :-/ İsmet abi senin bi İstanbul'u yenme projen vardı ne oldu o? Kalkarsam kalbini kırarım.)
Ah başarısız projelerim ah :) 
Hayydi bakalım.. Cennet projem miii CİNnet projem mi yenecek. :P

Hayırlı projeler herkese :)

28 Ocak 2014 Salı

MySQL "Failed to find or load the registered .Net Framework Data Provider" hatası


Merhaba cinlerim..  Yeni bir işten çıkışla daha karşınızdayım :)) Yok mu artık? Yok mu başka tepki arkadaş herkes mi aynı tepkiyi verir :)) Belki şurada kendimize bir başarı hikayesi yazıyoruz,, ne biliyorsunuz? :P

Farkettiyseniz işten çıkış dedim,, işsizlik demedim,, keza başladığımız Ticket System projesi üzerinde çalışmaya devam ediyorum. Bir yandan da iş aramaya başlarım belki,, ama sıkılmadım desem yalan olur şu ekabir sınıfından. Bakalım hayırlısı, iyi insanlarla karşılaşıp, ben de karşılaşılan o iyi insanlardan olayım da gerisi teferruat. ;)

Teferruatları geçtikten sonra başlığımızdaki asıl konuya girelim.. :)

Biliyorsunuz Ticket Systemimiz için seçmiş olduğumuz vtys MySQL. Neden bunu seçtiğimizle ilgili Temel Reis taramalı tüfek gibi  nedenler saymıştı. Bunlardan aklımda en çok kalanlar beleşlik ve hız :P türk müyüm neyim. Neyse belki daha sonra neden MySQL diye klişe bir yazı da yazarım. Klişeleri sevmesem de hayatımızda büyük yerleri olduğundan görmezden gelemeyiz. Bir de klişe oluyorlarsa bir bildikleri de var sonuçta.

İşte biz bu MySQL i seçtik ya hani, tabi kendisini de indirip kurduk ister istemez. ( http://dev.mysql.com/downloads/windows/installer/ ) Veritabanını da tasarladık Navicat yardımıyla.. Tablolar alanlar fln günümüzü gün ederken sıra sistemimizden veritabanına kullanıcı kaydetmeye geldii...

Zaten MVC ye alışmaya çalışan haleti ruhiyem insert işleminde "Failed to find or load the registered .Net Framework Data Provider" hatasını görünce bayağı bozulmuştu aslında yine beceremedim diye.. Sonra Temel Reis yine içime su serpti ve bu hatanın çok yaygın olduğunu söyleyip olaya el attı. Araştırdık ettik, çözüme ulaştık yılların tecrübesinin yardımıyla;
Meğer .Net Framework ümüzün machine.config dosyasına şu ayarı nakşetmek gerekiyormuş;


  <system.data>
    <DbProviderFactories>
 <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>

Nerede bu machine.config; bende şuradaydı; C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config
sizde nerede bilemem tabii ki. Arama özelliğinden yararlanabilirsiniz. ( :p )

Bunu yaptıktan sonra visual studio yu bir kapatıp açın. Sonrasında o hatadan kurtulmuş ve veritabanınıza attığınız o ilk bebek kaydı gözleri dolu dolu seyredebilir olacaksınız.

Allah bağışlasın, vatana millete hayırlı bir kayıt olsun inşallah :)

15 Ocak 2014 Çarşamba

MVC ile kaynaşma bahanem : Ticket System :PP


Dün gece uzun bir gece oldu.. İşten eve döndüm ve Boss umla beraber teamviewer üzerinden ticket sistemimizin startını verdik. :) Kendisi çok heyecanlı projeyle alakalı,, halbuki ben o projeyi kulağıma en kolay ve öğretici geldiği için seçmiştim. Meğersem buz dağının bir de görünmeyen kısmı varmış..


(Burada bir karikatür vardı ama telif yerim diye kaldırdım. Herkese dava açıyorlarmış karikatür paylaşılıyor diye. Karikatürün doğasına hiç uymuyor bence bu tavır :-/ Merhaba Fıstık (Şişman penguen))

Şöyle ki; ben sadece insanlar gelecek ben projeme şunu istiyorum diyecek, şu sorun var diyecek destek elemanları da bu istekleri öncelik sırasına göre yapacak sonra sorunu kapatacak ve herşey olup bitecek,, kullanıcılar ve destek elemanları güzeel güzel geçinip gidecekler zannediyordum. :) Evet başlangıç olarak hemen hemen böyle,, ama benim öylesine seçtiğim bu projenin bir de birkaç fazladan fazı olacak gibi görünüyor.( fazla ve faz kelimelerini bilinçli olarak yan yana kullandım. :P geyik ruhum sınır tanımıyor. Çok çılgınım. ) Neyse işte böyle birşeyler, bu fazla fazları sırası gelirse yazacağım inşallah. Olur da yaşarsam o zamana kadar. :)

İlk yaptığımız işlem Navicat üzerinde MySQL kullanarak database imizi modelledik. İlk aşamada kullanıcılar, şirketler, sorunlar, sorun nesneleri, dosyalar gibi temel tabloları oluşturduk. Bossum proje sonradan büyüyeceği için yapıyı alabildiğine esnek tuttu. Sonrasında pek çok yeni tablo ekleyeceğiz gibi görünüyor.
Sonrasında ise VisualStudio üzerinde boş bir proje oluşturup içine Entity, web ve resources projelerimizi ekledik. Ve tabii ki benim için ana amaç olan MVC yi seçtik. Bu arada sanırım Bossum beni kıskanıyor.(aramızda kalsın) Çok şanslı olduğumu yineleyip duruyor. Yazık çok sıkıntı çekmiş kendisi öğrenirken benim ise onun gibi büyük bir nimetim var. :)) Ne yapalım rızk Allah tan .. Ben de pek çok başka yerde kaybetmişimdir muhtemelen.. 

Neyse yine araya salata soktuğumun farkındayım. :) Gelelim en eğlenceli kısma.. Kullanacağımız template. Daha önce UI dan nefret ettiğimi söylemiştim ya. Sanırım nefretim bu işi çok güzel yapanlara olan kıskançlığımdan kaynaklanıyordu. Ve onlardan birisine daha template arayışımız esnasında denk gelmiş oldum.
Yine bootstrap kullanacağız elbette. Template işini de https://wrapbootstrap.com/ daki templatelere bakarak halletmiş olduk. Seçtiğimiz template şu; http://wrapbootstrap.com/preview/WB0573SK0
Bizi template i incelerken görmeniz lazım. Yapan adama küfürler mi etmedik ( tabii ki lafın gelişi, ben hiçbir zaman kötü kelime kullanmam,, belki bazen ima ederim :P ) yuhalamadık mı, anormal gözüyle mi bakmadık. En sonunda baktık olmayacak,, işini bu kadar harika yaptığı için teşekkür maili atmaya karar verdik. =) Hihi. Ne kadar da şiriniz. 

Neyse template imizi aldıktan sonra projemize bunu dahil ettik, ve Home page imizi de Menu, header gibi parçalara ayırdık Partial ekleyerek. Sonra ben esnemelere başladım ve susadım. Boss umdan zar zor izin alıp (:p abartık cümle başlangıcı)  mutfağa gittim ki annemle karşılaştık. Yok efendim bu neymiş, böyle iş mi olurmuş, kaç saattir çalışıyormuşuz, sonra uyanamıyormuşum, hemen bırakacakmışım çalışmayı fln (abartık cümle bitişi :p) Hep ben suçluydum zaten.(duygu sömürüsü cümlesi B) ) Neyse bu olanları Bossuma duygu sömürüsüyle anlattıktan sonra tüm heyecanına rağmen ve hala çalışmak istemesine rağmen bıraktı.. 

Bu yeni proje beni de heyecanlandırıyor. Umarım öz güven sorunumu da yenip hızlı bir şekilde adapte olabilirim. Geç kalmışlığımın ezikliğinden kurtulup Allah ın bana Bossumun vesilesiyle bahşettiği bu fırsatı değerlendirebilme ümidiyle, esen kalın. ;)

11 Ocak 2014 Cumartesi

MVC ile kaynaşma bahanem : Ticket System :P


Eveeet..
Yeni bir başlangıçla daha karşınızdayım. :) Devamıyla da karşınızda olmaya devam edeceğimi umuyorum sayın cinlerim. Biliyorsunuz,, yeni başlangıçları severim ( mecburen :p ).. Bitişini genelde beceremesem de "Önemli olan katılmaktı." cümlesinin verdiği teselli bana her zaman yeni başlangıçların cesaretini de vermiştir. Hı sadece o cümlecik mi cesaret veriyor derseniiz ve ben de evet dersem "pis mikrop nankör" diye bir serzeniş de alabilirim asıl cesaret kaynağımdan. Ama bu kaynağım şu anda bir sır. Onu henüz açıklamayacağım.. Bu nedenle o cümleciki neden gösterip yoluma devam edeyim. Hem zaten neden neden göstermem gerekiyormuş ki? Hesap mı vericem gelmişim 4972 yaşıma. Etrafta cirit atmaktan ve inlerle top oynamaktan vaktiniz kalırsa katılırsınız başlangıcıma. Kendi kendime atarlandım durup dururken iyi mi. :P 

Her zamanki gibi laf salatasıyla girişimi yaptıktan sonra gelişme kısmıma da yine farklı bir laf salatası türüyle devam edeceğim. Sonuçta otobur bir cinsim. Salatayı severim. Geyiği de seviyorum sanırım. Yine geyiklik çanlarım çalmaya başladı. Ama üzgünüm. Artık "Take it serious." zamanındayım. :(

Başlık belli. MVC ile kaynaşma bahanem.. Neden mi bahaneye ihtiyaç duydum? Çünkü MVC biraz korkutuyor beni, sanki biraz soğuk bir tip.. :-/ önceden beri de beni korkuttular hep MVC çok karışık çok zor diye.. Tanışmamız çok kötü olmadı aslında,, basit bir mobil uygulama geliştirdim Boss umla beraber. Kaynaşmamda da Boss um yanımda olacak ve siz cinlerimle de beraber daha iyi öğreneceğim inşallah. Bahanem ise MVC mimarisini ve .Net'i kullanarak Ticket/Support System yapmak.. Bu sistemle geliştirdiğimiz uygulamalardaki hataların, müşterilerin yeni isteklerinin vs yönetimini hedefliyoruz. MySql, MVC ve biz bu işi hallederiz. Ama UI'dan nefret ediyorum. :S (söyleyesim geldi.)

Bu sadece bir başlangıç yazısıydı dediğim gibi.. Bu yüzden herhangi bir bilgi barındırmıyor. Bundan sonraki her aşamayı yazmaya çalışacağım. Böylece bilgi barındıran yazılar yazmış olacağım. "Take it serious." yapmış olacağım. Bu iyi birşey. :P

Bu yazı bana çok boş göründüğünden bir iki link paylaşsam olur.
  
http://mvc.nedir.com/

http://www.ahmetcigsar.com/yazilim/yazilim-muhendisligi/mvc-nedir/

Oldu. :)