Otomatik Mühendis

NHibernate ile İyimser Denkleme

Databasedeki bir kaydın aynı anda birden fazla session tarafından update edilmesi sonucu data kaybı yaşanabiliyor. ReadUncommited şekilde select edilen bir kayıt, update edilene kadar başka bir session tarafından update edilirse, artık güncel olmayan bir kaydı (dirty) update etmiş oluyoruz.

Bunun önüne geçmek için NHibernate’in sunduğu Optimistic Lock’u kullanabiliyoruz. Mapping class’a DynamicUpdate.True ve OptimisticLock.All veya OptimisticLock.Dirty ekleyerek update esnasında bu tablodaki kaydın en güncel halini mi update ettiğimizi kontrol edebiliyoruz. Eğer güncel olmayan kaydı update etmek istersek, bu sayede hata alıp bunu handle edebiliyoruz.

DynamicUpdate.True:
Update SQL’inin runtime’da dinamik olarak oluşmasını sağlıyor.

Okumaya devam »


Sayfaya Resim Gömmek

Tasarımlarımızda kullandığımız bazı ufak resimleri kod olarak sayfalarımıza gömebiliriz. Bu HTTP isteklerini azaltacaktır. En basitini düşünecek olursak toplu olarak gönderdiğiniz epostalarınızda ki görseller bu şekilde içeriğe gömülürse, eposta okunduğunda sitenize HTTP istekleri gelmemiş olur. Tabi bu da takip için kullanılan bir yöntem olduğundan en azından ufak bir resim takip amaçlı kullanılabilir.

Hem konudan kopmamak, hem de takip olayını havada bırakmamak için kısaca açıklayayım. Eposta içeriğindeki bir görsele her hangi bir sayfanın adresini verirseniz, eposta açıldığında o sayfaya istek gelecektir. Bu sayfa üzerinden o epostanın okunup okunmadığını kontrol edebilirsiniz. En iyisi bu konuyu başka yazıda örneklerle anlatayım. Ayrıca bu konuda madmimi.com‘u öneririm.

Bu yöntemin kötü yanı IE’de çalışmaması. Tabi ki sorunun etrafından dolaşan çözümler mevcut. Bu işlemleri StyleSheet ile yapıp IE için ayrı bir CSS dosyası hazırlamanız gerekecektir. Diğer taraftan bu şekilde gömülü resimler için boyut kısıtları mevcut. O nedenle daha küçük boyuttaki tasarım için kullandığınız resimler için kullanabilirsiniz. Ayrıca Base64 kodlanan resimler aslına göre %33 daha büyük boyutta oluyorlar. Bunu da göz önüne almalısınız.

Okumaya devam »


Veritabanı Modelleri

http://www.databaseanswers.org/data_models/

Ara sıra yolumun düştüğü bir web sitesinden bahsetmek istiyorum. Projeye başlarken veritabanı planlama sırasında çoğu ihtimali göz önünde bulundurmaya çalışırız. Aslında projenin en önemli adımıdır. Database Answers sitesi bu konuda daha önce uygulanan yöntemleri göstererek adeta veritabanı tasarımı için ilham kaynağı oluşturuyor. Tasarımınızdan ne kadar emin olursanız olun yine de üretime geçmeden önce burada ki muadillerini bir inceleyin. Birebir ihtiyacınızı karşılayacak bir model olmayabilir ama ders alınacak çok örnek var.

Okumaya devam »


Windows’da Sertifikalar

Yazılımlarımızı veya verilerimizi koruma altına alabilmek için sertifikalara ihtiyaç duyarız. Yazılım geliştiriciler olarak, üreticilerin bizlere sunduğu SDK’larla ürettiğimiz uygulamaları yayınlamak için yine bu sertifikalardan faydalanırız. Bunlar kapalı kutular olduğu için yükleme sırasında tatsız anlar yaşanabilir. Ben iki farklı hata ile karşılaştım ve bunların çözümü aşağıdaki şekildedir;

Eğer Keyset does not exist. hatası veriyorsa ve gerekli bilgileri yazdığınızdan eminseniz, yetkilerle ilgili bir sorun yaşıyor olabilirsiniz. O sertifikayı kullanan uygulamanızı çalıştırdığınız kullanıcının yetkilerini kontrol ediniz. Yetkilerin sebep olup olmadığını test etmek isterseniz IIS üzerinde Application Pool’da uygulamanıza Local System kullanıcısı ile giriş yetkisi verin. Eğer sorun yetkilerde ise bu şekilde çalışması gerekecektir.

Diğer hata ise Certificate could not be found. Please ensure the thumbprint and cert location values are correct. şeklindedir. Bu hata kullandığınız kütüphaneye göre farklılık gösterebilir. Sonuç olarak ulaşılamayan bir sertifika söz konusudur. Eğer sertifikaları doğru şekilde yüklediyseniz ve bu hatayı alıyorsanız o zaman yanlış yere yüklemişsinizdir. Doğru konuma taşımak için aşağıdaki adımları takip edebilirsiniz;

Okumaya devam »


ASP.NET MVC ile Dosya Yükleme

Dosya yükleme bir çok uygulamada gerekmektedir. Aşağıdaki kodlar ASP.NET MVC ortamı için hazırlanmış en basit yöntemi göstermektedir. Ayrıca yüklediğiniz dizindeki tüm dosyaları gösteren bir kod parçası da mevcuttur.

Boş bir ASP.NET MVC projesi oluşturduktan sonra Views klasörü altına Home klasörünü ekliyoruz. Home içerisine de Index.cshtml adında bir sayfa oluşturduktan sonra şu kodları yazıyoruz;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<h2>FileUpper</h2>

<form action="/Home/Index" method="post" enctype="multipart/form-data">
 <label for="desc">Description:</label>
 <input type="text" name="desc" id="desc" />
 <br />
 <label for="file1">Filename:</label>
 <input type="file" name="files" id="file1" />
 <br />
 <input type="submit"  />
</form>

@if (TempData["files"] != null)
{
 <ul>
  @foreach (string file in (string[])TempData["files"])
  {
   <li>@file</li>
  }
 </ul>
}
Okumaya devam »