Sql Server Error Code 2337

14 Tem

Sanal  makinede oluşturulmuş Windows Server 2003 üzerinde SQL Server 2008 R2 yükleme işlemi sırasında karşılaşılan bir sorundan bahsetemk istiyorum. Sanal makineye SQL Server 2008 R2 sürümünü de Volume olarak ekleyip, bu sanal disk üzerinden kurulum yapmaya çalıştığımda, kurulum sonuna doğru bir hata ile karşılaştım.

Hata şu şekildeydi:

Microsoft SQL Server 2008 Setup
The following error has occurred:
The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2337.

Hemen ardından gelen pencerede ise, yükleme durumu hakkınad şu şekilde olumsuz bir rapor verilmiştir.

Tam da belayı bulduk dediğim kısım işte burasıdır. Kurulum hatayla sonuçlanmıştır.

Kurulum log dosyasını incelediğimde şu şekilde bir rapor vardı karşımda.

Overall summary:
Final result: SQL Server installation failed. To continue, investigate the reason for the failure, correct the problem, uninstall SQL Server, and then rerun SQL Server Setup.
Exit code (Decimal): -2068643839
Exit facility code: 1203
Exit error code: 1
Exit message: SQL Server installation failed. To continue, investigate the reason for the failure, correct the problem, uninstall SQL Server, and then rerun SQL Server Setup.
Start time: 2011-06-07 11:16:15
End time: 2011-06-07 12:03:35

Sorunun çözümüyle alakalı olarak uzmanların görüşlerinden biri, Sanal sürücü üzerinden değil, fiziksel sürücü üzerinden kurulumun yapılması yönündedir.

Ancak ben sorunun çözümü olarak SQL Server 2008 R2 yerine SQL Server 2008 (R2 olmayan) sürümünü yine sanal sürücü üzerinden kurmayı denedim ve sonuç alabildim.

Web Chart Aracı Visifire

13 Tem

Verilerin grafiksel gösterimi konusunda piyasada birçok araç mevcuttur. İşte bunlarda bir tanesi de Visfire Chart. Buradan aracı inceleyebilmek mümkün. Web ortamında online demolar sayesinde canlı görüntüleri izleyebiliyorsunuz.

Desteklenen platformlar :

  • Silverlight
  • SharePoint
  • WPF
  • Windows Phone

Özellikle silverlight ortamında çalışan chart tool bulmak biraz zordur. Bu açıdan visifire aracı ilgimi çekmiştir.

Visual Studio code coverage özelliğini açmak

12 Tem

Visual Studio 2010 üzerinde geliştirdiğimiz Test Driven uygulamalrın ne kadarının test kapsamında olduğunu anlamak için code coverage aracından faydalanırız. Tabi bu özellik Visual Studio default test aracıyla çalışırken geçerli. Piyasadaki diğer test araçlarını kullanıyorsanız onlara göre ayar yapmalısınız.

Code coverage özelliğini açmak için şu adımları izlemeliyiz:

  1. Solutution Explorer penceresindeki [Local].testsettings dosyasına çift tıklayın.
  2. Açılan “Test Settings” dialog penceresinde, “Data and Diagnostics”  menüsünü seçin.
  3. Açılan listede, “Code Coverage” [Resim 1] seçerek ‘”Configure” butonuna tıklayın.
  4. “Code Coverage Detail” [Resim2] penceresinden kod kapsamını merak ettiğiniz assembly yi seçin.
  5. Testinizi çalıştırın ve “Test Tools” toolbar içerisindeki “Code Coverage Results” seçeneğinden sonucu inceleyin.
Resim-1
Resim-2

Login failed for user ‘IIS APPPOOL\DefaultAppPool Hatasi

12 Tem

Uygulamalarınızı hazırlayıp IIS üzerinde çalıştırmaya hazırlanırken birden bir hatayla karşılaşırsınız.

Hata : Login failed for user ‘IIS APPPOOL\DefaultAppPool’. şeklindeyse çözüm gayet basit. Aslında çözümün nasıl olduğunu öğrendikten sonra “gayet basit” diyebiliyorum. Normalde benim de canımı sıkmıştı bu hata.

Neyse, çözüm için IIS’i çalıştırıp aşağıdaki resimde görüldüğü gibi DefaultAppPool ayarlarını LocalSystem olarak ayarladığımızda olay tamamdır.

Dictionary Key Value değerlerinin birleştirlmesi

11 Tem

