Arşivler: Şubat 2011

SHA1 Şifreleme ve The .Net Way…

Yorum Yapılmamış

12/02/2011 at 16:58Kategori:.Net

SHA1 algoritmasını kullanarak bazı kullanıcı verilerinin şifrelenmesi ve bunların veritabanında kısmen de olsa dönüştürülemez olarak tutulması konusunda yapılacak işlem kullanıcıdan ilk şifre bilgisinin istendiği anda veritabanına SHA1 şifrelenmiş olarak kaydettirmek ve daha sonra kullanıcı giriş yapmak istediğinde girilen şifrenin SHA1 hash değerini alarak veritabanındaki önceden şifrelenmiş değer ile karşılaştırmaktır. Böylece bir güvenlik açığından dolayı sisteminizde depolanan şifreler hiçbir zaman okunamazlar ve böylece belki de her yerde aynı şifreyi kullanan kullanıcımızın güvenliği tehlikeye atılmamış olur. Bunu yapmanın bir yolu byte olarak veriyi parçalayıp şifrelemektir ya da .net ile gelen Form Authentication sırasında kullanılması için yazılmış tek satırlık kodu çalıştırabilirsiniz.

FormsAuthentication.HashPasswordForStoringInConfigFile("şifrelenecek veri burada...", "sha1");
// Bu metod string döndürür ve değeri istediğimiz gibi kullanabiliriz.

ASP.Net MVC3 Validation İşlemleri

Yorum Yapılmamış

09/02/2011 at 16:43Kategori:.Net | MVC

Web uygulamalarında en çok ihtiyaç duyulan şeylerden birisi Validation İşlemleridir.Form verilerini  kullanıcı tarafında(Client side)  javascript ile kontrol ettirmeniz, en azından boş bırakılmaması gereken alanları (requied fields) giriş almaya zorlamak ya da bazı alanları belirli aralıklar dışında değer girişinden korumak ( range validation) gerekebilir. Bu işlemler form tabanlı klasik geliştirme ortamlarında view kısmında çözülür. Ama MVC yapılarında php ve java frameworkler de dahil genel olarak model kısmında yapılan annotationlar ile bu işi çözmeye çalışırlar. Sebebi ise model kısmındaki tanımlamaların  view kısmında yapılacak tanımlamalara göre daha basit olması ve  verilerin sağlıklı girilmesinden yine Model kısmını geliştirenlerin yani kısaca data tier kısmında çalışanların sorumlu olmasıdır. ASP.Net MVC ile de bu işlemlerin yapılması oldukça kolaydır. Model kısmında tanımlamalarını yaptığımız veritabanı modellerimizde alanların üst kısımlarına yaptığımız annotationlar ile bu işlemleri kolayca gerçekleştirebiliriz.


[Required(ErrorMessage="Bir fiyat girmelisiniz...")]
[Range(0.01, 100.00,ErrorMessage="Fiyat 0.01 ile 100.00 TL arasında olabilir")]
 public decimal Fiyat { get; set; }

Yukarıdaki örnekte olduğu gibi System.ComponentModel.DataAnnotations alanındaki attributelarla bu işlemleri tanımlamak oldukça kolay ve etkili. Bu alanlarda tanımlanabilecek annotationlar ve açıklamaları şöyle:

  • Required: Girilmesi zorunlu alan oluşturur.
  • DisplayName:  Form alanlarında kullanmak üzere text tanımlamaya yarar.
  • StringLength: Alanda girilebilecek en fazla karakter sayısını belirler.
  • Range: Alan için girilebilecek en küçük ve en büyük sayısal değerleri tanımlar.
  • Bind:  Parametrelere ya da form değerlerini modele yüklerken dahil edilecek ya da çıkarılacak alanları belirler.
  • ScaffoldColumn: Editör Formlarından alan saklama işlemini gerçekleştirmeye yarar.
