Android Sony Ericsson Xperia Neo Wifi IP Problemi

28 Mar

Merhabalar,

Sony Ericsson Xperia Neo markalı android işletim sistemli telefonuma işletim sistemi güncellemesi yaptıktan sonra, ne hikmetse evdeki ağımadan faydalanamaz hale geldim. Ağa bağlanıyorum fakat saniyeler içinde bağlantı kopuyordu. Epeyce uğraştırdı beni. Yaptığım araştırmalar sonucunda çözümü IP sabitleyerek bulabildim.

Ağ ayarlarından, gelişmiş ayarlar bölümüne girerek , “Statik IP Kullan” seçeneğini işaretleyerekIP ayarlamalarını elle vererek bu sorunu şimdilik aşmış gibi görünüyorum. Böyle bir sorunla karşılaşıyorsanız bu yöntemi deneyebilirsiniz. Sizin için de çözüm olabilir.

IP: 192.168.1.102
Gateway: 192.168.1.1
Subnet Mask: 255.255.255.0
DNS1: 8.8.4.4

Bu çözümü sadece sony telefonlarda değil samsung telefonlarda da uygulayabilirsiniz. Muhtemelen sorun android işletim sisteminin yeni sürümlerinden kaynaklanıyor.

Tekrar görüşmek dileğiyle.

Windows 7 üzerine NoSQL MongoDB kurulumu

12 Mar

MongoDB sitesinden işletim sisteminize göre(64bit, 32bit) olan sürümü indirin. Kurulumu yapacağınız yeri belirleyin. Ben kendi bilgisayarımda D:\ sürücüsünü kullanmayı uygun gördüm. D:\ sürücüsü üzerinde MongoDB adında bir dizin oluşturup içerisine verilerin ve log kayıtlarının atacağı dizinleri şu şekilde belirliyoruz.

MondoDB içerisine logs ve data dizinlerini biz oluşturuyoruz. Ardından logs dizini içerisine mongolog.txt adında bir metin dosyası oluşturuyoruz. Bu dosyaya log kayıtları atılacak.

Artık kuruluma hazırız. Başlat -> cmd yazarak “komut istemini” sağ tılayarak yönetici modunda çalıştırıyoruz. Yönetici olarak çalıştırmazssak kurulum sırasında log dosyasına yetki sorunu oluştuğuna dair kayıtlar atılacaktır.

Komut sistemine kurulum için gerekli komutu giriyoruz.

Kurulum tamamlandığına göre oluşturduğumuz MongoDB servisini çalıştırabiliriz. Başlat -> “Yerel hizmetleri görüntüle” Hizmetler penceresinden MongoDB servisini başlatıyoruz.

Servis başlatıldığına göre şu anda browser ortamından raporlara bakabiliriz. Web tarayıcımıza localhost:28017 yazdığımızda aşağıdaki gibi bir pencereyle karşılaşıyoruz.

Kurulum bitmiştir hayırlı olsun. İyi çalışmalar.

Single SingleOrDefault ve First FirstOrDefault Farkı

11 Mar

LINQ sorgularında seçimler yaparken Single, SingleOrDefault, First ve FirstOrDefault extension metodları sık sık başvurulan metodlardır. Bu metodları kullanırken bazen beklenmeyen durumlarla karşılaşabiliriz. Bu metodlar arasındaki farkları bildiğimiz taktirde istenmeyen durumlardan da kurtulmuş oluruz.

Şimdi “Single ve SingleOrDefault arasındaki fark nedir?” ve aynı şekilde “First ve FirstOrDefault arasındaki fark nedir?” sorularının cevabını aramaya çalışalım.

Tek rakamları içeren int tipinde bir dizimiz olduğunu varsayalım. Bu diziden herhangi bir teksayıyı seçmek istediğimizde hangi durumda hangi sorguyu kullanmalıyız?

      int[] oddNumbers = { 1, 3, 5, 7, 9 };

SingleOrDefault: Eğer dizi içinden sadece bir tane sayı seçmek istiyorsak ve seçim şartımız sağlanmıyorsa, bu durumda int tipinin varsayılan değeri olan 0(sıfır) döndürülsün istiyorsak SingleOrDefault seçimini kullanmalıyız.

      int[] oddNumbers = { 1, 3, 5, 7, 9 };

      int number = oddNumbers.SingleOrDefault(n => n.Equals(4));

      Console.WriteLine(number);

Yukarda görüldüğü üzere dizi içerisinde 4 değeri olmadığı için program çıktısı 0 olacaktır.

Eğer seçim sonucunda birden fazla değer dönerse InvalidOperationException fırlatılacaktır.

      int[] oddNumbers = { 1, 3, 5, 7, 9 };

      int number = oddNumbers.SingleOrDefault(n => n > 1);

      Console.WriteLine(number);

Yukarıdaki kod parçası hata fırlatılacaktır. Çünkü 1’den büyük olan, birden fazla eleman vardır.

Single: Eğer seçimimiz sonucunda sadece bir tane eleman geleceği garanti ise, bu durumda Single seçimini kullanabiliriz. Eğer şartımızı sağlayan hiçbir eleman dönmezse veya şartımızı sağlayan birden fazla eleman dönerse, bu iki durumda da istisnalar fırlatılacak ve hata ile karşılaşmış olacağız.

      int[] oddNumbers = { 1, 3, 5, 7, 9 };

      int number = oddNumbers.Single(n => n.Equals(3));

      Console.WriteLine(number);