Dictionary tarzı, Key – Value çiftlerinden oluşmuş tiplerin elemanlarını birleştirerek göstermek istediğimiz durumlar oluşatuğunda ne yapmalıyız? Ben genelde bu tarz işlemlerde LINQ nimetlerinden faydalanmayı uygun buluyorum. Aksi taktirde diziler ve indexleriyle uğraşmak zorunda kalıyorum.

Web uygulamalarında URL oluştururken parametre değerlerini girmek istediğimizde, parametre adları ve değerlerini Key Value çiftleri olarak değerlendirebiliriz.

Örneğin şu şeklide bir URL oluturmak istiyoruz. www.bayramucuncu.com/urunler?id=5&categoryId=9&color=blue

Bu URL’in Querystring bölümünü (id=5&categoryId=9&color=blue) kısmını bu şekilde oluşturmaya çalışalım.

Öncelikle query string oluşturacak metodu yazmalıyız. Bu metodumuz da anahtar ve değer ikililerini tutan bir Dictionry<string,string> parametresi almalı.


private string queryString(Dictionary<string, string> parameters)
 {
      if (parameters == null)
          throw new ArgumentNullException("Parametreler boş gönderilemez");

      var pairs = parameters.Select(i => string.Format("{0}{1}{2}", i.Key, "=", i.Value));
      var values = string.Join("&", pairs);

      return string.Join("&", pairs);
 }

Bu şekilde, amaçladığımız query string  oluşturma işlemini yapacak metodu hazırladık. Şimdi de sonuca bakalım.

queryString(new Dictionary<string, string> { { “id”, “5” }, { “categoryId”, “9” }, { “color”, “blue” } });

şeklinde gönderilen bir dictionary sonucunda karşımıza şu şeklide bir resim çıkıyor.

ve işlem başarılı!

Tekrar görüşmek dileğiyle.

Asp.net mvc meta description türkçe karakter sorunu

11 Tem

Asp.net mvc ile geliştirdiğim uygulamalarda seo konusuna geldiğimde karşılaştığım bir sorunu da meta etiketlerinin açıklamalarının dinamik olarak oluşturmaya çalıştığımda karşıma çıkar karakter sorunuydu. Bu sorunu, HTML encoding yüzünden yaşadığımı düşünüyorum.

<!DOCTYPE html>
<html lang="tr">
<head>

<title>@ViewBag.Title</title>

<meta name="description" content="@(MvcHtmlString.Create(ViewBag.Description))"/>

Normalde meta description içerisinde “sürü” yazmalıydı ama yazmıyor işte.

Bu sorunu düzeltmek için meta description kısmında küçük bir değişiklik yaparak şu şekle getirdiğimde sorun ortadan kalkıyor.

<meta name="description" content="@(Html.Raw(ViewBag.Description))"/>
[code]

ve sonuç aşağıdaki gibidir.
[code language="xml"]<meta name="description" content="sürü" />

Aslında burada karşılaştığımız sorun razor view engine tarafından alınmış bir güvenlik önlemi. Yani bir kullanıcı, sayfamınız yorum kısmına sürekli alert veren bir javascript kodu yazdığında, bu yorum Html tarafında direk render edilirse, sayfa her açıldığında kullanıcıların karşısına alert veren bir pencere çıkacaktır.

Bu tarz javascript ataklarını önleyebilmek için, helper sınıfları ve metodları kullanılır genelde. Örneğin yukarda kullanılan Html.Raw metodu yardımı ile bu içeriğin ne olduğunu bildiğimizi belirtiyor ve html olarak render edilmesini istiyoruz.

Aslında kıllanabileceğimiz bir kaç tane yöntem  var. Şu şeklide sıralayabiliz.

1- <meta name="description" content="@(ViewBag.Description)"/>
2- <meta name="description" content="@(MvcHtmlString.Create(ViewBag.Description))"/>
3- <meta name="description" content="@(new MvcHtmlString(ViewBag.Description))"/>

Bu yöntemlerin hepsinin temelinde yatan IHtmlString arayüzünün ToHtmlString() metodudur.

Tekrar görüşmek ümidiyle.

Ajax Loader Spinner Gifleri

10 Tem

Ajax destekli sitelerde “işlem devam ediyor” ya da “yükleniyor” gibi efektlerin hareketli  (gif uzantılı) resimlerle ifade edilmesini çoğumuz görmüşüzdür. Özellikle de sosyal paylaşım sitelerinin vazgeçilmez ifadeleridir bu resimler. Buradaki siteden siz de istedğiniz şekilde bir spinner oluşturabilirsiniz.