using System.Web.Mvc;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace MvcOrnekUygulama38.Models
{
    [Bind(Exclude = "KullaniciId")]
    public class Arac
    {
        [ScaffoldColumn(false)]
        public int KullaniciId { get; set; }
        [DisplayName("Arac")]
        public int AracId { get; set; }
        [DisplayName("Marka")]
        public int MarkaId { get; set; }
        [Required(ErrorMessage="Bir araç takma adı seçilmeli...")]
        public string TakmaAd { get; set; }
        [Required(ErrorMessage="Fiyat girmelisiniz...")]
        [Range(0.01, 100.00,ErrorMessage="Fiyat 0.01 ile 100.00 arasında olmalı...")]
        public decimal Fiyat { get; set; }
        [DisplayName("Arac Resim Url")]
        [StringLength(1024)]
        public string AracResimUrl { get; set; }
    }
}

Bu şekilde model sınıfını güncellediğimizde view kısmında javascript ile form validation işlemleri yapılmakta ve girişlerin daha sağlıklı olması sağlanmakta.

İlerleyen zamanlarda MVC üzerine daha düzenli yazılar yazmaya çalışacağım.

“Entity Framework Invalid Object Name dbo…” Hatası

Yorum Yapılmamış

08/02/2011 at 16:53Kategori:.Net | MVC

ASP.Net MVC 3 ile çalışırken Entity Framework 4 kullanımı POCO ile oluşturduğumuz ve Entity Model ile veritabanına işaretlediğimiz nesnelerin isimlendirilmesinde tekillik - çoğulluk karmaşası yaşanabilmekte. Örnek olarak çoğul isimlendirdiğiniz DbSetlerinin veritabanı ile konuşması sırasında tekrar EF tarafından çoğula dönüştürülmesi  "Entity Framework Invalid Object Name dbo.tabloadi" şeklinde hata almamıza yol açabiliyor. Böyle bir senaryoda yapmamız gereken Entity Model sınıfı içerisinde OnModelCreating olayını override ederek name convention özelliğini devre dışı bırakmamız gerekiyor.  Entity Model sınıfı içerisine yazdığım

protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
kodu ile bu hatayı önledim.
Mutlu günler dilerim...

Bir başarı hikayesi: Android

1 Yorum

07/02/2011 at 00:48Kategori:Android

Android son zamanlarda adını oldukça fazla duyurmayı başaran ve çok popüler  akıllı telefonlar için Google tarafından üretilmiş bir açık kaynak kodlu işletim sistemi. Bu kadar meşhur olmasının birçok sebebi olabilir ama bunlardan en çok göze çarpanlar; kaliteli bir sistem altyapısına sahip olması (linux kerneli kullanıyor), yaygın yazılım geliştirme platformlarından birisi olan java temelleri kullanılarak oluşturulan bir SDK'ya sahip olması, Google gibi büyük bir şirket tarafından desteklenmesi ve reklamının yapılması, telefon üreticileriyle iyi anlaşabilmesi, sistem gereksinimleri bakımından fazla seçici olmaması ve neredeyse her cihaz üzerinde çalışabilmesi, açık kaynak topluluklarıyla iyi anlaşabilmesi ve insanlardan destek alması, ücretsiz olması vs. sayılabilir. Ayrıca en önemlisi de insanların eleştirel değil de heyecanla yaklaşması da Android'in şanslı olduğunun göstergesi olabilir.