Yukarıdaki örnekte şartımız sağlandığı için 3 sonucu çıktı olarak gösterilecektir.


      int[] oddNumbers = { 1, 3, 5, 7, 9 };

      int number = oddNumbers.Single(n => n.Equals(2));

      Console.WriteLine(number);

Yukarıdaki örnekte ise 2’ye eşit olan herhangi bir eleman olmadığı için InvalidOperationException istisnası fırlatılacaktır.

FirstOrDefault: Bu seçimde de mantık SingleOrDefault ile aynıdır. Ancak bu seçimde istenen şartta ilk eleman seçilir. Örneğin dizinin ilk elemanı, dizinin 2’den büyük ilk elemanı gibi.

First: Mantık Single ile aynıdır, ancak seçilen ilk elemandır.

      int[] oddNumbers = { 1, 3, 5, 7, 9 };

      int number = 0;

      number = oddNumbers.FirstOrDefault(n => n > 9);  // Sonuç: 0
      number = oddNumbers.FirstOrDefault(n => n == 3); // Sonuç: 3
      number = oddNumbers.First(n => n == 5);          // Sonuç: 5
      number = oddNumbers.First(n => n > 2);           // Sonuç: 3
      number = oddNumbers.First(n => n > 9);           // Sonuç: HATA

      Console.WriteLine(number);

Umarım faydalı olmuştur. Tekrar görüşmek üzere.

ASP.NET MVC Controller Test Ortamında UpdateModel Davranışları

4 Mar

Bu yazıda ASP.NET MVC ortamında test sınıflarımı hazırlarken karşılaştığım küçük bir ayrıntıyı analtmak istiyorum.  Bu noktadan itibaren kullanacağım örnek ASP.NET MVC3 ortamında yürütülen Nerddinner projesindeki Edit action metod testi olacaktır. Neden Edit action metodunu test ediyorum? Bunun sebebi Edit işlemi sırasında Controller temel sınıfının helper metodları olan UpdateModel veta TryUpdateModel metodlarının özel bir durumunun olması.

UpdateModel helper metodu, form ortamında bir bilgi güncellemesi yapıldığında, formdan  post yöntemi ile gelen değerleri ilgili nesneye bağlamak için kullanılır. Aşağıdaki örnekte görüldüğü üzere FormCollection içierisinden gelen form bilgileri, UpdateModel(dinner) ile dinner nesnesini güncellemektedir.


[HttpPost, Authorize]
public ActionResult Edit(int id, FormCollection collection) {

       Dinner dinner = dinnerRepository.Find(id);

       if (!dinner.IsHostedBy(User.Identity.Name))
            return View("InvalidOwner");

       try {
            UpdateModel(dinner);
            dinnerRepository.Save();
            return RedirectToAction("Details", new { id=dinner.DinnerID });
       }
       catch {
            return View(dinner);
       }
}

O halde bu noktadan sonra şunu anlıyoruz ki test ortamında da UpdateModel metodunu kullanan metodların testi için FormCollction nesnesi kullanmalıyız. Bu güncelleme işlemi nasıl yapılmaktadır? UpdateModel tarafından  Controller sınıfının “ValueProvider” özelliğine bir FormCollection nesnesi atanarak yapılmaktadır.

[TestMethod]
public void EditAction_Should_Redirect_When_Update_Successful() {

      // Arrange
      var controller = CreateDinnersControllerAs("SomeUser");
      int id = 1;

      FormCollection formValues = new FormCollection() {
         { "Dinner.Title", "Another value" },
         { "Dinner.Description", "Another description" }
      };

      controller.ValueProvider = formValues.ToValueProvider();

      // Act
      var result = controller.Edit(id, formValues) as RedirectToRouteResult;

      // Assert
      Assert.AreEqual("Details", result.RouteValues["Action"]);
      Assert.AreEqual(id, result.RouteValues["id"]);

}

Dikkat: FormCollection kullanılmayan test metodları UpdateModel metodunun çalıştırılması(invoke) sırasında NullReferenceException hatası verecektir.

Soru: Eğer Edit action metoduna parametre olarak FormCollection değilde nesnenin kendisi atılsaydı veya bir ViewModel patterne sahip bir nesne gönderilirse ne oladak?

DinnerFormViewModel adında bir nesne ve bu nesne içinde de Dinner tipinde Dinner adında bir property olduğunu varsayalım.


[HttpPost, Authorize]
public ActionResult Edit(int id, DinnerFormViewModel model) {

       Dinner dinner = dinnerRepository.Find(id);
       if (!dinner.IsHostedBy(User.Identity.Name))
            return View("InvalidOwner");

       try {
            UpdateModel(dinner, "Dinner");
            dinnerRepository.Save();
            return RedirectToAction("Details", new { id=dinner.DinnerID });
       }
       catch {
            return View(dinner);
       }
}

Bu durumda UpdateModel metodunun, prefix(ön ek) belirlenebilen versiyonunu kullanıyoruz. Yani DinnerFormViewMolel içerisindeki “Dinner” ile başlayan nesneler “ValueProvider” Property’sine bağlanacak.