Spinner resimlerin şeklini, arka plan ve hareketli kısmın renklerini de seçmek tamamen size kalmış.

Birkaç örnek indirdim bile.

Tekrar görüşmek dileğiyle.

C# Linq ileKelime( Word ) Histogram Oluşturma

10 Tem

Konuya direk dalmadan önce histogramın ne olduğunu açıklamadan geçmek istemiyorum. Histogram, bir topluluktaki elemanların sayısal sıklıklarını, yoğunluklarını belirten tablolar diyebiliriz. Gösterim şekli olarak genelde grafiksel bir gösterimi vardır. İsterseniz tablo şeklinde de tutabilirsiniz. Ancak Grafiksel gösterimler daha akılda kalıcıdır.

Histogramı c# tarafında özetleyecek bir kelime analiz uygulamasının uygun olacağını düşündüm. Bu amaçla, bir döküman içerisindeki kelimelerin hangi sıklıklarla kullanıldığını çıkaran bir uygulama yapmayı planladım.

Uygulamaya başlarken öncelikle bir analiz yapan sınıf tasarlamam gerektiğine karar verdim. Analyzer adında bir sınıf oluşturarak işe başladım. Bu sınıf içerisinde de verilen text ifadenin kelimelerine ait bir histogram tablosu çıkaran GetTextHistogram adında metod oluşturdum.


public class Analyzer
{

    public IEnumerable<AnalyzeItem> GetTextHistogram(string text)
    {

       var array = text.Split(' ');
       var result = array.GroupBy(i => i.ToLower())
                         .Select(i => new AnalyzeItem { Word = i.Key, Count = i.Count() });

        return result;

    }

}

public class AnalyzeItem
{
      public string Word { get; set; }
      public int Count { get; set; }
}

Örneği incelediğimizde kelimelerin tekrarlanış miktarını veren bir tip olan AnalyzeItem tipi de göze çarpmakta. Bu tip hangi kelimenin kaç kez tekrar ettiğini bize vermekte. Örneğin  “bayram” kelimesinin kaç defa tekrar edildiğinin sonucunu tutmaktadır.

Burada LINQ nimetlerinden de faydalanmadan yapamadım. Eğer LINQ olmasaydı dizilerle kırk takla atarak sonuca ulaşmaya çalışacaktık.

Programın kullanımı da şu şeklide olacaktır.

static void Main(string[] args){

      string text = "Merhaba syn Ali Veli, size uygun şartlarda kredi imkanı ABCBANK ta. ABCBANK www.abcbank.com da. Kredi almak istiyorsanız ABCBANK a gelin.";

      Analyzer analyzer = new Analyzer();

      var data = analyzer.GetTextHistogram(text);

      foreach (var item in data)
      {
         Console.WriteLine(item.Count + "\t" + item.Word);

      }

}

Dilerseniz uygulamayı bir extension method haline de getirebilirsiniz. Onu da şu şeklide yapmak mümkündür.


public static class Extensions
{
    public static IEnumerable<AnalyzeItem> Histogram(this string text)
    {
       var array = text.Split(' ');
       var result = array.GroupBy(i => i.ToLower())
                         .Select(i => new AnalyzeItem { Word = i.Key, Count = i.Count() });

       return result;
    }

}

Bu extension metodla kodun kullanımı epeyce değişiyor.

static void Main(string[] args)
{
     string text = "Merhaba syn Ali Veli, size uygun şartlarda kredi imkanı ABCBANK ta. ABCBANK www.abcbank.com da. Kredi almak istiyorsanız ABCBANK a gelin.";

     foreach (var item in text.Histogram())
     {
           Console.WriteLine(item.Count + "\t" + item.Word);

     }
}

Artık bütün string tiplere histogram uyglamak mümkün hele geldi.

Asp.net MVC Jquery UI autocomplete

3 Tem

JQuery kütüphanesinin sunduğu güzel bir özelikte autocoplete özelliğidir.  Yani bir html input text içerisine yazmaya başladığımızda bize bazı öneriler sunan bir özelliktir. Arama motorlarında sıklıkla gördüğümüz öneri listeleri, bize fikir verebilir.

Bu işlemi gerçekleştirmek için öncelikle, JQuery tarafından kullanılacak olan action metodun hazırlanması gerekmektedir.


public class HomeController : Controller
{
     public ActionResult Index()
     {
          return View();
     }