Peki şu anda Android hangi konumda diyecek olursak, Android akıllı telefon pazarında en büyük payı alarak Microsoft, Apple, Symbian ve RIM(Blackberry) 'i solladı. Bunu da son bir yıl içerisindeki çok yüksek orandaki satışla yakaladı. Peki ya sonrası? Bundan sonra ne olacağı yine şirketlerin politikalarına göre şekillenecek ama artık Android bir platform ve uzun yıllar piyasada Android olarak kalacaktır. Ama benim bu başarı hikayesinden çıkardığım birkaç önemli not da var. İlk olarak yıllardır piyasada yazılım alanında tekel oluşturuluyor diye bağıran akademisyenler, gönüllüler ya da piyasadaki yazılımcı, mühendis çalışanlar acaba bu olaya ne diyecekler? Bazen gerçekten kaliteli bir ürün çıkmamasından dolayı piyasada tekel oluşumuna yol açmıyor muyuz? Kaliteli ürün derken yıllarca arıza vermeyen ya da yeniden başlatmaya ihtiyaç duymayan yazılım/ işletim sistemi çözümlerinden bahsetmiyorum. Yazılımınız çok sağlam temeller üzerinde kurulu olabilir ama dökümantasyon,kullanım / kurulum kolaylığı, son kullanıcıya yakınlık, fiyat, destek ve diğer parametreler yönünden piyasaya ne kadar uygun? Ya da  Google Chrome benzer bir örnek oluşturacaktır. Kullandığım tarayıcılar içerisindeki bence şu ana kadar en stabil ve sağlıklı çalışan tarayıcı hakkında sırf Google ürünü olduğu için bu kadar yayıldı sözleri benim üzerimde ne kadar etki oluşturabilir dersiniz? Pİyasadaki sorun gerçekten yazılım olarak kaliteli ürünlere ihtiyaç duyulması ve devam eden kalitesizliğin sonucunda hala çürük şeylerin el üstünde tutulmasıdır. Bunu da "bir an önce oturup hiçbir yerde olmayan bir ERP projesi yazalım" modundan çıkıp, "yurt dışında insanlar nasıl proje geliştiriyorlar incelemeliyiz önce" moduna girerek yakalayabiliriz sanırım. Kendini girişimci hissedenlere duyurulur...

MVC Frameworkler Üzerine…

Yorum Yapılmamış

06/02/2011 at 16:58Kategori:.Net | Java | SVN | Test Driven Development

Senelerdir MVC framework ile ilgili çok farklı dillerin MVC uygulamalarını incelemekteyim. Ama hala kullanmayı alışkanlık haline getirebildiğim bir framework ya da platform seçemedim. Web tabanlı uygulamalarda PHPnin form olayından sonra kim ne derse desin  gördüğüm en mantıklı sistem olan ASP.Net Web-Forms ise kendine has bir sistemle işleri yürütüyor. ViewState ve postback gibi mekanizmaları iyi anladığınızda ve yerine göre bu özellikleri iyi yönettiğinizde çoğu uygulamayı hızlı ve sağlam bir şekilde üretebiliyorsunuz. Benim de ilk gördüğüm ve kullanmaya alıştığım sistem Web Forms olduğundan dolayı MVC mantığına alışmam kolay olmadı.

Servlet ve JSP yapılarından sonra ASP.Net Web Formsun karşısına çıkarılmış gibi düşünülen JSF ise yine kullanmaya bir türlü alışamadığım bir teknoloji oldu. Çünkü yapısı yine MVC idi.  Bu arada Java için Play Framework ve PHP CodeIgniter, CakePhp gibi MVC frameworkleri de inceleme ve üzerinden birkaç gün de olsa yoğunlaşıp denemeler yapma fırsatım oldu. Tüm bu deneyimlerimi bir noktada birleştirip kendime bir MVC yol haritası çıkardım diyebilirim.

  1. MVC metodolojisini uygulamak istediğin platformda MVC kullanmadan da yapmak istediklerini yapabilecek bilgi ve beceriye sahip olmalısın. Yani PHP , Asp.Net ya da Java/JSP bilgisi çok gerekli ve yararlı olacaktır.
  2. MVC frameworkleri her zaman her projede kullanamayacağın için yine bu platforma ait diğer klasik yöntemleri de bilmelisin. Neredeyse 1. madde ile aynı anlama geliyor.
  3. MVC frameworkler URL  formatlama, veri erişimi , organizasyon, kod okunabilirliği ve güncellenebilirlik gibi konularda çok fazla kolaylık getirdiği için bir an önce projelerde uygulayacak şekilde öğrenilmeli...

Evet MVC frameworkler hakkında  söyleyeceklerim bunlar. Yine de olayı abartmamalı ve her projede Persistence, DAO, Model, Controller, View kullanmalıyım, Unit Test yapmalı ve SVN, Git gibi araçlarla source control olayına girmeliyim gibi bir derdim yok çünkü her zaman KISS (Keep It Simple and Stupid) prensibinin ne kadar doğru olduğunu projelerde görüyorum.

Bol katmanlı projelerde yer almanızı dilerim...