     public ActionResult Search(string term)
     {
         var data = names.Where(m => m.Contains(term))
                         .Select(m => new { label = m });

         return Json(data, JsonRequestBehavior.AllowGet);
     }

     private List<string> names = new List<string>
     {
         "adana",
         "antalya",
         "ankara",
         "trabzon",
         "tokat",
         "istanbul",
         "izmir",
         "içel",
     };
}

Bizim kullanacağımız metod Search action metodudur.  Yani text kutusuna bir giriş yaptığımızda, JQuery otomatikmen Search() metoduna gelerek, girdiğimiz yazıyı names listesinden arayarak bize sonuçları getirecektir. Canlı uygulamalar için buradaki gibi bir listeyi kullanmak yerine, veritabanına erişerek gerçek verileri alabiliriz.

Şimdi de Index view sayfasına giderek bir text kutusu oluşturarak devam edelim.


<h2>Test Page</h2>

<script type="text/javascript">

$(function () {

       $(":input[data-autocomplete]").each(function () {

            $(this).autocomplete({
                source: $(this).attr("data-autocomplete")
            })
      });

});

</script>

<div>
<label>Arama</label>
<input type="text" data-autocomplete="@Url.Action("Search","Home")" />
</div>

Index view sayfamızın içeriği yukarıdaki gibi olmalıdır. Ne yaptığımıza biraz değinelim.

Öncelikle $(“:input[data-autocomplete]”) şeklinde bir multiple selector kullanarak tüm autocomplete property olan elementleri aldık. Daha sonra, bu elementlerin içerisinde each() metodu ile gezintiye çıktık. Autocomplete mekanizması, source(veri kaynağı) ihtiyacı olan bir kontrol olduğundan, hangi text input’a autocomplete özelliği vereceksek ona data-autocomplete adına bir property tanımlıyoruz. Ardından bu özelliğe vermek istediğimiz kaynağı belirtiyoruz. Biz burada Home controller sınıfının Search action metodunu belirtiyoruz. Bu sayede input texte yazmaya aşladığımızda Search metodu otomatikmen tetikleniyor.

Yukardaki şekildeki sonucu elde etmiş oluyoruz.

JQuery Bildirim Paneli Hazırlama İşlemi

3 Tem

Web dünyasına Javascript’in gücünü gösteren kütüphane olan JQuery, artık geliştiricilerin gözdesi. JQuery sayesinde neler yapılmıyor ki. Özellikle sosyal paylaşım sitelerinde sıklıkla göze çarpan bildirim panelleri benim de dikkatimi çekmedi diyemem. Hemen klavyenin başına geçerek bir iki deneme yapmaya karar verdim ve güzel bir sonuç çıktı ortaya. Dilerseniz beraber inceleyelim.

Web sayfalarında sağ veya sol panellerde, son bildirimleri kayan yazılar şeklinde efektlendiren bir demo yapmaya çalışalım.

Bu işlem için gereksinimimiz bir jquery kütüphanesi referansı ve kodlama için bir ortam. Ben bu uygulama için notepad aracını seçtim. Notepad içerisine html döküman oluşturacak kodları girerek işe başladım ve ardından jquery kodlarını akledim.


<script>

   $(function () {
       setInterval("updateShouts()", 3000);
   });

    function updateShouts() {
       $('#foo').prepend('<div style="display: none;">Yeni içerik.'+Math.random()+'<p><a href="#">İçerik linki</a></p></div>');

       $('#foo').find(".newContent:first").slideDown();

       $('#foo .newContent:gt(5)').remove();
}

</script>

<div id="foo"></div>

JQuery ile bir timer nesnesi kullanılarak, 3 saniyede bir yeni içerik oluşturularak,  panel içerisine eklenmektedir.

Buraya kadar olan işlemler, html bilgisi ve javascript bilgisi ile halledilebilecek şeklide gelişmiştir. Veriler elle üretilmiş ve animasyona sunulmuştur. Tabi gerçek hayat hikayelerinde, yukarıda tanımlanan updateShouts() metodu bir action metoda giderek veri alacak şekilde düzenlenip canlı bir uygulama da hazırlanabilir. Hatta action metod, outputcache mekanizmasıyla desteklenip, gereksiz yere veritabınına gitmeden, direk cache verilerine erişilebilir. Bu da hızda ciddi bir artış sağlar.

Sonuç olarak  yukarıdaki şekildeki gibi bir panel elde edilebilmektedir.

Jquery slide bildirim paneli çalışan uygulamasına buradan ulaşabilirsiniz.